From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27647 invoked by alias); 13 Dec 2015 22:12:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 27626 invoked by uid 89); 13 Dec 2015 22:12:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.5 required=5.0 tests=AWL,BAYES_50,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 13 Dec 2015 22:12:19 +0000 Received: from svr-orw-fem-04.mgc.mentorg.com ([147.34.97.41]) by relay1.mentorg.com with esmtp id 1a8EsI-0002Gx-Ul from Catherine_Moore@mentor.com ; Sun, 13 Dec 2015 14:12:14 -0800 Received: from NA-MBX-04.mgc.mentorg.com ([169.254.4.113]) by SVR-ORW-FEM-04.mgc.mentorg.com ([147.34.97.41]) with mapi id 14.03.0224.002; Sun, 13 Dec 2015 14:12:14 -0800 From: "Moore, Catherine" To: Richard Henderson , "gcc-patches@gcc.gnu.org" CC: "jason@redhat.com" , Matthew Fortune Subject: RE: [RFA] Compact EH Patch Date: Sun, 13 Dec 2015 22:12:00 -0000 Message-ID: References: <55FC6505.8040203@redhat.com> In-Reply-To: <55FC6505.8040203@redhat.com> Content-Type: multipart/mixed; boundary="_003_FD3DCEAC5B03E9408544A1E416F112420192CE53A1NAMBX04mgcmen_" MIME-Version: 1.0 X-SW-Source: 2015-12/txt/msg01352.txt.bz2 --_003_FD3DCEAC5B03E9408544A1E416F112420192CE53A1NAMBX04mgcmen_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 9631 I've now updated the patch. I'd like to get this in GCC 6.0; please let me= know if that is possible. I've also updated the spec (https://github.com/MentorEmbedded/cxx-abi/MIPSC= ompactEH.pdf). rth commented that there was no versioning info provision for the personal= ity routines. The now spec identifies a couple of bits in the header that = can be used for that. A couple of new unwind opcodes were also added. With the exception of Matthew's comment about disabling Compact EH for thos= e ABIs that don't support it, I have not addressed the MIPS-specific commen= ts. I will post a follow-on patch next week to take care of that. There is also a problem with N64 ABI support that requires a follow-on binu= tils patch. I have disabled Compact EH for N64 on Linux in this version of= the patch. I plan to re-enable it after binutils is updated. Okay to commit? Thanks, Catherine > -----Original Message----- > From: Richard Henderson [mailto:rth@redhat.com] > Sent: Friday, September 18, 2015 3:25 PM > To: Moore, Catherine; gcc-patches@gcc.gnu.org > Cc: jason@redhat.com; Matthew Fortune > Subject: Re: [RFA] Compact EH Patch >=20 > > Index: libgcc/libgcc-std.ver.in > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- libgcc/libgcc-std.ver.in (revision 226409) > > +++ libgcc/libgcc-std.ver.in (working copy) > > @@ -1918,6 +1918,7 @@ GCC_4.6.0 { > > __morestack_current_segment > > __morestack_initial_sp > > __splitstack_find > > + _Unwind_GetEhEncoding > > } > > > > %inherit GCC_4.7.0 GCC_4.6.0 > > @@ -1938,3 +1939,8 @@ GCC_4.7.0 { > > %inherit GCC_4.8.0 GCC_4.7.0 > > GCC_4.8.0 { > > } > > + > > +%inherit GCC_4.8.0 GCC_4.7.0 > > +GCC_4.8.0 { > > + __register_frame_info_header_bases > > +} >=20 > You can't push new symbols into old versions. These have to go into the > version for the current gcc. Done. >=20 > > Index: libstdc++-v3/config/abi/pre/gnu.ver > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- libstdc++-v3/config/abi/pre/gnu.ver (revision 226409) > > +++ libstdc++-v3/config/abi/pre/gnu.ver (working copy) > > @@ -1909,6 +1909,7 @@ CXXABI_1.3 { > > __gxx_personality_v0; > > __gxx_personality_sj0; > > __gxx_personality_seh0; > > + __gnu_compact_pr2; > > __dynamic_cast; > > > > # *_type_info classes, ctor and dtor Done. > > Index: libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver > (revision 226409) > > +++ libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver > (working copy) > > @@ -200,6 +200,7 @@ CXXABI_2.0 { > > __cxa_vec_new; > > __gxx_personality_v0; > > __gxx_personality_sj0; > > + __gnu_compact_pr2; > > __dynamic_cast; > > > > # std::exception_ptr >=20 Jonathan says that CXXABI_2.0 is correct here. >=20 > > + if (data.type !=3D CET_not_found) > > + return data.type; > > + > > + return CET_not_found; >=20 > Return data.type unconditionally. Done. >=20 > > +++ libgcc/unwind-pe.h (working copy) > > @@ -44,6 +44,7 @@ > > #define DW_EH_PE_udata2 0x02 > > #define DW_EH_PE_udata4 0x03 > > #define DW_EH_PE_udata8 0x04 > > +#define DW_EH_PE_udata1 0x05 > > #define DW_EH_PE_sleb128 0x09 > > #define DW_EH_PE_sdata2 0x0A > > #define DW_EH_PE_sdata4 0x0B >=20 > If we're going to add udata1, we might as well add sdata1 for consistency. Done. >=20 > > @@ -184,6 +187,7 @@ read_encoded_value_with_base (unsigned char > encodi > > union unaligned > > { > > void *ptr; > > + unsigned u1 __attribute__ ((mode (QI))); > > unsigned u2 __attribute__ ((mode (HI))); > > unsigned u4 __attribute__ ((mode (SI))); > > unsigned u8 __attribute__ ((mode (DI))); >=20 > This is silly. Access to a single byte never requires alignment help fro= m the > compiler... >=20 > > + case DW_EH_PE_udata1: > > + result =3D u->u1; > > + p +=3D 1; > > + break; >=20 > result =3D *p; Done. >=20 > > + read_encoded_value_with_base (DW_EH_PE_absptr | > DW_EH_PE_udata4, 0, > > + hdr + 4, &nrec); >=20 > Err... that encoding type makes no sense: absptr is "pointer size". Comb= ining > that with an explicit size, like udata4, means that udata4 wins. So this= is the > same as simply writing DW_EH_PE_udata4. >=20 > At which point you're loading a 4 byte unsigned quantity from an aligned > address. You might as well use *(uint32_t *)(hdr + 4). >=20 Done. > > +__register_frame_info_header_bases (const void *begin, struct object > *ob, > > + void *tbase, void *dbase) > > +{ > > + /* Only register compact EH frame headers. */ > > + if (begin =3D=3D NULL || *(const char *) begin !=3D 2) > > + return; >=20 > Check for no entries before registering? Done. >=20 > > +extern char __GNU_EH_FRAME_HDR[] TARGET_ATTRIBUTE_WEAK; >=20 > Don't you have some guaranteed alignment for this table? > That perhaps ought to be seen in either the type or an attribute. >=20 > + if (op < 0x40) > + else if (op < 0x48) > + else if (op < 0x50) > + else if (op < 0x58) > + else if (op =3D=3D 0x58) > + else if (op =3D=3D 0x59) > + else if (op =3D=3D 0x5a) > + else if (op =3D=3D 0x5b) > + else if (op =3D=3D 0x5c) > + else if (op =3D=3D 0x5d) > + else if (op =3D=3D 0x5e) > + else if (op =3D=3D 0x5f) > + else if (op >=3D 0x60 && op < 0x6c) >=20 > Better as a switch statement surely, using the gcc case x ... y: extensio= n. Done. >=20 > > +static _Unwind_Reason_Code > > +uw_frame_state_compact (struct _Unwind_Context *context, > > + _Unwind_FrameState *fs, > > + enum compact_entry_type entry_type, > > + struct compact_eh_bases *bases) { > > + const unsigned char *p; > > + unsigned int pr_index; > > + _Unwind_Ptr personality; > > + unsigned char buf[4]; > > + _Unwind_Reason_Code rc; > > + > > + p =3D bases->entry; > > + pr_index =3D *(p++); > > + switch (pr_index) { > > + case 0: > > + p =3D read_encoded_value (context, bases->eh_encoding, p, > &personality); > > + fs->personality =3D (_Unwind_Personality_Fn) personality; > > + break; > > + case 1: > > + fs->personality =3D __gnu_compact_pr1; > > + break; > > + case 2: > > + fs->personality =3D __gnu_compact_pr2; > > + break; > > + default: > > + fs->personality =3D NULL; > > + } >=20 > This is the aspect of this spec about which I am least keen. The existing > method whereby the personality function is explicit in each object file m= eans > that we've got automatic version control on data that is private to the o= bject > file. >=20 > That is, if we should ever change the format of the LSDA -- as in fact yo= u are > doing here -- then all we need do is change __gcc_personality_v0 to > __gcc_personality_v1, and all is well. One can mix and match object files > from different compiler versions and all that is required for correctness= is > that the runtime libraries must continue to provide all previous versions. >=20 > What you're doing here doesn't allow the format of index {1,2,3} to *ever* > change. You've fixed it forever, barring abandoning those indices and al= ways > using index 0. >=20 > I know that the ARM EH format made exactly the same mistake, but let's see > if we can find some way of not replicating it, eh? This has been addressed with a specification update to allocate some additi= onal bits for versioning. >=20 >=20 > > @@ -206,4 +206,14 @@ _Unwind_SetIP (struct _Unwind_Context > *context, _U > > return __libunwind_Unwind_SetIP (context, val); } symver > > (_Unwind_SetIP, GCC_3.0); > > + > > +extern unsigned char __libunwind_Unwind_GetEhEncoding > > + (struct _Unwind_Context *); > > + > > +unsigned char > > +_Unwind_GetEhEncoding (struct _Unwind_Context *context) { > > + return __libunwind_Unwind_GetEhEncoding (context, val); } symver > > +(_Unwind_GetEhEncoding, GCC_3.0); > > #endif >=20 > There is no such __libunwind symbol, is there? Removed. >=20 > > +mcompact-eh > > +Target Var(TARGET_COMPACT_EH) Init(1) Use compact exception > unwinding > > +tables. >=20 > This ought to be automatically disabled with -fasynchronous-unwind-tables. We don't disable it, but we emit dwarf-based unwind information. The compa= ct header knows that it's DWARF and processes it accordingly. See Section 10 in the spec -- we have compact-inline, compact-outline and l= egacy-style unwind info. >=20 > > /* "Save" $sp in itself so we don't use the fake CFA. > > This is: DW_CFA_val_expression r29, { DW_OP_reg29 }. */ > > - fprintf (asm_out_file, "\t.cfi_escape 0x16,29,1,0x6d\n"); > > + if (dwarf2out_do_frame () > > + && (flag_unwind_tables || flag_exceptions)) > > + /* "Save" $sp in itself so we don't use the fake CFA. > > + This is: DW_CFA_val_expression r29, { DW_OP_reg29 }. */ > > + fprintf (asm_out_file, "\t.cfi_fde_data 0x5b\n"); > > + else > > + fprintf (asm_out_file, "\t.cfi_escape 0x16,29,1,0x6d\n"); >=20 > The commentary appears to be messed up? Fixed. --_003_FD3DCEAC5B03E9408544A1E416F112420192CE53A1NAMBX04mgcmen_ Content-Type: application/octet-stream; name="compact-eh.cl" Content-Description: compact-eh.cl Content-Disposition: attachment; filename="compact-eh.cl"; size=6160; creation-date="Sun, 13 Dec 2015 21:48:15 GMT"; modification-date="Sun, 13 Dec 2015 19:49:07 GMT" Content-Transfer-Encoding: base64 Content-length: 8353 MjAxNS0xMi0xMyAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGNvZGVzb3VyY2Vy eS5jb20+DQoJICAgIEJlcm5kIFNjaG1pZHQgICAgPGJlcm5kc0Bjb2Rlc291 cmNlcnkuY29tPg0KCSAgICBQYXVsIEJyb29rICA8cGF1bEBjb2Rlc291cmNl cnkuY29tPg0KDQoJbGlic3RkYysrLXYzLw0KCSogbGlic3VwYysrL2VoX3Bl cnNvbmFsaXR5LmNjIChjb21wYWN0X2dldF90dHlwZV9lbnRyeSk6IE5ldy4N CgkoY2hlY2tfY29tcGFjdF9leGNlcHRpb25fc3BlYyk6IE5ldy4NCgkoX19j eGFfY2FsbF91bmV4cGVjdGVkKTogSGFuZGxlIENvbXBhY3QgRUguDQoJKiBs aWJzdXBjKysvTWFrZWZpbGUuYW0gKGVoX2NvbXBhY3RfcHIuY2MpOiBBZGQg dG8gc291cmNlcy4NCgkqIGxpYnN1cGMrKy9NYWtlZmlsZS5pbjogUmVnZW5l cmF0ZS4NCgkqIGxpYnN1cGMrKy9laF9jb21wYWN0X3ByLmNjOiBOZXcgZmls ZS4NCgkqIGxpYnN1cGMrKy91bndpbmQtY3h4LmggKF9fZ251X2NvbXBhY3Rf cHIyKTogRGVjbGFyZS4NCgkqIGNvbmZpZy9hYmkvcHJlL2dudS52ZXIgKF9f Z251X2NvbXBhY3RfcHIyKTogQWRkIHRvIENYWEFCSV8xLjMuMTAuDQoJKiBj b25maWcvYWJpL3ByZS9nbnUtdmVyc2lvbmVkLW5hbWVzcGFjZS52ZXIgKF9f Z251X2NvbXBhY3RfcHIyKToNCglBZGQgdG8gQ1hYQUJJXzIuMC4NCg0KCWdj Yy8NCgkqIGNvbmZpZy9taXBzL3NkZS5oIChNSVBTX0NPTVBBQ1RfRUhfUENS RUwpOiBEZWZpbmUuDQoJKiBjb25maWcvbWlwcy9taXBzLXByb3Rvcy5oICht aXBzX2ZpeHVwX2NmaV9zZWN0aW9ucyk6IERlY2xhcmUuDQoJKiBjb25maWcv bWlwcy9saW51eC5oIChNRF9IQVZFX0NPTVBBQ1RfRUgpOiBEZWZpbmUuDQoJ KEFCSV9IQVNfQ09NUEFDVF9FSF9TVVBQT1JUKTogRGVmaW5lLg0KCSogY29u ZmlnL21pcHMvZWxmLmggKE1EX0hBVkVfQ09NUEFDVF9FSCk6IERlZmluZS4N CgkqIGNvbmZpZy9taXBzL21pcHMub3B0IChtY29tcGFjdC1laCk6IE5ldyBv cHRpb24uDQoJKiBjb25maWcvbWlwcy9taXBzLmM6IEluY2x1ZGUgZXhjZXB0 LmggYW5kIGRlYnVnLmguDQoJKGRvbmVfY2ZpX3NlY3Rpb25zKTogTmV3Lg0K CShtaXBzX2ZpeHVwX2NmaV9zZWN0aW9ucyk6IE5ldy4NCgkobWlwczE2X2J1 aWxkX2NhbGxfc3R1Yik6IEVtaXQgQ29tcGFjdCBFSCBjZmkgZGF0YS4NCgko bWlwc19hc21faW5pdF9zZWN0aW9ucyk6IE5ldy4NCgkobWlwc19pbl9zbWFs bF9kYXRhX3ApOiBBZGQgQ29tcGFjdCBFSCBzdXBwb3J0Lg0KCShtaXBzX2Zp bGVfc3RhcnQpOiBMaWtld2lzZS4NCgkoYWRkX2ZwX3JhX3B1c2gpOiBOZXcu DQoJKG1pcHNfZmRlZGF0YV9jZmFhZGp1c3QpOiBOZXcuDQoJKG1pcHNfY2Zp X2VuZHByb2MpOiBOZXcuDQoJKFRBUkdFVF9BU01fSU5JVF9TRUNUSU9OUyk6 IE5ldy4NCgkoVEFSR0VUX09VVFBVVF9DRklfRU5EUFJPQyk6IERlZmluZS4N CgkqIGNvbmZpZy9taXBzL21pcHMuaCAoVEFSR0VUX0NQVV9DUFBfQlVJTFRJ TlMpOiBBZGQgX19HTlVfQ09NUEFDVF9FSF9fLg0KCShBU01fREVDTEFSRV9G VU5DVElPTl9OQU1FKTogRGVmaW5lLg0KCShNSVBTX0NPTVBBQ1RfRUhfUENS RUwpOiBEZWZpbmUuDQoJKE1JUFNfQ09NUEFDVF9FSF9FTkNPRElORyk6IERl ZmluZS4NCgkoQVNNX1BSRUZFUlJFRF9FSF9EQVRBKTogUmVkZWZpbmUuDQoJ KEFTTV9NQVlCRV9PVVRQVVRfRU5DT0RFRF9BRERSX1JUWCk6IERlZmluZS4N CgkoTUlQU19FSF9FTkNPRElORyk6IERlZmluZS4NCgkobWRfdW53aW5kX2Nv bXBhY3Rfb3Bjb2RlX2ZpbmlzaCk6IERlZmluZS4NCgkoQ1JUX0dFVF9SRklC X0RBVEEpOiBEZWZpbmUuDQoJKiBkb2MvdG0udGV4aTogUmVnZW5lcmF0ZS4N CgkqIGRvYy90bS50ZXhpLmluIChUQVJHRVRfT1VUUFVUX0NGSV9FTkRQUk9D KTogTmV3IGhvb2suDQoJKiBkb2MvaW52b2tlLnRleGkgKG1jb21wYWN0LWVo KTogRG9jdW1lbnQuDQoJKiBkd2FyZjJvdXQuYyAoRlVOQ19CRUdJTl9TV0lU Q0hfTEFCRUwpOiBEZWZpbmUuDQoJKG91dHB1dF9jYWxsX2ZyYW1lX2luZm8p OiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdCBFSC4NCgkoZHdhcmYyb3V0X2Rv X2NmaV9zdGFydHByb2MpOiAgTGlrZXdpc2UuDQoJKGR3YXJmMm91dF9lbmRf ZXBpbG9ndWUpOiBMaWtld2lzZS4NCgkoZHdhcmYyb3V0X3N3aXRjaF90ZXh0 X3NlY3Rpb24pOiBMaWtld2lzZS4NCgkoZXhjZXB0LmgpOiBOb3cgaW5jbHVk ZWQuDQoJKiBleGNlcHQuYyAodXNpbmdfY29tcGFjdF9wcik6IE5ldy4NCgko Y29tcGFjdF9wcl9pZCk6IE5ldy4NCgkocmVhZF9zbGViMTI4KTogTmV3Lg0K CShwdXNoX3VsZWIxMjgpOiBNYWtlIGV4dGVybmFsLg0KCShmdW5jX2JlZ2lu X2xhYiwgc3dpdGNoX2JlZ2luX2xhYik6IE5ldy4NCgkocmVnaW9uX2JlZ2lu X2xhYiwgcmVnaW9uX2VuZF9sYWIpOiBOZXcuDQoJKGNoYWluX2QsIGNoYWlu X3JlZiwgY2hhaW5zKTogRGVjbGFyZS4NCgkoY29tcGFjdF9pbmZvX2QsIGNv bXBhY3RfaW5mb19yZWYsIGNvbXBhY3RfaW5mbyk6IERlY2xhcmUuDQoJKGR1 bW15X2luZm9fZCwgZHVtbXlfaW5mb19yZWYsIGR1bW15X2luZm8pOiBEZWNs YXJlLg0KCShjb21wYWN0X2NyZWF0ZV9yZWdpb25fc3RhcnRfbGFiZWwpOiBO ZXcuDQoJKGNvbXBhY3RfY3JlYXRlX3JlZ2lvbl9lbmRfbGFiZWwpOiBOZXcu DQoJKGNvbXBhY3RfZW1pdF9yZWdpb25faGVhZGVyKTogTmV3Lg0KCShjb21w YWN0X2luc2VydF9ub3Rocm93KTogTmV3Lg0KCShjb21wYWN0X2luc2VydF9j b250aW51ZSk6IE5ldy4NCgkoY29tcGFjdF9pbnNlcnRfY2xlYW51cCk6IE5l dy4NCgkoY29tcGFjdF9saW5rX3RvX2R1bW15KTogTmV3Lg0KCShjb21wYWN0 X2VtaXRfZHVtbWllcyk6IE5ldy4NCgkqIHRhcmdob29rcy5jIChkZWZhdWx0 X2FzbV9vdXRwdXRfY2ZpX2VuZHByb2MpOiBOZXcuDQoJKiB0YXJnaG9va3Mu aCAoZGVmYXVsdF9hc21fb3V0cHV0X2NmaV9lbmRwcm9jKTogRGVjbGFyZS4N CgkqIGZpbmFsLmMgKHJlc3Rfb2ZfaGFuZGxlX2ZpbmFsKTogQWRkIGFyZ3Vt ZW50DQoJdG8gb3V0cHV0X2Z1bmN0aW9uX2V4Y2VwdGlvbl90YWJsZS4NCgkq IGNvbmZpZy5pbiAoSEFWRV9HQVNfRUhfRlJBTUVfRU5UUlkpOiBQcm92aWRl IGRlZmF1bHQuDQoJKiBjb25maWd1cmUuYWMgKEhBVkVfR0FTX0VIX0ZSQU1F X0VOVFJZKTogQ2hlY2sgZm9yIGFzc2VtYmxlcg0KCXN1cHBvcnQuDQoJKiBj b25maWd1cmU6IFJlZ2VuZXJhdGUuDQoJKiBleHByLmMgKGJ1aWxkX3BlcnNv bmFsaXR5X2Z1bmN0aW9uKTogQWRkIENvbXBhY3QgRUggc3VwcG9ydC4NCgkq IGdjYy90ZXN0c3VpdGUvDQoJKiBnKysuZGcvZWgvY2F0Y2g2LkM6IE5ldyB0 ZXN0Lg0KCSogZXhjZXB0LmggKGVoX2NvbXBhY3RfaGVhZGVyX3R5cGUpOiBO ZXcgZW51bWVyYXRpb24uDQoJKGNvbXBhY3RfcHJfaWQpOiBEZWNsYXJlLg0K CShvdXRwdXRfZnVuY3Rpb25fZXhjZXB0aW9uX3RhYmxlKTogQWRkIGFyZ3Vt ZW50Lg0KCShwdXNoX3VsZWIxMjgpOiBEZWNsYXJlLg0KCSogZHdhcmYyY2Zp LmMgKGR3YXJmMm91dF9kb19jZmlfYXNtKTogQ29tcGFjdCBFSCBzdXBwb3J0 Lg0KCSogZHdhcmYyYXNtLmMgKGR3Ml9hc21fb3V0cHV0X2NvbW1lbnQpOiBO ZXcuDQoJKGVoX2RhdGFfZm9ybWF0X25hbWUpOiBDb21wYWN0IEVIIHN1cHBv cnQuDQoJKGR3Ml9hc21fb3V0cHV0X2NvbXBhY3RfcmVnaW9uX2xlbmd0aCk6 IE5ldy4NCgkoZHcyX2FzbV9vdXRwdXRfY29tcGFjdF9sYW5kaW5nX3BhZCk6 IE5ldy4NCgkoZHcyX2FzbV9vdXRwdXRfY29tcGFjdF9hY19wYWlyX3NsZWIx MjgpOiBOZXcuDQoJKiBkd2FyZjJhc20uaCAoZHcyX2FzbV9vdXRwdXRfY29t bWVudCk6IERlY2xhcmUuDQoJKGR3Ml9hc21fb3V0cHV0X2NvbXBhY3RfcmVn aW9uX2xlbmd0aCk6IERlY2xhcmUuDQoJKGR3Ml9hc21fb3V0cHV0X2NvbXBh Y3RfbGFuZGluZ19wYWQpOiBEZWNsYXJlLg0KCShkdzJfYXNtX291dHB1dF9j b21wYWN0X2FjX3BhaXJfc2xlYjEyOCk6IERlY2xhcmUuDQoJKEdDQ19EV19F SF9QRV9zcGVjaWFsKTogRGVmaW5lLg0KCSogdGFyZ2V0LmRlZiAob3V0cHV0 X2NmaV9lbmRwcm9jKTogTmV3IGhvb2suDQoJKiBkZWZhdWx0cy5oIChUQVJH RVRfQ09NUEFDVF9FSCk6IFByb3ZpZGUgZGVmYXVsdC4NCg0KDQoJbGliZ2Nj Lw0KCSogY29uZmlnLmhvc3QgKG1pcHMqLXNkZS1lbGYqKTogU2V0IG1kX3Vu d2luZF9oZWFkZXIuDQoJKiBNYWtlZmlsZS5pbiAoTElCMkFEREVIKTogQWRk IHVud2luZC1jb21wYWN0LmMuDQoJKiB1bndpbmQtZHcyLWZkZS1kaXAuYzog SW5jbHVkZSB1bndpbmQtY29tcGFjdC5oLg0KCShfVW53aW5kX0ZpbmRfcmVn aXN0ZXJlZF9JbmRleCk6IEFkZCBkZWNsYXJhdGlvbi4NCgkodW53X2VoX2Nh bGxiYWNrX2RhdGEpOiBVc2Ugc3RydWN0IGNvbXBhY3RfZWhfYmFzZXMuICBB ZGQgdHlwZS4NCgkoYmFzZV9mcm9tX2NiX2RhdGEpOiBVc2UgZGF0YS0+YmFz ZXMuDQoJKF9VbndpbmRfSXRlcmF0ZVBoZHJDYWxsYmFjayk6IFNlYXJjaCBj b21wYWN0IGZyYW1lIGhlYWRlcnMuDQoJVXNlIGRhdGEtPmJhc2VzLiAgU2V0 IGRhdGEtPnR5cGUuDQoJKF9VbndpbmRfRmluZF9GREUpOiBSZW5hbWUuLi4N CgkoX1Vud2luZF9GaW5kX0luZGV4KTogVG8gdGhpcy4gIEFkanVzdCBmb3Ig Y29tcGFjdCBFSC4NCgkqIHVud2luZC1jb21wYWN0LmM6IE5ldyBmaWxlLg0K CSogdW53aW5kLWNvbXBhY3QuaDogTmV3IGZpbGUuDQoJKiB1bndpbmQtZHcy LWZkZS5jOiBJbmNsdWRlIHVud2luZC1jb21wYWN0LmguDQoJKF9fcmVnaXN0 ZXJfZnJhbWVfaW5mb18xLCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm9faGVhZGVy X2Jhc2VzKTogTmV3DQoJZnVuY3Rpb25zLg0KCShfX3JlZ2lzdGVyX2ZyYW1l X2luZm9fYmFzZXMpOiBVc2UgX19yZWdpc3Rlcl9mcmFtZV9pbmZvXzEuDQoJ KHNlYXJjaF9vYmplY3QpOiBTZWFyY2ggY29tcGFjdCB1bndpbmQgdGFibGUg aGVhZGVycy4NCglTZXQgYmFzZXMtPmVudHJ5LiAgUmV0dXJuIGVudHJ5IHR5 cGUuDQoJKF9VbndpbmRfRmluZF9GREUpOiBJbXBsZW1lbnQgYXMgd3JhcHBl ciBhcm91bmQgX1Vud2luZF9GaW5kX0luZGV4Lg0KCShfVW53aW5kX0ZpbmRf cmVnaXN0ZXJlZF9JbmRleCk6IE5ldyBmdW5jdGlvbi4NCgkqIHVud2luZC1k dzItZmRlLmggKG9iamVjdCk6IEFkZCBmbGFnIGZvciBjb21wYWN0IGZyYW1l IGhlYWRlcnMuDQoJKF9fcmVnaXN0ZXJfZnJhbWVfaW5mb19oZWFkZXJfYmFz ZXMpOiBBZGQgcHJvdG90eXBlLg0KCShjb21wYWN0X2VoX2Jhc2VzLCBjb21w YWN0X2VudHJ5X3R5cGUpOiBOZXcuDQoJKF9VbndpbmRfRmluZF9JbmRleCk6 IEFkZCBwcm90b3R5cGUuDQoJKiBjcnRzdHVmZi5jIChfX3JlZ2lzdGVyX2Zy YW1lX2luZm9faGVhZGVyX2Jhc2VzKTogRGVjbGFyZQ0KCShfX0dOVV9FSF9G UkFNRV9IRFIpOiBEZWNsYXJlLg0KCShmcmFtZV9kdW1teSk6IFJlZ2lzdGVy IGVoX2ZyYW1lX2hkciB0YWJsZXMuDQoJKiBjb25maWcvdC1laC1kdzItZGlw IChMSUIyQURERUgpOiBBZGQgJChzcmNkaXIpL3Vud2luZC1jb21wYWN0LmMu DQoJKiBjb25maWcvbWlwcy9saW51eC11bndpbmQuaDogSW5jbHVkZSBtaXBz LXVud2luZC5oLg0KCSogY29uZmlnL21pcHMvbWlwcy11bndpbmQuaDogTmV3 IGZpbGUuDQoJKiB1bndpbmQtZHcyLmMgKF9fZ251X2NvbXBhY3RfcHIxLCB1 d19mcmFtZV9zdGF0ZV9jb21wYWN0KToNCglOZXcgZnVuY3Rpb25zLg0KCShf X2dudV9jb21wYWN0X3ByMik6IFVzZSB3ZWFrIHJlZmVyZW5jZXMuDQoJKHV3 X2ZyYW1lX3N0YXRlX2Zvcik6IEhhbmRsZSBjb21wYWN0IGZyYW1lIGVudHJp ZXMuDQoJKiBtaXBzMTYuUzogQWRkIENvbXBhY3QgRUggc3VwcG9ydC4NCgkq IHVud2luZC1wZS5oIChEV19FSF9QRV91ZGF0YTEsIERXX0VIX1BFX3NkYXRh MSk6IERlZmluZS4NCgkoc2l6ZV9vZl9lbmNvZGVkX3ZhbHVlLCByZWFkX2Vu Y29kZWRfdmFsdWVfd2l0aF9iYXNlKTogSGFuZGxlDQoJRFdfRUhfUEVfdWRh dGExLg0KCSh1bmFsaWduZWQpOiBBZGQgdTEuDQoJKiB1bndpbmQtZ2VuZXJp Yy5oIChfVW53aW5kX0dldEVoRW5jb2RpbmcpOiBEZWNsYXJlLg0KCSogbGli Z2NjLXN0ZC52ZXIuaW46IEFkZCBfVW53aW5kX0dldEVoRW5jb2RpbmcgYW5k DQoJX19yZWdpc3Rlcl9mcmFtZV9pbmZvX2hlYWRlcl9iYXNlcy4NCg== --_003_FD3DCEAC5B03E9408544A1E416F112420192CE53A1NAMBX04mgcmen_ Content-Type: application/octet-stream; name="compact-eh.patch" Content-Description: compact-eh.patch Content-Disposition: attachment; filename="compact-eh.patch"; size=130814; creation-date="Sun, 13 Dec 2015 21:48:16 GMT"; modification-date="Fri, 11 Dec 2015 21:56:57 GMT" Content-Transfer-Encoding: base64 Content-length: 177327 SW5kZXg6IGxpYnN0ZGMrKy12My9jb25maWcvYWJpL3ByZS9nbnUudmVyDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGlic3RkYysrLXYzL2NvbmZp Zy9hYmkvcHJlL2dudS52ZXIJKHJldmlzaW9uIDIzMTIzOCkNCisrKyBsaWJz dGRjKystdjMvY29uZmlnL2FiaS9wcmUvZ251LnZlcgkod29ya2luZyBjb3B5 KQ0KQEAgLTIxMDksNiArMjEwOSwxMiBAQCBDWFhBQklfMS4zLjkgew0KIA0K IH0gQ1hYQUJJXzEuMy44Ow0KIA0KK0NYWEFCSV8xLjMuMTAgew0KKw0KKyAg ICBfX2dudV9jb21wYWN0X3ByMjsNCisNCit9IENYWEFCSV8xLjMuOTsNCisN CiAjIFN5bWJvbHMgaW4gdGhlIHN1cHBvcnQgbGlicmFyeSAobGlic3VwYysr KSBzdXBwb3J0aW5nIHRyYW5zYWN0aW9uYWwgbWVtb3J5Lg0KIENYWEFCSV9U TV8xIHsNCiANCkluZGV4OiBsaWJzdGRjKystdjMvY29uZmlnL2FiaS9wcmUv Z251LXZlcnNpb25lZC1uYW1lc3BhY2UudmVyDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gbGlic3RkYysrLXYzL2NvbmZpZy9hYmkvcHJlL2dudS12 ZXJzaW9uZWQtbmFtZXNwYWNlLnZlcgkocmV2aXNpb24gMjMxMjM4KQ0KKysr IGxpYnN0ZGMrKy12My9jb25maWcvYWJpL3ByZS9nbnUtdmVyc2lvbmVkLW5h bWVzcGFjZS52ZXIJKHdvcmtpbmcgY29weSkNCkBAIC0yMDAsNiArMjAwLDcg QEAgQ1hYQUJJXzIuMCB7DQogICAgIF9fY3hhX3ZlY19uZXc7DQogICAgIF9f Z3h4X3BlcnNvbmFsaXR5X3YwOw0KICAgICBfX2d4eF9wZXJzb25hbGl0eV9z ajA7DQorICAgIF9fZ251X2NvbXBhY3RfcHIyOw0KICAgICBfX2R5bmFtaWNf Y2FzdDsNCiANCiAgICAgIyBzdGQ6OmV4Y2VwdGlvbl9wdHINCkluZGV4OiBs aWJzdGRjKystdjMvbGlic3VwYysrL01ha2VmaWxlLmFtDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gbGlic3RkYysrLXYzL2xpYnN1cGMrKy9NYWtl ZmlsZS5hbQkocmV2aXNpb24gMjMxMjM4KQ0KKysrIGxpYnN0ZGMrKy12My9s aWJzdXBjKysvTWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkNCkBAIC02Niw2 ICs2Niw3IEBAIHNvdXJjZXMgPSBcDQogCWVoX2F1eF9ydW50aW1lLmNjIFwN CiAJZWhfY2FsbC5jYyBcDQogCWVoX2NhdGNoLmNjIFwNCisJZWhfY29tcGFj dF9wci5jYyBcDQogCWVoX2V4Y2VwdGlvbi5jYyBcDQogCWVoX2dsb2JhbHMu Y2MgXA0KIAllaF9wZXJzb25hbGl0eS5jYyBcDQpJbmRleDogbGlic3RkYysr LXYzL2xpYnN1cGMrKy9laF9wZXJzb25hbGl0eS5jYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIGxpYnN0ZGMrKy12My9saWJzdXBjKysvZWhfcGVy c29uYWxpdHkuY2MJKHJldmlzaW9uIDIzMTIzOCkNCisrKyBsaWJzdGRjKyst djMvbGlic3VwYysrL2VoX3BlcnNvbmFsaXR5LmNjCSh3b3JraW5nIGNvcHkp DQpAQCAtMjM0LDYgKzIzNCw2MyBAQCBnZXRfYWRqdXN0ZWRfcHRyIChjb25z dCBzdGQ6OnR5cGVfaW5mbyAqY2F0Y2hfdHlwZQ0KICAgcmV0dXJuIGZhbHNl Ow0KIH0NCiANCisvLyBSZXR1cm4gYW4gZWxlbWVudCBmcm9tIGEgdHlwZSB0 YWJsZS4NCisNCitzdGF0aWMgY29uc3Qgc3RkOjp0eXBlX2luZm8gKg0KK2Nv bXBhY3RfZ2V0X3R0eXBlX2VudHJ5IChfVW53aW5kX1B0ciBiYXNlLA0KKwkJ CSB1bnNpZ25lZCBjaGFyIGVoX2VuY29kaW5nLA0KKwkJCSBfVW53aW5kX1B0 ciB0dGFiX3N0YXJ0LA0KKwkJCSBpbnQgYXZhbCkNCit7DQorICBfVW53aW5k X1B0ciBwdHI7DQorDQorICBhdmFsID0gKGF2YWwgLSAgMSkgKiBzaXplX29m X2VuY29kZWRfdmFsdWUgKGVoX2VuY29kaW5nKTsNCisgIHJlYWRfZW5jb2Rl ZF92YWx1ZV93aXRoX2Jhc2UgKGVoX2VuY29kaW5nLCBiYXNlLA0KKwkJCQko Y29uc3QgdW5zaWduZWQgY2hhciAqKSB0dGFiX3N0YXJ0ICsgYXZhbCwNCisJ CQkJJnB0cik7DQorDQorICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25z dCBzdGQ6OnR5cGVfaW5mbyAqPihwdHIpOw0KK30NCisNCisvLyBSZXR1cm4g dHJ1ZSBpZiBUSFJPV19UWVBFIG1hdGNoZXMgb25lIG9mIHRoZSBleGNlcHRp b24gc3BlYyBlbnRyaWVzLg0KK3N0YXRpYyBib29sDQorY2hlY2tfY29tcGFj dF9leGNlcHRpb25fc3BlYyAoX3Rocm93X3R5cGV0KiB0aHJvd190eXBlLCB2 b2lkKiB0aHJvd25fcHRyLA0KKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKnhoX2xzZGEsDQorCQkJICAgICAgX1Vud2luZF9Td29yZCB4aF9zd2l0 Y2hfdmFsdWUsDQorCQkJICAgICAgX1Vud2luZF9QdHIgYmFzZSkNCisNCit7 DQorICBfVW53aW5kX1B0ciBwYWRkaW5nX3N0YXJ0LCB0dGFibGVfc3RhcnQ7 DQorICBjb25zdCBzdGQ6OnR5cGVfaW5mbyogY2F0Y2hfdHlwZTsNCisgIHVu c2lnbmVkIGNoYXIgZW5jb2RpbmcgPSB4aF9zd2l0Y2hfdmFsdWUgJiAweGZm Ow0KKyAgdW5zaWduZWQgY2hhciBlaF9vZmZzZXQgPSBhYnMgKHhoX3N3aXRj aF92YWx1ZSA+PiA4KTsNCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsICpj c19zdGFydCwgKmNzX2VuZCwgKmVodGFibGVfc3RhcnQ7DQorICBfVW53aW5k X1B0ciBsc2RhX2hlYWRlcjsNCisgIF91bGViMTI4X3QgZWh2YWwsIGNhbGxf c2l0ZV9sZW4sIGVoc3BlY3NfbGVuOw0KKyAgDQorDQorICBwID0gcmVhZF9l bmNvZGVkX3ZhbHVlICgwLCBEV19FSF9QRV91ZGF0YTEsIHhoX2xzZGEsICZs c2RhX2hlYWRlcik7DQorICBjc19zdGFydCA9IHJlYWRfdWxlYjEyOCAocCwg JmNhbGxfc2l0ZV9sZW4pOw0KKyAgY3NfZW5kID0gY3Nfc3RhcnQgKyBjYWxs X3NpdGVfbGVuOw0KKyAgZWh0YWJsZV9zdGFydCAgPSByZWFkX3VsZWIxMjgg KGNzX2VuZCwgJmVoc3BlY3NfbGVuKTsNCisgIHBhZGRpbmdfc3RhcnQgPSAo X1Vud2luZF9QdHIpIGVodGFibGVfc3RhcnQgKyBlaHNwZWNzX2xlbjsNCisg IHR0YWJsZV9zdGFydCA9IChwYWRkaW5nX3N0YXJ0ICsgNCAtIDEpICYgfig0 IC0gMSk7DQorDQorICBwID0gcmVhZF91bGViMTI4IChlaHRhYmxlX3N0YXJ0 ICsgZWhfb2Zmc2V0IC0gMSwgJmVodmFsKTsNCisNCisgIHdoaWxlIChlaHZh bCAhPSAwKQ0KKyAgICB7DQorICAgICAgY2F0Y2hfdHlwZSA9DQorCWNvbXBh Y3RfZ2V0X3R0eXBlX2VudHJ5IChiYXNlLCBlbmNvZGluZywgdHRhYmxlX3N0 YXJ0LCBlaHZhbCk7DQorDQorICAgICAgaWYgKGdldF9hZGp1c3RlZF9wdHIg KGNhdGNoX3R5cGUsIHRocm93X3R5cGUsICZ0aHJvd25fcHRyKSkNCisJcmV0 dXJuIHRydWU7DQorDQorICAgICAgcCA9IHJlYWRfdWxlYjEyOCAocCwgJmVo dmFsKTsNCisgICAgfQ0KKyAgcmV0dXJuIGZhbHNlOw0KK30NCisNCiAvLyBS ZXR1cm4gdHJ1ZSBpZiBUSFJPV19UWVBFIG1hdGNoZXMgb25lIGlmIHRoZSBm aWx0ZXIgdHlwZXMuDQogDQogc3RhdGljIGJvb2wNCkBAIC03NjUsMjEgKzgy MiwzOCBAQCBfX2N4YV9jYWxsX3VuZXhwZWN0ZWQgKHZvaWQgKmV4Y19vYmpf aW4pDQogICAgICAgX19jeGFfZXhjZXB0aW9uICpuZXdfeGggPSBnbG9iYWxz LT5jYXVnaHRFeGNlcHRpb25zOw0KICAgICAgIHZvaWQgKm5ld19wdHIgPSBf X2dldF9vYmplY3RfZnJvbV9hbWJpZ3VvdXNfZXhjZXB0aW9uIChuZXdfeGgp Ow0KIA0KLSAgICAgIC8vIFdlIGRvbid0IHF1aXRlIGhhdmUgZW5vdWdoIHN0 dWZmIGNhY2hlZDsgcmUtcGFyc2UgdGhlIExTREEuDQotICAgICAgcGFyc2Vf bHNkYV9oZWFkZXIgKDAsIHhoX2xzZGEsICZpbmZvKTsNCisgICAgICBpZiAo eGhfc3dpdGNoX3ZhbHVlID4gMCkNCisJew0KKwkgIF90aHJvd190eXBldCAq bmV3X3R5cGUgPSBfX2dldF9leGNlcHRpb25faGVhZGVyX2Zyb21fb2JqDQor CSAgICAobmV3X3B0ciktPmV4Y2VwdGlvblR5cGU7DQorCSAgaWYgKGNoZWNr X2NvbXBhY3RfZXhjZXB0aW9uX3NwZWMgKG5ld190eXBlLCBuZXdfcHRyLCB4 aF9sc2RhLA0KKwkJCQkJICAgIHhoX3N3aXRjaF92YWx1ZSwgaW5mby50dHlw ZV9iYXNlKSkNCisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOw0KKwl9 DQorICAgICAgZWxzZQ0KKwl7DQorCSAgLy8gV2UgZG9uJ3QgcXVpdGUgaGF2 ZSBlbm91Z2ggc3R1ZmYgY2FjaGVkOyByZS1wYXJzZSB0aGUgTFNEQS4NCisJ ICBwYXJzZV9sc2RhX2hlYWRlciAoMCwgeGhfbHNkYSwgJmluZm8pOw0KIA0K LSAgICAgIC8vIElmIHRoaXMgbmV3IGV4Y2VwdGlvbiBtZWV0cyB0aGUgZXhj ZXB0aW9uIHNwZWMsIGFsbG93IGl0Lg0KLSAgICAgIGlmIChjaGVja19leGNl cHRpb25fc3BlYyAoJmluZm8sIF9fZ2V0X2V4Y2VwdGlvbl9oZWFkZXJfZnJv bV9vYmoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5l d19wdHIpLT5leGNlcHRpb25UeXBlLA0KLQkJCQluZXdfcHRyLCB4aF9zd2l0 Y2hfdmFsdWUpKQ0KLQl7IF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOyB9DQor CSAgLy8gSWYgdGhpcyBuZXcgZXhjZXB0aW9uIG1lZXRzIHRoZSBleGNlcHRp b24gc3BlYywgYWxsb3cgaXQuDQorCSAgaWYgKGNoZWNrX2V4Y2VwdGlvbl9z cGVjICgmaW5mbywgX19nZXRfZXhjZXB0aW9uX2hlYWRlcl9mcm9tX29iag0K KwkJCQkgICAgKG5ld19wdHIpLT5leGNlcHRpb25UeXBlLCBuZXdfcHRyLA0K KwkJCQkgICAgeGhfc3dpdGNoX3ZhbHVlKSkNCisJICAgICBfX3Rocm93X2V4 Y2VwdGlvbl9hZ2FpbjsNCiANCisJfQ0KICAgICAgIC8vIElmIHRoZSBleGNl cHRpb24gc3BlYyBhbGxvd3Mgc3RkOjpiYWRfZXhjZXB0aW9uLCB0aHJvdyB0 aGF0Lg0KICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSB0aHJvd24gb2JqZWN0 IHRvIGNvbXBhcmUgYWdhaW5zdCwgYnV0IHNpbmNlDQogICAgICAgLy8gYmFk X2V4Y2VwdGlvbiBkb2Vzbid0IGhhdmUgdmlydHVhbCBiYXNlcywgdGhhdCdz IE9LOyBqdXN0IHBhc3MgMC4NCiAjaWYgX19jcHBfZXhjZXB0aW9ucyAmJiBf X2NwcF9ydHRpDQogICAgICAgY29uc3Qgc3RkOjp0eXBlX2luZm8gJmJhZF9l eGMgPSB0eXBlaWQgKHN0ZDo6YmFkX2V4Y2VwdGlvbik7DQotICAgICAgaWYg KGNoZWNrX2V4Y2VwdGlvbl9zcGVjICgmaW5mbywgJmJhZF9leGMsIDAsIHho X3N3aXRjaF92YWx1ZSkpDQorICAgICAgaWYgKHhoX3N3aXRjaF92YWx1ZSA+ IDApDQorCXsNCisJICBpZiAoY2hlY2tfY29tcGFjdF9leGNlcHRpb25fc3Bl YyAoJmJhZF9leGMsIDAsIHhoX2xzZGEsDQorCQkJCQkgICAgeGhfc3dpdGNo X3ZhbHVlLCBpbmZvLnR0eXBlX2Jhc2UpKQ0KKwkgICAgdGhyb3cgc3RkOjpi YWRfZXhjZXB0aW9uKCk7DQorCX0NCisgICAgICBlbHNlIGlmIChjaGVja19l eGNlcHRpb25fc3BlYyAoJmluZm8sICZiYWRfZXhjLCAwLCB4aF9zd2l0Y2hf dmFsdWUpKQ0KIAl0aHJvdyBzdGQ6OmJhZF9leGNlcHRpb24oKTsNCiAjZW5k aWYgICANCiANCkluZGV4OiBsaWJzdGRjKystdjMvbGlic3VwYysrL01ha2Vm aWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGlic3RkYysr LXYzL2xpYnN1cGMrKy9NYWtlZmlsZS5pbgkocmV2aXNpb24gMjMxMjM4KQ0K KysrIGxpYnN0ZGMrKy12My9saWJzdXBjKysvTWFrZWZpbGUuaW4JKHdvcmtp bmcgY29weSkNCkBAIC0xMTgsOSArMTE4LDEwIEBAIGFtX19vYmplY3RzXzEg PSBhcnJheV90eXBlX2luZm8ubG8gYXRleGl0X2FybS5sbyBhDQogCWJhZF9h bGxvYy5sbyBiYWRfYXJyYXlfbGVuZ3RoLmxvIGJhZF9hcnJheV9uZXcubG8g YmFkX2Nhc3QubG8gXA0KIAliYWRfdHlwZWlkLmxvIGNsYXNzX3R5cGVfaW5m by5sbyBkZWxfb3AubG8gZGVsX29wcy5sbyBcDQogCWRlbF9vcG50LmxvIGRl bF9vcHYubG8gZGVsX29wdnMubG8gZGVsX29wdm50LmxvIGR5bmNhc3QubG8g XA0KLQllaF9hbGxvYy5sbyBlaF9hcm0ubG8gZWhfYXV4X3J1bnRpbWUubG8g ZWhfY2FsbC5sbyBlaF9jYXRjaC5sbyBcDQotCWVoX2V4Y2VwdGlvbi5sbyBl aF9nbG9iYWxzLmxvIGVoX3BlcnNvbmFsaXR5LmxvIGVoX3B0ci5sbyBcDQot CWVoX3Rlcm1faGFuZGxlci5sbyBlaF90ZXJtaW5hdGUubG8gZWhfdG0ubG8g ZWhfdGhyb3cubG8gXA0KKwllaF9hbGxvYy5sbyBlaF9hcm0ubG8gZWhfYXV4 X3J1bnRpbWUubG8gZWhfY2FsbC5sbyBcDQorCWVoX2NhdGNoLmxvIGVoX2Nv bXBhY3RfcHIubG8gXA0KKwllaF9leGNlcHRpb24ubG8gZWhfZ2xvYmFscy5s byBlaF9wZXJzb25hbGl0eS5sbyBcDQorCWVoX3B0ci5sbyBlaF90ZXJtX2hh bmRsZXIubG8gZWhfdGVybWluYXRlLmxvIGVoX3RtLmxvIGVoX3Rocm93Lmxv IFwNCiAJZWhfdHlwZS5sbyBlaF91bmV4X2hhbmRsZXIubG8gZW51bV90eXBl X2luZm8ubG8gXA0KIAlmdW5jdGlvbl90eXBlX2luZm8ubG8gZnVuZGFtZW50 YWxfdHlwZV9pbmZvLmxvIGd1YXJkLmxvIFwNCiAJZ3VhcmRfZXJyb3IubG8g aGFzaF9ieXRlcy5sbyBuZXN0ZWRfZXhjZXB0aW9uLmxvIFwNCkBAIC00MjMs NiArNDI0LDcgQEAgc291cmNlcyA9IFwNCiAJZWhfYXV4X3J1bnRpbWUuY2Mg XA0KIAllaF9jYWxsLmNjIFwNCiAJZWhfY2F0Y2guY2MgXA0KKwllaF9jb21w YWN0X3ByLmNjIFwNCiAJZWhfZXhjZXB0aW9uLmNjIFwNCiAJZWhfZ2xvYmFs cy5jYyBcDQogCWVoX3BlcnNvbmFsaXR5LmNjIFwNCkluZGV4OiBsaWJzdGRj KystdjMvbGlic3VwYysrL2VoX2NvbXBhY3RfcHIuY2MNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBsaWJzdGRjKystdjMvbGlic3VwYysrL2VoX2Nv bXBhY3RfcHIuY2MJKHJldmlzaW9uIDApDQorKysgbGlic3RkYysrLXYzL2xp YnN1cGMrKy9laF9jb21wYWN0X3ByLmNjCShyZXZpc2lvbiAwKQ0KQEAgLTAs MCArMSw2ODIgQEANCisjaWZkZWYgX19HTlVfQ09NUEFDVF9FSF9fDQorLy8g LSotIEMrKyAtKi0gVGhlIEdOVSBDKysgY29tcGFjdCBleGNlcHRpb24gcGVy c29uYWxpdHkgcm91dGluZQ0KKy8vIENvcHlyaWdodCAoQykgMjAxMg0KKy8v IA0KKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKy8vDQor Ly8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLg0KKy8vDQorLy8gR0NDIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkNCisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKy8vIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs IG9yIChhdCB5b3VyIG9wdGlvbikNCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4N CisvLw0KKy8vIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLA0KKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQor Ly8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQ0KKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorLy8NCisvLyBVbmRlciBTZWN0 aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0 aW9uYWwNCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBS dW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uDQorLy8gMy4xLCBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4N CisNCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQNCisvLyBhIGNvcHkg b2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOw0KKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMg YW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNl ZQ0KKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCisvLw0K Ky8vIFdyaXR0ZW4gYnkgQ2F0aGVyaW5lIE1vb3JlIDxjbG1AY29kZXNvdXJj ZXJ5LmNvbT4NCisNCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4NCisj aW5jbHVkZSA8Y3N0ZGxpYj4NCisjaW5jbHVkZSA8Yml0cy9leGNlcHRpb25f ZGVmaW5lcy5oPg0KKyNpbmNsdWRlIDxjeHhhYmkuaD4NCisjaW5jbHVkZSAi dW53aW5kLWN4eC5oIg0KKw0KK3VzaW5nIG5hbWVzcGFjZSBfX2N4eGFiaXYx Ow0KKw0KKyNpbmNsdWRlICJ1bndpbmQtcGUuaCINCisNCisMDQorZW51bSBl eGNlcHRpb25fZW50cnlfdHlwZQ0KK3sNCisgIENBVENIX1RZUEUsDQorICBD TEVBTlVQX1RZUEUsDQorICBDT05USU5VRV9VTldJTkRJTkdfVFlQRSwNCisg IEVIX1NQRUNfVFlQRSwNCisgIE5PVEhST1dfVFlQRSwNCisgIFVOS05PV05f VFlQRSwNCit9OyANCisNCisjZGVmaW5lIExFTkdUSF9NQVNLIDENCisNCisj ZGVmaW5lIE5PVEhST1dfUkVHSU9OKHgpICh4ICYgMHgxKQ0KKyNkZWZpbmUg Q09OVElOVUVfVU5XSU5ESU5HX1JFR0lPTih4KSAoeCA9PSAtMSkNCisjZGVm aW5lIERVTU1ZX0FDVElPTl9SRUdJT04oeCkgKHggPT0gMCkNCisjZGVmaW5l IEVYVFJBQ1RfQUNUSU9OX1ZBTFVFKHgpICgoKHggJiAzKSBeIDIpIC0gMikN CisjZGVmaW5lIEVYVFJBQ1RfQ0hBSU5fVkFMVUUoeCkgKHggPj4gMikNCisj ZGVmaW5lIEFDVElPTl9FWFRFTlNJT04gLTINCisjZGVmaW5lIEhBVkVfRUhT UEVDUyh4KSAoeCAmIDB4NDApDQorI2RlZmluZSBUVEFCTEVfU1RBUlQoeCkg KHggKyA0IC0gMSkgJiB+KDQgLSAxKTsNCisNCisvLyBSZXR1cm4gYW4gZWxl bWVudCBmcm9tIGEgdHlwZSB0YWJsZS4NCisNCitzdGF0aWMgY29uc3Qgc3Rk Ojp0eXBlX2luZm8gKg0KK2NvbXBhY3RfZ2V0X3R0eXBlX2VudHJ5IChfVW53 aW5kX1B0ciBiYXNlLA0KKwkJCSB1bnNpZ25lZCBjaGFyIGVoX2VuY29kaW5n LA0KKwkJCSBfVW53aW5kX1B0ciB0dGFiX3N0YXJ0LA0KKwkJCSBpbnQgYXZh bCkNCit7DQorICBfVW53aW5kX1B0ciBwdHI7DQorDQorICBhdmFsID0gKGF2 YWwgLSAgMSkgKiBzaXplX29mX2VuY29kZWRfdmFsdWUgKGVoX2VuY29kaW5n KTsNCisgIHJlYWRfZW5jb2RlZF92YWx1ZV93aXRoX2Jhc2UgKGVoX2VuY29k aW5nLCBiYXNlLA0KKwkJCQkoY29uc3QgdW5zaWduZWQgY2hhciAqKSB0dGFi X3N0YXJ0ICsgYXZhbCwgJnB0cik7DQorDQorICByZXR1cm4gcmVpbnRlcnBy ZXRfY2FzdDxjb25zdCBzdGQ6OnR5cGVfaW5mbyAqPihwdHIpOw0KK30NCisN CisvLyBHaXZlbiB0aGUgdGhyb3duIHR5cGUgVEhST1dfVFlQRSwgcG9pbnRl ciB0byBhIHZhcmlhYmxlIGNvbnRhaW5pbmcgYQ0KKy8vIHBvaW50ZXIgdG8g dGhlIGV4Y2VwdGlvbiBvYmplY3QgVEhST1dOX1BUUl9QIGFuZCBhIHR5cGUg Q0FUQ0hfVFlQRSB0bw0KKy8vIGNvbXBhcmUgYWdhaW5zdCwgcmV0dXJuIHdo ZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgbWF0Y2ggYW5kIGlmIHNvLA0KKy8v IHVwZGF0ZSAqVEhST1dOX1BUUl9QLg0KKw0KK3N0YXRpYyBib29sDQorZ2V0 X2FkanVzdGVkX3B0ciAoY29uc3Qgc3RkOjp0eXBlX2luZm8gKmNhdGNoX3R5 cGUsDQorCQkgIGNvbnN0IHN0ZDo6dHlwZV9pbmZvICp0aHJvd190eXBlLA0K KwkJICB2b2lkICoqdGhyb3duX3B0cl9wKQ0KK3sNCisgIHZvaWQgKnRocm93 bl9wdHIgPSAqdGhyb3duX3B0cl9wOw0KKw0KKyAgLy8gUG9pbnRlciB0eXBl cyBuZWVkIHRvIGFkanVzdCB0aGUgYWN0dWFsIHBvaW50ZXIsIG5vdA0KKyAg Ly8gdGhlIHBvaW50ZXIgdG8gcG9pbnRlciB0aGF0IGlzIHRoZSBleGNlcHRp b24gb2JqZWN0Lg0KKyAgLy8gVGhpcyBhbHNvIGhhcyB0aGUgZWZmZWN0IG9m IHBhc3NpbmcgcG9pbnRlciB0eXBlcw0KKyAgLy8gImJ5IHZhbHVlIiB0aHJv dWdoIHRoZSBfX2N4YV9iZWdpbl9jYXRjaCByZXR1cm4gdmFsdWUuDQorICBp ZiAodGhyb3dfdHlwZS0+X19pc19wb2ludGVyX3AgKCkpDQorICAgIHRocm93 bl9wdHIgPSAqKHZvaWQgKiopIHRocm93bl9wdHI7DQorDQorICBpZiAoY2F0 Y2hfdHlwZS0+X19kb19jYXRjaCAodGhyb3dfdHlwZSwgJnRocm93bl9wdHIs IDEpKQ0KKyAgICB7DQorICAgICAgKnRocm93bl9wdHJfcCA9IHRocm93bl9w dHI7DQorICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgIHJldHVy biBmYWxzZTsNCit9DQorDQorLy8gU2F2ZSBzdGFnZTEgaGFuZGxlciBpbmZv cm1hdGlvbiBpbiB0aGUgZXhjZXB0aW9uIG9iamVjdC4NCisNCitzdGF0aWMg aW5saW5lIHZvaWQNCitzYXZlX2NhdWdodF9leGNlcHRpb24gKHN0cnVjdCBf VW53aW5kX0V4Y2VwdGlvbiAqdWVfaGVhZGVyLA0KKwkJICAgICAgIHZvaWQg KnRocm93bl9wdHIsDQorCQkgICAgICAgaW50IGhhbmRsZXJfc3dpdGNoX3Zh bHVlLA0KKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhbmd1YWdl X3NwZWNpZmljX2RhdGEsDQorCQkgICAgICAgX1Vud2luZF9QdHIgbGFuZGlu Z19wYWQpDQorew0KKyAgX19jeGFfZXhjZXB0aW9uKiB4aCA9IF9fZ2V0X2V4 Y2VwdGlvbl9oZWFkZXJfZnJvbV91ZSh1ZV9oZWFkZXIpOw0KKw0KKyAgeGgt PmhhbmRsZXJTd2l0Y2hWYWx1ZSA9IGhhbmRsZXJfc3dpdGNoX3ZhbHVlOw0K KyAgeGgtPmxhbmd1YWdlU3BlY2lmaWNEYXRhID0gbGFuZ3VhZ2Vfc3BlY2lm aWNfZGF0YTsNCisgIHhoLT5hZGp1c3RlZFB0ciA9IHRocm93bl9wdHI7DQor ICB4aC0+Y2F0Y2hUZW1wID0gbGFuZGluZ19wYWQ7DQorfQ0KKw0KKy8vIFJl c3RvcmUgdGhlIGNhdGNoIGhhbmRsZXIgaW5mb3JtYXRpb24gc2F2ZWQgZHVy aW5nIHBoYXNlMS4NCisNCitzdGF0aWMgaW5saW5lIHZvaWQNCityZXN0b3Jl X2NhdWdodF9leGNlcHRpb24gKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAq dWVfaGVhZGVyLA0KKwkJCSAgaW50ICZoYW5kbGVyX3N3aXRjaF92YWx1ZSwN CisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiYgbGFuZ3VhZ2Vfc3BlY2lm aWNfZGF0YSwNCisJCQkgIF9VbndpbmRfUHRyJiBsYW5kaW5nX3BhZCkNCit7 DQorICBfX2N4YV9leGNlcHRpb24qIHhoID0gX19nZXRfZXhjZXB0aW9uX2hl YWRlcl9mcm9tX3VlKHVlX2hlYWRlcik7DQorICBoYW5kbGVyX3N3aXRjaF92 YWx1ZSA9IHhoLT5oYW5kbGVyU3dpdGNoVmFsdWU7DQorICBsYW5ndWFnZV9z cGVjaWZpY19kYXRhID0geGgtPmxhbmd1YWdlU3BlY2lmaWNEYXRhOw0KKyAg bGFuZGluZ19wYWQgPSAoX1Vud2luZF9QdHIpIHhoLT5jYXRjaFRlbXA7DQor fQ0KKw0KKy8vIFBDU19QVFIgcG9pbnRzIHRvIGEgdmFyaWFibGUgaG9sZGlu ZyBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIGEgbmV3DQorLy8gTFNEQSBl bnRyeS4gIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBlbnRyeSBhbmQgdXBk YXRlcyBQQ1NfUFRSIHRvDQorLy8gcG9pbnQgcGFzdCBpdHMgZW5kLiAgVGhl IHZhcmlhYmxlcyBhdCAqUFJFR0lPTl9MRU4sICpQTFBfT0ZGLCAqUEFWIGFu ZA0KKy8vICpQQ1YgYXJlIGZpbGxlZCB3aXRoIGluZm9ybWF0aW9uIGFib3V0 IHRoZSBkYXRhIGZvdW5kOiB0aGUgcmVnaW9uDQorLy8gbGVuZ3RoLCB0aGUg bGFuZGluZyBwYWQgb2Zmc2V0LCB0aGUgYWN0aW9uIHZhbHVlIGFuZCB0aGUg Y2hhaW4gdmFsdWUuDQorDQorc3RhdGljIGlubGluZSBlbnVtIGV4Y2VwdGlv bl9lbnRyeV90eXBlDQorY29tcGFjdF9wYXJzZV9oZWFkZXIgKGNvbnN0IHVu c2lnbmVkIGNoYXIgKipwY3NfcHRyLCBfdWxlYjEyOF90ICpwcmVnaW9uX2xl biwNCisJCSAgICAgIGludCAqcGF2LCBpbnQgKnBjdiwgX3NsZWIxMjhfdCAq cGxwX29mZikNCit7DQorICBjb25zdCB1bnNpZ25lZCBjaGFyICpjc19wdHIg PSAqcGNzX3B0cjsNCisgIF91bGViMTI4X3QgcmVnaW9uX2xlbjsNCisgIGVu dW0gZXhjZXB0aW9uX2VudHJ5X3R5cGUgdHlwZSA9IE5PVEhST1dfVFlQRTsN CisNCisgIGNzX3B0ciA9IHJlYWRfdWxlYjEyOCAoY3NfcHRyLCBwcmVnaW9u X2xlbik7DQorDQorICByZWdpb25fbGVuID0gKnByZWdpb25fbGVuOw0KKw0K KyAgLyogSWYgbm90aHJvdywgYWR2YW5jZSB0byBuZXh0IGVudHJ5LiAgKi8N CisgIGlmICghTk9USFJPV19SRUdJT04gKHJlZ2lvbl9sZW4pKQ0KKyAgICB7 DQorICAgICAgX3NsZWIxMjhfdCBscCA9IDA7DQorICAgICAgLyogRHVtbXkg YWN0aW9uIGVudHJpZXMsIGRvbid0IGhhdmUgbGFuZGluZyBwYWRzLiAgKi8N CisgICAgICBpZiAoIURVTU1ZX0FDVElPTl9SRUdJT04gKHJlZ2lvbl9sZW4p KQ0KKwl7DQorCSAgY3NfcHRyID0gcmVhZF9zbGViMTI4IChjc19wdHIsIHBs cF9vZmYpOw0KKwkgIGxwID0gKnBscF9vZmY7DQorCX0NCisgICAgICAvKiBJ ZiBjb250aW51ZV91bndpbmRpbmcsIGFkdmFuY2UgdG8gbmV4dCBlbnRyeS4g ICovDQorICAgICAgaWYgKENPTlRJTlVFX1VOV0lORElOR19SRUdJT04gKGxw KSkNCisJdHlwZSA9IENPTlRJTlVFX1VOV0lORElOR19UWVBFOw0KKyAgICAg IGVsc2UNCisJew0KKwkgIGludCBhY3Rpb25fdmFsdWUsIGNoYWluX3ZhbHVl Ow0KKwkgIF9zbGViMTI4X3QgYWNfcGFpcjsNCisNCisJICBjc19wdHIgPSBy ZWFkX3NsZWIxMjggKGNzX3B0ciwgJmFjX3BhaXIpOw0KKwkgIGFjdGlvbl92 YWx1ZSA9IEVYVFJBQ1RfQUNUSU9OX1ZBTFVFIChhY19wYWlyKTsNCisJICBj aGFpbl92YWx1ZSA9IEVYVFJBQ1RfQ0hBSU5fVkFMVUUgKGFjX3BhaXIpOw0K KwkgIGlmIChhY3Rpb25fdmFsdWUgPT0gQUNUSU9OX0VYVEVOU0lPTikNCisJ ICAgIHsNCisJICAgICAgX3NsZWIxMjhfdCBhY19leHQ7DQorCSAgICAgIGNz X3B0ciA9IHJlYWRfc2xlYjEyOCAoY3NfcHRyLCAmYWNfZXh0KTsNCisJICAg ICAgYWN0aW9uX3ZhbHVlID0gYWNfZXh0Ow0KKwkgICAgfQ0KKw0KKwkgIGlm IChhY3Rpb25fdmFsdWUgPT0gMCkNCisJICAgIHR5cGUgPSBDTEVBTlVQX1RZ UEU7DQorCSAgZWxzZSBpZiAoYWN0aW9uX3ZhbHVlID4gMCkNCisJICAgIHR5 cGUgPSBDQVRDSF9UWVBFOw0KKwkgIGVsc2UNCisJICAgIHR5cGUgPSBFSF9T UEVDX1RZUEU7DQorDQorCSAgKnBhdiA9IGFjdGlvbl92YWx1ZTsNCisJICAq cGN2ID0gY2hhaW5fdmFsdWU7DQorCX0NCisgICAgfQ0KKw0KKyAgKnBjc19w dHIgPSBjc19wdHI7DQorICByZXR1cm4gdHlwZTsNCit9DQorDQorLyogR2l2 ZW4gYSByZWdpb24gZW50cnkgbnVtYmVyLCByZXR1cm4gYSBwb2ludGVyIHRv IGl0cyBjYWxsLXNpdGUNCisgICB0YWJsZSBlbnRyeS4gICovDQorDQorc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKg0KK2NvbXBhY3RfZ290b19yZWdp b24gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNzX3B0ciwgaW50IHJlZ2lvbl9u bywNCisJCSAgICAgaW50IGNoYWluX3RvX3JlZ2lvbikNCit7DQorICB3aGls ZSAodHJ1ZSkNCisgICAgew0KKyAgICAgIF91bGViMTI4X3QgcmVnaW9uX2xl bjsNCisgICAgICBpbnQgYWN0aW9uX3ZhbHVlLCBjaGFpbl92YWx1ZTsNCisg ICAgICBfc2xlYjEyOF90IGxwX29mZjsNCisNCisgICAgICByZWdpb25fbm8r KzsNCisgICAgICBpZiAocmVnaW9uX25vID09IGNoYWluX3RvX3JlZ2lvbikN CisJYnJlYWs7DQorDQorICAgICAgY29tcGFjdF9wYXJzZV9oZWFkZXIgKCZj c19wdHIsICZyZWdpb25fbGVuLCAmYWN0aW9uX3ZhbHVlLA0KKwkJCSAgICAm Y2hhaW5fdmFsdWUsICZscF9vZmYpOw0KKyAgICB9DQorICByZXR1cm4gY3Nf cHRyOw0KK30NCisNCisvKiBSZXR1cm4gdGhlIG5leHQgcmVnaW9uIG51bWJl ci4gIFRoZSBuZXh0IHJlZ2lvbiBpcyB0aGUgY3VycmVudA0KKyAgIHJlZ2lv biBudW1iZXIgbGVzcyB0aGUgY2hhaW5fdmFsdWUuICBObyBUaHJvdyByZWdp b25zIGFyZSBpZ25vcmVkLiAgKi8NCisNCitzdGF0aWMgaW50DQorY29tcGFj dF9iYWNrd2FyZF9maW5kX2NoYWluIChjb25zdCB1bnNpZ25lZCBjaGFyICpj c19zdGFydCwNCisJCQkgICAgIGludCByZWdpb25fbm8sIGludCBjaGFpbl92 YWx1ZSkNCit7DQorICBpbnQgbG9va2luZ19mb3IgPSByZWdpb25fbm8gLSAx Ow0KKyAgaW50IGxvb2tpbmdfYXQgPSAtMTsNCisgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmNzX3B0ciA9IGNzX3N0YXJ0Ow0KKw0KKyAgd2hpbGUgKHRydWUp DQorICAgIHsNCisgICAgICBfdWxlYjEyOF90IHJlZ2lvbl9sZW47DQorICAg ICAgaW50IGFjdGlvbl92YWx1ZSwgdW51c2VkX2NoYWluX3ZhbHVlOw0KKyAg ICAgIF9zbGViMTI4X3QgbHBfb2ZmOw0KKyAgICAgIGVudW0gZXhjZXB0aW9u X2VudHJ5X3R5cGUgdHlwZTsNCisNCisgICAgICBsb29raW5nX2F0Kys7DQor ICAgICAgdHlwZSA9IGNvbXBhY3RfcGFyc2VfaGVhZGVyICgmY3NfcHRyLCAm cmVnaW9uX2xlbiwgJmFjdGlvbl92YWx1ZSwNCisJCQkJICAgJnVudXNlZF9j aGFpbl92YWx1ZSwgJmxwX29mZik7DQorDQorICAgICAgaWYgKGxvb2tpbmdf YXQgPT0gbG9va2luZ19mb3IpDQorCXsNCisJICBpZiAodHlwZSAhPSBOT1RI Uk9XX1RZUEUgJiYgdHlwZSAhPSBDT05USU5VRV9VTldJTkRJTkdfVFlQRSkN CisJICAgIGNoYWluX3ZhbHVlID0gY2hhaW5fdmFsdWUgKyAxOw0KKw0KKwkg IGlmIChjaGFpbl92YWx1ZSA9PSAwKQ0KKwkgICAgYnJlYWs7DQorDQorCSAg bG9va2luZ19hdCA9IC0xOw0KKwkgIGxvb2tpbmdfZm9yLS07DQorCSAgY3Nf cHRyID0gY3Nfc3RhcnQ7DQorCX0NCisgICAgfQ0KKyAgcmV0dXJuIGxvb2tp bmdfYXQ7DQorfQ0KKw0KKy8qIFJldHVybiB0aGUgbmV4dCByZWdpb24gbnVt YmVyLiAgY2hhaW5fdmFsdWUgaXMgdGhlIG51bWJlciBvZg0KKyAgIHJlZ2lv biBlbnRyaWVzIGluIHRoZSBjYWxsLXNpdGUgdGFibGUgdG8gYWR2YW5jZS4g IE5vIFRocm93DQorICAgcmVnaW9ucyBhcmUgaWdub3JlZCBhbmQgbm90IGlu Y2x1ZGVkIGluIHRoZSBjb3VudC4gICovDQorDQorc3RhdGljIGludA0KK2Nv bXBhY3RfZm9yd2FyZF9maW5kX2NoYWluIChjb25zdCB1bnNpZ25lZCBjaGFy ICpjc19wdHIsIGludCByZWdpb25fbm8sDQorCQkJICAgIGludCBjaGFpbl92 YWx1ZSkNCit7DQorICBpbnQgdmFsaWRfcmVnaW9ucyA9IDA7DQorDQorICB3 aGlsZSAodHJ1ZSkNCisgICAgew0KKyAgICAgIF91bGViMTI4X3QgcmVnaW9u X2xlbjsNCisgICAgICBpbnQgYWN0aW9uX3ZhbHVlLCB1bnVzZWRfY2hhaW5f dmFsdWU7DQorICAgICAgX3NsZWIxMjhfdCBscF9vZmY7DQorICAgICAgZW51 bSBleGNlcHRpb25fZW50cnlfdHlwZSB0eXBlOw0KKw0KKyAgICAgIHJlZ2lv bl9ubysrOw0KKyAgICAgIHR5cGUgPSBjb21wYWN0X3BhcnNlX2hlYWRlciAo JmNzX3B0ciwgJnJlZ2lvbl9sZW4sICZhY3Rpb25fdmFsdWUsDQorCQkJCSAg ICZ1bnVzZWRfY2hhaW5fdmFsdWUsICZscF9vZmYpOw0KKw0KKyAgICAgIGlm ICh0eXBlID09IE5PVEhST1dfVFlQRSB8fCB0eXBlID09IENPTlRJTlVFX1VO V0lORElOR19UWVBFKQ0KKwljb250aW51ZTsNCisNCisgICAgICB2YWxpZF9y ZWdpb25zKys7DQorICAgICAgaWYgKHZhbGlkX3JlZ2lvbnMgPT0gY2hhaW5f dmFsdWUpDQorCXJldHVybiByZWdpb25fbm87DQorICAgIH0NCit9DQorDQor LyogUmV0dXJuIHRoZSBuZXh0IHJlZ2lvbiBudW1iZXIgaW4gdGhlIGNoYWlu LiAgKi8NCisNCitzdGF0aWMgaW50DQorY29tcGFjdF9maW5kX2NoYWluX3Rv X3JlZ2lvbiAoY29uc3QgdW5zaWduZWQgY2hhciAqY3Nfc3RhcnQsDQorCQkJ ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmNzX3B0ciwNCisJCQkgICAg ICBpbnQgKnJlZ2lvbl9ubywgaW50IGNoYWluX3ZhbHVlKQ0KK3sNCisgIGlu dCBjaGFpbl90b19yZWdpb247DQorDQorICBpZiAoY2hhaW5fdmFsdWUgPCAw KQ0KKyAgICBjaGFpbl90b19yZWdpb24NCisgICAgICA9IGNvbXBhY3RfYmFj a3dhcmRfZmluZF9jaGFpbiAoY3Nfc3RhcnQsICpyZWdpb25fbm8sIGNoYWlu X3ZhbHVlKTsNCisgIGVsc2UNCisgICAgY2hhaW5fdG9fcmVnaW9uDQorICAg ICAgPSBjb21wYWN0X2ZvcndhcmRfZmluZF9jaGFpbiAoKmNzX3B0ciwgKnJl Z2lvbl9ubywgY2hhaW5fdmFsdWUpOw0KKw0KKyAgcmV0dXJuIGNoYWluX3Rv X3JlZ2lvbjsNCit9DQorDQordHlwZWRlZiBjb25zdCBzdGQ6OnR5cGVfaW5m byBfdGhyb3dfdHlwZXQ7DQorDQorbmFtZXNwYWNlIF9fY3h4YWJpdjENCit7 DQorDQorI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpDQor ZXh0ZXJuICJDIiBfVW53aW5kX1JlYXNvbl9Db2RlDQorX19nbnVfY29tcGFj dF9wcjIgKGludCB2ZXJzaW9uIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwN CisJCSAgIF9VbndpbmRfQWN0aW9uIGFjdGlvbnMsDQorCQkgICBfVW53aW5k X0V4Y2VwdGlvbl9DbGFzcyBleGNlcHRpb25fY2xhc3MsDQorCQkgICBzdHJ1 Y3QgX1Vud2luZF9FeGNlcHRpb24gKnVlX2hlYWRlciwNCisJCSAgIHN0cnVj dCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQpDQorew0KKyAgY29uc3QgdW5z aWduZWQgY2hhciAqY3NfcHRyLCAqbGFuZ3VhZ2Vfc3BlY2lmaWNfZGF0YTsN CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNzX3N0YXJ0LCAqY3NfZW5kOw0K KyAgY29uc3QgdW5zaWduZWQgY2hhciAqcGFkZGluZ19zdGFydDsNCisgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmVoc3BlY3Nfc3RhcnQ7DQorDQorICBfVW53 aW5kX1B0ciBpcCwgaXBfc3RhcnQsIGlwX2VuZDsNCisgIF9VbndpbmRfUHRy IGxwX3N0YXJ0LCBsYW5kaW5nX3BhZDsNCisgIF9VbndpbmRfUHRyIHR0YWJs ZV9zdGFydDsNCisgIF9VbndpbmRfUHRyIGxzZGE7DQorDQorICBfc2xlYjEy OF90IGxwX29mZjsNCisgIF91bGViMTI4X3QgcmVnaW9uX2xlbjsNCisgIF91 bGViMTI4X3QgY2FsbF9zaXRlX2xlbjsNCisgIF91bGViMTI4X3QgZWhzcGVj c19sZW47DQorDQorICBjb25zdCBzdGQ6OnR5cGVfaW5mbyogY2F0Y2hfdHlw ZTsNCisgIGludCBjaGFpbl92YWx1ZSwgYWN0aW9uX3ZhbHVlOw0KKyAgaW50 IHJlZ2lvbl9ubzsNCisgIGludCBoYW5kbGVyX3N3aXRjaF92YWx1ZTsNCisg IGJvb2wgY2hhaW5pbmcgPSBmYWxzZTsNCisgIGludCBjaGFpbl90b19yZWdp b247DQorICBlbnVtIGV4Y2VwdGlvbl9lbnRyeV90eXBlIHJlZ2lvbl90eXBl Ow0KKyAgYm9vbCBmb3JlaWduX2V4Y2VwdGlvbjsNCisgIGludCBpcF9iZWZv cmVfaW5zbiA9IDA7DQorDQorICB2b2lkICp0aHJvd25fcHRyID0gMDsNCisg IF90aHJvd190eXBldCAqdGhyb3dfdHlwZTsNCisgIHVuc2lnbmVkIGNoYXIg ZWhfZW5jb2RpbmcgPSBfVW53aW5kX0dldEVoRW5jb2RpbmcgKGNvbnRleHQp Ow0KKyAgX1Vud2luZF9QdHIgYmFzZSA9IGJhc2Vfb2ZfZW5jb2RlZF92YWx1 ZSAoZWhfZW5jb2RpbmcsIGNvbnRleHQpOw0KKyAgX19jeGFfZXhjZXB0aW9u ICp4aCA9IF9fZ2V0X2V4Y2VwdGlvbl9oZWFkZXJfZnJvbV91ZSh1ZV9oZWFk ZXIpOw0KKw0KKyAgZW51bSBmb3VuZF9oYW5kbGVyX3R5cGUNCisgIHsNCisg ICAgZm91bmRfbm90aGluZywNCisgICAgZm91bmRfdGVybWluYXRlLA0KKyAg ICBmb3VuZF9jbGVhbnVwLA0KKyAgICBmb3VuZF9oYW5kbGVyLA0KKyAgfSBm b3VuZF90eXBlID0gZm91bmRfbm90aGluZzsNCisNCisgIGxhbmd1YWdlX3Nw ZWNpZmljX2RhdGEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQ0KKyAgICBf VW53aW5kX0dldExhbmd1YWdlU3BlY2lmaWNEYXRhIChjb250ZXh0KTsNCisN CisgIC8vIElmIG5vIExTREEsIHRoZW4gdGhlcmUgYXJlIG5vIGhhbmRsZXJz IG9yIGNsZWFudXBzLg0KKyAgaWYgKCFsYW5ndWFnZV9zcGVjaWZpY19kYXRh KQ0KKyAgICByZXR1cm4gX1VSQ19DT05USU5VRV9VTldJTkQ7DQorDQorICAv KiBSZWFkIHRoZSBMU0RBIGhlYWRlci4gICovDQorICBjc19wdHIgPQ0KKyAg ICByZWFkX2VuY29kZWRfdmFsdWUgKDAsIERXX0VIX1BFX3VkYXRhMSwgbGFu Z3VhZ2Vfc3BlY2lmaWNfZGF0YSwgJmxzZGEpOw0KKyAgLyogVGhlbiB0aGUg Q2FsbC1zaXRlIGxlbmd0aC4gICovDQorICBjc19wdHIgPSByZWFkX3VsZWIx MjggKGNzX3B0ciwgJmNhbGxfc2l0ZV9sZW4pOw0KKyAgY3Nfc3RhcnQgPSBj c19wdHI7DQorICBjc19lbmQgPSBjc19zdGFydCArIGNhbGxfc2l0ZV9sZW47 DQorDQorICAvKiBSZWFkIHRoZSBlaHNwZWNzIGlmIHRoZXkgYXJlIHByZXNl bnQgYW5kIHNldHVwDQorICAgICBhIHBvaW50ZXIgdG8gdGhlIHR5cGUgdGFi bGUgZW50cmllcy4gICovDQorICBpZiAoSEFWRV9FSFNQRUNTIChsc2RhKSkN CisgICAgew0KKyAgICAgIGVoc3BlY3Nfc3RhcnQgPSByZWFkX3VsZWIxMjgg KGNzX3N0YXJ0ICsgY2FsbF9zaXRlX2xlbiwgJmVoc3BlY3NfbGVuKTsNCisg ICAgICBwYWRkaW5nX3N0YXJ0ID0gZWhzcGVjc19zdGFydCArIGVoc3BlY3Nf bGVuOw0KKyAgICAgIHR0YWJsZV9zdGFydCA9IFRUQUJMRV9TVEFSVCAoKF9V bndpbmRfUHRyKSBwYWRkaW5nX3N0YXJ0KTsNCisgICAgfQ0KKyAgZWxzZQ0K KyAgICB0dGFibGVfc3RhcnQgPSBUVEFCTEVfU1RBUlQgKChfVW53aW5kX1B0 cikgY3Nfc3RhcnQgKyBjYWxsX3NpdGVfbGVuKTsNCisNCisgIGZvcmVpZ25f ZXhjZXB0aW9uID0gIV9faXNfZ3h4X2V4Y2VwdGlvbl9jbGFzcyhleGNlcHRp b25fY2xhc3MpOw0KKyAgLy8gU2hvcnRjdXQgZm9yIHBoYXNlIDIgZm91bmQg aGFuZGxlciBmb3IgZG9tZXN0aWMgZXhjZXB0aW9uLg0KKyAgaWYgKGFjdGlv bnMgPT0gKF9VQV9DTEVBTlVQX1BIQVNFIHwgX1VBX0hBTkRMRVJfRlJBTUUp DQorICAgICAgJiYgIWZvcmVpZ25fZXhjZXB0aW9uKQ0KKyAgICB7DQorICAg ICAgcmVzdG9yZV9jYXVnaHRfZXhjZXB0aW9uICh1ZV9oZWFkZXIsIGhhbmRs ZXJfc3dpdGNoX3ZhbHVlLA0KKwkJCQlsYW5ndWFnZV9zcGVjaWZpY19kYXRh LCBsYW5kaW5nX3BhZCk7DQorICAgICAgZm91bmRfdHlwZSA9IChsYW5kaW5n X3BhZCA9PSAwID8gZm91bmRfdGVybWluYXRlIDogZm91bmRfaGFuZGxlcik7 DQorICAgICAgZ290byBpbnN0YWxsX2NvbnRleHQ7DQorICAgIH0NCisNCisj aWZkZWYgX0dMSUJDWFhfSEFWRV9HRVRJUElORk8NCisgIGlwID0gX1Vud2lu ZF9HZXRJUEluZm8gKGNvbnRleHQsICZpcF9iZWZvcmVfaW5zbik7DQorI2Vs c2UNCisgIGlwID0gX1Vud2luZF9HZXRJUCAoY29udGV4dCk7DQorI2VuZGlm DQorICBpZiAoIWlwX2JlZm9yZV9pbnNuKQ0KKyAgICAtLWlwOw0KKw0KKyAg aXBfc3RhcnQgPSBscF9zdGFydCA9IF9VbndpbmRfR2V0UmVnaW9uU3RhcnQg KGNvbnRleHQpOw0KKyAgcmVnaW9uX25vID0gMDsNCisNCisgIC8qIEV4YW1p bmUgZWFjaCByZWdpb24gZW50cnksIGxvb2tpbmcgZm9yDQorICAgICBhIG1h dGNoaW5nIGlwIGFkZHJlc3Mgb3IgY2hhaW4gdmFsdWUuICAqLw0KKyAgd2hp bGUgKGNzX3B0ciA8IGNzX2VuZCkNCisgICAgew0KKyAgICAgIHJlZ2lvbl90 eXBlID0gY29tcGFjdF9wYXJzZV9oZWFkZXIgKCZjc19wdHIsICZyZWdpb25f bGVuLCAmYWN0aW9uX3ZhbHVlLA0KKwkJCQkJICAmY2hhaW5fdmFsdWUsICZs cF9vZmYpOw0KKw0KKyAgICAgIGlmIChEVU1NWV9BQ1RJT05fUkVHSU9OIChy ZWdpb25fbGVuKSAmJiAhY2hhaW5pbmcpDQorCWJyZWFrOw0KKw0KKyAgICAg IHJlZ2lvbl9sZW4gJj0gfkxFTkdUSF9NQVNLOw0KKyAgICAgIGxwX3N0YXJ0 ICs9IHJlZ2lvbl9sZW47DQorICAgICAgaXBfZW5kID0gaXBfc3RhcnQgKyBy ZWdpb25fbGVuOw0KKw0KKyAgICAgIHN3aXRjaCAocmVnaW9uX3R5cGUpDQor CXsNCisJY2FzZSBOT1RIUk9XX1RZUEU6DQorCSAgYnJlYWs7DQorCQ0KKwlj YXNlIENPTlRJTlVFX1VOV0lORElOR19UWVBFOg0KKwkgIGlmIChpcCA+PSBp cF9zdGFydCAmJiBpcCA8PSBpcF9lbmQpDQorCSAgICByZXR1cm4gX1VSQ19D T05USU5VRV9VTldJTkQ7DQorCSAgYnJlYWs7DQorDQorCWNhc2UgQ0xFQU5V UF9UWVBFOg0KKwkgIGlmIChjaGFpbmluZw0KKwkgICAgICB8fCAoaXAgPj0g aXBfc3RhcnQgJiYgaXAgPD0gaXBfZW5kKSkNCisJICAgIHsNCisJICAgICAg Zm91bmRfdHlwZSA9IGZvdW5kX2NsZWFudXA7DQorCSAgICAgIGhhbmRsZXJf c3dpdGNoX3ZhbHVlID0gYWN0aW9uX3ZhbHVlOw0KKwkgICAgICBpZiAoIWNo YWluaW5nKQ0KKwkgICAgICAgIGxhbmRpbmdfcGFkID0gbHBfc3RhcnQgKyBs cF9vZmY7DQorDQorCSAgICAgIC8qIEZvciBjbGVhbnVwcywgd2FsayB0aGUg Y2hhaW4uICBUaGUgY2xlYW51cCBpcw0KKwkJIHByb2Nlc3NlZCBvbmx5IGlm IHRoZXJlIGFyZSBubyBvdGhlciBtYXRjaGVzLiAgKi8NCisNCisJICAgICAg aWYgKGNoYWluX3ZhbHVlID09IDApDQorCQlnb3RvIGZvdW5kX3NvbWV0aGlu ZzsNCisJICAgICAgZWxzZQ0KKwkJew0KKwkJICBjaGFpbmluZyA9IHRydWU7 DQorCQkgIGNoYWluX3RvX3JlZ2lvbiA9IA0KKwkJICAgICAgY29tcGFjdF9m aW5kX2NoYWluX3RvX3JlZ2lvbiAoY3Nfc3RhcnQsICZjc19wdHIsDQorCQkJ CQkJICAgICZyZWdpb25fbm8sIGNoYWluX3ZhbHVlKTsNCisJCX0NCisJICAg IH0NCisJICBicmVhazsNCisNCisJY2FzZSBDQVRDSF9UWVBFOg0KKwkgIGlm ICghY2hhaW5pbmcNCisJICAgICAgJiYgKGlwIDwgaXBfc3RhcnQgfHwgaXAg PiBpcF9lbmQpKQ0KKwkgICAgYnJlYWs7DQorDQorI2lmZGVmIF9fR1hYX1JU VEkNCisJICAvLyBEdXJpbmcgZm9yY2VkIHVud2luZGluZywgbWF0Y2ggYSBt YWdpYyBleGNlcHRpb24gdHlwZS4NCisJICBpZiAoYWN0aW9ucyAmIF9VQV9G T1JDRV9VTldJTkQpDQorCSAgICB0aHJvd190eXBlID0gJnR5cGVpZChhYmk6 Ol9fZm9yY2VkX3Vud2luZCk7DQorDQorCSAgLy8gV2l0aCBhIGZvcmVpZ24g ZXhjZXB0aW9uIGNsYXNzLCB0aGVyZSdzIG5vIGV4Y2VwdGlvbiB0eXBlLg0K KwkgIGVsc2UgaWYgKGZvcmVpZ25fZXhjZXB0aW9uKQ0KKwkgICAgdGhyb3df dHlwZSA9ICZ0eXBlaWQoYWJpOjpfX2ZvcmVpZ25fZXhjZXB0aW9uKTsNCisJ ICBlbHNlDQorI2VuZGlmDQorCSAgICB7DQorCSAgICAgIHRocm93bl9wdHIg PSBfX2dldF9vYmplY3RfZnJvbV91ZSAodWVfaGVhZGVyKTsNCisJICAgICAg dGhyb3dfdHlwZSA9IF9fZ2V0X2V4Y2VwdGlvbl9oZWFkZXJfZnJvbV9vYmoN CisJCSh0aHJvd25fcHRyKS0+ZXhjZXB0aW9uVHlwZTsNCisJICAgIH0NCisJ ICBjYXRjaF90eXBlID0NCisJICAgIGNvbXBhY3RfZ2V0X3R0eXBlX2VudHJ5 IChiYXNlLA0KKwkJCQkgICAgIGVoX2VuY29kaW5nLCB0dGFibGVfc3RhcnQs IGFjdGlvbl92YWx1ZSk7DQorDQorCSAgaWYgKGNhdGNoX3R5cGUgPT0gMA0K KwkgICAgICB8fCBnZXRfYWRqdXN0ZWRfcHRyIChjYXRjaF90eXBlLCB0aHJv d190eXBlLCAmdGhyb3duX3B0cikpDQorCSAgICB7DQorCSAgICAgIGZvdW5k X3R5cGUgPSBmb3VuZF9oYW5kbGVyOw0KKwkgICAgICBoYW5kbGVyX3N3aXRj aF92YWx1ZSA9IGFjdGlvbl92YWx1ZTsNCisJICAgICAgaWYgKCFjaGFpbmlu ZykNCisJCWxhbmRpbmdfcGFkID0gbHBfc3RhcnQgKyBscF9vZmY7DQorCSAg ICAgIGdvdG8gZm91bmRfc29tZXRoaW5nOw0KKwkgICAgfQ0KKw0KKwkgIC8q IFdhbGsgdGhlIGNoYWluIGlmIHdlIGRpZG4ndCBtYXRjaC4gICovDQorCSAg aWYgKGNoYWluX3ZhbHVlICE9IDApDQorCSAgICB7DQorCSAgICAgIGlmICgh Y2hhaW5pbmcpDQorCQlsYW5kaW5nX3BhZCA9IGxwX3N0YXJ0ICsgbHBfb2Zm Ow0KKwkgICAgICBjaGFpbmluZyA9IHRydWU7DQorCSAgICAgIGNoYWluX3Rv X3JlZ2lvbiA9IA0KKwkJY29tcGFjdF9maW5kX2NoYWluX3RvX3JlZ2lvbiAo Y3Nfc3RhcnQsICZjc19wdHIsDQorCQkJCQkgICAgICAmcmVnaW9uX25vLCBj aGFpbl92YWx1ZSk7DQorCSAgICB9DQorCSAgZWxzZQ0KKwkgICAgLy8gSVAg bWF0Y2hlZCBhbmQgbm90IGNoYWluaW5nLg0KKwkgICAgZ290byBmb3VuZF9z b21ldGhpbmc7DQorDQorCSAgYnJlYWs7DQorDQorCWNhc2UgRUhfU1BFQ19U WVBFOg0KKyNpZmRlZiBfX0dYWF9SVFRJDQorCSAgLy8gRHVyaW5nIGZvcmNl ZCB1bndpbmRpbmcsIG1hdGNoIGEgbWFnaWMgZXhjZXB0aW9uIHR5cGUuDQor CSAgaWYgKGFjdGlvbnMgJiBfVUFfRk9SQ0VfVU5XSU5EKQ0KKwkgICAgdGhy b3dfdHlwZSA9ICZ0eXBlaWQoYWJpOjpfX2ZvcmNlZF91bndpbmQpOw0KKw0K KwkgIC8vIFdpdGggYSBmb3JlaWduIGV4Y2VwdGlvbiBjbGFzcywgdGhlcmUn cyBubyBleGNlcHRpb24gdHlwZS4NCisJICBlbHNlIGlmIChmb3JlaWduX2V4 Y2VwdGlvbikNCisJICAgIHRocm93X3R5cGUgPSAmdHlwZWlkKGFiaTo6X19m b3JlaWduX2V4Y2VwdGlvbik7DQorDQorCSAgZWxzZQ0KKyNlbmRpZg0KKwkg ICAgew0KKwkgICAgICB0aHJvd25fcHRyID0gX19nZXRfb2JqZWN0X2Zyb21f dWUgKHVlX2hlYWRlcik7DQorCSAgICAgIHRocm93X3R5cGUgPSBfX2dldF9l eGNlcHRpb25faGVhZGVyX2Zyb21fb2JqDQorCQkodGhyb3duX3B0ciktPmV4 Y2VwdGlvblR5cGU7DQorCSAgICB9DQorCSAgaWYgKGlwID49IGlwX3N0YXJ0 ICYmIGlwIDw9IGlwX2VuZCkNCisJICAgIHsNCisJICAgICAgaWYgKCFjaGFp bmluZykNCisJCWxhbmRpbmdfcGFkID0gbHBfc3RhcnQgKyBscF9vZmY7DQor DQorCSAgICAgIC8qIEFuIGVoc3BlYyBvZiB6ZXJvIGlzIGFuIGltbWVkaWF0 ZSBtYXRjaC4gICovDQorCSAgICAgIGlmIChlaHNwZWNzX2xlbiA9PSAwKQ0K KwkJew0KKwkJICBmb3VuZF90eXBlID0gZm91bmRfaGFuZGxlcjsNCisJCSAg aGFuZGxlcl9zd2l0Y2hfdmFsdWUgPSBhY3Rpb25fdmFsdWU7DQorCQkgIGdv dG8gZm91bmRfc29tZXRoaW5nOw0KKwkJfQ0KKwkgICAgICBlbHNlIGlmICh0 aHJvd190eXBlDQorCQkgICAgICAgJiYgIShhY3Rpb25zICYgX1VBX0ZPUkNF X1VOV0lORCkNCisJCSAgICAgICAmJiAhZm9yZWlnbl9leGNlcHRpb24pDQor CQl7DQorCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7DQorCQkgIF91bGVi MTI4X3QgZWh2YWw7DQorDQorCQkgIGJvb2wgbWF0Y2hlZF9zcGVjID0gZmFs c2U7DQorCQkgIGludCBzaSA9IGFicyAoYWN0aW9uX3ZhbHVlKSAtIDE7DQor CQkgIHAgPSByZWFkX3VsZWIxMjggKGVoc3BlY3Nfc3RhcnQgKyBzaSwgJmVo dmFsKTsNCisJCSAgLyogUmVhZCB0aGUgZWhzcGVjIGVudHJpZXMgdW50aWwg YSBtYXRjaCBpcyBmb3VuZCBvciB0aGUNCisJCSAgICAgbGlzdCBpcyBleGhh dXN0ZWQuICBQcm9jZXNzIGFzIGEgaGFuZGxlciBpZiBubyBtYXRjaA0KKwkJ ICAgICBpcyBhY2hpZXZlZC4gICovDQorCQkgIHdoaWxlICghbWF0Y2hlZF9z cGVjICYmIGVodmFsICE9IDApDQorCQkgICAgew0KKwkgICAgICAgICAgICAg IGNhdGNoX3R5cGUgPSBjb21wYWN0X2dldF90dHlwZV9lbnRyeSAoYmFzZSwg ZWhfZW5jb2RpbmcsDQorCQkJCQkJCSAgICB0dGFibGVfc3RhcnQsIGVodmFs KTsNCisNCisJCSAgICAgIGlmIChnZXRfYWRqdXN0ZWRfcHRyIChjYXRjaF90 eXBlLCB0aHJvd190eXBlLCAmdGhyb3duX3B0cikpDQorCQkJbWF0Y2hlZF9z cGVjID0gdHJ1ZTsNCisJCSAgICAgIHAgPSByZWFkX3VsZWIxMjggKHAsICZl aHZhbCk7DQorCQkgICAgfQ0KKwkJICBpZiAoIW1hdGNoZWRfc3BlYykNCisJ CSAgICB7DQorCQkgICAgICBmb3VuZF90eXBlID0gZm91bmRfaGFuZGxlcjsN CisJCSAgICAgIGhhbmRsZXJfc3dpdGNoX3ZhbHVlID0gYWN0aW9uX3ZhbHVl Ow0KKwkJICAgICAgZ290byBmb3VuZF9zb21ldGhpbmc7DQorCQkgICAgfQ0K KwkJfQ0KKwkgICAgICBpZiAoY2hhaW5fdmFsdWUgIT0gMCkNCisJCXsNCisJ CSAgaWYgKCFjaGFpbmluZykNCisJCSAgICBsYW5kaW5nX3BhZCA9IGxwX3N0 YXJ0ICsgbHBfb2ZmOw0KKwkJICBjaGFpbmluZyA9IHRydWU7DQorCQkgIGNo YWluX3RvX3JlZ2lvbiA9IA0KKwkJICAgIGNvbXBhY3RfZmluZF9jaGFpbl90 b19yZWdpb24gKGNzX3N0YXJ0LCAmY3NfcHRyLA0KKwkJCQkJCSAgJnJlZ2lv bl9ubywgY2hhaW5fdmFsdWUpOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQkv LyBJUCBtYXRjaGVkIGFuZCBub3QgY2hhaW5pbmcuDQorCQlnb3RvIGZvdW5k X3NvbWV0aGluZzsNCisJICAgIH0NCisJICBicmVhazsNCisNCisJY2FzZSBV TktOT1dOX1RZUEU6DQorCSAgYnJlYWs7DQorCX0NCisNCisgICAgICAvKiBJ ZiBhIGNoYWluIHdhcyBkaXNjb3ZlcmVkLCBmaW5kIHRoZSBuZXh0IHJlZ2lv biBlbnRyeSBpbiB0aGUgY2hhaW4uICAqLw0KKyAgICAgIGlmIChjaGFpbmlu ZyAmJiByZWdpb25fbm8gIT0gY2hhaW5fdG9fcmVnaW9uKQ0KKwl7DQorCSAg aWYgKGNoYWluX3RvX3JlZ2lvbiA8IHJlZ2lvbl9ubykNCisJICAgIGNzX3B0 ciA9IGNvbXBhY3RfZ290b19yZWdpb24gKGNzX3N0YXJ0LCAtMSwgY2hhaW5f dG9fcmVnaW9uKTsNCisJICBlbHNlDQorCSAgICBjc19wdHIgPSBjb21wYWN0 X2dvdG9fcmVnaW9uIChjc19wdHIsIHJlZ2lvbl9ubywgY2hhaW5fdG9fcmVn aW9uKTsNCisJICByZWdpb25fbm8gPSBjaGFpbl90b19yZWdpb24gLSAxOw0K Kwl9DQorDQorICAgICAgaXBfc3RhcnQgPSBpcF9lbmQ7DQorICAgICAgcmVn aW9uX25vKys7DQorICAgIH0NCisJICAgIA0KKyAgLyogRWFjaCByZWdpb24g aGFzIGJlZW4gZXhhbWluZWQgd2l0aG91dCBmaW5kaW5nIGEgbWF0Y2guICAq Lw0KKyAgaWYgKGZvdW5kX3R5cGUgPT0gZm91bmRfbm90aGluZykNCisgICAg ew0KKyAgICAgIGZvdW5kX3R5cGUgPSBmb3VuZF90ZXJtaW5hdGU7DQorICAg ICAgbGFuZGluZ19wYWQgPSAwOw0KKyAgICB9DQorDQorZm91bmRfc29tZXRo aW5nOg0KKw0KKyAgaWYgKGZvdW5kX3R5cGUgPT0gZm91bmRfbm90aGluZykN CisgICAgcmV0dXJuIF9VUkNfQ09OVElOVUVfVU5XSU5EOw0KKw0KKyAgaWYg KGFjdGlvbnMgJiBfVUFfU0VBUkNIX1BIQVNFKQ0KKyAgICB7DQorICAgICAg aWYgKGZvdW5kX3R5cGUgPT0gZm91bmRfY2xlYW51cCkNCisJcmV0dXJuIF9V UkNfQ09OVElOVUVfVU5XSU5EOw0KKw0KKyAgICAgIGlmICghZm9yZWlnbl9l eGNlcHRpb24pDQorICAgICAgICB7DQorICAgICAgICAgIHNhdmVfY2F1Z2h0 X2V4Y2VwdGlvbih1ZV9oZWFkZXIsIHRocm93bl9wdHIsIGhhbmRsZXJfc3dp dGNoX3ZhbHVlLA0KKwkJCQlsYW5ndWFnZV9zcGVjaWZpY19kYXRhLCBsYW5k aW5nX3BhZCk7DQorICAgICAgICB9DQorICAgICAgcmV0dXJuIF9VUkNfSEFO RExFUl9GT1VORDsNCisgICAgfQ0KKw0KK2luc3RhbGxfY29udGV4dDoNCisg IA0KKyAgLy8gV2UgY2FuJ3QgdXNlIGFueSBvZiB0aGUgY3hhIHJvdXRpbmVz IHdpdGggZm9yZWlnbiBleGNlcHRpb25zLA0KKyAgLy8gYmVjYXVzZSB0aGV5 IGFsbCBleHBlY3QgdWVfaGVhZGVyIHRvIGJlIGEgc3RydWN0IF9fY3hhX2V4 Y2VwdGlvbi4NCisgIC8vIFNvIGluIHRoYXQgY2FzZSwgY2FsbCB0ZXJtaW5h dGUgb3IgdW5leHBlY3RlZCBkaXJlY3RseS4NCisgIGlmICgoYWN0aW9ucyAm IF9VQV9GT1JDRV9VTldJTkQpDQorICAgICAgfHwgZm9yZWlnbl9leGNlcHRp b24pDQorICAgIHsNCisgICAgICBpZiAoZm91bmRfdHlwZSA9PSBmb3VuZF90 ZXJtaW5hdGUpDQorCXN0ZDo6dGVybWluYXRlICgpOw0KKyAgICAgIGVsc2Ug aWYgKGhhbmRsZXJfc3dpdGNoX3ZhbHVlIDwgMCkNCisJew0KKwkgIF9fdHJ5 IA0KKwkgICAgeyBzdGQ6OnVuZXhwZWN0ZWQgKCk7IH0gDQorCSAgX19jYXRj aCguLi4pIA0KKwkgICAgeyBzdGQ6OnRlcm1pbmF0ZSAoKTsgfQ0KKwl9DQor ICAgIH0NCisgIGVsc2UNCisgICAgew0KKyAgICAgIGlmIChmb3VuZF90eXBl ID09IGZvdW5kX3Rlcm1pbmF0ZSkNCisJX19jeGFfY2FsbF90ZXJtaW5hdGUo dWVfaGVhZGVyKTsNCisNCisgICAgICAvLyBDYWNoZSB0aGUgYmFzZSB2YWx1 ZSBmb3IgX19jeGFfY2FsbF91bmV4cGVjdGVkLCBhcyB3ZSB3b24ndA0KKyAg ICAgIC8vIGhhdmUgYW4gX1Vud2luZF9Db250ZXh0IHRoZW4uDQorICAgICAg aWYgKGhhbmRsZXJfc3dpdGNoX3ZhbHVlIDwgMCkNCisJew0KKwkgIHhoLT5j YXRjaFRlbXAgPSBiYXNlX29mX2VuY29kZWRfdmFsdWUgKGVoX2VuY29kaW5n LCBjb250ZXh0KTsNCisJICAvKiBGb3IgdGhlIGNvbXBhY3QgZW5jb2Rpbmcs IGJpdHMgMC03IG9mDQorCSAgICAgeGgtPmhhbmRsZXJfc3dpdGNoX3ZhbHVl IGFyZSB1c2VkIHRvIHN0b3JlIHRoZQ0KKwkgICAgIGVoX2VuY29kaW5nLiAg Qml0cyA4LTMxIG9mIHhoX2hhbmRsZXJfc3dpdGNoX3ZhbHVlDQorCSAgICAg YXJlIHVzZWQgdG8gc3RvcmUgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5p bmcgb2YNCisgICAgICAgICAgICAgdGhlIExTREEgdG8gdGhlIHR5cGUgY291 bnQgZm9yIHRoaXMgdW5tYXRjaGVkIGV4Y2VwdGlvbg0KKyAgICAgICAgICAg ICBzcGVjaWZpY2F0aW9uLiAgV2Ugc3RvcmUgdGhpcyBhcyBhIHBvc2l0aXZl IG51bWJlciB0byANCisJICAgICBzaWduYWwgdG8gX19jeGFfY2FsbF91bmV4 cGVjdGVkIHRoYXQgdGhlIExTREEgaXMgaW4gDQorICAgICAgICAgICAgIHRo ZSBjb21wYWN0IGZvcm1hdC4gICovDQorDQorCSAgeGgtPmhhbmRsZXJTd2l0 Y2hWYWx1ZSA9IGFicyAoeGgtPmhhbmRsZXJTd2l0Y2hWYWx1ZSkgPDwgODs7 DQorCSAgeGgtPmhhbmRsZXJTd2l0Y2hWYWx1ZSA9IHhoLT5oYW5kbGVyU3dp dGNoVmFsdWUgfCBlaF9lbmNvZGluZzsNCisJICBoYW5kbGVyX3N3aXRjaF92 YWx1ZSA9IC0xOw0KKw0KKwl9ICANCisgICAgfQ0KKw0KKyAgLyogRm9yIHRh cmdldHMgd2l0aCBwb2ludGVycyBzbWFsbGVyIHRoYW4gdGhlIHdvcmQgc2l6 ZSwgd2UgbXVzdA0KKyAgICAgZXh0ZW5kIHRoZSBwb2ludGVyLCBhbmQgdGhp cyBleHRlbnNpb24gaXMgdGFyZ2V0IGRlcGVuZGVudC4gICovDQorICBfVW53 aW5kX1NldEdSIChjb250ZXh0LCBfX2J1aWx0aW5fZWhfcmV0dXJuX2RhdGFf cmVnbm8gKDApLA0KKwkJIF9fYnVpbHRpbl9leHRlbmRfcG9pbnRlciAodWVf aGVhZGVyKSk7DQorICAvKiBoYW5kbGVyX3N3aXRjaF92YWx1ZSB3aWxsIGFs d2F5cyBiZSAtMSBmb3IgYW4NCisgICAgIHVubWF0Y2hlZCBleGNlcHRpb24g c3BlYyBoZWFkZXIuICAqLw0KKyAgX1Vud2luZF9TZXRHUiAoY29udGV4dCwg X19idWlsdGluX2VoX3JldHVybl9kYXRhX3JlZ25vICgxKSwNCisJCSBoYW5k bGVyX3N3aXRjaF92YWx1ZSk7DQorICBfVW53aW5kX1NldElQIChjb250ZXh0 LCBsYW5kaW5nX3BhZCk7DQorICByZXR1cm4gX1VSQ19JTlNUQUxMX0NPTlRF WFQ7DQorfQ0KKw0KKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wDQorfSAv LyBuYW1lc3BhY2UgX19jeHhhYml2MQ0KKyNlbmRpZg0KSW5kZXg6IGxpYnN0 ZGMrKy12My9saWJzdXBjKysvdW53aW5kLWN4eC5oDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gbGlic3RkYysrLXYzL2xpYnN1cGMrKy91bndpbmQt Y3h4LmgJKHJldmlzaW9uIDIzMTIzOCkNCisrKyBsaWJzdGRjKystdjMvbGli c3VwYysrL3Vud2luZC1jeHguaAkod29ya2luZyBjb3B5KQ0KQEAgLTM2Myw2 ICszNjMsMTEgQEAgZXh0ZXJuICJDIiBfVW53aW5kX1JlYXNvbl9Db2RlIF9f Z3h4X3BlcnNvbmFsaXR5X3YNCiAgICAgIChpbnQsIF9VbndpbmRfQWN0aW9u LCBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcywNCiAgICAgICBzdHJ1Y3QgX1Vu d2luZF9FeGNlcHRpb24gKiwgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsN CiANCisvLyBHTlUgQysrIGNvbXBhY3QgZWggcGVyc29uYWxpdHkgcm91dGlu ZS4NCitleHRlcm4gIkMiIF9VbndpbmRfUmVhc29uX0NvZGUgX19nbnVfY29t cGFjdF9wcjINCisgICAgIChpbnQsIF9VbndpbmRfQWN0aW9uLCBfVW53aW5k X0V4Y2VwdGlvbl9DbGFzcywNCisgICAgICBzdHJ1Y3QgX1Vud2luZF9FeGNl cHRpb24gKiwgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsNCisNCiAvLyBH TlUgQysrIHNqbGogcGVyc29uYWxpdHkgcm91dGluZSwgVmVyc2lvbiAwLg0K IGV4dGVybiAiQyIgX1Vud2luZF9SZWFzb25fQ29kZSBfX2d4eF9wZXJzb25h bGl0eV9zajANCiAgICAgIChpbnQsIF9VbndpbmRfQWN0aW9uLCBfVW53aW5k X0V4Y2VwdGlvbl9DbGFzcywNCkluZGV4OiBnY2MvZmluYWwuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9maW5hbC5jCShyZXZpc2lvbiAy MzEyMzgpDQorKysgZ2NjL2ZpbmFsLmMJKHdvcmtpbmcgY29weSkNCkBAIC00 NDQ1LDcgKzQ0NDUsNyBAQCByZXN0X29mX2hhbmRsZV9maW5hbCAodm9pZCkN CiAgIC8qIFRoZSBJQS02NCAiLmhhbmRsZXJkYXRhIiBkaXJlY3RpdmUgbXVz dCBiZSBpc3N1ZWQgYmVmb3JlIHRoZSAiLmVuZHAiDQogICAgICBkaXJlY3Rp dmUgdGhhdCBjbG9zZXMgdGhlIHByb2NlZHVyZSBkZXNjcmlwdG9yLiAgU2lt aWxhcmx5LCBmb3IgeDY0IFNFSC4NCiAgICAgIE90aGVyd2lzZSBpdCdzIG5v dCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpdCBkb2Vzbid0IGh1cnQgZWl0 aGVyLiAgKi8NCi0gIG91dHB1dF9mdW5jdGlvbl9leGNlcHRpb25fdGFibGUg KGZubmFtZSk7DQorICBvdXRwdXRfZnVuY3Rpb25fZXhjZXB0aW9uX3RhYmxl IChmbm5hbWUsIGZhbHNlKTsNCiANCiAgIGFzc2VtYmxlX2VuZF9mdW5jdGlv biAoY3VycmVudF9mdW5jdGlvbl9kZWNsLCBmbm5hbWUpOw0KIA0KSW5kZXg6 IGdjYy90ZXN0c3VpdGUvZysrLmRnL2VoL2NhdGNoNi5DDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZWgvY2F0 Y2g2LkMJKHJldmlzaW9uIDApDQorKysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv ZWgvY2F0Y2g2LkMJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDUzIEBADQor dXNpbmcgbmFtZXNwYWNlIHN0ZDsNCisNCitleHRlcm4gIkMiIHZvaWQgYWJv cnQgKCk7DQorDQorY2xhc3MgZXhjZXB0MSB7DQorcHVibGljOg0KKyAgICBl eHBsaWNpdCBleGNlcHQxIChpbnQgX2kpIHt9DQorfTsNCisNCitjbGFzcyBl eGNlcHQyIHsNCitwdWJsaWM6DQorICAgIGV4cGxpY2l0IGV4Y2VwdDIgKGlu dCBfaSkge30NCit9Ow0KKw0KK3ZvaWQNCitiYXIgKGludCBpKQ0KK3sNCisg IGlmIChpICYgMSkNCisgICAgdGhyb3cgZXhjZXB0MSAoaSk7DQorICB0aHJv dyBleGNlcHQyIChpKTsNCit9DQorDQordm9pZA0KK2YxIChpbnQgaSkNCit7 DQorICB0cnkgeyBiYXIgKGkpOyB9DQorICBjYXRjaCAoY29uc3QgZXhjZXB0 MSYgZXgpIHsgOyB9DQorfQ0KKw0KK3ZvaWQNCitmMiAoaW50IGkpDQorew0K KyAgdHJ5IHsgZjEgKGkpOyB9DQorICBjYXRjaCAoY29uc3QgZXhjZXB0MiYg ZXgpIHsgOzsgfQ0KK30NCisNCit2b2lkDQorZm9vIChpbnQgaSkNCit7DQor ICB0cnkgeyBmMiAoaSk7IH0NCisgIGNhdGNoICguLi4pDQorICAgIHsNCisg ICAgICBhYm9ydCAoKTsNCisgICAgfQ0KK30NCisNCitpbnQNCittYWluICgp DQorew0KKyAgaW50IGk7DQorICBmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykN CisgICAgZm9vIChpKTsNCit9DQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysu b2xkLWRlamEvb2xkLWRlamEuZXhwDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysub2xkLWRlamEvb2xkLWRlamEuZXhw CShyZXZpc2lvbiAyMzEyMzgpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nKysub2xk LWRlamEvb2xkLWRlamEuZXhwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjgsNyAr MjgsNyBAQCBkZy1pbml0DQogDQogIyBHYXRoZXIgYSBsaXN0IG9mIGFsbCB0 ZXN0cywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRob3NlIGluIGRpcmVjdG9y aWVzDQogIyB0aGF0IGFyZSBoYW5kbGVkIHNwZWNpYWxseS4NCi1zZXQgdGVz dHMgW2xzb3J0IFtmaW5kICRzcmNkaXIvJHN1YmRpciAqLkNdXQ0KK3NldCB0 ZXN0cyBbbHNvcnQgW2ZpbmQgJHNyY2Rpci8kc3ViZGlyIGcrKy5taWtlLyou Q11dDQogDQogIyBNYWluIGxvb3AuDQogZysrLWRnLXJ1bnRlc3QgJHRlc3Rz ICIiICRERUZBVUxUX0NYWEZMQUdTDQpJbmRleDogZ2NjL2R3YXJmMm91dC5j DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL2R3YXJmMm91dC5j CShyZXZpc2lvbiAyMzEyMzgpDQorKysgZ2NjL2R3YXJmMm91dC5jCSh3b3Jr aW5nIGNvcHkpDQpAQCAtOTEsNiArOTEsNyBAQCBhbG9uZyB3aXRoIEdDQzsg c2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQ0KICNpbmNsdWRl ICJ0cmVlLWRmYS5oIg0KICNpbmNsdWRlICJnZGIvZ2RiLWluZGV4LmgiDQog I2luY2x1ZGUgInJ0bC1pdGVyLmgiDQorI2luY2x1ZGUgImV4Y2VwdC5oIg0K IA0KIHN0YXRpYyB2b2lkIGR3YXJmMm91dF9zb3VyY2VfbGluZSAodW5zaWdu ZWQgaW50LCBjb25zdCBjaGFyICosIGludCwgYm9vbCk7DQogc3RhdGljIHJ0 eF9pbnNuICpsYXN0X3Zhcl9sb2NhdGlvbl9pbnNuOw0KQEAgLTI4NSw2ICsy ODYsMTAgQEAgc3RhdGljIEdUWSgoKSkgcnR4IGN1cnJlbnRfdW5pdF9wZXJz b25hbGl0eTsNCiAjZGVmaW5lIEZVTkNfQkVHSU5fTEFCRUwJIkxGQiINCiAj ZW5kaWYNCiANCisjaWZuZGVmIEZVTkNfQkVHSU5fU1dJVENIX0xBQkVMDQor I2RlZmluZSBGVU5DX0JFR0lOX1NXSVRDSF9MQUJFTAkiTEZDQiINCisjZW5k aWYNCisNCiAjaWZuZGVmIEZVTkNfRU5EX0xBQkVMDQogI2RlZmluZSBGVU5D X0VORF9MQUJFTAkJIkxGRSINCiAjZW5kaWYNCkBAIC05MDgsNyArOTEzLDgg QEAgb3V0cHV0X2NhbGxfZnJhbWVfaW5mbyAoaW50IGZvcl9laCkNCiAgICAg ICBkdzJfYXNtX291dHB1dF9kYXRhX3VsZWIxMjggKGF1Z21lbnRhdGlvbl9z aXplLCAiQXVnbWVudGF0aW9uIHNpemUiKTsNCiAgICAgICBpZiAocGVyc29u YWxpdHkpDQogCXsNCi0JICBkdzJfYXNtX291dHB1dF9kYXRhICgxLCBwZXJf ZW5jb2RpbmcsICJQZXJzb25hbGl0eSAoJXMpIiwNCisJICBkdzJfYXNtX291 dHB1dF9kYXRhICgxLCBwZXJfZW5jb2RpbmcgJiB+R0NDX0RXX0VIX1BFX3Nw ZWNpYWwsDQorCQkJICAgICAgICJQZXJzb25hbGl0eSAoJXMpIiwNCiAJCQkg ICAgICAgZWhfZGF0YV9mb3JtYXRfbmFtZSAocGVyX2VuY29kaW5nKSk7DQog CSAgZHcyX2FzbV9vdXRwdXRfZW5jb2RlZF9hZGRyX3J0eCAocGVyX2VuY29k aW5nLA0KIAkJCQkJICAgcGVyc29uYWxpdHksDQpAQCAtOTE2LDExICs5MjIs MTMgQEAgb3V0cHV0X2NhbGxfZnJhbWVfaW5mbyAoaW50IGZvcl9laCkNCiAJ fQ0KIA0KICAgICAgIGlmIChhbnlfbHNkYV9uZWVkZWQpDQotCWR3Ml9hc21f b3V0cHV0X2RhdGEgKDEsIGxzZGFfZW5jb2RpbmcsICJMU0RBIEVuY29kaW5n ICglcykiLA0KKwlkdzJfYXNtX291dHB1dF9kYXRhICgxLCBsc2RhX2VuY29k aW5nICYgfkdDQ19EV19FSF9QRV9zcGVjaWFsLA0KKwkJCSAgICAgIkxTREEg RW5jb2RpbmcgKCVzKSIsDQogCQkJICAgICBlaF9kYXRhX2Zvcm1hdF9uYW1l IChsc2RhX2VuY29kaW5nKSk7DQogDQogICAgICAgaWYgKGZkZV9lbmNvZGlu ZyAhPSBEV19FSF9QRV9hYnNwdHIpDQotCWR3Ml9hc21fb3V0cHV0X2RhdGEg KDEsIGZkZV9lbmNvZGluZywgIkZERSBFbmNvZGluZyAoJXMpIiwNCisJZHcy X2FzbV9vdXRwdXRfZGF0YSAoMSwgZmRlX2VuY29kaW5nICYgfkdDQ19EV19F SF9QRV9zcGVjaWFsLA0KKwkJCSAgICAgIkZERSBFbmNvZGluZyAoJXMpIiwN CiAJCQkgICAgIGVoX2RhdGFfZm9ybWF0X25hbWUgKGZkZV9lbmNvZGluZykp Ow0KICAgICB9DQogDQpAQCAtOTYxLDExICs5NjksMTUgQEAgZHdhcmYyb3V0 X2RvX2NmaV9zdGFydHByb2MgKGJvb2wgc2Vjb25kKQ0KIHsNCiAgIGludCBl bmM7DQogICBydHggcmVmOw0KLSAgcnR4IHBlcnNvbmFsaXR5ID0gZ2V0X3Bl cnNvbmFsaXR5X2Z1bmN0aW9uIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOw0K KyAgcnR4IHBlcnNvbmFsaXR5Ow0KIA0KICAgZnByaW50ZiAoYXNtX291dF9m aWxlLCAiXHQuY2ZpX3N0YXJ0cHJvY1xuIik7DQogDQotICBpZiAocGVyc29u YWxpdHkpDQorICBwZXJzb25hbGl0eSA9IGdldF9wZXJzb25hbGl0eV9mdW5j dGlvbiAoY3VycmVudF9mdW5jdGlvbl9kZWNsKTsNCisgIGVuYyA9IGNvbXBh Y3RfcHJfaWQgKHBlcnNvbmFsaXR5KTsNCisgIGlmIChlbmMgIT0gMCkNCisg ICAgZnByaW50ZiAoYXNtX291dF9maWxlLCAiXHQuY2ZpX3BlcnNvbmFsaXR5 X2lkIDB4JXhcbiIsIGVuYyk7DQorICBlbHNlIGlmIChwZXJzb25hbGl0eSkN CiAgICAgew0KICAgICAgIGVuYyA9IEFTTV9QUkVGRVJSRURfRUhfREFUQV9G T1JNQVQgKC8qY29kZT0qLzIsIC8qZ2xvYmFsPSovMSk7DQogICAgICAgcmVm ID0gcGVyc29uYWxpdHk7DQpAQCAtOTc3LDcgKzk4OSw4IEBAIGR3YXJmMm91 dF9kb19jZmlfc3RhcnRwcm9jIChib29sIHNlY29uZCkNCiAgICAgICBpZiAo ZW5jICYgRFdfRUhfUEVfaW5kaXJlY3QpDQogCXJlZiA9IGR3Ml9mb3JjZV9j b25zdF9tZW0gKHJlZiwgdHJ1ZSk7DQogDQotICAgICAgZnByaW50ZiAoYXNt X291dF9maWxlLCAiXHQuY2ZpX3BlcnNvbmFsaXR5ICUjeCwiLCBlbmMpOw0K KyAgICAgIGZwcmludGYgKGFzbV9vdXRfZmlsZSwgIlx0LmNmaV9wZXJzb25h bGl0eSAlI3gsIiwNCisJICAgICAgIGVuYyAmIH5HQ0NfRFdfRUhfUEVfc3Bl Y2lhbCk7DQogICAgICAgb3V0cHV0X2FkZHJfY29uc3QgKGFzbV9vdXRfZmls ZSwgcmVmKTsNCiAgICAgICBmcHV0YyAoJ1xuJywgYXNtX291dF9maWxlKTsN CiAgICAgfQ0KQEAgLTk5NSw3ICsxMDA4LDggQEAgZHdhcmYyb3V0X2RvX2Nm aV9zdGFydHByb2MgKGJvb2wgc2Vjb25kKQ0KICAgICAgIGlmIChlbmMgJiBE V19FSF9QRV9pbmRpcmVjdCkNCiAJcmVmID0gZHcyX2ZvcmNlX2NvbnN0X21l bSAocmVmLCB0cnVlKTsNCiANCi0gICAgICBmcHJpbnRmIChhc21fb3V0X2Zp bGUsICJcdC5jZmlfbHNkYSAlI3gsIiwgZW5jKTsNCisgICAgICBmcHJpbnRm IChhc21fb3V0X2ZpbGUsICJcdC5jZmlfbHNkYSAlI3gsIiwNCisJICAgICAg IGVuYyAmIH5HQ0NfRFdfRUhfUEVfc3BlY2lhbCk7DQogICAgICAgb3V0cHV0 X2FkZHJfY29uc3QgKGFzbV9vdXRfZmlsZSwgcmVmKTsNCiAgICAgICBmcHV0 YyAoJ1xuJywgYXNtX291dF9maWxlKTsNCiAgICAgfQ0KQEAgLTExNTgsNyAr MTE3Miw3IEBAIGR3YXJmMm91dF9lbmRfZXBpbG9ndWUgKHVuc2lnbmVkIGlu dCBsaW5lIEFUVFJJQlVUDQogICBjYWNoZWRfbmV4dF9yZWFsX2luc24gPSBO VUxMOw0KIA0KICAgaWYgKGR3YXJmMm91dF9kb19jZmlfYXNtICgpKQ0KLSAg ICBmcHJpbnRmIChhc21fb3V0X2ZpbGUsICJcdC5jZmlfZW5kcHJvY1xuIik7 DQorICAgIHRhcmdldG0uYXNtX291dC5vdXRwdXRfY2ZpX2VuZHByb2MgKCk7 DQogDQogICAvKiBPdXRwdXQgYSBsYWJlbCB0byBtYXJrIHRoZSBlbmRwb2lu dCBvZiB0aGUgY29kZSBnZW5lcmF0ZWQgZm9yIHRoaXMNCiAgICAgIGZ1bmN0 aW9uLiAgKi8NCkBAIC0xMjI2LDggKzEyNDAsMTAgQEAgZHdhcmYyb3V0X3N3 aXRjaF90ZXh0X3NlY3Rpb24gKHZvaWQpDQogICAgIGR3YXJmMm91dF9ub3Rl X3NlY3Rpb25fdXNlZCAoKTsNCiANCiAgIGlmIChkd2FyZjJvdXRfZG9fY2Zp X2FzbSAoKSkNCi0gICAgZnByaW50ZiAoYXNtX291dF9maWxlLCAiXHQuY2Zp X2VuZHByb2NcbiIpOw0KKyAgICB0YXJnZXRtLmFzbV9vdXQub3V0cHV0X2Nm aV9lbmRwcm9jICgpOw0KIA0KKyAgb3V0cHV0X2Z1bmN0aW9uX2V4Y2VwdGlv bl90YWJsZSAoTlVMTCwgdHJ1ZSk7DQorDQogICAvKiBOb3cgZG8gdGhlIHJl YWwgc2VjdGlvbiBzd2l0Y2guICAqLw0KICAgc2VjdCA9IGN1cnJlbnRfZnVu Y3Rpb25fc2VjdGlvbiAoKTsNCiAgIHN3aXRjaF90b19zZWN0aW9uIChzZWN0 KTsNCkBAIC0xMjM2LDYgKzEyNTIsOSBAQCBkd2FyZjJvdXRfc3dpdGNoX3Rl eHRfc2VjdGlvbiAodm9pZCkNCiAgICAgPSAoc2VjdCA9PSB0ZXh0X3NlY3Rp b24NCiAgICAgICAgfHwgKGNvbGRfdGV4dF9zZWN0aW9uICYmIHNlY3QgPT0g Y29sZF90ZXh0X3NlY3Rpb24pKTsNCiANCisgIEFTTV9PVVRQVVRfREVCVUdf TEFCRUwgKGFzbV9vdXRfZmlsZSwgRlVOQ19CRUdJTl9TV0lUQ0hfTEFCRUws DQorCQkJICBjdXJyZW50X2Z1bmN0aW9uX2Z1bmNkZWZfbm8pOw0KKw0KICAg aWYgKGR3YXJmMm91dF9kb19jZmlfYXNtICgpKQ0KICAgICBkd2FyZjJvdXRf ZG9fY2ZpX3N0YXJ0cHJvYyAodHJ1ZSk7DQogDQpJbmRleDogZ2NjL2NvbmZp Zy5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9jb25maWcu aW4JKHJldmlzaW9uIDIzMTIzOCkNCisrKyBnY2MvY29uZmlnLmluCSh3b3Jr aW5nIGNvcHkpDQpAQCAtMTE4OSw2ICsxMTg5LDEzIEBADQogI2VuZGlmDQog DQogDQorLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIGdl bmVyYXRpb24gb2YgLmVoX2ZyYW1lX2VudHJ5IGZyb20gQ0ZJDQorICAgZGly ZWN0aXZlcy4gKi8NCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVA0KKyN1bmRl ZiBIQVZFX0dBU19FSF9GUkFNRV9FTlRSWQ0KKyNlbmRpZg0KKw0KKw0KIC8q IERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBAZ251X3VuaXF1 ZV9vYmplY3QuICovDQogI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQNCiAjdW5k ZWYgSEFWRV9HQVNfR05VX1VOSVFVRV9PQkpFQ1QNCkluZGV4OiBnY2MvY29u ZmlndXJlLmFjDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL2Nv bmZpZ3VyZS5hYwkocmV2aXNpb24gMjMxMjM4KQ0KKysrIGdjYy9jb25maWd1 cmUuYWMJKHdvcmtpbmcgY29weSkNCkBAIC01MDk0LDYgKzUwOTQsMTMgQEAg QUNfREVGSU5FX1VOUVVPVEVEKExEX0NPTVBSRVNTX0RFQlVHX09QVElPTiwg IiRnY2MNCiBbRGVmaW5lIHRvIHRoZSBsaW5rZXIgb3B0aW9uIHRvIGVuYWJs ZSBjb21wcmVzc2VkIGRlYnVnIHNlY3Rpb25zLl0pDQogQUNfTVNHX1JFU1VM VCgkZ2NjX2N2X2xkX2NvbXByZXNzX2RlYnVnKQ0KIA0KK2djY19HQVNfQ0hF Q0tfRkVBVFVSRShbQ0ZJIC5laF9mcmFtZV9lbnRyeV0sDQorIGdjY19jdl9h c19laF9mcmFtZV9lbnRyeSwNCisgLCwNCitbCS5jZmlfc2VjdGlvbnMgLmVo X2ZyYW1lX2VudHJ5IF0sLA0KK1tBQ19ERUZJTkUoSEFWRV9HQVNfRUhfRlJB TUVfRU5UUlksIDEsDQorW0RlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBw b3J0cyBnZW5lcmF0aW9uIG9mIC5laF9mcmFtZV9lbnRyeSBmcm9tIENGSSBk aXJlY3RpdmVzLl0pXSkNCisNCiAjIC0tLS0tLS0tDQogIyBVTlNPUlRFRA0K ICMgLS0tLS0tLS0NCkluZGV4OiBnY2MvZXhwci5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ2NjL2V4cHIuYwkocmV2aXNpb24gMjMxMjM4KQ0K KysrIGdjYy9leHByLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xMTUwMyw3ICsx MTUwMyw2IEBAIGNvbnN0X3ZlY3Rvcl9mcm9tX3RyZWUgKHRyZWUgZXhwKQ0K IHRyZWUNCiBidWlsZF9wZXJzb25hbGl0eV9mdW5jdGlvbiAoY29uc3QgY2hh ciAqbGFuZykNCiB7DQotICBjb25zdCBjaGFyICp1bndpbmRfYW5kX3ZlcnNp b247DQogICB0cmVlIGRlY2wsIHR5cGU7DQogICBjaGFyICpuYW1lOw0KIA0K QEAgLTExNTEyLDIxICsxMTUxMSwyMyBAQCBidWlsZF9wZXJzb25hbGl0eV9m dW5jdGlvbiAoY29uc3QgY2hhciAqbGFuZykNCiAgICAgY2FzZSBVSV9OT05F Og0KICAgICAgIHJldHVybiBOVUxMOw0KICAgICBjYXNlIFVJX1NKTEo6DQot ICAgICAgdW53aW5kX2FuZF92ZXJzaW9uID0gIl9zajAiOw0KKyAgICAgIG5h bWUgPSBBQ09OQ0FUICgoIl9fIiwgbGFuZywgIl9wZXJzb25hbGl0eV9zajAi LCBOVUxMKSk7DQogICAgICAgYnJlYWs7DQogICAgIGNhc2UgVUlfRFdBUkYy Og0KICAgICBjYXNlIFVJX1RBUkdFVDoNCi0gICAgICB1bndpbmRfYW5kX3Zl cnNpb24gPSAiX3YwIjsNCisgICAgICBpZiAoVEFSR0VUX0NPTVBBQ1RfRUgN CisJICAmJiAoc3RyY21wIChsYW5nX2hvb2tzLm5hbWUsICJHTlUgQysrIikg PT0gMCkpDQorCW5hbWUgPSBBQ09OQ0FUICgoIl9fZ251X2NvbXBhY3RfcHIy IiwgTlVMTCkpOw0KKyAgICAgIGVsc2UNCisJbmFtZSA9IEFDT05DQVQgKCgi X18iLCBsYW5nLCAiX3BlcnNvbmFsaXR5X3YwIiwgTlVMTCkpOw0KICAgICAg IGJyZWFrOw0KICAgICBjYXNlIFVJX1NFSDoNCi0gICAgICB1bndpbmRfYW5k X3ZlcnNpb24gPSAiX3NlaDAiOw0KKyAgICAgIG5hbWUgPSBBQ09OQ0FUICgo Il9fIiwgbGFuZywgIl9wZXJzb25hbGl0eV9zZWgwIiwgTlVMTCkpOw0KICAg ICAgIGJyZWFrOw0KICAgICBkZWZhdWx0Og0KICAgICAgIGdjY191bnJlYWNo YWJsZSAoKTsNCiAgICAgfQ0KIA0KLSAgbmFtZSA9IEFDT05DQVQgKCgiX18i LCBsYW5nLCAiX3BlcnNvbmFsaXR5IiwgdW53aW5kX2FuZF92ZXJzaW9uLCBO VUxMKSk7DQotDQogICB0eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0 IChpbnRlZ2VyX3R5cGVfbm9kZSwgaW50ZWdlcl90eXBlX25vZGUsDQogCQkJ CSAgIGxvbmdfbG9uZ191bnNpZ25lZF90eXBlX25vZGUsDQogCQkJCSAgIHB0 cl90eXBlX25vZGUsIHB0cl90eXBlX25vZGUsIE5VTExfVFJFRSk7DQpJbmRl eDogZ2NjL2V4Y2VwdC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g Z2NjL2V4Y2VwdC5jCShyZXZpc2lvbiAyMzEyMzgpDQorKysgZ2NjL2V4Y2Vw dC5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMjEyLDcgKzIxMiw2IEBAIHN0YXRp YyB2b2lkIGR3Ml9idWlsZF9sYW5kaW5nX3BhZHMgKHZvaWQpOw0KIHN0YXRp YyBpbnQgY29sbGVjdF9vbmVfYWN0aW9uX2NoYWluIChhY3Rpb25faGFzaF90 eXBlICosIGVoX3JlZ2lvbik7DQogc3RhdGljIGludCBhZGRfY2FsbF9zaXRl IChydHgsIGludCwgaW50KTsNCiANCi1zdGF0aWMgdm9pZCBwdXNoX3VsZWIx MjggKHZlYzx1Y2hhciwgdmFfZ2M+ICoqLCB1bnNpZ25lZCBpbnQpOw0KIHN0 YXRpYyB2b2lkIHB1c2hfc2xlYjEyOCAodmVjPHVjaGFyLCB2YV9nYz4gKios IGludCk7DQogI2lmbmRlZiBIQVZFX0FTX0xFQjEyOA0KIHN0YXRpYyBpbnQg ZHcyX3NpemVfb2ZfY2FsbF9zaXRlX3RhYmxlIChpbnQpOw0KQEAgLTIyMCw3 ICsyMTksMzcgQEAgc3RhdGljIGludCBzamxqX3NpemVfb2ZfY2FsbF9zaXRl X3RhYmxlICh2b2lkKTsNCiAjZW5kaWYNCiBzdGF0aWMgdm9pZCBkdzJfb3V0 cHV0X2NhbGxfc2l0ZV90YWJsZSAoaW50LCBpbnQpOw0KIHN0YXRpYyB2b2lk IHNqbGpfb3V0cHV0X2NhbGxfc2l0ZV90YWJsZSAodm9pZCk7DQorc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlYWRfc2xlYjEyOCAoY29uc3QgdW5z aWduZWQgY2hhciAqcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBIT1NUX1dJREVfSU5UICp2YWwpOw0KIA0KKw0KKy8q IEVtaXQgdGhlIGNvbXBhY3QgTFNEQSB0YWJsZXMgaWYgdXNpbmcgYSBjb21w YWN0IHBlcnNvbmFsaXR5DQorICAgcm91dGluZS4gIFdlIGF2b2lkIGEgbGFu Z3VhZ2Utc3BlY2lmaWMgY2hlY2sgdG8gY292ZXIgdGhlIExUTw0KKyAgIGNh c2Ugd2hlcmUgdGhlIGxhbmd1YWdlIGlzICJHTlUgR0lNUExFIi4gICovDQor c3RhdGljIGJvb2wNCit1c2luZ19jb21wYWN0X3ByICh2b2lkKQ0KK3sNCisg IHJ0eCBwZXJzb25hbGl0eSA9IGdldF9wZXJzb25hbGl0eV9mdW5jdGlvbiAo Y3VycmVudF9mdW5jdGlvbl9kZWNsKTsNCisNCisgIGlmIChwZXJzb25hbGl0 eQ0KKyAgICAgICYmIHN0cm5jbXAgKFhTVFIgKHBlcnNvbmFsaXR5LCAwKSwg Il9fZ251X2NvbXBhY3QiLCAxMykgPT0gMCkNCisgICAgcmV0dXJuIHRydWU7 DQorDQorICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qIFJldHVybiB0aGUg aWQgdG8gYmUgdXNlZCB3aXRoIC5jZmlfcGVyc29uYWxpdHlfaWQsIG9yIDAg dG8gdXNlDQorICAgLmNmaV9wZXJzb25hbGl0eS4gICovDQoraW50DQorY29t cGFjdF9wcl9pZCAocnR4IHBlcnNvbmFsaXR5KQ0KK3sNCisgIGlmICghZmxh Z19hc3luY2hyb25vdXNfdW53aW5kX3RhYmxlcw0KKyAgICAgICYmIHBlcnNv bmFsaXR5DQorICAgICAgJiYgc3RybmNtcCAoWFNUUiAocGVyc29uYWxpdHks IDApLCAiX19nbnVfY29tcGFjdF9wciIsIDE2KSA9PSAwKQ0KKyAgICByZXR1 cm4gWFNUUiAocGVyc29uYWxpdHksIDApWzE2XSAtICcwJzsNCisNCisgIHJl dHVybiAwOw0KK30NCiAMDQogdm9pZA0KIGluaXRfZWggKHZvaWQpDQpAQCAt MjY2Miw3ICsyNjkxLDcgQEAgbWFrZV9wYXNzX2NvbnZlcnRfdG9fZWhfcmVn aW9uX3JhbmdlcyAoZ2NjOjpjb250ZXgNCiAgIHJldHVybiBuZXcgcGFzc19j b252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMgKGN0eHQpOw0KIH0NCiAMDQot c3RhdGljIHZvaWQNCit2b2lkDQogcHVzaF91bGViMTI4ICh2ZWM8dWNoYXIs IHZhX2djPiAqKmRhdGFfYXJlYSwgdW5zaWduZWQgaW50IHZhbHVlKQ0KIHsN CiAgIGRvDQpAQCAtMjY5NSw2ICsyNzI0LDcgQEAgcHVzaF9zbGViMTI4ICh2 ZWM8dWNoYXIsIHZhX2djPiAqKmRhdGFfYXJlYSwgaW50IHYNCiAgIHdoaWxl IChtb3JlKTsNCiB9DQogDQorDQogDA0KICNpZm5kZWYgSEFWRV9BU19MRUIx MjgNCiBzdGF0aWMgaW50DQpAQCAtMjkxNyw3ICsyOTQ3LDc4NSBAQCBvdXRw dXRfdHR5cGUgKHRyZWUgdHlwZSwgaW50IHR0X2Zvcm1hdCwgaW50IHR0X2Zv cg0KICAgICBkdzJfYXNtX291dHB1dF9lbmNvZGVkX2FkZHJfcnR4ICh0dF9m b3JtYXQsIHZhbHVlLCBpc19wdWJsaWMsIE5VTEwpOw0KIH0NCiANCitzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciAqDQorcmVhZF9zbGViMTI4IChjb25z dCB1bnNpZ25lZCBjaGFyICpwLCBIT1NUX1dJREVfSU5UICp2YWwpDQorew0K KyAgdW5zaWduZWQgaW50IHNoaWZ0ID0gMDsNCisgIHVuc2lnbmVkIGNoYXIg Ynl0ZTsNCisgIEhPU1RfV0lERV9JTlQgcmVzdWx0Ow0KKw0KKyAgcmVzdWx0 ID0gMDsNCisgIGRvDQorICAgIHsNCisgICAgICBieXRlID0gKnArKzsNCisg ICAgICByZXN1bHQgfD0gKChIT1NUX1dJREVfSU5UKSBieXRlICYgMHg3Zikg PDwgc2hpZnQ7DQorICAgICAgc2hpZnQgKz0gNzsNCisgICAgfQ0KKyAgd2hp bGUgKGJ5dGUgJiAweDgwKTsNCisNCisgIC8qIFNpZ24tZXh0ZW5kIGEgbmVn YXRpdmUgdmFsdWUuICAqLw0KKyAgaWYgKHNoaWZ0IDwgOCAqIHNpemVvZihy ZXN1bHQpICYmIChieXRlICYgMHg0MCkgIT0gMCkNCisgICAgcmVzdWx0IHw9 IC0oKCh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTFMKSA8PCBzaGlmdCk7DQor DQorICAqdmFsID0gKEhPU1RfV0lERV9JTlQpIHJlc3VsdDsNCisgIHJldHVy biBwOw0KK30NCisNCitzdGF0aWMgY29uc3QgY2hhciBmdW5jX2JlZ2luX2xh YltdID0gIkxGQiI7DQorc3RhdGljIGNvbnN0IGNoYXIgc3dpdGNoX2JlZ2lu X2xhYltdID0gIkxGQ0IiOw0KK3N0YXRpYyBjb25zdCBjaGFyIHJlZ2lvbl9i ZWdpbl9sYWJbXSA9ICJMRUhCIjsNCitzdGF0aWMgY29uc3QgY2hhciByZWdp b25fZW5kX2xhYltdID0gIkxFSEUiOw0KKw0KKy8qIFN0cnVjdHVyZSB0byB0 cmFjayB0aGUgYWN0aW9uIGNoYWluIGZvciBlYWNoIHJlZ2lvbi4gICovDQor c3RydWN0IEdUWSAoKCkpIGNoYWluX2QNCit7DQorICBpbnQgZHdhcmZfcmVn bm87DQorICBpbnQgYWN0aW9uX25keDsNCisgIHN0cnVjdCBjaGFpbl9kICpu ZXh0Ow0KK307DQorDQordHlwZWRlZiBzdHJ1Y3QgY2hhaW5fZCAqY2hhaW5f cmVmOw0KK3N0YXRpYyBHVFkgKCgpKSB2ZWM8Y2hhaW5fcmVmLCB2YV9nYz4g KmNoYWluczsNCisNCisvKiBTdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBpbmZv cm1hdGlvbiBhYm91dCBlYWNoIHJlZ2lvbi4gICovDQorc3RydWN0IEdUWSAo KCkpIGNvbXBhY3RfaW5mb19kDQorew0KKyAgLyogIFJlZ2lvbiB0eXBlLiAg Ki8NCisgIGVudW0gZWhfY29tcGFjdF9oZWFkZXJfdHlwZSByZWdpb25fdHlw ZTsNCisNCisgIC8qIENvcnJlc3BvbmRpbmcgZHdhcmYgcmVnaW9uIG51bWJl ciwgaWYgYW55LiAgKi8NCisgIGludCBkd2FyZl9yZWdpb25fbm87DQorDQor ICAvKiBJZiBub3QgYSBkd2FyZiByZWdpb24sIHRoZSBwcmV2aW91cyBkd2Fy ZiByZWdpb24gbnVtYmVyLiAgKi8NCisgIGludCBwcmV2X2R3YXJmX3JlZ2lv bl9ubzsNCisNCisgIC8qIElmIG5vdCBhIGR3YXJmIHJlZ2lvbiwgdGhlIG5l eHQgZHdhcmYgcmVnaW9uIG51bWJlci4gICovDQorICBpbnQgbmV4dF9kd2Fy Zl9yZWdpb25fbm87DQorDQorICAvKiBGb3IgYWN0aW9uIGVudHJpZXMsIHRo ZSBpbmRleCBpbnRvIHRoZSBhY3Rpb24gdGFibGUuICAqLw0KKyAgaW50IGZp cnN0X2FjdGlvbl9uZHg7DQorDQorICAvKiBGb3IgYWN0aW9uIGVudHJpZXMs IHRoZSBuZXh0IGluZGV4IGludG8gdGhlIGFjdGlvbiB0YWJsZS4gICovDQor ICBpbnQgbmV4dF9hY3Rpb25fbmR4Ow0KKw0KKyAgLyogVGhlIGxhbmRpbmcg cGFkLiAgKi8NCisgIHJ0eCBsYW5kaW5nX3BhZDsNCisNCisgIC8qIFRoZSBl bnRyeSBpbiB0aGUgYWN0aW9uIHRhYmxlLCBwb2ludGVkIHRvIGJ5IHRoZSBh Y3Rpb24gaW5kZXguICAqLw0KKyAgaW50IGFjdGlvbl92YWx1ZTsNCisNCisg IC8qIE5vbi16ZXJvLCBpZiB0aGlzIGVudHJ5IGNoYWlucy4gIFRoZSBjaGFp bi12YWx1ZSBpcyByZWxhdGl2ZSB0bw0KKyAgICAgdGhlIGN1cnJlbnQgZW50 cnkgYW5kIGV4Y2x1ZGVzIG5vdGhyb3cgcmVnaW9ucy4gICovDQorICBpbnQg Y2hhaW5fdmFsdWU7DQorDQorICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgdGVy bWluYXRlcyBhIGNoYWluLiAgKi8NCisgIGJvb2wgZW5kX29mX2NoYWluOw0K Kw0KKyAgLyogVGhlIGxhYmVsIHByZWZpeCB0byB1c2VkIHRvIG1hcmsgdGhl IGJlZ2lubmluZyBvZiB0aGlzIHJlZ2lvbi4gICAqLw0KKyAgY29uc3QgY2hh ciAqYmVnaW5fbGFiX3ByZWZpeDsNCisNCisgIC8qIFRoZSBsYWJlbCBwcmVm aXggdXNlZCB0byBtYXJrIHRoZSBlbmQgb2YgdGhpcyByZWdpb24uICAgKi8N CisgIGNvbnN0IGNoYXIgKmVuZF9sYWJfcHJlZml4Ow0KKw0KKyAgLyogVGhl IGxhYmVsIG51bWJlciBkZW5vdGluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBy ZWdpb24uICAqLw0KKyAgaW50IGJlZ2luX2xhYl9ubzsNCisNCisgIC8qIFRo ZSBsYWJlbCBudW1iZXIgZGVub3RpbmcgdGhlIGVuZCBvZiB0aGUgcmVnaW9u LiAgKi8NCisgIGludCBlbmRfbGFiX25vOw0KKw0KKyAgLyogVHJ1ZSBpZiB0 aGUgbmV4dCBpdGVtIGluIHRoZSBjaGFpbiBpcyBhIGR1bW15IGFjdGlvbiBy ZWdpb24uICAqLw0KKyAgYm9vbCB1c2VfZHVtbXk7DQorDQorICAvKiBUaGUg cmVnaW9uIG51bWJlciBvZiB0aGUgZHVtbXkgYWN0aW9uLiAgKi8NCisgIGlu dCBkdW1teV9pbmRleDsNCit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IGNvbXBh Y3RfaW5mb19kICpjb21wYWN0X2luZm9fcmVmOw0KK3N0YXRpYyBHVFkgKCgp KSB2ZWM8Y29tcGFjdF9pbmZvX3JlZiwgdmFfZ2M+ICpjb21wYWN0X2luZm87 DQorDQorLyogU3RydWN0IHVzZWQgdG8gdHJhY2sgZHVtbXkgYWN0aW9uIHJl Z2lvbnMuICAqLw0KKw0KK3N0cnVjdCBHVFkgKCgpKSBkdW1teV9pbmZvX2QN Cit7DQorICAvKiBUaGUgZHdhcmYgcmVnaW9uIG51bWJlciB0aGF0IGNhdXNl ZCB0aGlzIGR1bW15IHRvIGJlIGNyZWF0ZWQuICAqLw0KKyAgaW50IGR3YXJm X3JlZ2lvbl9ubzsNCisNCisgIC8qIEluZGV4IGludG8gdGhlIGFjdGlvbiB0 YWJsZS4gICovDQorICBpbnQgYWN0aW9uX25keDsNCisNCisgIC8qIFRoZSBu ZXh0IGluZGV4IGludG8gdGhlIGFjdGlvbiB0YWJsZS4gICovDQorICBpbnQg bmV4dF9hY3Rpb25fbmR4Ow0KKw0KKyAgLyogVGhlIGVudHJ5IGluIHRoZSBh Y3Rpb24gdGFibGUsIHBvaW50ZWQgdG8gYnkgdGhlIGFjdGlvbiBpbmRleC4g ICovDQorICBpbnQgYWN0aW9uX3ZhbHVlOw0KKw0KKyAgLyogTm9uLXplcm8s IGlmIHRoaXMgZW50cnkgY2hhaW5zLiAgVGhlIGNoYWluLXZhbHVlIGlzIHJl bGF0aXZlIHRvDQorICAgICB0aGUgY3VycmVudCBlbnRyeSBhbmQgZXhjbHVk ZXMgbm90aHJvdyByZWdpb25zLiAgKi8NCisgIGludCBjaGFpbl92YWx1ZTsN CisNCisgIC8qIFRydWUgaWYgdGhpcyBlbnRyeSB0ZXJtaW5hdGVzIGEgY2hh aW4uICAqLw0KKyAgYm9vbCBlbmRfb2ZfY2hhaW47DQorfTsNCisNCit0eXBl ZGVmIHN0cnVjdCBkdW1teV9pbmZvX2QgKmR1bW15X2luZm9fcmVmOw0KK3N0 YXRpYyBHVFkgKCgpKSB2ZWM8ZHVtbXlfaW5mb19yZWYsIHZhX2djPiAqZHVt bXlfaW5mbzsNCisNCisvKiBDcmVhdGUgdGhlIHJlZ2lvbiBzdGFydCBsYWJl bC4gICovDQorDQogc3RhdGljIHZvaWQNCitjb21wYWN0X2NyZWF0ZV9yZWdp b25fc3RhcnRfbGFiZWwgKGNvbXBhY3RfaW5mb19kICpjaSwgY2hhciAqcmVn aW9uX3N0YXJ0KQ0KK3sNCisgIHN3aXRjaCAoY2ktPnJlZ2lvbl90eXBlKQ0K KyAgICB7DQorICAgIGNhc2UgRUNIVF9EVU1NWV9BQ1RJT05fQ0hBSU46DQor ICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgQVNNX0dF TkVSQVRFX0lOVEVSTkFMX0xBQkVMIChyZWdpb25fc3RhcnQsIGNpLT5iZWdp bl9sYWJfcHJlZml4LA0KKwkJCQkgICBjaS0+YmVnaW5fbGFiX25vKTsNCisg ICAgfQ0KK30NCisNCisvKiBDcmVhdGUgdGhlIHJlZ2lvbiBlbmQgbGFiZWwu ICAqLw0KKw0KK3N0YXRpYyB2b2lkDQorY29tcGFjdF9jcmVhdGVfcmVnaW9u X2VuZF9sYWJlbCAoY29tcGFjdF9pbmZvX2QgKmNpLCBjaGFyICpyZWdpb25f ZW5kKQ0KK3sNCisgIHN3aXRjaCAoY2ktPnJlZ2lvbl90eXBlKQ0KKyAgICB7 DQorICAgIGNhc2UgRUNIVF9EVU1NWV9BQ1RJT05fQ0hBSU46DQorICAgICAg YnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgQVNNX0dFTkVSQVRF X0lOVEVSTkFMX0xBQkVMIChyZWdpb25fZW5kLA0KKwkJCQkgICBjaS0+ZW5k X2xhYl9wcmVmaXgsIGNpLT5lbmRfbGFiX25vKTsNCisgICAgICBicmVhazsN CisgICAgfQ0KK30NCisNCisvKiBFbWl0IHRoZSByZWdpb24gaGVhZGVyIGZv ciB0aGlzIGVudHJ5LiAgKi8NCitzdGF0aWMgdm9pZA0KK2NvbXBhY3RfZW1p dF9yZWdpb25faGVhZGVyIChpbnQgcmVnbm8sIGNvbXBhY3RfaW5mb19kICpj aSkNCit7DQorICBjaGFyIHJlZ2lvbl9zdGFydFszMl07DQorICBjaGFyIHJl Z2lvbl9lbmRbMzJdOw0KKyAgY2hhciBsYW5kaW5nX3BhZFszMl07DQorDQor ICBjb21wYWN0X2NyZWF0ZV9yZWdpb25fc3RhcnRfbGFiZWwgKGNpLCAmcmVn aW9uX3N0YXJ0WzBdKTsNCisgIGNvbXBhY3RfY3JlYXRlX3JlZ2lvbl9lbmRf bGFiZWwgKGNpLCAmcmVnaW9uX2VuZFswXSk7DQorDQorICBpZiAoY2ktPmxh bmRpbmdfcGFkICE9IE5VTExfUlRYDQorICAgICAgJiYgY2ktPmxhbmRpbmdf cGFkICE9IGNvbnN0bTFfcnR4KQ0KKyAgICBBU01fR0VORVJBVEVfSU5URVJO QUxfTEFCRUwgKGxhbmRpbmdfcGFkLCAiTCIsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ09ERV9MQUJFTF9OVU1CRVIgKGNpLT5sYW5k aW5nX3BhZCkpOw0KKw0KKyAgc3dpdGNoIChjaS0+cmVnaW9uX3R5cGUpDQor ICAgIHsNCisgICAgY2FzZSBFQ0hUX0FDVElPTl9DSEFJTjoNCisgICAgICBk dzJfYXNtX291dHB1dF9jb21tZW50ICgiUmVnaW9uICVkIC0tIEFjdGlvbiBD aGFpbiIsIHJlZ25vKTsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBF Q0hUX0NMRUFOVVA6DQorICAgICAgZHcyX2FzbV9vdXRwdXRfY29tbWVudCAo IlJlZ2lvbiAlZCAtLSBDbGVhbnVwIiwgcmVnbm8pOw0KKyAgICAgIGJyZWFr Ow0KKw0KKyAgICBjYXNlIEVDSFRfRFVNTVlfQUNUSU9OX0NIQUlOOg0KKyAg ICAgIGR3Ml9hc21fb3V0cHV0X2NvbW1lbnQgKCJSZWdpb24gJWQgLS0gRHVt bXkgQWN0aW9uIENoYWluIiwgcmVnbm8pOw0KKyAgICAgIGJyZWFrOw0KKwkN CisgICAgY2FzZSBFQ0hUX0NPTlRJTlVFX1VOV0lORElORzoNCisgICAgICBk dzJfYXNtX291dHB1dF9jb21tZW50ICgiUmVnaW9uICVkIC0tIENvbnRpbnVl IFVud2luZGluZyIsIHJlZ25vKTsNCisgICAgICBicmVhazsNCisgICAgY2Fz ZSBFQ0hUX05PVEhST1c6DQorICAgICAgZHcyX2FzbV9vdXRwdXRfY29tbWVu dCAoIlJlZ2lvbiAlZCAtLSBOb1Rocm93IiwgcmVnbm8pOw0KKyAgICAgIGJy ZWFrOw0KKyAgICB9DQorDQorICBpZiAoY2ktPnJlZ2lvbl90eXBlID09IEVD SFRfRFVNTVlfQUNUSU9OX0NIQUlOKQ0KKyAgICBkdzJfYXNtX291dHB1dF9k YXRhX3VsZWIxMjggKDAsICJaZXJvIGxlbmd0aCByZWdpb24iKTsNCisNCisg IGVsc2UgaWYgKGNpLT5yZWdpb25fdHlwZSAhPSBFQ0hUX05PVEhST1cpDQor ICAgIGR3Ml9hc21fb3V0cHV0X2NvbXBhY3RfcmVnaW9uX2xlbmd0aCAocmVn aW9uX2VuZCwNCisJCQkJCSAgcmVnaW9uX3N0YXJ0LCBmYWxzZSwgIkxlbmd0 aCIpOw0KKyAgZWxzZQ0KKyAgICBkdzJfYXNtX291dHB1dF9jb21wYWN0X3Jl Z2lvbl9sZW5ndGggKHJlZ2lvbl9lbmQsDQorCQkJCQkgIHJlZ2lvbl9zdGFy dCwgdHJ1ZSwgIkxlbmd0aCIpOw0KKw0KKyAgaWYgKGNpLT5sYW5kaW5nX3Bh ZCA9PSBjb25zdG0xX3J0eCkNCisgICAgZHcyX2FzbV9vdXRwdXRfZGF0YV9z bGViMTI4ICgtMSwgImxhbmRpbmcgcGFkIik7DQorICBlbHNlIGlmIChjaS0+ bGFuZGluZ19wYWQgIT0gTlVMTF9SVFgpDQorICAgIGR3Ml9hc21fb3V0cHV0 X2NvbXBhY3RfbGFuZGluZ19wYWQgKGxhbmRpbmdfcGFkLA0KKwkJCQkJcmVn aW9uX2VuZCwgIkxhbmRpbmcgUGFkIE9mZnNldCIpOw0KK30NCisNCisvKiBC dWlsZCBhIHJlZ2lvbiB0YWJsZSBlbnRyeSBmb3IgYSBkdW1teSBub3Rocm93 LiAgKi8NCisNCitzdGF0aWMgdm9pZA0KK2NvbXBhY3RfaW5zZXJ0X25vdGhy b3cgKGludCBzZWN0aW9uLCBpbnQgcHJldl9kd2FyZl9yZWdpb25fbm8pDQor ew0KKyAgY29tcGFjdF9pbmZvX2QgKmNpID0gZ2djX2NsZWFyZWRfYWxsb2M8 Y29tcGFjdF9pbmZvX2Q+ICgpOw0KKw0KKyAgY2ktPnJlZ2lvbl90eXBlID0g RUNIVF9OT1RIUk9XOw0KKyAgY2ktPnByZXZfZHdhcmZfcmVnaW9uX25vID0g cHJldl9kd2FyZl9yZWdpb25fbm87DQorICBjaS0+bmV4dF9kd2FyZl9yZWdp b25fbm8gPSBwcmV2X2R3YXJmX3JlZ2lvbl9ubyArIDE7DQorICBjaS0+ZW5k X29mX2NoYWluID0gdHJ1ZTsNCisNCisgIC8qIFRoZSBiZWdpbm5pbmcgbGFi ZWwgb2YgYSBkdW1teSBub3Rocm93IHJlZ2lvbiBpcyBlaXRoZXINCisgICAg IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIG9yIHRoZSBlbmQgbGFi ZWwgb2YgdGhlDQorICAgICBwcmV2aW91cyBkd2FyZiByZWdpb24uICAqLw0K KyAgaWYgKHZlY19zYWZlX2xlbmd0aCAoY29tcGFjdF9pbmZvKSA9PSAwKQ0K KyAgICB7DQorICAgICAgY2ktPmJlZ2luX2xhYl9wcmVmaXggPSBzZWN0aW9u ID09IDAgPyBmdW5jX2JlZ2luX2xhYiA6IHN3aXRjaF9iZWdpbl9sYWI7DQor ICAgICAgY2ktPmJlZ2luX2xhYl9ubyA9IGN1cnJlbnRfZnVuY3Rpb25fZnVu Y2RlZl9ubzsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAgY2kt PmJlZ2luX2xhYl9wcmVmaXggPSByZWdpb25fZW5kX2xhYjsNCisgICAgICBj aS0+YmVnaW5fbGFiX25vID0gY2FsbF9zaXRlX2Jhc2UgKyBwcmV2X2R3YXJm X3JlZ2lvbl9ubzsNCisgICAgfQ0KKw0KKyAgLyogVGhlIGVuZCBsYWJlbCBv ZiBhIGR1bW15IG5vdGhyb3cgcmVnaW9uIGlzIHRoZQ0KKyAgICAgYmVnaW5u aW5nIG9mIHRoZSBuZXh0IGR3YXJmIHJlZ2lvbi4gICovDQorICBjaS0+ZW5k X2xhYl9wcmVmaXggPSByZWdpb25fYmVnaW5fbGFiOw0KKyAgY2ktPmVuZF9s YWJfbm8gPSBjYWxsX3NpdGVfYmFzZSArIHByZXZfZHdhcmZfcmVnaW9uX25v ICsgMTsNCisNCisgIHZlY19zYWZlX3B1c2ggKGNvbXBhY3RfaW5mbywgY2kp Ow0KK30NCisNCisvKiBCdWlsZCBhIHJlZ2lvbiB0YWJsZSBlbnRyeSBmb3Ig YSBkd2FyZi1iYXNlZCBjb250aW51ZS11bndpbmQgcmVnaW9uLiAgKi8NCitz dGF0aWMgdm9pZA0KK2NvbXBhY3RfaW5zZXJ0X2NvbnRpbnVlIChpbnQgZHdh cmZfcmVnbm8pDQorew0KKyAgY29tcGFjdF9pbmZvX2QgKmNpID0gZ2djX2Ns ZWFyZWRfYWxsb2M8Y29tcGFjdF9pbmZvX2Q+ICgpOw0KKw0KKyAgY2ktPnJl Z2lvbl90eXBlID0gRUNIVF9DT05USU5VRV9VTldJTkRJTkc7DQorICBjaS0+ ZHdhcmZfcmVnaW9uX25vID0gZHdhcmZfcmVnbm87DQorICBjaS0+bGFuZGlu Z19wYWQgPSBjb25zdG0xX3J0eDsNCisgIGNpLT5wcmV2X2R3YXJmX3JlZ2lv bl9ubyA9IGR3YXJmX3JlZ25vIC0gMTsNCisgIGNpLT5uZXh0X2R3YXJmX3Jl Z2lvbl9ubyA9IGR3YXJmX3JlZ25vICsgMTsNCisgIGNpLT5lbmRfb2ZfY2hh aW4gPSB0cnVlOw0KKyAgY2ktPmJlZ2luX2xhYl9wcmVmaXggPSByZWdpb25f YmVnaW5fbGFiOw0KKyAgY2ktPmVuZF9sYWJfcHJlZml4ID0gcmVnaW9uX2Vu ZF9sYWI7DQorICBjaS0+YmVnaW5fbGFiX25vID0gY2FsbF9zaXRlX2Jhc2Ug KyBkd2FyZl9yZWdubzsNCisgIGNpLT5lbmRfbGFiX25vID0gY2FsbF9zaXRl X2Jhc2UgKyBkd2FyZl9yZWdubzsNCisgIHZlY19zYWZlX3B1c2ggKGNvbXBh Y3RfaW5mbywgY2kpOw0KK30NCisNCisvKiBCdWlsZCBhIHJlZ2lvbiB0YWJs ZSBlbnRyeSBmb3IgYSBkd2FyZi1iYXNlZCBjbGVhbnVwIHJlZ2lvbi4gICov DQorc3RhdGljIHZvaWQNCitjb21wYWN0X2luc2VydF9jbGVhbnVwIChpbnQg ZHdhcmZfcmVnbm8sIHJ0eCBscCkNCit7DQorICBjb21wYWN0X2luZm9fZCAq Y2kgPSBnZ2NfY2xlYXJlZF9hbGxvYzxjb21wYWN0X2luZm9fZD4gKCk7DQor DQorICBjaS0+cmVnaW9uX3R5cGUgPSBFQ0hUX0NMRUFOVVA7DQorICBjaS0+ ZHdhcmZfcmVnaW9uX25vID0gZHdhcmZfcmVnbm87DQorICBjaS0+bGFuZGlu Z19wYWQgPSBscDsNCisgIGNpLT5lbmRfb2ZfY2hhaW4gPSB0cnVlOw0KKyAg Y2ktPmJlZ2luX2xhYl9wcmVmaXggPSByZWdpb25fYmVnaW5fbGFiOw0KKyAg Y2ktPmVuZF9sYWJfcHJlZml4ID0gcmVnaW9uX2VuZF9sYWI7DQorICBjaS0+ YmVnaW5fbGFiX25vID0gY2FsbF9zaXRlX2Jhc2UgKyBkd2FyZl9yZWdubzsN CisgIGNpLT5lbmRfbGFiX25vID0gY2FsbF9zaXRlX2Jhc2UgKyBkd2FyZl9y ZWdubzsNCisNCisgIHZlY19zYWZlX3B1c2ggKGNvbXBhY3RfaW5mbywgY2kp Ow0KK30NCisNCisvKiBTZXQgdXAgdGhlIGNoYWluIHZhbHVlcyBmb3IgdGhl IGR1bW1pZXMuICAqLw0KKw0KK3N0YXRpYyB2b2lkDQorY29tcGFjdF9saW5r X3RvX2R1bW15IChpbnQgZHVtbXlfaW5kZXgpDQorew0KKyAgaW50IGk7DQor ICBjb21wYWN0X2luZm9fZCAqY2k7DQorICBmb3IgKGkgPSAwOyB2ZWNfc2Fm ZV9pdGVyYXRlIChjb21wYWN0X2luZm8sIGksICZjaSk7ICsraSkNCisgICAg ew0KKyAgICAgIGlmIChjaS0+dXNlX2R1bW15DQorICAgICAgICAgICYmIGNp LT5kdW1teV9pbmRleCA9PSBkdW1teV9pbmRleCkNCisJY2ktPmNoYWluX3Zh bHVlID0gdmVjX3NhZmVfbGVuZ3RoIChjb21wYWN0X2luZm8pIC0gaTsNCisg ICAgfQ0KK30NCisNCisvKiBFbWl0IHRoZSBkdW1teSBhY3Rpb24gY2hhaW4g cmVnaW9uIGVudHJpZXMuICAqLw0KKw0KK3N0YXRpYyB2b2lkDQorY29tcGFj dF9lbWl0X2R1bW1pZXMgKHZvaWQpDQorew0KKyAgaW50IGk7DQorICBkdW1t eV9pbmZvX3JlZiBkaTsNCisNCisgIA0KKyAgZm9yIChpID0gMDsgdmVjX3Nh ZmVfaXRlcmF0ZSAoZHVtbXlfaW5mbywgaSwgJmRpKTsgKytpKQ0KKyAgICB7 DQorICAgICAgY29tcGFjdF9pbmZvX2QgKmNpID0gZ2djX2NsZWFyZWRfYWxs b2M8Y29tcGFjdF9pbmZvX2Q+ICgpOw0KKyAgICAgIGNvbXBhY3RfbGlua190 b19kdW1teSAoaSk7DQorICAgICAgY2ktPnJlZ2lvbl90eXBlID0gRUNIVF9E VU1NWV9BQ1RJT05fQ0hBSU47DQorICAgICAgY2ktPmFjdGlvbl92YWx1ZSA9 IGRpLT5hY3Rpb25fdmFsdWU7DQorICAgICAgY2ktPmNoYWluX3ZhbHVlID0g ZGktPmNoYWluX3ZhbHVlOw0KKyAgICAgIHZlY19zYWZlX3B1c2ggKGNvbXBh Y3RfaW5mbywgY2kpOw0KKyAgICB9DQorfQ0KKw0KKy8qIEdpdmVuIGFuIG9m ZnNldCBpbnRvIHRoZSBkd2FyZiBhY3Rpb24gdGFibGUsIHJldHVybiB0aGUg cmVnaW9uDQorICAgbnVtYmVyIG9mIGEgZHVtbXkgYWN0aW9uIHJlY29yZCB0 aGF0IG1hdGNoZXMgaXQuICAqLw0KKw0KK3N0YXRpYyBib29sDQorY29tcGFj dF9maW5kX2R1bW15IChpbnQgbG9va2luZ19mb3IsIGludCAqZ290b19kdW1t eSkNCit7DQorICBpbnQgaTsNCisgIGR1bW15X2luZm9fcmVmIGRpOw0KKw0K KyAgZm9yIChpID0gMDsgdmVjX3NhZmVfaXRlcmF0ZSAoZHVtbXlfaW5mbywg aSwgJmRpKTsgKytpKQ0KKyAgICB7DQorICAgICAgaWYgKGxvb2tpbmdfZm9y ID09IGRpLT5hY3Rpb25fbmR4KQ0KKwl7DQorCSAgKmdvdG9fZHVtbXkgPSBp Ow0KKwkgIHJldHVybiB0cnVlOw0KKwl9DQorICAgIH0NCisgIHJldHVybiBm YWxzZTsNCit9DQorDQorLyogVHJhdmVyc2UgdGhlIGJhc2UgY2hhaW4gYW5k IGEgY2hhaW4gZW50cnkgdW50aWwgdGhlIA0KKyAgIGNoYWlucyBtYXRjaCBv ciB0aGUgZW5kIG9mIG9uZSBvciBib3RoIGNoYWlucyBpcyByZWFjaGVkLiAg Ki8NCisNCitzdGF0aWMgYm9vbA0KK2NvbXBhY3RfY2hhaW5zX21hdGNoIChj aGFpbl9kICpiYXNlX2NlLCBjaGFpbl9kICpnb3RvX2NlKQ0KK3sNCisNCisg IC8qIE5vIG1hdGNoIGlmIHRoZSBhY3Rpb24gaW5kaWNlcyBhcmUgZGlmZmVy ZW50LiAgKi8NCisgIGlmIChiYXNlX2NlLT5hY3Rpb25fbmR4ICE9IGdvdG9f Y2UtPmFjdGlvbl9uZHgpDQorICAgIHJldHVybiBmYWxzZTsNCisNCisgIC8q IE1hdGNoIGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgYm90aCBjaGFpbnMgYXQg dGhlIHNhbWUgdGltZS4gICovDQorICBpZiAoYmFzZV9jZS0+bmV4dCA9PSBO VUxMDQorICAgICAgJiYgZ290b19jZS0+bmV4dCA9PSBOVUxMKQ0KKyAgICBy ZXR1cm4gdHJ1ZTsNCisNCisgIC8qIE5vIG1hdGNoIGlmIHdlIHJlYWNoIHRo ZSBlbmQgb2Ygb25lIGVudHJ5LiAgKi8NCisgIGlmIChiYXNlX2NlLT5uZXh0 ID09IE5VTEwNCisgICAgICB8fCBnb3RvX2NlLT5uZXh0ID09IE5VTEwpDQor ICAgIHJldHVybiBmYWxzZTsNCisNCisgIHJldHVybiBjb21wYWN0X2NoYWlu c19tYXRjaCAoYmFzZV9jZS0+bmV4dCwgZ290b19jZS0+bmV4dCk7DQorDQor fQ0KKw0KKy8qIEdpdmVuIGEgZHdhcmYgcmVnaW9uIChiYXNlKSwgc2VhcmNo IHRoZSBjaGFpbiBlbnRyaWVzIHRvDQorICAgZGV0ZXJtaW5lIGlmIGFuIGV4 aXN0aW5nIGVudHJ5IG1hdGNoZXMgdGhlIGJhc2UgY2hhaW4uICAqLyANCisN CitzdGF0aWMgYm9vbA0KK2NvbXBhY3RfZmluZF9jaGFpbiAoaW50IGR3YXJm X3JlZ25vLCBpbnQgKmdvdG9fcmVnbm8pDQorew0KKyAgaW50IGk7DQorICBj aGFpbl9yZWYgY2U7DQorICBjaGFpbl9yZWYgYmFzZV9jZSA9ICgqY2hhaW5z KVtkd2FyZl9yZWdub107DQorDQorICBmb3IgKGkgPSAwOyB2ZWNfc2FmZV9p dGVyYXRlIChjaGFpbnMsIGksICZjZSk7ICsraSkNCisgICAgew0KKyAgICAg IC8qIERvbid0IG1hdGNoIHNlbGYuICAqLw0KKyAgICAgIGlmIChiYXNlX2Nl LT5kd2FyZl9yZWdubyA9PSBjZS0+ZHdhcmZfcmVnbm8pDQorCWNvbnRpbnVl Ow0KKw0KKyAgICAgIC8qIERvbid0IG1hdGNoIGlmIHRoZSBuZXh0IGFjdGlv biBpbmRleCBvZiB0aGUgYmFzZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGlzDQor CSBlbnRyeSdzIGluaXRpYWwgYWN0aW9uIGluZGV4LiAqLw0KKyAgICAgIGlm IChiYXNlX2NlLT5uZXh0LT5hY3Rpb25fbmR4ICE9IGNlLT5hY3Rpb25fbmR4 KQ0KKwljb250aW51ZTsNCisNCisgICAgICAvKiBNYXRjaCBzdWJzZXF1ZW50 IGNoYWluIGVudHJpZXMuICAqLw0KKyAgICAgIGlmIChjb21wYWN0X2NoYWlu c19tYXRjaCAoYmFzZV9jZS0+bmV4dCwgY2UpKQ0KKwl7DQorCSAgKmdvdG9f cmVnbm8gPSBpOw0KKwkgIHJldHVybiB0cnVlOw0KKwl9DQorICAgIH0NCisg IHJldHVybiBmYWxzZTsNCit9DQorDQorLyogSW5zZXJ0IGEgZHVtbXkgYWN0 aW9uIGNoYWluIGluIHRoZSByZWdpb25zIGxpc3QuICAqLw0KKw0KK3N0YXRp YyB2b2lkDQorY29tcGFjdF9pbnNlcnRfZHVtbXkgKGludCBmaWx0ZXIsIGlu dCBpbmRleCwgYm9vbCBmaXJzdCwgY29tcGFjdF9pbmZvX2QgKmNpKQ0KK3sN CisgIGR1bW15X2luZm9fZCAqZGkgPSBnZ2NfY2xlYXJlZF9hbGxvYzxkdW1t eV9pbmZvX2Q+ICgpOw0KKw0KKyAgLyogSWYgdGhpcyBpcyBub3QgdGhlIGZp cnN0IGR1bW15IGluIHRoaXMgY2hhaW4sIHRoZW4NCisgICAgIHRoZSBsYXN0 IGR1bW15IGVudHJ5IGNoYWlucyBoZXJlLiAgKi8NCisgIGlmICghZmlyc3Qp DQorICAgIHsNCisgICAgICBpbnQgaTsNCisgICAgICBkdW1teV9pbmZvX3Jl ZiBkaV9wcmV2Ow0KKyAgICAgIA0KKyAgICAgIGkgPSBkdW1teV9pbmZvLT5s ZW5ndGggKCkgLSAxOw0KKyAgICAgIGRpX3ByZXYgPSAoKmR1bW15X2luZm8p W2ldOw0KKyAgICAgIGRpX3ByZXYtPmNoYWluX3ZhbHVlID0gMTsNCisgICAg fQ0KKw0KKyAgZGktPmFjdGlvbl92YWx1ZSA9IGZpbHRlcjsNCisgIGRpLT5h Y3Rpb25fbmR4ID0gaW5kZXg7DQorICANCisgIHZlY19zYWZlX3B1c2ggKGR1 bW15X2luZm8sIGRpKTsNCisNCisgIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0 IGR1bW15IGluIHRoaXMgY2hhaW4sIHJlY29yZCB0aGUNCisgICAgIGNoYWlu LXRvLXRoaXMtZHVtbXkgaW5mbyBpbiB0aGUgbWFpbiByZWdpb24uICAqLw0K KyAgaWYgKGZpcnN0KQ0KKyAgICB7DQorICAgICAgY2ktPnVzZV9kdW1teSA9 IHRydWU7DQorICAgICAgY2ktPmR1bW15X2luZGV4ID0gZHVtbXlfaW5mby0+ bGVuZ3RoKCApIC0gMTsNCisgICAgfQ0KK30NCisNCisvKiBSZXR1cm4gdGhl IG51bWJlciBvZiBub3Rocm93IG9yIGNvbnRpbnVlLXVud2luZCByZWdpb25z IGJldHdlZW4NCisgICB0d28gcmVnaW9uIHJlZ2lvbiBlbnRyaWVzLiAgKi8N CitzdGF0aWMgaW50DQorY29tcGFjdF9jb3VudF9pbnRlcnZlbmluZ19ub2Nv dW50IChpbnQgbG93ZXIsIGludCBoaWdoZXIpDQorew0KKyAgaW50IGk7DQor ICBpbnQgaWdub3JlID0gMDsNCisNCisgIGlmICh2ZWNfc2FmZV9pc19lbXB0 eSAoY29tcGFjdF9pbmZvKSkNCisgICAgcmV0dXJuIGlnbm9yZTsNCisNCisg IGZvciAoaSA9IGxvd2VyOyBpIDw9IGhpZ2hlcjsgaSsrKQ0KKyAgICB7DQor ICAgICAgY29tcGFjdF9pbmZvX3JlZiBjaSA9ICgqY29tcGFjdF9pbmZvKVtp XTsNCisgIA0KKyAgICAgIGlmIChjaS0+cmVnaW9uX3R5cGUgPT0gRUNIVF9O T1RIUk9XDQorCSAgfHwgY2ktPnJlZ2lvbl90eXBlID09IEVDSFRfQ09OVElO VUVfVU5XSU5ESU5HKQ0KKwlpZ25vcmUrKzsNCisgICAgfQ0KKw0KKyAgcmV0 dXJuIGlnbm9yZTsNCit9DQorDQorLyogV2FsayB0aGUgRFdBUkYyIGV4Y2Vw dGlvbi1oYW5kbGluZyB0YWJsZXMgYW5kIGVtaXQgYSBjb21wYWN0LWVuY29k aW5nDQorICAgb2YgdGhlIGluZm9ybWF0aW9uIHBhcnRpdGlvbmVkIGxpa2Ug c286DQorDQorICAgMS4gIEEgdWxlYjEyOCBvZmZzZXQgdG8gdGhlIGVuZCBv ZiB0aGUgcmVnaW9uIGRhdGENCisgICAyLiAgVGhlIHJlZ2lvbiBkYXRhDQor ICAgMy4gIEV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uIHRhYmxlcywgaWYgcHJl c2VudA0KKyAgIDQuICBBbGlnbm1lbnQgcGFkZGluZw0KKyAgIDUuICBBcnJh eSBvZiB0eXBlIGRhdGENCisqLw0KKw0KKyNkZWZpbmUgVVNFX0FDVElPTl9F WFRFTlNJT04gMg0KKw0KK3N0YXRpYyB2b2lkDQorb3V0cHV0X29uZV9mdW5j dGlvbl9jb21wYWN0X2VoX3RhYmxlIChpbnQgc2VjdGlvbikNCit7DQorICBp bnQgaTsNCisgIHVuc2lnbmVkIGludCBrOw0KKyAgdWNoYXIgdWM7DQorICBj aGFyIGNzX2JlZ2luWzMyXTsNCisgIGNoYXIgY3NfZW5kWzMyXTsNCisgIGNo YXIgZWhzcGVjX2JlZ2luWzMyXTsNCisgIGNoYXIgZWhzcGVjX2VuZFszMl07 DQorICBib29sIGVtcHR5X2V4Y2VwdGlvbl9zcGVjID0gZmFsc2U7DQorICBj b21wYWN0X2luZm9fZCAqY2ksICpjaTI7DQorDQorICB1bnNpZ25lZCBpbnQg YWN0aW9uX3ZhbHVlOw0KKyAgaW50IGFjdGlvbl9leHRlbnNpb24gPSAwOw0K KyAgaW50IG5vX2Voc3BlY3MsIHJlZ25vOw0KKyAgaW50IHR0X2Zvcm1hdCA9 IEFTTV9QUkVGRVJSRURfRUhfREFUQV9GT1JNQVQgKC8qY29kZT0qLzAsIC8q Z2xvYmFsPSovMSk7DQorICBpbnQgdHRfZm9ybWF0X3NpemUgPSBzaXplX29m X2VuY29kZWRfdmFsdWUgKHR0X2Zvcm1hdCk7DQorICBjb25zdCB1bnNpZ25l ZCBjaGFyICphcl9zdGFydCA9DQorICAgIHZlY19zYWZlX2FkZHJlc3MgKGNy dGwtPmVoLmFjdGlvbl9yZWNvcmRfZGF0YSk7DQorICANCisgIGludCBucmVn aW9ucyA9IHZlY19zYWZlX2xlbmd0aCAoKCZ4X3J0bCktPmVoLmNhbGxfc2l0 ZV9yZWNvcmRfdltzZWN0aW9uXSk7DQorDQorICB0YXJnZXRtLmFzbV9vdXQu aW50ZXJuYWxfbGFiZWwgKGFzbV9vdXRfZmlsZSwgc2VjdGlvbiA/ICJMTFNE QUMiIDogIkxMU0RBIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY3VycmVudF9mdW5jdGlvbl9mdW5jZGVmX25vKTsNCisNCisgIEFT TV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCAoY3NfYmVnaW4sIHNlY3Rpb24g PyAiTExTREFDU0JDIiA6ICJMTFNEQUNTQiIsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN1cnJlbnRfZnVuY3Rpb25fZnVuY2RlZl9ubyk7 DQorDQorICBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwgKGNzX2VuZCwg c2VjdGlvbiA/ICJMTFNEQUNTRUMiIDogIkxMU0RBQ1NFIiwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9mdW5jdGlvbl9mdW5j ZGVmX25vKTsNCisNCisgIG5vX2Voc3BlY3MgPSBjZnVuLT5laC0+ZWhzcGVj X2RhdGEub3RoZXItPmxlbmd0aCAoKTsNCisNCisgIGlmIChub19laHNwZWNz ID4gMCkNCisgICAgZHcyX2FzbV9vdXRwdXRfZGF0YSAoMSwgMHg0MiwgIlBS IDIsIEVIc3BlY3MgcHJlc2VudCIpOw0KKyAgZWxzZQ0KKyAgICBkdzJfYXNt X291dHB1dF9kYXRhICgxLCAweDIsICJQUiAyIik7DQorICANCisgIGlmIChu cmVnaW9ucyA9PSAwKQ0KKyAgICB7DQorICAgICAgZHcyX2FzbV9vdXRwdXRf ZGF0YV91bGViMTI4ICgwLCAiQ2FsbC1zaXRlIGxlbmd0aCIpOw0KKyAgICAg IHJldHVybjsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICBkdzJfYXNtX291dHB1 dF9kZWx0YV91bGViMTI4IChjc19lbmQsIGNzX2JlZ2luLCAiQ2FsbC1zaXRl IGxlbmd0aCIpOw0KKw0KKyAgYXNzZW1ibGVfbmFtZSAoYXNtX291dF9maWxl LCBjc19iZWdpbik7DQorICBmcHV0cyAoIjpcbiIsIGFzbV9vdXRfZmlsZSk7 DQorDQorICAvKiBCdWlsZCBhbiBhY3Rpb24gY2hhaW4gZm9yIGVhY2ggZHdh cmYgcmVnaW9uLiAgKi8NCisgIGZvciAoaSA9IDA7IGkgPCBucmVnaW9uczsg aSsrKQ0KKyAgICB7DQorICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsN CisgICAgICBIT1NUX1dJREVfSU5UIGFyX2ZpbHRlciwgYXJfZGlzcDsNCisg ICAgICBzdHJ1Y3QgY2FsbF9zaXRlX3JlY29yZF9kICpjcyA9DQorCSgqKCZ4 X3J0bCktPmVoLmNhbGxfc2l0ZV9yZWNvcmRfdltzZWN0aW9uXSlbaV07DQor ICAgICAgY2hhaW5fZCAqY2UgPSBnZ2NfY2xlYXJlZF9hbGxvYzxjaGFpbl9k PiAoKTsNCisgICAgICBjZS0+ZHdhcmZfcmVnbm8gPSBpOw0KKw0KKyAgICAg IGlmIChjcy0+YWN0aW9uID09IDApDQorCXZlY19zYWZlX3B1c2ggKGNoYWlu cywgY2UpOw0KKyAgICAgIGVsc2UNCisJew0KKwkgIHAgPSBhcl9zdGFydCAr IGNzLT5hY3Rpb24gLTE7DQorCSAgcCA9IHJlYWRfc2xlYjEyOCAocCwgJmFy X2ZpbHRlcik7DQorCSAgcCA9IHJlYWRfc2xlYjEyOCAocCwgJmFyX2Rpc3Ap Ow0KKwkgIGNlLT5hY3Rpb25fbmR4ID0gY3MtPmFjdGlvbjsNCisJICB2ZWNf c2FmZV9wdXNoIChjaGFpbnMsIGNlKTsNCisJDQorCSAgd2hpbGUgKGFyX2Rp c3AgIT0gMCkNCisJICAgIHsNCisJICAgICAgY2hhaW5fZCAqbmV4dF9jZSA9 IGdnY19jbGVhcmVkX2FsbG9jPGNoYWluX2Q+ICgpOw0KKwkgICAgICBjZS0+ bmV4dCA9IG5leHRfY2U7DQorCSAgICAgIG5leHRfY2UtPmR3YXJmX3JlZ25v ID0gaTsNCisNCisJICAgICAgcCA9IGFyX3N0YXJ0ICsgKHAgLSBhcl9zdGFy dCkgKyBhcl9kaXNwIC0gMTsNCisJICAgICAgcCA9IHJlYWRfc2xlYjEyOCAo cCwgJmFyX2ZpbHRlcik7DQorCSAgICAgIHAgPSByZWFkX3NsZWIxMjggKHAs ICZhcl9kaXNwKTsNCisNCisJICAgICAgbmV4dF9jZS0+YWN0aW9uX25keCA9 IChwIC0gMSkgLSBhcl9zdGFydDsNCisJICAgICAgY2UgPSBuZXh0X2NlOw0K KwkgICAgfQ0KKwl9DQorICAgIH0NCisNCisgIC8qIFdhbGsgdGhlIHJlZ2lv bnMgYWdhaW4sIHRoaXMgdGltZSBidWlsZGluZyBjb21wYWN0IHJlZ2lvbiBl bnRyaWVzLiAgKi8NCisgIGZvciAoaSA9IDAsIHJlZ25vID0gMDsgaSA8IG5y ZWdpb25zOyArK2kpDQorICAgIHsNCisgICAgICAvKiBpIGNvdW50cyB0aGUg ZHdhcmYgcmVnaW9ucy4gIHJlZ25vIGNvdW50cyBjb21wYWN0IHJlZ2lvbnMu ICAqLw0KKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7DQorICAgICAg SE9TVF9XSURFX0lOVCBhcl9maWx0ZXIsIGFyX2Rpc3A7DQorDQorICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqYXJfc3RhcnQgPQ0KKwl2ZWNfc2FmZV9h ZGRyZXNzIChjcnRsLT5laC5hY3Rpb25fcmVjb3JkX2RhdGEpOw0KKw0KKyAg ICAgIHN0cnVjdCBjYWxsX3NpdGVfcmVjb3JkX2QgKmNzID0NCisJKCooJnhf cnRsKS0+ZWguY2FsbF9zaXRlX3JlY29yZF92W3NlY3Rpb25dKVtpXTsNCisN CisgICAgICAvKiBDcmVhdGUgYSBkdW1teSBub3Rocm93IHJlZ2lvbiBwcmlv ciB0byBlYWNoIGR3YXJmIHJlZ2lvbi4gIFRoZQ0KKwkgZHVtbXkgbm90aHJv dyByZWdpb24gc3BhbnMgdGhlIGFkZHJlc3NlcyBiZXR3ZWVuDQorICAgICAg ICAgdGhlIGR3YXJmIHJlZ2lvbnMuICAqLw0KKyAgICAgIGNvbXBhY3RfaW5z ZXJ0X25vdGhyb3cgKHNlY3Rpb24sIGkgLSAxKTsNCisgICAgICByZWdubysr Ow0KKw0KKyAgICAgIGlmIChjcy0+YWN0aW9uID09IDAgJiYgY3MtPmxhbmRp bmdfcGFkID09IDApDQorCXsNCisJICBjb21wYWN0X2luc2VydF9jb250aW51 ZSAoaSk7DQorCX0NCisgICAgICBlbHNlIGlmIChjcy0+YWN0aW9uID09IDAp DQorCXsNCisJICBjb21wYWN0X2luc2VydF9jbGVhbnVwIChpLCBjcy0+bGFu ZGluZ19wYWQpOw0KKwl9DQorICAgICAgZWxzZQ0KKwl7DQorCSAgY29tcGFj dF9pbmZvX2QgKmNpID0gZ2djX2NsZWFyZWRfYWxsb2M8Y29tcGFjdF9pbmZv X2Q+ICgpOw0KKw0KKwkgIHAgPSB2ZWNfc2FmZV9hZGRyZXNzIChjcnRsLT5l aC5hY3Rpb25fcmVjb3JkX2RhdGEpDQorCQkJICAgKyBjcy0+YWN0aW9uIC0g MTsNCisNCisJICBwID0gcmVhZF9zbGViMTI4IChwLCAmYXJfZmlsdGVyKTsN CisJICBwID0gcmVhZF9zbGViMTI4IChwLCAmYXJfZGlzcCk7DQorDQorCSAg DQorCSAgaWYgKGFyX2ZpbHRlciA9PSAwKQ0KKwkgICAgY2ktPnJlZ2lvbl90 eXBlID0gRUNIVF9DTEVBTlVQOw0KKwkgIGVsc2UNCisJICAgIGNpLT5yZWdp b25fdHlwZSA9IEVDSFRfQUNUSU9OX0NIQUlOOw0KKw0KKwkgIGNpLT5kd2Fy Zl9yZWdpb25fbm8gPSBpOw0KKwkgIGNpLT5maXJzdF9hY3Rpb25fbmR4ID0g Y3MtPmFjdGlvbjsNCisJICBjaS0+YWN0aW9uX3ZhbHVlID0gYXJfZmlsdGVy Ow0KKwkgIGNpLT5uZXh0X2FjdGlvbl9uZHggPSBjcy0+YWN0aW9uICsgMSAr IGFyX2Rpc3A7DQorCSAgY2ktPmxhbmRpbmdfcGFkID0gY3MtPmxhbmRpbmdf cGFkOw0KKwkgIGNpLT5iZWdpbl9sYWJfcHJlZml4ID0gcmVnaW9uX2JlZ2lu X2xhYjsNCisJICBjaS0+ZW5kX2xhYl9wcmVmaXggPSByZWdpb25fZW5kX2xh YjsNCisJICBjaS0+YmVnaW5fbGFiX25vID0gY2FsbF9zaXRlX2Jhc2UgKyBj aS0+ZHdhcmZfcmVnaW9uX25vOw0KKwkgIGNpLT5lbmRfbGFiX25vID0gY2Fs bF9zaXRlX2Jhc2UgKyBjaS0+ZHdhcmZfcmVnaW9uX25vOw0KKwkgIHZlY19z YWZlX3B1c2ggKGNvbXBhY3RfaW5mbywgY2kpOw0KKw0KKwkgIC8qIEEgbm9u LXplcm8gYWN0aW9uIHJlY29yZCBkaXNwbGFjZW1lbnQgZGVub3RlcyBhIGNo YWluLiAgSWYgDQorCSAgICAgdGhlIGNoYWluIGlzIGFscmVhZHkgcHJlc2Vu dCBpbiB0aGUgY29tcGFjdCByZWdpb24gcmVjb3JkcywNCisJICAgICByZS11 c2UgdGhlIGV4aXN0aW5nIGNoYWluLiAgSWYgbm90LCBkdW1teSBhY3Rpb24g cmVnaW9uDQorCSAgICAgZW50cmllcyBhcmUgY3JlYXRlZC4gIFJlLXVzZSBl eGlzdGluZyBkdW1teSBhY3Rpb24gcmVnaW9uDQorCSAgICAgZW50cmllcyBp ZiBwb3NzaWJsZS4gICovDQorDQorCSAgaWYgKGFyX2Rpc3AgIT0gMCkNCisJ ICAgIHsNCisJICAgICAgaW50IGdvdG9fcmVnbm8sIGdvdG9fZHVtbXk7DQor DQorCSAgICAgIGlmIChjb21wYWN0X2ZpbmRfY2hhaW4gKGNpLT5kd2FyZl9y ZWdpb25fbm8sICZnb3RvX3JlZ25vKSkNCisJCWNpLT5jaGFpbl92YWx1ZSA9 IGdvdG9fcmVnbm87DQorCSAgICAgIGVsc2UgaWYgKGNvbXBhY3RfZmluZF9k dW1teSAoY2ktPm5leHRfYWN0aW9uX25keCwgJmdvdG9fZHVtbXkpKQ0KKwkJ ew0KKwkJICBjaS0+dXNlX2R1bW15ID0gdHJ1ZTsNCisJCSAgY2ktPmR1bW15 X2luZGV4ID0gZ290b19kdW1teTsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJ ew0KKwkJICBib29sIGZpcnN0X2R1bW15ID0gdHJ1ZTsNCisNCisJCSAgd2hp bGUgKGFyX2Rpc3AgIT0gMCkNCisJCSAgICB7DQorCQkgICAgICBpbnQgYXJf aW5kZXg7DQorCQkgICAgICBwID0gYXJfc3RhcnQgKyAocCAtIGFyX3N0YXJ0 KSArIGFyX2Rpc3AgLSAxOw0KKwkJICAgICAgYXJfaW5kZXggPSBwIC0gYXJf c3RhcnQgKyAxOw0KKwkJICAgICAgcCA9IHJlYWRfc2xlYjEyOCAocCwgJmFy X2ZpbHRlcik7DQorCQkgICAgICBwID0gcmVhZF9zbGViMTI4IChwLCAmYXJf ZGlzcCk7DQorCQkgICAgICBjb21wYWN0X2luc2VydF9kdW1teSAoYXJfZmls dGVyLCBhcl9pbmRleCwgZmlyc3RfZHVtbXksIGNpKTsNCisJCSAgICAgIGZp cnN0X2R1bW15ID0gZmFsc2U7DQorCQkgICAgfQ0KKwkJfQ0KKwkgICAgfQ0K Kw0KKwkgIGlmIChhcl9kaXNwID09IDApDQorCSAgICBjaS0+ZW5kX29mX2No YWluID0gdHJ1ZTsNCisJfQ0KKyAgICB9DQorDQorDQorICBmb3IgKGkgPSAw OyB2ZWNfc2FmZV9pdGVyYXRlIChjb21wYWN0X2luZm8sIGksICZjaSk7ICsr aSkNCisgICAgew0KKyAgICAgIGludCBqOw0KKyAgICAgIGlmIChjaS0+ZW5k X29mX2NoYWluID09IHRydWUNCisJICB8fCBjaS0+cmVnaW9uX3R5cGUgPT0g RUNIVF9EVU1NWV9BQ1RJT05fQ0hBSU4pDQorCWNvbnRpbnVlOw0KKw0KKyAg ICAgIGZvciAoaiA9IDA7IHZlY19zYWZlX2l0ZXJhdGUgKGNvbXBhY3RfaW5m bywgaiwgJmNpMik7ICsraikNCisJew0KKwkgIGlmIChjaTItPmZpcnN0X2Fj dGlvbl9uZHggPT0gY2ktPm5leHRfYWN0aW9uX25keCkNCisJICAgIHsNCisJ ICAgICAgY2ktPmNoYWluX3ZhbHVlID0gaiAtIGk7DQorCSAgICAgIGJyZWFr Ow0KKwkgICAgfQ0KKwl9ICAgICANCisgICAgfQ0KKw0KKyAgLyogVGhlIGR1 bW15IGFjdGlvbiByZWNvcmQgZW50cmllcyBhcmUgZW1pdHRlZCBsYXN0LiAg Ki8NCisgIGNvbXBhY3RfZW1pdF9kdW1taWVzICgpOw0KKw0KKyAgLyogbm8t dGhyb3cgYW5kIGNvbnRpbnVlLXVud2luZCByZWdpb25zIGFyZSBleGNsdWRl ZCBpbiB0aGUgY2hhaW4gdmFsdWVzLiAgKi8NCisgIGZvciAoaSA9IDA7IHZl Y19zYWZlX2l0ZXJhdGUgKGNvbXBhY3RfaW5mbywgaSwgJmNpKTsgKytpKQ0K KyAgICB7DQorICAgICAgaW50IGdvdG9fcmVnbm87DQorICAgICAgaW50IG5v Y291bnQgPSAwOw0KKyAgICAgIGNvbXBhY3RfaW5mb19yZWYgY2lfbmV4dCA9 IE5VTEw7DQorDQorICAgICAgaWYgKGkgPCAoaW50KSB2ZWNfc2FmZV9sZW5n dGggKGNvbXBhY3RfaW5mbykgLSAxKQ0KKwljaV9uZXh0ID0gKCpjb21wYWN0 X2luZm8pW2kgKyAxXTsNCisNCisgICAgICBpZiAoY2ktPmNoYWluX3ZhbHVl ID09IDENCisJICAmJiBjaV9uZXh0ICE9IE5VTEwNCisJICAmJiBjaV9uZXh0 LT5yZWdpb25fdHlwZSA9PSBFQ0hUX0RVTU1ZX0FDVElPTl9DSEFJTikNCisJ Y29udGludWU7DQorDQorICAgICAgaWYgKGNpLT5jaGFpbl92YWx1ZSA9PSAw KQ0KKwljb250aW51ZTsNCisNCisgICAgICBnb3RvX3JlZ25vID0gaSArIGNp LT5jaGFpbl92YWx1ZTsNCisgICAgICBpZiAoZ290b19yZWdubyA+IGkpDQor CXsNCisJICBub2NvdW50ID0gY29tcGFjdF9jb3VudF9pbnRlcnZlbmluZ19u b2NvdW50IChpLCBnb3RvX3JlZ25vKTsNCisJICBjaS0+Y2hhaW5fdmFsdWUg PSBjaS0+Y2hhaW5fdmFsdWUgLSBub2NvdW50Ow0KKwl9DQorICAgICAgZWxz ZQ0KKwl7DQorCSAgbm9jb3VudCA9IGNvbXBhY3RfY291bnRfaW50ZXJ2ZW5p bmdfbm9jb3VudCAoZ290b19yZWdubywgaSk7DQorCSAgY2ktPmNoYWluX3Zh bHVlID0gY2ktPmNoYWluX3ZhbHVlICsgbm9jb3VudDsNCisJfQ0KKyAgICB9 DQorDQorICAvKiBFbWl0IHRoZSByZWdpb24gZW50cmllcy4gICovDQorDQor ICBmb3IgKGkgPSAwOyB2ZWNfc2FmZV9pdGVyYXRlIChjb21wYWN0X2luZm8s IGksICZjaSk7ICsraSkNCisgICAgew0KKyAgICAgIGNvbXBhY3RfZW1pdF9y ZWdpb25faGVhZGVyIChpLCBjaSk7DQorDQorICAgICAgaWYgKGNpLT5yZWdp b25fdHlwZSA9PSBFQ0hUX0FDVElPTl9DSEFJTg0KKwkgIHx8IGNpLT5yZWdp b25fdHlwZSA9PSBFQ0hUX0RVTU1ZX0FDVElPTl9DSEFJTg0KKwkgIHx8IGNp LT5yZWdpb25fdHlwZSA9PSBFQ0hUX0NMRUFOVVApDQorCXsNCisJICBpZiAo IUlOX1JBTkdFIChjaS0+YWN0aW9uX3ZhbHVlLCAtMSwgMSkpDQorCSAgICB7 DQorCSAgICAgIGFjdGlvbl92YWx1ZSA9IFVTRV9BQ1RJT05fRVhURU5TSU9O Ow0KKwkgICAgICBhY3Rpb25fZXh0ZW5zaW9uID0gY2ktPmFjdGlvbl92YWx1 ZTsNCisJICAgIH0NCisJICBlbHNlDQorCSAgICB7DQorCSAgICAgIGlmIChj aS0+YWN0aW9uX3ZhbHVlID09IC0xKQ0KKwkJYWN0aW9uX3ZhbHVlID0gMzsN CisJICAgICAgZWxzZQ0KKwkJYWN0aW9uX3ZhbHVlID0gY2ktPmFjdGlvbl92 YWx1ZTsNCisJICAgIH0NCisJICBkdzJfYXNtX291dHB1dF9jb21wYWN0X2Fj X3BhaXJfc2xlYjEyOCAoYWN0aW9uX3ZhbHVlLA0KKwkJCQkJCSAgY2ktPmNo YWluX3ZhbHVlLA0KKwkJCQkJCSAgIkFjdGlvbi9DaGFpbiBQYWlyIik7DQor DQorCSAgaWYgKGFjdGlvbl92YWx1ZSA9PSBVU0VfQUNUSU9OX0VYVEVOU0lP TikNCisJICAgIGR3Ml9hc21fb3V0cHV0X2RhdGFfc2xlYjEyOCAoYWN0aW9u X2V4dGVuc2lvbiwgIkFjdGlvbiBleHRlbnNpb24iKTsNCisJfQ0KKw0KKyAg ICB9DQorICBhc3NlbWJsZV9uYW1lIChhc21fb3V0X2ZpbGUsIGNzX2VuZCk7 DQorICBmcHV0cyAoIjpcbiIsIGFzbV9vdXRfZmlsZSk7DQorDQorICAvKiBF bWl0IHRoZSBleGNlcHRpb24gc3BlY2lmaWNhdGlvbiBpbmRpY2VzLiAgKi8N CisgIGlmIChub19laHNwZWNzID09IDEpDQorICAgIHsgDQorICAgICAgdWNo YXIgZWhzcGVjID0gKCpjZnVuLT5laC0+ZWhzcGVjX2RhdGEub3RoZXIpWzBd Ow0KKyAgICAgIGlmIChlaHNwZWMgPT0gMCkNCisJZW1wdHlfZXhjZXB0aW9u X3NwZWMgPSB0cnVlOw0KKyAgICB9DQorDQorICBpZiAobm9fZWhzcGVjcyAh PSAwKQ0KKyAgICB7DQorICAgICAgaWYgKGVtcHR5X2V4Y2VwdGlvbl9zcGVj KQ0KKwl7DQorCSAgZHcyX2FzbV9vdXRwdXRfZGF0YSAoMSwgMHgwLCAiTGVu Z3RoIG9mIEVIIFNwZWNzIik7DQorICAgIAl9DQorICAgICAgZWxzZQ0KKwl7 DQorCSAgQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMIChlaHNwZWNfYmVn aW4sIHNlY3Rpb24gPyAiTExTREFUVERDIiA6ICJMTFNEQVRURCIsDQorCQkJ CSAgICAgICBjdXJyZW50X2Z1bmN0aW9uX2Z1bmNkZWZfbm8pOw0KKw0KKwkg IEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCAoZWhzcGVjX2VuZCwgc2Vj dGlvbiA/ICJMTFNEQVRUQyIgOiAiTExTREFUVCIsDQorCQkJCSAgICAgICBj dXJyZW50X2Z1bmN0aW9uX2Z1bmNkZWZfbm8pOw0KKw0KKwkgIGR3Ml9hc21f b3V0cHV0X2RlbHRhX3VsZWIxMjggKGVoc3BlY19lbmQsIGVoc3BlY19iZWdp biwgIkxlbmd0aCBvZiBFSCBTcGVjcyIpOw0KKw0KKwkgIGFzc2VtYmxlX25h bWUgKGFzbV9vdXRfZmlsZSwgZWhzcGVjX2JlZ2luKTsNCisJICBmcHV0cyAo IjpcbiIsIGFzbV9vdXRfZmlsZSk7DQorDQorCSAgayA9IG5vX2Voc3BlY3M7 DQorCSAgZm9yIChrID0gMDsNCisJICAgICAgIHZlY19zYWZlX2l0ZXJhdGUg KGNmdW4tPmVoLT5laHNwZWNfZGF0YS5vdGhlciwgaywgJnVjKTsgKytrKQ0K KwkgICAgZHcyX2FzbV9vdXRwdXRfZGF0YSAoMSwgdWMsIGsgPyBOVUxMIDog IkV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uIHRhYmxlIik7DQorDQorCSAgYXNz ZW1ibGVfbmFtZSAoYXNtX291dF9maWxlLCBlaHNwZWNfZW5kKTsNCisJICBm cHV0cyAoIjpcbiIsIGFzbV9vdXRfZmlsZSk7DQorICAgICAgICB9DQorICAg IH0NCisNCisgIGZwdXRzICgiLmFsaWduIDJcbiIsIGFzbV9vdXRfZmlsZSk7 DQorDQorICAvKiBFbWl0IHRoZSB0eXBlIHRhYmxlIGVudHJpZXMuICAqLw0K KyAgZm9yIChrID0gMDsgayA8IGNmdW4tPmVoLT50dHlwZV9kYXRhLT5sZW5n dGggKCk7IGsrKykNCisgICAgew0KKyAgICAgIHRyZWUgdHlwZSA9ICgqY2Z1 bi0+ZWgtPnR0eXBlX2RhdGEpW2tdOw0KKyAgICAgIG91dHB1dF90dHlwZSAo dHlwZSwgdHRfZm9ybWF0LCB0dF9mb3JtYXRfc2l6ZSk7DQorICAgIH0NCisN CisgIGNhbGxfc2l0ZV9iYXNlICs9IG5yZWdpb25zOw0KKyAgdmVjX2ZyZWUg KGNoYWlucyk7DQorICB2ZWNfZnJlZSAoZHVtbXlfaW5mbyk7DQorICB2ZWNf ZnJlZSAoY29tcGFjdF9pbmZvKTsNCit9DQorDQorc3RhdGljIHZvaWQNCiBv dXRwdXRfb25lX2Z1bmN0aW9uX2V4Y2VwdGlvbl90YWJsZSAoaW50IHNlY3Rp b24pDQogew0KICAgaW50IHR0X2Zvcm1hdCwgY3NfZm9ybWF0LCBscF9mb3Jt YXQsIGk7DQpAQCAtMzA5NCw3ICszOTAyLDcgQEAgb3V0cHV0X29uZV9mdW5j dGlvbl9leGNlcHRpb25fdGFibGUgKGludCBzZWN0aW9uKQ0KIH0NCiANCiB2 b2lkDQotb3V0cHV0X2Z1bmN0aW9uX2V4Y2VwdGlvbl90YWJsZSAoY29uc3Qg Y2hhciAqZm5uYW1lKQ0KK291dHB1dF9mdW5jdGlvbl9leGNlcHRpb25fdGFi bGUgKGNvbnN0IGNoYXIgKmZubmFtZSwgYm9vbCBhZnRlcl9zd2l0Y2hfc2Vj dGlvbikNCiB7DQogICBydHggcGVyc29uYWxpdHkgPSBnZXRfcGVyc29uYWxp dHlfZnVuY3Rpb24gKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCk7DQogDQpAQCAt MzEwMiw2ICszOTEwLDkgQEAgdm9pZA0KICAgaWYgKCEgY3J0bC0+dXNlc19l aF9sc2RhKQ0KICAgICByZXR1cm47DQogDQorICBpZiAoYWZ0ZXJfc3dpdGNo X3NlY3Rpb24gJiYgIXVzaW5nX2NvbXBhY3RfcHIgKCkpDQorICAgIHJldHVy bjsNCisNCiAgIGlmIChwZXJzb25hbGl0eSkNCiAgICAgew0KICAgICAgIGFz c2VtYmxlX2V4dGVybmFsX2xpYmNhbGwgKHBlcnNvbmFsaXR5KTsNCkBAIC0z MTE1LDkgKzM5MjYsMTkgQEAgdm9pZA0KICAgLyogSWYgdGhlIHRhcmdldCB3 YW50cyBhIGxhYmVsIHRvIGJlZ2luIHRoZSB0YWJsZSwgZW1pdCBpdCBoZXJl LiAgKi8NCiAgIHRhcmdldG0uYXNtX291dC5lbWl0X2V4Y2VwdF90YWJsZV9s YWJlbCAoYXNtX291dF9maWxlKTsNCiANCi0gIG91dHB1dF9vbmVfZnVuY3Rp b25fZXhjZXB0aW9uX3RhYmxlICgwKTsNCi0gIGlmIChjcnRsLT5laC5jYWxs X3NpdGVfcmVjb3JkX3ZbMV0pDQotICAgIG91dHB1dF9vbmVfZnVuY3Rpb25f ZXhjZXB0aW9uX3RhYmxlICgxKTsNCisgIGlmICh1c2luZ19jb21wYWN0X3By ICgpKQ0KKyAgICB7DQorICAgICAgaWYgKGFmdGVyX3N3aXRjaF9zZWN0aW9u IHx8IGNydGwtPmVoLmNhbGxfc2l0ZV9yZWNvcmRfdlsxXSA9PSBOVUxMKQ0K KwlvdXRwdXRfb25lX2Z1bmN0aW9uX2NvbXBhY3RfZWhfdGFibGUgKDApOw0K KyAgICAgIGVsc2UNCisJb3V0cHV0X29uZV9mdW5jdGlvbl9jb21wYWN0X2Vo X3RhYmxlICgxKTsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAg b3V0cHV0X29uZV9mdW5jdGlvbl9leGNlcHRpb25fdGFibGUgKDApOw0KKyAg ICAgIGlmIChjcnRsLT5laC5jYWxsX3NpdGVfcmVjb3JkX3ZbMV0pDQorCW91 dHB1dF9vbmVfZnVuY3Rpb25fZXhjZXB0aW9uX3RhYmxlICgxKTsNCisgICAg fQ0KIA0KICAgc3dpdGNoX3RvX3NlY3Rpb24gKGN1cnJlbnRfZnVuY3Rpb25f c2VjdGlvbiAoKSk7DQogfQ0KSW5kZXg6IGdjYy9leGNlcHQuaA0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9leGNlcHQuaAkocmV2aXNpb24g MjMxMjM4KQ0KKysrIGdjYy9leGNlcHQuaAkod29ya2luZyBjb3B5KQ0KQEAg LTYyLDYgKzYyLDE1IEBAIGVudW0gZWhfcmVnaW9uX3R5cGUNCiAgIEVSVF9N VVNUX05PVF9USFJPVw0KIH07DQogDQorLyogUmVnaW9uIGhlYWRlciB0eXBl cyBpbiB0aGUgY29tcGFjdCBFSCBzY2hlbWUuICAqLw0KK2VudW0gZWhfY29t cGFjdF9oZWFkZXJfdHlwZQ0KK3sNCisgIEVDSFRfQUNUSU9OX0NIQUlOLA0K KyAgRUNIVF9DTEVBTlVQLA0KKyAgRUNIVF9DT05USU5VRV9VTldJTkRJTkcs DQorICBFQ0hUX0RVTU1ZX0FDVElPTl9DSEFJTiwNCisgIEVDSFRfTk9USFJP Vw0KK307DQogDQogLyogQSBsYW5kaW5nIHBhZCBmb3IgYSBnaXZlbiBleGNl cHRpb24gcmVnaW9uLiAgQW55IHRyYW5zZmVyIG9mIGNvbnRyb2wNCiAgICBm cm9tIHRoZSBFSCBydW50aW1lIHRvIHRoZSBmdW5jdGlvbiBoYXBwZW5zIGF0 IGEgbGFuZGluZyBwYWQuICAqLw0KQEAgLTIyNCwxMiArMjMzLDE0IEBAIGV4 dGVybiB2b2lkIGZvcl9lYWNoX2VoX2xhYmVsICh2b2lkICgqKSAocnR4KSk7 DQogDQogZXh0ZXJuIHZvaWQgaW5pdF9laF9mb3JfZnVuY3Rpb24gKHZvaWQp Ow0KIA0KK2V4dGVybiBpbnQgY29tcGFjdF9wcl9pZCAocnR4KTsNCisNCiBl eHRlcm4gdm9pZCByZW1vdmVfZWhfbGFuZGluZ19wYWQgKGVoX2xhbmRpbmdf cGFkKTsNCiBleHRlcm4gdm9pZCByZW1vdmVfZWhfaGFuZGxlciAoZWhfcmVn aW9uKTsNCiBleHRlcm4gdm9pZCByZW1vdmVfdW5yZWFjaGFibGVfZWhfcmVn aW9ucyAoc2JpdG1hcCk7DQogDQogZXh0ZXJuIGJvb2wgY3VycmVudF9mdW5j dGlvbl9oYXNfZXhjZXB0aW9uX2hhbmRsZXJzICh2b2lkKTsNCi1leHRlcm4g dm9pZCBvdXRwdXRfZnVuY3Rpb25fZXhjZXB0aW9uX3RhYmxlIChjb25zdCBj aGFyICopOw0KK2V4dGVybiB2b2lkIG91dHB1dF9mdW5jdGlvbl9leGNlcHRp b25fdGFibGUgKGNvbnN0IGNoYXIgKiwgYm9vbCk7DQogDQogZXh0ZXJuIHJ0 eCBleHBhbmRfYnVpbHRpbl9laF9wb2ludGVyICh0cmVlKTsNCiBleHRlcm4g cnR4IGV4cGFuZF9idWlsdGluX2VoX2ZpbHRlciAodHJlZSk7DQpAQCAtMjg0 LDYgKzI5NSw4IEBAIGV4dGVybiBlaF9sYW5kaW5nX3BhZCBnZXRfZWhfbGFu ZGluZ19wYWRfZnJvbV9ydHgNCiANCiBleHRlcm4gdm9pZCBmaW5pc2hfZWhf Z2VuZXJhdGlvbiAodm9pZCk7DQogDQorZXh0ZXJuIHZvaWQgcHVzaF91bGVi MTI4ICh2ZWM8dWNoYXIsIHZhX2djPiAqKiwgdW5zaWduZWQgaW50KTsNCisN CiBzdHJ1Y3QgR1RZKCgpKSB0aHJvd19zdG10X25vZGUgew0KICAgZ2ltcGxl ICpzdG10Ow0KICAgaW50IGxwX25yOw0KSW5kZXg6IGdjYy9kd2FyZjJjZmku Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9kd2FyZjJjZmku YwkocmV2aXNpb24gMjMxMjM4KQ0KKysrIGdjYy9kd2FyZjJjZmkuYwkod29y a2luZyBjb3B5KQ0KQEAgLTM0MDksMTAgKzM0MDksMTIgQEAgZHdhcmYyb3V0 X2RvX2NmaV9hc20gKHZvaWQpDQogICAvKiBNYWtlIHN1cmUgdGhlIHBlcnNv bmFsaXR5IGVuY29kaW5nIGlzIG9uZSB0aGUgYXNzZW1ibGVyIGNhbiBzdXBw b3J0Lg0KICAgICAgSW4gcGFydGljdWxhciwgYWxpZ25lZCBhZGRyZXNzZXMg Y2FuJ3QgYmUgaGFuZGxlZC4gICovDQogICBlbmMgPSBBU01fUFJFRkVSUkVE X0VIX0RBVEFfRk9STUFUICgvKmNvZGU9Ki8yLC8qZ2xvYmFsPSovMSk7DQot ICBpZiAoKGVuYyAmIDB4NzApICE9IDAgJiYgKGVuYyAmIDB4NzApICE9IERX X0VIX1BFX3BjcmVsKQ0KKyAgaWYgKChlbmMgJiAweDcwKSAhPSAwICYmIChl bmMgJiAweDcwKSAhPSBEV19FSF9QRV9wY3JlbA0KKyAgICAgICYmIChlbmMg JiBHQ0NfRFdfRUhfUEVfc3BlY2lhbCkgPT0gMCkNCiAgICAgcmV0dXJuIGZh bHNlOw0KICAgZW5jID0gQVNNX1BSRUZFUlJFRF9FSF9EQVRBX0ZPUk1BVCAo Lypjb2RlPSovMCwvKmdsb2JhbD0qLzApOw0KLSAgaWYgKChlbmMgJiAweDcw KSAhPSAwICYmIChlbmMgJiAweDcwKSAhPSBEV19FSF9QRV9wY3JlbCkNCisg IGlmICgoZW5jICYgMHg3MCkgIT0gMCAmJiAoZW5jICYgMHg3MCkgIT0gRFdf RUhfUEVfcGNyZWwNCisgICAgICAmJiAoZW5jICYgR0NDX0RXX0VIX1BFX3Nw ZWNpYWwpID09IDApDQogICAgIHJldHVybiBmYWxzZTsNCiANCiAgIC8qIElm IHdlIGNhbid0IGdldCB0aGUgYXNzZW1ibGVyIHRvIGVtaXQgb25seSAuZGVi dWdfZnJhbWUsIGFuZCB3ZSBkb24ndCBuZWVkDQpJbmRleDogZ2NjL2R3YXJm MmFzbS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL2R3YXJm MmFzbS5jCShyZXZpc2lvbiAyMzEyMzgpDQorKysgZ2NjL2R3YXJmMmFzbS5j CSh3b3JraW5nIGNvcHkpDQpAQCAtODUsNiArODUsMjIgQEAgZHcyX2FzbV9v dXRwdXRfZGF0YV9yYXcgKGludCBzaXplLCB1bnNpZ25lZCBIT1NUX1cNCiAg ICAgfQ0KIH0NCiANCisvKiBPdXRwdXQgYSBjb21tZW50LiAgKi8NCit2b2lk DQorZHcyX2FzbV9vdXRwdXRfY29tbWVudCAoY29uc3QgY2hhciAqY29tbWVu dCwgLi4uKQ0KK3sNCisgIHZhX2xpc3QgYXA7DQorDQorICB2YV9zdGFydCAo YXAsIGNvbW1lbnQpOw0KKw0KKyAgaWYgKGZsYWdfZGVidWdfYXNtICYmIGNv bW1lbnQpDQorICAgIHsNCisgICAgICBmcHJpbnRmIChhc21fb3V0X2ZpbGUs ICJcdCVzICIsIEFTTV9DT01NRU5UX1NUQVJUKTsNCisgICAgICB2ZnByaW50 ZiAoYXNtX291dF9maWxlLCBjb21tZW50LCBhcCk7DQorICAgIH0NCisgIGZw dXRjICgnXG4nLCBhc21fb3V0X2ZpbGUpOw0KK30NCisNCiAvKiBPdXRwdXQg YW4gaW1tZWRpYXRlIGNvbnN0YW50IGluIGEgZ2l2ZW4gU0laRSBpbiBieXRl cy4gICovDQogDQogdm9pZA0KQEAgLTQxNiw3ICs0MzIsNyBAQCBlaF9kYXRh X2Zvcm1hdF9uYW1lIChpbnQgZm9ybWF0KQ0KICNpZiBIQVZFX0RFU0lHTkFU RURfSU5JVElBTElaRVJTDQogICBfX2V4dGVuc2lvbl9fIHN0YXRpYyBjb25z dCBjaGFyICogY29uc3QgZm9ybWF0X25hbWVzWzI1Nl0gPSB7DQogI2Vsc2UN Ci0gIHN3aXRjaCAoZm9ybWF0KSB7DQorICBzd2l0Y2ggKGZvcm1hdCAmIH5H Q0NfRFdfRUhfUEVfc3BlY2lhbCkgew0KICNlbmRpZg0KIA0KICAgUyhEV19F SF9QRV9hYnNwdHIsICJhYnNvbHV0ZSIpDQpAQCAtNTUzLDYgKzU2OSw3IEBA IGVoX2RhdGFfZm9ybWF0X25hbWUgKGludCBmb3JtYXQpDQogI2lmIEhBVkVf REVTSUdOQVRFRF9JTklUSUFMSVpFUlMNCiAgIH07DQogDQorICBmb3JtYXQg Jj0gfkdDQ19EV19FSF9QRV9zcGVjaWFsOw0KICAgZ2NjX2Fzc2VydCAoZm9y bWF0ID49IDAgJiYgZm9ybWF0IDwgMHgxMDAgJiYgZm9ybWF0X25hbWVzW2Zv cm1hdF0pOw0KIA0KICAgcmV0dXJuIGZvcm1hdF9uYW1lc1tmb3JtYXRdOw0K QEAgLTc1OSw2ICs3NzYsOTkgQEAgZHcyX2FzbV9vdXRwdXRfZGVsdGFfdWxl YjEyOCAoY29uc3QgY2hhciAqbGFiMSBBVFQNCiAgIHZhX2VuZCAoYXApOw0K IH0NCiANCisvKiBPdXRwdXQgYSBjb21wYWN0IEVIIHJlZ2lvbiBsZW5ndGgg ZW50cnkuICovDQordm9pZA0KK2R3Ml9hc21fb3V0cHV0X2NvbXBhY3RfcmVn aW9uX2xlbmd0aCAoY29uc3QgY2hhciAqbGFiMSBBVFRSSUJVVEVfVU5VU0VE LA0KKwkJCQkgICAgICBjb25zdCBjaGFyICpsYWIyIEFUVFJJQlVURV9VTlVT RUQsDQorCQkJCSAgICAgIGJvb2wgc2V0Yml0MCwNCisJCQkJICAgICAgY29u c3QgY2hhciAqY29tbWVudCwgLi4uKQ0KK3sNCisgIHZhX2xpc3QgYXA7DQor DQorICB2YV9zdGFydCAoYXAsIGNvbW1lbnQpOw0KKw0KKyNpZmRlZiBIQVZF X0FTX0xFQjEyOA0KKyAgZnB1dHMgKCJcdC51bGViMTI4ICgiLCBhc21fb3V0 X2ZpbGUpOw0KKyAgYXNzZW1ibGVfbmFtZSAoYXNtX291dF9maWxlLCBsYWIx KTsNCisgIGZwdXRzICgiLSIsIGFzbV9vdXRfZmlsZSk7DQorICBhc3NlbWJs ZV9uYW1lIChhc21fb3V0X2ZpbGUsIGxhYjIpOw0KKyAgZnB1dHMgKCIpIiwg YXNtX291dF9maWxlKTsNCisgIGlmIChzZXRiaXQwKQ0KKyAgICBmcHV0cyAo InwxIiwgYXNtX291dF9maWxlKTsNCisjZWxzZQ0KKyAgZ2NjX3VucmVhY2hh YmxlICgpOw0KKyNlbmRpZg0KKw0KKyAgaWYgKGZsYWdfZGVidWdfYXNtICYm IGNvbW1lbnQpDQorICAgIHsNCisgICAgICBmcHJpbnRmIChhc21fb3V0X2Zp bGUsICJcdCVzICIsIEFTTV9DT01NRU5UX1NUQVJUKTsNCisgICAgICB2ZnBy aW50ZiAoYXNtX291dF9maWxlLCBjb21tZW50LCBhcCk7DQorICAgIH0NCisg IGZwdXRjICgnXG4nLCBhc21fb3V0X2ZpbGUpOw0KKw0KKyAgdmFfZW5kIChh cCk7DQorfQ0KKw0KKy8qIE91dHB1dCBhIGNvbXBhY3QgRUggbGFuZGluZyBw YWQgZW50cnkuICAqLw0KKw0KK3ZvaWQNCitkdzJfYXNtX291dHB1dF9jb21w YWN0X2xhbmRpbmdfcGFkIChjb25zdCBjaGFyICpsYWIxIEFUVFJJQlVURV9V TlVTRUQsDQorCQkJCSAgICBjb25zdCBjaGFyICpsYWIyIEFUVFJJQlVURV9V TlVTRUQsDQorCQkJCSAgICBjb25zdCBjaGFyICpjb21tZW50LCAuLi4pDQor ew0KKyAgdmFfbGlzdCBhcDsNCisNCisgIHZhX3N0YXJ0IChhcCwgY29tbWVu dCk7DQorDQorI2lmZGVmIEhBVkVfQVNfTEVCMTI4DQorICBmcHV0cyAoIlx0 LnNsZWIxMjggKCIsIGFzbV9vdXRfZmlsZSk7DQorICBhc3NlbWJsZV9uYW1l IChhc21fb3V0X2ZpbGUsIGxhYjEpOw0KKyAgZnB1dHMgKCItKCIsIGFzbV9v dXRfZmlsZSk7DQorICBhc3NlbWJsZV9uYW1lIChhc21fb3V0X2ZpbGUsIGxh YjIpOw0KKyAgZnB1dHMgKCIpKSIsIGFzbV9vdXRfZmlsZSk7DQorI2Vsc2UN CisgIGdjY191bnJlYWNoYWJsZSAoKTsNCisjZW5kaWYNCisNCisgIGlmIChm bGFnX2RlYnVnX2FzbSAmJiBjb21tZW50KQ0KKyAgICB7DQorICAgICAgZnBy aW50ZiAoYXNtX291dF9maWxlLCAiXHQlcyAiLCBBU01fQ09NTUVOVF9TVEFS VCk7DQorICAgICAgdmZwcmludGYgKGFzbV9vdXRfZmlsZSwgY29tbWVudCwg YXApOw0KKyAgICB9DQorICBmcHV0YyAoJ1xuJywgYXNtX291dF9maWxlKTsN CisNCisgIHZhX2VuZCAoYXApOw0KK30NCisNCisvKiBPdXRwdXQgYSBjb21w YWN0IEVIIGFjdGlvbi9jaGFpbiBwYWlyLiAgKi8NCisNCit2b2lkDQorZHcy X2FzbV9vdXRwdXRfY29tcGFjdF9hY19wYWlyX3NsZWIxMjggKGludCBhY3Rp b24sIGludCBjaGFpbl92YWx1ZSwNCisJCQkJCWNvbnN0IGNoYXIgKmNvbW1l bnQsIC4uLikNCit7DQorICB2YV9saXN0IGFwOw0KKw0KKyAgdmFfc3RhcnQg KGFwLCBjb21tZW50KTsNCisNCisjaWZkZWYgSEFWRV9BU19MRUIxMjgNCisg IGZwdXRzICgiXHQuc2xlYjEyOCAiLCBhc21fb3V0X2ZpbGUpOw0KKyAgZnB1 dGMgKCcoJywgYXNtX291dF9maWxlKTsNCisgIGZwcmludGYgKGFzbV9vdXRf ZmlsZSwgIiUjeCIsIGNoYWluX3ZhbHVlKTsNCisgIGZwdXRzICgiPDwyKXwi LCBhc21fb3V0X2ZpbGUpOw0KKyAgZnByaW50ZiAoYXNtX291dF9maWxlLCAi JSN4IiwgYWN0aW9uKTsNCisjZWxzZQ0KKyAgZ2NjX3VucmVhY2hhYmxlICgp Ow0KKyNlbmRpZg0KKw0KKyAgaWYgKGZsYWdfZGVidWdfYXNtICYmIGNvbW1l bnQpDQorICAgIHsNCisgICAgICBmcHJpbnRmIChhc21fb3V0X2ZpbGUsICJc dCVzICIsIEFTTV9DT01NRU5UX1NUQVJUKTsNCisgICAgICB2ZnByaW50ZiAo YXNtX291dF9maWxlLCBjb21tZW50LCBhcCk7DQorICAgIH0NCisgIGZwdXRj ICgnXG4nLCBhc21fb3V0X2ZpbGUpOw0KKw0KKyAgdmFfZW5kIChhcCk7DQor fQ0KICNpZiAwDQogDQogdm9pZA0KSW5kZXg6IGdjYy9kd2FyZjJhc20uaA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9kd2FyZjJhc20uaAko cmV2aXNpb24gMjMxMjM4KQ0KKysrIGdjYy9kd2FyZjJhc20uaAkod29ya2lu ZyBjb3B5KQ0KQEAgLTI0LDYgKzI0LDkgQEAgZXh0ZXJuIHZvaWQgZHcyX2Fz c2VtYmxlX2ludGVnZXIgKGludCwgcnR4KTsNCiANCiBleHRlcm4gdm9pZCBk dzJfYXNtX291dHB1dF9kYXRhX3JhdyAoaW50LCB1bnNpZ25lZCBIT1NUX1dJ REVfSU5UKTsNCiANCitleHRlcm4gdm9pZCBkdzJfYXNtX291dHB1dF9jb21t ZW50IChjb25zdCBjaGFyICosIC4uLikNCisgICAgIEFUVFJJQlVURV9OVUxM X1BSSU5URl8xOw0KKw0KIGV4dGVybiB2b2lkIGR3Ml9hc21fb3V0cHV0X2Rh dGEgKGludCwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCwNCiAJCQkJIGNvbnN0 IGNoYXIgKiwgLi4uKQ0KICAgICAgQVRUUklCVVRFX05VTExfUFJJTlRGXzM7 DQpAQCAtNzAsNiArNzMsMTcgQEAgZXh0ZXJuIHZvaWQgZHcyX2FzbV9vdXRw dXRfZGVsdGFfdWxlYjEyOCAoY29uc3QgY2gNCiAJCQkJCSAgY29uc3QgY2hh ciAqLCAuLi4pDQogICAgICBBVFRSSUJVVEVfTlVMTF9QUklOVEZfMzsNCiAN CitleHRlcm4gdm9pZCBkdzJfYXNtX291dHB1dF9jb21wYWN0X3JlZ2lvbl9s ZW5ndGggKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLA0KKwkJCQkJICAg ICAgICAgIGJvb2wsIGNvbnN0IGNoYXIgKiwgLi4uKQ0KKyAgICAgQVRUUklC VVRFX05VTExfUFJJTlRGXzQ7DQorDQorZXh0ZXJuIHZvaWQgZHcyX2FzbV9v dXRwdXRfY29tcGFjdF9sYW5kaW5nX3BhZCAoY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICosDQorCQkJCQkJY29uc3QgY2hhciAqLCAuLi4pDQorICAgICBB VFRSSUJVVEVfTlVMTF9QUklOVEZfMzsNCisNCitleHRlcm4gdm9pZCBkdzJf YXNtX291dHB1dF9jb21wYWN0X2FjX3BhaXJfc2xlYjEyOCAoaW50LCBpbnQs IGNvbnN0IGNoYXIgKiwgLi4uKQ0KKyAgICAgQVRUUklCVVRFX05VTExfUFJJ TlRGXzM7DQorDQogZXh0ZXJuIGludCBzaXplX29mX3VsZWIxMjggKHVuc2ln bmVkIEhPU1RfV0lERV9JTlQpOw0KIGV4dGVybiBpbnQgc2l6ZV9vZl9zbGVi MTI4IChIT1NUX1dJREVfSU5UKTsNCiBleHRlcm4gaW50IHNpemVfb2ZfZW5j b2RlZF92YWx1ZSAoaW50KTsNCkBAIC04OSw0ICsxMDMsOCBAQCBleHRlcm4g dm9pZCBkdzJfYXNtX291dHB1dF9kZWx0YV9zbGViMTI4IChjb25zdCBjaA0K ICAgICAgQVRUUklCVVRFX05VTExfUFJJTlRGXzM7DQogI2VuZGlmDQogDQor LyogUHJvdmlkZSBhIGJpdCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1hcmsgYW4g RUggZW5jb2RpbmcgYXMgcmVxdWlyaW5nDQorICAgc3BlY2lhbCBoYW5kbGlu Zy4gICovDQorI2RlZmluZSBHQ0NfRFdfRUhfUEVfc3BlY2lhbCAweDEwMA0K Kw0KICNlbmRpZiAvKiBHQ0NfRFdBUkYyQVNNX0ggKi8NCkluZGV4OiBnY2Mv dGFyZ2hvb2tzLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2Mv dGFyZ2hvb2tzLmMJKHJldmlzaW9uIDIzMTIzOCkNCisrKyBnY2MvdGFyZ2hv b2tzLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xOTYxLDQgKzE5NjEsMTAgQEAg ZGVmYXVsdF9vcHRhYl9zdXBwb3J0ZWRfcCAoaW50LCBtYWNoaW5lX21vZGUs IG1hY2gNCiAgIHJldHVybiB0cnVlOw0KIH0NCiANCit2b2lkDQorZGVmYXVs dF9hc21fb3V0cHV0X2NmaV9lbmRwcm9jICh2b2lkKQ0KK3sNCisgIGZwcmlu dGYgKGFzbV9vdXRfZmlsZSwgIlx0LmNmaV9lbmRwcm9jXG4iKTsNCit9DQor DQogI2luY2x1ZGUgImd0LXRhcmdob29rcy5oIg0KSW5kZXg6IGdjYy90YXJn aG9va3MuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90YXJn aG9va3MuaAkocmV2aXNpb24gMjMxMjM4KQ0KKysrIGdjYy90YXJnaG9va3Mu aAkod29ya2luZyBjb3B5KQ0KQEAgLTIwNyw2ICsyMDcsNyBAQCBleHRlcm4g Ym9vbCBkZWZhdWx0X2NsYXNzX2xpa2VseV9zcGlsbGVkX3AgKHJlZ19jbA0K IGV4dGVybiB1bnNpZ25lZCBjaGFyIGRlZmF1bHRfY2xhc3NfbWF4X25yZWdz IChyZWdfY2xhc3NfdCwgbWFjaGluZV9tb2RlKTsNCiANCiBleHRlcm4gZW51 bSB1bndpbmRfaW5mb190eXBlIGRlZmF1bHRfZGVidWdfdW53aW5kX2luZm8g KHZvaWQpOw0KK2V4dGVybiB2b2lkIGRlZmF1bHRfYXNtX291dHB1dF9jZmlf ZW5kcHJvYyAodm9pZCk7DQogDQogZXh0ZXJuIHZvaWQgZGVmYXVsdF9jYW5v bmljYWxpemVfY29tcGFyaXNvbiAoaW50ICosIHJ0eCAqLCBydHggKiwgYm9v bCk7DQogDQpJbmRleDogZ2NjL2NvbmZpZy9taXBzL2VsZi5oDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gZ2NjL2NvbmZpZy9taXBzL2VsZi5oCShy ZXZpc2lvbiAyMzEyMzgpDQorKysgZ2NjL2NvbmZpZy9taXBzL2VsZi5oCSh3 b3JraW5nIGNvcHkpDQpAQCAtNDgsMyArNDgsNSBAQCBhbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQ0KICNkZWZp bmUgRU5ERklMRV9TUEVDICJjcnRlbmQlTyVzIGNydG4lTyVzIg0KIA0KICNk ZWZpbmUgTk9fSU1QTElDSVRfRVhURVJOX0MgMQ0KKw0KKyNkZWZpbmUgTURf SEFWRV9DT01QQUNUX0VIIDENCkluZGV4OiBnY2MvY29uZmlnL21pcHMvc2Rl LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvY29uZmlnL21p cHMvc2RlLmgJKHJldmlzaW9uIDIzMTIzOCkNCisrKyBnY2MvY29uZmlnL21p cHMvc2RlLmgJKHdvcmtpbmcgY29weSkNCkBAIC0xOCw2ICsxOCwxMSBAQCBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbA0KIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMu ICBJZiBub3Qgc2VlDQogPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LiAgKi8NCiANCisjaWZkZWYgSEFWRV9HQVNfRUhfRlJBTUVfRU5UUlkNCisj dW5kZWYgTUlQU19DT01QQUNUX0VIX1BDUkVMDQorI2RlZmluZSBNSVBTX0NP TVBBQ1RfRUhfUENSRUwgMQ0KKyNlbmRpZg0KKw0KICN1bmRlZiBEUklWRVJf U0VMRl9TUEVDUw0KICNkZWZpbmUgRFJJVkVSX1NFTEZfU1BFQ1MJCQkJCQlc DQogICAvKiBTZXQgdGhlIElTQSBmb3IgdGhlIGRlZmF1bHQgbXVsdGlsaWIu ICAqLwkJCQlcDQpJbmRleDogZ2NjL2NvbmZpZy9taXBzL21pcHMub3B0DQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL2NvbmZpZy9taXBzL21p cHMub3B0CShyZXZpc2lvbiAyMzEyMzgpDQorKysgZ2NjL2NvbmZpZy9taXBz L21pcHMub3B0CSh3b3JraW5nIGNvcHkpDQpAQCAtOTksNiArOTksMTAgQEAg RW51bShtaXBzX2NvZGVfcmVhZGFibGVfc2V0dGluZykgU3RyaW5nKHBjcmVs KSBWYWwNCiBFbnVtVmFsdWUNCiBFbnVtKG1pcHNfY29kZV9yZWFkYWJsZV9z ZXR0aW5nKSBTdHJpbmcobm8pIFZhbHVlKENPREVfUkVBREFCTEVfTk8pDQog DQorbWNvbXBhY3QtZWgNCitUYXJnZXQgVmFyKFRBUkdFVF9DT01QQUNUX0VI KSBJbml0KDEpDQorVXNlIGNvbXBhY3QgZXhjZXB0aW9uIHVud2luZGluZyB0 YWJsZXMuDQorDQogbWRpdmlkZS1icmVha3MNCiBUYXJnZXQgUmVwb3J0IFJl amVjdE5lZ2F0aXZlIE1hc2soRElWSURFX0JSRUFLUykNCiBVc2UgYnJhbmNo LWFuZC1icmVhayBzZXF1ZW5jZXMgdG8gY2hlY2sgZm9yIGludGVnZXIgZGl2 aWRlIGJ5IHplcm8uDQpJbmRleDogZ2NjL2NvbmZpZy9taXBzL21pcHMtcHJv dG9zLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvY29uZmln L21pcHMvbWlwcy1wcm90b3MuaAkocmV2aXNpb24gMjMxMjM4KQ0KKysrIGdj Yy9jb25maWcvbWlwcy9taXBzLXByb3Rvcy5oCSh3b3JraW5nIGNvcHkpDQpA QCAtMjU1LDYgKzI1NSw3IEBAIGV4dGVybiB2b2lkIG1pcHNfcG9wX2FzbV9z d2l0Y2ggKHN0cnVjdCBtaXBzX2FzbV9zDQogZXh0ZXJuIHZvaWQgbWlwc19v dXRwdXRfZXh0ZXJuYWwgKEZJTEUgKiwgdHJlZSwgY29uc3QgY2hhciAqKTsN CiBleHRlcm4gdm9pZCBtaXBzX291dHB1dF9hc2NpaSAoRklMRSAqLCBjb25z dCBjaGFyICosIHNpemVfdCk7DQogZXh0ZXJuIGNvbnN0IGNoYXIgKm1pcHNf b3V0cHV0X3Rsc19yZWxvY19kaXJlY3RpdmUgKHJ0eCAqKTsNCitleHRlcm4g dm9pZCBtaXBzX2ZpeHVwX2NmaV9zZWN0aW9ucyAodm9pZCk7DQogZXh0ZXJu IHZvaWQgbWlwc19vdXRwdXRfYWxpZ25lZF9kZWNsX2NvbW1vbiAoRklMRSAq LCB0cmVlLCBjb25zdCBjaGFyICosDQogCQkJCQkgICAgIHVuc2lnbmVkIEhP U1RfV0lERV9JTlQsDQogCQkJCQkgICAgIHVuc2lnbmVkIGludCk7DQpJbmRl eDogZ2NjL2NvbmZpZy9taXBzL21pcHMuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy9jb25maWcvbWlwcy9taXBzLmMJKHJldmlzaW9uIDIz MTIzOCkNCisrKyBnY2MvY29uZmlnL21pcHMvbWlwcy5jCSh3b3JraW5nIGNv cHkpDQpAQCAtNjEsNiArNjEsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQ0KICNpbmNsdWRlICJjb250 ZXh0LmgiDQogI2luY2x1ZGUgImJ1aWx0aW5zLmgiDQogI2luY2x1ZGUgInJ0 bC1pdGVyLmgiDQorI2luY2x1ZGUgImV4Y2VwdC5oIg0KKyNpbmNsdWRlICJk ZWJ1Zy5oIg0KIA0KIC8qIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQg bGFzdC4gICovDQogI2luY2x1ZGUgInRhcmdldC1kZWYuaCINCkBAIC01MzEs NiArNTMzLDggQEAgc3RhdGljIG1pcHNfb25lX29ubHlfc3R1YiAqbWlwczE2 X3JkaHdyX3N0dWI7DQogc3RhdGljIG1pcHNfb25lX29ubHlfc3R1YiAqbWlw czE2X2dldF9mY3NyX3N0dWI7DQogc3RhdGljIG1pcHNfb25lX29ubHlfc3R1 YiAqbWlwczE2X3NldF9mY3NyX3N0dWI7DQogDQorc3RhdGljIGJvb2wgZG9u ZV9jZmlfc2VjdGlvbnM7DQorDQogLyogSW5kZXggUiBpcyB0aGUgc21hbGxl c3QgcmVnaXN0ZXIgY2xhc3MgdGhhdCBjb250YWlucyByZWdpc3RlciBSLiAg Ki8NCiBjb25zdCBlbnVtIHJlZ19jbGFzcyBtaXBzX3JlZ25vX3RvX2NsYXNz W0ZJUlNUX1BTRVVET19SRUdJU1RFUl0gPSB7DQogICBMRUFfUkVHUywgICAg ICAgIExFQV9SRUdTLCAgICAgICAgTTE2X1NUT1JFX1JFR1MsICBWMV9SRUcs DQpAQCAtNjUyOCw2ICs2NTMyLDQxIEBAIG1pcHNfc3RhcnRfdW5pcXVlX2Z1 bmN0aW9uIChjb25zdCBjaGFyICpuYW1lKQ0KICAgcHV0YyAoJ1xuJywgYXNt X291dF9maWxlKTsNCiB9DQogDQorLyogVGhlIExUTyBmcm9udGVuZCBvbmx5 IGVuYWJsZXMgZXhjZXB0aW9ucyB3aGVuIGl0IHNlZXMgYSBmdW5jdGlvbiB0 aGF0DQorICAgdXNlcyBpdC4gIFRoaXMgY2hhbmdlcyB0aGUgcmV0dXJuIHZh bHVlIG9mIGR3YXJmMm91dF9kb19mcmFtZSwgc28gd2UNCisgICBoYXZlIHRv IGNoZWNrIGJlZm9yZSBldmVyeSBmdW5jdGlvbi4gICovDQorDQordm9pZA0K K21pcHNfZml4dXBfY2ZpX3NlY3Rpb25zICh2b2lkKQ0KK3sNCisjaWZkZWYg TURfSEFWRV9DT01QQUNUX0VIDQorICBpZiAoZG9uZV9jZmlfc2VjdGlvbnMp DQorICAgIHJldHVybjsNCisNCisgIGlmICghVEFSR0VUX0NPTVBBQ1RfRUgp DQorICAgIHJldHVybjsNCisNCisgIC8qIE91dHB1dCBhIC5jZmlfc2VjdGlv bnMgZGlyZWN0aXZlLiAgKi8NCisgIGlmIChkd2FyZjJvdXRfZG9fZnJhbWUg KCkpDQorICAgIHsNCisgICAgICBpZiAoZmxhZ191bndpbmRfdGFibGVzIHx8 IGZsYWdfZXhjZXB0aW9ucykNCisJew0KKwkgIGlmICh3cml0ZV9zeW1ib2xz ID09IERXQVJGMl9ERUJVRw0KKwkgICAgICB8fCB3cml0ZV9zeW1ib2xzID09 IFZNU19BTkRfRFdBUkYyX0RFQlVHDQorCSAgICAgIHx8IGZsYWdfYXN5bmNo cm9ub3VzX3Vud2luZF90YWJsZXMpDQorCSAgICBmcHJpbnRmIChhc21fb3V0 X2ZpbGUsDQorCQkgICAgICJcdC5jZmlfc2VjdGlvbnMgLmRlYnVnX2ZyYW1l LCAuZWhfZnJhbWVfZW50cnlcbiIpOw0KKwkgIGVsc2UNCisJICAgIGZwcmlu dGYgKGFzbV9vdXRfZmlsZSwgIlx0LmNmaV9zZWN0aW9ucyAuZWhfZnJhbWVf ZW50cnlcbiIpOw0KKwl9DQorICAgICAgZWxzZQ0KKwlmcHJpbnRmIChhc21f b3V0X2ZpbGUsICJcdC5jZmlfc2VjdGlvbnMgLmRlYnVnX2ZyYW1lXG4iKTsN CisgICAgICBkb25lX2NmaV9zZWN0aW9ucyA9IHRydWU7DQorICAgIH0NCisj ZW5kaWYNCit9DQorDQorDQogLyogU3RhcnQgYSBkZWZpbml0aW9uIG9mIGZ1 bmN0aW9uIE5BTUUuICBNSVBTMTZfUCBpbmRpY2F0ZXMgd2hldGhlciB0aGUN CiAgICBmdW5jdGlvbiBjb250YWlucyBNSVBTMTYgY29kZS4gICovDQogDQpA QCAtNzExMSw3ICs3MTUwLDExIEBAIG1pcHMxNl9idWlsZF9jYWxsX3N0dWIg KHJ0eCByZXR2YWwsIHJ0eCAqZm5fcHRyLCByDQogDQogCSAgLyogIlNhdmUi ICRzcCBpbiBpdHNlbGYgc28gd2UgZG9uJ3QgdXNlIHRoZSBmYWtlIENGQS4N CiAJICAgICBUaGlzIGlzOiBEV19DRkFfdmFsX2V4cHJlc3Npb24gcjI5LCB7 IERXX09QX3JlZzI5IH0uICAqLw0KLQkgIGZwcmludGYgKGFzbV9vdXRfZmls ZSwgIlx0LmNmaV9lc2NhcGUgMHgxNiwyOSwxLDB4NmRcbiIpOw0KKwkgIGlm IChkd2FyZjJvdXRfZG9fZnJhbWUgKCkNCisJICAgICAgJiYgKGZsYWdfdW53 aW5kX3RhYmxlcyB8fCBmbGFnX2V4Y2VwdGlvbnMpKQ0KKwkgICAgZnByaW50 ZiAoYXNtX291dF9maWxlLCAiXHQuY2ZpX2ZkZV9kYXRhIDB4NWJcbiIpOw0K KwkgIGVsc2UNCisJICAgIGZwcmludGYgKGFzbV9vdXRfZmlsZSwgIlx0LmNm aV9lc2NhcGUgMHgxNiwyOSwxLDB4NmRcbiIpOw0KIA0KIAkgIC8qIFNhdmUg dGhlIHJldHVybiBhZGRyZXNzIGluICQxOC4gIFRoZSBzdHViJ3MgY2FsbGVy IGtub3dzDQogCSAgICAgdGhhdCAkMTggbWlnaHQgYmUgY2xvYmJlcmVkLCBl dmVuIHRob3VnaCAkMTggaXMgdXN1YWxseQ0KQEAgLTg3MjMsNiArODc2Niwx OSBAQCBtaXBzX2Z1bmN0aW9uX3JvZGF0YV9zZWN0aW9uICh0cmVlIGRlY2wp DQogICByZXR1cm4gZGF0YV9zZWN0aW9uOw0KIH0NCiANCisvKiBJbXBsZW1l bnQgVEFSR0VUX0FTTV9JTklUX1NFQ1RJT05TLiAgKi8NCisNCitzdGF0aWMg dm9pZA0KK21pcHNfYXNtX2luaXRfc2VjdGlvbnMgKHZvaWQpDQorew0KKyAg aWYgKFRBUkdFVF9DT01QQUNUX0VIKQ0KKyAgICB7DQorICAgICAgLyogTGV0 IHRoZSBhc3NlbWJsZXIgZGVjaWRlIHdoZXJlIHRvIHB1dCB0aGUgTFNEQS4g ICovDQorICAgICAgZXhjZXB0aW9uX3NlY3Rpb24gPSBnZXRfdW5uYW1lZF9z ZWN0aW9uICgwLCBvdXRwdXRfc2VjdGlvbl9hc21fb3AsDQorCQkJCQkgICAg ICAgIlx0LmNmaV9pbmxpbmVfbHNkYSAyIik7DQorICAgIH0NCit9DQorDQog LyogSW1wbGVtZW50IFRBUkdFVF9JTl9TTUFMTF9EQVRBX1AuICAqLw0KIA0K IHN0YXRpYyBib29sDQpAQCAtODczMyw2ICs4Nzg5LDEzIEBAIG1pcHNfaW5f c21hbGxfZGF0YV9wIChjb25zdF90cmVlIGRlY2wpDQogICBpZiAoVFJFRV9D T0RFIChkZWNsKSA9PSBTVFJJTkdfQ1NUIHx8IFRSRUVfQ09ERSAoZGVjbCkg PT0gRlVOQ1RJT05fREVDTCkNCiAgICAgcmV0dXJuIGZhbHNlOw0KIA0KKyAg LyogUGxhY2UgZWgtcmVsYXRlZCBkYXRhIGluIHNkYXRhIHNvIHRoYXQgd2Ug Y2FuIHVzZSBhIGdwcmVsMzIgcmVsb2MNCisgICAgIHRvIGFjY2VzcyBpdC4g ICovDQorICBpZiAoVEFSR0VUXzY0QklUDQorICAgICAgJiYgVFJFRV9DT0RF IChkZWNsKSA9PSBWQVJfREVDTCAmJiBERUNMX05BTUUgKGRlY2wpDQorICAg ICAgJiYgc3RybmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUg KGRlY2wpKSwgIkRXLnJlZi4iLCA3KSA9PSAwKQ0KKyAgICByZXR1cm4gdHJ1 ZTsNCisNCiAgIC8qIFdlIGRvbid0IHlldCBnZW5lcmF0ZSBzbWFsbC1kYXRh IHJlZmVyZW5jZXMgZm9yIC1tYWJpY2FsbHMNCiAgICAgIG9yIFZ4V29ya3Mg UlRQIGNvZGUuICBTZWUgdGhlIHJlbGF0ZWQgLUcgaGFuZGxpbmcgaW4NCiAg ICAgIG1pcHNfb3B0aW9uX292ZXJyaWRlLiAgKi8NCkBAIC05MjI3LDYgKzky OTAsOCBAQCBtaXBzX2ZpbGVfc3RhcnQgKHZvaWQpDQogew0KICAgZGVmYXVs dF9maWxlX3N0YXJ0ICgpOw0KIA0KKyAgZG9uZV9jZmlfc2VjdGlvbnMgPSBm YWxzZTsNCisNCiAgIC8qIEdlbmVyYXRlIGEgc3BlY2lhbCBzZWN0aW9uIHRv IGRlc2NyaWJlIHRoZSBBQkkgc3dpdGNoZXMgdXNlZCB0bw0KICAgICAgcHJv ZHVjZSB0aGUgcmVzdWx0YW50IGJpbmFyeS4gICovDQogDQpAQCAtMTIwODEs NiArMTIxNDYsMTc1IEBAIG1pcHNfZXhwYW5kX2VwaWxvZ3VlIChib29sIHNp YmNhbGxfcCkNCiAgICAgICBlbWl0X2luc25fYmVmb3JlIChnZW5fbWlwc19l aGIgKCksIGluc24pOw0KICAgICB9DQogfQ0KKw0KKy8qIEFkZCBhbiBvcGNv ZGUgdG8gKkZERSB0byBkZXNjcmliZSB0aGUgbmVjZXNzYXJ5IHB1c2hlcyBv ZiByMzAvcjMxLCBpZg0KKyAgIGFueS4gICovDQorc3RhdGljIHZvaWQNCith ZGRfZnBfcmFfcHVzaCAodmVjPHVjaGFyLCB2YV9nYz4gKipmZGUpDQorew0K KyAgYm9vbCBmcF9uZWVkZWQgPSBCSVRTRVRfUCAoY2Z1bi0+bWFjaGluZS0+ ZnJhbWUubWFzaywgMzApOw0KKyAgaWYgKCFCSVRTRVRfUCAoY2Z1bi0+bWFj aGluZS0+ZnJhbWUubWFzaywgUkVUVVJOX0FERFJfUkVHTlVNKQ0KKyAgICAg ICYmICFmcF9uZWVkZWQpDQorICAgIHJldHVybjsNCisNCisgIHZlY19zYWZl X3B1c2ggKCpmZGUsICh1Y2hhcikgMHg1OSk7DQorICBpZiAoZnBfbmVlZGVk KQ0KKyAgICB2ZWNfc2FmZV9wdXNoICgqZmRlLCAodWNoYXIpICgoMzAgPDwg MykgfCAxKSk7DQorICBlbHNlDQorICAgIHZlY19zYWZlX3B1c2ggKCpmZGUs IHVjaGFyICgzMSA8PCAzKSk7DQorfQ0KKw0KKy8qIEFkZCBhbiBvcGNvZGUg dG8gKkZERSB0byBkZXNjcmliZSBhbiBhZGp1c3RtZW50IG9mIHRoZSBDRkEg cmVnaXN0ZXIgYnkNCisgICBBTU9VTlQsIGdpdmVuIGFuIGFzc3VtZWQgYWxp Z25tZW50IEFMSUdOLiAgKi8NCitzdGF0aWMgdm9pZA0KK21pcHNfZmRlZGF0 YV9jZmFhZGp1c3QgKHZlYyA8dWNoYXIsIHZhX2djPiAqKmZkZSwNCisJCQlI T1NUX1dJREVfSU5UIGFtb3VudCwgaW50IGFsaWduKQ0KK3sNCisgIGlmIChh bW91bnQgPT0gMCkNCisgICAgcmV0dXJuOw0KKw0KKyAgZ2NjX2Fzc2VydCAo YW1vdW50ICUgYWxpZ24gPT0gMCk7DQorICBpZiAoYW1vdW50ID49IGFsaWdu ICogMTI5KQ0KKyAgICB7DQorICAgICAgdmVjX3NhZmVfcHVzaCAoKmZkZSwg KHVjaGFyKSAweDU4KTsNCisgICAgICBwdXNoX3VsZWIxMjggKGZkZSwgYW1v dW50IC8gYWxpZ24gLSAxMjkpOw0KKyAgICB9DQorICBlbHNlIGlmIChhbW91 bnQgPj0gYWxpZ24gKiA2NSkNCisgICAgew0KKyAgICAgIHZlY19zYWZlX3B1 c2ggKCpmZGUsICh1Y2hhcikgMHgzZik7DQorICAgICAgdmVjX3NhZmVfcHVz aCAoKmZkZSwgKHVjaGFyKSAoYW1vdW50IC8gYWxpZ24gLSA2NCkpOw0KKyAg ICB9DQorICBlbHNlDQorICAgIHZlY19zYWZlX3B1c2ggKCpmZGUsICh1Y2hh cikgKGFtb3VudCAvIGFsaWduIC0gMSkpOw0KK30NCisNCisvKiBJbXBsZW1l bnRzIFRBUkdFVF9BU01fT1VUUFVUX0NGSV9FTkRQUk9DLiAgRW1pdCB0aGUg LmNmaV9lbmRwcm9jDQorICAgZGlyZWN0aXZlLCBhbmQgd2hlbiBlbWl0dGlu ZyB1bndpbmQgaW5mb3JtYXRpb24sIGFsc28gZW1pdCB0aGUNCisgICAuY2Zp X2ZkZV9kYXRhIGRpcmVjdGl2ZS4gICovDQorc3RhdGljIHZvaWQNCittaXBz X2NmaV9lbmRwcm9jICh2b2lkKQ0KK3sNCisgIGludCBhbGlnbiA9IFRBUkdF VF9ORVdBQkkgPyAxNiA6IDg7DQorICB2ZWM8dWNoYXIsIHZhX2djPiAqZmRl ID0gTlVMTDsNCisgIGludCBpLCBsZW4sIG47DQorICBIT1NUX1dJREVfSU5U IHRvdGFsLCBwdXNoX2Jhc2U7DQorICBib29sIGFueV9zYXZlZCA9IGZhbHNl Ow0KKw0KKyAgaWYgKCFUQVJHRVRfQ09NUEFDVF9FSA0KKyAgICAgIHx8ICgh ZmxhZ191bndpbmRfdGFibGVzICYmICFmbGFnX2V4Y2VwdGlvbnMpDQorICAg ICAgfHwgZmxhZ19hc3luY2hyb25vdXNfdW53aW5kX3RhYmxlcykNCisgICAg ew0KKyAgICAgIGZwcmludGYgKGFzbV9vdXRfZmlsZSwgIi5jZmlfZW5kcHJv Y1xuIik7DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICBmcHJpbnRm IChhc21fb3V0X2ZpbGUsICJcdC5jZmlfZmRlX2RhdGEgIik7DQorDQorICB0 b3RhbCA9IGNmdW4tPm1hY2hpbmUtPmZyYW1lLnRvdGFsX3NpemU7DQorICBp ZiAoY2Z1bi0+bWFjaGluZS0+ZnJhbWUubnVtX2ZwID4gMCkNCisgICAgcHVz aF9iYXNlID0gY2Z1bi0+bWFjaGluZS0+ZnJhbWUuZnBfc3Bfb2Zmc2V0ICsg VU5JVFNfUEVSX0hXRlBWQUxVRTsNCisgIGVsc2UgaWYgKGNmdW4tPm1hY2hp bmUtPmZyYW1lLm51bV9ncCA+IDApDQorICAgIHB1c2hfYmFzZSA9IGNmdW4t Pm1hY2hpbmUtPmZyYW1lLmdwX3NwX29mZnNldCArIFVOSVRTX1BFUl9XT1JE Ow0KKyAgZWxzZQ0KKyAgICBwdXNoX2Jhc2UgPSB0b3RhbDsNCisNCisgIGlm IChmcmFtZV9wb2ludGVyX25lZWRlZCkNCisgICAgew0KKyAgICAgIGlmIChI QVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNID09IDMwKQ0KKwl2ZWNfc2FmZV9w dXNoIChmZGUsICh1Y2hhcikgMHg1RSk7DQorICAgICAgZWxzZQ0KKwl7DQor CSAgaW50IHQgPSBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIC0gMTY7DQor CSAgZ2NjX2Fzc2VydCAodCA8IDgpOw0KKwkgIHZlY19zYWZlX3B1c2ggKGZk ZSwgKHVjaGFyKSAoMHg1MCArIHQpKTsNCisJfQ0KKyAgICAgIHRvdGFsIC09 IGNmdW4tPm1hY2hpbmUtPmZyYW1lLmhhcmRfZnJhbWVfcG9pbnRlcl9vZmZz ZXQ7DQorICAgICAgcHVzaF9iYXNlIC09IGNmdW4tPm1hY2hpbmUtPmZyYW1l LmhhcmRfZnJhbWVfcG9pbnRlcl9vZmZzZXQ7DQorICAgIH0NCisNCisgIGlm IChIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNID09IDMwICYmIGZyYW1lX3Bv aW50ZXJfbmVlZGVkKQ0KKyAgICBnY2NfYXNzZXJ0IChCSVRTRVRfUCAoY2Z1 bi0+bWFjaGluZS0+ZnJhbWUubWFzaywgMzApKTsNCisNCisgIG1pcHNfZmRl ZGF0YV9jZmFhZGp1c3QgKCZmZGUsIHB1c2hfYmFzZSwgYWxpZ24pOw0KKyAg dG90YWwgLT0gcHVzaF9iYXNlOw0KKw0KKyAgbiA9IDA7DQorICBmb3IgKGkg PSAzMTsgaSA+IDE5OyBpLS0pDQorICAgIHsNCisgICAgICBib29sIGlzc2V0 ID0gQklUU0VUX1AgKGNmdW4tPm1hY2hpbmUtPmZyYW1lLmZtYXNrLCBpKTsN CisgICAgICBpZiAoaXNzZXQpDQorCW4rKzsNCisgICAgICBpZiAoKGkgPT0g MjAgfHwgIWlzc2V0KSAmJiBuID4gMCkNCisJew0KKwkgIGludCBmaXJzdCA9 IGkgKyAoaXNzZXQgPyAwIDogMSk7DQorCSAgaWYgKGZpcnN0ID09IDIwKQ0K KwkgICAgew0KKwkgICAgICBpZiAobiA+IDgpDQorCQl2ZWNfc2FmZV9wdXNo IChmZGUsICh1Y2hhcikgKDB4NjggKyBuIC0gOSkpOw0KKwkgICAgICBlbHNl DQorCQl2ZWNfc2FmZV9wdXNoIChmZGUsICh1Y2hhcikgKDB4NjAgKyBuIC0g MSkpOw0KKwkgICAgfQ0KKwkgIGVsc2UNCisJICAgIHsNCisJICAgICAgaWYg KG4gPiA4KQ0KKwkJew0KKwkJICB2ZWNfc2FmZV9wdXNoIChmZGUsICh1Y2hh cikgMHg1YSk7DQorCQkgIHZlY19zYWZlX3B1c2ggKGZkZSwgKHVjaGFyKSAo KChmaXJzdCArIDgpIDw8IDMpIHwgKG4gLSA5KSkpOw0KKwkJICBuID0gODsN CisJCX0NCisJICAgICAgdmVjX3NhZmVfcHVzaCAoZmRlLCAodWNoYXIpIDB4 NWEpOw0KKwkgICAgICB2ZWNfc2FmZV9wdXNoIChmZGUsICh1Y2hhcikgKChm aXJzdCA8PCAzKSB8IChuIC0gMSkpKTsNCisJICAgIH0NCisJICBuID0gMDsN CisJfQ0KKyAgICB9DQorICBnY2NfYXNzZXJ0IChuID09IDApOw0KKw0KKyAg Zm9yIChpID0gMjM7IGkgPiAwOyBpLS0pDQorICAgIHsNCisgICAgICBib29s IGlzc2V0ID0gQklUU0VUX1AgKGNmdW4tPm1hY2hpbmUtPmZyYW1lLm1hc2ss IGkpOw0KKyAgICAgIGlmIChpc3NldCkNCisJbisrOw0KKyAgICAgIGlmICgo aSA9PSAxNiB8fCBpID09IDEgfHwgIWlzc2V0KSAmJiBuID4gMCkNCisJew0K KwkgIGludCBmaXJzdCA9IGkgKyAoaXNzZXQgPyAwIDogMSk7DQorCSAgaWYg KGZpcnN0ID09IDE2ICYmICFhbnlfc2F2ZWQNCisJICAgICAgJiYgQklUU0VU X1AgKGNmdW4tPm1hY2hpbmUtPmZyYW1lLm1hc2ssIFJFVFVSTl9BRERSX1JF R05VTSkpDQorCSAgICB7DQorCSAgICAgIGlmIChCSVRTRVRfUCAoY2Z1bi0+ bWFjaGluZS0+ZnJhbWUubWFzaywgMzApKQ0KKwkJdmVjX3NhZmVfcHVzaCAo ZmRlLCAodWNoYXIpICgweDQ4ICsgbiAtIDEpKTsNCisJICAgICAgZWxzZQ0K KwkJdmVjX3NhZmVfcHVzaCAoZmRlLCAodWNoYXIpICgweDQwICsgbiAtIDEp KTsNCisJICAgIH0NCisJICBlbHNlDQorCSAgICB7DQorCSAgICAgIGlmICgh YW55X3NhdmVkKQ0KKwkJYWRkX2ZwX3JhX3B1c2ggKCZmZGUpOw0KKwkgICAg ICB2ZWNfc2FmZV9wdXNoIChmZGUsICh1Y2hhcikgMHg1OSk7DQorCSAgICAg IHZlY19zYWZlX3B1c2ggKGZkZSwgKHVjaGFyKSAoKGZpcnN0IDw8IDMpIHwg KG4gLSAxKSkpOw0KKwkgICAgfQ0KKwkgIGFueV9zYXZlZCA9IHRydWU7DQor CSAgbiA9IDA7DQorCX0NCisgICAgfQ0KKyAgZ2NjX2Fzc2VydCAobiA9PSAw KTsNCisNCisgIGlmICghYW55X3NhdmVkKQ0KKyAgICBhZGRfZnBfcmFfcHVz aCAoJmZkZSk7DQorDQorICAvKiBTa2lwIHZhcmFyZ3Mgc2F2ZSBhcmVhIGFu ZCBzdWNobGlrZS4gICovDQorICBtaXBzX2ZkZWRhdGFfY2ZhYWRqdXN0ICgm ZmRlLCB0b3RhbCwgYWxpZ24pOw0KKw0KKyAgLyogVGhlIGFzc2VtYmxlciBh cHBlbmRzIGEgIkZpbmlzaCIgb3Bjb2RlIGZvciBvdXQtb2YtbGluZSBlbnRy aWVzOw0KKyAgICAgdGhlIHVud2luZCBjb2RlICh1d19mcmFtZV9zdGF0ZV9j b21wYWN0KSBmb3IgaW5saW5lIGVudHJpZXMuICAqLw0KKw0KKyAgbGVuID0g dmVjX3NhZmVfbGVuZ3RoIChmZGUpOw0KKyAgZm9yIChpID0gMDsgaSA8IGxl bjsgaSsrKQ0KKyAgICBmcHJpbnRmIChhc21fb3V0X2ZpbGUsICIweCV4JXMi LCAoKmZkZSlbaV0sDQorCSAgICAgaSArIDEgPT0gbGVuID8gIiIgOiAiLCIp Ow0KKyAgZnB1dGMgKCdcbicsIGFzbV9vdXRfZmlsZSk7DQorICBmcHJpbnRm IChhc21fb3V0X2ZpbGUsICJcdC5jZmlfZW5kcHJvY1xuIik7DQorfQ0KIAwN CiAvKiBSZXR1cm4gbm9uemVybyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGtub3du IHRvIGhhdmUgYSBudWxsIGVwaWxvZ3VlLg0KICAgIFRoaXMgYWxsb3dzIHRo ZSBvcHRpbWl6ZXIgdG8gb21pdCBqdW1wcyB0byBqdW1wcyBpZiBubyBzdGFj aw0KQEAgLTE3NzMxLDYgKzE3OTY1LDEwIEBAIG1pcHNfb3B0aW9uX292ZXJy aWRlICh2b2lkKQ0KICAgU1VCVEFSR0VUX09WRVJSSURFX09QVElPTlM7DQog I2VuZGlmDQogDQorI2lmICEoZGVmaW5lZChNRF9IQVZFX0NPTVBBQ1RfRUgp ICYmIGRlZmluZWQoSEFWRV9HQVNfRUhfRlJBTUVfRU5UUlkpKQ0KKyAgVEFS R0VUX0NPTVBBQ1RfRUggPSAwOw0KKyNlbmRpZg0KKw0KICAgLyogTUlQUzE2 IGFuZCBtaWNyb01JUFMgY2Fubm90IGNvZXhpc3QuICAqLw0KICAgaWYgKFRB UkdFVF9NSUNST01JUFMgJiYgVEFSR0VUX01JUFMxNikNCiAgICAgZXJyb3Ig KCJ1bnN1cHBvcnRlZCBjb21iaW5hdGlvbjogJXMiLCAiLW1pcHMxNiAtbW1p Y3JvbWlwcyIpOw0KQEAgLTE3OTgxLDYgKzE4MjE5LDEwIEBAIG1pcHNfb3B0 aW9uX292ZXJyaWRlICh2b2lkKQ0KIAkgICAgIG1pcHNfYXJjaF9pbmZvLT5u YW1lLCAiLW1uby1leHBsaWNpdC1yZWxvY3MiKTsNCiAgICAgfQ0KIA0KKyAg LyogQ29tcGFjdCBFSCBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIG8zMi9u MzIvbjY0IEFCSXMuICAqLw0KKyAgaWYgKFRBUkdFVF9DT01QQUNUX0VIICYm ICFBQklfSEFTX0NPTVBBQ1RfRUhfU1VQUE9SVCkNCisgICAgVEFSR0VUX0NP TVBBQ1RfRUggPSAwOw0KKw0KICAgLyogVGhlIGVmZmVjdCBvZiAtbWFiaWNh bGxzIGlzbid0IGRlZmluZWQgZm9yIHRoZSBFQUJJLiAgKi8NCiAgIGlmICht aXBzX2FiaSA9PSBBQklfRUFCSSAmJiBUQVJHRVRfQUJJQ0FMTFMpDQogICAg IHsNCkBAIC0xOTkyOSw2ICsyMDE3MSw4IEBAIG1pcHNfaXJhX2NoYW5nZV9w c2V1ZG9fYWxsb2Nub19jbGFzcyAoaW50IHJlZ25vLCByDQogI2RlZmluZSBU QVJHRVRfQVNNX1NFTEVDVF9SVFhfU0VDVElPTiBtaXBzX3NlbGVjdF9ydHhf c2VjdGlvbg0KICN1bmRlZiBUQVJHRVRfQVNNX0ZVTkNUSU9OX1JPREFUQV9T RUNUSU9ODQogI2RlZmluZSBUQVJHRVRfQVNNX0ZVTkNUSU9OX1JPREFUQV9T RUNUSU9OIG1pcHNfZnVuY3Rpb25fcm9kYXRhX3NlY3Rpb24NCisjdW5kZWYg VEFSR0VUX0FTTV9JTklUX1NFQ1RJT05TDQorI2RlZmluZSBUQVJHRVRfQVNN X0lOSVRfU0VDVElPTlMgbWlwc19hc21faW5pdF9zZWN0aW9ucw0KIA0KICN1 bmRlZiBUQVJHRVRfU0NIRURfSU5JVA0KICNkZWZpbmUgVEFSR0VUX1NDSEVE X0lOSVQgbWlwc19zY2hlZF9pbml0DQpAQCAtMjAxMzksNiArMjAzODMsOSBA QCBtaXBzX2lyYV9jaGFuZ2VfcHNldWRvX2FsbG9jbm9fY2xhc3MgKGludCBy ZWdubywgcg0KICN1bmRlZiBUQVJHRVRfQVNNX09VVFBVVF9TT1VSQ0VfRklM RU5BTUUNCiAjZGVmaW5lIFRBUkdFVF9BU01fT1VUUFVUX1NPVVJDRV9GSUxF TkFNRSBtaXBzX291dHB1dF9maWxlbmFtZQ0KIA0KKyN1bmRlZiBUQVJHRVRf T1VUUFVUX0NGSV9FTkRQUk9DDQorI2RlZmluZSBUQVJHRVRfT1VUUFVUX0NG SV9FTkRQUk9DIG1pcHNfY2ZpX2VuZHByb2MNCisNCiAjdW5kZWYgVEFSR0VU X1NISUZUX1RSVU5DQVRJT05fTUFTSw0KICNkZWZpbmUgVEFSR0VUX1NISUZU X1RSVU5DQVRJT05fTUFTSyBtaXBzX3NoaWZ0X3RydW5jYXRpb25fbWFzaw0K IA0KSW5kZXg6IGdjYy9jb25maWcvbWlwcy9taXBzLmgNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBnY2MvY29uZmlnL21pcHMvbWlwcy5oCShyZXZp c2lvbiAyMzEyMzgpDQorKysgZ2NjL2NvbmZpZy9taXBzL21pcHMuaAkod29y a2luZyBjb3B5KQ0KQEAgLTYxOSw2ICs2MTksOSBAQCBzdHJ1Y3QgbWlwc19j cHVfaW5mbyB7DQogCQkJCQkJCQkJXA0KICAgICAgIGlmIChUQVJHRVRfQ0FD SEVfQlVJTFRJTikJCQkJCQlcDQogCWJ1aWx0aW5fZGVmaW5lICgiX19HQ0Nf SEFWRV9CVUlMVElOX01JUFNfQ0FDSEUiKTsJCVwNCisJCQkJCQkJCQlcDQor ICAgICAgaWYgKFRBUkdFVF9DT01QQUNUX0VIKQkJCQkJCVwNCisJYnVpbHRp bl9kZWZpbmUgKCJfX0dOVV9DT01QQUNUX0VIX18iKTsJCQkJXA0KICAgICB9 CQkJCQkJCQkJXA0KICAgd2hpbGUgKDApDQogDQpAQCAtODg4LDYgKzg5MSw5 IEBAIHN0cnVjdCBtaXBzX2NwdV9pbmZvIHsNCiAJCQkJICYmIFBtb2RlID09 IERJbW9kZQlcDQogCQkJCSAmJiAhVEFSR0VUX1NZTTMyKQ0KIA0KKy8qIFRy dWUgaWYgQ29tcGFjdCBFSCBzdXBwb3J0cyB0aGUgQUJJLiAgKi8NCisjZGVm aW5lIEFCSV9IQVNfQ09NUEFDVF9FSF9TVVBQT1JUIChtaXBzX2FiaSA9PSBB QklfMzIgfHwgVEFSR0VUX05FV0FCSSkNCisNCiAvKiBJU0EgaGFzIGluc3Ry dWN0aW9ucyBmb3IgbWFuYWdpbmcgNjQtYml0IGZwIGFuZCBncCByZWdzIChl LmcuIG1pcHMzKS4gICovDQogI2RlZmluZSBJU0FfSEFTXzY0QklUX1JFR1MJ KElTQV9NSVBTMwkJCQlcDQogCQkJCSB8fCBJU0FfTUlQUzQJCQkJXA0KQEAg LTI4MjEsMTEgKzI4MjcsMTIgQEAgd2hpbGUgKDApDQogLyogVGhpcyBpcyBo b3cgdG8gZGVjbGFyZSBhIGZ1bmN0aW9uIG5hbWUuICBUaGUgYWN0dWFsIHdv cmsgb2YNCiAgICBlbWl0dGluZyB0aGUgbGFiZWwgaXMgbW92ZWQgdG8gZnVu Y3Rpb25fcHJvbG9ndWUsIHNvIHRoYXQgd2UgY2FuDQogICAgZ2V0IHRoZSBs aW5lIG51bWJlciBjb3JyZWN0bHkgZW1pdHRlZCBiZWZvcmUgdGhlIC5lbnQg ZGlyZWN0aXZlLA0KLSAgIGFuZCBhZnRlciBhbnkgLmZpbGUgZGlyZWN0aXZl cy4gIERlZmluZSBhcyBlbXB0eSBzbyB0aGF0IHRoZSBmdW5jdGlvbg0KLSAg IGlzIG5vdCBkZWNsYXJlZCBiZWZvcmUgdGhlIC5lbnQgZGlyZWN0aXZlIGVs c2V3aGVyZS4gICovDQorICAgYW5kIGFmdGVyIGFueSAuZmlsZSBkaXJlY3Rp dmVzLiAgRGVmaW5lIGFzIG1vc3RseSBlbXB0eSBzbyB0aGF0IHRoZQ0KKyAg IGZ1bmN0aW9uIGlzIG5vdCBkZWNsYXJlZCBiZWZvcmUgdGhlIC5lbnQgZGly ZWN0aXZlIGVsc2V3aGVyZS4gICovDQogDQogI3VuZGVmIEFTTV9ERUNMQVJF X0ZVTkNUSU9OX05BTUUNCi0jZGVmaW5lIEFTTV9ERUNMQVJFX0ZVTkNUSU9O X05BTUUoU1RSRUFNLE5BTUUsREVDTCkNCisjZGVmaW5lIEFTTV9ERUNMQVJF X0ZVTkNUSU9OX05BTUUoU1RSRUFNLE5BTUUsREVDTCkgXA0KKyAgbWlwc19m aXh1cF9jZmlfc2VjdGlvbnMgKCk7DQogDQogLyogVGhpcyBpcyBob3cgdG8g c3RvcmUgaW50byB0aGUgc3RyaW5nIExBQkVMDQogICAgdGhlIHN5bWJvbF9y ZWYgbmFtZSBvZiBhbiBpbnRlcm5hbCBudW1iZXJlZCBsYWJlbCB3aGVyZQ0K QEAgLTMzMTIsMTAgKzMzMTksNDIgQEAgc3RydWN0IEdUWSgoKSkgIG1hY2hp bmVfZnVuY3Rpb24gew0KICAgIHZlcnNpb25zIG9mIHRoZSBsaW5rZXIga25v dyBob3cgdG8gZG8gdGhpcyBmb3IgaW5kaXJlY3QgcG9pbnRlcnMsDQogICAg YW5kIGZvciBwZXJzb25hbGl0eSBkYXRhLiAgV2UgbXVzdCBmYWxsIGJhY2sg b24gdXNpbmcgd3JpdGFibGUNCiAgICAuZWhfZnJhbWUgc2VjdGlvbnMgZm9y IHNoYXJlZCBsaWJyYXJpZXMgaWYgdGhlIGxpbmtlciBkb2VzIG5vdA0KLSAg IHN1cHBvcnQgdGhpcyBmZWF0dXJlLiAgKi8NCisgICBzdXBwb3J0IHRoaXMg ZmVhdHVyZS4NCisgICANCisgICBGb3IgY29tcGFjdCBFSCBmcmFtZXMgd2Ug aGF2ZSBhIHNwZWNpYWwgcmVsb2NhdGlvbiB3ZSBjYW4gdXNlLiAgKi8NCisN CisjZGVmaW5lIE1JUFNfQ09NUEFDVF9FSF9QQ1JFTCAxDQorDQorI2RlZmlu ZSBNSVBTX0NPTVBBQ1RfRUhfRU5DT0RJTkcgKERXX0VIX1BFX3BjcmVsIHwg RFdfRUhfUEVfc2RhdGE0KQ0KKw0KICNkZWZpbmUgQVNNX1BSRUZFUlJFRF9F SF9EQVRBX0ZPUk1BVChDT0RFLEdMT0JBTCkgXA0KLSAgKCgoR0xPQkFMKSA/ IERXX0VIX1BFX2luZGlyZWN0IDogMCkgfCBEV19FSF9QRV9hYnNwdHIpDQor ICAoVEFSR0VUX0NPTVBBQ1RfRUggXA0KKyAgID8gTUlQU19DT01QQUNUX0VI X0VOQ09ESU5HIFwNCisgICA6ICgoKEdMT0JBTCkgPyBEV19FSF9QRV9pbmRp cmVjdCA6IDApIHwgRFdfRUhfUEVfYWJzcHRyKSkNCiANCisvKiBIYW5kbGUg c3BlY2lhbCBFSCBwb2ludGVyIGVuY29kaW5ncy4gICovDQorDQorI2RlZmlu ZSBBU01fTUFZQkVfT1VUUFVUX0VOQ09ERURfQUREUl9SVFgoRklMRSwgRU5D T0RJTkcsIFNJWkUsIEFERFIsIERPTkUpIFwNCisgIGRvIHsJCQkJCQkJCQlc DQorICAgIGlmICgoU0laRSkgPT0gNCAmJiAoRU5DT0RJTkcpID09IE1JUFNf RUhfRU5DT0RJTkcpCQkJXA0KKyAgICAgIHsJCQkJCQkJCQlcDQorICAgICAg ICBmcHV0cyAoIlx0LmVod29yZFx0IiwgRklMRSk7CQkJCQlcDQorICAgICAg ICBhc3NlbWJsZV9uYW1lIChGSUxFLCBYU1RSIChBRERSLCAwKSk7CQkJCVwN CisgICAgICAgIGdvdG8gRE9ORTsJCQkJCQkJXA0KKyAgICAgIH0JCQkJCQkJ CQlcDQorICB9IHdoaWxlICgwKQ0KKw0KKyNkZWZpbmUgTUlQU19FSF9FTkNP RElORyBcDQorICAoRFdfRUhfUEVfZGF0YXJlbCB8IERXX0VIX1BFX3NkYXRh NCB8IERXX0VIX1BFX2luZGlyZWN0KQ0KKw0KKyNkZWZpbmUgbWRfdW53aW5k X2NvbXBhY3Rfb3Bjb2RlX2ZpbmlzaCAweDVjDQorDQorI2RlZmluZSBDUlRf R0VUX1JGSUJfREFUQShCQVNFKQkJCVwNCisgIHsJCQkJCQlcDQorICAgIGV4 dGVybiBjaGFyIF9ncFtdOwkJCQlcDQorICAgIEJBU0UgPSAmX2dwWzBdOwkJ CQlcDQorICB9DQorDQogLyogRm9yIHN3aXRjaGluZyBiZXR3ZWVuIE1JUFMx NiBhbmQgbm9uLU1JUFMxNiBtb2Rlcy4gICovDQogI2RlZmluZSBTV0lUQ0hB QkxFX1RBUkdFVCAxDQogDQpJbmRleDogZ2NjL2NvbmZpZy9taXBzL2xpbnV4 LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvY29uZmlnL21p cHMvbGludXguaAkocmV2aXNpb24gMjMxMjM4KQ0KKysrIGdjYy9jb25maWcv bWlwcy9saW51eC5oCSh3b3JraW5nIGNvcHkpDQpAQCAtNDcsMyArNDcsOCBA QCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYg bm90IHNlZQ0KICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJOMzIg XA0KICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJ TktFUk4zMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyLCBcDQogICAgICAg ICAgICAgICAgICAgICAgICAgIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiwg TVVTTF9EWU5BTUlDX0xJTktFUk4zMikNCisNCisjZGVmaW5lIE1EX0hBVkVf Q09NUEFDVF9FSCAxDQorDQorI3VuZGVmIEFCSV9IQVNfQ09NUEFDVF9FSF9T VVBQT1JUDQorI2RlZmluZSBBQklfSEFTX0NPTVBBQ1RfRUhfU1VQUE9SVCAo bWlwc19hYmkgPT0gQUJJXzMyKQ0KSW5kZXg6IGdjYy90YXJnZXQuZGVmDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3RhcmdldC5kZWYJKHJl dmlzaW9uIDIzMTIzOCkNCisrKyBnY2MvdGFyZ2V0LmRlZgkod29ya2luZyBj b3B5KQ0KQEAgLTkxOCw2ICs5MTgsMTIgQEAgREVGSE9PSw0KICB0cmVlLCAo Y29uc3QgY2hhciAqbmFtZSksDQogIGRlZmF1bHRfbWFuZ2xlX2Fzc2VtYmxl cl9uYW1lKQ0KIA0KK0RFRkhPT0sNCisob3V0cHV0X2NmaV9lbmRwcm9jLA0K KyAiRW1pdCB0aGUgQGNvZGV7LmNmaV9lbmRwcm9jfSBkaXJlY3RpdmUgYXQg dGhlIGVuZCBvZiBhIGZ1bmN0aW9uLCBhbmRcDQorIG9wdGlvbmFsbHkgYWRk aXRpb25hbCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gZm9yIGl0 LiIsDQorIHZvaWQsICh2b2lkKSwgZGVmYXVsdF9hc21fb3V0cHV0X2NmaV9l bmRwcm9jKQ0KKw0KIEhPT0tfVkVDVE9SX0VORCAoYXNtX291dCkNCiANCiAv KiBGdW5jdGlvbnMgcmVsYXRpbmcgdG8gaW5zdHJ1Y3Rpb24gc2NoZWR1bGlu Zy4gIEFsbCBvZiB0aGVzZQ0KSW5kZXg6IGdjYy9kZWZhdWx0cy5oDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL2RlZmF1bHRzLmgJKHJldmlz aW9uIDIzMTIzOCkNCisrKyBnY2MvZGVmYXVsdHMuaAkod29ya2luZyBjb3B5 KQ0KQEAgLTM5Miw2ICszOTIsMTAgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5H MyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3QNCiAjZGVmaW5lIE1BU0tf UkVUVVJOX0FERFIgTlVMTF9SVFgNCiAjZW5kaWYNCiANCisjaWZuZGVmIFRB UkdFVF9DT01QQUNUX0VIDQorI2RlZmluZSBUQVJHRVRfQ09NUEFDVF9FSCAw DQorI2VuZGlmDQorDQogLyogSWYgd2UgaGF2ZSBuYW1lZCBzZWN0aW9uIGFu ZCB3ZSBzdXBwb3J0IHdlYWsgc3ltYm9scywgdGhlbiB1c2UgdGhlDQogICAg LmpjciBzZWN0aW9uIGZvciByZWNvcmRpbmcgamF2YSBjbGFzc2VzIHdoaWNo IG5lZWQgdG8gYmUgcmVnaXN0ZXJlZA0KICAgIGF0IHByb2dyYW0gc3RhcnQt dXAgdGltZS4gICovDQpJbmRleDogZ2NjL2NvbmZpZ3VyZQ0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIGdjYy9jb25maWd1cmUJKHJldmlzaW9uIDIz MTIzOCkNCisrKyBnY2MvY29uZmlndXJlCSh3b3JraW5nIGNvcHkpDQpAQCAt Mjc4ODEsNiArMjc4ODEsMzcgQEAgX0FDRU9GDQogeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnY2NfY3ZfbGRf Y29tcHJlc3NfZGVidWciID4mNQ0KICRhc19lY2hvICIkZ2NjX2N2X2xkX2Nv bXByZXNzX2RlYnVnIiA+JjY7IH0NCiANCit7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFzc2VtYmxlciBmb3Ig Q0ZJIC5laF9mcmFtZV9lbnRyeSIgPiY1DQorJGFzX2VjaG9fbiAiY2hlY2tp bmcgYXNzZW1ibGVyIGZvciBDRkkgLmVoX2ZyYW1lX2VudHJ5Li4uICIgPiY2 OyB9DQoraWYgdGVzdCAiJHtnY2NfY3ZfYXNfZWhfZnJhbWVfZW50cnkrc2V0 fSIgPSBzZXQ7IHRoZW4gOg0KKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYNCitlbHNlDQorICBnY2NfY3ZfYXNfZWhfZnJhbWVfZW50cnk9bm8NCisg IGlmIHRlc3QgeCRnY2NfY3ZfYXMgIT0geDsgdGhlbg0KKyAgICAkYXNfZWNo byAnCS5jZmlfc2VjdGlvbnMgLmVoX2ZyYW1lX2VudHJ5ICcgPiBjb25mdGVz dC5zDQorICAgIGlmIHsgYWNfdHJ5PSckZ2NjX2N2X2FzICRnY2NfY3ZfYXNf ZmxhZ3MgIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QucyA+JjUnDQorICB7IHsg ZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTog XCIkYWNfdHJ5XCIiOyB9ID4mNQ0KKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQ0K KyAgYWNfc3RhdHVzPSQ/DQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCisgIHRlc3Qg JGFjX3N0YXR1cyA9IDA7IH07IH0NCisgICAgdGhlbg0KKwlnY2NfY3ZfYXNf ZWhfZnJhbWVfZW50cnk9eWVzDQorICAgIGVsc2UNCisgICAgICBlY2hvICJj b25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhcyIgPiY1DQorICAgICAgY2F0 IGNvbmZ0ZXN0LnMgPiY1DQorICAgIGZpDQorICAgIHJtIC1mIGNvbmZ0ZXN0 Lm8gY29uZnRlc3Qucw0KKyAgZmkNCitmaQ0KK3sgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2Vo X2ZyYW1lX2VudHJ5IiA+JjUNCiskYXNfZWNobyAiJGdjY19jdl9hc19laF9m cmFtZV9lbnRyeSIgPiY2OyB9DQoraWYgdGVzdCAkZ2NjX2N2X2FzX2VoX2Zy YW1lX2VudHJ5ID0geWVzOyB0aGVuDQorDQorJGFzX2VjaG8gIiNkZWZpbmUg SEFWRV9HQVNfRUhfRlJBTUVfRU5UUlkgMSIgPj5jb25mZGVmcy5oDQorDQor ZmkNCisNCiAjIC0tLS0tLS0tDQogIyBVTlNPUlRFRA0KICMgLS0tLS0tLS0N CkluZGV4OiBnY2MvZG9jL3RtLnRleGkNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCi0tLSBnY2MvZG9jL3RtLnRleGkJKHJldmlzaW9uIDIzMTIzOCkNCisr KyBnY2MvZG9jL3RtLnRleGkJKHdvcmtpbmcgY29weSkNCkBAIC04MjYxLDYg KzgyNjEsMTAgQEAgc3lzdGVtcy4gIFRoaXMgbWFjcm8gaXMgdXNlZCBpbiBA Y29kZXthc3NlbWJsZV9uYW0NCiBHaXZlbiBhIHN5bWJvbCBAdmFye25hbWV9 LCBwZXJmb3JtIHNhbWUgbWFuZ2xpbmcgYXMgQGNvZGV7dmFyYXNtLmN9J3Mg QGNvZGV7YXNzZW1ibGVfbmFtZX0sIGJ1dCBpbiBtZW1vcnkgcmF0aGVyIHRo YW4gdG8gYSBmaWxlIHN0cmVhbSwgcmV0dXJuaW5nIHJlc3VsdCBhcyBhbiBA Y29kZXtJREVOVElGSUVSX05PREV9LiAgUmVxdWlyZWQgZm9yIGNvcnJlY3Qg TFRPIHN5bXRhYnMuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjYWxs cyB0aGUgQGNvZGV7VEFSR0VUX1NUUklQX05BTUVfRU5DT0RJTkd9IGhvb2sg YW5kIHRoZW4gcHJlcGVuZHMgdGhlIEBjb2Rle1VTRVJfTEFCRUxfUFJFRklY fSwgaWYgYW55Lg0KIEBlbmQgZGVmdHlwZWZuDQogDQorQGRlZnR5cGVmbiB7 VGFyZ2V0IEhvb2t9IHZvaWQgVEFSR0VUX09VVFBVVF9DRklfRU5EUFJPQyAo dm9pZCkNCitFbWl0IHRoZSBAY29kZXsuY2ZpX2VuZHByb2N9IGRpcmVjdGl2 ZSBhdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24sIGFuZCBvcHRpb25hbGx5IGFk ZGl0aW9uYWwgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIGZvciBp dC4NCitAZW5kIGRlZnR5cGVmbg0KKw0KIEBkZWZtYWMgQVNNX09VVFBVVF9T WU1CT0xfUkVGIChAdmFye3N0cmVhbX0sIEB2YXJ7c3ltfSkNCiBBIEMgc3Rh dGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gb3V0cHV0IGEgcmVmZXJlbmNl IHRvDQogQGNvZGV7U1lNQk9MX1JFRn0gQHZhcntzeW19LiAgSWYgbm90IGRl ZmluZWQsIEBjb2Rle2Fzc2VtYmxlX25hbWV9DQpJbmRleDogZ2NjL2RvYy9p bnZva2UudGV4aQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9k b2MvaW52b2tlLnRleGkJKHJldmlzaW9uIDIzMTIzOCkNCisrKyBnY2MvZG9j L2ludm9rZS50ZXhpCSh3b3JraW5nIGNvcHkpDQpAQCAtODI1LDcgKzgyNSw3 IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4N CiAtbWZwLWV4Y2VwdGlvbnMgLW1uby1mcC1leGNlcHRpb25zIEBnb2wNCiAt bXZyNDEzMC1hbGlnbiAtbW5vLXZyNDEzMC1hbGlnbiAtbXN5bmNpIC1tbm8t c3luY2kgQGdvbA0KIC1tcmVsYXgtcGljLWNhbGxzIC1tbm8tcmVsYXgtcGlj LWNhbGxzIC1tbWNvdW50LXJhLWFkZHJlc3MgQGdvbA0KLS1tZnJhbWUtaGVh ZGVyLW9wdCAtbW5vLWZyYW1lLWhlYWRlci1vcHR9DQorLW1mcmFtZS1oZWFk ZXItb3B0IC1tbm8tZnJhbWUtaGVhZGVyLW9wdCAtbWNvbXBhY3QtZWggLW1u by1jb21wYWN0LWVofQ0KIA0KIEBlbXBoe01NSVggT3B0aW9uc30NCiBAZ2Nj b3B0bGlzdHstbWxpYmZ1bmNzICAtbW5vLWxpYmZ1bmNzICAtbWVwc2lsb24g IC1tbm8tZXBzaWxvbiAgLW1hYmk9Z251IEBnb2wNCkBAIC0xODI3NCw2ICsx ODI3NCwxMyBAQCBpdCBpcyB1bnVzZWQuDQogDQogVGhpcyBvcHRpbWl6YXRp b24gaXMgb2ZmIGJ5IGRlZmF1bHQgYXQgYWxsIG9wdGltaXphdGlvbiBsZXZl bHMuDQogDQorQGl0ZW0gLW1uby1jb21wYWN0LWVoDQorQGl0ZW14IC1tY29t cGFjdC1laA0KK0BvcGluZGV4IG1uby1jb21wYWN0LWVoDQorQG9waW5kZXgg bWNvbXBhY3QtZWgNCitEaXNhYmxlIGdlbmVyYXRpb24gb2YgY29tcGFjdCBF SCBmcmFtZSB0YWJsZXMuDQorQG9wdGlvbnstbWNvbXBhY3QtZWh9IGlzIHRo ZSBkZWZhdWx0IHdoZXJlIHN1cHBvcnRlZC4NCisNCiBAZW5kIHRhYmxlDQog DQogQG5vZGUgTU1JWCBPcHRpb25zDQpJbmRleDogZ2NjL2RvYy90bS50ZXhp LmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL2RvYy90bS50 ZXhpLmluCShyZXZpc2lvbiAyMzEyMzgpDQorKysgZ2NjL2RvYy90bS50ZXhp LmluCSh3b3JraW5nIGNvcHkpDQpAQCAtNTc5NCw2ICs1Nzk0LDggQEAgc3lz dGVtcy4gIFRoaXMgbWFjcm8gaXMgdXNlZCBpbiBAY29kZXthc3NlbWJsZV9u YW0NCiANCiBAaG9vayBUQVJHRVRfTUFOR0xFX0FTU0VNQkxFUl9OQU1FDQog DQorQGhvb2sgVEFSR0VUX09VVFBVVF9DRklfRU5EUFJPQw0KKw0KIEBkZWZt YWMgQVNNX09VVFBVVF9TWU1CT0xfUkVGIChAdmFye3N0cmVhbX0sIEB2YXJ7 c3ltfSkNCiBBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gb3V0 cHV0IGEgcmVmZXJlbmNlIHRvDQogQGNvZGV7U1lNQk9MX1JFRn0gQHZhcntz eW19LiAgSWYgbm90IGRlZmluZWQsIEBjb2Rle2Fzc2VtYmxlX25hbWV9DQpJ bmRleDogbGliZ2NjL3Vud2luZC1kdzIuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGxpYmdjYy91bndpbmQtZHcyLmMJKHJldmlzaW9uIDIzMTIz OCkNCisrKyBsaWJnY2MvdW53aW5kLWR3Mi5jCSh3b3JraW5nIGNvcHkpDQpA QCAtMzk2LDYgKzM5NiwxMiBAQCBfVW53aW5kX0dldFRleHRSZWxCYXNlIChz dHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjbw0KIHsNCiAgIHJldHVybiAoX1Vu d2luZF9QdHIpIGNvbnRleHQtPmJhc2VzLnRiYXNlOw0KIH0NCisNCit1bnNp Z25lZCBjaGFyDQorX1Vud2luZF9HZXRFaEVuY29kaW5nIChzdHJ1Y3QgX1Vu d2luZF9Db250ZXh0ICpjb250ZXh0KQ0KK3sNCisgIHJldHVybiBjb250ZXh0 LT5iYXNlcy5laF9lbmNvZGluZzsNCit9DQogI2VuZGlmDQogDQogI2luY2x1 ZGUgIm1kLXVud2luZC1zdXBwb3J0LmgiDQpAQCAtMTIxOSw2ICsxMjI1LDc1 IEBAIGV4ZWN1dGVfY2ZhX3Byb2dyYW0gKGNvbnN0IHVuc2lnbmVkIGNoYXIg Kmluc25fcHRyDQogICAgIH0NCiB9DQogDA0KKyNpZmRlZiBNRF9IQVZFX0NP TVBBQ1RfRUgNCitzdGF0aWMgX1Vud2luZF9SZWFzb25fQ29kZQ0KK19fZ251 X2NvbXBhY3RfcHIxIChpbnQgdmVyc2lvbiBBVFRSSUJVVEVfVU5VU0VELA0K KwkJICBfVW53aW5kX0FjdGlvbiBhY3Rpb25zIEFUVFJJQlVURV9VTlVTRUQs DQorCQkgIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzIGV4Y2VwdGlvbl9jbGFz cyBBVFRSSUJVVEVfVU5VU0VELA0KKwkJICBzdHJ1Y3QgX1Vud2luZF9FeGNl cHRpb24gKnVlX2hlYWRlciBBVFRSSUJVVEVfVU5VU0VELA0KKwkJICBzdHJ1 Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0IEFUVFJJQlVURV9VTlVTRUQp DQorew0KKyAgcmV0dXJuIF9VUkNfQ09OVElOVUVfVU5XSU5EOw0KK30NCisN CisvKiBUaGUgQysrIEVIIHJvdXRpbmVzIG5lZWQgdG8gbGl2ZSBpbiB0aGUg QysrIHJ1bnRpbWUuICBUaGVzZSBzaG91bGQNCisgICBiZSBwdWxsZWQgaW4g dmlhIHRoZSB1bndpbmRpbmcgdGFibGVzIHdoZW4gbmVlZGVkLiAgKi8NCitl eHRlcm4gX1Vud2luZF9SZWFzb25fQ29kZSBfX2dudV9jb21wYWN0X3ByMiAo aW50LCBfVW53aW5kX0FjdGlvbiwNCisgIF9VbndpbmRfRXhjZXB0aW9uX0Ns YXNzLCBzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwNCisgIHN0cnVjdCBf VW53aW5kX0NvbnRleHQgKikgVEFSR0VUX0FUVFJJQlVURV9XRUFLOw0KKw0K Ky8qIEludm9rZSB0aGUgQ29tcGFjdCBFSCB1bndpbmRlci4gICovDQorDQor c3RhdGljIF9VbndpbmRfUmVhc29uX0NvZGUNCit1d19mcmFtZV9zdGF0ZV9j b21wYWN0IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LA0KKwkJ CV9VbndpbmRfRnJhbWVTdGF0ZSAqZnMsDQorCQkJZW51bSBjb21wYWN0X2Vu dHJ5X3R5cGUgZW50cnlfdHlwZSwNCisJCSAgICAgICAJc3RydWN0IGNvbXBh Y3RfZWhfYmFzZXMgKmJhc2VzKQ0KK3sNCisgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKnA7DQorICB1bnNpZ25lZCBpbnQgcHJfaW5kZXg7DQorICBfVW53aW5k X1B0ciBwZXJzb25hbGl0eTsNCisgIHVuc2lnbmVkIGNoYXIgYnVmWzRdOw0K KyAgX1Vud2luZF9SZWFzb25fQ29kZSByYzsNCisNCisgIHAgPSBiYXNlcy0+ ZW50cnk7DQorICBwcl9pbmRleCA9ICoocCsrKTsNCisgIHN3aXRjaCAocHJf aW5kZXgpIHsNCisgIGNhc2UgMDoNCisgICAgICBwID0gcmVhZF9lbmNvZGVk X3ZhbHVlIChjb250ZXh0LCBiYXNlcy0+ZWhfZW5jb2RpbmcsIHAsICZwZXJz b25hbGl0eSk7DQorICAgICAgZnMtPnBlcnNvbmFsaXR5ID0gKF9VbndpbmRf UGVyc29uYWxpdHlfRm4pIHBlcnNvbmFsaXR5Ow0KKyAgICAgIGJyZWFrOw0K KyAgY2FzZSAxOg0KKyAgICAgIGZzLT5wZXJzb25hbGl0eSA9IF9fZ251X2Nv bXBhY3RfcHIxOw0KKyAgICAgIGJyZWFrOw0KKyAgY2FzZSAyOg0KKyAgICAg IGZzLT5wZXJzb25hbGl0eSA9IF9fZ251X2NvbXBhY3RfcHIyOw0KKyAgICAg IGJyZWFrOw0KKyAgZGVmYXVsdDoNCisgICAgICBmcy0+cGVyc29uYWxpdHkg PSBOVUxMOw0KKyAgfQ0KKw0KKyAgaWYgKCFmcy0+cGVyc29uYWxpdHkpDQor ICAgIHJldHVybiBfVVJDX0ZBVEFMX1BIQVNFMV9FUlJPUjsNCisNCisgIGlm IChlbnRyeV90eXBlID09IENFVF9pbmxpbmUpDQorICAgIHsNCisgICAgICBt ZW1jcHkoYnVmLCBwLCAzKTsNCisgICAgICBidWZbM10gPSBtZF91bndpbmRf Y29tcGFjdF9vcGNvZGVfZmluaXNoOw0KKyAgICAgIHAgPSBidWY7DQorICAg IH0NCisNCisgIHJjID0gbWRfdW53aW5kX2NvbXBhY3QgKGNvbnRleHQsIGZz LCAmcCk7DQorICBpZiAocmMgIT0gX1VSQ19OT19SRUFTT04pDQorICAgICAg cmV0dXJuIHJjOw0KKw0KKyAgaWYgKGVudHJ5X3R5cGUgPT0gQ0VUX291dGxp bmUpDQorICAgIGNvbnRleHQtPmxzZGEgPSAodm9pZCAqKShfVW53aW5kX0lu dGVybmFsX1B0cikgcDsNCisNCisgIHJldHVybiBfVVJDX05PX1JFQVNPTjsN Cit9DQorI2VuZGlmDQorDQogLyogR2l2ZW4gdGhlIF9VbndpbmRfQ29udGV4 dCBDT05URVhUIGZvciBhIHN0YWNrIGZyYW1lLCBsb29rIHVwIHRoZSBGREUg Zm9yDQogICAgaXRzIGNhbGxlciBhbmQgZGVjb2RlIGl0IGludG8gRlMuICBU aGlzIGZ1bmN0aW9uIGFsc28gc2V0cyB0aGUNCiAgICBhcmdzX3NpemUgYW5k IGxzZGEgbWVtYmVycyBvZiBDT05URVhULCBhcyB0aGV5IGFyZSByZWFsbHkg aW5mb3JtYXRpb24NCkBAIC0xMjM4LDggKzEzMTMsMjcgQEAgdXdfZnJhbWVf c3RhdGVfZm9yIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXgNCiAg IGlmIChjb250ZXh0LT5yYSA9PSAwKQ0KICAgICByZXR1cm4gX1VSQ19FTkRf T0ZfU1RBQ0s7DQogDQorI2lmZGVmIE1EX0hBVkVfQ09NUEFDVF9FSA0KKyAg ICB7DQorICAgICAgc3RydWN0IGNvbXBhY3RfZWhfYmFzZXMgYmFzZXM7DQor ICAgICAgZW51bSBjb21wYWN0X2VudHJ5X3R5cGUgdHlwZTsNCisgICAgICB0 eXBlID0gX1Vud2luZF9GaW5kX0luZGV4IChjb250ZXh0LT5yYSArIF9Vbndp bmRfSXNTaWduYWxGcmFtZSAoY29udGV4dCkNCisJCQkJIC0gMSwgJmJhc2Vz KTsNCisgICAgICBjb250ZXh0LT5iYXNlcy50YmFzZSA9IGJhc2VzLnRiYXNl Ow0KKyAgICAgIGNvbnRleHQtPmJhc2VzLmRiYXNlID0gYmFzZXMuZGJhc2U7 DQorICAgICAgY29udGV4dC0+YmFzZXMuZnVuYyA9IGJhc2VzLmZ1bmM7DQor ICAgICAgY29udGV4dC0+YmFzZXMuZWhfZW5jb2RpbmcgPSBiYXNlcy5laF9l bmNvZGluZzsNCisgICAgICBpZiAodHlwZSA9PSBDRVRfaW5saW5lIHx8IHR5 cGUgPT0gQ0VUX291dGxpbmUpDQorCXJldHVybiB1d19mcmFtZV9zdGF0ZV9j b21wYWN0IChjb250ZXh0LCBmcywgdHlwZSwgJmJhc2VzKTsNCisgICAgICBp ZiAodHlwZSA9PSBDRVRfRkRFKQ0KKwlmZGUgPSBiYXNlcy5lbnRyeTsNCisg ICAgICBlbHNlDQorCWZkZSA9IE5VTEw7DQorICAgIH0NCisjZWxzZQ0KICAg ZmRlID0gX1Vud2luZF9GaW5kX0ZERSAoY29udGV4dC0+cmEgKyBfVW53aW5k X0lzU2lnbmFsRnJhbWUgKGNvbnRleHQpIC0gMSwNCiAJCQkgICZjb250ZXh0 LT5iYXNlcyk7DQorI2VuZGlmDQogICBpZiAoZmRlID09IE5VTEwpDQogICAg IHsNCiAjaWZkZWYgTURfRkFMTEJBQ0tfRlJBTUVfU1RBVEVfRk9SDQpAQCAt MTU1OSw5ICsxNjUzLDYgQEAgdXdfaW5pdF9jb250ZXh0XzEgKHN0cnVjdCBf VW53aW5kX0NvbnRleHQgKmNvbnRleHQNCiAgIGlmICghQVNTVU1FX0VYVEVO REVEX1VOV0lORF9DT05URVhUKQ0KICAgICBjb250ZXh0LT5mbGFncyA9IEVY VEVOREVEX0NPTlRFWFRfQklUOw0KIA0KLSAgY29kZSA9IHV3X2ZyYW1lX3N0 YXRlX2ZvciAoY29udGV4dCwgJmZzKTsNCi0gIGdjY19hc3NlcnQgKGNvZGUg PT0gX1VSQ19OT19SRUFTT04pOw0KLQ0KICNpZiBfX0dUSFJFQURTDQogICB7 DQogICAgIHN0YXRpYyBfX2d0aHJlYWRfb25jZV90IG9uY2VfcmVnc2l6ZXMg PSBfX0dUSFJFQURfT05DRV9JTklUOw0KQEAgLTE1NzQsNiArMTY2NSw5IEBA IHV3X2luaXRfY29udGV4dF8xIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpj b250ZXh0DQogICAgIGluaXRfZHdhcmZfcmVnX3NpemVfdGFibGUgKCk7DQog I2VuZGlmDQogDQorICBjb2RlID0gdXdfZnJhbWVfc3RhdGVfZm9yIChjb250 ZXh0LCAmZnMpOw0KKyAgZ2NjX2Fzc2VydCAoY29kZSA9PSBfVVJDX05PX1JF QVNPTik7DQorDQogICAvKiBGb3JjZSB0aGUgZnJhbWUgc3RhdGUgdG8gdXNl IHRoZSBrbm93biBjZmEgdmFsdWUuICAqLw0KICAgX1Vud2luZF9TZXRTcENv bHVtbiAoY29udGV4dCwgb3V0ZXJfY2ZhLCAmc3Bfc2xvdCk7DQogICBmcy5y ZWdzLmNmYV9ob3cgPSBDRkFfUkVHX09GRlNFVDsNCkBAIC0xNzEwLDYgKzE4 MDQsNyBAQCBhbGlhcyAoX1Vud2luZF9SZXN1bWUpOw0KIGFsaWFzIChfVW53 aW5kX1Jlc3VtZV9vcl9SZXRocm93KTsNCiBhbGlhcyAoX1Vud2luZF9TZXRH Uik7DQogYWxpYXMgKF9VbndpbmRfU2V0SVApOw0KK2FsaWFzIChfVW53aW5k X0dldEVoRW5jb2RpbmcpOw0KICNlbmRpZg0KIA0KICNlbmRpZiAvKiAhVVNJ TkdfU0pMSl9FWENFUFRJT05TICovDQpJbmRleDogbGliZ2NjL2xpYmdjYy1z dGQudmVyLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGliZ2Nj L2xpYmdjYy1zdGQudmVyLmluCShyZXZpc2lvbiAyMzEyMzgpDQorKysgbGli Z2NjL2xpYmdjYy1zdGQudmVyLmluCSh3b3JraW5nIGNvcHkpDQpAQCAtMTkz OCwzICsxOTM4LDkgQEAgR0NDXzQuNy4wIHsNCiAlaW5oZXJpdCBHQ0NfNC44 LjAgR0NDXzQuNy4wDQogR0NDXzQuOC4wIHsNCiB9DQorDQorJWluaGVyaXQg R0NDXzYuMCBHQ0NfNC43LjANCitHQ0NfNi4wIHsNCisgIF9VbndpbmRfR2V0 RWhFbmNvZGluZw0KKyAgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX2hlYWRlcl9i YXNlcw0KK30NCkluZGV4OiBsaWJnY2MvY29uZmlnLmhvc3QNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSBsaWJnY2MvY29uZmlnLmhvc3QJKHJldmlz aW9uIDIzMTIzOCkNCisrKyBsaWJnY2MvY29uZmlnLmhvc3QJKHdvcmtpbmcg Y29weSkNCkBAIC04NjMsNiArODYzLDcgQEAgbWlwcyotKi1saW51eCopCQkJ CSMgTGludXggTUlQUywgZWl0aGVyIGVuZGlhbi4NCiAJOzsNCiBtaXBzKi1z ZGUtZWxmKikNCiAJdG1ha2VfZmlsZT0iJHRtYWtlX2ZpbGUgbWlwcy90LWNy dHN0dWZmIG1pcHMvdC1taXBzMTYiDQorCW1kX3Vud2luZF9oZWFkZXI9bWlw cy9taXBzLXVud2luZC5oDQogCWNhc2UgIiR7d2l0aF9uZXdsaWJ9IiBpbg0K IAkgIHllcykNCiAJICAgICMgbmV3bGliIC8gbGliZ2xvc3MuDQpJbmRleDog bGliZ2NjL01ha2VmaWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gbGliZ2NjL01ha2VmaWxlLmluCShyZXZpc2lvbiAyMzEyMzgpDQorKysg bGliZ2NjL01ha2VmaWxlLmluCSh3b3JraW5nIGNvcHkpDQpAQCAtMzMwLDcg KzMzMCw3IEBAIFRQQklUX0ZVTkNTID0gX3BhY2tfdGYgX3VucGFja190ZiBf YWRkc3ViX3RmIF9tdWxfDQogDQogIyBBZGRpdGlvbmFsIHNvdXJjZXMgdG8g aGFuZGxlIGV4Y2VwdGlvbnM7IG92ZXJyaWRkZW4gYnkgdGFyZ2V0cyBhcyBu ZWVkZWQuDQogTElCMkFEREVIID0gJChzcmNkaXIpL3Vud2luZC1kdzIuYyAk KHNyY2RpcikvdW53aW5kLWR3Mi1mZGUuYyBcDQotICAkKHNyY2RpcikvdW53 aW5kLXNqbGouYyAkKHNyY2RpcikvdW53aW5kLWMuYw0KKyAgJChzcmNkaXIp L3Vud2luZC1jb21wYWN0LmMgJChzcmNkaXIpL3Vud2luZC1zamxqLmMgJChz cmNkaXIpL3Vud2luZC1jLmMNCiBMSUIyQURERUhTVEFUSUMgPSAkKExJQjJB RERFSCkNCiBMSUIyQURERUhTSEFSRUQgPSAkKExJQjJBRERFSCkNCiANCklu ZGV4OiBsaWJnY2MvdW53aW5kLWR3Mi1mZGUtZGlwLmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBsaWJnY2MvdW53aW5kLWR3Mi1mZGUtZGlwLmMJ KHJldmlzaW9uIDIzMTIzOCkNCisrKyBsaWJnY2MvdW53aW5kLWR3Mi1mZGUt ZGlwLmMJKHdvcmtpbmcgY29weSkNCkBAIC00NSw2ICs0NSw5IEBADQogI2lu Y2x1ZGUgInVud2luZC1kdzItZmRlLmgiDQogI2luY2x1ZGUgInVud2luZC1j b21wYXQuaCINCiAjaW5jbHVkZSAiZ3Roci5oIg0KKyNpZmRlZiBNRF9IQVZF X0NPTVBBQ1RfRUgNCisjaW5jbHVkZSAidW53aW5kLWNvbXBhY3QuaCINCisj ZW5kaWYNCiANCiAjaWYgIWRlZmluZWQoaW5oaWJpdF9saWJjKSAmJiBkZWZp bmVkKEhBVkVfTERfRUhfRlJBTUVfSERSKSBcDQogICAgICYmIChfX0dMSUJD X18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18g PiAyKSBcDQpAQCAtOTAsMTEgKzkzLDExIEBADQogIyBkZWZpbmUgX19SRUxP Q19QT0lOVEVSKHB0ciwgYmFzZSkgKChwdHIpICsgKGJhc2UpKQ0KICNlbmRp Zg0KIA0KLXN0YXRpYyBjb25zdCBmZGUgKiBfVW53aW5kX0ZpbmRfcmVnaXN0 ZXJlZF9GREUgKHZvaWQgKnBjLCBzdHJ1Y3QgZHdhcmZfZWhfYmFzZXMgKmJh c2VzKTsNCitzdGF0aWMgZW51bSBjb21wYWN0X2VudHJ5X3R5cGUNCitfVW53 aW5kX0ZpbmRfcmVnaXN0ZXJlZF9JbmRleCAodm9pZCAqcGMsIHN0cnVjdCBj b21wYWN0X2VoX2Jhc2VzICpiYXNlcyk7DQogDQotI2RlZmluZSBfVW53aW5k X0ZpbmRfRkRFIF9VbndpbmRfRmluZF9yZWdpc3RlcmVkX0ZERQ0KKyNkZWZp bmUgX1Vud2luZF9GaW5kX3JlZ2lzdGVyZWRfSW5kZXggX1Vud2luZF9GaW5k X3JlZ2lzdGVyZWRfSW5kZXgNCiAjaW5jbHVkZSAidW53aW5kLWR3Mi1mZGUu YyINCi0jdW5kZWYgX1Vud2luZF9GaW5kX0ZERQ0KIA0KICNpZm5kZWYgUFRf R05VX0VIX0ZSQU1FDQogI2RlZmluZSBQVF9HTlVfRUhfRlJBTUUgKFBUX0xP T1MgKyAweDQ3NGU1NTApDQpAQCAtMTAzLDEwICsxMDYsOCBAQA0KIHN0cnVj dCB1bndfZWhfY2FsbGJhY2tfZGF0YQ0KIHsNCiAgIF9VbndpbmRfUHRyIHBj Ow0KLSAgdm9pZCAqdGJhc2U7DQotICB2b2lkICpkYmFzZTsNCi0gIHZvaWQg KmZ1bmM7DQotICBjb25zdCBmZGUgKnJldDsNCisgIHN0cnVjdCBjb21wYWN0 X2VoX2Jhc2VzICpiYXNlczsNCisgIGVudW0gY29tcGFjdF9lbnRyeV90eXBl IHR5cGU7DQogICBpbnQgY2hlY2tfY2FjaGU7DQogfTsNCiANCkBAIC0xNDks OSArMTUwLDkgQEAgYmFzZV9mcm9tX2NiX2RhdGEgKHVuc2lnbmVkIGNoYXIg ZW5jb2RpbmcsIHN0cnVjdA0KICAgICAgIHJldHVybiAwOw0KIA0KICAgICBj YXNlIERXX0VIX1BFX3RleHRyZWw6DQotICAgICAgcmV0dXJuIChfVW53aW5k X1B0cikgZGF0YS0+dGJhc2U7DQorICAgICAgcmV0dXJuIChfVW53aW5kX1B0 cikgZGF0YS0+YmFzZXMtPnRiYXNlOw0KICAgICBjYXNlIERXX0VIX1BFX2Rh dGFyZWw6DQotICAgICAgcmV0dXJuIChfVW53aW5kX1B0cikgZGF0YS0+ZGJh c2U7DQorICAgICAgcmV0dXJuIChfVW53aW5kX1B0cikgZGF0YS0+YmFzZXMt PmRiYXNlOw0KICAgICBkZWZhdWx0Og0KICAgICAgIGdjY191bnJlYWNoYWJs ZSAoKTsNCiAgICAgfQ0KQEAgLTE3Myw2ICsxNzQsNyBAQCBfVW53aW5kX0l0 ZXJhdGVQaGRyQ2FsbGJhY2sgKHN0cnVjdCBkbF9waGRyX2luZm8gKg0KICAg X1Vud2luZF9QdHIgZWhfZnJhbWU7DQogICBzdHJ1Y3Qgb2JqZWN0IG9iOw0K ICAgX1Vud2luZF9QdHIgcGNfbG93ID0gMCwgcGNfaGlnaCA9IDA7DQorICBj b25zdCBmZGUgKmY7DQogDQogICBzdHJ1Y3QgZXh0X2RsX3BoZHJfaW5mbw0K ICAgICB7DQpAQCAtMzIxLDEyICszMjMsMTEgQEAgX1Vud2luZF9JdGVyYXRl UGhkckNhbGxiYWNrIChzdHJ1Y3QgZGxfcGhkcl9pbmZvICoNCiAgIC8qIFJl YWQgLmVoX2ZyYW1lX2hkciBoZWFkZXIuICAqLw0KICAgaGRyID0gKGNvbnN0 IHN0cnVjdCB1bndfZWhfZnJhbWVfaGRyICopDQogICAgIF9fUkVMT0NfUE9J TlRFUiAocF9laF9mcmFtZV9oZHItPnBfdmFkZHIsIGxvYWRfYmFzZSk7DQot ICBpZiAoaGRyLT52ZXJzaW9uICE9IDEpDQotICAgIHJldHVybiAxOw0KIA0K ICNpZmRlZiBDUlRfR0VUX1JGSUJfREFUQQ0KLSMgaWZkZWYgX19pMzg2X18N Ci0gIGRhdGEtPmRiYXNlID0gTlVMTDsNCisjIGlmIGRlZmluZWQoX19pMzg2 X18pIHx8IGRlZmluZWQoX19taXBzX18pDQorICBkYXRhLT5iYXNlcy0+ZGJh c2UgPSBOVUxMOw0KKw0KICAgaWYgKHBfZHluYW1pYykNCiAgICAgew0KICAg ICAgIC8qIEZvciBkeW5hbWljYWxseSBsaW5rZWQgZXhlY3V0YWJsZXMgYW5k IHNoYXJlZCBsaWJyYXJpZXMsDQpAQCAtMzM2LDggKzMzNywxMSBAQCBfVW53 aW5kX0l0ZXJhdGVQaGRyQ2FsbGJhY2sgKHN0cnVjdCBkbF9waGRyX2luZm8g Kg0KICAgICAgIGZvciAoOyBkeW4tPmRfdGFnICE9IERUX05VTEwgOyBkeW4r KykNCiAJaWYgKGR5bi0+ZF90YWcgPT0gRFRfUExUR09UKQ0KIAkgIHsNCi0J ICAgIGRhdGEtPmRiYXNlID0gKHZvaWQgKikgZHluLT5kX3VuLmRfcHRyOw0K LSNpZiBkZWZpbmVkIF9fbGludXhfXw0KKwkgICAgZGF0YS0+YmFzZXMtPmRi YXNlID0gKHZvaWQgKikgZHluLT5kX3VuLmRfcHRyOw0KKyNpZiBkZWZpbmVk KF9fbWlwc19fKQ0KKwkgICAgLyogTUlQUyB0YXJnZXRzIG5lZWQgdG8gcmVs b2NhdGVkIHRoZSB2YWx1ZSBhbmQgdGhlIG9mZnNldC4gICovDQorCSAgICBk YXRhLT5iYXNlcy0+ZGJhc2UgKz0gbG9hZF9iYXNlICsgMHg3ZmYwOw0KKyNl bGlmIGRlZmluZWQgX19saW51eF9fDQogCSAgICAvKiBPbiBJQS0zMiBMaW51 eCwgX0RZTkFNSUMgaXMgd3JpdGFibGUgYW5kIEdMSUJDIGhhcw0KIAkgICAg ICAgcmVsb2NhdGVkIGl0LiAgKi8NCiAjZWxpZiBkZWZpbmVkIF9fc3VuX18g JiYgZGVmaW5lZCBfX3N2cjRfXw0KQEAgLTM1NCw2ICszNTgsMjAgQEAgX1Vu d2luZF9JdGVyYXRlUGhkckNhbGxiYWNrIChzdHJ1Y3QgZGxfcGhkcl9pbmZv ICoNCiAjIGVuZGlmDQogI2VuZGlmDQogDQorI2lmZGVmIE1EX0hBVkVfQ09N UEFDVF9FSA0KKyAgaWYgKGhkci0+dmVyc2lvbiA9PSAyKQ0KKyAgICB7DQor ICAgICAgZGF0YS0+dHlwZSA9DQorCV9VbndpbmRfU2VhcmNoX0NvbXBhY3Rf RWhfSGRyICgodm9pZCAqKWRhdGEtPnBjLA0KKwkJCQkgICAgICAgKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKikgaGRyLA0KKwkJCQkgICAgICAgZGF0YS0+YmFz ZXMpOw0KKyAgICAgIHJldHVybiAxOw0KKyAgICB9DQorI2VuZGlmDQorDQor ICBpZiAoaGRyLT52ZXJzaW9uICE9IDEpDQorICAgIHJldHVybiAxOw0KKw0K ICAgcCA9IHJlYWRfZW5jb2RlZF92YWx1ZV93aXRoX2Jhc2UgKGhkci0+ZWhf ZnJhbWVfcHRyX2VuYywNCiAJCQkJICAgIGJhc2VfZnJvbV9jYl9kYXRhICho ZHItPmVoX2ZyYW1lX3B0cl9lbmMsDQogCQkJCQkJICAgICAgIGRhdGEpLA0K QEAgLTM4NCw3ICs0MDIsNiBAQCBfVW53aW5kX0l0ZXJhdGVQaGRyQ2FsbGJh Y2sgKHN0cnVjdCBkbF9waGRyX2luZm8gKg0KIAkgIGNvbnN0IHN0cnVjdCBm ZGVfdGFibGUgKnRhYmxlID0gKGNvbnN0IHN0cnVjdCBmZGVfdGFibGUgKikg cDsNCiAJICBzaXplX3QgbG8sIGhpLCBtaWQ7DQogCSAgX1Vud2luZF9QdHIg ZGF0YV9iYXNlID0gKF9VbndpbmRfUHRyKSBoZHI7DQotCSAgZmRlICpmOw0K IAkgIHVuc2lnbmVkIGludCBmX2VuYywgZl9lbmNfc2l6ZTsNCiAJICBfVW53 aW5kX1B0ciByYW5nZTsNCiANCkBAIC00MTYsOCArNDMzLDExIEBAIF9Vbndp bmRfSXRlcmF0ZVBoZHJDYWxsYmFjayAoc3RydWN0IGRsX3BoZHJfaW5mbyAq DQogCSAgcmVhZF9lbmNvZGVkX3ZhbHVlX3dpdGhfYmFzZSAoZl9lbmMgJiAw eDBmLCAwLA0KIAkJCQkJJmYtPnBjX2JlZ2luW2ZfZW5jX3NpemVdLCAmcmFu Z2UpOw0KIAkgIGlmIChkYXRhLT5wYyA8IHRhYmxlW21pZF0uaW5pdGlhbF9s b2MgKyBkYXRhX2Jhc2UgKyByYW5nZSkNCi0JICAgIGRhdGEtPnJldCA9IGY7 DQotCSAgZGF0YS0+ZnVuYyA9ICh2b2lkICopICh0YWJsZVttaWRdLmluaXRp YWxfbG9jICsgZGF0YV9iYXNlKTsNCisJICAgIHsNCisJICAgICAgZGF0YS0+ YmFzZXMtPmVudHJ5ID0gZjsNCisJICAgICAgZGF0YS0+dHlwZSA9IENFVF9G REU7DQorCSAgICB9DQorCSAgZGF0YS0+YmFzZXMtPmZ1bmMgPSAodm9pZCAq KSAodGFibGVbbWlkXS5pbml0aWFsX2xvYyArIGRhdGFfYmFzZSk7DQogCSAg cmV0dXJuIDE7DQogCX0NCiAgICAgfQ0KQEAgLTQyNiw1OCArNDQ2LDUyIEBA IF9VbndpbmRfSXRlcmF0ZVBoZHJDYWxsYmFjayAoc3RydWN0IGRsX3BoZHJf aW5mbyAqDQogICAgICBBcyBzb29uIGFzIEdMSUJDIHdpbGwgcHJvdmlkZSBB UEkgc28gdG8gbm90aWZ5IHRoYXQgYSBsaWJyYXJ5IGhhcyBiZWVuDQogICAg ICByZW1vdmVkLCB3ZSBjb3VsZCBjYWNoZSB0aGlzIChhbmQgdGh1cyB1c2Ug c2VhcmNoX29iamVjdCkuICAqLw0KICAgb2IucGNfYmVnaW4gPSBOVUxMOw0K LSAgb2IudGJhc2UgPSBkYXRhLT50YmFzZTsNCi0gIG9iLmRiYXNlID0gZGF0 YS0+ZGJhc2U7DQorICBvYi50YmFzZSA9IGRhdGEtPmJhc2VzLT50YmFzZTsN CisgIG9iLmRiYXNlID0gZGF0YS0+YmFzZXMtPmRiYXNlOw0KICAgb2IudS5z aW5nbGUgPSAoZmRlICopIGVoX2ZyYW1lOw0KICAgb2Iucy5pID0gMDsNCiAg IG9iLnMuYi5taXhlZF9lbmNvZGluZyA9IDE7ICAvKiBOZWVkIHRvIGFzc3Vt ZSB3b3JzdCBjYXNlLiAgKi8NCi0gIGRhdGEtPnJldCA9IGxpbmVhcl9zZWFy Y2hfZmRlcyAoJm9iLCAoZmRlICopIGVoX2ZyYW1lLCAodm9pZCAqKSBkYXRh LT5wYyk7DQotICBpZiAoZGF0YS0+cmV0ICE9IE5VTEwpDQorICBmID0gbGlu ZWFyX3NlYXJjaF9mZGVzICgmb2IsIChmZGUgKikgZWhfZnJhbWUsICh2b2lk ICopIGRhdGEtPnBjKTsNCisgIGRhdGEtPmJhc2VzLT5lbnRyeSA9IGY7DQor ICBpZiAoZiAhPSBOVUxMKQ0KICAgICB7DQogICAgICAgX1Vud2luZF9QdHIg ZnVuYzsNCi0gICAgICB1bnNpZ25lZCBpbnQgZW5jb2RpbmcgPSBnZXRfZmRl X2VuY29kaW5nIChkYXRhLT5yZXQpOw0KKyAgICAgIHVuc2lnbmVkIGludCBl bmNvZGluZyA9IGdldF9mZGVfZW5jb2RpbmcgKGYpOw0KIA0KICAgICAgIHJl YWRfZW5jb2RlZF92YWx1ZV93aXRoX2Jhc2UgKGVuY29kaW5nLA0KIAkJCQkg ICAgYmFzZV9mcm9tX2NiX2RhdGEgKGVuY29kaW5nLCBkYXRhKSwNCi0JCQkJ ICAgIGRhdGEtPnJldC0+cGNfYmVnaW4sICZmdW5jKTsNCi0gICAgICBkYXRh LT5mdW5jID0gKHZvaWQgKikgZnVuYzsNCisJCQkJICAgIGYtPnBjX2JlZ2lu LCAmZnVuYyk7DQorICAgICAgZGF0YS0+YmFzZXMtPmZ1bmMgPSAodm9pZCAq KSBmdW5jOw0KKyAgICAgIGRhdGEtPnR5cGUgPSBDRVRfRkRFOw0KICAgICB9 DQogICByZXR1cm4gMTsNCiB9DQogDQotY29uc3QgZmRlICoNCi1fVW53aW5k X0ZpbmRfRkRFICh2b2lkICpwYywgc3RydWN0IGR3YXJmX2VoX2Jhc2VzICpi YXNlcykNCitlbnVtIGNvbXBhY3RfZW50cnlfdHlwZQ0KK19VbndpbmRfRmlu ZF9JbmRleCAodm9pZCAqcGMsIHN0cnVjdCBjb21wYWN0X2VoX2Jhc2VzICpi YXNlcykNCiB7DQogICBzdHJ1Y3QgdW53X2VoX2NhbGxiYWNrX2RhdGEgZGF0 YTsNCi0gIGNvbnN0IGZkZSAqcmV0Ow0KIA0KLSAgcmV0ID0gX1Vud2luZF9G aW5kX3JlZ2lzdGVyZWRfRkRFIChwYywgYmFzZXMpOw0KLSAgaWYgKHJldCAh PSBOVUxMKQ0KLSAgICByZXR1cm4gcmV0Ow0KKyAgZGF0YS50eXBlID0gX1Vu d2luZF9GaW5kX3JlZ2lzdGVyZWRfSW5kZXggKHBjLCBiYXNlcyk7DQorICBp ZiAoZGF0YS50eXBlICE9IENFVF9ub3RfZm91bmQpDQorICAgIHJldHVybiBk YXRhLnR5cGU7DQogDQogICBkYXRhLnBjID0gKF9VbndpbmRfUHRyKSBwYzsN Ci0gIGRhdGEudGJhc2UgPSBOVUxMOw0KLSAgZGF0YS5kYmFzZSA9IE5VTEw7 DQotICBkYXRhLmZ1bmMgPSBOVUxMOw0KLSAgZGF0YS5yZXQgPSBOVUxMOw0K KyAgZGF0YS5iYXNlcyA9IGJhc2VzOw0KKyAgZGF0YS50eXBlID0gQ0VUX25v dF9mb3VuZDsNCiAgIGRhdGEuY2hlY2tfY2FjaGUgPSAxOw0KIA0KICAgaWYg KGRsX2l0ZXJhdGVfcGhkciAoX1Vud2luZF9JdGVyYXRlUGhkckNhbGxiYWNr LCAmZGF0YSkgPCAwKQ0KLSAgICByZXR1cm4gTlVMTDsNCisgICAgcmV0dXJu IENFVF9ub3RfZm91bmQ7DQogDQotICBpZiAoZGF0YS5yZXQpDQotICAgIHsN Ci0gICAgICBiYXNlcy0+dGJhc2UgPSBkYXRhLnRiYXNlOw0KLSAgICAgIGJh c2VzLT5kYmFzZSA9IGRhdGEuZGJhc2U7DQotICAgICAgYmFzZXMtPmZ1bmMg PSBkYXRhLmZ1bmM7DQotICAgIH0NCi0gIHJldHVybiBkYXRhLnJldDsNCisg IHJldHVybiBkYXRhLnR5cGU7DQogfQ0KIA0KLSNlbHNlDQotLyogUHJldmVu dCBtdWx0aXBsZSBpbmNsdWRlIG9mIGhlYWRlciBmaWxlcy4gICovDQotI2Rl ZmluZSBfVW53aW5kX0ZpbmRfRkRFIF9VbndpbmRfRmluZF9GREUNCisjZWxz ZSAvKiAhVVNFX1BUX0dOVV9FSF9GUkFNRSAqLw0KKw0KKyNkZWZpbmUgX1Vu d2luZF9GaW5kX3JlZ2lzdGVyZWRfSW5kZXggX1Vud2luZF9GaW5kX0luZGV4 DQogI2luY2x1ZGUgInVud2luZC1kdzItZmRlLmMiDQorDQogI2VuZGlmDQog DQogI2lmIGRlZmluZWQgKFVTRV9HQVNfU1lNVkVSKSAmJiBkZWZpbmVkIChT SEFSRUQpICYmIGRlZmluZWQgKFVTRV9MSUJVTldJTkRfRVhDRVBUSU9OUykN CkluZGV4OiBsaWJnY2MvdW53aW5kLXBlLmgNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSBsaWJnY2MvdW53aW5kLXBlLmgJKHJldmlzaW9uIDIzMTIz OCkNCisrKyBsaWJnY2MvdW53aW5kLXBlLmgJKHdvcmtpbmcgY29weSkNCkBA IC00NCw2ICs0NCw4IEBADQogI2RlZmluZSBEV19FSF9QRV91ZGF0YTIgICAg ICAgICAweDAyDQogI2RlZmluZSBEV19FSF9QRV91ZGF0YTQgICAgICAgICAw eDAzDQogI2RlZmluZSBEV19FSF9QRV91ZGF0YTggICAgICAgICAweDA0DQor I2RlZmluZSBEV19FSF9QRV91ZGF0YTEgICAgICAgICAweDA1DQorI2RlZmlu ZSBEV19FSF9QRV9zZGF0YTEgICAgICAgICAweDA2DQogI2RlZmluZSBEV19F SF9QRV9zbGViMTI4ICAgICAgICAweDA5DQogI2RlZmluZSBEV19FSF9QRV9z ZGF0YTIgICAgICAgICAweDBBDQogI2RlZmluZSBEV19FSF9QRV9zZGF0YTQg ICAgICAgICAweDBCDQpAQCAtNzgsNiArODAsOCBAQCBzaXplX29mX2VuY29k ZWRfdmFsdWUgKHVuc2lnbmVkIGNoYXIgZW5jb2RpbmcpDQogICAgIHsNCiAg ICAgY2FzZSBEV19FSF9QRV9hYnNwdHI6DQogICAgICAgcmV0dXJuIHNpemVv ZiAodm9pZCAqKTsNCisgICAgY2FzZSBEV19FSF9QRV91ZGF0YTE6DQorICAg ICAgcmV0dXJuIDE7DQogICAgIGNhc2UgRFdfRUhfUEVfdWRhdGEyOg0KICAg ICAgIHJldHVybiAyOw0KICAgICBjYXNlIERXX0VIX1BFX3VkYXRhNDoNCkBA IC0yMjcsNiArMjMxLDEwIEBAIHJlYWRfZW5jb2RlZF92YWx1ZV93aXRoX2Jh c2UgKHVuc2lnbmVkIGNoYXIgZW5jb2RpDQogCSAgfQ0KIAkgIGJyZWFrOw0K IA0KKwljYXNlIERXX0VIX1BFX3VkYXRhMToNCisJICByZXN1bHQgPSAqcDsN CisJICBwICs9IDE7DQorCSAgYnJlYWs7DQogCWNhc2UgRFdfRUhfUEVfdWRh dGEyOg0KIAkgIHJlc3VsdCA9IHUtPnUyOw0KIAkgIHAgKz0gMjsNCkluZGV4 OiBsaWJnY2MvdW53aW5kLWNvbXBhY3QuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGxpYmdjYy91bndpbmQtY29tcGFjdC5jCShyZXZpc2lvbiAw KQ0KKysrIGxpYmdjYy91bndpbmQtY29tcGFjdC5jCShyZXZpc2lvbiAwKQ0K QEAgLTAsMCArMSwxMTEgQEANCisvKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisNCisgICBUaGlz IGZpbGUgaXMgcGFydCBvZiBHQ0MuDQorDQorICAgR0NDIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkN CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAgIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5 b3VyIG9wdGlvbikNCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICBH Q0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwNCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUNCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLg0KKw0KKyAgIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwg dmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbA0KKyAgIHBl cm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFy eSBFeGNlcHRpb24sIHZlcnNpb24NCisgICAzLjEsIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKw0KKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFuZA0KKyAgIGEgY29weSBvZiB0aGUgR0NDIFJ1 bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07DQorICAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5S VU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlDQorICAgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8NCisNCisjaW5jbHVkZSAi dGNvbmZpZy5oIg0KKyNpbmNsdWRlICJ0c3lzdGVtLmgiDQorI2luY2x1ZGUg ImNvcmV0eXBlcy5oIg0KKyNpbmNsdWRlICJ0bS5oIg0KKyNpbmNsdWRlICJk d2FyZjIuaCINCisjaW5jbHVkZSAidW53aW5kLmgiDQorI2luY2x1ZGUgInVu d2luZC1kdzItZmRlLmgiDQorI2luY2x1ZGUgInVud2luZC1jb21wYWN0Lmgi DQorDQordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3QgIF9fYXR0cmli dXRlX18gKChtb2RlIChTSSkpKTsNCisNCisjaWZkZWYgTURfSEFWRV9DT01Q QUNUX0VIDQorLyogU2VhcmNoIGEgY29tcGFjdCAodjIpIGVoX2ZyYW1lX2hk ciB0YWJsZS4gICovDQorDQorc3RydWN0IGNvbXBhY3RfZWhfaW5kZXggew0K KyAgICBzd29yZCBmbjsNCisgICAgc3dvcmQgZGF0YTsNCit9IF9fYXR0cmli dXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOw0KKw0KK3N0YXRpYyBfVW53 aW5kX1B0cg0KK2RlY29kZV9pbmRleF9wdHIgKGNvbnN0IHN3b3JkICpwKQ0K K3sNCisgIHJldHVybiAoKnAgJiB+MSkgKyAoX1Vud2luZF9QdHIpIHA7DQor fQ0KKw0KK2VudW0gY29tcGFjdF9lbnRyeV90eXBlDQorX1Vud2luZF9TZWFy Y2hfQ29tcGFjdF9FaF9IZHIgKHZvaWQgKnBjLCBjb25zdCB1bnNpZ25lZCBj aGFyICpoZHIsDQorCQkJICAgICAgIHN0cnVjdCBjb21wYWN0X2VoX2Jhc2Vz ICpiYXNlcykNCit7DQorICBpbnQgbG8sIGhpLCBtaWQ7DQorICBfVW53aW5k X1B0ciBwOw0KKyAgX1Vud2luZF9QdHIgbnJlYzsNCisgIGNvbnN0IHN0cnVj dCBjb21wYWN0X2VoX2luZGV4ICppbmQ7DQorDQorICBiYXNlcy0+ZWhfZW5j b2RpbmcgPSBoZHJbMV07DQorICBucmVjID0gKihjb25zdCB1aW50MzJfdCAq KShoZHIgKyA0KTsNCisgIGlmIChucmVjID09IDApDQorICAgIHJldHVybiBD RVRfbm90X2ZvdW5kOw0KKw0KKyAgaW5kID0gKGNvbnN0IHN0cnVjdCBjb21w YWN0X2VoX2luZGV4ICopKGhkciArIDgpOw0KKw0KKyAgbG8gPSAwOw0KKyAg aGkgPSBucmVjIC0gMTsNCisgIHdoaWxlICgxKQ0KKyAgICB7DQorICAgICAg bWlkID0gKGxvICsgaGkpIC8gMjsNCisgICAgICBwID0gZGVjb2RlX2luZGV4 X3B0ciAoJmluZFttaWRdLmZuKTsNCisgICAgICBpZiAoKF9VbndpbmRfUHRy KXBjIDwgcCkNCisJew0KKwkgIGlmIChtaWQgPT0gMCkNCisJICAgIHJldHVy biBDRVRfbm90X2ZvdW5kOw0KKwkgIGhpID0gbWlkIC0gMTsNCisJfQ0KKyAg ICAgIGVsc2UNCisJew0KKwkgIGlmIChtaWQgPT0gaGkpDQorCSAgICBicmVh azsNCisJICBwID0gZGVjb2RlX2luZGV4X3B0ciAoJmluZFttaWQgKyAxXS5m bik7DQorCSAgaWYgKChfVW53aW5kX1B0cilwYyA8IHApDQorCSAgICBicmVh azsNCisJICBsbyA9IG1pZCArIDE7DQorCX0NCisgICAgfQ0KKw0KKyAgcCA9 IGRlY29kZV9pbmRleF9wdHIgKCZpbmRbbWlkXS5mbik7DQorICBiYXNlcy0+ ZnVuYyA9ICh2b2lkICopcDsNCisgIGlmICgoaW5kW21pZF0uZm4gJiAxKSA9 PSAwKQ0KKyAgICB7DQorICAgICAgYmFzZXMtPmVudHJ5ID0gJmluZFttaWRd LmRhdGE7DQorICAgICAgLyogSWYgd2UgaGl0IHRoZSB0ZXJtaW5hdGluZyBD QU5UVU5XSU5EIGVudHJ5IHRoZW4gYXNzdW1lDQorICAgICAgICAgd2UncmUg bG9va2luZyBpbiB0aGUgd3JvbmcgdGFibGUuICAqLw0KKyAgICAgIGlmICht aWQgPT0gKGludClucmVjIC0gMSAmJiBpbmRbbWlkXS5kYXRhID09IDB4MDE1 ZDVkMDEpDQorCXJldHVybiBDRVRfbm90X2ZvdW5kOw0KKw0KKyAgICAgIHJl dHVybiBDRVRfaW5saW5lOw0KKyAgICB9DQorICBlbHNlDQorICAgIHsNCisg ICAgICBwID0gZGVjb2RlX2luZGV4X3B0ciAoJmluZFttaWRdLmRhdGEpOw0K KyAgICAgIGJhc2VzLT5lbnRyeSA9IChjb25zdCB2b2lkICopcDsNCisgICAg ICBpZiAoaW5kW21pZF0uZGF0YSAmIDEpDQorCXJldHVybiBDRVRfRkRFOw0K KyAgICAgIGVsc2UNCisJcmV0dXJuIENFVF9vdXRsaW5lOw0KKyAgICB9DQor fQ0KKw0KKyNlbmRpZiAvKiBNRF9IQVZFX0NPTVBBQ1RfRUggKi8NCkluZGV4 OiBsaWJnY2MvdW53aW5kLWR3Mi1mZGUuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGxpYmdjYy91bndpbmQtZHcyLWZkZS5jCShyZXZpc2lvbiAy MzEyMzgpDQorKysgbGliZ2NjL3Vud2luZC1kdzItZmRlLmMJKHdvcmtpbmcg Y29weSkNCkBAIC0yMyw3ICsyMyw4IEBAIGEgY29weSBvZiB0aGUgR0NDIFJ1 bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcNCiBzZWUgdGhlIGZpbGVz IENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAg SWYgbm90LCBzZWUNCiA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLw0KIA0KLSNpZm5kZWYgX1Vud2luZF9GaW5kX0ZERQ0KKyNpZm5kZWYg X1Vud2luZF9GaW5kX3JlZ2lzdGVyZWRfSW5kZXgNCisjZGVmaW5lIF9Vbndp bmRfRmluZF9yZWdpc3RlcmVkX0luZGV4IF9VbndpbmRfRmluZF9JbmRleA0K ICNpbmNsdWRlICJ0Y29uZmlnLmgiDQogI2luY2x1ZGUgInRzeXN0ZW0uaCIN CiAjaW5jbHVkZSAiY29yZXR5cGVzLmgiDQpAQCAtMzUsNyArMzYsMTAgQEAg c2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJl c3BlY3QNCiAjaW5jbHVkZSAidW53aW5kLXBlLmgiDQogI2luY2x1ZGUgInVu d2luZC1kdzItZmRlLmgiDQogI2luY2x1ZGUgImd0aHIuaCINCisjaWZkZWYg TURfSEFWRV9DT01QQUNUX0VIDQorI2luY2x1ZGUgInVud2luZC1jb21wYWN0 LmgiDQogI2VuZGlmDQorI2VuZGlmDQogDQogLyogVGhlIHVuc2Vlbl9vYmpl Y3RzIGxpc3QgY29udGFpbnMgb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiByZWdp c3RlcmVkDQogICAgYnV0IG5vdCB5ZXQgY2F0ZWdvcml6ZWQgaW4gYW55IHdh eS4gIFRoZSBzZWVuX29iamVjdHMgbGlzdCBoYXMgaGFkDQpAQCAtNzEsMjIg Kzc1LDIwIEBAIHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhfdCBvYmplY3RfbXV0 ZXg7DQogI2VuZGlmDQogI2VuZGlmDQogDQotLyogQ2FsbGVkIGZyb20gY3J0 YmVnaW4ubyB0byByZWdpc3RlciB0aGUgdW53aW5kIGluZm8gZm9yIGFuIG9i amVjdC4gICovDQorLyogSW5pdGlhbGl6ZSBPQiBhbmQgYWRkIHRvIGxpc3Qg b2Ygb2JqZWN0cy4gICovDQogDQotdm9pZA0KLV9fcmVnaXN0ZXJfZnJhbWVf aW5mb19iYXNlcyAoY29uc3Qgdm9pZCAqYmVnaW4sIHN0cnVjdCBvYmplY3Qg Km9iLA0KLQkJCSAgICAgdm9pZCAqdGJhc2UsIHZvaWQgKmRiYXNlKQ0KK3N0 YXRpYyB2b2lkDQorX19yZWdpc3Rlcl9mcmFtZV9pbmZvXzEgKGNvbnN0IHZv aWQgKmJlZ2luLCBzdHJ1Y3Qgb2JqZWN0ICpvYiwNCisJCQkgIHZvaWQgKnRi YXNlLCB2b2lkICpkYmFzZSwgaW50IGhlYWRlcikNCiB7DQotICAvKiBJZiAu ZWhfZnJhbWUgaXMgZW1wdHksIGRvbid0IHJlZ2lzdGVyIGF0IGFsbC4gICov DQotICBpZiAoKGNvbnN0IHV3b3JkICopIGJlZ2luID09IDAgfHwgKihjb25z dCB1d29yZCAqKSBiZWdpbiA9PSAwKQ0KLSAgICByZXR1cm47DQotDQogICBv Yi0+cGNfYmVnaW4gPSAodm9pZCAqKS0xOw0KICAgb2ItPnRiYXNlID0gdGJh c2U7DQogICBvYi0+ZGJhc2UgPSBkYmFzZTsNCiAgIG9iLT51LnNpbmdsZSA9 IGJlZ2luOw0KICAgb2ItPnMuaSA9IDA7DQogICBvYi0+cy5iLmVuY29kaW5n ID0gRFdfRUhfUEVfb21pdDsNCisgIG9iLT5zLmIuaGVhZGVyID0gaGVhZGVy Ow0KKyAgb2ItPnMuYi5taXhlZF9lbmNvZGluZyA9IGhlYWRlcjsNCiAjaWZk ZWYgRFdBUkYyX09CSkVDVF9FTkRfUFRSX0VYVEVOU0lPTg0KICAgb2ItPmZk ZV9lbmQgPSBOVUxMOw0KICNlbmRpZg0KQEAgLTEwMCw3ICsxMDIsMzUgQEAg c3RhdGljIF9fZ3RocmVhZF9tdXRleF90IG9iamVjdF9tdXRleDsNCiAgIF9f Z3RocmVhZF9tdXRleF91bmxvY2sgKCZvYmplY3RfbXV0ZXgpOw0KIH0NCiAN CisvKiBDYWxsZWQgZnJvbSBjcnRiZWdpbi5vIHRvIHJlZ2lzdGVyIHRoZSB1 bndpbmQgaW5mbyBmb3IgYW4gb2JqZWN0LiAgKi8NCisNCiB2b2lkDQorX19y ZWdpc3Rlcl9mcmFtZV9pbmZvX2hlYWRlcl9iYXNlcyAoY29uc3Qgdm9pZCAq YmVnaW4sIHN0cnVjdCBvYmplY3QgKm9iLA0KKwkJCQkgICAgdm9pZCAqdGJh c2UsIHZvaWQgKmRiYXNlKQ0KK3sNCisgIC8qIE9ubHkgcmVnaXN0ZXIgY29t cGFjdCBFSCBmcmFtZSBoZWFkZXJzLiAgKi8NCisgIGlmIChiZWdpbiA9PSBO VUxMIHx8ICooY29uc3QgY2hhciAqKSBiZWdpbiAhPSAyKQ0KKyAgICByZXR1 cm47DQorDQorI2lmZGVmIE1EX0hBVkVfQ09NUEFDVF9FSA0KKyAgX19yZWdp c3Rlcl9mcmFtZV9pbmZvXzEgKGJlZ2luLCBvYiwgdGJhc2UsIGRiYXNlLCAx KTsNCisjZW5kaWYNCit9DQorDQorLyogQ2FsbGVkIGZyb20gY3J0YmVnaW4u byB0byByZWdpc3RlciB0aGUgdW53aW5kIGluZm8gZm9yIGFuIG9iamVjdC4g ICovDQorDQordm9pZA0KK19fcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcyAo Y29uc3Qgdm9pZCAqYmVnaW4sIHN0cnVjdCBvYmplY3QgKm9iLA0KKwkJCSAg ICAgdm9pZCAqdGJhc2UsIHZvaWQgKmRiYXNlKQ0KK3sNCisgIC8qIElmIC5l aF9mcmFtZSBpcyBlbXB0eSwgZG9uJ3QgcmVnaXN0ZXIgYXQgYWxsLiAgKi8N CisgIGlmICgoY29uc3QgdXdvcmQgKikgYmVnaW4gPT0gMCB8fCAqKGNvbnN0 IHV3b3JkICopIGJlZ2luID09IDApDQorICAgIHJldHVybjsNCisNCisgIF9f cmVnaXN0ZXJfZnJhbWVfaW5mb18xIChiZWdpbiwgb2IsIHRiYXNlLCBkYmFz ZSwgMCk7DQorfQ0KKw0KK3ZvaWQNCiBfX3JlZ2lzdGVyX2ZyYW1lX2luZm8g KGNvbnN0IHZvaWQgKmJlZ2luLCBzdHJ1Y3Qgb2JqZWN0ICpvYikNCiB7DQog ICBfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMgKGJlZ2luLCBvYiwgMCwg MCk7DQpAQCAtOTUxLDkgKzk4MSwyNSBAQCBiaW5hcnlfc2VhcmNoX21peGVk X2VuY29kaW5nX2ZkZXMgKHN0cnVjdCBvYmplY3QgKg0KICAgcmV0dXJuIE5V TEw7DQogfQ0KIA0KLXN0YXRpYyBjb25zdCBmZGUgKg0KLXNlYXJjaF9vYmpl Y3QgKHN0cnVjdCBvYmplY3QqIG9iLCB2b2lkICpwYykNCitzdGF0aWMgZW51 bSBjb21wYWN0X2VudHJ5X3R5cGUNCitzZWFyY2hfb2JqZWN0IChzdHJ1Y3Qg b2JqZWN0KiBvYiwgdm9pZCAqcGMsIHN0cnVjdCBjb21wYWN0X2VoX2Jhc2Vz ICpiYXNlcykNCiB7DQorICBjb25zdCBmZGUgKmYgPSBOVUxMOw0KKw0KKyNp ZmRlZiBNRF9IQVZFX0NPTVBBQ1RfRUgNCisgIGlmIChvYi0+cy5iLmhlYWRl cikNCisgICAgew0KKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhkciA9 IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG9iLT51LnNpbmdsZTsNCisgICAg ICBpZiAob2ItPnBjX2JlZ2luID09ICh2b2lkICopIC0xKQ0KKwl7DQorCSAg Y29uc3Qgc3dvcmQgKmZpcnN0ID0gKGNvbnN0IHN3b3JkICopIChoZHIgKyA4 KTsNCisJICBvYi0+cGNfYmVnaW4gPSAodm9pZCAqKSgoKmZpcnN0ICYgfjEp ICsgKF9VbndpbmRfUHRyKSBmaXJzdCk7DQorCX0NCisNCisgICAgICByZXR1 cm4gX1Vud2luZF9TZWFyY2hfQ29tcGFjdF9FaF9IZHIgKHBjLCBoZHIsIGJh c2VzKTsNCisgICAgfQ0KKyNlbmRpZg0KKw0KICAgLyogSWYgdGhlIGRhdGEg aGFzbid0IGJlZW4gc29ydGVkLCB0cnkgdG8gZG8gdGhpcyBub3cuICBXZSBt YXkgaGF2ZQ0KICAgICAgbW9yZSBtZW1vcnkgYXZhaWxhYmxlIHRoYW4gbGFz dCB0aW1lIHdlIHRyaWVkLiAgKi8NCiAgIGlmICghIG9iLT5zLmIuc29ydGVk KQ0KQEAgLTk2NCwxNyArMTAxMCwxNyBAQCBiaW5hcnlfc2VhcmNoX21peGVk X2VuY29kaW5nX2ZkZXMgKHN0cnVjdCBvYmplY3QgKg0KIAkgdGhhdCB3ZSd2 ZSBub3QgcHJvY2Vzc2VkIHRoaXMgb2JqZWN0IGJlZm9yZS4gIEEgcXVpY2sg cmFuZ2UNCiAJIGNoZWNrIGlzIGluIG9yZGVyLiAgKi8NCiAgICAgICBpZiAo cGMgPCBvYi0+cGNfYmVnaW4pDQotCXJldHVybiBOVUxMOw0KKwlyZXR1cm4g Q0VUX25vdF9mb3VuZDsNCiAgICAgfQ0KIA0KICAgaWYgKG9iLT5zLmIuc29y dGVkKQ0KICAgICB7DQogICAgICAgaWYgKG9iLT5zLmIubWl4ZWRfZW5jb2Rp bmcpDQotCXJldHVybiBiaW5hcnlfc2VhcmNoX21peGVkX2VuY29kaW5nX2Zk ZXMgKG9iLCBwYyk7DQorCWYgPSBiaW5hcnlfc2VhcmNoX21peGVkX2VuY29k aW5nX2ZkZXMgKG9iLCBwYyk7DQogICAgICAgZWxzZSBpZiAob2ItPnMuYi5l bmNvZGluZyA9PSBEV19FSF9QRV9hYnNwdHIpDQotCXJldHVybiBiaW5hcnlf c2VhcmNoX3VuZW5jb2RlZF9mZGVzIChvYiwgcGMpOw0KKwlmID0gYmluYXJ5 X3NlYXJjaF91bmVuY29kZWRfZmRlcyAob2IsIHBjKTsNCiAgICAgICBlbHNl DQotCXJldHVybiBiaW5hcnlfc2VhcmNoX3NpbmdsZV9lbmNvZGluZ19mZGVz IChvYiwgcGMpOw0KKwlmID0gYmluYXJ5X3NlYXJjaF9zaW5nbGVfZW5jb2Rp bmdfZmRlcyAob2IsIHBjKTsNCiAgICAgfQ0KICAgZWxzZQ0KICAgICB7DQpA QCAtOTg0LDIyICsxMDMwLDI0IEBAIGJpbmFyeV9zZWFyY2hfbWl4ZWRfZW5j b2RpbmdfZmRlcyAoc3RydWN0IG9iamVjdCAqDQogCSAgZmRlICoqcDsNCiAJ ICBmb3IgKHAgPSBvYi0+dS5hcnJheTsgKnAgOyBwKyspDQogCSAgICB7DQot CSAgICAgIGNvbnN0IGZkZSAqZiA9IGxpbmVhcl9zZWFyY2hfZmRlcyAob2Is ICpwLCBwYyk7DQorCSAgICAgIGYgPSBsaW5lYXJfc2VhcmNoX2ZkZXMgKG9i LCAqcCwgcGMpOw0KIAkgICAgICBpZiAoZikNCi0JCXJldHVybiBmOw0KKwkJ YnJlYWs7DQogCSAgICB9DQotCSAgcmV0dXJuIE5VTEw7DQogCX0NCiAgICAg ICBlbHNlDQotCXJldHVybiBsaW5lYXJfc2VhcmNoX2ZkZXMgKG9iLCBvYi0+ dS5zaW5nbGUsIHBjKTsNCisJZiA9IGxpbmVhcl9zZWFyY2hfZmRlcyAob2Is IG9iLT51LnNpbmdsZSwgcGMpOw0KICAgICB9DQorDQorICBiYXNlcy0+ZW50 cnkgPSBmOw0KKyAgcmV0dXJuIGYgPyBDRVRfRkRFIDogQ0VUX25vdF9mb3Vu ZDsNCiB9DQogDQotY29uc3QgZmRlICoNCi1fVW53aW5kX0ZpbmRfRkRFICh2 b2lkICpwYywgc3RydWN0IGR3YXJmX2VoX2Jhc2VzICpiYXNlcykNCitlbnVt IGNvbXBhY3RfZW50cnlfdHlwZQ0KK19VbndpbmRfRmluZF9yZWdpc3RlcmVk X0luZGV4ICh2b2lkICpwYywgc3RydWN0IGNvbXBhY3RfZWhfYmFzZXMgKmJh c2VzKQ0KIHsNCiAgIHN0cnVjdCBvYmplY3QgKm9iOw0KLSAgY29uc3QgZmRl ICpmID0gTlVMTDsNCisgIGVudW0gY29tcGFjdF9lbnRyeV90eXBlIHQgPSBD RVRfbm90X2ZvdW5kOw0KIA0KICAgaW5pdF9vYmplY3RfbXV0ZXhfb25jZSAo KTsNCiAgIF9fZ3RocmVhZF9tdXRleF9sb2NrICgmb2JqZWN0X211dGV4KTsN CkBAIC0xMDEwLDggKzEwNTgsOCBAQCBiaW5hcnlfc2VhcmNoX21peGVkX2Vu Y29kaW5nX2ZkZXMgKHN0cnVjdCBvYmplY3QgKg0KICAgZm9yIChvYiA9IHNl ZW5fb2JqZWN0czsgb2I7IG9iID0gb2ItPm5leHQpDQogICAgIGlmIChwYyA+ PSBvYi0+cGNfYmVnaW4pDQogICAgICAgew0KLQlmID0gc2VhcmNoX29iamVj dCAob2IsIHBjKTsNCi0JaWYgKGYpDQorCXQgPSBzZWFyY2hfb2JqZWN0IChv YiwgcGMsIGJhc2VzKTsNCisJaWYgKHQgIT0gQ0VUX25vdF9mb3VuZCkNCiAJ ICBnb3RvIGZpbmk7DQogCWJyZWFrOw0KICAgICAgIH0NCkBAIC0xMDIyLDcg KzEwNzAsNyBAQCBiaW5hcnlfc2VhcmNoX21peGVkX2VuY29kaW5nX2ZkZXMg KHN0cnVjdCBvYmplY3QgKg0KICAgICAgIHN0cnVjdCBvYmplY3QgKipwOw0K IA0KICAgICAgIHVuc2Vlbl9vYmplY3RzID0gb2ItPm5leHQ7DQotICAgICAg ZiA9IHNlYXJjaF9vYmplY3QgKG9iLCBwYyk7DQorICAgICAgdCA9IHNlYXJj aF9vYmplY3QgKG9iLCBwYywgYmFzZXMpOw0KIA0KICAgICAgIC8qIEluc2Vy dCB0aGUgb2JqZWN0IGludG8gdGhlIGNsYXNzaWZpZWQgbGlzdC4gICovDQog ICAgICAgZm9yIChwID0gJnNlZW5fb2JqZWN0czsgKnAgOyBwID0gJigqcCkt Pm5leHQpDQpAQCAtMTAzMSwyMSArMTA3OSwyNiBAQCBiaW5hcnlfc2VhcmNo X21peGVkX2VuY29kaW5nX2ZkZXMgKHN0cnVjdCBvYmplY3QgKg0KICAgICAg IG9iLT5uZXh0ID0gKnA7DQogICAgICAgKnAgPSBvYjsNCiANCi0gICAgICBp ZiAoZikNCisgICAgICBpZiAodCAhPSBDRVRfbm90X2ZvdW5kKQ0KIAlnb3Rv IGZpbmk7DQogICAgIH0NCiANCiAgZmluaToNCiAgIF9fZ3RocmVhZF9tdXRl eF91bmxvY2sgKCZvYmplY3RfbXV0ZXgpOw0KIA0KLSAgaWYgKGYpDQorICBp ZiAodCA9PSBDRVRfbm90X2ZvdW5kKQ0KKyAgICByZXR1cm4gQ0VUX25vdF9m b3VuZDsNCisNCisgIGJhc2VzLT50YmFzZSA9IG9iLT50YmFzZTsNCisgIGJh c2VzLT5kYmFzZSA9IG9iLT5kYmFzZTsNCisNCisgIGlmICh0ID09IENFVF9G REUpDQogICAgIHsNCisgICAgICBjb25zdCBmZGUgKmY7DQogICAgICAgaW50 IGVuY29kaW5nOw0KICAgICAgIF9VbndpbmRfUHRyIGZ1bmM7DQogDQotICAg ICAgYmFzZXMtPnRiYXNlID0gb2ItPnRiYXNlOw0KLSAgICAgIGJhc2VzLT5k YmFzZSA9IG9iLT5kYmFzZTsNCi0NCisgICAgICBmID0gYmFzZXMtPmVudHJ5 Ow0KICAgICAgIGVuY29kaW5nID0gb2ItPnMuYi5lbmNvZGluZzsNCiAgICAg ICBpZiAob2ItPnMuYi5taXhlZF9lbmNvZGluZykNCiAJZW5jb2RpbmcgPSBn ZXRfZmRlX2VuY29kaW5nIChmKTsNCkBAIC0xMDU0LDUgKzExMDcsMjEgQEAg YmluYXJ5X3NlYXJjaF9taXhlZF9lbmNvZGluZ19mZGVzIChzdHJ1Y3Qgb2Jq ZWN0ICoNCiAgICAgICBiYXNlcy0+ZnVuYyA9ICh2b2lkICopIGZ1bmM7DQog ICAgIH0NCiANCi0gIHJldHVybiBmOw0KKyAgcmV0dXJuIHQ7DQogfQ0KKw0K K2NvbnN0IGZkZSAqDQorX1Vud2luZF9GaW5kX0ZERSAodm9pZCAqcGMsIHN0 cnVjdCBkd2FyZl9laF9iYXNlcyAqYmFzZXMpDQorew0KKyAgZW51bSBjb21w YWN0X2VudHJ5X3R5cGUgdHlwZTsNCisgIHN0cnVjdCBjb21wYWN0X2VoX2Jh c2VzIGRhdGE7DQorDQorICB0eXBlID0gX1Vud2luZF9GaW5kX0luZGV4IChw YywgJmRhdGEpOw0KKyAgaWYgKHR5cGUgIT0gQ0VUX0ZERSkNCisgICAgcmV0 dXJuIE5VTEw7DQorDQorICBiYXNlcy0+dGJhc2UgPSBkYXRhLnRiYXNlOw0K KyAgYmFzZXMtPmRiYXNlID0gZGF0YS5kYmFzZTsNCisgIGJhc2VzLT5mdW5j ID0gZGF0YS5mdW5jOw0KKyAgcmV0dXJuIChjb25zdCBmZGUgKikgZGF0YS5l bnRyeTsNCit9DQpJbmRleDogbGliZ2NjL3Vud2luZC1jb21wYWN0LmgNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsaWJnY2MvdW53aW5kLWNvbXBh Y3QuaAkocmV2aXNpb24gMCkNCisrKyBsaWJnY2MvdW53aW5kLWNvbXBhY3Qu aAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMzkgQEANCisvKiBDb3B5cmln aHQgKEMpIDIwMTItMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4NCisNCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuDQorDQorR0NDIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQgdW5kZXINCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQ0K K1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyDQordmVyc2lvbi4NCisNCitHQ0Mg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZDQorV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IN CitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCitmb3IgbW9yZSBkZXRhaWxz Lg0KK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJl IGdyYW50ZWQgYWRkaXRpb25hbA0KK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBp biB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24N CiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLg0KKw0KK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZA0KK2EgY29w eSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07DQorc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBh bmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2Vl DQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8NCisNCisj aWZuZGVmIEdDQ19VTldJTkRfQ09NUEFDVF9IDQorI2RlZmluZSBHQ0NfVU5X SU5EX0NPTVBBQ1RfSA0KKw0KK2VudW0gY29tcGFjdF9lbnRyeV90eXBlIF9V bndpbmRfU2VhcmNoX0NvbXBhY3RfRWhfSGRyICh2b2lkICosDQorICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IGNvbXBhY3RfZWhfYmFzZXMg Kik7DQorDQorX1Vud2luZF9SZWFzb25fQ29kZSBfX2dudV9jb21wYWN0X3By MSAoaW50LCBfVW53aW5kX0FjdGlvbiwNCisJCSAgX1Vud2luZF9FeGNlcHRp b25fQ2xhc3MsIHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLA0KKwkJICBz dHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOw0KKw0KK19VbndpbmRfUmVhc29u X0NvZGUgX19nbnVfY29tcGFjdF9wcjIgKGludCwgX1Vud2luZF9BY3Rpb24s DQorCQkgIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzLCBzdHJ1Y3QgX1Vud2lu ZF9FeGNlcHRpb24gKiwNCisJCSAgc3RydWN0IF9VbndpbmRfQ29udGV4dCAq KTsNCisNCisjZGVmaW5lIEVIX0ZSQU1FX0hFQURFUl9WRVJTSU9OIDINCisj ZW5kaWYNCisNCkluZGV4OiBsaWJnY2MvdW53aW5kLWR3Mi1mZGUuaA0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxpYmdjYy91bndpbmQtZHcyLWZk ZS5oCShyZXZpc2lvbiAyMzEyMzgpDQorKysgbGliZ2NjL3Vud2luZC1kdzIt ZmRlLmgJKHdvcmtpbmcgY29weSkNCkBAIC01MywxMCArNTMsMTEgQEAgc3Ry dWN0IG9iamVjdA0KICAgICAgIHVuc2lnbmVkIGxvbmcgc29ydGVkIDogMTsN CiAgICAgICB1bnNpZ25lZCBsb25nIGZyb21fYXJyYXkgOiAxOw0KICAgICAg IHVuc2lnbmVkIGxvbmcgbWl4ZWRfZW5jb2RpbmcgOiAxOw0KKyAgICAgIHVu c2lnbmVkIGxvbmcgaGVhZGVyIDogMTsNCiAgICAgICB1bnNpZ25lZCBsb25n IGVuY29kaW5nIDogODsNCiAgICAgICAvKiA/Pz8gV2lzaCB0aGVyZSB3YXMg YW4gZWFzeSB3YXkgdG8gZGV0ZWN0IGEgNjQtYml0IGhvc3QgaGVyZTsNCiAJ IHdlJ3ZlIGdvdCAzMiBiaXRzIGxlZnQgdG8gcGxheSB3aXRoLi4uICAqLw0K LSAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQgOiAyMTsNCisgICAgICB1bnNp Z25lZCBsb25nIGNvdW50IDogMjA7DQogICAgIH0gYjsNCiAgICAgc2l6ZV90 IGk7DQogICB9IHM7DQpAQCAtODcsOSArODgsMTIgQEAgc3RydWN0IGR3YXJm X2VoX2Jhc2VzDQogICB2b2lkICp0YmFzZTsNCiAgIHZvaWQgKmRiYXNlOw0K ICAgdm9pZCAqZnVuYzsNCisgIHVuc2lnbmVkIGNoYXIgZWhfZW5jb2Rpbmc7 DQogfTsNCiANCiANCitleHRlcm4gdm9pZCBfX3JlZ2lzdGVyX2ZyYW1lX2lu Zm9faGVhZGVyX2Jhc2VzIChjb25zdCB2b2lkICosIHN0cnVjdCBvYmplY3Qg KiwNCisJCQkJCQl2b2lkICosIHZvaWQgKik7DQogZXh0ZXJuIHZvaWQgX19y ZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzIChjb25zdCB2b2lkICosIHN0cnVj dCBvYmplY3QgKiwNCiAJCQkJCSB2b2lkICosIHZvaWQgKik7DQogZXh0ZXJu IHZvaWQgX19yZWdpc3Rlcl9mcmFtZV9pbmZvIChjb25zdCB2b2lkICosIHN0 cnVjdCBvYmplY3QgKik7DQpAQCAtMTY1LDYgKzE2OSwyNCBAQCBuZXh0X2Zk ZSAoY29uc3QgZmRlICpmKQ0KIA0KIGV4dGVybiBjb25zdCBmZGUgKiBfVW53 aW5kX0ZpbmRfRkRFICh2b2lkICosIHN0cnVjdCBkd2FyZl9laF9iYXNlcyAq KTsNCiANCitzdHJ1Y3QgY29tcGFjdF9laF9iYXNlcyB7DQorICAgIHZvaWQg KnRiYXNlOw0KKyAgICB2b2lkICpkYmFzZTsNCisgICAgdm9pZCAqZnVuYzsN CisgICAgY29uc3Qgdm9pZCAqZW50cnk7DQorICAgIHVuc2lnbmVkIGNoYXIg ZWhfZW5jb2Rpbmc7DQorfTsNCisNCitlbnVtIGNvbXBhY3RfZW50cnlfdHlw ZSB7DQorICAgIENFVF9ub3RfZm91bmQsDQorICAgIENFVF9GREUsDQorICAg IENFVF9pbmxpbmUsDQorICAgIENFVF9vdXRsaW5lDQorfTsNCisNCitleHRl cm4gZW51bSBjb21wYWN0X2VudHJ5X3R5cGUgX1Vud2luZF9GaW5kX0luZGV4 ICh2b2lkICosDQorCQkJCQkJICAgc3RydWN0IGNvbXBhY3RfZWhfYmFzZXMg Kik7DQorDQogc3RhdGljIGlubGluZSBpbnQNCiBsYXN0X2ZkZSAoc3RydWN0 IG9iamVjdCAqb2JqIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksIGNv bnN0IGZkZSAqZikNCiB7DQpJbmRleDogbGliZ2NjL2NydHN0dWZmLmMNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsaWJnY2MvY3J0c3R1ZmYuYwko cmV2aXNpb24gMjMxMjM4KQ0KKysrIGxpYmdjYy9jcnRzdHVmZi5jCSh3b3Jr aW5nIGNvcHkpDQpAQCAtMTgyLDYgKzE4Miw5IEBAIGV4dGVybiB2b2lkIF9f cmVnaXN0ZXJfZnJhbWVfaW5mbyAoY29uc3Qgdm9pZCAqLCBzDQogZXh0ZXJu IHZvaWQgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzIChjb25zdCB2b2lk ICosIHN0cnVjdCBvYmplY3QgKiwNCiAJCQkJCSB2b2lkICosIHZvaWQgKikN CiAJCQkJICBUQVJHRVRfQVRUUklCVVRFX1dFQUs7DQorZXh0ZXJuIHZvaWQg X19yZWdpc3Rlcl9mcmFtZV9pbmZvX2hlYWRlcl9iYXNlcyAoY29uc3Qgdm9p ZCAqLCBzdHJ1Y3Qgb2JqZWN0ICosDQorCQkJCQkgdm9pZCAqLCB2b2lkICop DQorCQkJCSAgVEFSR0VUX0FUVFJJQlVURV9XRUFLOw0KIGV4dGVybiB2b2lk ICpfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyAoY29uc3Qgdm9pZCAqKQ0KIAkJ CQkgICAgIFRBUkdFVF9BVFRSSUJVVEVfV0VBSzsNCiBleHRlcm4gdm9pZCAq X19kZXJlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMgKGNvbnN0IHZvaWQgKikN CkBAIC0yNjQsNiArMjY3LDEwIEBAIFNUQVRJQyBmdW5jX3B0ciBfX0RUT1Jf TElTVF9fWzFdDQogU1RBVElDIEVIX0ZSQU1FX1NFQ1RJT05fQ09OU1QgY2hh ciBfX0VIX0ZSQU1FX0JFR0lOX19bXQ0KICAgICAgX19hdHRyaWJ1dGVfXygo c2VjdGlvbihfX0xJQkdDQ19FSF9GUkFNRV9TRUNUSU9OX05BTUVfXyksIGFs aWduZWQoNCkpKQ0KICAgICAgPSB7IH07DQorDQorI2lmZGVmIE1EX0hBVkVf Q09NUEFDVF9FSA0KK2V4dGVybiBjaGFyIF9fR05VX0VIX0ZSQU1FX0hEUltd IFRBUkdFVF9BVFRSSUJVVEVfV0VBSyBfX2F0dHJpYnV0ZV9fKChhbGlnbmVk KDQpKSk7DQorI2VuZGlmIC8qIE1EX0hBVkVfQ09NUEFDVF9FSCAqLw0KICNl bmRpZiAvKiBVU0VfRUhfRlJBTUVfUkVHSVNUUlkgKi8NCiANCiAjaWZkZWYg X19MSUJHQ0NfSkNSX1NFQ1RJT05fTkFNRV9fDQpAQCAtNDE4LDYgKzQyNSwx MiBAQCBfX2RvX2dsb2JhbF9kdG9yc19hdXggKHZvaWQpDQogDQogI2lmZGVm IFVTRV9FSF9GUkFNRV9SRUdJU1RSWQ0KICNpZmRlZiBDUlRfR0VUX1JGSUJf REFUQQ0KKyNpZmRlZiBNRF9IQVZFX0NPTVBBQ1RfRUgNCisgIGlmIChfX3Jl Z2lzdGVyX2ZyYW1lX2luZm9faGVhZGVyX2Jhc2VzICYmIF9fR05VX0VIX0ZS QU1FX0hEUiAmJg0KKyAgICAgIF9fR05VX0VIX0ZSQU1FX0hEUlswXSA+IDEp DQorICAgIF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzIChfX0dOVV9F SF9GUkFNRV9IRFIpOw0KKyAgZWxzZQ0KKyNlbmRpZiAvKiBNRF9IQVZFX0NP TVBBQ1RfRUggKi8NCiAgIC8qIElmIHdlIHVzZWQgdGhlIG5ldyBfX3JlZ2lz dGVyX2ZyYW1lX2luZm9fYmFzZXMgaW50ZXJmYWNlLA0KICAgICAgbWFrZSBz dXJlIHRoYXQgd2UgZGVyZWdpc3RlciBmcm9tIHRoZSBzYW1lIHBsYWNlLiAg Ki8NCiAgIGlmIChfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcykNCkBA IC00NjQsNiArNDc3LDEzIEBAIGZyYW1lX2R1bW15ICh2b2lkKQ0KICAgdm9p ZCAqdGJhc2UsICpkYmFzZTsNCiAgIHRiYXNlID0gMDsNCiAgIENSVF9HRVRf UkZJQl9EQVRBIChkYmFzZSk7DQorI2lmZGVmIE1EX0hBVkVfQ09NUEFDVF9F SA0KKyAgaWYgKF9fcmVnaXN0ZXJfZnJhbWVfaW5mb19oZWFkZXJfYmFzZXMg JiYgX19HTlVfRUhfRlJBTUVfSERSICYmDQorICAgICAgX19HTlVfRUhfRlJB TUVfSERSWzBdID4gMSkNCisgICAgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX2hl YWRlcl9iYXNlcyAoX19HTlVfRUhfRlJBTUVfSERSLCAmb2JqZWN0LA0KKwkJ CQkJdGJhc2UsIGRiYXNlKTsNCisgIGVsc2UNCisjZW5kaWYgLyogTURfSEFW RV9DT01QQUNUX0VIICovDQogICBpZiAoX19yZWdpc3Rlcl9mcmFtZV9pbmZv X2Jhc2VzKQ0KICAgICBfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMgKF9f RUhfRlJBTUVfQkVHSU5fXywgJm9iamVjdCwgdGJhc2UsIGRiYXNlKTsNCiAj ZWxzZQ0KSW5kZXg6IGxpYmdjYy91bndpbmQtZ2VuZXJpYy5oDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gbGliZ2NjL3Vud2luZC1nZW5lcmljLmgJ KHJldmlzaW9uIDIzMTIzOCkNCisrKyBsaWJnY2MvdW53aW5kLWdlbmVyaWMu aAkod29ya2luZyBjb3B5KQ0KQEAgLTE3NCw2ICsxNzQsOCBAQCBleHRlcm4g X1Vud2luZF9QdHIgX1Vud2luZF9HZXRJUCAoc3RydWN0IF9VbndpbmRfQw0K IGV4dGVybiBfVW53aW5kX1B0ciBfVW53aW5kX0dldElQSW5mbyAoc3RydWN0 IF9VbndpbmRfQ29udGV4dCAqLCBpbnQgKik7DQogZXh0ZXJuIHZvaWQgX1Vu d2luZF9TZXRJUCAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLCBfVW53aW5k X1B0cik7DQogDQorZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX1Vud2luZF9HZXRF aEVuY29kaW5nIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOw0KKw0KIC8q IEBAQCBSZXRyaWV2ZSB0aGUgQ0ZBIG9mIHRoZSBnaXZlbiBjb250ZXh0LiAg Ki8NCiBleHRlcm4gX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0Q0ZBIChzdHJ1 Y3QgX1Vud2luZF9Db250ZXh0ICopOw0KIA0KSW5kZXg6IGxpYmdjYy9jb25m aWcvdC1laC1kdzItZGlwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g bGliZ2NjL2NvbmZpZy90LWVoLWR3Mi1kaXAJKHJldmlzaW9uIDIzMTIzOCkN CisrKyBsaWJnY2MvY29uZmlnL3QtZWgtZHcyLWRpcAkod29ya2luZyBjb3B5 KQ0KQEAgLTEsMyArMSwzIEBADQogIyBVc2UgdW53aW5kLWR3Mi1mZGUtZGlw Lg0KLUxJQjJBRERFSCA9ICQoc3JjZGlyKS91bndpbmQtZHcyLmMgJChzcmNk aXIpL3Vud2luZC1kdzItZmRlLWRpcC5jIFwNCi0gICQoc3JjZGlyKS91bndp bmQtc2psai5jICQoc3JjZGlyKS91bndpbmQtYy5jDQorTElCMkFEREVIID0g JChzcmNkaXIpL3Vud2luZC1kdzIuYyAkKHNyY2RpcikvdW53aW5kLWNvbXBh Y3QuYyBcDQorICAkKHNyY2RpcikvdW53aW5kLWR3Mi1mZGUtZGlwLmMgJChz cmNkaXIpL3Vud2luZC1zamxqLmMgJChzcmNkaXIpL3Vud2luZC1jLmMNCklu ZGV4OiBsaWJnY2MvY29uZmlnL21pcHMvbWlwczE2LlMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBsaWJnY2MvY29uZmlnL21pcHMvbWlwczE2LlMJ KHJldmlzaW9uIDIzMTIzOCkNCisrKyBsaWJnY2MvY29uZmlnL21pcHMvbWlw czE2LlMJKHdvcmtpbmcgY29weSkNCkBAIC02MjQsNiArNjI0LDE4IEBAIENB TExfU1RVQl9OT19SRVQgKF9fbWlwczE2X2NhbGxfc3R1Yl8xMCwgMTApDQog ICAgYmVpbmcgY2FsbGVkIGlzIDE2IGJpdHMsIGluIHdoaWNoIGNhc2UgdGhl IGNvcHkgaXMgdW5uZWNlc3Nhcnk7DQogICAgaG93ZXZlciwgaXQncyBmYXN0 ZXIgdG8gYWx3YXlzIGRvIHRoZSBjb3B5LiAgKi8NCiANCisjaWZkZWYgX19H TlVfQ09NUEFDVF9FSF9fDQorI2RlZmluZSBDQUxMX1NUVUJfUkVUKE5BTUUs IENPREUsIE1PREUpCVwNCitTVEFSVEZOIChOQU1FKTsJCQkJXA0KKwltb3Zl ICAgICQxOCwkMzE7CQlcDQorCVNUVUJfQVJHU18jI0NPREU7CQlcDQorCS5z ZXQgICAgbm9yZW9yZGVyOwkJXA0KKwlqYWxyICAgICQyOwkJCVwNCisJbW92 ZSAgICAkMjUsJDI7CQkJXA0KKwkuc2V0ICAgIHJlb3JkZXI7CQlcDQorCU1P VkVfIyNNT0RFIyNfUkVUIChmLCAkMTgpOwlcDQorCUVOREZOIChOQU1FKQ0K KyNlbHNlDQogI2RlZmluZSBDQUxMX1NUVUJfUkVUKE5BTUUsIENPREUsIE1P REUpCQkJCQlcDQogQ0VfU1RBUlRGTiAoTkFNRSk7CQkJCQkJCVwNCiAJLmNm aV9zdGFydHByb2M7CQkJCQkJCVwNCkBAIC02NDIsNiArNjU0LDcgQEAgQ0Vf U1RBUlRGTiAoTkFNRSk7CQkJCQkJCVwNCiAJTU9WRV8jI01PREUjI19SRVQg KGYsICQxOCk7CQkJCQlcDQogCS5jZmlfZW5kcHJvYzsJCQkJCQkJXA0KIAlD RV9FTkRGTiAoTkFNRSkNCisjZW5kaWYNCiANCiAvKiBGaXJzdCwgaW5zdGFu dGlhdGUgdGhlIHNpbmdsZS1mbG9hdCBzZXQuICAqLw0KIA0KSW5kZXg6IGxp YmdjYy9jb25maWcvbWlwcy9saW51eC11bndpbmQuaA0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIGxpYmdjYy9jb25maWcvbWlwcy9saW51eC11bndp bmQuaAkocmV2aXNpb24gMjMxMjM4KQ0KKysrIGxpYmdjYy9jb25maWcvbWlw cy9saW51eC11bndpbmQuaAkod29ya2luZyBjb3B5KQ0KQEAgLTI2LDYgKzI2 LDggQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5U SU1FIHJlc3BlY3QNCiAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkg YSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lDQogICAgc3RhdGUg ZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhl IHN0cnVjdHMuICAqLw0KIA0KKyNpbmNsdWRlICJjb25maWcvbWlwcy9taXBz LXVud2luZC5oIg0KKw0KICNpbmNsdWRlIDxzaWduYWwuaD4NCiAjaW5jbHVk ZSA8YXNtL3VuaXN0ZC5oPg0KIA0KSW5kZXg6IGxpYmdjYy9jb25maWcvbWlw cy9taXBzLXVud2luZC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g bGliZ2NjL2NvbmZpZy9taXBzL21pcHMtdW53aW5kLmgJKHJldmlzaW9uIDAp DQorKysgbGliZ2NjL2NvbmZpZy9taXBzL21pcHMtdW53aW5kLmgJKHJldmlz aW9uIDApDQpAQCAtMCwwICsxLDE5NSBAQA0KKy8qIENvbXBhY3QgRUggdW53 aW5kaW5nIHN1cHBvcnQgZm9yIE1JUFMuDQorICAgQ29weXJpZ2h0IChDKSAy MDEyLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorDQor VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLg0KKw0KK0dDQyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 DQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCit0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBv cHRpb24pDQorYW55IGxhdGVyIHZlcnNpb24uDQorDQorR0NDIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQor YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YNCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCitV bmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFu dGVkIGFkZGl0aW9uYWwNCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhl IEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uDQorMy4x LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4NCisNCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQNCithIGNvcHkgb2Yg dGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtOw0KK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENP UFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQ0KKzxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovDQorDQorI2lmZGVm IE1EX0hBVkVfQ09NUEFDVF9FSA0KKw0KKyNkZWZpbmUgRFdBUkZfU1BfUkVH Tk8gMjkNCisNCisjaWYgX01JUFNfU0lNID09IF9BQklPMzINCisjZGVmaW5l IE1JUFNfRUhfU1RBQ0tfQUxJR04gOA0KKyNlbHNlDQorI2RlZmluZSBNSVBT X0VIX1NUQUNLX0FMSUdOIDE2DQorI2VuZGlmDQorDQorI2RlZmluZSBWUkZf MCAzMg0KKw0KKy8qIFJlY29yZCB0aGUgcHVzaCBvZiBhIHJlZ2lzdGVyIGlu IEZyYW1lU3RhdGUgRlMuICAqLw0KKw0KK3N0YXRpYyBpbnQNCityZWNvcmRf cHVzaCAoX1Vud2luZF9GcmFtZVN0YXRlICpmcywgaW50IHJlZywgaW50IG9m ZnNldCkNCit7DQorICBpbnQgaWR4ID0gRFdBUkZfUkVHX1RPX1VOV0lORF9D T0xVTU4gKHJlZyk7DQorDQorICBvZmZzZXQgLT0gZHdhcmZfcmVnX3NpemVf dGFibGVbaWR4XTsNCisgIGZzLT5yZWdzLnJlZ1tpZHhdLmhvdyA9IFJFR19T QVZFRF9PRkZTRVQ7DQorICBmcy0+cmVncy5yZWdbaWR4XS5sb2Mub2Zmc2V0 ID0gb2Zmc2V0Ow0KKyAgcmV0dXJuIG9mZnNldDsNCit9DQorDQorLyogQWRq dXN0IHRoZSBjZmFfb2Zmc2V0IGJ5IHZhbHVlIFZBTC4gIFJlY29yZCB0aGUg bmV3IGNmYV9vZmZzZXQgaW4NCisgICBGcmFtZVN0YXRlIEZTLiAgKi8NCisN CitzdGF0aWMgdm9pZA0KK3JlY29yZF9jZmFfYWRqdXN0bWVudCAoX1Vud2lu ZF9GcmFtZVN0YXRlICpmcywgX3VsZWIxMjhfdCB2YWwpDQorew0KKyAgaW50 IGk7DQorICBmcy0+cmVncy5jZmFfb2Zmc2V0ICs9IHZhbDsNCisgIC8qIElu IGNhc2Ugd2Ugc2VlIGFuIGFkanVzdG1lbnQgYWZ0ZXIgcHVzaGVzLCBpdCBt ZWFucyB0aGF0DQorICAgICB0aGUgcmVnaXN0ZXJzIGFyZW4ndCBzYXZlZCBh dCB0aGUgdG9wIG9mIHRoZSBmcmFtZSwgcHJvYmFibHkNCisgICAgIGR1ZSB0 byBhIHZhcmFyZ3Mgc2F2ZSBhcmVhLiAgQWRqdXN0IHRoZSByZWNvcmRlZCBv ZmZzZXRzLiAgKi8NCisgIGZvciAoaSA9IDA7IGkgPCBEV0FSRl9GUkFNRV9S RUdJU1RFUlMgKyAxOyBpKyspDQorICAgIGlmIChmcy0+cmVncy5yZWdbaV0u aG93ID09IFJFR19TQVZFRF9PRkZTRVQpDQorICAgICAgZnMtPnJlZ3MucmVn W2ldLmxvYy5vZmZzZXQgLT0gdmFsOw0KK30NCisNCisvKiBQcm9jZXNzIHRo ZSBmcmFtZSB1bndpbmRpbmcgb3Bjb2Rlcy4gICovDQorDQorc3RhdGljIF9V bndpbmRfUmVhc29uX0NvZGUNCittZF91bndpbmRfY29tcGFjdCAoc3RydWN0 IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCBBVFRSSUJVVEVfVU5VU0VELA0K KwkJICAgX1Vud2luZF9GcmFtZVN0YXRlICpmcywgY29uc3QgdW5zaWduZWQg Y2hhciAqKnBwKQ0KK3sNCisgIHVuc2lnbmVkIGNoYXIgb3A7DQorICBfdWxl YjEyOF90IHZhbDsNCisgIGludCBwdXNoX29mZnNldDsNCisgIGludCBpOw0K KyAgaW50IG47DQorICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKnBwOw0K Kw0KKyAgcHVzaF9vZmZzZXQgPSAwOw0KKyAgZnMtPnJlZ3MuY2ZhX2hvdyA9 IENGQV9SRUdfT0ZGU0VUOw0KKyAgZnMtPnJlZ3MuY2ZhX3JlZyA9IFNUQUNL X1BPSU5URVJfUkVHTlVNOw0KKyAgZnMtPnJlZ3MuY2ZhX29mZnNldCA9IDA7 DQorICBmcy0+cmV0YWRkcl9jb2x1bW4gPSAzMTsNCisNCisgIHdoaWxlICgx KQ0KKyAgICB7DQorICAgICAgb3AgPSAqKHArKyk7DQorICAgICAgc3dpdGNo IChvcCkNCisJew0KKwljYXNlIDAgLi4uIDB4Mzk6DQorCSAgLyogSW5jcmVt ZW50IHN0YWNrIHBvaW50ZXIuICAqLw0KKwkgIHJlY29yZF9jZmFfYWRqdXN0 bWVudCAoZnMsIChvcCArIDEpICogTUlQU19FSF9TVEFDS19BTElHTik7DQor CSAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIDB4NDAgLi4uIDB4NDc6DQor CSAgLyogUHVzaCBWUlsxNl0gdG8gVlJbMTYreF0gYW5kIFZSWzMxXSAqLw0K KwkgIHB1c2hfb2Zmc2V0ID0gcmVjb3JkX3B1c2ggKGZzLCAzMSwgcHVzaF9v ZmZzZXQpOw0KKwkgIGZvciAoaSA9IG9wICYgNzsgaSA+PSAwOyBpLS0pDQor CSAgICBwdXNoX29mZnNldCA9IHJlY29yZF9wdXNoIChmcywgMTYgKyBpLCBw dXNoX29mZnNldCk7DQorCSAgYnJlYWs7DQorDQorCWNhc2UgMHg0OCAuLi4g MHg0ZjoNCisJICAvKiBQdXNoIFZSWzE2XSB0byBWUlsxNit4XSwgVlJbMzBd IGFuZCBWUlszMV0gKi8NCisJICBwdXNoX29mZnNldCA9IHJlY29yZF9wdXNo IChmcywgMzEsIHB1c2hfb2Zmc2V0KTsNCisJICBwdXNoX29mZnNldCA9IHJl Y29yZF9wdXNoIChmcywgMzAsIHB1c2hfb2Zmc2V0KTsNCisJICBmb3IgKGkg PSBvcCAmIDc7IGkgPj0gMDsgaS0tKQ0KKwkgICAgcHVzaF9vZmZzZXQgPSBy ZWNvcmRfcHVzaCAoZnMsIDE2ICsgaSwgcHVzaF9vZmZzZXQpOw0KKwkgIGJy ZWFrOw0KKw0KKwljYXNlIDB4NTAgLi4uIDB4NTc6DQorCSAgLyogUmVzdG9y ZSBzdGFjayBwb2ludGVyIGZyb20gZnJhbWUgcG9pbnRlciAqLw0KKwkgIGZz LT5yZWdzLmNmYV9yZWcgPSAob3AgJiA3KSArIDE2Ow0KKwkgIGZzLT5yZWdz LmNmYV9vZmZzZXQgPSAwOw0KKwkgIGJyZWFrOw0KKw0KKwljYXNlIDB4NTg6 DQorCSAgLyogTGFyZ2UgU1AgaW5jcmVtZW50LiAgKi8NCisJICBwID0gcmVh ZF91bGViMTI4IChwLCAmdmFsKTsNCisJICByZWNvcmRfY2ZhX2FkanVzdG1l bnQgKGZzLCAodmFsICsgMTI5KSAqIE1JUFNfRUhfU1RBQ0tfQUxJR04pOw0K KwkgIGJyZWFrOw0KKw0KKwljYXNlIDB4NTk6DQorCSAgLyogUHVzaCBWUlt4 XSB0byBWUlt4K3ldICovDQorCSAgb3AgPSAqKHArKyk7DQorCSAgbiA9IG9w ID4+IDM7DQorCSAgZm9yIChpID0gb3AgJiA3OyBpID49IDA7IGktLSkNCisJ ICAgIHB1c2hfb2Zmc2V0ID0gcmVjb3JkX3B1c2ggKGZzLCBuICsgaSwgcHVz aF9vZmZzZXQpOw0KKwkgIGJyZWFrOw0KKw0KKwljYXNlIDB4NWE6DQorCSAg LyogUHVzaCBWUkZbeF0gdG8gVlJGW3greV0gKi8NCisJICBvcCA9ICoocCsr KTsNCisJICBuID0gKG9wID4+IDMpICsgVlJGXzA7DQorCSAgZm9yIChpID0g b3AgJiA3OyBpID49IDA7IGktLSkNCisJICAgIHB1c2hfb2Zmc2V0ID0gcmVj b3JkX3B1c2ggKGZzLCBuICsgaSwgcHVzaF9vZmZzZXQpOw0KKwkgIGJyZWFr Ow0KKw0KKwljYXNlIDB4NWI6DQorCSAgLyogUmVzdG9yZSB0aGUgQ0ZBIHRv IHN0YWNrIHBvaW50ZXIuICAqLw0KKwkgIGZzLT5yZWdzLmNmYV9yZWcgPSBT VEFDS19QT0lOVEVSX1JFR05VTTsNCisJICBmcy0+cmVncy5jZmFfb2Zmc2V0 ID0gMDsNCisJICBicmVhazsNCisNCisJY2FzZSAweDVjOg0KKwkgIC8qIEZp bmlzaC4gICovDQorCSAgKnBwID0gcDsNCisJICByZXR1cm4gX1VSQ19OT19S RUFTT047DQorDQorCWNhc2UgMHg1ZDoNCisJICAvKiBObyB1bndpbmQuICAq Lw0KKwkgIHJldHVybiBfVVJDX0VORF9PRl9TVEFDSzsNCisNCisJY2FzZSAw eDVlOg0KKwkgIC8qIFJlc3RvcmUgU1AgZnJvbSBWUlszMF0gKi8NCisJICBm cy0+cmVncy5jZmFfcmVnID0gMzA7DQorCSAgZnMtPnJlZ3MuY2ZhX29mZnNl dCA9IDA7DQorCSAgYnJlYWs7DQorDQorCWNhc2UgMHg1ZjoNCisJICAvKiBO T1AgKi8NCisJICBicmVhazsNCisNCisJY2FzZSAweDYwIC4uLiAweDZiOg0K KwkgIC8qIFB1c2ggVlJGWzIwXSB0byBWUkZbMjAgKyB4XSAqLw0KKwkgIGZv ciAoaSA9IG9wICYgMHhmOyBpID49IDA7IGktLSkNCisJICAgIHB1c2hfb2Zm c2V0ID0gcmVjb3JkX3B1c2ggKGZzLCBWUkZfMCArIDIwICsgaSwgcHVzaF9v ZmZzZXQpOw0KKwkgIGJyZWFrOw0KKw0KKwljYXNlIDB4NmMgLi4uIDB4NmY6 DQorCSAgLyogTUlQUzE2IHB1c2ggVlJbMTZdLCBWUlsxN10sIFZSWzE4K3hd LVZSWzIzXSwgVlJbMzFdICovDQorCSAgcHVzaF9vZmZzZXQgPSByZWNvcmRf cHVzaCAoZnMsIDMxLCBwdXNoX29mZnNldCk7DQorCSAgZm9yIChpID0gMjM7 IGkgPj0gMTggKyAob3AgJiAzKTsgaS0tKQ0KKwkgICAgcHVzaF9vZmZzZXQg PSByZWNvcmRfcHVzaCAoZnMsIGksIHB1c2hfb2Zmc2V0KTsNCisJICBwdXNo X29mZnNldCA9IHJlY29yZF9wdXNoIChmcywgMTcsIHB1c2hfb2Zmc2V0KTsN CisJICBwdXNoX29mZnNldCA9IHJlY29yZF9wdXNoIChmcywgMTYsIHB1c2hf b2Zmc2V0KTsNCisJICBicmVhazsNCisNCisJY2FzZSAweDcwIC4uLiAweDdm OiAgICANCisJICAvKiBQdXNoIFZSWzE2XSB0byBWUlsxNit4XSwgVlJbMjhd LCBWUlszMV0NCisJICAgICBhbmQgb3B0aW9uYWxseSBWUlszMF0uICAqLw0K KwkgIHB1c2hfb2Zmc2V0ID0gcmVjb3JkX3B1c2ggKGZzLCAzMSwgcHVzaF9v ZmZzZXQpOw0KKwkgIGlmIChvcCAmIDB4MDgpDQorCSAgICBwdXNoX29mZnNl dCA9IHJlY29yZF9wdXNoIChmcywgMzAsIHB1c2hfb2Zmc2V0KTsNCisJICBw dXNoX29mZnNldCA9IHJlY29yZF9wdXNoIChmcywgMjgsIHB1c2hfb2Zmc2V0 KTsNCisJICBmb3IgKGkgPSBvcCAmIDc7IGkgPj0gMDsgaS0tKQ0KKwkgICAg cHVzaF9vZmZzZXQgPSByZWNvcmRfcHVzaCAoZnMsIDE2ICsgaSwgcHVzaF9v ZmZzZXQpOw0KKwkgIGJyZWFrOw0KKw0KKwlkZWZhdWx0Og0KKwkgIHJldHVy biBfVVJDX0ZBVEFMX1BIQVNFMV9FUlJPUjsNCisgICAgICAgIH0NCisgICAg fQ0KK30NCisNCisjZW5kaWYgLyogTURfSEFWRV9DT01QQUNUX0VIICovDQo= --_003_FD3DCEAC5B03E9408544A1E416F112420192CE53A1NAMBX04mgcmen_--