From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24355 invoked by alias); 4 Oct 2012 00:23:18 -0000 Received: (qmail 24259 invoked by uid 22791); 4 Oct 2012 00:22:56 -0000 X-SWARE-Spam-Status: No, hits=-4.5 required=5.0 tests=AWL,BAYES_50,KHOP_RCVD_UNTRUST,KHOP_SPAMHAUS_DROP,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,TW_BJ,TW_TM X-Spam-Check-By: sourceware.org Received: from mga14.intel.com (HELO mga14.intel.com) (143.182.124.37) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 04 Oct 2012 00:22:23 +0000 Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga102.ch.intel.com with ESMTP; 03 Oct 2012 17:22:20 -0700 X-ExtLoop1: 1 Received: from fmsmsx106.amr.corp.intel.com ([10.19.9.37]) by azsmga001.ch.intel.com with ESMTP; 03 Oct 2012 17:22:17 -0700 Received: from fmsmsx102.amr.corp.intel.com ([169.254.2.79]) by FMSMSX106.amr.corp.intel.com ([169.254.6.8]) with mapi id 14.01.0355.002; Wed, 3 Oct 2012 17:22:17 -0700 From: "Iyer, Balaji V" To: "Joseph S. Myers" CC: "gcc-patches@gcc.gnu.org" Subject: [Ping]FW: [PATCH] Cilk Plus merging to trunk (2 of n) Date: Thu, 04 Oct 2012 00:23:00 -0000 Message-ID: Content-Type: multipart/mixed; boundary="_002_BF230D13CA30DD48930C31D40993300016C83F89FMSMSX102amrcor_" MIME-Version: 1.0 X-IsSubscribed: yes 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 X-SW-Source: 2012-10/txt/msg00323.txt.bz2 --_002_BF230D13CA30DD48930C31D40993300016C83F89FMSMSX102amrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 20049 Hi Joseph, Did you get a chance to look at this submission? I think I have fixed all = the changes you have mentioned. Is it OK for trunk? Thanks, Balaji V. Iyer. >-----Original Message----- >From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches- >owner@gcc.gnu.org] On Behalf Of Iyer, Balaji V >Sent: Wednesday, September 26, 2012 7:16 PM >To: Joseph Myers >Cc: gcc-patches@gcc.gnu.org; aldyh@redhat.com; rth@redhat.com; >law@redhat.com >Subject: RE: [PATCH] Cilk Plus merging to trunk (2 of n) > >Hello Joseph, > In my last patch, I forgot to add the change Richard Guenther wanted me >to make. He wanted me to move the ARRAY_NOTATION_REF node from tree.def >to c-family/c-common.def. Here is a new one that has this change. I am so= rry for >this. > >Here are ChangeLog entries: > >gcc/ChangeLog >2012-09-26 Balaji V. Iyer > > * tree.h (array_notation_reduce_type): Added new enumerator. > * Makefile.in (OBJS): Added array-notation-common.o. > * doc/passes.texi (Cilk Plus Transformation): Documented array > notation and overall transformations for Cilk Plus. > * doc/invoke.texi (C Dialect Options): Documented -fcilkplus flag. > * doc/generic.texi (Storage References): Documented >ARRAY_NOTATION_REF > tree addition. > * tree-pretty-pretty.c (dump_generic_node): Added ARRAY_NOTATION_R= EF > case. > * array-notation-common.c: New file. > >gcc/c-family/ChangeLog >2012-09-26 Balaji V. Iyer > > * c-common.h (build_array_notation_expr): New function declaration. > (ARRAY_NOTATION_ARRAY): Added new #define. > (ARRAY_NOTATION_CHECK): Likewise. > (ARRAY_NOTATION_START): Likewise. > (ARRAY_NOTATION_LENGTH): Likewise. > (ARRAY_NOTATION_STRIDE): Likewise. > (ARRAY_NOTATION_TYPE): Likewise. > * c-common.def: Added new tree ARRAY_NOTATION_REF. > * c-common.c (c_define_builtins): Added a call to initialize array > notation builtin functions. > (c_common_init_ts): Set ARRAY_NOTATION_REF as typed. > * c.opt (-fcilkplus): Define new command line switch. > >gcc/c/ChangeLog >2012-09-26 Balaji V. Iyer > > * c-typeck.c (convert_arguments): Added a check if tree contains > array notation expressions before throwing errors or doing anythin= g. > * Make-lang.in (C_AND_OBJC_OBJS): Added c-array-notation.o. > * c-parser.c (c_parser_compound_statement): Check if array notatio= n code > is used in tree, if so, then transform them into appropriate C cod= e. > (c_parser_expr_no_commas): Check if array notation is used in LHS = or > RHS, if so, then build array notation expression instead of regular > modify. > (c_parser_postfix_expression_after_primary): Added a check for col= on(s) > after square braces, if so then handle it like an array notation. = Also, > break up array notations in unary op if found. > (c_parser_array_notation): New function. > * c-array-notation.c: New file. > >gcc/testsuite/ChangeLog >2012-09-26 Balaji V. Iyer > > * gcc.dg/cilk-plus/array_notation/execute/execute.exp: New script. > * gcc.dg/cilk-plus/array_notation/compile/compile.exp: Likewise. > * gcc.dg/cilk-plus/array_notation/errors/errors.exp: Likewise. > * gcc.dg/cilk-plus/array_notation/execute/sec_implicit_ex.c: New t= est. > * gcc.dg/cilk-plus/array_notation/execute/if_test.c: Likewise. > * gcc.dg/cilk-plus/array_notation/execute/gather_scatter.c: Likewi= se. > * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double2.c: > Likewise. > * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double.c: > Likewise. > * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_custom.c: Lik= ewise. > * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_mutating.c: > Likewise. > * gcc.dg/cilk-plus/array_notation/execute/array_test_ND.c: Likewis= e. > * gcc.dg/cilk-plus/array_notation/execute/array_test2.c: Likewise. > * gcc.dg/cilk-plus/array_notation/execute/array_test1.c: Likewise. > * gcc.dg/cilk-plus/array_notation/compile/sec_implicit_ex.c: Likew= ise. > * gcc.dg/cilk-plus/array_notation/compile/gather_scatter.c: Likewi= se. > * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double2.c: > Likewise. > * gcc.dg/cilk-plus/array_notation/compile/array_test_ND.c: Likewis= e. > * gcc.dg/cilk-plus/array_notation/compile/if_test.c: Likewise. > * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double.c: > Likewise. > * gcc.dg/cilk-plus/array_notation/compile/array_test1.c: Likewise > * gcc.dg/cilk-plus/array_notation/compile/array_test2.c: Likewise. > * gcc.dg/cilk-plus/array_notation/errors/sec_implicit.c: Likewise. > * gcc.dg/cilk-plus/array_notation/errors/sec_implicit2.c: Likewise. > * gcc.dg/cilk-plus/array_notation/errors/rank_mismatch.c: Likewise. > * gcc.dg/cilk-plus/array_notation/errors/parse_error.c: Likewise. > * gcc.dg/cilk-plus/array_notation/errors/parse_error2.c: Likewise. > * gcc.dg/cilk-plus/array_notation/errors/parse_error3.c: Likewise. > * gcc.dg/cilk-plus/array_notation/errors/parse_error4.c: Likewise. > * gcc.dg/cilk-plus/array_notation/errors/sec_reduce_max_min_ind.c: > Likewise. > >Thanks, > >Balaji V. Iyer. > >>-----Original Message----- >>From: Iyer, Balaji V >>Sent: Wednesday, September 26, 2012 5:54 PM >>To: 'Joseph Myers' >>Cc: gcc-patches@gcc.gnu.org; aldyh@redhat.com; rth@redhat.com; >>law@redhat.com >>Subject: RE: [PATCH] Cilk Plus merging to trunk (2 of n) >> >>Hello Joseph, >> Please see my responses below and I have attached a fixed patch: >> >>>-----Original Message----- >>>From: Joseph Myers [mailto:joseph@codesourcery.com] >>>Sent: Sunday, September 23, 2012 4:45 PM >>>To: Iyer, Balaji V >>>Cc: gcc-patches@gcc.gnu.org; aldyh@redhat.com; rth@redhat.com; >>>law@redhat.com >>>Subject: Re: [PATCH] Cilk Plus merging to trunk (2 of n) >>> >>>On Sun, 23 Sep 2012, Iyer, Balaji V wrote: >>> >>>> Hello Everyone, >>>> Attached, please find a patch that will implement Cilk Plus >>>> Array Notations for the C compiler. Array notations are indented to >>>> allow programmers to directly express parallelism in their programs. >>>> Array notations can be used to possibly see a more predictable >>>> performance improvement, hardware resource-utilization and >>>> vectorization. To enable the compiler recognize array notation >>>> syntax, we have added a flag "-fcilkplus." If this flag is not used, >>>> none of these changes are visible to the compiler user. For more >>>> information and examples about array notations please see Chapter 4 >>>> in the Cilk Plus Specification >>>> >>>(http://software.intel.com/sites/default/files/m/6/3/1/cilk_plus_langu >>>a >>>ge_specif >>>ication.pdf). >>> >>>There seem to be a lot of deficiencies in this specification. I list >>>some here - I don't want answers in email explaining what is intended >>>(unless it's already explained in the specification and I missed it), >>>I want the specification revised to describe things in closer relation >>>to C standard terms, and then you can answer in email pointing to the >>>relevant wording in the improved specification - and to the testcases >>>in your patch verifying that the semantics are properly implemented, >>>but without needing to elaborate beyond pointing to specification text >>>and >>testcases for each question. >>> >>>What syntax productions, in C11 terms, are , >>bound>, and in the syntax given for section >>>operators? Are there constraints that , and >>> must be of integer >>type? >>>Are there other constraints on their types and values? >>>(For example, must anything be constant? If there isn't such a >>>requirement, what exactly is the requirement that "The right-hand side >>>expression must have the same rank and size as the array context." - >>>if a constraint, in what cases is it a constraint? Maybe a constraint >>>that values must match if integer constant expressions, with >>>non-matching runtime values, at least one not an integer constant >>>expression, being undefined behavior at runtime, for example? What >>>anyway is "size" in that quoted sentence? Unlike "rank" and "shape", >>>it doesn't seem to be a defined term.) >>> >>>What do you mean, in standard terms, by "must have a declared size"? >>>How is this defined in relation to standard C array-to-pointer decay? >>>What about adjustment of function parameter types? What about array >>>sizes >>declared as [*]? >>>What if the is in parentheses? >>> >>>Should I take it, from the absence of any restrictions mentioned on >>>this subject, that the array that is sectioned may have elements of >>>arbitrary type - so it's valid to operate this way on arrays of >>>pointers, complex numbers or structures, for example? But that the >>>usual constraints on assignment apply, so that if you try A[:] =3D B[:] >>>where A and B are two-dimensional arrays, this is a constraint >>>violation, because the elements that would be assigned elementwise are >>themselves still arrays and C doesn't allow array assignment? >>> >>>Is it valid or invalid to have an expression of the form (A[1:2])[1:2] >>>with parentheses around a partial array section expression, of which a >>>further section is taken? It's not in the syntax given, but that >>>syntax doesn't actually show the precise syntax productions added to C11. >>> >>>What is the type of an array section expression? What is the result >>>of applying sizeof to such an expression? What about GNU C typeof? >>>Use in >>>C11 _Generic? >>> >>>Can such expressions be used in conditional expressions, scalar ? >>>section >>>: other-section? If you'd defined types, at least this could be >>>deduced from the existing C rules on conditional expressions that say >>>what the >>permitted types are. >>>Can you use them with comma operators, A[:] =3D (B, C[:])? It's far >>>from clear from the document as-is to what extent such expressions >>>have an existence with types and values like normal expressions, in >>>which case this would of course be permitted, as opposed to being >>>special-case things for >>the RHS of assignments. >>> >>>You say (4.3.2.2) that certain operators are applied with the same >>>precedence and rules on permitted operands as for scalars. What >>>promotions apply? If operations are carried out on two signed char >>>arrays, for example, are the elements considered to be promoted to >>>int, resulting in an expression whose type is thought of as a section >>>of an array of int, which may then be converted back to signed char if >>>stored in a signed char array? (Thus, internal operations take place >>>in int and what would have been overflow in signed char would not >>>cause undefined >>>behavior.) >>> >>>In general, do such conversions apply between different operands, and >>>on assignment? >>> >>>I note you do not mention shift operators in the list in 4.3.2.2 of >>>those permitted - obviously that requires testcases that they are duly r= ejected. >>> >>>Are functions such as __sec_reduce_add defined to apply the relevant >>>operation to an accumulated value and each element of the section in >>>turn, in some unspecified order? Or may it evaluate, for example, a >>>sum of four elements as (a >>>+ b) + (c + d)? What about if a user function is provided? >>> >>>I take it each function has constraints corresponding to those on the >>>relevant arithmetic operation? (For example, __sec_reduce_add >>>couldn't be called for >>>pointers.) Can the *zero functions be called for pointers (testing >>>whether they are NULL)? What about the *max* and *min* functions? >>>What about those functions for floating-point - do they follow the >>>semantics of fmax / fmin regarding NaNs? Are the results unspecified >>>if the answer is a floating-point zero and both +0.0 and -0.0 are presen= t? >> >>Here is a link to the latest spec. This should clear several of the >>questions you are seeking. >>(http://software.intel.com/sites/default/files/m/4/e/7/3/1/40297- >>Intel_Cilk_plus_lang_spec_2.htm#array) >> >>> >>>(Regarding the patch itself, see my previous comments on previous >>>patches in this series. For example: >>> >>>* All functions should have comments explaining the semantics of their >>>arguments and return values. >> >>Fixed. Please see attached patch. >> >>> >>>* Diagnostic function calls should have explicit locations passed. >> >>Fixed. >> >>> >>>* Every diagnostic (that's not an ICE) should have a corresponding >>>testcase in the testsuite for the associated cases of invalid code - I >>>see no tests using dg-error at all in this patch. Every case where >>>the specification says something is not permitted should have an >>>associated check in the compiler, diagnostic and testcase. >> >>Added. Please see testsuite/gcc.dg/cilk-plus/errors directory in the patc= h. >> >>> >>>* Diagnostic formatting also needs fixing to follow the GNU Coding Stand= ards. >>> >>>* The usage >>> >>>+ error ("__sec_implicit_index parameter must be constant integer " >>>+ "expression"); >>>+ error ("Bailing out due to previous error"); >>>+ exit (ICE_EXIT_CODE); >>> >>>should be avoided. Front-end code should never need to call exit >>>directly. If you have an internal error - something that should not >>>be possible for any user code, valid or invalid - use internal_error. >>>If an error can occur for invalid user code, just call error_at and >>>allow the compiler to continue execution to find further problems in >>>the user's code, >>without bailing out. >> >>Fixed. >> >>> >>>* There should be nothing x86-specific about the testcases so they >>>shouldn't need to be conditioned on x86 targets. >> >>OK, removed from the scripts. >> >>> >>>* Avoid using "int" as a type in the compiler to count the number of >>>some entity on the host, use size_t instead, there's no need to add >>>new cases that will cause trouble when someone wants to build a >>>program with 2^31 of something, although there are plenty of such cases >already. >> >>OK. >> >>> >>>* Instead of casting the result of xmalloc, use existing macros such >>>as >>XNEWVEC. >> >>Fixed. >> >>> >>>* Use @option not @code for option named in the manual. >> >>Fixed. >> >>> >>>* Instead of declaring non-static functions >>> >>>+int extract_sec_implicit_index_arg (tree); bool >>>+is_sec_implicit_index_fn (tree); void array_notation_init_builtins >>>+(void); >>> >>>in a source file (array-notation-common.c), either make them static or >>>declare them in an appropriate header included everywhere needing >>>those >>declarations. >> >>Fixed. >> >>> >> >>Attached, please find a fixed patch for array notation for C. OK for trun= k? >> >>Here is the ChangeLog for the Changes: >> >>gcc/ChangeLog >>2012-09-26 Balaji V. Iyer >> >> * tree.h (array_notation_reduce_type): Added new enumerator. >> (ARRAY_NOTATION_ARRAY): Added new #define. >> (ARRAY_NOTATION_CHECK): Likewise. >> (ARRAY_NOTATION_START): Likewise. >> (ARRAY_NOTATION_LENGTH): Likewise. >> (ARRAY_NOTATION_STRIDE): Likewise. >> (ARRAY_NOTATION_TYPE): Likewise. >> * tree.def: Added new tree ARRAY_NOTATION_REF. >> * Makefile.in (OBJS): Added array-notation-common.o. >> * doc/passes.texi (Cilk Plus Transformation): Documented array >> notation and overall transformations for Cilk Plus. >> * doc/invoke.texi (C Dialect Options): Documented -fcilkplus flag. >> * doc/generic.texi (Storage References): Documented >>ARRAY_NOTATION_REF >> tree addition. >> * tree-pretty-pretty.c (dump_generic_node): Added ARRAY_NOTATION_= REF >> case. >> * array-notation-common.c: New file. >> >>gcc/c-family/ChangeLog >> >>2012-09-26 Balaji V. Iyer >> >> * c-common.h (build_array_notation_expr): New function declaratio= n. >> * c-common.c (c_define_builtins): Added a call to initialize array >> notation builtin functions. >> * c.opt (-fcilkplus): Define new command line switch. >> >>gcc/c/ChangeLog >> >>2012-09-26 Balaji V. Iyer >> >> * c-typeck.c (convert_arguments): Added a check if tree contains >> array notation expressions before throwing errors or doing anythi= ng. >> * Make-lang.in (C_AND_OBJC_OBJS): Added c-array-notation.o. >> * c-parser.c (c_parser_compound_statement): Check if array notati= on code >> is used in tree, if so, then transform them into appropriate C co= de. >> (c_parser_expr_no_commas): Check if array notation is used in LHS= or >> RHS, if so, then build array notation expression instead of regul= ar >> modify. >> (c_parser_postfix_expression_after_primary): Added a check for co= lon(s) >> after square braces, if so then handle it like an array notation.= Also, >> break up array notations in unary op if found. >> (c_parser_array_notation): New function. >> * c-array-notation.c: New file. >> >> >>gcc/testsuite/ChangeLog >>2012-09-26 Balaji V. Iyer >> >> * gcc.dg/cilk-plus/array_notation/execute/execute.exp: New script. >> * gcc.dg/cilk-plus/array_notation/compile/compile.exp: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/errors.exp: Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/sec_implicit_ex.c: New = test. >> * gcc.dg/cilk-plus/array_notation/execute/if_test.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/gather_scatter.c: Likew= ise. >> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double2.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_custom.c: Li= kewise. >> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_mutating.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/array_test_ND.c: Likewi= se. >> * gcc.dg/cilk-plus/array_notation/execute/array_test2.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/array_test1.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/sec_implicit_ex.c: Like= wise. >> * gcc.dg/cilk-plus/array_notation/compile/gather_scatter.c: Likew= ise. >> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double2.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/array_test_ND.c: Likewi= se. >> * gcc.dg/cilk-plus/array_notation/compile/if_test.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/array_test1.c: Likewise >> * gcc.dg/cilk-plus/array_notation/compile/array_test2.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit2.c: Likewis= e. >> * gcc.dg/cilk-plus/array_notation/errors/rank_mismatch.c: Likewis= e. >> * gcc.dg/cilk-plus/array_notation/errors/parse_error.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/parse_error2.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/parse_error3.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/parse_error4.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/sec_reduce_max_min_ind.c: >> Likewise. >> >>Thanks, >> >>Balaji V. Iyer. >> >>>There may also be other issues.) >>> >>>-- >>>Joseph S. Myers >>>joseph@codesourcery.com --_002_BF230D13CA30DD48930C31D40993300016C83F89FMSMSX102amrcor_ Content-Type: text/plain; name="array_notation_c_patch3.txt" Content-Description: array_notation_c_patch3.txt Content-Disposition: attachment; filename="array_notation_c_patch3.txt"; size=173504; creation-date="Wed, 26 Sep 2012 23:10:47 GMT"; modification-date="Wed, 26 Sep 2012 23:06:11 GMT" Content-ID: Content-Transfer-Encoding: base64 Content-length: 235196 SW5kZXg6IGdjYy9kb2MvZ2VuZXJpYy50ZXhpCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy9kb2MvZ2VuZXJpYy50ZXhpCShyZXZpc2lvbiAxOTE3 NjUpCisrKyBnY2MvZG9jL2dlbmVyaWMudGV4aQkod29ya2luZyBjb3B5KQpA QCAtMTEyNCw2ICsxMTI0LDcgQEAKIEB0aW5kZXggSU5ESVJFQ1RfUkVGCiBA dGluZGV4IE1FTV9SRUYKIEB0aW5kZXggQVJSQVlfUkVGCitAdGluZGV4IEFS UkFZX05PVEFUSU9OX1JFRgogQHRpbmRleCBBUlJBWV9SQU5HRV9SRUYKIEB0 aW5kZXggVEFSR0VUX01FTV9SRUYKIEB0aW5kZXggQ09NUE9ORU5UX1JFRgpA QCAtMTEzOSw2ICsxMTQwLDE1IEBACiBkaXJlY3RseTsgY2FsbCBAY29kZXth cnJheV9yZWZfbG93X2JvdW5kfSBhbmQgQGNvZGV7YXJyYXlfcmVmX2VsZW1l bnRfc2l6ZX0KIGluc3RlYWQuCiAKK0BpdGVtIEFSUkFZX05PVEFUSU9OX1JF RgorVGhlc2Ugbm9kZXMgcmVwcmVzZW50IGFycmF5IG5vdGF0aW9uIGV4cHJl c3Npb25zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIENpbGsgUGx1cworbGFuZ3Vh Z2UgZXh0ZW5zaW9ucyAoZW5hYmxlZCBieSBAb3B0aW9uey1mY2lsa3BsdXN9 IGZsYWcpLiAgVGhlIGZpcnN0IG9wZXJhbmQgCitpcyB0aGUgYXJyYXkuICBT ZWNvbmQsIHRoaXJkIGFuZCBmb3VydGggb3BlcmFuZHMgYXJlIHRoZSBzdGFy dC1pbmRleCwgbnVtYmVyIG9mCitlbGVtZW50cyBhY2Nlc3NlZCAoYWxzbyBj YWxsZWQgbGVuZ3RoKSBhbmQgdGhlIHN0cmlkZSwgcmVzcGVjdGl2ZWx5LiAg VGhlIAorZmlmdGggb3BlcmFuZCBob2xkcyB0aGUgYXJyYXkgdHlwZS4gIEFy b3VuZCB0aGUgZW5kIG9mIHRoZSBwYXJzaW5nIHN0YWdlLCAKK3RoZXNlIGFy cmF5IG5vdGF0aW9ucyBhcmUgYnJva2VuIHVwIGludG8gYXJyYXkgcmVmZXJl bmNlcyAoQGNvZGV7QVJSQVlfUkVGfSkKK2VuY2xvc2VkIGluc2lkZSBhIGxv b3AgaXRlcmF0aW5nIGZyb20gMCB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz IGFjY2Vzc2VkLgorCiBAaXRlbSBBUlJBWV9SQU5HRV9SRUYKIFRoZXNlIG5v ZGVzIHJlcHJlc2VudCBhY2Nlc3MgdG8gYSByYW5nZSAob3IgYGBzbGljZScn KSBvZiBhbiBhcnJheS4gIFRoZQogb3BlcmFuZHMgYXJlIHRoZSBzYW1lIGFz IHRoYXQgZm9yIEBjb2Rle0FSUkFZX1JFRn0gYW5kIGhhdmUgdGhlIHNhbWUK SW5kZXg6IGdjYy9kb2MvcGFzc2VzLnRleGkKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL2RvYy9wYXNzZXMudGV4aQkocmV2aXNpb24gMTkxNzY1 KQorKysgZ2NjL2RvYy9wYXNzZXMudGV4aQkod29ya2luZyBjb3B5KQpAQCAt MTksNiArMTksNyBAQAogCiBAbWVudQogKiBQYXJzaW5nIHBhc3M6OiAgICAg ICAgIFRoZSBsYW5ndWFnZSBmcm9udCBlbmQgdHVybnMgdGV4dCBpbnRvIGJp dHMuCisqIENpbGsgUGx1cyBUcmFuc2Zvcm1hdGlvbjo6IFRyYW5zZm9ybSBD aWxrIFBsdXMgQ29kZSB0byBlcXVpdmFsZW50IEMvQysrLgogKiBHaW1wbGlm aWNhdGlvbiBwYXNzOjogIFRoZSBiaXRzIGFyZSB0dXJuZWQgaW50byBzb21l dGhpbmcgd2UgY2FuIG9wdGltaXplLgogKiBQYXNzIG1hbmFnZXI6OiAgICAg ICAgIFNlcXVlbmNpbmcgdGhlIG9wdGltaXphdGlvbiBwYXNzZXMuCiAqIFRy ZWUgU1NBIHBhc3Nlczo6ICAgICAgT3B0aW1pemF0aW9ucyBvbiBhIGhpZ2gt bGV2ZWwgcmVwcmVzZW50YXRpb24uCkBAIC0xMDMsNiArMTA0LDM4IEBACiBU aGUgbWlkZGxlLWVuZCB3aWxsLCBhdCBpdHMgb3B0aW9uLCBlbWl0IHRoZSBm dW5jdGlvbiBhbmQgZGF0YQogZGVmaW5pdGlvbnMgaW1tZWRpYXRlbHkgb3Ig cXVldWUgdGhlbSBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KIAorQG5vZGUgQ2ls ayBQbHVzIFRyYW5zZm9ybWF0aW9uCitAc2VjdGlvbiBDaWxrIFBsdXMgVHJh bnNmb3JtYXRpb24KK0BjaW5kZXggQ0lMS19QTFVTCisKK0lmIENpbGsgUGx1 cyBnZW5lcmF0aW9uIChmbGFnIEBvcHRpb257LWZjaWxrcGx1c30pIGlzIGVu YWJsZWQsIGFsbCB0aGUgQ2lsayAKK1BsdXMgY29kZSBpcyB0cmFuc2Zvcm1l ZCBpbnRvIGVxdWl2YWxlbnQgQyBhbmQgQysrIGZ1bmN0aW9ucy4gIEluIGFk ZGl0aW9uLCBhbGwKK3RoZSBuZWNlc3NhcnkgZnVuY3Rpb24gY2FsbHMgdG8g dGhlIENpbGsgcnVudGltZSBsaWJyYXJ5CisobG9jYXRlZCBpbiBsaWJjaWxr cnRzIGRpcmVjdG9yeSkgYXJlIGluc2VydGVkIChvbmx5IHVzZWQgYnkgQ2ls ayBrZXl3b3JkcykuICAKK01ham9yaXR5IG9mIHRoaXMgdHJhbnNmb3JtYXRp b24gb2NjdXJzIHRvd2FyZCB0aGUgZW5kIG9mIHRoZSBwYXJzaW5nIGFuZCAK K3JpZ2h0IGJlZm9yZSB0aGUgZ2ltcGxpZmljYXRpb24gcGFzcy4gIAorCitU aGVzZSBhcmUgdGhlIG1ham9yIGNvbXBvbmVudHMgdG8gdGhlIENpbGsgUGx1 cyBsYW5ndWFnZSBleHRlbnNpb246CitAaXRlbWl6ZSBAYnVsbGV0CitAaXRl bSBBcnJheSBOb3RhdGlvbnM6CitEdXJpbmcgcGFyc2luZyBwaGFzZSwgYWxs IHRoZSBhcnJheSBub3RhdGlvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyBz dG9yZWQgaW4gCitAY29kZXtBUlJBWV9OT1RBVElPTl9SRUZ9IHRyZWUgdXNp bmcgdGhlIGZ1bmN0aW9uIAorQGNvZGV7Y19wYXJzZXJfYXJyYXlfbm90YXRp b259LiAgRHVyaW5nIHRoZSBlbmQgb2YgcGFyc2luZywgd2UgY2hlY2sgdGhl IGVudGlyZQorZnVuY3Rpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYXJy YXkgbm90YXRpb24gc3BlY2lmaWMgY29kZSAodXNpbmcgdGhlIAorZnVuY3Rp b24gQGNvZGV7Y29udGFpbnNfYXJyYXlfbm90YXRpb25fZXhwcn0pLiAgSWYg dGhpcyBmdW5jdGlvbiByZXR1cm5zIAordHJ1ZSwgdGhlbiB3ZSBleHBhbmQg dGhlbSB1c2luZyBlaXRoZXIgQGNvZGV7ZXhwYW5kX2FycmF5X25vdGF0aW9u X2V4cHJzfSBvcgorQGNvZGV7YnVpbGRfYXJyYXlfbm90YXRpb25fZXhwcn0u ICBGb3IgdGhlIGNhc2VzIHdoZXJlIGFycmF5IG5vdGF0aW9ucyBhcmUgCitp bnNpZGUgY29uZGl0aW9ucywgdGhleSBhcmUgdHJhbnNmb3JtZWQgdXNpbmcg dGhlIGZ1bmN0aW9uIAorQGNvZGV7Zml4X2NvbmRpdGlvbmFsX2FycmF5X25v dGF0aW9uc30uICBUaGUgQyBsYW5ndWFnZS1zcGVjaWZpYyByb3V0aW5lcyBh cmUgCitsb2NhdGVkIGluIEBmaWxle2MvYy1hcnJheS1ub3RhdGlvbi5jfSBh bmQgdGhlIGVxdWl2YWxlbnQgQysrIHJvdXRpbmVzIGFyZSBpbiAKK2ZpbGUg QGZpbGV7Y3AvY3AtYXJyYXktbm90YXRpb24uY30uICBDb21tb24gcm91dGlu ZXMgc3VjaCBhcyBmdW5jdGlvbnMgdG8gCitpbml0aWFsaXplIGJ1aWx0aW4g ZnVuY3Rpb25zIGFyZSBzdG9yZWQgaW4gQGZpbGV7YXJyYXktbm90YXRpb24t Y29tbW9uLmN9LgorQGVuZCBpdGVtaXplCisKK0RldGFpbGVkIGluZm9ybWF0 aW9uIGFib3V0IENpbGsgUGx1cyBhbmQgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlv biBpcyBwcm92aWRlZCBpbiAKK0B3e0B1cmVme2h0dHA6Ly93d3cuY2lsay5j b20vfX0uICBJdCBpcyB3b3J0aCBtZW50aW9uaW5nIHRoYXQgdGhlIGN1cnJl bnQgCitpbXBsZW1lbnRhdGlvbiBmb2xsb3dzIEFCSSAwLjkuCisKIEBub2Rl IEdpbXBsaWZpY2F0aW9uIHBhc3MKIEBzZWN0aW9uIEdpbXBsaWZpY2F0aW9u IHBhc3MKIApJbmRleDogZ2NjL2RvYy9pbnZva2UudGV4aQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBnY2MvZG9jL2ludm9rZS50ZXhpCShyZXZpc2lv biAxOTE3NjUpCisrKyBnY2MvZG9jL2ludm9rZS50ZXhpCSh3b3JraW5nIGNv cHkpCkBAIC0xNzczLDYgKzE3NzMsMTcgQEAKIGltcGxpZXMgQG9wdGlvbnst cHRocmVhZH0sIGFuZCB0aHVzIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHRhcmdl dHMgdGhhdAogaGF2ZSBzdXBwb3J0IGZvciBAb3B0aW9uey1wdGhyZWFkfS4K IAorQGl0ZW0gLWZjaWxrcGx1cworQG9waW5kZXggZmxhZ19lbmFibGVfY2ls a3BsdXMKK0BjaW5kZXggRW5hYmxlIENpbGsgUGx1cworRW5hYmxlIHRoZSB1 c2FnZSBvZiBDaWxrIExhbmd1YWdlIGV4dGVuc2lvbiBmZWF0dXJlcyBmb3Ig Qy9DKysuICBXaGVuIHRoZSBmbGFnCitAb3B0aW9uey1mY2lsa3BsdXN9IGlz IHNwZWNpZmllZCwgYWxsIHRoZSBDaWxrIFBsdXMgY29tcG9uZW50cyBhcmUg Y29udmVydGVkIAordG8gdGhlIGFwcHJvcHJpYXRlIEMvQysrIGNvZGUuICBU aGUgcHJlc2VudCBpbXBsZW1lbnRhdGlvbiBmb2xsb3dzIEFCSSB2ZXJzaW9u IAorMC45LiAgVGhlcmUgYXJlIGZvdXIgbWFqb3IgcGFydHMgdG8gQ2lsayBQ bHVzIGxhbmd1YWdlIAorZXh0ZW5zaW9uOiBBcnJheSBOb3RhdGlvbnMsIENp bGsgS2V5d29yZHMsIFNJTUQgYW5ub3RhdGlvbnMgYW5kIGVsZW1lbnRhbCAK K2Z1bmN0aW9ucy4gIERldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IENpbGsg UGx1cyBjYW4gYmUgZm91bmQgYXQgCitAd3tAdXJlZntodHRwOi8vd3d3LmNp bGsuY29tfX0uIAorCiBAaXRlbSAtZmdudS10bQogQG9waW5kZXggZmdudS10 bQogV2hlbiB0aGUgb3B0aW9uIEBvcHRpb257LWZnbnUtdG19IGlzIHNwZWNp ZmllZCwgdGhlIGNvbXBpbGVyCkluZGV4OiBnY2MvYXJyYXktbm90YXRpb24t Y29tbW9uLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2FycmF5 LW5vdGF0aW9uLWNvbW1vbi5jCShyZXZpc2lvbiAwKQorKysgZ2NjL2FycmF5 LW5vdGF0aW9uLWNvbW1vbi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5 MyBAQAorLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEludGVsKFIpIENp bGsoVE0pIFBsdXMgc3VwcG9ydAorICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRo ZSBidWlsdGluIGZ1bmN0aW9ucyBmb3IgQXJyYXkKKyAgIG5vdGF0aW9ucy4K KyAgIENvcHlyaWdodCAoQykgMjAxMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBCYWxhamkgVi4gSXllciA8 YmFsYWppLnYuaXllckBpbnRlbC5jb20+LAorICAgICAgICAgICAgICAgICAg SW50ZWwgQ29ycG9yYXRpb24KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0ND LgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK K3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgor CitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJjb25m aWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIgCisjaW5jbHVkZSAiY29yZXR5 cGVzLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImxhbmdob29r cy5oIiAKKyNpbmNsdWRlICJleHByLmgiCisjaW5jbHVkZSAicmVjb2cuaCIK KyNpbmNsdWRlICJ0cmVlLWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiZGlhZ25v c3RpYy1jb3JlLmgiCisKK2ludCBleHRyYWN0X3NlY19pbXBsaWNpdF9pbmRl eF9hcmcgKHRyZWUpOworYm9vbCBpc19zZWNfaW1wbGljaXRfaW5kZXhfZm4g KHRyZWUpOwordm9pZCBhcnJheV9ub3RhdGlvbl9pbml0X2J1aWx0aW5zICh2 b2lkKTsKKworLyogTWFyayB0aGUgRk5ERUNMIGFzIGNvbGQsIG1lYW5pbmcg dGhhdCB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IEZOREVDTCBpcworICAg bm90IHJ1biBhcyBpcy4gICovCisKK3N0YXRpYyB2b2lkCittYXJrX2NvbGQg KHRyZWUgZm5kZWNsKQoreworICBERUNMX0FUVFJJQlVURVMgKGZuZGVjbCkg PSB0cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgiY29sZCIpLCBOVUxMX1RS RUUsCisJCQkJCURFQ0xfQVRUUklCVVRFUyAoZm5kZWNsKSk7Cit9CisKKy8q IFRoaXMgZnVuY3Rpb24gaW5pdGl0aWFsaXplcyBhcnJheSBub3RhdGlvbiBz cGVjaWZpYyBidWlsdGluIGluZm9ybWF0aW9uLiAgKi8KKworCit2b2lkCith cnJheV9ub3RhdGlvbl9pbml0X2J1aWx0aW5zICh2b2lkKQoreworICB0cmVl IGZ1bmNfdHlwZSA9IE5VTExfVFJFRTsKKyAgdHJlZSBuZXdfZnVuYyA9IE5V TExfVFJFRTsKKyAgZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9s aXN0IChpbnRlZ2VyX3R5cGVfbm9kZSwgcHRyX3R5cGVfbm9kZSwKKwkJCQkJ TlVMTF9UUkVFKTsKKyAgbmV3X2Z1bmMgPSBidWlsZF9mbl9kZWNsICgiX19z ZWNfcmVkdWNlX2FkZCIsIGZ1bmNfdHlwZSk7CisgIG1hcmtfY29sZCAobmV3 X2Z1bmMpOworICBuZXdfZnVuYyA9IGxhbmdfaG9va3MuZGVjbHMucHVzaGRl Y2wgKG5ld19mdW5jKTsKKworICBmdW5jX3R5cGUgPSBidWlsZF9mdW5jdGlv bl90eXBlX2xpc3QgKGludGVnZXJfdHlwZV9ub2RlLCBwdHJfdHlwZV9ub2Rl LAorCQkJCQlOVUxMX1RSRUUpOworICBuZXdfZnVuYyA9IGJ1aWxkX2ZuX2Rl Y2wgKCJfX3NlY19yZWR1Y2VfbXVsIiwgZnVuY190eXBlKTsKKyAgbWFya19j b2xkIChuZXdfZnVuYyk7CisgIG5ld19mdW5jID0gbGFuZ19ob29rcy5kZWNs cy5wdXNoZGVjbCAobmV3X2Z1bmMpOworCisgIGZ1bmNfdHlwZSA9IGJ1aWxk X2Z1bmN0aW9uX3R5cGVfbGlzdCAoaW50ZWdlcl90eXBlX25vZGUsIHB0cl90 eXBlX25vZGUsCisJCQkJCU5VTExfVFJFRSk7CisgIG5ld19mdW5jID0gYnVp bGRfZm5fZGVjbCAoIl9fc2VjX3JlZHVjZV9hbGxfemVybyIsIGZ1bmNfdHlw ZSk7CisgIG1hcmtfY29sZCAobmV3X2Z1bmMpOworICBuZXdfZnVuYyA9IGxh bmdfaG9va3MuZGVjbHMucHVzaGRlY2wgKG5ld19mdW5jKTsKKworICBmdW5j X3R5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKGludGVnZXJfdHlw ZV9ub2RlLCBwdHJfdHlwZV9ub2RlLAorCQkJCQlOVUxMX1RSRUUpOworICBu ZXdfZnVuYyA9IGJ1aWxkX2ZuX2RlY2wgKCJfX3NlY19yZWR1Y2VfYW55X3pl cm8iLCBmdW5jX3R5cGUpOworICBtYXJrX2NvbGQgKG5ld19mdW5jKTsKKyAg bmV3X2Z1bmMgPSBsYW5nX2hvb2tzLmRlY2xzLnB1c2hkZWNsIChuZXdfZnVu Yyk7CisKKyAgZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0 IChpbnRlZ2VyX3R5cGVfbm9kZSwgcHRyX3R5cGVfbm9kZSwKKwkJCQkJTlVM TF9UUkVFKTsKKyAgbmV3X2Z1bmMgPSBidWlsZF9mbl9kZWNsICgiX19zZWNf cmVkdWNlX21heCIsIGZ1bmNfdHlwZSk7CisgIG1hcmtfY29sZCAobmV3X2Z1 bmMpOworICBuZXdfZnVuYyA9IGxhbmdfaG9va3MuZGVjbHMucHVzaGRlY2wg KG5ld19mdW5jKTsKKyAgCisgIGZ1bmNfdHlwZSA9IGJ1aWxkX2Z1bmN0aW9u X3R5cGVfbGlzdCAoaW50ZWdlcl90eXBlX25vZGUsIHB0cl90eXBlX25vZGUs CisJCQkJCU5VTExfVFJFRSk7CisgIG5ld19mdW5jID0gYnVpbGRfZm5fZGVj bCAoIl9fc2VjX3JlZHVjZV9taW4iLCBmdW5jX3R5cGUpOworICBtYXJrX2Nv bGQgKG5ld19mdW5jKTsKKyAgbmV3X2Z1bmMgPSBsYW5nX2hvb2tzLmRlY2xz LnB1c2hkZWNsIChuZXdfZnVuYyk7CisKKyAgZnVuY190eXBlID0gYnVpbGRf ZnVuY3Rpb25fdHlwZV9saXN0IChpbnRlZ2VyX3R5cGVfbm9kZSwgcHRyX3R5 cGVfbm9kZSwKKwkJCQkJTlVMTF9UUkVFKTsKKyAgbmV3X2Z1bmMgPSBidWls ZF9mbl9kZWNsICgiX19zZWNfcmVkdWNlX21pbl9pbmQiLCBmdW5jX3R5cGUp OworICBtYXJrX2NvbGQgKG5ld19mdW5jKTsKKyAgbmV3X2Z1bmMgPSBsYW5n X2hvb2tzLmRlY2xzLnB1c2hkZWNsIChuZXdfZnVuYyk7CisKKyAgZnVuY190 eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0IChpbnRlZ2VyX3R5cGVf bm9kZSwgcHRyX3R5cGVfbm9kZSwKKwkJCQkJTlVMTF9UUkVFKTsKKyAgbmV3 X2Z1bmMgPSBidWlsZF9mbl9kZWNsICgiX19zZWNfcmVkdWNlX21heF9pbmQi LCBmdW5jX3R5cGUpOworICBtYXJrX2NvbGQgKG5ld19mdW5jKTsKKyAgbmV3 X2Z1bmMgPSBsYW5nX2hvb2tzLmRlY2xzLnB1c2hkZWNsIChuZXdfZnVuYyk7 CisKKyAgZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0IChp bnRlZ2VyX3R5cGVfbm9kZSwgcHRyX3R5cGVfbm9kZSwKKwkJCQkgICAgICAg TlVMTF9UUkVFKTsKKyAgbmV3X2Z1bmMgPSBidWlsZF9mbl9kZWNsICgiX19z ZWNfcmVkdWNlX2FueV9ub256ZXJvIiwgZnVuY190eXBlKTsKKyAgbWFya19j b2xkIChuZXdfZnVuYyk7CisgIG5ld19mdW5jID0gbGFuZ19ob29rcy5kZWNs cy5wdXNoZGVjbCAobmV3X2Z1bmMpOworCisgIGZ1bmNfdHlwZSA9IGJ1aWxk X2Z1bmN0aW9uX3R5cGVfbGlzdCAoaW50ZWdlcl90eXBlX25vZGUsIHB0cl90 eXBlX25vZGUsCisJCQkJCU5VTExfVFJFRSk7CisgIG5ld19mdW5jID0gYnVp bGRfZm5fZGVjbCAoIl9fc2VjX3JlZHVjZV9hbGxfbm9uemVybyIsIGZ1bmNf dHlwZSk7CisgIG1hcmtfY29sZCAobmV3X2Z1bmMpOworICBuZXdfZnVuYyA9 IGxhbmdfaG9va3MuZGVjbHMucHVzaGRlY2wgKG5ld19mdW5jKTsKKyAgCisg IGZ1bmNfdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAoaW50ZWdl cl90eXBlX25vZGUsIGludGVnZXJfdHlwZV9ub2RlLAorCQkJCQlOVUxMX1RS RUUpOworICBuZXdfZnVuYyA9IGJ1aWxkX2ZuX2RlY2wgKCJfX3NlY19pbXBs aWNpdF9pbmRleCIsIGZ1bmNfdHlwZSk7CisgIG1hcmtfY29sZCAobmV3X2Z1 bmMpOworICBuZXdfZnVuYyA9IGxhbmdfaG9va3MuZGVjbHMucHVzaGRlY2wg KG5ld19mdW5jKTsKKworICBmdW5jX3R5cGUgPSBidWlsZF9mdW5jdGlvbl90 eXBlX2xpc3QgKGludGVnZXJfdHlwZV9ub2RlLCBwdHJfdHlwZV9ub2RlLAor CQkJCQlwdHJfdHlwZV9ub2RlLCBwdHJfdHlwZV9ub2RlLAorCQkJCQlOVUxM X1RSRUUpOworICBuZXdfZnVuYyA9IGJ1aWxkX2ZuX2RlY2wgKCJfX3NlY19y ZWR1Y2UiLCBmdW5jX3R5cGUpOworICBuZXdfZnVuYyA9IGxhbmdfaG9va3Mu ZGVjbHMucHVzaGRlY2wgKG5ld19mdW5jKTsKKworICBmdW5jX3R5cGUgPSBi dWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKHB0cl90eXBlX25vZGUsIHB0cl90 eXBlX25vZGUsCisJCQkJCXB0cl90eXBlX25vZGUsIHB0cl90eXBlX25vZGUs CisJCQkJCU5VTExfVFJFRSk7CisgIG5ld19mdW5jID0gYnVpbGRfZm5fZGVj bCAoIl9fc2VjX3JlZHVjZV9tdXRhdGluZyIsIGZ1bmNfdHlwZSk7CisgIG5l d19mdW5jID0gbGFuZ19ob29rcy5kZWNscy5wdXNoZGVjbCAobmV3X2Z1bmMp OworICByZXR1cm47Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgZnVu Y3Rpb24gY2FsbCBzcGVjaWZpZWQgaW4gRlVOQ19OQU1FIGlzCisgICBfX3Nl Y19pbXBsaWNpdF9pbmRleC4gICovCisKK2Jvb2wKK2lzX3NlY19pbXBsaWNp dF9pbmRleF9mbiAodHJlZSBmdW5jX25hbWUpCit7CisgIGNvbnN0IGNoYXIg KmZ1bmN0aW9uX25hbWUgPSBOVUxMOworCisgIGlmICghZnVuY19uYW1lKQor ICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoVFJFRV9DT0RFIChmdW5jX25h bWUpID09IEZVTkNUSU9OX0RFQ0wpCisgICAgZnVuY19uYW1lID0gREVDTF9O QU1FIChmdW5jX25hbWUpOworICAKKyAgaWYgKFRSRUVfQ09ERSAoZnVuY19u YW1lKSA9PSBJREVOVElGSUVSX05PREUpCisgICAgZnVuY3Rpb25fbmFtZSA9 IElERU5USUZJRVJfUE9JTlRFUiAoZnVuY19uYW1lKTsKKyAgZWxzZSBpZiAo VFJFRV9DT0RFIChmdW5jX25hbWUpID09IEFERFJfRVhQUikKKyAgICB7Cisg ICAgICBmdW5jX25hbWUgPSBUUkVFX09QRVJBTkQgKGZ1bmNfbmFtZSwgMCk7 CisgICAgICBpZiAoVFJFRV9DT0RFIChmdW5jX25hbWUpID09IEZVTkNUSU9O X0RFQ0wpCisJaWYgKERFQ0xfTkFNRSAoZnVuY19uYW1lKSkKKwkgIGZ1bmN0 aW9uX25hbWUgPSBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoZnVu Y19uYW1lKSk7CisgICAgfQorCisgIGlmICghZnVuY3Rpb25fbmFtZSkKKyAg ICByZXR1cm4gZmFsc2U7CisgIGVsc2UgaWYgKCFzdHJjbXAgKGZ1bmN0aW9u X25hbWUsICJfX3NlY19pbXBsaWNpdF9pbmRleCIpKQorICAgIHJldHVybiB0 cnVlOworICBlbHNlCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1 cm5zIHRoZSBmaXJzdCBhbmQgb25seSBhcmd1bWVudCBmb3IgRk4sIHdoaWNo IHNob3VsZCBiZSBhCisgICBzZWNfaW1wbGljaXRfaW5kZXggZnVuY3Rpb24u ICovCisKK2ludAorZXh0cmFjdF9zZWNfaW1wbGljaXRfaW5kZXhfYXJnIChs b2NhdGlvbl90IGxvY2F0aW9uLCB0cmVlIGZuKQoreworICB0cmVlIGZuX2Fy ZzsKKyAgSE9TVF9XSURFX0lOVCByZXR1cm5faW50ID0gMDsKKyAgaWYgKCFm bikKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKFRSRUVfQ09ERSAoZm4pID09 IENBTExfRVhQUikKKyAgICB7CisgICAgICBmbl9hcmcgPSBDQUxMX0VYUFJf QVJHIChmbiwgMCk7CisgICAgICBpZiAocmVhbGx5X2NvbnN0YW50X3AgKGZu X2FyZykpCisJcmV0dXJuX2ludCA9IChpbnQpIGludF9jc3RfdmFsdWUgKGZu X2FyZyk7CisgICAgICBlbHNlCisJeworCSAgZXJyb3JfYXQgKGxvY2F0aW9u LCAKKwkJICAgICJfX3NlY19pbXBsaWNpdF9pbmRleCBwYXJhbWV0ZXIgbXVz dCBiZSBjb25zdGFudCBpbnRlZ2VyICIgCisJCSAgICAiZXhwcmVzc2lvbiIp OworCSAgcmV0dXJuIC0xOworCX0KKyAgICB9CisgIHJldHVybiByZXR1cm5f aW50OworfQpJbmRleDogZ2NjL3RyZWUtcHJldHR5LXByaW50LmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL3RyZWUtcHJldHR5LXByaW50LmMJ KHJldmlzaW9uIDE5MTc2NSkKKysrIGdjYy90cmVlLXByZXR0eS1wcmludC5j CSh3b3JraW5nIGNvcHkpCkBAIC0xMjk0LDcgKzEyOTQsMTggQEAKIAkgIHBw X2NoYXJhY3RlciAoYnVmZmVyLCAnfScpOwogCX0KICAgICAgIGJyZWFrOwot CisgICAgICAKKyAgICBjYXNlIEFSUkFZX05PVEFUSU9OX1JFRjoKKyAgICAg IGR1bXBfZ2VuZXJpY19ub2RlIChidWZmZXIsIFRSRUVfT1BFUkFORCAobm9k ZSwgMCksIHNwYywgZmxhZ3MsIGZhbHNlKTsKKyAgICAgIHBwX2NoYXJhY3Rl ciAoYnVmZmVyLCAnWycpOworICAgICAgZHVtcF9nZW5lcmljX25vZGUgKGJ1 ZmZlciwgVFJFRV9PUEVSQU5EIChub2RlLCAxKSwgc3BjLCBmbGFncywgZmFs c2UpOworICAgICAgcHBfY2hhcmFjdGVyIChidWZmZXIsICc6Jyk7CisgICAg ICBkdW1wX2dlbmVyaWNfbm9kZSAoYnVmZmVyLCBUUkVFX09QRVJBTkQgKG5v ZGUsIDIpLCBzcGMsIGZsYWdzLCBmYWxzZSk7CisgICAgICBwcF9jaGFyYWN0 ZXIgKGJ1ZmZlciwgJzonKTsKKyAgICAgIGR1bXBfZ2VuZXJpY19ub2RlIChi dWZmZXIsIFRSRUVfT1BFUkFORCAobm9kZSwgMyksIHNwYywgZmxhZ3MsIGZh bHNlKTsKKyAgICAgIHBwX2NoYXJhY3RlciAoYnVmZmVyLCAnXScpOworICAg ICAgYnJlYWs7CisgICAgICAKICAgICBjYXNlIENPTlNUUlVDVE9SOgogICAg ICAgewogCXVuc2lnbmVkIEhPU1RfV0lERV9JTlQgaXg7CkluZGV4OiBnY2Mv Yy1mYW1pbHkvYy5vcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj L2MtZmFtaWx5L2Mub3B0CShyZXZpc2lvbiAxOTE3NjUpCisrKyBnY2MvYy1m YW1pbHkvYy5vcHQJKHdvcmtpbmcgY29weSkKQEAgLTc1OSw2ICs3NTksMTAg QEAKIGZidWlsdGluLQogQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkCiAKK2Zj aWxrcGx1cworQyBPYmpDIEMrKyBPYmpDKysgTFRPIFJlcG9ydCBWYXIoZmxh Z19lbmFibGVfY2lsa3BsdXMpIEluaXQoMCkKK0VuYWJsZSBDaWxrIFBsdXMK KwogZmNoZWNrLW5ldwogQysrIE9iakMrKyBWYXIoZmxhZ19jaGVja19uZXcp CiBDaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIG5ldwpJbmRleDogZ2NjL2Mt ZmFtaWx5L2MtY29tbW9uLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g Z2NjL2MtZmFtaWx5L2MtY29tbW9uLmMJKHJldmlzaW9uIDE5MTc2NSkKKysr IGdjYy9jLWZhbWlseS9jLWNvbW1vbi5jCSh3b3JraW5nIGNvcHkpCkBAIC01 MDE0LDYgKzUwMTQsOSBAQAogI2luY2x1ZGUgImJ1aWx0aW5zLmRlZiIKICN1 bmRlZiBERUZfQlVJTFRJTgogCisgIC8qIEluaXRpYWxpemUgYnVpbHRpbiBm dW5jdGlvbnMgZm9yIENpbGsgUGx1cy4gICovCisgIGlmIChmbGFnX2VuYWJs ZV9jaWxrcGx1cykKKyAgICBhcnJheV9ub3RhdGlvbl9pbml0X2J1aWx0aW5z ICgpOwogICB0YXJnZXRtLmluaXRfYnVpbHRpbnMgKCk7CiAKICAgYnVpbGRf Y29tbW9uX2J1aWx0aW5fbm9kZXMgKCk7CkBAIC0xMTExMyw2ICsxMTExNiw3 IEBACiB7CiAgIE1BUktfVFNfVFlQRUQgKENfTUFZQkVfQ09OU1RfRVhQUik7 CiAgIE1BUktfVFNfVFlQRUQgKEVYQ0VTU19QUkVDSVNJT05fRVhQUik7Cisg IE1BUktfVFNfVFlQRUQgKEFSUkFZX05PVEFUSU9OX1JFRik7CiB9CiAKIC8q IEJ1aWxkIGEgdXNlci1kZWZpbmVkIG51bWVyaWMgbGl0ZXJhbCBvdXQgb2Yg YW4gaW50ZWdlciBjb25zdGFudCB0eXBlIFZBTFVFCkluZGV4OiBnY2MvYy1m YW1pbHkvYy1jb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2MvYy1mYW1pbHkvYy1jb21tb24uaAkocmV2aXNpb24gMTkxNzY1KQorKysg Z2NjL2MtZmFtaWx5L2MtY29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0 Myw2ICs1NDMsOCBAQAogZXh0ZXJuIHRyZWUgcHVzaGRlY2wgKHRyZWUpOwog ZXh0ZXJuIHRyZWUgYnVpbGRfbW9kaWZ5X2V4cHIgKGxvY2F0aW9uX3QsIHRy ZWUsIHRyZWUsIGVudW0gdHJlZV9jb2RlLAogCQkJICAgICAgIGxvY2F0aW9u X3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfYXJyYXlfbm90 YXRpb25fZXhwciAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgZW51bSB0cmVl X2NvZGUsCisJCQkJICAgICAgIGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOwog ZXh0ZXJuIHRyZWUgYnVpbGRfaW5kaXJlY3RfcmVmIChsb2NhdGlvbl90LCB0 cmVlLCByZWZfb3BlcmF0b3IpOwogCiBleHRlcm4gaW50IGZpZWxkX2RlY2xf Y21wIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CkBAIC0xMTIzLDQg KzExMjUsMTkgQEAKIAogZXh0ZXJuIHZvaWQgY29udmVydF92ZWN0b3JfdG9f cG9pbnRlcl9mb3Jfc3Vic2NyaXB0IChsb2NhdGlvbl90LCB0cmVlKiwgdHJl ZSk7CiAKKy8qIFRoZXNlICNkZWZpbmVzIGFsbG93IHVzZXJzIHRvIGFjY2Vz cyBkaWZmZXJlbnQgb3BlcmFuZHMgb2YgdGhlIAorICAgICAgYXJyYXkgbm90 YXRpb24gdHJlZS4gICovCisKKyNkZWZpbmUgQVJSQVlfTk9UQVRJT05fQ0hF Q0soTk9ERSkgVFJFRV9DSEVDSyAoTk9ERSwgQVJSQVlfTk9UQVRJT05fUkVG KQorI2RlZmluZSBBUlJBWV9OT1RBVElPTl9BUlJBWShOT0RFKSBcCisgIFRS RUVfT1BFUkFORCAoQVJSQVlfTk9UQVRJT05fQ0hFQ0sgKE5PREUpLCAwKQor I2RlZmluZSBBUlJBWV9OT1RBVElPTl9TVEFSVChOT0RFKSBcCisgIFRSRUVf T1BFUkFORCAoQVJSQVlfTk9UQVRJT05fQ0hFQ0sgKE5PREUpLCAxKQorI2Rl ZmluZSBBUlJBWV9OT1RBVElPTl9MRU5HVEgoTk9ERSkgXAorICBUUkVFX09Q RVJBTkQgKEFSUkFZX05PVEFUSU9OX0NIRUNLIChOT0RFKSwgMikKKyNkZWZp bmUgQVJSQVlfTk9UQVRJT05fU1RSSURFKE5PREUpIFwKKyAgVFJFRV9PUEVS QU5EIChBUlJBWV9OT1RBVElPTl9DSEVDSyAoTk9ERSksIDMpCisjZGVmaW5l IEFSUkFZX05PVEFUSU9OX1RZUEUoTk9ERSkgXAorICBUUkVFX09QRVJBTkQg KEFSUkFZX05PVEFUSU9OX0NIRUNLIChOT0RFKSwgNCkKKwogI2VuZGlmIC8q ICEgR0NDX0NfQ09NTU9OX0ggKi8KSW5kZXg6IGdjYy9jLWZhbWlseS9jLWNv bW1vbi5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2MtZmFt aWx5L2MtY29tbW9uLmRlZgkocmV2aXNpb24gMTkxNzY1KQorKysgZ2NjL2Mt ZmFtaWx5L2MtY29tbW9uLmRlZgkod29ya2luZyBjb3B5KQpAQCAtNTcsNiAr NTcsMTUgQEAKICAgIG9yIGZvciB0aGUgcHVycG9zZSBvZiAtV3NpemVvZi1w b2ludGVyLW1lbWFjY2VzcyB3YXJuaW5nLiAgKi8KIERFRlRSRUVDT0RFIChT SVpFT0ZfRVhQUiwgInNpemVvZl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEp CiAKKy8qIEFycmF5IE5vdGF0aW9uIGV4cHJlc3Npb24uCisgICBPcGVyYW5k IDAgaXMgdGhlIGFycmF5OyBvcGVyYW5kIDEgaXMgdGhlIHN0YXJ0aW5nIGFy cmF5IGluZGV4CisgICBPcGVyYW5kIDIgY29udGFpbnMgdGhlIG51bWJlciBv ZiBlbGVtZW50cyB5b3UgbmVlZCB0byBhY2Nlc3MuCisgICBPcGVyYW5kIDMg aXMgdGhlIHN0cmlkZS4KKyAgIE9wZXJhbmQgNCBpcyB0aGUgZWxlbWVudCBz aXplIG1lYXN1cmVkIGluIHVuaXRzIG9mIGFsaWdubWVudHMgb2YKKyAgIGVs ZW1lbnQgdHlwZS4gKi8KK0RFRlRSRUVDT0RFIChBUlJBWV9OT1RBVElPTl9S RUYsICJhcnJheV9ub3RhdGlvbl9yZWYiLCB0Y2NfcmVmZXJlbmNlLCA1KSAK KworCiAvKgogTG9jYWwgdmFyaWFibGVzOgogbW9kZTpjCkluZGV4OiBnY2Mv Yy9jLXBhcnNlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9j L2MtcGFyc2VyLmMJKHJldmlzaW9uIDE5MTc2NSkKKysrIGdjYy9jL2MtcGFy c2VyLmMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDEzIEBACiAjaW5j bHVkZSAiY2dyYXBoLmgiCiAjaW5jbHVkZSAicGx1Z2luLmgiCiAKKworZXh0 ZXJuIGJvb2wgY29udGFpbnNfYXJyYXlfbm90YXRpb25fZXhwciAodHJlZSk7 CitleHRlcm4gc3RydWN0IGNfZXhwciBmaXhfYXJyYXlfbm90YXRpb25fZXhw ciAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsCisJCQkJCSAgICAgIHN0 cnVjdCBjX2V4cHIpOworZXh0ZXJuIHRyZWUgZml4X2NvbmRpdGlvbmFsX2Fy cmF5X25vdGF0aW9ucyAodHJlZSk7CitleHRlcm4gdHJlZSBleHBhbmRfYXJy YXlfbm90YXRpb25fZXhwcnMgKHRyZWUpOworCiAMCiAvKiBJbml0aWFsaXph dGlvbiByb3V0aW5lIGZvciB0aGlzIGZpbGUuICAqLwogCkBAIC0xMjI0LDYg KzEyMzEsOCBAQAogc3RhdGljIGJvb2wgY19wYXJzZXJfb2JqY19kaWFnbm9z ZV9iYWRfZWxlbWVudF9wcmVmaXgKICAgKGNfcGFyc2VyICosIHN0cnVjdCBj X2RlY2xzcGVjcyAqKTsKIAorc3RhdGljIHRyZWUgY19wYXJzZXJfYXJyYXlf bm90YXRpb24gKGNfcGFyc2VyICosIHRyZWUsIHRyZWUpOworCiAvKiBQYXJz ZSBhIHRyYW5zbGF0aW9uIHVuaXQgKEM5MCA2LjcsIEM5OSA2LjkpLgogCiAg ICB0cmFuc2xhdGlvbi11bml0OgpAQCAtNDA3OSw2ICs0MDg4LDEwIEBACiAg ICAgfQogICBzdG10ID0gY19iZWdpbl9jb21wb3VuZF9zdG10ICh0cnVlKTsK ICAgY19wYXJzZXJfY29tcG91bmRfc3RhdGVtZW50X25vc3RhcnQgKHBhcnNl cik7CisKKyAgLyogSWYgdGhlIGNvbXBvdW5kIHN0bXQgY29udGFpbnMgYXJy YXkgbm90YXRpb25zLCB0aGVuIHdlIGV4cGFuZCB0aGVtLiAgKi8KKyAgaWYg KGZsYWdfZW5hYmxlX2NpbGtwbHVzICYmIGNvbnRhaW5zX2FycmF5X25vdGF0 aW9uX2V4cHIgKHN0bXQpKQorICAgIHN0bXQgPSBleHBhbmRfYXJyYXlfbm90 YXRpb25fZXhwcnMgKHN0bXQpOwogICByZXR1cm4gY19lbmRfY29tcG91bmRf c3RtdCAoYnJhY2VfbG9jLCBzdG10LCB0cnVlKTsKIH0KIApAQCAtNDcyMiw2 ICs0NzM1LDcgQEAKICAgYm9vbCBmaXJzdF9pZiA9IGZhbHNlOwogICB0cmVl IGZpcnN0X2JvZHksIHNlY29uZF9ib2R5OwogICBib29sIGluX2lmX2Jsb2Nr OworICB0cmVlIGlmX3N0bXQ7CiAKICAgZ2NjX2Fzc2VydCAoY19wYXJzZXJf bmV4dF90b2tlbl9pc19rZXl3b3JkIChwYXJzZXIsIFJJRF9JRikpOwogICBj X3BhcnNlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIpOwpAQCAtNDc0MCw3ICs0 NzU0LDEyIEBACiAgIGVsc2UKICAgICBzZWNvbmRfYm9keSA9IE5VTExfVFJF RTsKICAgY19maW5pc2hfaWZfc3RtdCAobG9jLCBjb25kLCBmaXJzdF9ib2R5 LCBzZWNvbmRfYm9keSwgZmlyc3RfaWYpOwotICBhZGRfc3RtdCAoY19lbmRf Y29tcG91bmRfc3RtdCAobG9jLCBibG9jaywgZmxhZ19pc29jOTkpKTsKKyAg aWZfc3RtdCA9IGNfZW5kX2NvbXBvdW5kX3N0bXQgKGxvYywgYmxvY2ssIGZs YWdfaXNvYzk5KTsKKworICAvKiBJZiB0aGUgaWYgc3RhdGVtZW50IGNvbnRh aW5zIGFycmF5IG5vdGF0aW9ucywgdGhlbiB3ZSBleHBhbmQgdGhlbS4gICov CisgIGlmIChmbGFnX2VuYWJsZV9jaWxrcGx1cyAmJiBjb250YWluc19hcnJh eV9ub3RhdGlvbl9leHByIChpZl9zdG10KSkKKyAgICBpZl9zdG10ID0gZml4 X2NvbmRpdGlvbmFsX2FycmF5X25vdGF0aW9ucyAoaWZfc3RtdCk7CisgIGFk ZF9zdG10IChpZl9zdG10KTsKIH0KIAogLyogUGFyc2UgYSBzd2l0Y2ggc3Rh dGVtZW50IChDOTAgNi42LjQsIEM5OSA2LjguNCkuCkBAIC01NDAzLDkgKzU0 MjIsMjEgQEAKICAgZXhwX2xvY2F0aW9uID0gY19wYXJzZXJfcGVla190b2tl biAocGFyc2VyKS0+bG9jYXRpb247CiAgIHJocyA9IGNfcGFyc2VyX2V4cHJf bm9fY29tbWFzIChwYXJzZXIsIE5VTEwpOwogICByaHMgPSBkZWZhdWx0X2Z1 bmN0aW9uX2FycmF5X3JlYWRfY29udmVyc2lvbiAoZXhwX2xvY2F0aW9uLCBy aHMpOwotICByZXQudmFsdWUgPSBidWlsZF9tb2RpZnlfZXhwciAob3BfbG9j YXRpb24sIGxocy52YWx1ZSwgbGhzLm9yaWdpbmFsX3R5cGUsCi0JCQkJIGNv ZGUsIGV4cF9sb2NhdGlvbiwgcmhzLnZhbHVlLAotCQkJCSByaHMub3JpZ2lu YWxfdHlwZSk7CisgIAorICAvKiBUaGUgbGluZSBiZWxvdyBpcyB3aGVyZSB0 aGUgc3RhdGVtZW50IGhhcyB0aGUgZm9ybToKKyAgICAgQSA9IEIsIHdoZXJl IEEgYW5kIEIgY29udGFpbiBhcnJheSBub3RhdGlvbiBleHBycy4gU28gdGhp cyBpcyB3aGVyZQorICAgICB3ZSBoYW5kbGUgdGhvc2UuICAqLworICBpZiAo ZmxhZ19lbmFibGVfY2lsa3BsdXMKKyAgICAgICYmIChjb250YWluc19hcnJh eV9ub3RhdGlvbl9leHByIChsaHMudmFsdWUpCisJICB8fCBjb250YWluc19h cnJheV9ub3RhdGlvbl9leHByIChyaHMudmFsdWUpKSkKKyAgICByZXQudmFs dWUgPSBidWlsZF9hcnJheV9ub3RhdGlvbl9leHByIChvcF9sb2NhdGlvbiwg bGhzLnZhbHVlLAorCQkJCQkgICBsaHMub3JpZ2luYWxfdHlwZSwgY29kZSwK KwkJCQkJICAgZXhwX2xvY2F0aW9uLCByaHMudmFsdWUsCisJCQkJCSAgIHJo cy5vcmlnaW5hbF90eXBlKTsKKyAgZWxzZQorICAgIHJldC52YWx1ZSA9IGJ1 aWxkX21vZGlmeV9leHByIChvcF9sb2NhdGlvbiwgbGhzLnZhbHVlLCBsaHMu b3JpZ2luYWxfdHlwZSwKKwkJCQkgICBjb2RlLCBleHBfbG9jYXRpb24sIHJo cy52YWx1ZSwKKwkJCQkgICByaHMub3JpZ2luYWxfdHlwZSk7CiAgIGlmIChj b2RlID09IE5PUF9FWFBSKQogICAgIHJldC5vcmlnaW5hbF9jb2RlID0gTU9E SUZZX0VYUFI7CiAgIGVsc2UKQEAgLTU4ODUsMTQgKzU5MTYsMjYgQEAKICAg ICAgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CiAgICAgICBl eHBfbG9jID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+bG9jYXRp b247CiAgICAgICBvcCA9IGNfcGFyc2VyX2Nhc3RfZXhwcmVzc2lvbiAocGFy c2VyLCBOVUxMKTsKLSAgICAgIG9wID0gZGVmYXVsdF9mdW5jdGlvbl9hcnJh eV9yZWFkX2NvbnZlcnNpb24gKGV4cF9sb2MsIG9wKTsKLSAgICAgIHJldHVy biBwYXJzZXJfYnVpbGRfdW5hcnlfb3AgKG9wX2xvYywgUFJFSU5DUkVNRU5U X0VYUFIsIG9wKTsKKyAgICAgIC8qIElmIHRoZSB1bmFyeSBleHByZXNzaW9u IGhhcyBhcnJheSBub3RhdGlvbnMsIHRoZW4gd2UgZXhwYW5kIHRoZW0uICAq LworICAgICAgaWYgKGZsYWdfZW5hYmxlX2NpbGtwbHVzICYmIFRSRUVfQ09E RSAob3AudmFsdWUpID09IEFSUkFZX05PVEFUSU9OX1JFRikKKwlyZXR1cm4g Zml4X2FycmF5X25vdGF0aW9uX2V4cHIgKGV4cF9sb2MsIFBSRUlOQ1JFTUVO VF9FWFBSLCBvcCk7CisgICAgICBlbHNlCisJeworCSAgb3AgPSBkZWZhdWx0 X2Z1bmN0aW9uX2FycmF5X3JlYWRfY29udmVyc2lvbiAoZXhwX2xvYywgb3Ap OworCSAgcmV0dXJuIHBhcnNlcl9idWlsZF91bmFyeV9vcCAob3BfbG9jLCBQ UkVJTkNSRU1FTlRfRVhQUiwgb3ApOworCX0KICAgICBjYXNlIENQUF9NSU5V U19NSU5VUzoKICAgICAgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNl cik7CiAgICAgICBleHBfbG9jID0gY19wYXJzZXJfcGVla190b2tlbiAocGFy c2VyKS0+bG9jYXRpb247CiAgICAgICBvcCA9IGNfcGFyc2VyX2Nhc3RfZXhw cmVzc2lvbiAocGFyc2VyLCBOVUxMKTsKLSAgICAgIG9wID0gZGVmYXVsdF9m dW5jdGlvbl9hcnJheV9yZWFkX2NvbnZlcnNpb24gKGV4cF9sb2MsIG9wKTsK LSAgICAgIHJldHVybiBwYXJzZXJfYnVpbGRfdW5hcnlfb3AgKG9wX2xvYywg UFJFREVDUkVNRU5UX0VYUFIsIG9wKTsKKyAgICAgIC8qIElmIHRoZSB1bmFy eSBleHByZXNzaW9uIGhhcyBhcnJheSBub3RhdGlvbnMsIHRoZW4gd2UgZXhw YW5kIHRoZW0uICAqLworICAgICAgaWYgKGZsYWdfZW5hYmxlX2NpbGtwbHVz ICYmIFRSRUVfQ09ERSAob3AudmFsdWUpID09IEFSUkFZX05PVEFUSU9OX1JF RikKKwlyZXR1cm4gZml4X2FycmF5X25vdGF0aW9uX2V4cHIgKGV4cF9sb2Ms IFBSRURFQ1JFTUVOVF9FWFBSLCBvcCk7CisgICAgICBlbHNlCisJeworCSAg b3AgPSBkZWZhdWx0X2Z1bmN0aW9uX2FycmF5X3JlYWRfY29udmVyc2lvbiAo ZXhwX2xvYywgb3ApOworCSAgcmV0dXJuIHBhcnNlcl9idWlsZF91bmFyeV9v cCAob3BfbG9jLCBQUkVERUNSRU1FTlRfRVhQUiwgb3ApOworCX0KICAgICBj YXNlIENQUF9BTkQ6CiAgICAgICBjX3BhcnNlcl9jb25zdW1lX3Rva2VuIChw YXJzZXIpOwogICAgICAgb3AgPSBjX3BhcnNlcl9jYXN0X2V4cHJlc3Npb24g KHBhcnNlciwgTlVMTCk7CkBAIC02ODg2LDEwICs2OTI5LDM1IEBACiAJY2Fz ZSBDUFBfT1BFTl9TUVVBUkU6CiAJICAvKiBBcnJheSByZWZlcmVuY2UuICAq LwogCSAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKLQkgIGlk eCA9IGNfcGFyc2VyX2V4cHJlc3Npb24gKHBhcnNlcikudmFsdWU7Ci0JICBj X3BhcnNlcl9za2lwX3VudGlsX2ZvdW5kIChwYXJzZXIsIENQUF9DTE9TRV9T UVVBUkUsCi0JCQkJICAgICAiZXhwZWN0ZWQgJTxdJT4iKTsKLQkgIGV4cHIu dmFsdWUgPSBidWlsZF9hcnJheV9yZWYgKG9wX2xvYywgZXhwci52YWx1ZSwg aWR4KTsKKwkgIGlmIChmbGFnX2VuYWJsZV9jaWxrcGx1cworCSAgICAgICYm IGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPnR5cGUgPT0gQ1BQX0NP TE9OKQorCSAgICAvKiBJZiB3ZSBhcmUgaGVyZSwgdGhlbndlIGhhdmUgc29t ZXRoaW5nIGxpa2UgdGhpczoKKwkgICAgICAgQXJyYXkgWyA6IF0KKwkgICAg Ki8KKwkgICAgZXhwci52YWx1ZSA9IGNfcGFyc2VyX2FycmF5X25vdGF0aW9u IChwYXJzZXIsIE5VTExfVFJFRSwKKwkJCQkJCSAgZXhwci52YWx1ZSk7CisJ ICBlbHNlCisJICAgIHsJICAgICAgCisJICAgICAgaWR4ID0gY19wYXJzZXJf ZXhwcmVzc2lvbiAocGFyc2VyKS52YWx1ZTsKKwkgICAgICAvKiBIZXJlIHdl IGhhdmUgMyBvcHRpb25zOgorCQkgMS4gQXJyYXkgW0VYUFJdIC0tIE5vcm1h bCBBcnJheSBjYWxsLgorCQkgMi4gQXJyYXkgW0VYUFIgOiBFWFBSXSAtLSBB cnJheSBub3RhdGlvbiB3aXRob3V0IHN0cmlkZS4KKwkJIDMuIEFycmF5IFtF WFBSIDogRVhQUiA6IEVYUFJdIC0tIEFycmF5IG5vdGF0aW9uIHdpdGggc3Ry aWRlLgorCisJCSBGb3IgMSwgd2UganVzdCBoYW5kbGUgaXQganVzdCBsaWtl IGEgbm9ybWFsIGFycmF5IGV4cHJlc3Npb24uCisJCSBGb3IgMiBhbmQgMyB3 ZSBoYW5kbGUgaXQgbGlrZSB3ZSBoYW5kbGUgYXJyYXkgbm90YXRpb25zLiAg VGhlCisJCSBpZHggdmFsdWUgd2UgaGF2ZSBhYm92ZSBiZWNvbWVzIHRoZSBp bml0aWFsL3N0YXJ0IGluZGV4LgorCSAgICAgICovCisJICAgICAgaWYgKGZs YWdfZW5hYmxlX2NpbGtwbHVzCisJCSAgJiYgY19wYXJzZXJfcGVla190b2tl biAocGFyc2VyKS0+dHlwZSA9PSBDUFBfQ09MT04pCisJCWV4cHIudmFsdWUg PSBjX3BhcnNlcl9hcnJheV9ub3RhdGlvbiAocGFyc2VyLCBpZHgsIGV4cHIu dmFsdWUpOworCSAgICAgIGVsc2UKKwkJeworCQkgIGNfcGFyc2VyX3NraXBf dW50aWxfZm91bmQgKHBhcnNlciwgQ1BQX0NMT1NFX1NRVUFSRSwKKwkJCQkJ ICAgICAiZXhwZWN0ZWQgJTxdJT4iKTsKKwkJICBleHByLnZhbHVlID0gYnVp bGRfYXJyYXlfcmVmIChvcF9sb2MsIGV4cHIudmFsdWUsIGlkeCk7CisJCX0K KwkgICAgfQogCSAgZXhwci5vcmlnaW5hbF9jb2RlID0gRVJST1JfTUFSSzsK IAkgIGV4cHIub3JpZ2luYWxfdHlwZSA9IE5VTEw7CiAJICBicmVhazsKQEAg LTY5OTQsMTggKzcwNjIsMzIgQEAKIAljYXNlIENQUF9QTFVTX1BMVVM6CiAJ ICAvKiBQb3N0aW5jcmVtZW50LiAgKi8KIAkgIGNfcGFyc2VyX2NvbnN1bWVf dG9rZW4gKHBhcnNlcik7Ci0JICBleHByID0gZGVmYXVsdF9mdW5jdGlvbl9h cnJheV9yZWFkX2NvbnZlcnNpb24gKGV4cHJfbG9jLCBleHByKTsKLQkgIGV4 cHIudmFsdWUgPSBidWlsZF91bmFyeV9vcCAob3BfbG9jLAotCQkJCSAgICAg ICBQT1NUSU5DUkVNRU5UX0VYUFIsIGV4cHIudmFsdWUsIDApOworCSAgLyog SWYgdGhlIGV4cHJlc3Npb24gaGFzIGFycmF5IG5vdGF0aW9ucywgd2UgZXhw YW5kIHRoZW0uICAqLworCSAgaWYgKGZsYWdfZW5hYmxlX2NpbGtwbHVzCisJ ICAgICAgJiYgVFJFRV9DT0RFIChleHByLnZhbHVlKSA9PSBBUlJBWV9OT1RB VElPTl9SRUYpCisJICAgIGV4cHIgPSBmaXhfYXJyYXlfbm90YXRpb25fZXhw ciAoZXhwcl9sb2MsIFBPU1RJTkNSRU1FTlRfRVhQUiwgZXhwcik7CisJICBl bHNlCisJICAgIHsKKwkgICAgICBleHByID0gZGVmYXVsdF9mdW5jdGlvbl9h cnJheV9yZWFkX2NvbnZlcnNpb24gKGV4cHJfbG9jLCBleHByKTsKKwkgICAg ICBleHByLnZhbHVlID0gYnVpbGRfdW5hcnlfb3AgKG9wX2xvYywKKwkJCQkJ ICAgUE9TVElOQ1JFTUVOVF9FWFBSLCBleHByLnZhbHVlLCAwKTsKKwkgICAg fQogCSAgZXhwci5vcmlnaW5hbF9jb2RlID0gRVJST1JfTUFSSzsKIAkgIGV4 cHIub3JpZ2luYWxfdHlwZSA9IE5VTEw7CiAJICBicmVhazsKIAljYXNlIENQ UF9NSU5VU19NSU5VUzoKIAkgIC8qIFBvc3RkZWNyZW1lbnQuICAqLwogCSAg Y19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKLQkgIGV4cHIgPSBk ZWZhdWx0X2Z1bmN0aW9uX2FycmF5X3JlYWRfY29udmVyc2lvbiAoZXhwcl9s b2MsIGV4cHIpOwotCSAgZXhwci52YWx1ZSA9IGJ1aWxkX3VuYXJ5X29wIChv cF9sb2MsCi0JCQkJICAgICAgIFBPU1RERUNSRU1FTlRfRVhQUiwgZXhwci52 YWx1ZSwgMCk7CisJICAvKiBJZiB0aGUgZXhwcmVzc2lvbiBoYXMgYXJyYXkg bm90YXRpb25zLCB3ZSBleHBhbmQgdGhlbS4gICovCisJICBpZiAoZmxhZ19l bmFibGVfY2lsa3BsdXMKKwkgICAgICAmJiBUUkVFX0NPREUgKGV4cHIudmFs dWUpID09IEFSUkFZX05PVEFUSU9OX1JFRikKKwkgICAgZXhwciA9IGZpeF9h cnJheV9ub3RhdGlvbl9leHByIChleHByX2xvYywgUE9TVERFQ1JFTUVOVF9F WFBSLCBleHByKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGV4cHIgPSBk ZWZhdWx0X2Z1bmN0aW9uX2FycmF5X3JlYWRfY29udmVyc2lvbiAoZXhwcl9s b2MsIGV4cHIpOworCSAgICAgIGV4cHIudmFsdWUgPSBidWlsZF91bmFyeV9v cCAob3BfbG9jLAorCQkJCQkgICBQT1NUREVDUkVNRU5UX0VYUFIsIGV4cHIu dmFsdWUsIDApOworCSAgICB9CiAJICBleHByLm9yaWdpbmFsX2NvZGUgPSBF UlJPUl9NQVJLOwogCSAgZXhwci5vcmlnaW5hbF90eXBlID0gTlVMTDsKIAkg IGJyZWFrOwpAQCAtMTA4ODksNCArMTA5NzEsMTAyIEBACiAgIHRoZV9wYXJz ZXIgPSBOVUxMOwogfQogCisvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBDaWxr IFBsdXMgYXJyYXkgbm90YXRpb24uICBUaGUgc3RhcnRpbmcgaW5kZXggaXMK KyAgIHBhc3NlZCBpbiBJTklUSUFMX0lOREVYIGFuZCB0aGUgYXJyYXkgbmFt ZSBpcyBwYXNzZXMgaW4gQVJSQVlfVkFMVUUuICBUaGUKKyAgIHJldHVybiB2 YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgdHJlZV9ub2RlIGNhbGxlZCBW QUxVRV9UUkVFIG9mIHR5cGUKKyAgIEFSUkFZX05PVEFUSU9OX1JFRi4gICov CisKK3N0YXRpYyB0cmVlIAorY19wYXJzZXJfYXJyYXlfbm90YXRpb24gKGNf cGFyc2VyICpwYXJzZXIsIHRyZWUgaW5pdGlhbF9pbmRleCwgdHJlZSBhcnJh eV92YWx1ZSkKK3sKKyAgY190b2tlbiAqdG9rZW4gPSBOVUxMOworICB0cmVl IHN0YXJ0X2luZGV4ID0gTlVMTF9UUkVFLCBlbmRfaW5kZXggPSBOVUxMX1RS RUUsIHN0cmlkZSA9IE5VTExfVFJFRTsKKyAgdHJlZSB2YWx1ZV90cmVlID0g TlVMTF9UUkVFLCB0eXBlID0gTlVMTF9UUkVFLCBhcnJheV90eXBlID0gTlVM TF9UUkVFOworICB0cmVlIGFycmF5X3R5cGVfZG9tYWluID0gTlVMTF9UUkVF OyAKKyAgZG91YmxlX2ludCB4OworCisgIGFycmF5X3R5cGUgPSBUUkVFX1RZ UEUgKGFycmF5X3ZhbHVlKTsKKyAgZ2NjX2Fzc2VydCAoYXJyYXlfdHlwZSk7 CisgIHR5cGUgPSBUUkVFX1RZUEUgKGFycmF5X3R5cGUpOworICB0b2tlbiA9 IGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlcik7CisgIAorICBpZiAodG9r ZW4gPT0gTlVMTCkKKyAgICB7CisgICAgICBjX3BhcnNlcl9lcnJvciAocGFy c2VyLCAiZXhwZWN0ZWQgJTw6JT4gb3IgbnVtZXJhbCIpOworICAgICAgcmV0 dXJuIHZhbHVlX3RyZWU7CisgICAgfQorICBlbHNlIGlmICh0b2tlbi0+dHlw ZSA9PSBDUFBfQ09MT04pCisgICAgeworICAgICAgaWYgKCFpbml0aWFsX2lu ZGV4KQorCXsKKwkgIC8qIElmIHdlIGFyZSBoZXJlLCB0aGVuIHdlIGhhdmUg YSBjYXNlIGxpa2UgdGhpcyBBWzpdLiAgKi8KKwkgIGNfcGFyc2VyX2NvbnN1 bWVfdG9rZW4gKHBhcnNlcik7CisJICBhcnJheV90eXBlX2RvbWFpbiA9IFRZ UEVfRE9NQUlOIChhcnJheV90eXBlKTsKKwkgIGdjY19hc3NlcnQgKGFycmF5 X3R5cGVfZG9tYWluKTsKKwkgIHN0YXJ0X2luZGV4ID0gVFlQRV9NSU5WQUwg KGFycmF5X3R5cGVfZG9tYWluKTsKKwkgIHN0YXJ0X2luZGV4ID0gZm9sZF9i dWlsZDEgKENPTlZFUlRfRVhQUiwgaW50ZWdlcl90eXBlX25vZGUsCisJCQkJ ICAgICBzdGFydF9pbmRleCk7CisJICB4ID0gVFJFRV9JTlRfQ1NUIChUWVBF X01BWFZBTCAoYXJyYXlfdHlwZV9kb21haW4pKTsKKwkgIHgubG93Kys7CisJ ICBlbmRfaW5kZXggPSBkb3VibGVfaW50X3RvX3RyZWUgKGludGVnZXJfdHlw ZV9ub2RlLCB4KTsKKwkgIAorCSAgaWYgKHRyZWVfaW50X2NzdF9sdCAoYnVp bGRfaW50X2NzdCAoVFJFRV9UWVBFIChlbmRfaW5kZXgpLCAwKSwKKwkJCSAg ICAgICBlbmRfaW5kZXgpKQorCSAgICBzdHJpZGUgPSBidWlsZF9pbnRfY3N0 IChUUkVFX1RZUEUgKHN0YXJ0X2luZGV4KSwgMSk7CisJICBlbHNlCisJICAg IHN0cmlkZSA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoc3RhcnRfaW5k ZXgpLCAtMSk7CisJfQorICAgICAgZWxzZSBpZiAoaW5pdGlhbF9pbmRleCAh PSBlcnJvcl9tYXJrX25vZGUpCisJeworCSAgLyogSWYgd2UgYXJlIGhlcmUs IHRoZW4gdGhlcmUgc2hvdWxkIGJlIDIgcG9zc2liaWxpdGllczoKKwkgICAg IDEuIEFycmF5IFtFWFBSIDogRVhQUl0KKwkgICAgIDIuIEFycmF5IFtFWFBS IDogRVhQUiA6IEVYUFJdCisJICAqLworCSAgc3RhcnRfaW5kZXggPSBpbml0 aWFsX2luZGV4OworCisJICBjX3BhcnNlcl9jb25zdW1lX3Rva2VuIChwYXJz ZXIpOyAvKiBjb25zdW1lIHRoZSAnOicgKi8KKwkgIGVuZF9pbmRleCA9IGNf cGFyc2VyX2V4cHJlc3Npb24gKHBhcnNlcikudmFsdWU7CisJICBpZiAoIWVu ZF9pbmRleCB8fCBlbmRfaW5kZXggPT0gZXJyb3JfbWFya19ub2RlKQorCSAg ICB7CisJICAgICAgY19wYXJzZXJfc2tpcF90b19lbmRfb2ZfYmxvY2tfb3Jf c3RhdGVtZW50IChwYXJzZXIpOworCSAgICAgIHJldHVybiBlcnJvcl9tYXJr X25vZGU7CisJICAgIH0KKwkgIGlmIChjX3BhcnNlcl9wZWVrX3Rva2VuIChw YXJzZXIpLT50eXBlID09IENQUF9DT0xPTikKKwkgICAgeworCSAgICAgIGNf cGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisJICAgICAgc3RyaWRl ID0gY19wYXJzZXJfZXhwcmVzc2lvbiAocGFyc2VyKS52YWx1ZTsKKwkgICAg ICBpZiAoIXN0cmlkZSB8fCBzdHJpZGUgPT0gZXJyb3JfbWFya19ub2RlKQor CQl7CisJCSAgY19wYXJzZXJfc2tpcF90b19lbmRfb2ZfYmxvY2tfb3Jfc3Rh dGVtZW50IChwYXJzZXIpOworCQkgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7 CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICBpZiAoVFJFRV9DT05TVEFO VCAoc3RhcnRfaW5kZXgpICYmIFRSRUVfQ09OU1RBTlQgKGVuZF9pbmRleCkK KwkJJiYgdHJlZV9pbnRfY3N0X2x0IChlbmRfaW5kZXgsIHN0YXJ0X2luZGV4 KSkKKwkgICAgICBzdHJpZGUgPSBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUg KHN0YXJ0X2luZGV4KSwgLTEpOworCSAgICBlbHNlCisJICAgICAgc3RyaWRl ID0gYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChzdGFydF9pbmRleCksIDEp OworCX0KKyAgICAgIGVsc2UKKwljX3BhcnNlcl9lcnJvciAocGFyc2VyLCAi ZXhwZWN0ZWQgYXJyYXkgbm90YXRpb24gZXhwcmVzc2lvbiIpOworICAgIH0K KyAgZWxzZQorICAgIGNfcGFyc2VyX2Vycm9yIChwYXJzZXIsICJleHBlY3Rl ZCBhcnJheSBub3RhdGlvbiBleHByZXNzaW9uIik7CisgIAorICBjX3BhcnNl cl9za2lwX3VudGlsX2ZvdW5kIChwYXJzZXIsIENQUF9DTE9TRV9TUVVBUkUs ICJleHBlY3RlZCAlPF0lPiIpOworICAgIAorCisgIHZhbHVlX3RyZWUgPSBi dWlsZDUgKEFSUkFZX05PVEFUSU9OX1JFRiwgTlVMTF9UUkVFLCBOVUxMX1RS RUUsIE5VTExfVFJFRSwKKwkJICAgICAgIE5VTExfVFJFRSwgTlVMTF9UUkVF LCBOVUxMX1RSRUUpOworICBBUlJBWV9OT1RBVElPTl9BUlJBWSAodmFsdWVf dHJlZSkgPSBhcnJheV92YWx1ZTsKKyAgQVJSQVlfTk9UQVRJT05fU1RBUlQg KHZhbHVlX3RyZWUpID0gc3RhcnRfaW5kZXg7CisgIEFSUkFZX05PVEFUSU9O X0xFTkdUSCAodmFsdWVfdHJlZSkgPSBlbmRfaW5kZXg7CisgIEFSUkFZX05P VEFUSU9OX1NUUklERSAodmFsdWVfdHJlZSkgPSBzdHJpZGU7CisgIEFSUkFZ X05PVEFUSU9OX1RZUEUgKHZhbHVlX3RyZWUpID0gdHlwZTsKKworICBUUkVF X1RZUEUgKHZhbHVlX3RyZWUpID0gdHlwZTsKKyAgcmV0dXJuIHZhbHVlX3Ry ZWU7Cit9CisKICNpbmNsdWRlICJndC1jLWMtcGFyc2VyLmgiCkluZGV4OiBn Y2MvYy9jLXR5cGVjay5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdj Yy9jL2MtdHlwZWNrLmMJKHJldmlzaW9uIDE5MTc2NSkKKysrIGdjYy9jL2Mt dHlwZWNrLmMJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsOCBAQAog c3RhdGljIGludCBsdmFsdWVfb3JfZWxzZSAobG9jYXRpb25fdCwgY29uc3Rf dHJlZSwgZW51bSBsdmFsdWVfdXNlKTsKIHN0YXRpYyB2b2lkIHJlY29yZF9t YXliZV91c2VkX2RlY2wgKHRyZWUpOwogc3RhdGljIGludCBjb21wdHlwZXNf aW50ZXJuYWwgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUsIGJvb2wgKiwgYm9v bCAqKTsKK2V4dGVybiBib29sIGNvbnRhaW5zX2FycmF5X25vdGF0aW9uX2V4 cHIgKHRyZWUpOworCiAMCiAvKiBSZXR1cm4gdHJ1ZSBpZiBFWFAgaXMgYSBu dWxsIHBvaW50ZXIgY29uc3RhbnQsIGZhbHNlIG90aGVyd2lzZS4gICovCiAK QEAgLTI5NTMsNiArMjk1NSwxMyBAQAogICAgICAgYm9vbCBucGM7CiAgICAg ICB0cmVlIHBhcm12YWw7CiAKKyAgICAgIC8qIElmIGFycmF5IG5vdGF0aW9u cyBhcmUgdXNlZCwgdGhlbiB3ZSBkbyBub3Qgd29ycnkgYWJvdXQgdGhpcyBu b3cuICBXZQorCSB3aWxsIHRha2UgY2FyZSBvZiB0aGVtIGxhdGVyLiAgKi8K KyAgICAgIGlmIChmbGFnX2VuYWJsZV9jaWxrcGx1cworCSAgJiYgKGNvbnRh aW5zX2FycmF5X25vdGF0aW9uX2V4cHIgKHZhbCkKKwkgICAgICB8fCBjb250 YWluc19hcnJheV9ub3RhdGlvbl9leHByIChmdW5kZWNsKSkpCisJY29udGlu dWU7CisgICAgICAKICAgICAgIGlmICh0eXBlID09IHZvaWRfdHlwZV9ub2Rl KQogCXsKIAkgIGlmIChzZWxlY3RvcikKQEAgLTMxOTIsMTAgKzMyMDEsMTkg QEAKIAogICBpZiAodHlwZXRhaWwgIT0gMCAmJiBUUkVFX1ZBTFVFICh0eXBl dGFpbCkgIT0gdm9pZF90eXBlX25vZGUpCiAgICAgewotICAgICAgZXJyb3Jf YXQgKGlucHV0X2xvY2F0aW9uLAotCQkidG9vIGZldyBhcmd1bWVudHMgdG8g ZnVuY3Rpb24gJXFFIiwgZnVuY3Rpb24pOwotICAgICAgaW5mb3JtX2RlY2xh cmF0aW9uIChmdW5kZWNsKTsKLSAgICAgIHJldHVybiAtMTsKKyAgICAgIC8q IElmIGFycmF5IG5vdGF0aW9uIGlzIHVzZWQgYW5kIENpbGsgUGx1cyBpcyBl bmFibGVkLCB0aGVuIHdlIGRvIG5vdAorCSB3b3JyeSBhYm91dCB0aGlzIGVy cm9yIG5vdy4gIFdlIHdpbGwgaGFuZGxlIHRoZW0gaW4gYSBsYXRlciBwbGFj ZS4gICovCisgICAgICBpZiAoZmxhZ19lbmFibGVfY2lsa3BsdXMKKwkgICYm IChjb250YWluc19hcnJheV9ub3RhdGlvbl9leHByIChmdW5jdGlvbikKKwkg ICAgICB8fCBjb250YWluc19hcnJheV9ub3RhdGlvbl9leHByIChidWlsZF90 cmVlX2xpc3RfdmVjICh2YWx1ZXMpKSkpCisJOworICAgICAgZWxzZQorCXsK KwkgIGVycm9yX2F0IChpbnB1dF9sb2NhdGlvbiwKKwkJICAgICJ0b28gZmV3 IGFyZ3VtZW50cyB0byBmdW5jdGlvbiAlcUUiLCBmdW5jdGlvbik7CisJICBp bmZvcm1fZGVjbGFyYXRpb24gKGZ1bmRlY2wpOworCSAgcmV0dXJuIC0xOwor CX0KICAgICB9CiAKICAgcmV0dXJuIGVycm9yX2FyZ3MgPyAtMSA6IChpbnQp IHBhcm1udW07CkBAIC01MTA4LDYgKzUxMjYsOSBAQAogICB0cmVlIHJuYW1l ID0gTlVMTF9UUkVFOwogICBib29sIG9iamNfb2sgPSBmYWxzZTsKIAorICAv KiBXZSB3aWxsIGJyZWFrIHVwIGFycmF5IG5vdGF0aW9ucyBpbiBhIGxhdGVy IHBsYWNlLiAgKi8KKyAgaWYgKGZsYWdfZW5hYmxlX2NpbGtwbHVzICYmIGNv bnRhaW5zX2FycmF5X25vdGF0aW9uX2V4cHIgKHJocykpCisgICAgcmV0dXJu IHJoczsKICAgaWYgKGVycnR5cGUgPT0gaWNfYXJncGFzcykKICAgICB7CiAg ICAgICB0cmVlIHNlbGVjdG9yOwpAQCAtNTY1NCwxNiArNTY3NSwyMCBAQAog CSBvciBvbmUgdGhhdCByZXN1bHRzIGZyb20gYXJpdGhtZXRpYywgZXZlbiBp bmNsdWRpbmcKIAkgYSBjYXN0IHRvIGludGVnZXIgdHlwZS4gICovCiAgICAg ICBpZiAoIW51bGxfcG9pbnRlcl9jb25zdGFudCkKLQlXQVJOX0ZPUl9BU1NJ R05NRU5UIChsb2NhdGlvbiwgMCwKLQkJCSAgICAgR18oInBhc3NpbmcgYXJn dW1lbnQgJWQgb2YgJXFFIG1ha2VzICIKLQkJCQkicG9pbnRlciBmcm9tIGlu dGVnZXIgd2l0aG91dCBhIGNhc3QiKSwKLQkJCSAgICAgR18oImFzc2lnbm1l bnQgbWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgIgotCQkJCSJ3aXRob3V0 IGEgY2FzdCIpLAotCQkJICAgICBHXygiaW5pdGlhbGl6YXRpb24gbWFrZXMg cG9pbnRlciBmcm9tICIKLQkJCQkiaW50ZWdlciB3aXRob3V0IGEgY2FzdCIp LAotCQkJICAgICBHXygicmV0dXJuIG1ha2VzIHBvaW50ZXIgZnJvbSBpbnRl Z2VyICIKLQkJCQkid2l0aG91dCBhIGNhc3QiKSk7Ci0KKwl7CisJICBpZiAo ZmxhZ19lbmFibGVfY2lsa3BsdXMgJiYgY29udGFpbnNfYXJyYXlfbm90YXRp b25fZXhwciAocmhzKSkKKwkgICAgOworCSAgZWxzZQorCSAgICBXQVJOX0ZP Ul9BU1NJR05NRU5UIChsb2NhdGlvbiwgMCwKKwkJCQkgR18oInBhc3Npbmcg YXJndW1lbnQgJWQgb2YgJXFFIG1ha2VzICIKKwkJCQkgICAgInBvaW50ZXIg ZnJvbSBpbnRlZ2VyIHdpdGhvdXQgYSBjYXN0IiksCisJCQkJIEdfKCJhc3Np Z25tZW50IG1ha2VzIHBvaW50ZXIgZnJvbSBpbnRlZ2VyICIKKwkJCQkgICAg IndpdGhvdXQgYSBjYXN0IiksCisJCQkJIEdfKCJpbml0aWFsaXphdGlvbiBt YWtlcyBwb2ludGVyIGZyb20gIgorCQkJCSAgICAiaW50ZWdlciB3aXRob3V0 IGEgY2FzdCIpLAorCQkJCSBHXygicmV0dXJuIG1ha2VzIHBvaW50ZXIgZnJv bSBpbnRlZ2VyICIKKwkJCQkgICAgIndpdGhvdXQgYSBjYXN0IikpOworCX0K ICAgICAgIHJldHVybiBjb252ZXJ0ICh0eXBlLCByaHMpOwogICAgIH0KICAg ZWxzZSBpZiAoY29kZWwgPT0gSU5URUdFUl9UWVBFICYmIGNvZGVyID09IFBP SU5URVJfVFlQRSkKSW5kZXg6IGdjYy9jL01ha2UtbGFuZy5pbgo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvYy9NYWtlLWxhbmcuaW4JKHJldmlz aW9uIDE5MTc2NSkKKysrIGdjYy9jL01ha2UtbGFuZy5pbgkod29ya2luZyBj b3B5KQpAQCAtNTgsNyArNTgsNyBAQAogIyBMYW5ndWFnZS1zcGVjaWZpYyBv YmplY3QgZmlsZXMgZm9yIEMgYW5kIE9iamVjdGl2ZSBDLgogQ19BTkRfT0JK Q19PQkpTID0gYXR0cmlicy5vIGMvYy1lcnJvcnMubyBjL2MtZGVjbC5vIGMv Yy10eXBlY2subyBcCiAgIGMvYy1jb252ZXJ0Lm8gYy9jLWF1eC1pbmZvLm8g Yy9jLW9iamMtY29tbW9uLm8gYy9jLXBhcnNlci5vIFwKLSAgJChDX0NPTU1P Tl9PQkpTKSAkKENfVEFSR0VUX09CSlMpCisgIGMvYy1hcnJheS1ub3RhdGlv bi5vICQoQ19DT01NT05fT0JKUykgJChDX1RBUkdFVF9PQkpTKQogCiAjIExh bmd1YWdlLXNwZWNpZmljIG9iamVjdCBmaWxlcyBmb3IgQy4KIENfT0JKUyA9 IGMvYy1sYW5nLm8gYy1mYW1pbHkvc3R1Yi1vYmpjLm8gJChDX0FORF9PQkpD X09CSlMpCkBAIC0xOTQsMyArMTk0LDggQEAKIAlsYW5naG9va3MuaCB0cmVl LWl0ZXJhdG9yLmggJChCSVRNQVBfSCkgJChHSU1QTEVfSCkgXAogCWMtZmFt aWx5L2Mtb2JqYy5oCiAKK2MvYy1hcnJheS1ub3RhdGlvbi5vOiBjL2MtYXJy YXktbm90YXRpb24uYyBjL2MtbGFuZy5oICQoQ09ORklHX0gpIFwKKwkkKFNZ U1RFTV9IKSBjb3JldHlwZXMuaCAkKFRSRUVfSCkgJChDX1RSRUVfSCkgJChU QVJHRVRfSCkgXAorCWludGwuaCBvdXRwdXQuaCAkKEVYUFJfSCkgbGFuZ2hv b2tzLmggdHJlZS1pdGVyYXRvci5oICQoQklUTUFQX0gpIFwKKwkkKEdJTVBM RV9IKSBjLWZhbWlseS9jLW9iamMuaAorCkluZGV4OiBnY2MvYy9jLWFycmF5 LW5vdGF0aW9uLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2Mv Yy1hcnJheS1ub3RhdGlvbi5jCShyZXZpc2lvbiAwKQorKysgZ2NjL2MvYy1h cnJheS1ub3RhdGlvbi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0NzIg QEAKKy8qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbnRlbChSKSBDaWxr KFRNKSBQbHVzIHN1cHBvcnQKKyAgIFRoaXMgZmlsZSBjb250YWlucyByb3V0 aW5lcyB0byBoYW5kbGUgQXJyYXkgTm90YXRpb24gZXhwcmVzc2lvbgorICAg aGFuZGxpbmcgcm91dGluZXMgaW4gdGhlIEMgQ29tcGlsZXIuCisgICBDb3B5 cmlnaHQgKEMpIDIwMTEsIDIwMTIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQmFsYWppIFYuIEl5ZXIgPGJh bGFqaS52Lml5ZXJAaW50ZWwuY29tPiwKKyAgICAgICAgICAgICAgICAgIElu dGVsIENvcnBvcmF0aW9uLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBH Q0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgIFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu Y2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorI2lu Y2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjLXRyZWUuaCIKKyNpbmNsdWRl ICJ0cmVlLWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAib3B0cy5oIgorI2luY2x1 ZGUgImdjYy5oIgorI2luY2x1ZGUgImMtZmFtaWx5L2MtY29tbW9uLmgiCisK K3ZvaWQgcmVwbGFjZV9hcnJheV9ub3RhdGlvbnMgKHRyZWUgKiwgYm9vbCwg dHJlZSAqLCB0cmVlICosIGludCk7Cit2b2lkIGZpbmRfcmFuayAodHJlZSwg Ym9vbCwgaW50ICopOwordm9pZCBleHRyYWN0X2FycmF5X25vdGF0aW9uX2V4 cHJzICh0cmVlLCBib29sLCB0cmVlICoqLCBpbnQgKik7Cit0cmVlIGZpeF9j b25kaXRpb25hbF9hcnJheV9ub3RhdGlvbnMgKHRyZWUpOworc3RydWN0IGNf ZXhwciBmaXhfYXJyYXlfbm90YXRpb25fZXhwciAobG9jYXRpb25fdCwgZW51 bSB0cmVlX2NvZGUsCisJCQkJICAgICAgIHN0cnVjdCBjX2V4cHIpOworc3Rh dGljIGJvb2wgaXNfYnVpbHRpbl9hcnJheV9ub3RhdGlvbl9mbiAodHJlZSBm dW5jX25hbWUsIGFuX3JlZHVjZV90eXBlICp0eXBlKTsKK3N0YXRpYyB0cmVl IGZpeF9idWlsdGluX2FycmF5X25vdGF0aW9uX2ZuICh0cmVlIGFuX2J1aWx0 aW5fZm4sIHRyZWUgKm5ld192YXIpOworYm9vbCBjb250YWluc19hcnJheV9u b3RhdGlvbl9leHByICh0cmVlIGV4cHIpOwordHJlZSBleHBhbmRfYXJyYXlf bm90YXRpb25fZXhwcnMgKHRyZWUgdCk7CisKKworLyogUmV0dXJucyB0aGUg cmFuayBvZiBBUlJBWSB0aHJvdWdoIHRoZSAqUkFOSy4gIFRoZSB1c2VyIGNh biBzcGVjaWZ5IHdoZXRoZXIKKyAgIChzKWhlIHdhbnRzIHRvIHN0ZXAgaW50 byBhcnJheV9ub3RhdGlvbi1zcGVjaWZpYyBidWlsdGluIGZ1bmN0aW9ucwor ICAgKHNwZWNpZmllZCBieSB0aGUgSUdOT1JFX0JVSUxUSU5fRk4pLgorCisg ICBGb3IgZXhhbXBsZSwgYW4gYXJyYXkgbm90YXRpb24gb2YgQVs6XVs6XSBv ciBCWzA6MTBdWzA6NToyXSBvciBDWzVdWzpdWzE6MF0KKyAgIGFsbCBoYXZl IGEgcmFuayBvZiAyLiAgKi8KKwordm9pZAorZmluZF9yYW5rICh0cmVlIGFy cmF5LCBib29sIGlnbm9yZV9idWlsdGluX2ZuLCBpbnQgKnJhbmspCit7Cisg IHRyZWUgaWlfdHJlZTsKKyAgaW50IGN1cnJlbnRfcmFuayA9IDAsIGlpID0g MDsKKyAgYW5fcmVkdWNlX3R5cGUgZHVtbXlfdHlwZSA9IFJFRFVDRV9VTktO T1dOOworICBpZiAoIWFycmF5KQorICAgIHJldHVybjsKKyAgZWxzZSBpZiAo VFJFRV9DT0RFIChhcnJheSkgPT0gQVJSQVlfTk9UQVRJT05fUkVGKQorICAg IHsKKyAgICAgIGZvciAoaWlfdHJlZSA9IGFycmF5OworCSAgIGlpX3RyZWUg JiYgVFJFRV9DT0RFIChpaV90cmVlKSA9PSBBUlJBWV9OT1RBVElPTl9SRUY7 CisJICAgaWlfdHJlZSA9IEFSUkFZX05PVEFUSU9OX0FSUkFZIChpaV90cmVl KSkKKwljdXJyZW50X3JhbmsrKzsKKyAgICAgIAorICAgICAgaWYgKCpyYW5r ICE9IDAgJiYgKnJhbmsgIT0gY3VycmVudF9yYW5rKQorCWVycm9yICgiUmFu ayBNaXNtYXRjaCEiKTsKKyAgICAgIGVsc2UgaWYgKCpyYW5rID09IDApCisJ KnJhbmsgPSBjdXJyZW50X3Jhbms7CisgICAgfQorICBlbHNlIGlmIChUUkVF X0NPREUgKGFycmF5KSA9PSBTVEFURU1FTlRfTElTVCkKKyAgICB7CisgICAg ICB0cmVlX3N0bXRfaXRlcmF0b3IgaWlfdHNpOworICAgICAgZm9yIChpaV90 c2kgPSB0c2lfc3RhcnQgKGFycmF5KTsgIXRzaV9lbmRfcCAoaWlfdHNpKTsK KwkgICB0c2lfbmV4dCAoJmlpX3RzaSkpCisJZmluZF9yYW5rICgqdHNpX3N0 bXRfcHRyIChpaV90c2kpLCBpZ25vcmVfYnVpbHRpbl9mbiwgcmFuayk7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKFRSRUVfQ09ERSAoYXJy YXkpID09IENBTExfRVhQUikKKwl7CisJICB0cmVlIGZ1bmNfbmFtZSA9IENB TExfRVhQUl9GTiAoYXJyYXkpOworCSAgaWYgKFRSRUVfQ09ERSAoZnVuY19u YW1lKSA9PSBBRERSX0VYUFIpCisJICAgIGlmICghaWdub3JlX2J1aWx0aW5f Zm4pCisJICAgICAgaWYgKGlzX2J1aWx0aW5fYXJyYXlfbm90YXRpb25fZm4g KGZ1bmNfbmFtZSwgJmR1bW15X3R5cGUpKQorCQkvKiBJZiBpdCBpcyBhIGJ1 aWx0aW4gZnVuY3Rpb24sIHRoZW4gd2Uga25vdyBpdCByZXR1cm5zIGEgCisJ CSAgIHNjYWxhci4gICovCisJCXJldHVybjsKKwkgIGlmIChUUkVFX0NPREUg KFRSRUVfT1BFUkFORCAoYXJyYXksIDApKSA9PSBJTlRFR0VSX0NTVCkKKwkg ICAgeworCSAgICAgIGludCBsZW5ndGggPSBUUkVFX0lOVF9DU1RfTE9XIChU UkVFX09QRVJBTkQgKGFycmF5LCAwKSk7CisJICAgICAgZm9yIChpaSA9IDA7 IGlpIDwgbGVuZ3RoOyBpaSsrKQorCQlmaW5kX3JhbmsgKFRSRUVfT1BFUkFO RCAoYXJyYXksIGlpKSwgaWdub3JlX2J1aWx0aW5fZm4sIHJhbmspOworCSAg ICB9CisJICBlbHNlCisJICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKwl9Cisg ICAgICBlbHNlIAorCWZvciAoaWkgPSAwOyBpaSA8IFRSRUVfQ09ERV9MRU5H VEggKFRSRUVfQ09ERSAoYXJyYXkpKTsgaWkrKykgCisJICBmaW5kX3Jhbmsg KFRSRUVfT1BFUkFORCAoYXJyYXksIGlpKSwgaWdub3JlX2J1aWx0aW5fZm4s IHJhbmspOworICAgIH0KKyAgcmV0dXJuOworfQorCisKKy8qIEV4dHJhY3Rz IGFsbCB0aGUgYXJyYXkgbm90YXRpb25zIHNwZWNpZmllZCBpbiBOT0RFIGFu ZCBzdG9yZXMgdGhlbSBpbiBhCisgICBkeW5hbWljIHRyZWUgYXJyYXkgb2Yg QVJSQVlfTElTVCB3aG9zZSBzaXplIGlzIHN0b3JlZCBpbiAqTElTVF9TSVpF LiAgVGhlCisgICB1c2VyIGNhbiBzcGVjaWZ5IGlmIChzKWhlIHdhbnRzIHRv IGlnbm9yZSB0aGUgYXJyYXkgbm90YXRpb25zIGluc2lkZSB0aGUKKyAgIGFy cmF5LW5vdGF0aW9uIHNwZWNpZmljIGJ1aWx0aW4gZnVuY3Rpb25zIChieSBz ZXR0aW5nIElHTk9SRV9CVUlMVElOX0ZOIHRvCisgICB0cnVlKS4gICovCisK K3ZvaWQKK2V4dHJhY3RfYXJyYXlfbm90YXRpb25fZXhwcnMgKHRyZWUgbm9k ZSwgYm9vbCBpZ25vcmVfYnVpbHRpbl9mbiwKKwkJCSAgICAgIHRyZWUgKiph cnJheV9saXN0LCBpbnQgKmxpc3Rfc2l6ZSkKK3sKKyAgaW50IGlpID0gMDsK KyAgdHJlZSAqbmV3X2FycmF5X2xpc3QgPSBOVUxMOworICBhbl9yZWR1Y2Vf dHlwZSBkdW1teV90eXBlID0gUkVEVUNFX1VOS05PV047CisgIAorICBpZiAo IW5vZGUpCisgICAgcmV0dXJuOworICBlbHNlIGlmIChUUkVFX0NPREUgKG5v ZGUpID09IEFSUkFZX05PVEFUSU9OX1JFRikKKyAgICB7CisgICAgICBpaSA9 ICpsaXN0X3NpemU7CisgICAgICBuZXdfYXJyYXlfbGlzdCA9IFhSRVNJWkVW RUMgKHRyZWUsICphcnJheV9saXN0LCBpaSArIDEpOworICAgICAgZ2NjX2Fz c2VydCAobmV3X2FycmF5X2xpc3QpOworICAgICAgbmV3X2FycmF5X2xpc3Rb aWldID0gbm9kZTsKKyAgICAgIGlpKys7CisgICAgICAqbGlzdF9zaXplID0g aWk7CisgICAgICAqYXJyYXlfbGlzdCA9IG5ld19hcnJheV9saXN0OworICAg ICAgcmV0dXJuOworICAgIH0KKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChub2Rl KSA9PSBUUkVFX0xJU1QpCisgICAgeworICAgICAgZXh0cmFjdF9hcnJheV9u b3RhdGlvbl9leHBycyAoVFJFRV9QVVJQT1NFIChub2RlKSwgaWdub3JlX2J1 aWx0aW5fZm4sCisJCQkJICAgIGFycmF5X2xpc3QsIGxpc3Rfc2l6ZSk7Cisg ICAgICBleHRyYWN0X2FycmF5X25vdGF0aW9uX2V4cHJzIChUUkVFX1ZBTFVF IChub2RlKSwgaWdub3JlX2J1aWx0aW5fZm4sCisJCQkJICAgIGFycmF5X2xp c3QsIGxpc3Rfc2l6ZSk7CisgICAgICBleHRyYWN0X2FycmF5X25vdGF0aW9u X2V4cHJzIChUUkVFX0NIQUlOIChub2RlKSwgaWdub3JlX2J1aWx0aW5fZm4s CisJCQkJICAgIGFycmF5X2xpc3QsIGxpc3Rfc2l6ZSk7CisgICAgfQorICBl bHNlIGlmIChUUkVFX0NPREUgKG5vZGUpID09IFNUQVRFTUVOVF9MSVNUKQor ICAgIHsKKyAgICAgIHRyZWVfc3RtdF9pdGVyYXRvciBpaV90c2k7CisgICAg ICBmb3IgKGlpX3RzaSA9IHRzaV9zdGFydCAobm9kZSk7ICF0c2lfZW5kX3Ag KGlpX3RzaSk7IHRzaV9uZXh0ICgmaWlfdHNpKSkKKwlleHRyYWN0X2FycmF5 X25vdGF0aW9uX2V4cHJzICgqdHNpX3N0bXRfcHRyIChpaV90c2kpLAorCQkJ CSAgICAgIGlnbm9yZV9idWlsdGluX2ZuLCBhcnJheV9saXN0LAorCQkJCSAg ICAgIGxpc3Rfc2l6ZSk7CisgICAgfQorICBlbHNlIGlmIChUUkVFX0NPREUg KG5vZGUpID09IENBTExfRVhQUikKKyAgICB7CisgICAgICBpZiAoaXNfYnVp bHRpbl9hcnJheV9ub3RhdGlvbl9mbiAoQ0FMTF9FWFBSX0ZOIChub2RlKSwg JmR1bW15X3R5cGUpKQorCXsKKwkgIGlmIChpZ25vcmVfYnVpbHRpbl9mbikK KwkgICAgcmV0dXJuOworCSAgZWxzZQorCSAgICB7CisJICAgICAgaWkgPSAq bGlzdF9zaXplOworCSAgICAgIG5ld19hcnJheV9saXN0ID0gWFJFU0laRVZF QyAodHJlZSwgKmFycmF5X2xpc3QsIGlpICsgMSk7CisJICAgICAgZ2NjX2Fz c2VydCAobmV3X2FycmF5X2xpc3QpOworCSAgICAgIG5ld19hcnJheV9saXN0 W2lpXSA9IG5vZGU7CisJICAgICAgaWkrKzsKKwkgICAgICAqbGlzdF9zaXpl ID0gaWk7CisJICAgICAgKmFycmF5X2xpc3QgPSBuZXdfYXJyYXlfbGlzdDsK KwkgICAgICByZXR1cm47CisJICAgIH0KKwl9CisgICAgICBpZiAoaXNfc2Vj X2ltcGxpY2l0X2luZGV4X2ZuIChDQUxMX0VYUFJfRk4gKG5vZGUpKSkKKwl7 CisJICBpaSA9ICpsaXN0X3NpemU7CisJICBuZXdfYXJyYXlfbGlzdCA9IFhS RVNJWkVWRUMgKHRyZWUsICphcnJheV9saXN0LCBpaSArIDEpOworCSAgZ2Nj X2Fzc2VydCAobmV3X2FycmF5X2xpc3QpOyAKKwkgIG5ld19hcnJheV9saXN0 W2lpXSA9IG5vZGU7CisJICBpaSsrOworCSAgKmxpc3Rfc2l6ZSA9IGlpOwor CSAgKmFycmF5X2xpc3QgPSBuZXdfYXJyYXlfbGlzdDsKKwkgIHJldHVybjsK Kwl9CisgICAgICBpZiAoVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKG5vZGUs IDApKSA9PSBJTlRFR0VSX0NTVCkKKwl7CisJICBpbnQgbGVuZ3RoID0gVFJF RV9JTlRfQ1NUX0xPVyAoVFJFRV9PUEVSQU5EIChub2RlLCAwKSk7CisKKwkg IGZvciAoaWkgPSAwOyBpaSA8IGxlbmd0aDsgaWkrKykKKwkgICAgZXh0cmFj dF9hcnJheV9ub3RhdGlvbl9leHBycworCSAgICAgIChUUkVFX09QRVJBTkQg KG5vZGUsIGlpKSwgaWdub3JlX2J1aWx0aW5fZm4sIGFycmF5X2xpc3QsCisJ ICAgICAgIGxpc3Rfc2l6ZSk7CisJfQorICAgICAgZWxzZQorCWdjY191bnJl YWNoYWJsZSAoKTsgLyogV2Ugc2hvdWxkIG5vdCBnZXQgaGVyZS4gICovCisJ ICAKKyAgICB9IAorICBlbHNlIAorICAgIGZvciAoaWkgPSAwOyBpaSA8IFRS RUVfQ09ERV9MRU5HVEggKFRSRUVfQ09ERSAobm9kZSkpOyBpaSsrKSAKKyAg ICAgIGV4dHJhY3RfYXJyYXlfbm90YXRpb25fZXhwcnMgKFRSRUVfT1BFUkFO RCAobm9kZSwgaWkpLCAKKwkJCQkgICAgaWdub3JlX2J1aWx0aW5fZm4sIGFy cmF5X2xpc3QsIGxpc3Rfc2l6ZSk7CisgIHJldHVybjsKK30KKworCisvKiBS ZXBsYWNlcyBhbGwgb2NjdXJhbmNlcyBvZiBhcnJheSBub3RhdGlvbnMgaW4g dHJlZSBPUklHIHRoYXQgbWF0Y2hlcyB0aGUKKyAgIG9uZXMgaW4gTElTVCB3 aXRoIHRoZSBvbmUgaW4gQVJSQVlfT1BFUkFORC4gIFRoZSBzaXplIG9mIGxp c3QgYW5kCisgICBBUlJBWV9PUEVSQU5EIGlzIEFSUkFZX1NJWkUuICBGb3Ig ZXhhbXBsZSwgQVJSQVlfT1BFUkFORFt4XSBmb3Igc29tZSBpbmRleAorICAg J3gnIHdpbGwgaGF2ZSB0aGUgZXF1aXZhbGVudCBBUlJBWV9SRUYgZm9yIHRo ZSBBUlJBWV9OT1RBVElPTl9SRUYgc3BlY2lmaWVkCisgICBpbiBMSVNUW3hd LiAgIFRoZSAgdXNlciBjYW4gc3BlY2lmeSBpZiAocyloZSB3YW50cyB0byBp Z25vcmUgdGhlIGFycmF5CisgICBub3RhdGlvbnMgaW5zaWRlIHRoZSBhcnJh eS1ub3RhdGlvbiBzcGVjaWZpYyBidWlsdGluIGZ1bmN0aW9ucyAodXNpbmcg dGhlCisgICBib29sIHZhcmlhYmxlIElHTk9SRV9CVUlMVElOX0ZOKS4gICov CisKK3ZvaWQKK3JlcGxhY2VfYXJyYXlfbm90YXRpb25zICh0cmVlICpvcmln LCBib29sIGlnbm9yZV9idWlsdGluX2ZuLCB0cmVlICpsaXN0LAorCQkJIHRy ZWUgKmFycmF5X29wZXJhbmQsIGludCBhcnJheV9zaXplKQoreworICBpbnQg aWkgPSAwOworICBhbl9yZWR1Y2VfdHlwZSBkdW1teV90eXBlID0gUkVEVUNF X1VOS05PV047CisgIAorICBpZiAoYXJyYXlfc2l6ZSA9PSAwIHx8ICpsaXN0 ID09IE5VTEwgfHwgISpvcmlnKQorICAgIHJldHVybjsKKworICBpZiAoVFJF RV9DT0RFICgqb3JpZykgPT0gQVJSQVlfTk9UQVRJT05fUkVGKQorICAgIHsK KyAgICAgIGZvciAoaWkgPSAwOyBpaSA8IGFycmF5X3NpemU7IGlpKyspCisJ eworCSAgaWYgKCpvcmlnID09IGxpc3RbaWldKQorCSAgICAqb3JpZyA9IGFy cmF5X29wZXJhbmRbaWldOworCX0KKyAgICB9CisgIGVsc2UgaWYgKFRSRUVf Q09ERSAoKm9yaWcpID09IFNUQVRFTUVOVF9MSVNUKQorICAgIHsKKyAgICAg IHRyZWVfc3RtdF9pdGVyYXRvciBpaV90c2k7CisgICAgICBmb3IgKGlpX3Rz aSA9IHRzaV9zdGFydCAoKm9yaWcpOyAhdHNpX2VuZF9wIChpaV90c2kpOyB0 c2lfbmV4dCAoJmlpX3RzaSkpCisJcmVwbGFjZV9hcnJheV9ub3RhdGlvbnMg KHRzaV9zdG10X3B0ciAoaWlfdHNpKSwgaWdub3JlX2J1aWx0aW5fZm4sCisJ CQkJIGxpc3QsIGFycmF5X29wZXJhbmQsIGFycmF5X3NpemUpOworICAgIH0K KyAgZWxzZSBpZiAoVFJFRV9DT0RFICgqb3JpZykgPT0gQ0FMTF9FWFBSKQor ICAgIHsKKyAgICAgIGlmIChpc19idWlsdGluX2FycmF5X25vdGF0aW9uX2Zu IChDQUxMX0VYUFJfRk4gKCpvcmlnKSwgJmR1bW15X3R5cGUpKQorCXsKKwkg IGlmICghaWdub3JlX2J1aWx0aW5fZm4pCisJICAgIHsKKwkgICAgICBmb3Ig KGlpID0gMDsgaWkgPCBhcnJheV9zaXplOyBpaSsrKQorCQl7CisJCSAgaWYg KCpvcmlnID09IGxpc3RbaWldKQorCQkgICAgKm9yaWcgPSBhcnJheV9vcGVy YW5kW2lpXTsKKwkJfQorCSAgICB9CisJICByZXR1cm47CisJfQorICAgICAg aWYgKGlzX3NlY19pbXBsaWNpdF9pbmRleF9mbiAoQ0FMTF9FWFBSX0ZOICgq b3JpZykpKQorCXsKKwkgIGZvciAoaWkgPSAwOyBpaSA8IGFycmF5X3NpemU7 IGlpKyspCisJICAgIHsKKwkgICAgICBpZiAoKm9yaWcgPT0gbGlzdFtpaV0p CisJCSpvcmlnID0gYXJyYXlfb3BlcmFuZFtpaV07CisJICAgIH0KKwkgIHJl dHVybjsKKwl9CisgICAgICBpZiAoVFJFRV9DT0RFIChUUkVFX09QRVJBTkQg KCpvcmlnLCAwKSkgPT0gSU5URUdFUl9DU1QpCisJeworCSAgaW50IGxlbmd0 aCA9IFRSRUVfSU5UX0NTVF9MT1cgKFRSRUVfT1BFUkFORCAoKm9yaWcsIDAp KTsKKwkgIGZvciAoaWkgPSAwOyBpaSA8IGxlbmd0aDsgaWkrKykKKwkgICAg cmVwbGFjZV9hcnJheV9ub3RhdGlvbnMKKwkgICAgICAoJlRSRUVfT1BFUkFO RCAoKm9yaWcsIGlpKSwgaWdub3JlX2J1aWx0aW5fZm4sIGxpc3QsCisJICAg ICAgIGFycmF5X29wZXJhbmQsIGFycmF5X3NpemUpOworCX0KKyAgICAgIGVs c2UKKwlnY2NfdW5yZWFjaGFibGUgKCk7IC8qIFdlIHNob3VsZCBub3QgZ2V0 IGhlcmUhICAqLworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAo aWkgPSAwOyBpaSA8IFRSRUVfQ09ERV9MRU5HVEggKFRSRUVfQ09ERSAoKm9y aWcpKTsgaWkrKykgCisJcmVwbGFjZV9hcnJheV9ub3RhdGlvbnMgKCZUUkVF X09QRVJBTkQgKCpvcmlnLCBpaSksIGlnbm9yZV9idWlsdGluX2ZuLCAKKwkJ CQkgbGlzdCwgYXJyYXlfb3BlcmFuZCwgYXJyYXlfc2l6ZSk7CisgICAgfQor ICByZXR1cm47Cit9CisKKy8qIFJldHVybnMgYSBsb29wIHdpdGggQVJSQVlf UkVGIGluc2lkZSBpdCB3aXRoIGFuIGFwcHJvcHJpYXRlIG1vZGlmeSBleHBy LgorICAgVGhlIExIUyBhbmQvb3IgUkhTIHdpbGwgYmUgYXJyYXkgbm90YXRp b24gZXhwcmVzc2lvbnMgdGhhdCBoYXZlIGEgTU9ESUZZQ09ERQorICAgVGhl aXIgbG9jYXRpb25zIGFyZSBzcGVjaWZpZWQgYnkgTEhTX0xPQywgUkhTX0xP Qy4gIFRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgIG1vZGlmeSBleHByZXNzaW9u IGlzIGxvY2F0aW9uLiAgVGhlIG9yaWdpbmFsIHR5cGUgb2YgTEhTIGFuZCBS SFMgYXJlIHBhc3NlZAorICAgaW4gTEhTX09SSUdUWVBFIGFuZCBSSFNfT1JJ R1RZUEUuICAqLworCit0cmVlCitidWlsZF9hcnJheV9ub3RhdGlvbl9leHBy IChsb2NhdGlvbl90IGxvY2F0aW9uLCB0cmVlIGxocywgdHJlZSBsaHNfb3Jp Z3R5cGUsCisJCQkgICBlbnVtIHRyZWVfY29kZSBtb2RpZnljb2RlLCBsb2Nh dGlvbl90IHJoc19sb2MsCisJCQkgICB0cmVlIHJocywgdHJlZSByaHNfb3Jp Z3R5cGUpCit7CisgIGJvb2wgKipsaHNfdmVjdG9yID0gTlVMTCwgKipyaHNf dmVjdG9yID0gTlVMTCwgZm91bmRfYnVpbHRpbl9mbiA9IGZhbHNlOworICB0 cmVlICoqbGhzX2FycmF5ID0gTlVMTCwgKipyaHNfYXJyYXkgPSBOVUxMOwor ICB0cmVlIGFycmF5X2V4cHJfbGhzID0gTlVMTF9UUkVFLCBhcnJheV9leHBy X3JocyA9IE5VTExfVFJFRTsKKyAgdHJlZSBhcnJheV9leHByID0gTlVMTF9U UkVFOworICB0cmVlICoqbGhzX3ZhbHVlID0gTlVMTCwgKipyaHNfdmFsdWUg PSBOVUxMOworICB0cmVlICoqbGhzX3N0cmlkZSA9IE5VTEwsICoqbGhzX2xl bmd0aCA9IE5VTEwsICoqbGhzX3N0YXJ0ID0gTlVMTDsKKyAgdHJlZSAqKnJo c19zdHJpZGUgPSBOVUxMLCAqKnJoc19sZW5ndGggPSBOVUxMLCAqKnJoc19z dGFydCA9IE5VTEw7CisgIHRyZWUgbG9vcCA9IE5VTExfVFJFRSwgKmxoc192 YXIgPSBOVUxMLCAqcmhzX3ZhciA9IE5VTEw7CisgIHRyZWUgKmJvZHlfbGFi ZWwgPSBOVUxMLCAqYm9keV9sYWJlbF9leHByID0gTlVMTDsKKyAgdHJlZSAq ZXhpdF9sYWJlbCA9IE5VTEwsICpleGl0X2xhYmVsX2V4cHIgPSBOVUxMLCAq Y29uZF9leHByID0gTlVMTDsKKyAgdHJlZSAqaWZfc3RtdF9sYWJlbCA9IE5V TEw7CisgIHRyZWUgKmxoc19leHByX2luY3IgPSBOVUxMLCAqcmhzX2V4cHJf aW5jciA9IE5VTEw7CisgIHRyZWUgKmxoc19pbmRfaW5pdCA9IE5VTEwsICpy aHNfaW5kX2luaXQgPSBOVUxMOworICBib29sICoqbGhzX2NvdW50X2Rvd24g PSBOVUxMLCAqKnJoc19jb3VudF9kb3duID0gTlVMTDsKKyAgdHJlZSAqbGhz X2NvbXBhcmUgPSBOVUxMLCAqcmhzX2NvbXBhcmUgPSBOVUxMLCAqcmhzX2Fy cmF5X29wZXJhbmQgPSBOVUxMOworICB0cmVlICpsaHNfYXJyYXlfb3BlcmFu ZCA9IE5VTEw7CisgIGludCBsaHNfcmFuayA9IDAsIHJoc19yYW5rID0gMCwg aWkgPSAwLCBqaiA9IDA7CisgIHRyZWUgaWlfdHJlZSA9IE5VTExfVFJFRSwg bmV3X21vZGlmeV9leHByLCAqbGhzX2xpc3QgPSBOVUxMOworICB0cmVlICpy aHNfbGlzdCA9IE5VTEwsIG5ld192YXIgPSBOVUxMX1RSRUUsIGJ1aWx0aW5f bG9vcCA9IE5VTExfVFJFRTsKKyAgaW50IHJoc19saXN0X3NpemUgPSAwLCBs aHNfbGlzdF9zaXplID0gMDsKKworICBmaW5kX3JhbmsgKHJocywgZmFsc2Us ICZyaHNfcmFuayk7CisgIGV4dHJhY3RfYXJyYXlfbm90YXRpb25fZXhwcnMg KHJocywgZmFsc2UsICZyaHNfbGlzdCwgJnJoc19saXN0X3NpemUpOworICBs b29wID0gcHVzaF9zdG10X2xpc3QgKCk7CisKKyAgZm9yIChpaSA9IDA7IGlp IDwgcmhzX2xpc3Rfc2l6ZTsgaWkrKykKKyAgICB7CisgICAgICBpZiAoVFJF RV9DT0RFIChyaHNfbGlzdFtpaV0pID09IENBTExfRVhQUikKKwl7CisJICBi dWlsdGluX2xvb3AgPSBmaXhfYnVpbHRpbl9hcnJheV9ub3RhdGlvbl9mbiAo cmhzX2xpc3RbaWldLAorCQkJCQkJCSZuZXdfdmFyKTsKKwkgIGlmIChidWls dGluX2xvb3AgPT0gZXJyb3JfbWFya19ub2RlKQorCSAgICByZXR1cm4gZXJy b3JfbWFya19ub2RlOworCSAgZWxzZSBpZiAoYnVpbHRpbl9sb29wKQorCSAg ICB7CisJICAgICAgYWRkX3N0bXQgKGJ1aWx0aW5fbG9vcCk7CisJICAgICAg Zm91bmRfYnVpbHRpbl9mbiA9IHRydWU7CisJICAgICAgaWYgKG5ld192YXIp CisJCXJlcGxhY2VfYXJyYXlfbm90YXRpb25zICgmcmhzLCBmYWxzZSwgJnJo c19saXN0W2lpXSwKKwkJCQkJICZuZXdfdmFyLCAxKTsKKwkgICAgfQorCX0K KyAgICB9CisKKyAgbGhzX3JhbmsgPSAwOworICByaHNfcmFuayA9IDA7Cisg IGZpbmRfcmFuayAobGhzLCB0cnVlLCAmbGhzX3JhbmspOworICBmaW5kX3Jh bmsgKHJocywgdHJ1ZSwgJnJoc19yYW5rKTsKKworICBpZiAobGhzX3Jhbmsg PT0gMCAmJiByaHNfcmFuayA9PSAwKQorICAgIHsKKyAgICAgIGlmIChmb3Vu ZF9idWlsdGluX2ZuKQorCXsKKwkgIG5ld19tb2RpZnlfZXhwciA9IGJ1aWxk X21vZGlmeV9leHByIChsb2NhdGlvbiwgbGhzLCBsaHNfb3JpZ3R5cGUsCisJ CQkJCSAgICAgICBtb2RpZnljb2RlLCByaHNfbG9jLCByaHMsCisJCQkJCSAg ICAgICByaHNfb3JpZ3R5cGUpOworCSAgYWRkX3N0bXQgKG5ld19tb2RpZnlf ZXhwcik7CisJICBwb3Bfc3RtdF9saXN0IChsb29wKTsKKwkgIAorCSAgcmV0 dXJuIGxvb3A7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHBvcF9zdG10X2xp c3QgKGxvb3ApOworCSAgcmV0dXJuIE5VTExfVFJFRTsKKwl9CisgICAgfQor ICByaHNfbGlzdF9zaXplID0gMDsKKyAgcmhzX2xpc3QgPSBOVUxMOworICBl eHRyYWN0X2FycmF5X25vdGF0aW9uX2V4cHJzIChyaHMsIHRydWUsICZyaHNf bGlzdCwgJnJoc19saXN0X3NpemUpOworICBleHRyYWN0X2FycmF5X25vdGF0 aW9uX2V4cHJzIChsaHMsIHRydWUsICZsaHNfbGlzdCwgJmxoc19saXN0X3Np emUpOworICAKKyAgaWYgKGxoc19yYW5rID09IDAgJiYgcmhzX3JhbmsgIT0g MCkKKyAgICB7CisgICAgICB0cmVlIHJoc19iYXNlID0gcmhzOworICAgICAg Zm9yIChpaSA9IDA7IGlpIDwgcmhzX3Jhbms7IGlpKyspCisJcmhzX2Jhc2Ug PSBBUlJBWV9OT1RBVElPTl9BUlJBWSAocmhzKTsKKyAgICAgIAorICAgICAg ZXJyb3JfYXQgKGxvY2F0aW9uLCAiJXFEIGNhbm5vdCBiZSBzY2FsYXIgd2hl biAlcUQgaXMgbm90IiwgbGhzLAorCQlyaHNfYmFzZSk7CisgICAgICByZXR1 cm4gZXJyb3JfbWFya19ub2RlOworICAgIH0KKyAgaWYgKGxoc19yYW5rICE9 IDAgJiYgcmhzX3JhbmsgIT0gMCAmJiBsaHNfcmFuayAhPSByaHNfcmFuaykK KyAgICB7CisgICAgICB0cmVlIGxoc19iYXNlID0gbGhzOworICAgICAgdHJl ZSByaHNfYmFzZSA9IHJoczsKKyAgCisgICAgICBmb3IgKGlpID0gMDsgaWkg PCBsaHNfcmFuazsgaWkrKykKKwlsaHNfYmFzZSA9IEFSUkFZX05PVEFUSU9O X0FSUkFZIChsaHNfYmFzZSk7CisgICAgICBmb3IgKGlpID0gMDsgaWkgPCBy aHNfcmFuazsgaWkrKykKKwlyaHNfYmFzZSA9IEFSUkFZX05PVEFUSU9OX0FS UkFZIChyaHNfYmFzZSk7CisgICAgICAKKyAgICAgIGVycm9yX2F0IChsb2Nh dGlvbiwgInJhbmsgbWlzbWF0Y2ggYmV0d2VlbiAlcUQgYW5kICVxRCIsIGxo c19iYXNlLAorCQlyaHNfYmFzZSk7CisgICAgICByZXR1cm4gZXJyb3JfbWFy a19ub2RlOworICAgIH0KKyAgCisgIGxoc192ZWN0b3IgPSBYTkVXVkVDIChi b29sICosIGxoc19saXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkgPCBs aHNfbGlzdF9zaXplOyBpaSsrKQorICAgIGxoc192ZWN0b3JbaWldID0gWE5F V1ZFQyAoYm9vbCwgbGhzX3JhbmspOworICAKKyAgcmhzX3ZlY3RvciA9IFhO RVdWRUMgKGJvb2wgKiwgcmhzX2xpc3Rfc2l6ZSk7CisgIGZvciAoaWkgPSAw OyBpaSA8IHJoc19saXN0X3NpemU7IGlpKyspCisgICAgcmhzX3ZlY3Rvcltp aV0gPSBYTkVXVkVDIChib29sLCByaHNfcmFuayk7CisgIAorICBsaHNfYXJy YXkgPSBYTkVXVkVDICh0cmVlICosIGxoc19saXN0X3NpemUpOworICBmb3Ig KGlpID0gMDsgaWkgPCBsaHNfbGlzdF9zaXplOyBpaSsrKQorICAgIGxoc19h cnJheVtpaV0gPSBYTkVXVkVDICh0cmVlLCBsaHNfcmFuayk7CisgIAorICBy aHNfYXJyYXkgPSBYTkVXVkVDICh0cmVlICosIHJoc19saXN0X3NpemUpOwor ICBmb3IgKGlpID0gMDsgaWkgPCByaHNfbGlzdF9zaXplOyBpaSsrKQorICAg IHJoc19hcnJheVtpaV0gPSBYTkVXVkVDICh0cmVlLCByaHNfcmFuayk7CisK KyAgbGhzX3ZhbHVlID0gWE5FV1ZFQyAodHJlZSAqLCBsaHNfbGlzdF9zaXpl KTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGhzX2xpc3Rfc2l6ZTsgaWkrKykK KyAgICBsaHNfdmFsdWVbaWldID0gWE5FV1ZFQyAodHJlZSwgbGhzX3Jhbmsp OworICAKKyAgcmhzX3ZhbHVlID0gWE5FV1ZFQyAodHJlZSAqLCByaHNfbGlz dF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmhzX2xpc3Rfc2l6ZTsg aWkrKykKKyAgICByaHNfdmFsdWVbaWldID0gWE5FV1ZFQyAodHJlZSwgcmhz X3JhbmspOworCisgIGxoc19zdHJpZGUgPSBYTkVXVkVDICh0cmVlICosIGxo c19saXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkgPCBsaHNfbGlzdF9z aXplOyBpaSsrKQorICAgIGxoc19zdHJpZGVbaWldID0gWE5FV1ZFQyAodHJl ZSwgbGhzX3JhbmspOworICAKKyAgcmhzX3N0cmlkZSA9IFhORVdWRUMgKHRy ZWUgKiwgcmhzX2xpc3Rfc2l6ZSk7CisgIGZvciAoaWkgPSAwOyBpaSA8IHJo c19saXN0X3NpemU7IGlpKyspCisgICAgcmhzX3N0cmlkZVtpaV0gPSBYTkVX VkVDICh0cmVlLCByaHNfcmFuayk7CisKKyAgbGhzX2xlbmd0aCA9IFhORVdW RUMgKHRyZWUgKiwgbGhzX2xpc3Rfc2l6ZSk7CisgIGZvciAoaWkgPSAwOyBp aSA8IGxoc19saXN0X3NpemU7IGlpKyspCisgICAgbGhzX2xlbmd0aFtpaV0g PSBYTkVXVkVDICh0cmVlLCBsaHNfcmFuayk7CisgIAorICByaHNfbGVuZ3Ro ID0gWE5FV1ZFQyAodHJlZSAqLCByaHNfbGlzdF9zaXplKTsKKyAgZm9yIChp aSA9IDA7IGlpIDwgcmhzX2xpc3Rfc2l6ZTsgaWkrKykKKyAgICByaHNfbGVu Z3RoW2lpXSA9IFhORVdWRUMgKHRyZWUsIHJoc19yYW5rKTsKKyAgCisgIGxo c19zdGFydCA9IFhORVdWRUMgKHRyZWUgKiwgbGhzX2xpc3Rfc2l6ZSk7Cisg IGZvciAoaWkgPSAwOyBpaSA8IGxoc19saXN0X3NpemU7IGlpKyspCisgICAg bGhzX3N0YXJ0W2lpXSA9IFhORVdWRUMgKHRyZWUsIGxoc19yYW5rKTsKKyAg CisgIHJoc19zdGFydCA9IFhORVdWRUMgKHRyZWUgKiwgcmhzX2xpc3Rfc2l6 ZSk7CisgIGZvciAoaWkgPSAwOyBpaSA8IHJoc19saXN0X3NpemU7IGlpKysp CisgICAgcmhzX3N0YXJ0W2lpXSA9IFhORVdWRUMgKHRyZWUsIHJoc19yYW5r KTsKKworICBsaHNfdmFyID0gWE5FV1ZFQyAodHJlZSwgbGhzX3JhbmspOwor ICByaHNfdmFyID0gWE5FV1ZFQyAodHJlZSwgcmhzX3JhbmspOworICAKKwor ICAvKiBUaGUgcmVhc29uIHdoeSB3ZSBhcmUganVzdCB1c2luZyBsaHNfcmFu ayBmb3IgdGhpcyBpcyBiZWNhdXNlIHdlIGhhdmUgdGhlCisgICAgZm9sbG93 aW5nIHNjZW5hcmlvczogCisgICAgMS4gTEhTX1JBTksgPT0gUkhTX1JBTksK KyAgICAyLiBMSFNfUkFOSyAhPSBSSFNfUkFOSyAmJiBSSFNfUkFOSyA9IDAg CisgICAgCisgICAgSW4gYm90aCB0aGUgc2NlbmFyaW9zLCBqdXN0IGNoZWNr aW5nIHRoZSBMSFNfUkFOSyBpcyBPSy4gICovCisKKyAgYm9keV9sYWJlbCA9 IFhORVdWRUMgKHRyZWUsIE1BWCAobGhzX3JhbmssIHJoc19yYW5rKSk7Cisg IGJvZHlfbGFiZWxfZXhwciA9IFhORVdWRUMgKHRyZWUsIE1BWCAobGhzX3Jh bmssIHJoc19yYW5rKSk7CisgIGV4aXRfbGFiZWwgPSBYTkVXVkVDICh0cmVl LCBNQVggKGxoc19yYW5rLCByaHNfcmFuaykpOworICBleGl0X2xhYmVsX2V4 cHIgPSBYTkVXVkVDICh0cmVlLCBNQVggKGxoc19yYW5rLCByaHNfcmFuaykp OworICBjb25kX2V4cHIgPSBYTkVXVkVDICh0cmVlLCBNQVggKGxoc19yYW5r LCByaHNfcmFuaykpOworICBpZl9zdG10X2xhYmVsID0gWE5FV1ZFQyAodHJl ZSwgTUFYIChsaHNfcmFuaywgcmhzX3JhbmspKTsKKworICBsaHNfZXhwcl9p bmNyID0gWE5FV1ZFQyAodHJlZSwgbGhzX3JhbmspOworICByaHNfZXhwcl9p bmNyID1YTkVXVkVDICh0cmVlLCByaHNfcmFuayk7CisKKyAgbGhzX2luZF9p bml0ID0gWE5FV1ZFQyAodHJlZSwgbGhzX3JhbmspOworICByaHNfaW5kX2lu aXQgPSBYTkVXVkVDICh0cmVlLCByaHNfcmFuayk7CisKKyAgbGhzX2NvdW50 X2Rvd24gPSBYTkVXVkVDIChib29sICosIGxoc19saXN0X3NpemUpOworICBm b3IgKGlpID0gMDsgaWkgPCBsaHNfbGlzdF9zaXplOyBpaSsrKQorICAgIGxo c19jb3VudF9kb3duW2lpXSA9ICBYTkVXVkVDIChib29sLCBsaHNfcmFuayk7 CisgIAorICByaHNfY291bnRfZG93biA9ICBYTkVXVkVDIChib29sICosIHJo c19saXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkgPCByaHNfbGlzdF9z aXplOyBpaSsrKQorICAgIHJoc19jb3VudF9kb3duW2lpXSA9IFhORVdWRUMg KGJvb2wsIHJoc19yYW5rKTsKKworICBsaHNfY29tcGFyZSA9ICBYTkVXVkVD ICh0cmVlLCBsaHNfcmFuayk7CisgIHJoc19jb21wYXJlID0gIFhORVdWRUMg KHRyZWUsIHJoc19yYW5rKTsKKworICByaHNfYXJyYXlfb3BlcmFuZCA9ICBY TkVXVkVDICh0cmVlLCByaHNfbGlzdF9zaXplKTsKKyAgbGhzX2FycmF5X29w ZXJhbmQgPSAgWE5FV1ZFQyAodHJlZSwgbGhzX2xpc3Rfc2l6ZSk7CisKKyAg aWYgKGxoc19yYW5rKQorICAgIHsKKyAgICAgIGZvciAoaWkgPSAwOyBpaSA8 IGxoc19saXN0X3NpemU7IGlpKyspCisJeworCSAgamogPSAwOworCSAgZm9y IChpaV90cmVlID0gbGhzX2xpc3RbaWldOworCSAgICAgICBpaV90cmVlICYm IFRSRUVfQ09ERSAoaWlfdHJlZSkgPT0gQVJSQVlfTk9UQVRJT05fUkVGOwor CSAgICAgICBpaV90cmVlID0gQVJSQVlfTk9UQVRJT05fQVJSQVkgKGlpX3Ry ZWUpKQorCSAgICB7CisJICAgICAgbGhzX2FycmF5W2lpXVtqal0gPSBpaV90 cmVlOworCSAgICAgIGpqKys7CisJICAgIH0KKwl9CisgICAgfQorICBlbHNl CisgICAgbGhzX2FycmF5WzBdWzBdID0gTlVMTF9UUkVFOworICAKKyAgaWYg KHJoc19yYW5rKQorICAgIHsKKyAgICAgIGZvciAoaWkgPSAwOyBpaSA8IHJo c19saXN0X3NpemU7IGlpKyspCisJeyAKKwkgIGpqID0gMDsgCisJICBmb3Ig KGlpX3RyZWUgPSByaHNfbGlzdFtpaV07CisJICAgICAgIGlpX3RyZWUgJiYg VFJFRV9DT0RFIChpaV90cmVlKSA9PSBBUlJBWV9OT1RBVElPTl9SRUY7CisJ ICAgICAgIGlpX3RyZWUgPSBBUlJBWV9OT1RBVElPTl9BUlJBWSAoaWlfdHJl ZSkpCisJICAgIHsKKwkgICAgICByaHNfYXJyYXlbaWldW2pqXSA9IGlpX3Ry ZWU7CisJICAgICAgamorKzsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgZm9y IChpaSA9IDA7IGlpIDwgbGhzX2xpc3Rfc2l6ZTsgaWkrKykKKyAgICB7Cisg ICAgICBpZiAoVFJFRV9DT0RFIChsaHNfbGlzdFtpaV0pID09IEFSUkFZX05P VEFUSU9OX1JFRikKKwl7CisJICBmb3IgKGpqID0gMDsgamogPCBsaHNfcmFu azsgamorKykKKwkgICAgeworCSAgICAgIGlmIChUUkVFX0NPREUgKGxoc19h cnJheVtpaV1bampdKSA9PSBBUlJBWV9OT1RBVElPTl9SRUYpCisJCXsKKwkJ ICBsaHNfdmFsdWVbaWldW2pqXSA9IEFSUkFZX05PVEFUSU9OX0FSUkFZIChs aHNfYXJyYXlbaWldW2pqXSk7CisJCSAgbGhzX3N0YXJ0W2lpXVtqal0gPSBB UlJBWV9OT1RBVElPTl9TVEFSVCAobGhzX2FycmF5W2lpXVtqal0pOworCQkg IGxoc19sZW5ndGhbaWldW2pqXSA9CisJCSAgICBBUlJBWV9OT1RBVElPTl9M RU5HVEggKGxoc19hcnJheVtpaV1bampdKTsKKwkJICBsaHNfc3RyaWRlW2lp XVtqal0gPQorCQkgICAgQVJSQVlfTk9UQVRJT05fU1RSSURFIChsaHNfYXJy YXlbaWldW2pqXSk7CisJCSAgbGhzX3ZlY3RvcltpaV1bampdID0gdHJ1ZTsK KwkJICAvKiBJRiB0aGUgc3RyaWRlIHZhbHVlIGlzIHZhcmlhYmxlIChpLmUu IG5vdCBjb25zdGFudCkgdGhlbiAKKwkJICAgICBhc3N1bWUgdGhhdCB0aGUg bGVuZ3RoIGlzIHBvc2l0aXZlLiAgKi8KKwkJICBpZiAoIVRSRUVfQ09OU1RB TlQgKGxoc19sZW5ndGhbaWldW2pqXSkpCisJCSAgICBsaHNfY291bnRfZG93 bltpaV1bampdID0gZmFsc2U7CisJCSAgZWxzZSBpZiAodHJlZV9pbnRfY3N0 X2x0CisJCQkgICAobGhzX2xlbmd0aFtpaV1bampdLAorCQkJICAgIGJ1aWxk X3plcm9fY3N0IChUUkVFX1RZUEUgKGxoc19sZW5ndGhbaWldW2pqXSkpKSkK KwkJICAgIGxoc19jb3VudF9kb3duW2lpXVtqal0gPSB0cnVlOworCQkgIGVs c2UKKwkJICAgIGxoc19jb3VudF9kb3duW2lpXVtqal0gPSBmYWxzZTsKKwkJ fQorCSAgICAgIGVsc2UKKwkJbGhzX3ZlY3RvcltpaV1bampdID0gZmFsc2U7 CisJICAgIH0KKwl9CisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8IHJo c19saXN0X3NpemU7IGlpKyspCisgICAgeworICAgICAgaWYgKFRSRUVfQ09E RSAocmhzX2xpc3RbaWldKSA9PSBBUlJBWV9OT1RBVElPTl9SRUYpCisJewor CSAgZm9yIChqaiA9IDA7IGpqIDwgcmhzX3Jhbms7IGpqKyspCisJICAgIHsK KwkgICAgICBpZiAoVFJFRV9DT0RFIChyaHNfYXJyYXlbaWldW2pqXSkgPT0g QVJSQVlfTk9UQVRJT05fUkVGKQorCQl7CisJCSAgcmhzX3ZhbHVlW2lpXVtq al0gID0gQVJSQVlfTk9UQVRJT05fQVJSQVkgKHJoc19hcnJheVtpaV1bampd KTsKKwkJICByaHNfc3RhcnRbaWldW2pqXSAgPSBBUlJBWV9OT1RBVElPTl9T VEFSVCAocmhzX2FycmF5W2lpXVtqal0pOworCQkgIHJoc19sZW5ndGhbaWld W2pqXSA9CisJCSAgICBBUlJBWV9OT1RBVElPTl9MRU5HVEggKHJoc19hcnJh eVtpaV1bampdKTsKKwkJICByaHNfc3RyaWRlW2lpXVtqal0gPQorCQkgICAg QVJSQVlfTk9UQVRJT05fU1RSSURFIChyaHNfYXJyYXlbaWldW2pqXSk7CisJ CSAgcmhzX3ZlY3RvcltpaV1bampdID0gdHJ1ZTsKKwkJICAvKiBJZiB0aGUg c3RyaWRlIHZhbHVlIGlzIHZhcmlhYmxlIChpLmUuIG5vdCBjb25zdGFudCkg dGhlbiAKKwkJICAgICBhc3N1bWUgdGhhdCB0aGUgbGVuZ3RoIGlzIHBvc2l0 aXZlLiAgKi8KKwkJICBpZiAoIVRSRUVfQ09OU1RBTlQgKHJoc19sZW5ndGhb aWldW2pqXSkpCisJCSAgICByaHNfY291bnRfZG93bltpaV1bampdID0gZmFs c2U7CisJCSAgZWxzZSBpZiAodHJlZV9pbnRfY3N0X2x0CisJCQkgICAocmhz X2xlbmd0aFtpaV1bampdLAorCQkJICAgIGJ1aWxkX2ludF9jc3QgKFRSRUVf VFlQRSAocmhzX2xlbmd0aFtpaV1bampdKSwgMCkpKQorCQkgICAgcmhzX2Nv dW50X2Rvd25baWldW2pqXSA9IHRydWU7CisJCSAgZWxzZQorCQkgICAgcmhz X2NvdW50X2Rvd25baWldW2pqXSA9IGZhbHNlOwkKKwkJfQorCSAgICAgIGVs c2UKKwkJcmhzX3ZlY3RvcltpaV1bampdID0gZmFsc2U7CisJICAgIH0KKwl9 CisgICAgICBlbHNlCisJZm9yIChqaiA9IDA7IGpqIDwgcmhzX3Jhbms7IGpq KyspCisJICByaHNfdmVjdG9yW2lpXVtqal0gPSBmYWxzZTsKKyAgICB9CisK KworCisgIGZvciAoaWkgPSAwOyBpaSA8IGxoc19yYW5rOyBpaSsrKQorICAg IHsKKyAgICAgIGlmIChsaHNfdmVjdG9yWzBdW2lpXSkKKwl7CisJICBsaHNf dmFyW2lpXSA9IGJ1aWxkX2RlY2wgKGxvY2F0aW9uLCBWQVJfREVDTCwgTlVM TF9UUkVFLAorCQkJCSAgICBpbnRlZ2VyX3R5cGVfbm9kZSk7CisJICBsaHNf aW5kX2luaXRbaWldID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkgICAgKGxvY2F0 aW9uLCBsaHNfdmFyW2lpXSwgVFJFRV9UWVBFIChsaHNfdmFyW2lpXSksCisJ ICAgICBOT1BfRVhQUiwKKwkgICAgIGxvY2F0aW9uLCBidWlsZF96ZXJvX2Nz dCAoVFJFRV9UWVBFIChsaHNfdmFyW2lpXSkpLAorCSAgICAgVFJFRV9UWVBF IChsaHNfdmFyW2lpXSkpOworCSAgCisJfQorICAgIH0KKworICBmb3IgKGlp ID0gMDsgaWkgPCByaHNfcmFuazsgaWkrKykKKyAgICB7CisgICAgICAvKiBX aGVuIHdlIGhhdmUgYSBwb2x5bm9taWFsLCB3ZSBhc3N1bWUgdGhhdCB0aGUg aW5kaWNlcyBhcmUgb2YgdHlwZSAKKwkgaW50ZWdlci4gICovCisgICAgICBy aHNfdmFyW2lpXSA9IGJ1aWxkX2RlY2wgKGxvY2F0aW9uLCBWQVJfREVDTCwg TlVMTF9UUkVFLAorCQkJCWludGVnZXJfdHlwZV9ub2RlKTsKKyAgICAgIHJo c19pbmRfaW5pdFtpaV0gPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2NhdGlv biwgcmhzX3ZhcltpaV0sIFRSRUVfVFlQRSAocmhzX3ZhcltpaV0pLAorCSBt b2RpZnljb2RlLAorCSBsb2NhdGlvbiwgYnVpbGRfaW50X2NzdCAoVFJFRV9U WVBFIChyaHNfdmFyW2lpXSksIDApLAorCSBUUkVFX1RZUEUgKHJoc192YXJb aWldKSk7CisgICAgfQorICAKKworICBmb3IgKGlpID0gMDsgaWkgPCBNQVgg KGxoc19yYW5rLCByaHNfcmFuayk7IGlpKyspCisgICAgeworICAgICAgLyog VGhpcyB3aWxsIGNyZWF0ZSB0aGUgaWYgc3RhdGVtZW50IGxhYmVsLiAgKi8K KyAgICAgIGlmX3N0bXRfbGFiZWxbaWldID0gYnVpbGRfZGVjbCAobG9jYXRp b24sIExBQkVMX0RFQ0wsIE5VTExfVFJFRSwKKwkJCQkgICAgICB2b2lkX3R5 cGVfbm9kZSk7CisgICAgICBERUNMX0NPTlRFWFQgKGlmX3N0bXRfbGFiZWxb aWldKSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgICAgIERFQ0xfQVJU SUZJQ0lBTCAoaWZfc3RtdF9sYWJlbFtpaV0pID0gMDsKKyAgICAgIERFQ0xf SUdOT1JFRF9QIChpZl9zdG10X2xhYmVsW2lpXSkgPSAxOworICAKKyAgICAg IC8qIFRoaXMgbGFiZWwgc3RhdGVtZW50IHdpbGwgcG9pbnQgdG8gdGhlIGxv b3AgYm9keS4gICovCisgICAgICBib2R5X2xhYmVsW2lpXSA9IGJ1aWxkX2Rl Y2wgKGxvY2F0aW9uLCBMQUJFTF9ERUNMLCBOVUxMX1RSRUUsCisJCQkJICAg dm9pZF90eXBlX25vZGUpOworICAgICAgREVDTF9DT05URVhUIChib2R5X2xh YmVsW2lpXSkgPSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgICAgICBERUNM X0FSVElGSUNJQUwgKGJvZHlfbGFiZWxbaWldKSA9IDA7CisgICAgICBERUNM X0lHTk9SRURfUCAoYm9keV9sYWJlbFtpaV0pID0gMTsKKyAgICAgIGJvZHlf bGFiZWxfZXhwcltpaV0gPSBidWlsZDEgKExBQkVMX0VYUFIsIHZvaWRfdHlw ZV9ub2RlLCBib2R5X2xhYmVsW2lpXSk7CisKKyAgICAgIC8qIFRoaXMgd2ls bCBjcmVhdGUgdGhlIGV4aXQgbGFiZWwuLmkuZS4gd2hlcmUgdGhlIHdoaWxl IGxvb3Agd2lsbCBicmFuY2gKKwkgb3V0IG9mLiAgKi8KKyAgICAgIGV4aXRf bGFiZWxbaWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIExBQkVMX0RFQ0ws IE5VTExfVFJFRSwKKwkJCQkgICB2b2lkX3R5cGVfbm9kZSk7CisgICAgICBE RUNMX0NPTlRFWFQgKGV4aXRfbGFiZWxbaWldKSA9IGN1cnJlbnRfZnVuY3Rp b25fZGVjbDsKKyAgICAgIERFQ0xfQVJUSUZJQ0lBTCAoZXhpdF9sYWJlbFtp aV0pID0gMDsKKyAgICAgIERFQ0xfSUdOT1JFRF9QIChleGl0X2xhYmVsW2lp XSkgPSAxOworICAgICAgZXhpdF9sYWJlbF9leHByW2lpXSA9IGJ1aWxkMSAo TEFCRUxfRVhQUiwgdm9pZF90eXBlX25vZGUsIGV4aXRfbGFiZWxbaWldKTsK KyAgICB9CisKKyAgaWYgKGxoc19yYW5rKQorICAgIHsKKyAgICAgIGZvciAo aWkgPSAwOyBpaSA8IGxoc19saXN0X3NpemU7IGlpKyspCisJeworCSAgaWYg KGxoc192ZWN0b3JbaWldWzBdKQorCSAgICB7IAorCSAgICAgIC8qIFRoZSBs YXN0IEFSUkFZX05PVEFUSU9OIGVsZW1lbnQncyBBUlJBWSBjb21wb25lbnQg c2hvdWxkIGJlIAorCQkgdGhlIGFycmF5J3MgYmFzZSB2YWx1ZS4gICovCisJ ICAgICAgbGhzX2FycmF5X29wZXJhbmRbaWldID0gbGhzX3ZhbHVlW2lpXVts aHNfcmFuayAtIDFdOworCSAgICAgIGdjY19hc3NlcnQgKGxoc19hcnJheV9v cGVyYW5kW2lpXSk7CisJICAgICAgZm9yIChqaiA9IGxoc19yYW5rIC0gMTsg amogPj0gMDsgamotLSkKKwkJeworCQkgIGlmIChsaHNfY291bnRfZG93bltp aV1bampdKQorCQkgICAgICAvKiBBcnJheVtzdGFydF9pbmRleCArIChpbmR1 Y3Rpb25fdmFyICogc3RyaWRlKV0uICAqLworCQkgICAgICBsaHNfYXJyYXlf b3BlcmFuZFtpaV0gPSBidWlsZF9hcnJheV9yZWYKKwkJCShsb2NhdGlvbiwg bGhzX2FycmF5X29wZXJhbmRbaWldLAorCQkJIGJ1aWxkMiAoTUlOVVNfRVhQ UiwgVFJFRV9UWVBFIChsaHNfdmFyW2pqXSksCisJCQkJIGxoc19zdGFydFtp aV1bampdLAorCQkJCSBidWlsZDIgKE1VTFRfRVhQUiwgVFJFRV9UWVBFIChs aHNfdmFyW2pqXSksCisJCQkJCSBsaHNfdmFyW2pqXSwKKwkJCQkJIGxoc19z dHJpZGVbaWldW2pqXSkpKTsKKwkJICBlbHNlCisJCSAgICBsaHNfYXJyYXlf b3BlcmFuZFtpaV0gPSBidWlsZF9hcnJheV9yZWYKKwkJICAgICAgKGxvY2F0 aW9uLCBsaHNfYXJyYXlfb3BlcmFuZFtpaV0sCisJCSAgICAgICBidWlsZDIg KFBMVVNfRVhQUiwgVFJFRV9UWVBFIChsaHNfdmFyW2pqXSksCisJCQkgICAg ICAgbGhzX3N0YXJ0W2lpXVtqal0sCisJCQkgICAgICAgYnVpbGQyIChNVUxU X0VYUFIsIFRSRUVfVFlQRSAobGhzX3Zhcltqal0pLAorCQkJCSAgICAgICBs aHNfdmFyW2pqXSwKKwkJCQkgICAgICAgbGhzX3N0cmlkZVtpaV1bampdKSkp OworCQl9CisJICAgIH0KKwl9CisgICAgICByZXBsYWNlX2FycmF5X25vdGF0 aW9ucyAoJmxocywgdHJ1ZSwgbGhzX2xpc3QsIGxoc19hcnJheV9vcGVyYW5k LAorCQkJICAgICAgIGxoc19saXN0X3NpemUpOworICAgICAgYXJyYXlfZXhw cl9saHMgPSBsaHM7CisgICAgfQorCisgIGlmIChyaHNfcmFuaykKKyAgICB7 CisgICAgICBmb3IgKGlpID0gMDsgaWkgPCByaHNfbGlzdF9zaXplOyBpaSsr KQorCXsKKwkgIGlmIChyaHNfdmVjdG9yW2lpXVswXSkKKwkgICAgeworCSAg ICAgIHJoc19hcnJheV9vcGVyYW5kW2lpXSA9IHJoc192YWx1ZVtpaV1bcmhz X3JhbmsgLSAxXTsKKwkgICAgICBnY2NfYXNzZXJ0IChyaHNfYXJyYXlfb3Bl cmFuZFtpaV0pOworCSAgICAgIGZvciAoamogPSByaHNfcmFuayAtIDE7IGpq ID49IDA7IGpqLS0pCisJCXsKKwkJICBpZiAocmhzX2NvdW50X2Rvd25baWld W2pqXSkKKwkJICAgIHsKKwkJICAgICAgLyogQXJyYXlbc3RhcnRfaW5kZXgg LSAoaW5kdWN0aW9uX3ZhciAqIHN0cmlkZSldICovCisJCSAgICAgIHJoc19h cnJheV9vcGVyYW5kW2lpXSA9IGJ1aWxkX2FycmF5X3JlZgorCQkJKGxvY2F0 aW9uLCByaHNfYXJyYXlfb3BlcmFuZFtpaV0sCisJCQkgYnVpbGQyIChNSU5V U19FWFBSLCBUUkVFX1RZUEUgKHJoc192YXJbampdKSwKKwkJCQkgcmhzX3N0 YXJ0W2lpXVtqal0sCisJCQkJIGJ1aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZ UEUgKHJoc192YXJbampdKSwKKwkJCQkJIHJoc192YXJbampdLAorCQkJCQkg cmhzX3N0cmlkZVtpaV1bampdKSkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJ ICAgIHsKKwkJICAgICAgLyogQXJyYXlbc3RhcnRfaW5kZXggICsgKGluZHVj dGlvbl92YXIgKiBzdHJpZGUpXSAqLworCQkgICAgICByaHNfYXJyYXlfb3Bl cmFuZFtpaV0gPSBidWlsZF9hcnJheV9yZWYKKwkJCShsb2NhdGlvbiwgcmhz X2FycmF5X29wZXJhbmRbaWldLAorCQkJIGJ1aWxkMiAoUExVU19FWFBSLCBU UkVFX1RZUEUgKHJoc192YXJbampdKSwKKwkJCQkgcmhzX3N0YXJ0W2lpXVtq al0sCisJCQkJIGJ1aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZUEUgKHJoc192 YXJbampdKSwKKwkJCQkJIHJoc192YXJbampdLAorCQkJCQkgcmhzX3N0cmlk ZVtpaV1bampdKSkpOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisKKyAg ICAgIGZvciAoaWkgPSAwOyBpaSA8IHJoc19saXN0X3NpemU7IGlpKyspCisJ eworCSAgaWYgKFRSRUVfQ09ERSAocmhzX2xpc3RbaWldKSA9PSBDQUxMX0VY UFIpCisJICAgIHsKKwkgICAgICBpbnQgaWR4X3ZhbHVlID0gMDsKKwkgICAg ICB0cmVlIGZ1bmNfbmFtZSA9IENBTExfRVhQUl9GTiAocmhzX2xpc3RbaWld KTsKKwkgICAgICBpZiAoVFJFRV9DT0RFIChmdW5jX25hbWUpID09IEFERFJf RVhQUikKKwkJaWYgKGlzX3NlY19pbXBsaWNpdF9pbmRleF9mbiAoZnVuY19u YW1lKSkKKwkJICB7CisJCSAgICBpZHhfdmFsdWUgPSAKKwkJICAgICAgZXh0 cmFjdF9zZWNfaW1wbGljaXRfaW5kZXhfYXJnIChsb2NhdGlvbiwgcmhzX2xp c3RbaWldKTsKKwkJICAgIGlmIChpZHhfdmFsdWUgPT0gLTEpIC8qIFRoaXMg bWVhbnMgd2UgaGF2ZSBhbiBlcnJvci4gICovCisJCSAgICAgIHJldHVybiBl cnJvcl9tYXJrX25vZGU7CisJCSAgICBlbHNlIGlmIChpZHhfdmFsdWUgPCBs aHNfcmFuayAmJiBpZHhfdmFsdWUgPj0gMCkKKwkJICAgICAgcmhzX2FycmF5 X29wZXJhbmRbaWldID0gbGhzX3ZhcltpZHhfdmFsdWVdOworCQkgICAgZWxz ZQorCQkgICAgICB7CisJCQlpbnQgZWUgPSAwOworCQkJdHJlZSBsaHNfYmFz ZSA9IGxoc19saXN0W2lpXTsKKwkJCWZvciAoZWUgPSAwOyBlZSA8IGxoc19y YW5rOyBlZSsrKQorCQkJICBsaHNfYmFzZSA9IEFSUkFZX05PVEFUSU9OX0FS UkFZIChsaHNfYmFzZSk7CisJCQllcnJvcl9hdCAobG9jYXRpb24sICJfX3Nl Y19pbXBsaWNpdF9pbmRleCBhcmd1bWVudCAlZCAiCisJCQkJICAibXVzdCBi ZSBsZXNzIHRoYW4gcmFuayBvZiAlcUQiLCBpZHhfdmFsdWUsCisJCQkJICBs aHNfYmFzZSk7CisJCQlyZXR1cm4gZXJyb3JfbWFya19ub2RlOworCQkgICAg ICB9CisJCSAgfSAgCisJICAgIH0KKwl9CisgICAgICByZXBsYWNlX2FycmF5 X25vdGF0aW9ucyAoJnJocywgdHJ1ZSwgcmhzX2xpc3QsIHJoc19hcnJheV9v cGVyYW5kLAorCQkJICAgICAgIHJoc19saXN0X3NpemUpOworICAgICAgYXJy YXlfZXhwcl9yaHMgPSByaHM7CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgZm9yIChpaSA9IDA7IGlpIDwgcmhzX2xpc3Rfc2l6ZTsgaWkrKykKKwl7 CisJICBpZiAoVFJFRV9DT0RFIChyaHNfbGlzdFtpaV0pID09IENBTExfRVhQ UikKKwkgICAgeworCSAgICAgIGludCBpZHhfdmFsdWUgPSAwOworCSAgICAg IHRyZWUgZnVuY19uYW1lID0gQ0FMTF9FWFBSX0ZOIChyaHNfbGlzdFtpaV0p OworCSAgICAgIGlmIChUUkVFX0NPREUgKGZ1bmNfbmFtZSkgPT0gQUREUl9F WFBSKQorCQlpZiAoaXNfc2VjX2ltcGxpY2l0X2luZGV4X2ZuIChmdW5jX25h bWUpKQorCQkgIHsKKwkJICAgIGlkeF92YWx1ZSA9IAorCQkgICAgICBleHRy YWN0X3NlY19pbXBsaWNpdF9pbmRleF9hcmcgKGxvY2F0aW9uLCByaHNfbGlz dFtpaV0pOworCQkgICAgaWYgKGlkeF92YWx1ZSA9PSAtMSkgLyogVGhpcyBt ZWFucyB3ZSBoYXZlIGFuIGVycm9yLiAgKi8KKwkJICAgICAgcmV0dXJuIGVy cm9yX21hcmtfbm9kZTsKKwkJICAgIGVsc2UgaWYgKGlkeF92YWx1ZSA8IGxo c19yYW5rICYmIGlkeF92YWx1ZSA+PSAwKQorCQkgICAgICByaHNfYXJyYXlf b3BlcmFuZFtpaV0gPSBsaHNfdmFyW2lkeF92YWx1ZV07CisJCSAgICBlbHNl CisJCSAgICAgIHsKKwkJCWludCBlZSA9IDA7CisJCQl0cmVlIGxoc19iYXNl ID0gbGhzX2xpc3RbaWldOworCQkJZm9yIChlZSA9IDA7IGVlIDwgbGhzX3Jh bms7IGVlKyspCisJCQkgIGxoc19iYXNlID0gQVJSQVlfTk9UQVRJT05fQVJS QVkgKGxoc19iYXNlKTsKKwkJCWVycm9yX2F0IChsb2NhdGlvbiwgIl9fc2Vj X2ltcGxpY2l0X2luZGV4IGFyZ3VtZW50ICVkICIKKwkJCQkgICJtdXN0IGJl IGxlc3MgdGhhbiByYW5rIG9mICVxRCIsIGlkeF92YWx1ZSwKKwkJCQkgIGxo c19iYXNlKTsKKwkJCXJldHVybiBlcnJvcl9tYXJrX25vZGU7CisJCSAgICAg IH0KKwkJICB9ICAKKwkgICAgfQorCX0KKyAgICAgIHJlcGxhY2VfYXJyYXlf bm90YXRpb25zICgmcmhzLCB0cnVlLCByaHNfbGlzdCwgcmhzX2FycmF5X29w ZXJhbmQsCisJCQkgICAgICAgcmhzX2xpc3Rfc2l6ZSk7CisgICAgICBhcnJh eV9leHByX3JocyA9IHJoczsKKyAgICAgIHJoc19leHByX2luY3JbMF0gPSBO VUxMX1RSRUU7CisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8IHJoc19y YW5rOyBpaSsrKSAKKyAgICByaHNfZXhwcl9pbmNyW2lpXSA9IGJ1aWxkMiAo TU9ESUZZX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCByaHNfdmFyW2lpXSwgCisJ CQkJYnVpbGQyIAorCQkJCShQTFVTX0VYUFIsIFRSRUVfVFlQRSAocmhzX3Zh cltpaV0pLCAKKwkJCQkgcmhzX3ZhcltpaV0sIAorCQkJCSBidWlsZF9vbmVf Y3N0IChUUkVFX1RZUEUgKHJoc192YXJbaWldKSkpKTsKKworICBmb3IgKGlp ID0gMDsgaWkgPCBsaHNfcmFuazsgaWkrKykgCisgICAgbGhzX2V4cHJfaW5j cltpaV0gPSBidWlsZDIgCisgICAgICAoTU9ESUZZX0VYUFIsIHZvaWRfdHlw ZV9ub2RlLCBsaHNfdmFyW2lpXSwgCisgICAgICAgYnVpbGQyIChQTFVTX0VY UFIsIFRSRUVfVFlQRSAobGhzX3ZhcltpaV0pLCBsaHNfdmFyW2lpXSwgCisJ ICAgICAgIGJ1aWxkX29uZV9jc3QgKFRSRUVfVFlQRSAobGhzX3ZhcltpaV0p KSkpOworICAKKyAgaWYgKCFhcnJheV9leHByX2xocykKKyAgICBhcnJheV9l eHByX2xocyA9IGxoczsKKworICBhcnJheV9leHByID0gYnVpbGRfbW9kaWZ5 X2V4cHIgKGxvY2F0aW9uLCBhcnJheV9leHByX2xocywgbGhzX29yaWd0eXBl LCAKKwkJCQkgIG1vZGlmeWNvZGUsIHJoc19sb2MsIGFycmF5X2V4cHJfcmhz LCAKKwkJCQkgIHJoc19vcmlndHlwZSk7CisKKyAgZm9yIChqaiA9IDA7IGpq IDwgTUFYIChsaHNfcmFuaywgcmhzX3JhbmspOyBqaisrKQorICAgIHsKKyAg ICAgIGlmIChyaHNfcmFuayAmJiByaHNfZXhwcl9pbmNyW2pqXSkKKwl7CisJ ICBpbnQgaWlpID0gMDsKKwkgIGlmIChsaHNfY291bnRfZG93blswXVtqal0p CisJICAgIGxoc19jb21wYXJlW2pqXSA9IGJ1aWxkMgorCSAgICAgIChHVF9F WFBSLCBib29sZWFuX3R5cGVfbm9kZSwgbGhzX3Zhcltqal0sIGxoc19sZW5n dGhbMF1bampdKTsKKwkgIGVsc2UKKwkgICAgbGhzX2NvbXBhcmVbampdID0g YnVpbGQyCisJICAgICAgKExUX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBs aHNfdmFyW2pqXSwgbGhzX2xlbmd0aFswXVtqal0pOworCisKKwkgIC8qIFRo ZSByZWFzb24gd2h5IHdlIGhhdmUgdGhpcyBoZXJlIGlzIGZvciB0aGUgZm9s bG93aW5nIGNhc2U6CisJICAgICAgICAgQXJyYXlbOl1bOl0gPSBmdW5jdGlv bl9jYWxsKHNvbWV0aGluZykgKyBBcnJheTJbOl1bOl07CisKKwkgICAgIFNv LCB3ZSB3aWxsIHNraXAgdGhlIGZpcnN0IG9wZXJhbmQgb2YgUkhTIGFuZCB0 aGVuIGdvIHRvIHRoZQorCSAgICAgMm5kIHRvIGZpbmQgd2hldGhlciB3ZSBz aG91bGQgY291bnQgdXAgb3IgZG93bi4gICovCisJIAorCSAgZm9yIChpaWkg PSAwOyBpaWkgPCByaHNfbGlzdF9zaXplOyBpaWkrKykKKwkgICAgaWYgKHJo c192ZWN0b3JbaWlpXVtqal0pCisJICAgICAgYnJlYWs7CisJICAgICAgCisJ ICAvKiBXaGF0IHdlIGFyZSBkb2luZyBoZXJlIGlzIHRoaXM6CisJICAgICBX ZSBhbHdheXMgY291bnQgdXAsIHNvOgorCSAgICAgICBpZiAobGVuZ3RoIGlz IG5lZ2F0aXZlID09PiB3aGljaCBtZWFucyB3ZSBjb3VudCBkb3duKQorCSAg ICAgICAgICB3ZSBtdWx0aXBseSBsZW5ndGggYnkgLTEgYW5kIGNvdW50IHVw ID0+IGlpIDwgLUxFTkdUSAorCSAgICAgICBlbHNlCisJICAgICAgICAgIHdl IGp1c3QgY291bnQgdXAsIHNvIHdlIGNvbXBhcmUgZm9yICBpaSA8IExFTkdU SAorCSAgICovCisJICBpZiAocmhzX2NvdW50X2Rvd25baWlpXVtqal0pCisJ ICAgIC8qIFdlIHVzZSBpaWkgZm9yIHJoc19sZW5ndGggYmVjYXVzZSB0aGF0 IGlzIHRoZSBjb3JyZWN0IGNvdW50ZG93bgorCSAgICAgICB3ZSBoYXZlIHRv IHVzZS4gICovCisJICAgICAgcmhzX2NvbXBhcmVbampdID0gYnVpbGQyCisJ CShMVF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgcmhzX3Zhcltqal0sCisJ CSBidWlsZDIgKE1VTFRfRVhQUiwgVFJFRV9UWVBFIChyaHNfdmFyW2pqXSks CisJCQkgcmhzX2xlbmd0aFtpaWldW2pqXSwKKwkJCSBidWlsZF9pbnRfY3N0 IChUUkVFX1RZUEUgKHJoc192YXJbampdKSwgLTEpKSk7CisJICBlbHNlCisJ ICAgIHJoc19jb21wYXJlW2pqXSA9IGJ1aWxkMiAoTFRfRVhQUiwgYm9vbGVh bl90eXBlX25vZGUsIHJoc192YXJbampdLAorCQkJCSAgICAgIHJoc19sZW5n dGhbaWlpXVtqal0pOworCSAgY29uZF9leHByW2pqXSA9IGJ1aWxkMiAoVFJV VEhfQU5ESUZfRVhQUiwgdm9pZF90eXBlX25vZGUsCisJCQkJICBsaHNfY29t cGFyZVtqal0sIHJoc19jb21wYXJlW2pqXSk7CisJfQorICAgICAgZWxzZQor CXsKKwkgIGlmIChsaHNfY291bnRfZG93blswXVtqal0pCisJICAgIGNvbmRf ZXhwcltqal0gPSBidWlsZDIKKwkgICAgICAoR1RfRVhQUiwgYm9vbGVhbl90 eXBlX25vZGUsIGxoc192YXJbampdLCBsaHNfbGVuZ3RoWzBdW2pqXSk7CisJ ICBlbHNlCisJICAgIGNvbmRfZXhwcltqal0gPSBidWlsZDIKKwkgICAgICAo TFRfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsIGxoc192YXJbampdLCBsaHNf bGVuZ3RoWzBdW2pqXSk7CisJfQorICAgIH0KKyAgCisgIC8qIFRoZSBmb2xs b3dpbmcgc3RhdGVtZW50cyB3aWxsIGRvIHRoZSBmb2xsb3dpbmc6CisgICAq IDxpZl9zdG10X2xhYmVsPjogKGluIG9yZGVyIGZyb20gb3V0ZXJtb3N0IHRv IGlubmVybW9zdCkKKyAgICogICAgICAgICAgICAgICAgICBpZiAoY29uZF9l eHByKSB0aGVuIGdvIHRvIGJvZHlfbGFiZWwKKyAgICogICAgICAgICAgICAg ICAgICBlbHNlICAgICAgICAgICAgICAgIGdvIHRvIGV4aXRfbGFiZWwKKyAg ICogPGJvZHlfbGFiZWw+OgorICAgKiAgICAgICAgICAgICAgICAgIGFycmF5 IGV4cHJlc3Npb24KKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAodGhl IGluY3JlbWVudCwgZ290byBhbmQgZXhpdF9sYWJlbCBnb2VzIGZyb20gaW5u ZXJtb3N0IHRvCisgICAqICAgICAgICAgICAgICAgICAgIG91dGVybW9zdCku CisgICAqICAgICAgICAgICAgICAgICAgaWkrKyBhbmQgamorKworICAgKiAg ICAgICAgICAgICAgICAgIGdvIHRvIGlmX3N0bXRfbGFiZWwKKyAgICogPGV4 aXRfbGFiZWw+OgorICAgKiAgICAgICAgICAgICAgICAgIDxSRVNUIE9GIENP REU+CisgICAqLworCisgIAorICBmb3IgKGlpID0gMDsgaWkgPCBNQVggKGxo c19yYW5rLCByaHNfcmFuayk7IGlpKyspCisgICAgeworICAgICAgYWRkX3N0 bXQgKGxoc19pbmRfaW5pdCBbaWldKTsKKyAgICAgIGlmIChyaHNfcmFuaykK KwlhZGRfc3RtdCAocmhzX2luZF9pbml0W2lpXSk7CisgICAgICBhZGRfc3Rt dCAoYnVpbGQxIChMQUJFTF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgaWZfc3Rt dF9sYWJlbFtpaV0pKTsKKyAgICAgIGFkZF9zdG10IChidWlsZDMgKENPTkRf RVhQUiwgdm9pZF90eXBlX25vZGUsIGNvbmRfZXhwcltpaV0sCisJCQlidWls ZDEgKEdPVE9fRVhQUiwgdm9pZF90eXBlX25vZGUsIGJvZHlfbGFiZWxbaWld KSwKKwkJCWJ1aWxkMSAoR09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwgZXhp dF9sYWJlbFtpaV0pKSk7CisgICAgICBhZGRfc3RtdCAoYm9keV9sYWJlbF9l eHByW2lpXSk7CisgICAgfQorCisgIGlmIChNQVggKGxoc19yYW5rLCByaHNf cmFuaykpCisgICAgYWRkX3N0bXQgKGFycmF5X2V4cHIpOworCisgIGZvciAo aWkgPSBNQVggKGxoc19yYW5rLCByaHNfcmFuaykgLSAxOyBpaSA+PSAwOyBp aS0tKQorICAgIHsKKyAgICAgIGFkZF9zdG10IChsaHNfZXhwcl9pbmNyW2lp XSk7CisgICAgICBpZiAocmhzX3JhbmsgJiYgcmhzX2V4cHJfaW5jcltpaV0p CisJYWRkX3N0bXQgKHJoc19leHByX2luY3JbaWldKTsKKyAgICAgIGFkZF9z dG10IChidWlsZDEgKEdPVE9fRVhQUiwgdm9pZF90eXBlX25vZGUsIGlmX3N0 bXRfbGFiZWxbaWldKSk7CisgICAgICBhZGRfc3RtdCAoZXhpdF9sYWJlbF9l eHByW2lpXSk7CisgICAgfQorICBwb3Bfc3RtdF9saXN0IChsb29wKTsKKyAg cmV0dXJuIGxvb3A7Cit9CisKKy8qIEVuY2xvc2VzIHRoZSBjb25kaXRpb25h bCBzdGF0ZW1lbnQgcGFzc2VkIGluIFNUTVQgd2l0aCBhIGxvb3AgYXJvdW5k IGl0CisgICBhbmQgcmVwbGFjZXMgdGhlIGNvbmRpdGlvbiBpbiBTVE1UIHdp dGggYSBBUlJBWV9SRUYgdHJlZS1ub2RlIHRvIHRoZSBhcnJheS4KKyAgIFRo ZSBjb25kaXRpb24gbXVzdCBoYXZlIGEgQVJSQVlfTk9UQVRJT05fUkVGIHRy ZWUuICAqLworCitzdGF0aWMgdHJlZQorZml4X2NvbmRpdGlvbmFsX2FycmF5 X25vdGF0aW9uc18xICh0cmVlIHN0bXQpCit7CisgIHRyZWUgKmFycmF5X2xp c3QgPSBOVUxMOworICBpbnQgbGlzdF9zaXplID0gMDsKKyAgdHJlZSBjb25k ID0gTlVMTDsKKyAgaW50IHJhbmsgPSAwLCBpaSA9IDAsIGpqID0gMDsKKyAg dHJlZSAqKmFycmF5X29wcywgKmFycmF5X3ZhciwgKmFycmF5X29wZXJhbmQs IGpqX3RyZWUsIGxvb3A7CisgIHRyZWUgKiphcnJheV92YWx1ZSwgKiphcnJh eV9zdHJpZGUsICoqYXJyYXlfbGVuZ3RoLCAqKmFycmF5X3N0YXJ0OworICB0 cmVlICpib2R5X2xhYmVsLCAqYm9keV9sYWJlbF9leHByLCAqZXhpdF9sYWJl bCwgKmV4aXRfbGFiZWxfZXhwcjsKKyAgdHJlZSAqY29tcGFyZV9leHByLCAq aWZfc3RtdF9sYWJlbCwgKmV4cHJfaW5jciwgKmluZF9pbml0OworICBib29s ICoqY291bnRfZG93biwgKiphcnJheV92ZWN0b3I7CisgIGxvY2F0aW9uX3Qg bG9jYXRpb24gPSBVTktOT1dOX0xPQ0FUSU9OOworCisgIGlmIChUUkVFX0NP REUgKHN0bXQpID09IENPTkRfRVhQUikKKyAgICBjb25kID0gQ09ORF9FWFBS X0NPTkQgKHN0bXQpOworICBlbHNlIGlmIChUUkVFX0NPREUgKHN0bXQpID09 IFNXSVRDSF9FWFBSKQorICAgIGNvbmQgPSBTV0lUQ0hfQ09ORCAoc3RtdCk7 CisgIC8qIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2UgZm9yIENJTEtfRk9SX1NU TVQgYWxzbyBoZXJlIHdoZW4gQ2lsayBGb3IgaXMgCisgICAgIGltcGxlbWVu dGVkLiAgKi8KKyAgZWxzZQorICAgIC8qIE90aGVyd2lzZSBkb250IGV2ZW4g dG91Y2ggdGhlIHN0YXRlbWVudC4gICovCisgICAgcmV0dXJuIHN0bXQ7CisK KyAgZmluZF9yYW5rIChjb25kLCB0cnVlLCAmcmFuayk7CisgIGlmIChyYW5r ID09IDApCisgICAgcmV0dXJuIHN0bXQ7ICAKKyAgCisgIGV4dHJhY3RfYXJy YXlfbm90YXRpb25fZXhwcnMgKGNvbmQsIHRydWUsICZhcnJheV9saXN0LCAm bGlzdF9zaXplKTsKKworICBpZiAoKmFycmF5X2xpc3QgPT0gTlVMTF9UUkVF IHx8IGxpc3Rfc2l6ZSA9PSAwKQorICAgIHJldHVybiBzdG10OworCisgIGxv Y2F0aW9uID0gRVhQUl9MT0NBVElPTiAoc3RtdCk7CisgIAorICBhcnJheV9v cHMgPSAgWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUpOworICBmb3IgKGlp ID0gMDsgaWkgPCBsaXN0X3NpemU7IGlpKyspCisgICAgYXJyYXlfb3BzW2lp XSA9ICBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgCisgIGFycmF5X3ZlY3Rv ciA9ICBYTkVXVkVDIChib29sICosIGxpc3Rfc2l6ZSk7CisgIGZvciAoaWkg PSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICBhcnJheV92ZWN0b3Jb aWldID0gIFhORVdWRUMgKGJvb2wsIHJhbmspOworCisgIGFycmF5X3ZhbHVl ID0gWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUpOworICBhcnJheV9zdHJp ZGUgPSBYTkVXVkVDICh0cmVlICosIGxpc3Rfc2l6ZSk7CisgIGFycmF5X2xl bmd0aCA9IFhORVdWRUMgKHRyZWUgKiwgbGlzdF9zaXplKTsKKyAgYXJyYXlf c3RhcnQgPSAgWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUpOworCisgIGZv ciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7CisgICAg ICBhcnJheV92YWx1ZVtpaV0gID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7Cisg ICAgICBhcnJheV9zdHJpZGVbaWldID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7 CisgICAgICBhcnJheV9sZW5ndGhbaWldID0gWE5FV1ZFQyAodHJlZSwgcmFu ayk7CisgICAgICBhcnJheV9zdGFydFtpaV0gID0gWE5FV1ZFQyAodHJlZSwg cmFuayk7CisgICAgfQorCisgIGJvZHlfbGFiZWwgPSBYTkVXVkVDICh0cmVl LCByYW5rKTsKKyAgYm9keV9sYWJlbF9leHByID0gWE5FV1ZFQyAodHJlZSwg cmFuayk7CisgIGV4aXRfbGFiZWwgPSBYTkVXVkVDICh0cmVlLCAgcmFuayk7 CisgIGV4aXRfbGFiZWxfZXhwciA9IFhORVdWRUMgKHRyZWUsIHJhbmspOwor ICBjb21wYXJlX2V4cHIgPSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgaWZf c3RtdF9sYWJlbCA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAKKyAgZXhw cl9pbmNyID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7CisgIGluZF9pbml0ID0g WE5FV1ZFQyAodHJlZSwgIHJhbmspOworICAKKyAgY291bnRfZG93biA9IFhO RVdWRUMgKGJvb2wgKiwgbGlzdF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlp IDwgbGlzdF9zaXplOyBpaSsrKQorICAgIGNvdW50X2Rvd25baWldID0gWE5F V1ZFQyAoYm9vbCwgcmFuayk7CisKKyAgYXJyYXlfb3BlcmFuZCA9ICBYTkVX VkVDICh0cmVlLCBsaXN0X3NpemUpOworICAKKyAgYXJyYXlfdmFyID0gWE5F V1ZFQyAodHJlZSwgcmFuayk7CisgIAorICBmb3IgKGlpID0gMDsgaWkgPCBs aXN0X3NpemU7IGlpKyspCisgICAgeworICAgICAgamogPSAwOworICAgICAg Zm9yIChqal90cmVlID0gYXJyYXlfbGlzdFtpaV07CisJICAgampfdHJlZSAm JiBUUkVFX0NPREUgKGpqX3RyZWUpID09IEFSUkFZX05PVEFUSU9OX1JFRjsK KwkgICBqal90cmVlID0gQVJSQVlfTk9UQVRJT05fQVJSQVkgKGpqX3RyZWUp KQorCXsKKwkgIGFycmF5X29wc1tpaV1bampdID0gampfdHJlZTsKKwkgIGpq Kys7CisJfQorICAgIH0KKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXpl OyBpaSsrKQorICAgIHsKKyAgICAgIGlmIChUUkVFX0NPREUgKGFycmF5X2xp c3RbaWldKSA9PSBBUlJBWV9OT1RBVElPTl9SRUYpCisJeworCSAgZm9yIChq aiA9IDA7IGpqIDwgcmFuazsgamorKykKKwkgICAgeworCSAgICAgIGlmIChU UkVFX0NPREUgKGFycmF5X29wc1tpaV1bampdKSA9PSBBUlJBWV9OT1RBVElP Tl9SRUYpCisJCXsKKwkJICBhcnJheV92YWx1ZVtpaV1bampdID0KKwkJICAg IEFSUkFZX05PVEFUSU9OX0FSUkFZIChhcnJheV9vcHNbaWldW2pqXSk7CisJ CSAgYXJyYXlfc3RhcnRbaWldW2pqXSA9CisJCSAgICBBUlJBWV9OT1RBVElP Tl9TVEFSVCAoYXJyYXlfb3BzW2lpXVtqal0pOworCQkgIGFycmF5X2xlbmd0 aFtpaV1bampdID0KKwkJICAgIEFSUkFZX05PVEFUSU9OX0xFTkdUSCAoYXJy YXlfb3BzW2lpXVtqal0pOworCQkgIGFycmF5X3N0cmlkZVtpaV1bampdID0K KwkJICAgIEFSUkFZX05PVEFUSU9OX1NUUklERSAoYXJyYXlfb3BzW2lpXVtq al0pOworCQkgIGFycmF5X3ZlY3RvcltpaV1bampdID0gdHJ1ZTsKKworCQkg IGlmICghVFJFRV9DT05TVEFOVCAoYXJyYXlfbGVuZ3RoW2lpXVtqal0pKQor CQkgICAgICBjb3VudF9kb3duW2lpXVtqal0gPSBmYWxzZTsKKwkJICBlbHNl IGlmICh0cmVlX2ludF9jc3RfbHQKKwkJCSAgIChhcnJheV9sZW5ndGhbaWld W2pqXSwKKwkJCSAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKGFycmF5 X2xlbmd0aFtpaV1bampdKSwKKwkJCQkJICAgMCkpKQorCQkgICAgY291bnRf ZG93bltpaV1bampdID0gdHJ1ZTsKKwkJICBlbHNlCisJCSAgICBjb3VudF9k b3duW2lpXVtqal0gPSBmYWxzZTsKKwkJfQorCSAgICAgIGVsc2UKKwkJYXJy YXlfdmVjdG9yW2lpXVtqal0gPSBmYWxzZTsKKwkgICAgfQorCX0KKyAgICB9 CisKKyAgbG9vcCA9IHB1c2hfc3RtdF9saXN0KCk7CisKKyAgZm9yIChpaSA9 IDA7IGlpIDwgcmFuazsgaWkrKykKKyAgICB7CisgICAgICBhcnJheV92YXJb aWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIFZBUl9ERUNMLCBOVUxMX1RS RUUsCisJCQkJICBpbnRlZ2VyX3R5cGVfbm9kZSk7CisgICAgICBpbmRfaW5p dFtpaV0gPQorCWJ1aWxkX21vZGlmeV9leHByIChsb2NhdGlvbiwgYXJyYXlf dmFyW2lpXSwKKwkJCSAgIFRSRUVfVFlQRSAoYXJyYXlfdmFyW2lpXSksIE5P UF9FWFBSLAorCQkJICAgbG9jYXRpb24sCisJCQkgICBidWlsZF9pbnRfY3N0 IChUUkVFX1RZUEUgKGFycmF5X3ZhcltpaV0pLCAwKSwKKwkJCSAgIFRSRUVf VFlQRSAoYXJyYXlfdmFyW2lpXSkpOworCQorICAgIH0KKworICBmb3IgKGlp ID0gMDsgaWkgPCByYW5rIDsgaWkrKykKKyAgICB7CisgICAgICAvKiBUaGlz IHdpbGwgY3JlYXRlIHRoZSBpZiBzdGF0ZW1lbnQgbGFiZWwuICAqLworICAg ICAgaWZfc3RtdF9sYWJlbFtpaV0gPSBidWlsZF9kZWNsIChsb2NhdGlvbiwg TEFCRUxfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAgICAgIHZvaWRfdHlwZV9u b2RlKTsKKyAgICAgIERFQ0xfQ09OVEVYVCAoaWZfc3RtdF9sYWJlbFtpaV0p ID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICAgICAgREVDTF9BUlRJRklD SUFMIChpZl9zdG10X2xhYmVsW2lpXSkgPSAwOworICAgICAgREVDTF9JR05P UkVEX1AgKGlmX3N0bXRfbGFiZWxbaWldKSA9IDE7CisgIAorICAgICAgLyog VGhpcyBsYWJlbCBzdGF0bWVudCB3aWxsIHBvaW50IHRvIHRoZSBsb29wIGJv ZHkuICAqLworICAgICAgYm9keV9sYWJlbFtpaV0gPSBidWlsZF9kZWNsIChs b2NhdGlvbiwgTEFCRUxfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAgIHZvaWRf dHlwZV9ub2RlKTsKKyAgICAgIERFQ0xfQ09OVEVYVCAoYm9keV9sYWJlbFtp aV0pID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICAgICAgREVDTF9BUlRJ RklDSUFMIChib2R5X2xhYmVsW2lpXSkgPSAwOworICAgICAgREVDTF9JR05P UkVEX1AgKGJvZHlfbGFiZWxbaWldKSA9IDE7CisgICAgICBib2R5X2xhYmVs X2V4cHJbaWldID0gYnVpbGQxIChMQUJFTF9FWFBSLCB2b2lkX3R5cGVfbm9k ZSwgYm9keV9sYWJlbFtpaV0pOworCisgICAgICAvKiBUaGlzIHdpbGwgY3Jl YXRlIHRoZSBleGl0IGxhYmVsLi5pLmUuIHdoZXJlIHRoZSB3aGlsZSBsb29w IHdpbGwgYnJhbmNoCisJIG91dCBvZi4gKi8KKyAgICAgIGV4aXRfbGFiZWxb aWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIExBQkVMX0RFQ0wsIE5VTExf VFJFRSwKKwkJCQkgICB2b2lkX3R5cGVfbm9kZSk7CisgICAgICBERUNMX0NP TlRFWFQgKGV4aXRfbGFiZWxbaWldKSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVj bDsKKyAgICAgIERFQ0xfQVJUSUZJQ0lBTCAoZXhpdF9sYWJlbFtpaV0pID0g MDsKKyAgICAgIERFQ0xfSUdOT1JFRF9QIChleGl0X2xhYmVsW2lpXSkgPSAx OworICAgICAgZXhpdF9sYWJlbF9leHByW2lpXSA9IGJ1aWxkMSAoTEFCRUxf RVhQUiwgdm9pZF90eXBlX25vZGUsIGV4aXRfbGFiZWxbaWldKTsKKyAgICB9 CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAg IHsKKyAgICAgIGlmIChhcnJheV92ZWN0b3JbaWldWzBdKQorCXsKKwkgIGFy cmF5X29wZXJhbmRbaWldID0gYXJyYXlfdmFsdWVbaWldW3JhbmsgLSAxXTsK KwkgIGdjY19hc3NlcnQgKGFycmF5X29wZXJhbmRbaWldKTsKKwkgIGZvciAo amogPSByYW5rIC0gMTsgamogPj0gMDsgamotLSkKKwkgICAgeworCSAgICAg IGlmIChjb3VudF9kb3duW2lpXVtqal0pCisJCXsKKwkJICAvKiBBcnJheVtz dGFydF9pbmRleCAtIChpbmR1Y3Rpb25fdmFyICogc3RyaWRlKV0gKi8KKwkJ ICBhcnJheV9vcGVyYW5kW2lpXSA9IGJ1aWxkX2FycmF5X3JlZgorCQkgICAg KGxvY2F0aW9uLCBhcnJheV9vcGVyYW5kW2lpXSwKKwkJICAgICBidWlsZDIg KE1JTlVTX0VYUFIsIFRSRUVfVFlQRSAoYXJyYXlfdmFyW2pqXSksCisJCQkg ICAgIGFycmF5X3N0YXJ0W2lpXVtqal0sCisJCQkgICAgIGJ1aWxkMiAoTVVM VF9FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zhcltqal0pLAorCQkJCSAgICAg YXJyYXlfdmFyW2pqXSwgYXJyYXlfc3RyaWRlW2lpXVtqal0pKSk7CisJCX0K KwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBBcnJheVtzdGFydF9pbmRleCAr IChpbmR1Y3Rpb25fdmFyICogc3RyaWRlKV0gKi8KKwkJICBhcnJheV9vcGVy YW5kW2lpXSA9IGJ1aWxkX2FycmF5X3JlZgorCQkgICAgKGxvY2F0aW9uLCBh cnJheV9vcGVyYW5kW2lpXSwKKwkJICAgICBidWlsZDIgKFBMVVNfRVhQUiwg VFJFRV9UWVBFIChhcnJheV92YXJbampdKSwKKwkJCSAgICAgYXJyYXlfc3Rh cnRbaWldW2pqXSwKKwkJCSAgICAgYnVpbGQyIChNVUxUX0VYUFIsIFRSRUVf VFlQRSAoYXJyYXlfdmFyW2pqXSksCisJCQkJICAgICBhcnJheV92YXJbampd LCBhcnJheV9zdHJpZGVbaWldW2pqXSkpKTsKKwkJfQorCSAgICB9CisJfQor ICAgIH0KKyAgcmVwbGFjZV9hcnJheV9ub3RhdGlvbnMgKCZzdG10LCB0cnVl LCBhcnJheV9saXN0LCBhcnJheV9vcGVyYW5kLCBsaXN0X3NpemUpOworCisg IGZvciAoaWkgPSAwOyBpaSA8IHJhbms7IGlpKyspIAorICAgIGV4cHJfaW5j cltpaV0gPSBidWlsZDIgKE1PRElGWV9FWFBSLCB2b2lkX3R5cGVfbm9kZSwg YXJyYXlfdmFyW2lpXSwgCisJCQkgICAgYnVpbGQyIChQTFVTX0VYUFIsIFRS RUVfVFlQRSAoYXJyYXlfdmFyW2lpXSksIAorCQkJCSAgICBhcnJheV92YXJb aWldLCAKKwkJCQkgICAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJh eV92YXJbaWldKSwgCisJCQkJCQkgICAxKSkpOworICBmb3IgKGpqID0gMDsg amogPCByYW5rOyBqaisrKQorICAgIHsKKyAgICAgIGlmIChyYW5rICYmIGV4 cHJfaW5jcltqal0pCisJeworCSAgaWYgKGNvdW50X2Rvd25bMF1bampdKQor CSAgICBjb21wYXJlX2V4cHJbampdID0KKwkgICAgICBidWlsZDIgKExUX0VY UFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBhcnJheV92YXJbampdLAorCQkgICAg ICBidWlsZDIgKE1VTFRfRVhQUiwgVFJFRV9UWVBFIChhcnJheV92YXJbampd KSwKKwkJCSAgICAgIGFycmF5X2xlbmd0aFswXVtqal0sCisJCQkgICAgICBi dWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKGFycmF5X3Zhcltqal0pLCAtMSkp KTsKKwkgIGVsc2UKKwkgICAgY29tcGFyZV9leHByW2pqXSA9IGJ1aWxkMiAo TFRfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsCisJCQkJICAgICAgIGFycmF5 X3Zhcltqal0sIGFycmF5X2xlbmd0aFswXVtqal0pOworCX0KKyAgICB9Cisg IAorICBmb3IgKGlpID0gMDsgaWkgPCByYW5rOyBpaSsrKQorICAgIHsKKyAg ICAgIGFkZF9zdG10IChpbmRfaW5pdCBbaWldKTsKKyAgICAgIGFkZF9zdG10 IChidWlsZDEgKExBQkVMX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBpZl9zdG10 X2xhYmVsW2lpXSkpOworICAgICAgYWRkX3N0bXQgKGJ1aWxkMyAoQ09ORF9F WFBSLCB2b2lkX3R5cGVfbm9kZSwgY29tcGFyZV9leHByW2lpXSwKKwkJCWJ1 aWxkMSAoR09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwgYm9keV9sYWJlbFtp aV0pLAorCQkJYnVpbGQxIChHT1RPX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBl eGl0X2xhYmVsW2lpXSkpKTsKKyAgICAgIGFkZF9zdG10IChib2R5X2xhYmVs X2V4cHJbaWldKTsKKyAgICB9CisKKyAgYWRkX3N0bXQgKHN0bXQpOworCisg IGZvciAoaWkgPSByYW5rIC0gMTsgaWkgPj0gMDsgaWktLSkKKyAgICB7Cisg ICAgICBhZGRfc3RtdCAoZXhwcl9pbmNyW2lpXSk7CisgICAgICBhZGRfc3Rt dCAoYnVpbGQxIChHT1RPX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBpZl9zdG10 X2xhYmVsW2lpXSkpOworICAgICAgYWRkX3N0bXQgKGV4aXRfbGFiZWxfZXhw cltpaV0pOworICAgIH0KKworICBwb3Bfc3RtdF9saXN0IChsb29wKTsKKwor ICBYREVMRVRFVkVDIChib2R5X2xhYmVsKTsKKyAgWERFTEVURVZFQyAoYm9k eV9sYWJlbF9leHByKTsKKyAgWERFTEVURVZFQyAoZXhpdF9sYWJlbCk7Cisg IFhERUxFVEVWRUMgKGV4aXRfbGFiZWxfZXhwcik7CisgIFhERUxFVEVWRUMg KGNvbXBhcmVfZXhwcik7CisgIFhERUxFVEVWRUMgKGlmX3N0bXRfbGFiZWwp OworICBYREVMRVRFVkVDIChleHByX2luY3IpOworICBYREVMRVRFVkVDIChp bmRfaW5pdCk7CisgIFhERUxFVEVWRUMgKGFycmF5X29wZXJhbmQpOworICBY REVMRVRFVkVDIChhcnJheV92YXIpOworICAKKyAgZm9yIChpaSA9IDA7IGlp IDwgbGlzdF9zaXplOyBpaSsrKQorICAgIHsKKyAgICAgIFhERUxFVEVWRUMg KGNvdW50X2Rvd25baWldKTsKKyAgICAgIFhERUxFVEVWRUMgKGFycmF5X3Zh bHVlW2lpXSk7CisgICAgICBYREVMRVRFVkVDIChhcnJheV9zdHJpZGVbaWld KTsKKyAgICAgIFhERUxFVEVWRUMgKGFycmF5X2xlbmd0aFtpaV0pOworICAg ICAgWERFTEVURVZFQyAoYXJyYXlfc3RhcnRbaWldKTsKKyAgICAgIFhERUxF VEVWRUMgKGFycmF5X29wc1tpaV0pOworICAgICAgWERFTEVURVZFQyAoYXJy YXlfdmVjdG9yW2lpXSk7CisgICAgfQorCisgIFhERUxFVEVWRUMgKGNvdW50 X2Rvd24pOworICBYREVMRVRFVkVDIChhcnJheV92YWx1ZSk7CisgIFhERUxF VEVWRUMgKGFycmF5X3N0cmlkZSk7CisgIFhERUxFVEVWRUMgKGFycmF5X2xl bmd0aCk7CisgIFhERUxFVEVWRUMgKGFycmF5X3N0YXJ0KTsKKyAgWERFTEVU RVZFQyAoYXJyYXlfb3BzKTsKKyAgWERFTEVURVZFQyAoYXJyYXlfdmVjdG9y KTsKKworICByZXR1cm4gbG9vcDsKK30KKworLyogVG9wLWxldmVsIGZ1bmN0 aW9uIHRvIHJlcGxhY2UgQVJSQVlfTk9UQVRJT05fUkVGIGluIGEgY29uZGl0 aW9uYWwgc3RhdGVtZW50CisgICBpbiBTVE1ULiAgKi8KKwordHJlZQorZml4 X2NvbmRpdGlvbmFsX2FycmF5X25vdGF0aW9ucyAodHJlZSBzdG10KQorewor ICBpZiAoVFJFRV9DT0RFIChzdG10KSA9PSBTVEFURU1FTlRfTElTVCkKKyAg ICB7CisgICAgICB0cmVlX3N0bXRfaXRlcmF0b3IgdHNpOworICAgICAgZm9y ICh0c2kgPSB0c2lfc3RhcnQgKHN0bXQpOyAhdHNpX2VuZF9wICh0c2kpOyB0 c2lfbmV4dCAoJnRzaSkpCisJeworCSAgdHJlZSBzaW5nbGVfc3RtdCA9ICp0 c2lfc3RtdF9wdHIgKHRzaSk7CisJICAqdHNpX3N0bXRfcHRyICh0c2kpID0K KwkgICAgZml4X2NvbmRpdGlvbmFsX2FycmF5X25vdGF0aW9uc18xIChzaW5n bGVfc3RtdCk7CisJfQorICAgICAgcmV0dXJuIHN0bXQ7CisgICAgfQorICBl bHNlCisgICAgcmV0dXJuIGZpeF9jb25kaXRpb25hbF9hcnJheV9ub3RhdGlv bnNfMSAoc3RtdCk7Cit9CisKKy8qIENyZWF0ZSBhIHN0cnVjdCBjX2V4cHIg dGhhdCBjb250YWlucyBhIGxvb3Agd2l0aCBBUlJBWV9SRUYgZXhwciBhdCBs b2NhdGlvbgorICAgTE9DQVRJT04gd2l0aCB0aGUgdHJlZV9jb2RlIENPREUg YW5kIHRoZSBhcnJheSBub3RhdGlvbiBleHByIGlzCisgICBwYXNzZWQgaW4g QVJHLiAgUmV0dXJucyB0aGUgZml4ZWQgY19leHByIGluIEFSRyBpdHNlbGYu ICAqLworCitzdHJ1Y3QgY19leHByIAorZml4X2FycmF5X25vdGF0aW9uX2V4 cHIgKGxvY2F0aW9uX3QgbG9jYXRpb24sIGVudW0gdHJlZV9jb2RlIGNvZGUs CisJCQkgc3RydWN0IGNfZXhwciBhcmcpCit7CisKKyAgdHJlZSAqYXJyYXlf bGlzdCA9IE5VTEw7CisgIGludCBsaXN0X3NpemUgPSAwOworICBpbnQgcmFu ayA9IDAsIGlpID0gMCwgamogPSAwOworICB0cmVlICoqYXJyYXlfb3BzLCAq YXJyYXlfdmFyLCAqYXJyYXlfb3BlcmFuZCwgampfdHJlZSwgbG9vcDsKKyAg dHJlZSAqKmFycmF5X3ZhbHVlLCAqKmFycmF5X3N0cmlkZSwgKiphcnJheV9s ZW5ndGgsICoqYXJyYXlfc3RhcnQ7CisgIHRyZWUgKmJvZHlfbGFiZWwsICpi b2R5X2xhYmVsX2V4cHIsICpleGl0X2xhYmVsLCAqZXhpdF9sYWJlbF9leHBy OworICB0cmVlICpjb21wYXJlX2V4cHIsICppZl9zdG10X2xhYmVsLCAqZXhw cl9pbmNyLCAqaW5kX2luaXQ7CisgIGJvb2wgKipjb3VudF9kb3duLCAqKmFy cmF5X3ZlY3RvcjsKKyAgCisgIGZpbmRfcmFuayAoYXJnLnZhbHVlLCBmYWxz ZSwgJnJhbmspOworICBpZiAocmFuayA9PSAwKQorICAgIHJldHVybiBhcmc7 CisKKyAgZXh0cmFjdF9hcnJheV9ub3RhdGlvbl9leHBycyAoYXJnLnZhbHVl LCB0cnVlLCAmYXJyYXlfbGlzdCwgJmxpc3Rfc2l6ZSk7CisKKyAgaWYgKGxp c3Rfc2l6ZSA9PSAwIHx8ICphcnJheV9saXN0ID09IE5VTExfVFJFRSkKKyAg ICByZXR1cm4gYXJnOworCisgIGFycmF5X29wcyA9IFhORVdWRUMgKHRyZWUg KiwgbGlzdF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXpl OyBpaSsrKQorICAgIGFycmF5X29wc1tpaV0gPSBYTkVXVkVDICh0cmVlLCAg cmFuayk7CisgIAorICBhcnJheV92ZWN0b3IgPSAgWE5FV1ZFQyAoYm9vbCAq LCBsaXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0X3NpemU7 IGlpKyspCisgICAgYXJyYXlfdmVjdG9yW2lpXSA9IFhORVdWRUMgKGJvb2ws IHJhbmspOworCisgIGFycmF5X3ZhbHVlID0gWE5FV1ZFQyAodHJlZSAqLCBs aXN0X3NpemUpOworICBhcnJheV9zdHJpZGUgPSBYTkVXVkVDICh0cmVlICos IGxpc3Rfc2l6ZSk7CisgIGFycmF5X2xlbmd0aCA9IFhORVdWRUMgKHRyZWUg KiwgbGlzdF9zaXplKTsKKyAgYXJyYXlfc3RhcnQgPSBYTkVXVkVDICh0cmVl ICosIGxpc3Rfc2l6ZSk7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9z aXplOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5X3ZhbHVlW2lpXSAgPSBY TkVXVkVDICh0cmVlLCByYW5rKTsKKyAgICAgIGFycmF5X3N0cmlkZVtpaV0g PSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgICAgIGFycmF5X2xlbmd0aFtp aV0gPSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgICAgIGFycmF5X3N0YXJ0 W2lpXSAgPSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgICB9CisKKyAgYm9k eV9sYWJlbCA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICBib2R5X2xhYmVs X2V4cHIgPSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgZXhpdF9sYWJlbCA9 IFhORVdWRUMgKHRyZWUsIHJhbmspOworICBleGl0X2xhYmVsX2V4cHIgPSBY TkVXVkVDICh0cmVlLCByYW5rKTsKKyAgY29tcGFyZV9leHByID0gWE5FV1ZF QyAodHJlZSwgcmFuayk7CisgIGlmX3N0bXRfbGFiZWwgPSBYTkVXVkVDICh0 cmVlLCByYW5rKTsKKyAgCisgIGV4cHJfaW5jciA9IFhORVdWRUMgKHRyZWUs IHJhbmspOworICBpbmRfaW5pdCA9IFhORVdWRUMgKHRyZWUsIHJhbmspOwor ICAKKyAgY291bnRfZG93biA9IFhORVdWRUMgKGJvb2wgKiwgbGlzdF9zaXpl KTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAg IGNvdW50X2Rvd25baWldID0gWE5FV1ZFQyAoYm9vbCwgcmFuayk7CisKKyAg YXJyYXlfb3BlcmFuZCA9IFhORVdWRUMgKHRyZWUsIGxpc3Rfc2l6ZSk7Cisg IGFycmF5X3ZhciA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworCisgIGZvciAo aWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7CisgICAgICBq aiA9IDA7CisgICAgICBmb3IgKGpqX3RyZWUgPSBhcnJheV9saXN0W2lpXTsK KwkgICBqal90cmVlICYmIFRSRUVfQ09ERSAoampfdHJlZSkgPT0gQVJSQVlf Tk9UQVRJT05fUkVGOworCSAgIGpqX3RyZWUgPSBBUlJBWV9OT1RBVElPTl9B UlJBWSAoampfdHJlZSkpCisJeworCSAgYXJyYXlfb3BzW2lpXVtqal0gPSBq al90cmVlOworCSAgamorKzsKKwl9CisgICAgfQorCisgIGZvciAoaWkgPSAw OyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7CisgICAgICBpZiAoVFJF RV9DT0RFIChhcnJheV9saXN0W2lpXSkgPT0gQVJSQVlfTk9UQVRJT05fUkVG KQorCXsKKwkgIGZvciAoamogPSAwOyBqaiA8IHJhbms7IGpqKyspCisJICAg IHsKKwkgICAgICBpZiAoVFJFRV9DT0RFIChhcnJheV9vcHNbaWldW2pqXSkg PT0gQVJSQVlfTk9UQVRJT05fUkVGKQorCQl7CisJCSAgYXJyYXlfdmFsdWVb aWldW2pqXSA9CisJCSAgICBBUlJBWV9OT1RBVElPTl9BUlJBWSAoYXJyYXlf b3BzW2lpXVtqal0pOworCQkgIGFycmF5X3N0YXJ0W2lpXVtqal0gPQorCQkg ICAgQVJSQVlfTk9UQVRJT05fU1RBUlQgKGFycmF5X29wc1tpaV1bampdKTsK KwkJICBhcnJheV9sZW5ndGhbaWldW2pqXSA9CisJCSAgICBBUlJBWV9OT1RB VElPTl9MRU5HVEggKGFycmF5X29wc1tpaV1bampdKTsKKwkJICBhcnJheV9z dHJpZGVbaWldW2pqXSA9CisJCSAgICBBUlJBWV9OT1RBVElPTl9TVFJJREUg KGFycmF5X29wc1tpaV1bampdKTsKKwkJICBhcnJheV92ZWN0b3JbaWldW2pq XSA9IHRydWU7CisKKwkJICBpZiAoIVRSRUVfQ09OU1RBTlQgKGFycmF5X2xl bmd0aFtpaV1bampdKSkgCisJCSAgICBjb3VudF9kb3duW2lpXVtqal0gPSBm YWxzZTsKKwkJICBlbHNlIGlmICh0cmVlX2ludF9jc3RfbHQKKwkJCSAgIChh cnJheV9sZW5ndGhbaWldW2pqXSwKKwkJCSAgICBidWlsZF9pbnRfY3N0IChU UkVFX1RZUEUgKGFycmF5X2xlbmd0aFtpaV1bampdKSwKKwkJCQkJICAgMCkp KQorCQkgICAgY291bnRfZG93bltpaV1bampdID0gdHJ1ZTsKKwkJICBlbHNl CisJCSAgICBjb3VudF9kb3duW2lpXVtqal0gPSBmYWxzZTsKKwkJfQorCSAg ICAgIGVsc2UKKwkJYXJyYXlfdmVjdG9yW2lpXVtqal0gPSBmYWxzZTsKKwkg ICAgfQorCX0KKyAgICB9CisKKyAgbG9vcCA9IHB1c2hfc3RtdF9saXN0ICgp OworCisgIGZvciAoaWkgPSAwOyBpaSA8IHJhbms7IGlpKyspCisgICAgewor ICAgICAgYXJyYXlfdmFyW2lpXSA9IGJ1aWxkX2RlY2wgKGxvY2F0aW9uLCBW QVJfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAgaW50ZWdlcl90eXBlX25vZGUp OworICAgICAgaW5kX2luaXRbaWldID0KKwlidWlsZF9tb2RpZnlfZXhwciAo bG9jYXRpb24sIGFycmF5X3ZhcltpaV0sCisJCQkgICBUUkVFX1RZUEUgKGFy cmF5X3ZhcltpaV0pLCBOT1BfRVhQUiwKKwkJCSAgIGxvY2F0aW9uLAorCQkJ ICAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJheV92YXJbaWldKSwg MCksCisJCQkgICBUUkVFX1RZUEUgKGFycmF5X3ZhcltpaV0pKTsKKwkKKyAg ICB9CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmFuayA7IGlpKyspCisgICAg eworICAgICAgLyogVGhpcyB3aWxsIGNyZWF0ZSB0aGUgaWYgc3RhdGVtZW50 IGxhYmVsLiAgKi8KKyAgICAgIGlmX3N0bXRfbGFiZWxbaWldID0gYnVpbGRf ZGVjbCAobG9jYXRpb24sIExBQkVMX0RFQ0wsIE5VTExfVFJFRSwKKwkJCQkg ICAgICB2b2lkX3R5cGVfbm9kZSk7CisgICAgICBERUNMX0NPTlRFWFQgKGlm X3N0bXRfbGFiZWxbaWldKSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAg ICAgIERFQ0xfQVJUSUZJQ0lBTCAoaWZfc3RtdF9sYWJlbFtpaV0pID0gMDsK KyAgICAgIERFQ0xfSUdOT1JFRF9QIChpZl9zdG10X2xhYmVsW2lpXSkgPSAx OworICAKKyAgICAgIC8qIFRoaXMgbGFiZWwgc3RhdG1lbnQgd2lsbCBwb2lu dCB0byB0aGUgbG9vcCBib2R5LiAgKi8KKyAgICAgIGJvZHlfbGFiZWxbaWld ID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIExBQkVMX0RFQ0wsIE5VTExfVFJF RSwKKwkJCQkgICB2b2lkX3R5cGVfbm9kZSk7CisgICAgICBERUNMX0NPTlRF WFQgKGJvZHlfbGFiZWxbaWldKSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsK KyAgICAgIERFQ0xfQVJUSUZJQ0lBTCAoYm9keV9sYWJlbFtpaV0pID0gMDsK KyAgICAgIERFQ0xfSUdOT1JFRF9QIChib2R5X2xhYmVsW2lpXSkgPSAxOwor ICAgICAgYm9keV9sYWJlbF9leHByW2lpXSA9IGJ1aWxkMSAoTEFCRUxfRVhQ Uiwgdm9pZF90eXBlX25vZGUsIGJvZHlfbGFiZWxbaWldKTsKKworICAgICAg LyogVGhpcyB3aWxsIGNyZWF0ZSB0aGUgZXhpdCBsYWJlbCwgaS5lLiB3aGVy ZSB0aGUgd2hpbGUgbG9vcCB3aWxsIGJyYW5jaAorCSBvdXQgb2YuICAqLwor ICAgICAgZXhpdF9sYWJlbFtpaV0gPSBidWlsZF9kZWNsIChsb2NhdGlvbiwg TEFCRUxfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAgIHZvaWRfdHlwZV9ub2Rl KTsKKyAgICAgIERFQ0xfQ09OVEVYVCAoZXhpdF9sYWJlbFtpaV0pID0gY3Vy cmVudF9mdW5jdGlvbl9kZWNsOworICAgICAgREVDTF9BUlRJRklDSUFMIChl eGl0X2xhYmVsW2lpXSkgPSAwOworICAgICAgREVDTF9JR05PUkVEX1AgKGV4 aXRfbGFiZWxbaWldKSA9IDE7CisgICAgICBleGl0X2xhYmVsX2V4cHJbaWld ID0gYnVpbGQxIChMQUJFTF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgZXhpdF9s YWJlbFtpaV0pOworICAgIH0KKworICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0 X3NpemU7IGlpKyspCisgICAgeworICAgICAgaWYgKGFycmF5X3ZlY3Rvcltp aV1bMF0pCisJeworCSAgYXJyYXlfb3BlcmFuZFtpaV0gPSBhcnJheV92YWx1 ZVtpaV1bcmFuayAtIDFdOworCSAgZ2NjX2Fzc2VydCAoYXJyYXlfb3BlcmFu ZFtpaV0pOworCSAgZm9yIChqaiA9IHJhbmsgLSAxOyBqaiA+PSAwOyBqai0t KQorCSAgICB7CisJICAgICAgaWYgKGNvdW50X2Rvd25baWldW2pqXSkKKwkJ eworCQkgIC8qIEFycmF5W3N0YXJ0X2luZGV4IC0gKGluZHVjdGlvbl92YXIg KiBzdHJpZGUpXSAqLworCQkgIGFycmF5X29wZXJhbmRbaWldID0gYnVpbGRf YXJyYXlfcmVmCisJCSAgICAobG9jYXRpb24sIGFycmF5X29wZXJhbmRbaWld LAorCQkgICAgIGJ1aWxkMiAoTUlOVVNfRVhQUiwgVFJFRV9UWVBFIChhcnJh eV92YXJbampdKSwKKwkJCSAgICAgYXJyYXlfc3RhcnRbaWldW2pqXSwKKwkJ CSAgICAgYnVpbGQyIChNVUxUX0VYUFIsIFRSRUVfVFlQRSAoYXJyYXlfdmFy W2pqXSksCisJCQkJICAgICBhcnJheV92YXJbampdLCBhcnJheV9zdHJpZGVb aWldW2pqXSkpKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIEFy cmF5W3N0YXJ0X2luZGV4ICsgKGluZHVjdGlvbl92YXIgKiBzdHJpZGUpXSAq LworCQkgIGFycmF5X29wZXJhbmRbaWldID0gYnVpbGRfYXJyYXlfcmVmCisJ CSAgICAobG9jYXRpb24sIGFycmF5X29wZXJhbmRbaWldLAorCQkgICAgIGJ1 aWxkMiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zhcltqal0pLAor CQkJICAgICBhcnJheV9zdGFydFtpaV1bampdLAorCQkJICAgICBidWlsZDIg KE1VTFRfRVhQUiwgVFJFRV9UWVBFIChhcnJheV92YXJbampdKSwKKwkJCQkg ICAgIGFycmF5X3Zhcltqal0sIGFycmF5X3N0cmlkZVtpaV1bampdKSkpOwor CQl9CisJICAgIH0KKwl9CisgICAgfQorICByZXBsYWNlX2FycmF5X25vdGF0 aW9ucyAoJmFyZy52YWx1ZSwgdHJ1ZSwgYXJyYXlfbGlzdCwgYXJyYXlfb3Bl cmFuZCwKKwkJCSAgIGxpc3Rfc2l6ZSk7CisKKyAgZm9yIChpaSA9IDA7IGlp IDwgcmFuazsgaWkrKykKKyAgICB7CisgICAgICBleHByX2luY3JbaWldID0K KwlidWlsZDIgKE1PRElGWV9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgYXJyYXlf dmFyW2lpXSwKKwkJYnVpbGQyIChQTFVTX0VYUFIsIFRSRUVfVFlQRSAoYXJy YXlfdmFyW2lpXSksIGFycmF5X3ZhcltpaV0sCisJCQlidWlsZF9pbnRfY3N0 IChUUkVFX1RZUEUgKGFycmF5X3ZhcltpaV0pLCAxKSkpOworICAgIH0KKyAg CisgIGZvciAoamogPSAwOyBqaiA8IHJhbms7IGpqKyspCisgICAgeworICAg ICAgaWYgKHJhbmsgJiYgZXhwcl9pbmNyW2pqXSkKKwl7CisJICBpZiAoY291 bnRfZG93blswXVtqal0pCisJICAgIGNvbXBhcmVfZXhwcltqal0gPQorCSAg ICAgIGJ1aWxkMiAoTFRfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsIGFycmF5 X3Zhcltqal0sCisJCSAgICAgIGJ1aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZ UEUgKGFycmF5X3Zhcltqal0pLAorCQkJICAgICAgYXJyYXlfbGVuZ3RoWzBd W2pqXSwKKwkJCSAgICAgIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoYXJy YXlfdmFyW2pqXSksIC0xKSkpOworCSAgZWxzZQorCSAgICBjb21wYXJlX2V4 cHJbampdID0gYnVpbGQyIChMVF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwK KwkJCQkgICAgICAgYXJyYXlfdmFyW2pqXSwgYXJyYXlfbGVuZ3RoWzBdW2pq XSk7CisJfQorICAgIH0KKworICAKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmFu azsgaWkrKykKKyAgICB7CisgICAgICBhZGRfc3RtdCAoaW5kX2luaXQgW2lp XSk7CisgICAgICBhZGRfc3RtdCAoYnVpbGQxIChMQUJFTF9FWFBSLCB2b2lk X3R5cGVfbm9kZSwgaWZfc3RtdF9sYWJlbFtpaV0pKTsKKyAgICAgIGFkZF9z dG10IChidWlsZDMgKENPTkRfRVhQUiwgdm9pZF90eXBlX25vZGUsIGNvbXBh cmVfZXhwcltpaV0sCisJCQlidWlsZDEgKEdPVE9fRVhQUiwgdm9pZF90eXBl X25vZGUsIGJvZHlfbGFiZWxbaWldKSwKKwkJCWJ1aWxkMSAoR09UT19FWFBS LCB2b2lkX3R5cGVfbm9kZSwgZXhpdF9sYWJlbFtpaV0pKSk7CisgICAgICBh ZGRfc3RtdCAoYm9keV9sYWJlbF9leHByW2lpXSk7CisgICAgfQorCisgIGlm IChjb2RlID09IFBPU1RJTkNSRU1FTlRfRVhQUiB8fCBjb2RlID09IFBPU1RE RUNSRU1FTlRfRVhQUikKKyAgICB7CisgICAgICBhcmcgPSBkZWZhdWx0X2Z1 bmN0aW9uX2FycmF5X3JlYWRfY29udmVyc2lvbiAobG9jYXRpb24sIGFyZyk7 CisgICAgICBhcmcudmFsdWUgPSBidWlsZF91bmFyeV9vcCAobG9jYXRpb24s IGNvZGUsIGFyZy52YWx1ZSwgMCk7CisgICAgfQorICBlbHNlIGlmIChjb2Rl ID09IFBSRUlOQ1JFTUVOVF9FWFBSIHx8IGNvZGUgPT0gUFJFREVDUkVNRU5U X0VYUFIpCisgICAgeworICAgICAgYXJnID0gZGVmYXVsdF9mdW5jdGlvbl9h cnJheV9yZWFkX2NvbnZlcnNpb24gKGxvY2F0aW9uLCBhcmcpOworICAgICAg YXJnID0gcGFyc2VyX2J1aWxkX3VuYXJ5X29wIChsb2NhdGlvbiwgY29kZSwg YXJnKTsKKyAgICB9CisKKyAgYWRkX3N0bXQgKGFyZy52YWx1ZSk7CisgIAor ICBmb3IgKGlpID0gcmFuayAtIDE7IGlpID49IDA7IGlpLS0pCisgICAgewor ICAgICAgYWRkX3N0bXQgKGV4cHJfaW5jcltpaV0pOworICAgICAgYWRkX3N0 bXQgKGJ1aWxkMSAoR09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwgaWZfc3Rt dF9sYWJlbFtpaV0pKTsKKyAgICAgIGFkZF9zdG10IChleGl0X2xhYmVsX2V4 cHJbaWldKTsKKyAgICB9CisKKyAgcG9wX3N0bXRfbGlzdCAobG9vcCk7CisK KyAgWERFTEVURVZFQyAoYm9keV9sYWJlbCk7CisgIFhERUxFVEVWRUMgKGJv ZHlfbGFiZWxfZXhwcik7CisgIFhERUxFVEVWRUMgKGV4aXRfbGFiZWwpOwor ICBYREVMRVRFVkVDIChleGl0X2xhYmVsX2V4cHIpOworICBYREVMRVRFVkVD IChjb21wYXJlX2V4cHIpOworICBYREVMRVRFVkVDIChpZl9zdG10X2xhYmVs KTsKKyAgWERFTEVURVZFQyAoZXhwcl9pbmNyKTsKKyAgWERFTEVURVZFQyAo aW5kX2luaXQpOworICBYREVMRVRFVkVDIChhcnJheV9vcGVyYW5kKTsKKyAg WERFTEVURVZFQyAoYXJyYXlfdmFyKTsKKyAgCisgIGZvciAoaWkgPSAwOyBp aSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7CisgICAgICBYREVMRVRFVkVD IChjb3VudF9kb3duW2lpXSk7CisgICAgICBYREVMRVRFVkVDIChhcnJheV92 YWx1ZVtpaV0pOworICAgICAgWERFTEVURVZFQyAoYXJyYXlfc3RyaWRlW2lp XSk7CisgICAgICBYREVMRVRFVkVDIChhcnJheV9sZW5ndGhbaWldKTsKKyAg ICAgIFhERUxFVEVWRUMgKGFycmF5X3N0YXJ0W2lpXSk7CisgICAgICBYREVM RVRFVkVDIChhcnJheV9vcHNbaWldKTsKKyAgICAgIFhERUxFVEVWRUMgKGFy cmF5X3ZlY3RvcltpaV0pOworICAgIH0KKworICBYREVMRVRFVkVDIChjb3Vu dF9kb3duKTsKKyAgWERFTEVURVZFQyAoYXJyYXlfdmFsdWUpOworICBYREVM RVRFVkVDIChhcnJheV9zdHJpZGUpOworICBYREVMRVRFVkVDIChhcnJheV9s ZW5ndGgpOworICBYREVMRVRFVkVDIChhcnJheV9zdGFydCk7CisgIFhERUxF VEVWRUMgKGFycmF5X29wcyk7CisgIFhERUxFVEVWRUMgKGFycmF5X3ZlY3Rv cik7CisKKyAgYXJnLnZhbHVlID0gbG9vcDsKKyAgcmV0dXJuIGFyZzsKK30K KworLyogUmVwbGFjZSBhcnJheSBub3RhdGlvbidzIGJ1aWx0LWluIGZ1bmN0 aW9uIHBhc3NlZCBpbiBBTl9CVUlMVElOX0ZOIHdpdGgKKyAgIHRoZSBhcHBy b3ByaWF0ZSBsb29wIGFuZCBjb21wdXRhdGlvbiAoYWxsIHN0b3JlZCBpbiB2 YXJpYWJsZSBMT09QIG9mIHR5cGUKKyAgIHRyZWUgbm9kZSkuICBUaGUgb3V0 cHV0IG9mIHRoZSBmdW5jdGlvbiBmdW5jdGlvbiBpcyBhbHdheXMgYSBzY2Fs YXIgYW5kIHRoYXQKKyAgIHJlc3VsdCBpcyByZXR1cm5lZCBpbiAqTkVXX1ZB Ui4gICpORVdfVkFSIGlzIE5VTExfVFJFRSBpZiB0aGUgZnVuY3Rpb24gaXMK KyAgIF9fc2VjX3JlZHVjZV9tdXRhdGluZy4gICovCisKK3N0YXRpYyB0cmVl CitmaXhfYnVpbHRpbl9hcnJheV9ub3RhdGlvbl9mbiAodHJlZSBhbl9idWls dGluX2ZuLCB0cmVlICpuZXdfdmFyKQoreworICB0cmVlIG5ld192YXJfdHlw ZSA9IE5VTExfVFJFRSwgZnVuY19wYXJtLCBuZXdfZXhwciwgbmV3X3llc19l eHByLCBuZXdfbm9fZXhwcjsKKyAgdHJlZSBhcnJheV9pbmRfdmFsdWUgPSBO VUxMX1RSRUUsIG5ld19ub19pbmQsIG5ld195ZXNfaW5kLCBuZXdfbm9fbGlz dDsKKyAgdHJlZSBuZXdfeWVzX2xpc3QsIG5ld19jb25kX2V4cHIsIG5ld192 YXJfaW5pdCA9IE5VTExfVFJFRTsKKyAgdHJlZSBuZXdfZXhwX2luaXQgPSBO VUxMX1RSRUU7CisgIGFuX3JlZHVjZV90eXBlIGFuX3R5cGUgPSBSRURVQ0Vf VU5LTk9XTjsKKyAgdHJlZSAqYXJyYXlfbGlzdCA9IE5VTEw7CisgIGludCBs aXN0X3NpemUgPSAwOworICBpbnQgcmFuayA9IDAsIGlpID0gMCwgamogPSAw OworICB0cmVlICoqYXJyYXlfb3BzLCAqYXJyYXlfdmFyLCAqYXJyYXlfb3Bl cmFuZCwgampfdHJlZSwgbG9vcDsKKyAgdHJlZSAqKmFycmF5X3ZhbHVlLCAq KmFycmF5X3N0cmlkZSwgKiphcnJheV9sZW5ndGgsICoqYXJyYXlfc3RhcnQ7 CisgIHRyZWUgKmJvZHlfbGFiZWwsICpib2R5X2xhYmVsX2V4cHIsICpleGl0 X2xhYmVsLCAqZXhpdF9sYWJlbF9leHByOworICB0cmVlICpjb21wYXJlX2V4 cHIsICppZl9zdG10X2xhYmVsLCAqZXhwcl9pbmNyLCAqaW5kX2luaXQ7Cisg IHRyZWUgaWRlbnRpdHlfdmFsdWUgPSBOVUxMX1RSRUUsIGNhbGxfZm4gPSBO VUxMX1RSRUUsIG5ld19jYWxsX2V4cHI7CisgIGJvb2wgKipjb3VudF9kb3du LCAqKmFycmF5X3ZlY3RvcjsKKyAgbG9jYXRpb25fdCBsb2NhdGlvbiA9IFVO S05PV05fTE9DQVRJT047CisgIAorICBpZiAoIWlzX2J1aWx0aW5fYXJyYXlf bm90YXRpb25fZm4gKENBTExfRVhQUl9GTiAoYW5fYnVpbHRpbl9mbiksICZh bl90eXBlKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisgIGlmIChhbl90 eXBlICE9IFJFRFVDRV9DVVNUT00gJiYgYW5fdHlwZSAhPSBSRURVQ0VfTVVU QVRJTkcpCisgICAgZnVuY19wYXJtID0gQ0FMTF9FWFBSX0FSRyAoYW5fYnVp bHRpbl9mbiwgMCk7CisgIGVsc2UKKyAgICB7CisgICAgICBjYWxsX2ZuID0g Q0FMTF9FWFBSX0FSRyAoYW5fYnVpbHRpbl9mbiwgMik7CisgICAgICB3aGls ZSAoVFJFRV9DT0RFIChjYWxsX2ZuKSA9PSBDT05WRVJUX0VYUFIKKwkgICAg IHx8IFRSRUVfQ09ERSAoY2FsbF9mbikgPT0gTk9QX0VYUFIpCisJY2FsbF9m biA9IFRSRUVfT1BFUkFORCAoY2FsbF9mbiwgMCk7CisgICAgICBjYWxsX2Zu ID0gVFJFRV9PUEVSQU5EIChjYWxsX2ZuLCAwKTsKKyAgICAgIAorICAgICAg aWRlbnRpdHlfdmFsdWUgPSBDQUxMX0VYUFJfQVJHIChhbl9idWlsdGluX2Zu LCAwKTsKKyAgICAgIHdoaWxlIChUUkVFX0NPREUgKGlkZW50aXR5X3ZhbHVl KSA9PSBDT05WRVJUX0VYUFIKKwkgICAgIHx8IFRSRUVfQ09ERSAoaWRlbnRp dHlfdmFsdWUpID09IE5PUF9FWFBSKQorCWlkZW50aXR5X3ZhbHVlID0gVFJF RV9PUEVSQU5EIChpZGVudGl0eV92YWx1ZSwgMCk7CisgICAgICBmdW5jX3Bh cm0gPSBDQUxMX0VYUFJfQVJHIChhbl9idWlsdGluX2ZuLCAxKTsKKyAgICB9 CisgIAorICB3aGlsZSAoVFJFRV9DT0RFIChmdW5jX3Bhcm0pID09IENPTlZF UlRfRVhQUgorCSB8fCBUUkVFX0NPREUgKGZ1bmNfcGFybSkgPT0gTk9QX0VY UFIpCisgICAgZnVuY19wYXJtID0gVFJFRV9PUEVSQU5EIChmdW5jX3Bhcm0s IDApOworICAKKyAgZmluZF9yYW5rIChhbl9idWlsdGluX2ZuLCB0cnVlLCAm cmFuayk7CisKKyAgbG9jYXRpb24gPSBFWFBSX0xPQ0FUSU9OIChhbl9idWls dGluX2ZuKTsKKyAKKyAgaWYgKHJhbmsgPT0gMCkKKyAgICByZXR1cm4gYW5f YnVpbHRpbl9mbjsKKyAgZWxzZSBpZiAocmFuayA+IDEgCisJICAgJiYgKGFu X3R5cGUgPT0gUkVEVUNFX01BWF9JTkRFWCAgfHwgYW5fdHlwZSA9PSBSRURV Q0VfTUlOX0lOREVYKSkKKyAgICB7CisgICAgICBlcnJvcl9hdCAobG9jYXRp b24sICJfX3NlY19yZWR1Y2VfbWluX2luZCBvciBfX3NlY19yZWR1Y2VfbWF4 X2luZCBjYW5ub3QiCisJCSIgaGF2ZSBhcnJheXMgd2l0aCBkaW1lbnNpb24g Z3JlYXRlciB0aGFuIDEuIik7CisgICAgICByZXR1cm4gZXJyb3JfbWFya19u b2RlOworICAgIH0KKyAgZXh0cmFjdF9hcnJheV9ub3RhdGlvbl9leHBycyAo ZnVuY19wYXJtLCB0cnVlLCAmYXJyYXlfbGlzdCwgJmxpc3Rfc2l6ZSk7Cisg IHN3aXRjaCAoYW5fdHlwZSkKKyAgICB7CisgICAgY2FzZSBSRURVQ0VfQURE OgorICAgIGNhc2UgUkVEVUNFX01VTDoKKyAgICBjYXNlIFJFRFVDRV9NQVg6 CisgICAgY2FzZSBSRURVQ0VfTUlOOgorICAgICAgbmV3X3Zhcl90eXBlID0g QVJSQVlfTk9UQVRJT05fVFlQRSAoYXJyYXlfbGlzdFswXSk7CisgICAgICBi cmVhazsKKyAgICBjYXNlIFJFRFVDRV9BTExfWkVST1M6CisgICAgY2FzZSBS RURVQ0VfQUxMX05PTlpFUk9TOgorICAgIGNhc2UgUkVEVUNFX0FOWV9aRVJP UzoKKyAgICBjYXNlIFJFRFVDRV9BTllfTk9OWkVST1M6CisgICAgICBuZXdf dmFyX3R5cGUgPSBpbnRlZ2VyX3R5cGVfbm9kZTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgUkVEVUNFX01BWF9JTkRFWDoKKyAgICBjYXNlIFJFRFVDRV9N SU5fSU5ERVg6CisgICAgICBuZXdfdmFyX3R5cGUgPSBpbnRlZ2VyX3R5cGVf bm9kZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUkVEVUNFX0NVU1RPTToK KyAgICAgIGlmIChjYWxsX2ZuICYmIGlkZW50aXR5X3ZhbHVlKSAKKwluZXdf dmFyX3R5cGUgPSBBUlJBWV9OT1RBVElPTl9UWVBFIChhcnJheV9saXN0WzBd KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUkVEVUNFX01VVEFUSU5HOgor ICAgICAgbmV3X3Zhcl90eXBlID0gTlVMTF9UUkVFOworICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsgIC8q IFlvdSBzaG91bGQgbm90IHJlYWNoIGhlcmUuICAqLworICAgIH0KKyAgCisg IGFycmF5X29wcyA9IFhORVdWRUMgKHRyZWUgKiwgbGlzdF9zaXplKTsKKyAg Zm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAgIGFycmF5 X29wc1tpaV0gPSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgCisgIGFycmF5 X3ZlY3RvciA9IFhORVdWRUMgKGJvb2wgKiwgbGlzdF9zaXplKTsKKyAgZm9y IChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAgIGFycmF5X3Zl Y3RvcltpaV0gPSBYTkVXVkVDIChib29sLCByYW5rKTsKKworICBhcnJheV92 YWx1ZSA9IFhORVdWRUMgKHRyZWUgKiwgbGlzdF9zaXplKTsKKyAgYXJyYXlf c3RyaWRlID0gWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUpOworICBhcnJh eV9sZW5ndGggPSBYTkVXVkVDICh0cmVlICosIGxpc3Rfc2l6ZSk7CisgIGFy cmF5X3N0YXJ0ID0gWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUpOworCisg IGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7Cisg ICAgICBhcnJheV92YWx1ZVtpaV0gID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7 CisgICAgICBhcnJheV9zdHJpZGVbaWldID0gWE5FV1ZFQyAodHJlZSwgcmFu ayk7CisgICAgICBhcnJheV9sZW5ndGhbaWldID0gWE5FV1ZFQyAodHJlZSwg cmFuayk7CisgICAgICBhcnJheV9zdGFydFtpaV0gID0gWE5FV1ZFQyAodHJl ZSwgcmFuayk7CisgICAgfQorCisgIGJvZHlfbGFiZWwgPSBYTkVXVkVDICh0 cmVlLCByYW5rKTsKKyAgYm9keV9sYWJlbF9leHByID0gWE5FV1ZFQyAodHJl ZSwgcmFuayk7CisgIGV4aXRfbGFiZWwgPSBYTkVXVkVDICh0cmVlLCByYW5r KTsKKyAgZXhpdF9sYWJlbF9leHByID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7 CisgIGNvbXBhcmVfZXhwciA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICBp Zl9zdG10X2xhYmVsID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7CisgIAorICBl eHByX2luY3IgPSBYTkVXVkVDICh0cmVlLCAgcmFuayk7CisgIGluZF9pbml0 ID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7CisgIAorICBjb3VudF9kb3duID0g WE5FV1ZFQyAoYm9vbCAqLCBsaXN0X3NpemUpOworICBmb3IgKGlpID0gMDsg aWkgPCBsaXN0X3NpemU7IGlpKyspCisgICAgY291bnRfZG93bltpaV0gPSBY TkVXVkVDIChib29sLCAgcmFuayk7CisKKyAgYXJyYXlfb3BlcmFuZCA9IFhO RVdWRUMgKHRyZWUsIGxpc3Rfc2l6ZSk7CisgIAorICBhcnJheV92YXIgPSBY TkVXVkVDICh0cmVlLCByYW5rKTsKKworICBmb3IgKGlpID0gMDsgaWkgPCBs aXN0X3NpemU7IGlpKyspCisgICAgeworICAgICAgamogPSAwOworICAgICAg Zm9yIChqal90cmVlID0gYXJyYXlfbGlzdFtpaV07CisJICAgampfdHJlZSAm JiBUUkVFX0NPREUgKGpqX3RyZWUpID09IEFSUkFZX05PVEFUSU9OX1JFRjsK KwkgICBqal90cmVlID0gQVJSQVlfTk9UQVRJT05fQVJSQVkgKGpqX3RyZWUp KQorCXsKKwkgIGFycmF5X29wc1tpaV1bampdID0gampfdHJlZTsKKwkgIGpq Kys7CisJfQorICAgIH0KKworICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0X3Np emU7IGlpKyspCisgICAgeworICAgICAgaWYgKFRSRUVfQ09ERSAoYXJyYXlf bGlzdFtpaV0pID09IEFSUkFZX05PVEFUSU9OX1JFRikKKwl7CisJICBmb3Ig KGpqID0gMDsgamogPCByYW5rOyBqaisrKQorCSAgICB7CisJICAgICAgaWYg KFRSRUVfQ09ERSAoYXJyYXlfb3BzW2lpXVtqal0pID09IEFSUkFZX05PVEFU SU9OX1JFRikKKwkJeworCQkgIGFycmF5X3ZhbHVlW2lpXVtqal0gPQorCQkg ICAgQVJSQVlfTk9UQVRJT05fQVJSQVkgKGFycmF5X29wc1tpaV1bampdKTsK KwkJICBhcnJheV9zdGFydFtpaV1bampdID0KKwkJICAgIEFSUkFZX05PVEFU SU9OX1NUQVJUIChhcnJheV9vcHNbaWldW2pqXSk7CisJCSAgYXJyYXlfbGVu Z3RoW2lpXVtqal0gPQorCQkgICAgQVJSQVlfTk9UQVRJT05fTEVOR1RIIChh cnJheV9vcHNbaWldW2pqXSk7CisJCSAgYXJyYXlfc3RyaWRlW2lpXVtqal0g PQorCQkgICAgQVJSQVlfTk9UQVRJT05fU1RSSURFIChhcnJheV9vcHNbaWld W2pqXSk7CisJCSAgYXJyYXlfdmVjdG9yW2lpXVtqal0gPSB0cnVlOworCisJ CSAgaWYgKCFUUkVFX0NPTlNUQU5UIChhcnJheV9sZW5ndGhbaWldW2pqXSkp CisJCSAgICBjb3VudF9kb3duW2lpXVtqal0gPSBmYWxzZTsKKwkJICBlbHNl IGlmICh0cmVlX2ludF9jc3RfbHQKKwkJCSAgIChhcnJheV9sZW5ndGhbaWld W2pqXSwKKwkJCSAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKGFycmF5 X2xlbmd0aFtpaV1bampdKSwKKwkJCQkJICAgMCkpKQorCQkgICAgY291bnRf ZG93bltpaV1bampdID0gdHJ1ZTsKKwkJICBlbHNlCisJCSAgICBjb3VudF9k b3duW2lpXVtqal0gPSBmYWxzZTsKKwkJfQorCSAgICAgIGVsc2UKKwkJYXJy YXlfdmVjdG9yW2lpXVtqal0gPSBmYWxzZTsKKwkgICAgfQorCX0KKyAgICB9 CisKKyAgbG9vcCA9IGFsbG9jX3N0bXRfbGlzdCAoKTsKKworICBmb3IgKGlp ID0gMDsgaWkgPCByYW5rOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5X3Zh cltpaV0gPSBidWlsZF9kZWNsIChsb2NhdGlvbiwgVkFSX0RFQ0wsIE5VTExf VFJFRSwKKwkJCQkgIGludGVnZXJfdHlwZV9ub2RlKTsKKyAgICAgIGluZF9p bml0W2lpXSA9CisJYnVpbGRfbW9kaWZ5X2V4cHIgKGxvY2F0aW9uLCBhcnJh eV92YXJbaWldLAorCQkJICAgVFJFRV9UWVBFIChhcnJheV92YXJbaWldKSwg Tk9QX0VYUFIsCisJCQkgICBsb2NhdGlvbiwKKwkJCSAgIGJ1aWxkX2ludF9j c3QgKFRSRUVfVFlQRSAoYXJyYXlfdmFyW2lpXSksIDApLAorCQkJICAgVFJF RV9UWVBFIChhcnJheV92YXJbaWldKSk7CQorICAgIH0KKworICBmb3IgKGlp ID0gMDsgaWkgPCByYW5rIDsgaWkrKykKKyAgICB7CisgICAgICAvKiBUaGlz IHdpbGwgY3JlYXRlIHRoZSBpZiBzdGF0ZW1lbnQgbGFiZWwuICAqLworICAg ICAgaWZfc3RtdF9sYWJlbFtpaV0gPSBidWlsZF9kZWNsIChsb2NhdGlvbiwg TEFCRUxfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAgICAgIHZvaWRfdHlwZV9u b2RlKTsKKyAgICAgIERFQ0xfQ09OVEVYVCAoaWZfc3RtdF9sYWJlbFtpaV0p ID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICAgICAgREVDTF9BUlRJRklD SUFMIChpZl9zdG10X2xhYmVsW2lpXSkgPSAwOworICAgICAgREVDTF9JR05P UkVEX1AgKGlmX3N0bXRfbGFiZWxbaWldKSA9IDE7CisgIAorICAgICAgLyog VGhpcyBsYWJlbCBzdGF0bWVudCB3aWxsIHBvaW50IHRvIHRoZSBsb29wIGJv ZHkuICAqLworICAgICAgYm9keV9sYWJlbFtpaV0gPSBidWlsZF9kZWNsIChs b2NhdGlvbiwgTEFCRUxfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAgIHZvaWRf dHlwZV9ub2RlKTsKKyAgICAgIERFQ0xfQ09OVEVYVCAoYm9keV9sYWJlbFtp aV0pID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICAgICAgREVDTF9BUlRJ RklDSUFMIChib2R5X2xhYmVsW2lpXSkgPSAwOworICAgICAgREVDTF9JR05P UkVEX1AgKGJvZHlfbGFiZWxbaWldKSA9IDE7CisgICAgICBib2R5X2xhYmVs X2V4cHJbaWldID0gYnVpbGQxIChMQUJFTF9FWFBSLCB2b2lkX3R5cGVfbm9k ZSwgYm9keV9sYWJlbFtpaV0pOworCisgICAgICAvKiBUaGlzIHdpbGwgY3Jl YXRlIHRoZSBleGl0IGxhYmVsLi5pLmUuIHdoZXJlIHRoZSB3aGlsZSBsb29w IHdpbGwgYnJhbmNoCisJIG91dCBvZi4gICovCisgICAgICBleGl0X2xhYmVs W2lpXSA9IGJ1aWxkX2RlY2wgKGxvY2F0aW9uLCBMQUJFTF9ERUNMLCBOVUxM X1RSRUUsCisJCQkJICAgdm9pZF90eXBlX25vZGUpOworICAgICAgREVDTF9D T05URVhUIChleGl0X2xhYmVsW2lpXSkgPSBjdXJyZW50X2Z1bmN0aW9uX2Rl Y2w7CisgICAgICBERUNMX0FSVElGSUNJQUwgKGV4aXRfbGFiZWxbaWldKSA9 IDA7CisgICAgICBERUNMX0lHTk9SRURfUCAoZXhpdF9sYWJlbFtpaV0pID0g MTsKKyAgICAgIGV4aXRfbGFiZWxfZXhwcltpaV0gPSBidWlsZDEgKExBQkVM X0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBleGl0X2xhYmVsW2lpXSk7CisgICAg fQorCisgIGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAg ICB7CisgICAgICBpZiAoYXJyYXlfdmVjdG9yW2lpXVswXSkKKwl7CisJICBh cnJheV9vcGVyYW5kW2lpXSA9IGFycmF5X3ZhbHVlW2lpXVtyYW5rIC0gMV07 CisJICBnY2NfYXNzZXJ0IChhcnJheV9vcGVyYW5kW2lpXSk7CisJICBmb3Ig KGpqID0gcmFuayAtIDE7IGpqID49IDA7IGpqLS0pCisJICAgIHsKKwkgICAg ICBpZiAoY291bnRfZG93bltpaV1bampdKQorCQl7CisJCSAgLyogQXJyYXlb c3RhcnRfaW5kZXggLSAoaW5kdWN0aW9uX3ZhciAqIHN0cmlkZSldICovCisJ CSAgYXJyYXlfb3BlcmFuZFtpaV0gPSBidWlsZF9hcnJheV9yZWYKKwkJICAg IChsb2NhdGlvbiwgYXJyYXlfb3BlcmFuZFtpaV0sCisJCSAgICAgYnVpbGQy IChNSU5VU19FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zhcltqal0pLAorCQkJ ICAgICBhcnJheV9zdGFydFtpaV1bampdLAorCQkJICAgICBidWlsZDIgKE1V TFRfRVhQUiwgVFJFRV9UWVBFIChhcnJheV92YXJbampdKSwKKwkJCQkgICAg IGFycmF5X3Zhcltqal0sIGFycmF5X3N0cmlkZVtpaV1bampdKSkpOworCQl9 CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogQXJyYXlbc3RhcnRfaW5kZXgg KyAoaW5kdWN0aW9uX3ZhciAqIHN0cmlkZSldICovCisJCSAgYXJyYXlfb3Bl cmFuZFtpaV0gPSBidWlsZF9hcnJheV9yZWYKKwkJICAgIChsb2NhdGlvbiwg YXJyYXlfb3BlcmFuZFtpaV0sCisJCSAgICAgYnVpbGQyIChQTFVTX0VYUFIs IFRSRUVfVFlQRSAoYXJyYXlfdmFyW2pqXSksCisJCQkgICAgIGFycmF5X3N0 YXJ0W2lpXVtqal0sCisJCQkgICAgIGJ1aWxkMiAoTVVMVF9FWFBSLCBUUkVF X1RZUEUgKGFycmF5X3Zhcltqal0pLAorCQkJCSAgICAgYXJyYXlfdmFyW2pq XSwgYXJyYXlfc3RyaWRlW2lpXVtqal0pKSk7CisJCX0KKwkgICAgfQorCX0K KyAgICB9CisgIHJlcGxhY2VfYXJyYXlfbm90YXRpb25zICgmZnVuY19wYXJt LCB0cnVlLCBhcnJheV9saXN0LCBhcnJheV9vcGVyYW5kLAorCQkJICAgbGlz dF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmFuazsgaWkrKykKKyAg ICB7CisgICAgICBleHByX2luY3JbaWldID0KKwlidWlsZDIgKE1PRElGWV9F WFBSLCB2b2lkX3R5cGVfbm9kZSwgYXJyYXlfdmFyW2lpXSwKKwkJYnVpbGQy IChQTFVTX0VYUFIsIFRSRUVfVFlQRSAoYXJyYXlfdmFyW2lpXSksIGFycmF5 X3ZhcltpaV0sCisJCQlidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKGFycmF5 X3ZhcltpaV0pLCAxKSkpOworICAgIH0KKyAgCisgIGZvciAoamogPSAwOyBq aiA8IHJhbms7IGpqKyspCisgICAgeworICAgICAgaWYgKHJhbmsgJiYgZXhw cl9pbmNyW2pqXSkKKwl7CisJICBpZiAoY291bnRfZG93blswXVtqal0pCisJ ICAgIGNvbXBhcmVfZXhwcltqal0gPQorCSAgICAgIGJ1aWxkMiAoTFRfRVhQ UiwgYm9vbGVhbl90eXBlX25vZGUsIGFycmF5X3Zhcltqal0sCisJCSAgICAg IGJ1aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zhcltqal0p LAorCQkJICAgICAgYXJyYXlfbGVuZ3RoWzBdW2pqXSwKKwkJCSAgICAgIGJ1 aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoYXJyYXlfdmFyW2pqXSksIC0xKSkp OworCSAgZWxzZQorCSAgICBjb21wYXJlX2V4cHJbampdID0gYnVpbGQyIChM VF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwKKwkJCQkgICAgICAgYXJyYXlf dmFyW2pqXSwgYXJyYXlfbGVuZ3RoWzBdW2pqXSk7CisJfQorICAgIH0KKwor ICBpZiAoYW5fdHlwZSAhPSBSRURVQ0VfTVVUQVRJTkcpCisgICAgeworICAg ICAgKm5ld192YXIgPSBidWlsZF9kZWNsIChsb2NhdGlvbiwgVkFSX0RFQ0ws IE5VTExfVFJFRSwgbmV3X3Zhcl90eXBlKTsKKyAgICAgIGdjY19hc3NlcnQg KCpuZXdfdmFyICYmICpuZXdfdmFyICE9IGVycm9yX21hcmtfbm9kZSk7Cisg ICAgfQorICBlbHNlCisgICAgKm5ld192YXIgPSBOVUxMX1RSRUU7CisgIAor ICBpZiAoYW5fdHlwZSA9PSBSRURVQ0VfTUFYX0lOREVYIHx8IGFuX3R5cGUg PT0gUkVEVUNFX01JTl9JTkRFWCkKKyAgICBhcnJheV9pbmRfdmFsdWUgPSBi dWlsZF9kZWNsIChsb2NhdGlvbiwgVkFSX0RFQ0wsIE5VTExfVFJFRSwgCisJ CQkJICBUUkVFX1RZUEUgKGZ1bmNfcGFybSkpOworCQkJICAgICAgCisgIHN3 aXRjaCAoYW5fdHlwZSkKKyAgICB7CisgICAgY2FzZSBSRURVQ0VfQUREOgor ICAgICAgbmV3X3Zhcl9pbml0ID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkobG9j YXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgTk9QX0VY UFIsCisJIGxvY2F0aW9uLCBidWlsZF96ZXJvX2NzdCAobmV3X3Zhcl90eXBl KSwgbmV3X3Zhcl90eXBlKTsKKyAgICAgIG5ld19leHByID0gYnVpbGRfbW9k aWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpu ZXdfdmFyKSwgUExVU19FWFBSLAorCSBsb2NhdGlvbiwgZnVuY19wYXJtLCBU UkVFX1RZUEUgKGZ1bmNfcGFybSkpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSBSRURVQ0VfTVVMOgorICAgICAgbmV3X3Zhcl9pbml0ID0gYnVpbGRfbW9k aWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpu ZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCBidWlsZF9vbmVfY3N0 IChuZXdfdmFyX3R5cGUpLCBuZXdfdmFyX3R5cGUpOworICAgICAgbmV3X2V4 cHIgPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwgKm5ld192YXIs IFRSRUVfVFlQRSAoKm5ld192YXIpLCBNVUxUX0VYUFIsCisJIGxvY2F0aW9u LCBmdW5jX3Bhcm0sIFRSRUVfVFlQRSAoZnVuY19wYXJtKSk7CisgICAgICBi cmVhazsKKyAgICBjYXNlIFJFRFVDRV9BTExfWkVST1M6CisgICAgICBuZXdf dmFyX2luaXQgPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwgKm5l d192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQUiwKKwkgbG9j YXRpb24sIGJ1aWxkX29uZV9jc3QgKG5ld192YXJfdHlwZSksIG5ld192YXJf dHlwZSk7CisgICAgICAvKiBJbml0aWFsbHkgeW91IGFzc3VtZSBldmVyeXRo aW5nIGlzIHplcm8sIG5vdyBpZiB3ZSBmaW5kIGEgY2FzZSB3aGVyZSAKKwkg aXQgaXMgTk9UIHRydWUsIHRoZW4gd2Ugc2V0IHRoZSByZXN1bHQgdG8gZmFs c2UuIE90aGVyd2lzZSAKKwkgd2UganVzdCBrZWVwIHRoZSBwcmV2aW91cyB2 YWx1ZS4gICovCisgICAgICBuZXdfeWVzX2V4cHIgPSBidWlsZF9tb2RpZnlf ZXhwcgorCShsb2NhdGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192 YXIpLCBOT1BfRVhQUiwKKwkgbG9jYXRpb24sIGJ1aWxkX3plcm9fY3N0IChU UkVFX1RZUEUgKCpuZXdfdmFyKSksCisJIFRSRUVfVFlQRSAoKm5ld192YXIp KTsKKyAgICAgIG5ld19ub19leHByID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwko bG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgTk9Q X0VYUFIsCisJIGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3 X3ZhcikpOworICAgICAgbmV3X2NvbmRfZXhwciA9IGJ1aWxkMiAoTkVfRVhQ UiwgVFJFRV9UWVBFIChmdW5jX3Bhcm0pLCBmdW5jX3Bhcm0sCisJCQkgICAg ICBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFIChmdW5jX3Bhcm0pKSk7Cisg ICAgICBuZXdfZXhwciA9IGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIKKwkobG9j YXRpb24sIG5ld19jb25kX2V4cHIsIGZhbHNlLCBuZXdfeWVzX2V4cHIsCisJ IFRSRUVfVFlQRSAobmV3X3llc19leHByKSwgbmV3X25vX2V4cHIsIFRSRUVf VFlQRSAobmV3X25vX2V4cHIpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug UkVEVUNFX0FMTF9OT05aRVJPUzoKKyAgICAgIG5ld192YXJfaW5pdCA9IGJ1 aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9U WVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlvbiwgYnVpbGRf b25lX2NzdCAobmV3X3Zhcl90eXBlKSwgbmV3X3Zhcl90eXBlKTsKKyAgICAg IC8qIEluaXRpYWxseSB5b3UgYXNzdW1lIGV2ZXJ5dGhpbmcgaXMgbm9uLXpl cm8sIG5vdyBpZiB3ZSBmaW5kIGEgY2FzZQorCSB3aGVyZSBpdCBpcyBOT1Qg dHJ1ZSwgdGhlbiB3ZSBzZXQgdGhlIHJlc3VsdCB0byBmYWxzZS4gIE90aGVy d2lzZQorCSB3ZSBqdXN0IGtlZXAgdGhlIHByZXZpb3VzIHZhbHVlLiAgKi8K KyAgICAgIG5ld195ZXNfZXhwciA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxv Y2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9F WFBSLAorCSBsb2NhdGlvbiwgYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAo Km5ld192YXIpKSwKKwkgVFJFRV9UWVBFICgqbmV3X3ZhcikpOworICAgICAg bmV3X25vX2V4cHIgPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwg Km5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQUiwKKwkg bG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSk7Cisg ICAgICBuZXdfY29uZF9leHByID0gYnVpbGQyIChFUV9FWFBSLCBUUkVFX1RZ UEUgKGZ1bmNfcGFybSksIGZ1bmNfcGFybSwKKwkJCSAgICAgIGJ1aWxkX3pl cm9fY3N0IChUUkVFX1RZUEUgKGZ1bmNfcGFybSkpKTsKKyAgICAgIG5ld19l eHByID0gYnVpbGRfY29uZGl0aW9uYWxfZXhwcgorCShsb2NhdGlvbiwgbmV3 X2NvbmRfZXhwciwgZmFsc2UsIG5ld195ZXNfZXhwciwKKwkgVFJFRV9UWVBF IChuZXdfeWVzX2V4cHIpLCBuZXdfbm9fZXhwciwgVFJFRV9UWVBFIChuZXdf bm9fZXhwcikpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBSRURVQ0VfQU5Z X1pFUk9TOgorICAgICAgbmV3X3Zhcl9pbml0ID0gYnVpbGRfbW9kaWZ5X2V4 cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFy KSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCBidWlsZF96ZXJvX2NzdCAobmV3 X3Zhcl90eXBlKSwgbmV3X3Zhcl90eXBlKTsKKyAgICAgIC8qIEluaXRpYWxs eSB3ZSBhc3N1bWUgdGhlcmUgYXJlIE5PIHplcm9zIGluIHRoZSBsaXN0LiBX aGVuIHdlIGZpbmQgCisJIGEgbm9uLXplcm8sIHdlIGtlZXAgdGhlIHByZXZp b3VzIHZhbHVlLiAgSWYgd2UgZmluZCBhIHplcm8sIHdlIAorCSBzZXQgdGhl IHZhbHVlIHRvIHRydWUuICAqLworICAgICAgbmV3X3llc19leHByID0gYnVp bGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZ UEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCBidWlsZF9v bmVfY3N0IChuZXdfdmFyX3R5cGUpLCBuZXdfdmFyX3R5cGUpOworICAgICAg bmV3X25vX2V4cHIgPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwg Km5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQUiwKKwkg bG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSk7Cisg ICAgICBuZXdfY29uZF9leHByID0gYnVpbGQyIChFUV9FWFBSLCBUUkVFX1RZ UEUgKGZ1bmNfcGFybSksIGZ1bmNfcGFybSwKKwkJCSAgICAgIGJ1aWxkX3pl cm9fY3N0IChUUkVFX1RZUEUgKGZ1bmNfcGFybSkpKTsKKyAgICAgIG5ld19l eHByID0gYnVpbGRfY29uZGl0aW9uYWxfZXhwcgorCShsb2NhdGlvbiwgbmV3 X2NvbmRfZXhwciwgZmFsc2UsIG5ld195ZXNfZXhwciwKKwkgVFJFRV9UWVBF IChuZXdfeWVzX2V4cHIpLCBuZXdfbm9fZXhwciwgVFJFRV9UWVBFIChuZXdf bm9fZXhwcikpOyAgIAorICAgICAgYnJlYWs7CisgICAgY2FzZSBSRURVQ0Vf QU5ZX05PTlpFUk9TOgorICAgICAgbmV3X3Zhcl9pbml0ID0gYnVpbGRfbW9k aWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpu ZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCBidWlsZF96ZXJvX2Nz dCAobmV3X3Zhcl90eXBlKSwgbmV3X3Zhcl90eXBlKTsKKyAgICAgIC8qIElu aXRpYWxseSB3ZSBhc3N1bWUgdGhlcmUgYXJlIE5PIG5vbi16ZXJvcyBpbiB0 aGUgbGlzdC4gV2hlbiB3ZSBmaW5kIAorCSBhIHplcm8sIHdlIGtlZXAgdGhl IHByZXZpb3VzIHZhbHVlLiAgSWYgd2UgZmluZCBhIG5vbi16ZXJvLCB3ZSBz ZXQgCisJIHRoZSB2YWx1ZSB0byB0cnVlLiAgKi8KKyAgICAgIG5ld195ZXNf ZXhwciA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3Zh ciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlv biwgYnVpbGRfb25lX2NzdCAobmV3X3Zhcl90eXBlKSwgbmV3X3Zhcl90eXBl KTsKKyAgICAgIG5ld19ub19leHByID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwko bG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgTk9Q X0VYUFIsCisJIGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3 X3ZhcikpOworICAgICAgbmV3X2NvbmRfZXhwciA9IGJ1aWxkMiAoTkVfRVhQ UiwgVFJFRV9UWVBFIChmdW5jX3Bhcm0pLCBmdW5jX3Bhcm0sCisJCQkgICAg ICBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFIChmdW5jX3Bhcm0pKSk7Cisg ICAgICBuZXdfZXhwciA9IGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIKKwkobG9j YXRpb24sIG5ld19jb25kX2V4cHIsIGZhbHNlLCBuZXdfeWVzX2V4cHIsCisJ IFRSRUVfVFlQRSAobmV3X3llc19leHByKSwgbmV3X25vX2V4cHIsIFRSRUVf VFlQRSAobmV3X25vX2V4cHIpKTsgICAKKyAgICAgIGJyZWFrOworICAgIGNh c2UgUkVEVUNFX01BWDoKKyAgICAgIG5ld192YXJfaW5pdCA9IGJ1aWxkX21v ZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgq bmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlvbiwgZnVuY19wYXJtLCBu ZXdfdmFyX3R5cGUpOworICAgICAgbmV3X25vX2V4cHIgPSBidWlsZF9tb2Rp ZnlfZXhwcgorCShsb2NhdGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5l d192YXIpLCBOT1BfRVhQUiwKKwkgbG9jYXRpb24sICpuZXdfdmFyLCBUUkVF X1RZUEUgKCpuZXdfdmFyKSk7CisgICAgICBuZXdfeWVzX2V4cHIgPSBidWls ZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwgKm5ld192YXIsIFRSRUVfVFlQ RSAoKm5ld192YXIpLCBOT1BfRVhQUiwKKwkgbG9jYXRpb24sIGZ1bmNfcGFy bSwgVFJFRV9UWVBFICgqbmV3X3ZhcikpOworICAgICAgbmV3X2V4cHIgPSBi dWlsZF9jb25kaXRpb25hbF9leHByCisJKGxvY2F0aW9uLAorCSBidWlsZDIg KExUX0VYUFIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCAqbmV3X3ZhciwgZnVu Y19wYXJtKSwgZmFsc2UsCisJIG5ld195ZXNfZXhwciwgVFJFRV9UWVBFICgq bmV3X3ZhciksIG5ld19ub19leHByLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSk7 CisgICAgICBicmVhazsKKyAgICBjYXNlIFJFRFVDRV9NSU46CisgICAgICBu ZXdfdmFyX2luaXQgPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwg Km5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQUiwKKwkg bG9jYXRpb24sIGZ1bmNfcGFybSwgbmV3X3Zhcl90eXBlKTsKKyAgICAgIG5l d19ub19leHByID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sICpu ZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxv Y2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhcikpOworICAg ICAgbmV3X3llc19leHByID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRp b24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIs CisJIGxvY2F0aW9uLCBmdW5jX3Bhcm0sIFRSRUVfVFlQRSAoKm5ld192YXIp KTsKKyAgICAgIG5ld19leHByID0gYnVpbGRfY29uZGl0aW9uYWxfZXhwcgor CShsb2NhdGlvbiwKKwkgYnVpbGQyIChHVF9FWFBSLCBUUkVFX1RZUEUgKCpu ZXdfdmFyKSwgKm5ld192YXIsIGZ1bmNfcGFybSksIGZhbHNlLAorCSBuZXdf eWVzX2V4cHIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBuZXdfbm9fZXhwciwg VFJFRV9UWVBFICgqbmV3X3ZhcikpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSBSRURVQ0VfTUFYX0lOREVYOgorICAgICAgbmV3X3Zhcl9pbml0ID0gYnVp bGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZ UEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCBidWlsZF96 ZXJvX2NzdCAobmV3X3Zhcl90eXBlKSwgbmV3X3Zhcl90eXBlKTsKKyAgICAg IG5ld19leHBfaW5pdCA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9u LCBhcnJheV9pbmRfdmFsdWUsIFRSRUVfVFlQRSAoYXJyYXlfaW5kX3ZhbHVl KSwKKwkgTk9QX0VYUFIsIGxvY2F0aW9uLCBmdW5jX3Bhcm0sIFRSRUVfVFlQ RSAoZnVuY19wYXJtKSk7CisgICAgICBuZXdfbm9faW5kID0gYnVpbGRfbW9k aWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpu ZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJF RV9UWVBFICgqbmV3X3ZhcikpOworICAgICAgbmV3X25vX2V4cHIgPSBidWls ZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwgYXJyYXlfaW5kX3ZhbHVlLCBU UkVFX1RZUEUgKGFycmF5X2luZF92YWx1ZSksCisJIE5PUF9FWFBSLAorCSBs b2NhdGlvbiwgYXJyYXlfaW5kX3ZhbHVlLCBUUkVFX1RZUEUgKGFycmF5X2lu ZF92YWx1ZSkpOworICAgICAgaWYgKGxpc3Rfc2l6ZSA+IDEpCisJeworCSAg bmV3X3llc19pbmQgPSBidWlsZF9tb2RpZnlfZXhwcgorCSAgICAobG9jYXRp b24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIs CisJICAgICBsb2NhdGlvbiwgYXJyYXlfdmFyWzBdLCBUUkVFX1RZUEUgKGFy cmF5X3ZhclswXSkpOworCSAgbmV3X3llc19leHByID0gYnVpbGRfbW9kaWZ5 X2V4cHIKKwkgICAgKGxvY2F0aW9uLCBhcnJheV9pbmRfdmFsdWUsIFRSRUVf VFlQRSAoYXJyYXlfaW5kX3ZhbHVlKSwKKwkgICAgIE5PUF9FWFBSLAorCSAg ICAgbG9jYXRpb24sIGZ1bmNfcGFybSwgVFJFRV9UWVBFIChhcnJheV9vcGVy YW5kWzBdKSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG5ld195ZXNfaW5k ID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkgICAgKGxvY2F0aW9uLCAqbmV3X3Zh ciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSAgICAgbG9j YXRpb24sIFRSRUVfT1BFUkFORCAoYXJyYXlfb3BlcmFuZFswXSwgMSksCisJ ICAgICBUUkVFX1RZUEUgKFRSRUVfT1BFUkFORCAoYXJyYXlfb3BlcmFuZFsw XSwgMSkpKTsKKwkgIG5ld195ZXNfZXhwciA9IGJ1aWxkX21vZGlmeV9leHBy CisJICAgIChsb2NhdGlvbiwgYXJyYXlfaW5kX3ZhbHVlLCBUUkVFX1RZUEUg KGFycmF5X2luZF92YWx1ZSksCisJICAgICBOT1BfRVhQUiwKKwkgICAgIGxv Y2F0aW9uLCBmdW5jX3Bhcm0sIFRSRUVfT1BFUkFORCAoYXJyYXlfb3BlcmFu ZFswXSwgMSkpOworCX0KKyAgICAgIG5ld195ZXNfbGlzdCA9IGFsbG9jX3N0 bXRfbGlzdCAoKTsKKyAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAo bmV3X3llc19pbmQsICZuZXdfeWVzX2xpc3QpOworICAgICAgYXBwZW5kX3Rv X3N0YXRlbWVudF9saXN0IChuZXdfeWVzX2V4cHIsICZuZXdfeWVzX2xpc3Qp OworCisgICAgICBuZXdfbm9fbGlzdCA9IGFsbG9jX3N0bXRfbGlzdCAoKTsK KyAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAobmV3X25vX2luZCwg Jm5ld19ub19saXN0KTsKKyAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlz dCAobmV3X25vX2V4cHIsICZuZXdfbm9fbGlzdCk7CisgCisgICAgICBuZXdf ZXhwciA9IGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIKKwkobG9jYXRpb24sCisJ IGJ1aWxkMiAoTFRfRVhQUiwgVFJFRV9UWVBFIChhcnJheV9pbmRfdmFsdWUp LCBhcnJheV9pbmRfdmFsdWUsCisJCSBmdW5jX3Bhcm0pLAorCSBmYWxzZSwK KwkgbmV3X3llc19saXN0LCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgbmV3X25v X2xpc3QsIFRSRUVfVFlQRSAoKm5ld192YXIpKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgUkVEVUNFX01JTl9JTkRFWDoKKyAgICAgIG5ld192YXJfaW5p dCA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3Zhciwg VFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlvbiwg YnVpbGRfemVyb19jc3QgKG5ld192YXJfdHlwZSksIG5ld192YXJfdHlwZSk7 CisgICAgICBuZXdfZXhwX2luaXQgPSBidWlsZF9tb2RpZnlfZXhwcgorCShs b2NhdGlvbiwgYXJyYXlfaW5kX3ZhbHVlLCBUUkVFX1RZUEUgKGFycmF5X2lu ZF92YWx1ZSksCisJIE5PUF9FWFBSLCBsb2NhdGlvbiwgZnVuY19wYXJtLCBU UkVFX1RZUEUgKGZ1bmNfcGFybSkpOworICAgICAgbmV3X25vX2luZCA9IGJ1 aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9U WVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlvbiwgKm5ld192 YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpKTsKKyAgICAgIG5ld19ub19leHBy ID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sIGFycmF5X2luZF92 YWx1ZSwgVFJFRV9UWVBFIChhcnJheV9pbmRfdmFsdWUpLAorCSBOT1BfRVhQ UiwKKwkgbG9jYXRpb24sIGFycmF5X2luZF92YWx1ZSwgVFJFRV9UWVBFIChh cnJheV9pbmRfdmFsdWUpKTsKKyAgICAgIGlmIChsaXN0X3NpemUgPiAxKQor CXsKKwkgIG5ld195ZXNfaW5kID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkgICAg KGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5P UF9FWFBSLAorCSAgICAgbG9jYXRpb24sIGFycmF5X3ZhclswXSwgVFJFRV9U WVBFIChhcnJheV92YXJbMF0pKTsKKwkgIG5ld195ZXNfZXhwciA9IGJ1aWxk X21vZGlmeV9leHByCisJICAgIChsb2NhdGlvbiwgYXJyYXlfaW5kX3ZhbHVl LCBUUkVFX1RZUEUgKGFycmF5X2luZF92YWx1ZSksCisJICAgICBOT1BfRVhQ UiwKKwkgICAgIGxvY2F0aW9uLCBmdW5jX3Bhcm0sIFRSRUVfVFlQRSAoYXJy YXlfb3BlcmFuZFswXSkpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBuZXdf eWVzX2luZCA9IGJ1aWxkX21vZGlmeV9leHByCisJICAgIChsb2NhdGlvbiwg Km5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQUiwKKwkg ICAgIGxvY2F0aW9uLCBUUkVFX09QRVJBTkQgKGFycmF5X29wZXJhbmRbMF0s IDEpLAorCSAgICAgVFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKGFycmF5X29w ZXJhbmRbMF0sIDEpKSk7CisJICBuZXdfeWVzX2V4cHIgPSBidWlsZF9tb2Rp ZnlfZXhwcgorCSAgICAobG9jYXRpb24sIGFycmF5X2luZF92YWx1ZSwgVFJF RV9UWVBFIChhcnJheV9pbmRfdmFsdWUpLAorCSAgICAgTk9QX0VYUFIsCisJ ICAgICBsb2NhdGlvbiwgZnVuY19wYXJtLCBUUkVFX09QRVJBTkQgKGFycmF5 X29wZXJhbmRbMF0sIDEpKTsKKwl9CisgICAgICBuZXdfeWVzX2xpc3QgPSBh bGxvY19zdG10X2xpc3QgKCk7CisgICAgICBhcHBlbmRfdG9fc3RhdGVtZW50 X2xpc3QgKG5ld195ZXNfaW5kLCAmbmV3X3llc19saXN0KTsKKyAgICAgIGFw cGVuZF90b19zdGF0ZW1lbnRfbGlzdCAobmV3X3llc19leHByLCAmbmV3X3ll c19saXN0KTsKKworICAgICAgbmV3X25vX2xpc3QgPSBhbGxvY19zdG10X2xp c3QgKCk7CisgICAgICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKG5ld19u b19pbmQsICZuZXdfbm9fbGlzdCk7CisgICAgICBhcHBlbmRfdG9fc3RhdGVt ZW50X2xpc3QgKG5ld19ub19leHByLCAmbmV3X25vX2xpc3QpOworIAorICAg ICAgbmV3X2V4cHIgPSBidWlsZF9jb25kaXRpb25hbF9leHByCisJKGxvY2F0 aW9uLAorCSBidWlsZDIgKEdUX0VYUFIsIFRSRUVfVFlQRSAoYXJyYXlfaW5k X3ZhbHVlKSwgYXJyYXlfaW5kX3ZhbHVlLAorCQkgZnVuY19wYXJtKSwKKwkg ZmFsc2UsCisJIG5ld195ZXNfbGlzdCwgVFJFRV9UWVBFICgqbmV3X3Zhciks IG5ld19ub19saXN0LCBUUkVFX1RZUEUgKCpuZXdfdmFyKSk7CisgICAgICBi cmVhazsKKyAgICBjYXNlIFJFRFVDRV9DVVNUT006CisgICAgICBuZXdfdmFy X2luaXQgPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwgKm5ld192 YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQUiwKKwkgbG9jYXRp b24sIGlkZW50aXR5X3ZhbHVlLCBuZXdfdmFyX3R5cGUpOworICAgICAgbmV3 X2NhbGxfZXhwciA9IGJ1aWxkX2NhbGxfZXhwciAoY2FsbF9mbiwgMiwgKm5l d192YXIsIGZ1bmNfcGFybSk7CisgICAgICBuZXdfZXhwciA9IGJ1aWxkX21v ZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgq bmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlvbiwgbmV3X2NhbGxfZXhw ciwgVFJFRV9UWVBFICgqbmV3X3ZhcikpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSBSRURVQ0VfTVVUQVRJTkc6CisgICAgICBuZXdfZXhwciA9IGJ1aWxk X2NhbGxfZXhwciAoY2FsbF9mbiwgMiwgaWRlbnRpdHlfdmFsdWUsIGZ1bmNf cGFybSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZ2Nj X3VucmVhY2hhYmxlICgpOworICAgICAgYnJlYWs7CisgICAgfQorCisgIGZv ciAoaWkgPSAwOyBpaSA8IHJhbms7IGlpKyspCisgICAgYXBwZW5kX3RvX3N0 YXRlbWVudF9saXN0IChpbmRfaW5pdCBbaWldLCAmbG9vcCk7CisKKyAgaWYg KGFuX3R5cGUgPT0gUkVEVUNFX01BWF9JTkRFWCB8fCBhbl90eXBlID09IFJF RFVDRV9NSU5fSU5ERVgpCisgICAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0 IChuZXdfZXhwX2luaXQsICZsb29wKTsKKyAgaWYgKGFuX3R5cGUgIT0gUkVE VUNFX01VVEFUSU5HKQorICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAo bmV3X3Zhcl9pbml0LCAmbG9vcCk7CisgIAorICBmb3IgKGlpID0gMDsgaWkg PCByYW5rOyBpaSsrKQorICAgIHsKKyAgICAgIGFwcGVuZF90b19zdGF0ZW1l bnRfbGlzdAorCShidWlsZDEgKExBQkVMX0VYUFIsIHZvaWRfdHlwZV9ub2Rl LCBpZl9zdG10X2xhYmVsW2lpXSksICZsb29wKTsKKyAgICAgIGFwcGVuZF90 b19zdGF0ZW1lbnRfbGlzdAorCShidWlsZDMgKENPTkRfRVhQUiwgdm9pZF90 eXBlX25vZGUsIGNvbXBhcmVfZXhwcltpaV0sCisJCSBidWlsZDEgKEdPVE9f RVhQUiwgdm9pZF90eXBlX25vZGUsIGJvZHlfbGFiZWxbaWldKSwKKwkJIGJ1 aWxkMSAoR09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwgZXhpdF9sYWJlbFtp aV0pKSwgJmxvb3ApOworICAgICAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0 IChib2R5X2xhYmVsX2V4cHJbaWldLCAmbG9vcCk7CisgICAgfQorCQkJCQkg ICAKKyAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0IChuZXdfZXhwciwgJmxv b3ApOworICAKKyAgZm9yIChpaSA9IHJhbmsgLSAxOyBpaSA+PSAwOyBpaS0t KQorICAgIHsKKyAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAoZXhw cl9pbmNyW2lpXSwgJmxvb3ApOworICAgICAgYXBwZW5kX3RvX3N0YXRlbWVu dF9saXN0CisJKGJ1aWxkMSAoR09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwg aWZfc3RtdF9sYWJlbFtpaV0pLCAmbG9vcCk7CisgICAgICBhcHBlbmRfdG9f c3RhdGVtZW50X2xpc3QgKGV4aXRfbGFiZWxfZXhwcltpaV0sICZsb29wKTsK KyAgICB9CisKKyAgWERFTEVURVZFQyAoYm9keV9sYWJlbCk7CisgIFhERUxF VEVWRUMgKGJvZHlfbGFiZWxfZXhwcik7CisgIFhERUxFVEVWRUMgKGV4aXRf bGFiZWwpOworICBYREVMRVRFVkVDIChleGl0X2xhYmVsX2V4cHIpOworICBY REVMRVRFVkVDIChjb21wYXJlX2V4cHIpOworICBYREVMRVRFVkVDIChpZl9z dG10X2xhYmVsKTsKKyAgWERFTEVURVZFQyAoZXhwcl9pbmNyKTsKKyAgWERF TEVURVZFQyAoaW5kX2luaXQpOworICBYREVMRVRFVkVDIChhcnJheV9vcGVy YW5kKTsKKyAgWERFTEVURVZFQyAoYXJyYXlfdmFyKTsKKyAgCisgIGZvciAo aWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7CisgICAgICBY REVMRVRFVkVDIChjb3VudF9kb3duW2lpXSk7CisgICAgICBYREVMRVRFVkVD IChhcnJheV92YWx1ZVtpaV0pOworICAgICAgWERFTEVURVZFQyAoYXJyYXlf c3RyaWRlW2lpXSk7CisgICAgICBYREVMRVRFVkVDIChhcnJheV9sZW5ndGhb aWldKTsKKyAgICAgIFhERUxFVEVWRUMgKGFycmF5X3N0YXJ0W2lpXSk7Cisg ICAgICBYREVMRVRFVkVDIChhcnJheV9vcHNbaWldKTsKKyAgICAgIFhERUxF VEVWRUMgKGFycmF5X3ZlY3RvcltpaV0pOworICAgIH0KKworICBYREVMRVRF VkVDIChjb3VudF9kb3duKTsKKyAgWERFTEVURVZFQyAoYXJyYXlfdmFsdWUp OworICBYREVMRVRFVkVDIChhcnJheV9zdHJpZGUpOworICBYREVMRVRFVkVD IChhcnJheV9sZW5ndGgpOworICBYREVMRVRFVkVDIChhcnJheV9zdGFydCk7 CisgIFhERUxFVEVWRUMgKGFycmF5X29wcyk7CisgIFhERUxFVEVWRUMgKGFy cmF5X3ZlY3Rvcik7CisgIAorICByZXR1cm4gbG9vcDsKK30KKworLyogUmV0 dXJucyB0cnVlIG9mIEZVTkNfTkFNRSBpcyBhIGJ1aWx0aW4gYXJyYXkgbm90 YXRpb24gZnVuY3Rpb24uICBUaGUgdHlwZSBvZgorICAgZnVuY3Rpb24gaXMg cmV0dXJuZWQgaW4gKlRZUEUuICAqLworCitzdGF0aWMgYm9vbAoraXNfYnVp bHRpbl9hcnJheV9ub3RhdGlvbl9mbiAodHJlZSBmdW5jX25hbWUsIGFuX3Jl ZHVjZV90eXBlICp0eXBlKQoreworICBjb25zdCBjaGFyICpmdW5jdGlvbl9u YW1lID0gTlVMTDsKKworICBpZiAoIWZ1bmNfbmFtZSkKKyAgICByZXR1cm4g ZmFsc2U7CisKKyAgaWYgKFRSRUVfQ09ERSAoZnVuY19uYW1lKSA9PSBJREVO VElGSUVSX05PREUpCisgICAgZnVuY3Rpb25fbmFtZSA9IElERU5USUZJRVJf UE9JTlRFUiAoZnVuY19uYW1lKTsKKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChm dW5jX25hbWUpID09IEFERFJfRVhQUikKKyAgICB7CisgICAgICBmdW5jX25h bWUgPSBUUkVFX09QRVJBTkQgKGZ1bmNfbmFtZSwgMCk7CisgICAgICBpZiAo VFJFRV9DT0RFIChmdW5jX25hbWUpID09IEZVTkNUSU9OX0RFQ0wpCisJZnVu Y3Rpb25fbmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FIChm dW5jX25hbWUpKTsKKyAgICB9CisgIAorICBpZiAoIWZ1bmN0aW9uX25hbWUp CisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmICghc3RyY21wIChmdW5jdGlv bl9uYW1lLCAiX19zZWNfcmVkdWNlX2FkZCIpKQorICAgIHsKKyAgICAgICp0 eXBlID0gUkVEVUNFX0FERDsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K KyAgZWxzZSBpZiAoIXN0cmNtcCAoZnVuY3Rpb25fbmFtZSwgIl9fc2VjX3Jl ZHVjZV9tdWwiKSkKKyAgICB7CisgICAgICAqdHlwZSA9IFJFRFVDRV9NVUw7 CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJj bXAgKGZ1bmN0aW9uX25hbWUsICJfX3NlY19yZWR1Y2VfYWxsX3plcm8iKSkK KyAgICB7CisgICAgICAqdHlwZSA9IFJFRFVDRV9BTExfWkVST1M7CisgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKGZ1 bmN0aW9uX25hbWUsICJfX3NlY19yZWR1Y2VfYWxsX25vbnplcm8iKSkKKyAg ICB7CisgICAgICAqdHlwZSA9IFJFRFVDRV9BTExfTk9OWkVST1M7CisgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKGZ1 bmN0aW9uX25hbWUsICJfX3NlY19yZWR1Y2VfYW55X3plcm8iKSkKKyAgICB7 CisgICAgICAqdHlwZSA9IFJFRFVDRV9BTllfWkVST1M7CisgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKGZ1bmN0aW9u X25hbWUsICJfX3NlY19yZWR1Y2VfYW55X25vbnplcm8iKSkKKyAgICB7Cisg ICAgICAqdHlwZSA9IFJFRFVDRV9BTllfTk9OWkVST1M7CisgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKGZ1bmN0aW9u X25hbWUsICJfX3NlY19yZWR1Y2VfbWF4IikpCisgICAgeworICAgICAgKnR5 cGUgPSBSRURVQ0VfTUFYOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor ICBlbHNlIGlmICghc3RyY21wIChmdW5jdGlvbl9uYW1lLCAiX19zZWNfcmVk dWNlX21pbiIpKQorICAgIHsKKyAgICAgICp0eXBlID0gUkVEVUNFX01JTjsK KyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgZWxzZSBpZiAoIXN0cmNt cCAoZnVuY3Rpb25fbmFtZSwgIl9fc2VjX3JlZHVjZV9taW5faW5kIikpCisg ICAgeworICAgICAgKnR5cGUgPSBSRURVQ0VfTUlOX0lOREVYOworICAgICAg cmV0dXJuIHRydWU7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wIChmdW5j dGlvbl9uYW1lLCAiX19zZWNfcmVkdWNlX21heF9pbmQiKSkKKyAgICB7Cisg ICAgICAqdHlwZSA9IFJFRFVDRV9NQVhfSU5ERVg7CisgICAgICByZXR1cm4g dHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKGZ1bmN0aW9uX25h bWUsICJfX3NlY19yZWR1Y2UiKSkKKyAgICB7CisgICAgICAqdHlwZSA9IFJF RFVDRV9DVVNUT007CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIGVs c2UgaWYgKCFzdHJjbXAgKGZ1bmN0aW9uX25hbWUsICJfX3NlY19yZWR1Y2Vf bXV0YXRpbmciKSkKKyAgICB7CisgICAgICAqdHlwZSA9IFJFRFVDRV9NVVRB VElORzsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgICp0eXBlID0gUkVEVUNFX1VOS05PV047CisgICAgICByZXR1 cm4gZmFsc2U7CisgICAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKworLyog UmV0dXJucyB0cnVlIG9mIEVYUFIgKGFuZCBpdHMgc3VidHJlZXMpIGNvbnRh aW4gQVJSQVlfTk9UQVRJT05fRVhQUiBub2RlLiAgKi8KKworYm9vbAorY29u dGFpbnNfYXJyYXlfbm90YXRpb25fZXhwciAodHJlZSBleHByKQoreworICB0 cmVlICphcnJheV9saXN0ID0gTlVMTDsKKyAgaW50IGxpc3Rfc2l6ZSA9IDA7 CisgIGFuX3JlZHVjZV90eXBlIHR5cGUgPSBSRURVQ0VfVU5LTk9XTjsKKwor ICBpZiAoIWV4cHIpCisgICAgcmV0dXJuIGZhbHNlOworICBpZiAoVFJFRV9D T0RFIChleHByKSA9PSBGVU5DVElPTl9ERUNMKQorICAgIGlmIChpc19idWls dGluX2FycmF5X25vdGF0aW9uX2ZuIChERUNMX05BTUUgKGV4cHIpLCAmdHlw ZSkpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgCisgIGV4dHJhY3RfYXJyYXlf bm90YXRpb25fZXhwcnMgKGV4cHIsIGZhbHNlLCAmYXJyYXlfbGlzdCwgJmxp c3Rfc2l6ZSk7CisgIGlmIChhcnJheV9saXN0ID09IE5VTEwgfHwgbGlzdF9z aXplID09IDApCisgICAgcmV0dXJuIGZhbHNlOworICBlbHNlCisgICAgcmV0 dXJuIHRydWU7Cit9CisKKworLyogUmVwbGFjZXMgYXJyYXkgbm90YXRpb25z IGluIHZvaWQgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMgaW4gQVJHIHdpdGgg bG9vcCBhbmQKKyAgIHRyZWUtbm9kZSBBUlJBWV9SRUYgYW5kIHJldHVybnMg dGhhdCB2YWx1ZSBpbiBhIHRyZWUgbm9kZSB2YXJpYWJsZSBjYWxsZWQKKyAg IExPT1AuICAqLworCitzdGF0aWMgdHJlZQorZml4X2FycmF5X25vdGF0aW9u X2NhbGxfZXhwciAodHJlZSBhcmcpCit7CisgIHRyZWUgKmFycmF5X2xpc3Qg PSBOVUxMLCBuZXdfdmFyID0gTlVMTF9UUkVFOworICBpbnQgbGlzdF9zaXpl ID0gMDsKKyAgaW50IHJhbmsgPSAwLCBpaSA9IDAsIGpqID0gMDsKKyAgdHJl ZSAqKmFycmF5X29wcywgKmFycmF5X3ZhciwgKmFycmF5X29wZXJhbmQsIGpq X3RyZWUsIGxvb3A7CisgIHRyZWUgKiphcnJheV92YWx1ZSwgKiphcnJheV9z dHJpZGUsICoqYXJyYXlfbGVuZ3RoLCAqKmFycmF5X3N0YXJ0OworICB0cmVl ICpib2R5X2xhYmVsLCAqYm9keV9sYWJlbF9leHByLCAqZXhpdF9sYWJlbCwg KmV4aXRfbGFiZWxfZXhwcjsKKyAgdHJlZSAqY29tcGFyZV9leHByLCAqaWZf c3RtdF9sYWJlbCwgKmV4cHJfaW5jciwgKmluZF9pbml0OworICBib29sICoq Y291bnRfZG93biwgKiphcnJheV92ZWN0b3I7CisgIGFuX3JlZHVjZV90eXBl IGFuX3R5cGUgPSBSRURVQ0VfVU5LTk9XTjsKKyAgbG9jYXRpb25fdCBsb2Nh dGlvbiA9IFVOS05PV05fTE9DQVRJT047CisKKyAgaWYgKGlzX2J1aWx0aW5f YXJyYXlfbm90YXRpb25fZm4gKENBTExfRVhQUl9GTiAoYXJnKSwgJmFuX3R5 cGUpKQorICAgIHsKKyAgICAgIGxvb3AgPSBmaXhfYnVpbHRpbl9hcnJheV9u b3RhdGlvbl9mbiAoYXJnLCAmbmV3X3Zhcik7CisgICAgICAvKiBXZSBhcmUg aWdub3JpbmcgdGhlIG5ldyB2YXIgYmVjYXVzZSBlaXRoZXIgdGhlIHVzZXIg ZG9lcyBub3Qgd2FudCB0bworCSBjYXB0dXJlIGl0IE9SIGhlIGlzIHVzaW5n IHNlY19yZWR1Y2VfbXV0YXRpbmcgZnVuY3Rpb24uICAqLworICAgICAgcmV0 dXJuIGxvb3A7CisgICAgfQorICAKKyAgZmluZF9yYW5rIChhcmcsIGZhbHNl LCAmcmFuayk7CisgIGlmIChyYW5rID09IDApCisgICAgcmV0dXJuIGFyZzsK KyAgCisgIGV4dHJhY3RfYXJyYXlfbm90YXRpb25fZXhwcnMgKGFyZywgdHJ1 ZSwgJmFycmF5X2xpc3QsICZsaXN0X3NpemUpOworCisgIGlmIChsaXN0X3Np emUgPT0gMCB8fCAqYXJyYXlfbGlzdCA9PSBOVUxMX1RSRUUpCisgICAgcmV0 dXJuIGFyZzsKKworICBsb2NhdGlvbiA9IEVYUFJfTE9DQVRJT04gKGFyZyk7 CisKKyAgYXJyYXlfb3BzID0gWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUp OworICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0X3NpemU7IGlpKyspCisgICAg YXJyYXlfb3BzW2lpXSA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAKKyAg YXJyYXlfdmVjdG9yID0gWE5FV1ZFQyAoYm9vbCAqLCBsaXN0X3NpemUpOwor ICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0X3NpemU7IGlpKyspCisgICAgYXJy YXlfdmVjdG9yW2lpXSA9IChib29sICopIFhORVdWRUMgKGJvb2wsIHJhbmsp OworCisgIGFycmF5X3ZhbHVlID0gWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3Np emUpOworICBhcnJheV9zdHJpZGUgPSBYTkVXVkVDICh0cmVlICosIGxpc3Rf c2l6ZSk7CisgIGFycmF5X2xlbmd0aCA9IFhORVdWRUMgKHRyZWUgKiwgbGlz dF9zaXplKTsKKyAgYXJyYXlfc3RhcnQgPSBYTkVXVkVDICh0cmVlICosIGxp c3Rfc2l6ZSk7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBp aSsrKQorICAgIHsKKyAgICAgIGFycmF5X3ZhbHVlW2lpXSAgPSBYTkVXVkVD ICh0cmVlLCByYW5rKTsKKyAgICAgIGFycmF5X3N0cmlkZVtpaV0gPSBYTkVX VkVDICh0cmVlLCByYW5rKTsKKyAgICAgIGFycmF5X2xlbmd0aFtpaV0gPSBY TkVXVkVDICh0cmVlLCByYW5rKTsKKyAgICAgIGFycmF5X3N0YXJ0W2lpXSAg PSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgICB9CisKKyAgYm9keV9sYWJl bCA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICBib2R5X2xhYmVsX2V4cHIg PSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgZXhpdF9sYWJlbCA9IFhORVdW RUMgKHRyZWUsIHJhbmspOworICBleGl0X2xhYmVsX2V4cHIgPSBYTkVXVkVD ICh0cmVlLCByYW5rKTsKKyAgY29tcGFyZV9leHByID0gWE5FV1ZFQyAodHJl ZSwgcmFuayk7CisgIGlmX3N0bXRfbGFiZWwgPSBYTkVXVkVDICh0cmVlLCBy YW5rKTsKKyAgCisgIGV4cHJfaW5jciA9IFhORVdWRUMgKHRyZWUsIHJhbmsp OworICBpbmRfaW5pdCA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAKKyAg Y291bnRfZG93biA9ICBYTkVXVkVDIChib29sICosIGxpc3Rfc2l6ZSk7Cisg IGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICBjb3Vu dF9kb3duW2lpXSA9IFhORVdWRUMgKGJvb2wsIHJhbmspOworCisgIGFycmF5 X29wZXJhbmQgPSBYTkVXVkVDICh0cmVlLCBsaXN0X3NpemUpOworICAKKyAg YXJyYXlfdmFyID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7CisKKyAgZm9yIChp aSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAgIHsKKyAgICAgIGpq ID0gMDsKKyAgICAgIGZvciAoampfdHJlZSA9IGFycmF5X2xpc3RbaWldOwor CSAgIGpqX3RyZWUgJiYgVFJFRV9DT0RFIChqal90cmVlKSA9PSBBUlJBWV9O T1RBVElPTl9SRUY7CisJICAgampfdHJlZSA9IEFSUkFZX05PVEFUSU9OX0FS UkFZIChqal90cmVlKSkKKwl7CisJICBhcnJheV9vcHNbaWldW2pqXSA9IGpq X3RyZWU7CisJICBqaisrOworCX0KKyAgICB9CisKKyAgZm9yIChpaSA9IDA7 IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAgIHsKKyAgICAgIGlmIChUUkVF X0NPREUgKGFycmF5X2xpc3RbaWldKSA9PSBBUlJBWV9OT1RBVElPTl9SRUYp CisJeworCSAgZm9yIChqaiA9IDA7IGpqIDwgcmFuazsgamorKykKKwkgICAg eworCSAgICAgIGlmIChUUkVFX0NPREUgKGFycmF5X29wc1tpaV1bampdKSA9 PSBBUlJBWV9OT1RBVElPTl9SRUYpCisJCXsKKwkJICBhcnJheV92YWx1ZVtp aV1bampdID0KKwkJICAgIEFSUkFZX05PVEFUSU9OX0FSUkFZIChhcnJheV9v cHNbaWldW2pqXSk7CisJCSAgYXJyYXlfc3RhcnRbaWldW2pqXSA9CisJCSAg ICBBUlJBWV9OT1RBVElPTl9TVEFSVCAoYXJyYXlfb3BzW2lpXVtqal0pOwor CQkgIGFycmF5X2xlbmd0aFtpaV1bampdID0KKwkJICAgIEFSUkFZX05PVEFU SU9OX0xFTkdUSCAoYXJyYXlfb3BzW2lpXVtqal0pOworCQkgIGFycmF5X3N0 cmlkZVtpaV1bampdID0KKwkJICAgIEFSUkFZX05PVEFUSU9OX1NUUklERSAo YXJyYXlfb3BzW2lpXVtqal0pOworCQkgIGFycmF5X3ZlY3RvcltpaV1bampd ID0gdHJ1ZTsKKworCQkgIGlmICghVFJFRV9DT05TVEFOVCAoYXJyYXlfbGVu Z3RoW2lpXVtqal0pKSAKKwkJICAgIGNvdW50X2Rvd25baWldW2pqXSA9IGZh bHNlOworCQkgIGVsc2UgaWYgKHRyZWVfaW50X2NzdF9sdAorCQkJICAgKGFy cmF5X2xlbmd0aFtpaV1bampdLAorCQkJICAgIGJ1aWxkX2ludF9jc3QgKFRS RUVfVFlQRSAoYXJyYXlfbGVuZ3RoW2lpXVtqal0pLAorCQkJCQkgICAwKSkp CisJCSAgICBjb3VudF9kb3duW2lpXVtqal0gPSB0cnVlOworCQkgIGVsc2UK KwkJICAgIGNvdW50X2Rvd25baWldW2pqXSA9IGZhbHNlOworCQl9CisJICAg ICAgZWxzZQorCQlhcnJheV92ZWN0b3JbaWldW2pqXSA9IGZhbHNlOworCSAg ICB9CisJfQorICAgIH0KKworICBsb29wID0gcHVzaF9zdG10X2xpc3QgKCk7 CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmFuazsgaWkrKykKKyAgICB7Cisg ICAgICBhcnJheV92YXJbaWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIFZB Ul9ERUNMLCBOVUxMX1RSRUUsCisJCQkJICBpbnRlZ2VyX3R5cGVfbm9kZSk7 CisgICAgICBpbmRfaW5pdFtpaV0gPQorCWJ1aWxkX21vZGlmeV9leHByIChs b2NhdGlvbiwgYXJyYXlfdmFyW2lpXSwKKwkJCSAgIFRSRUVfVFlQRSAoYXJy YXlfdmFyW2lpXSksIE5PUF9FWFBSLAorCQkJICAgbG9jYXRpb24sCisJCQkg ICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKGFycmF5X3ZhcltpaV0pLCAw KSwKKwkJCSAgIFRSRUVfVFlQRSAoYXJyYXlfdmFyW2lpXSkpOworCQorICAg IH0KKworICBmb3IgKGlpID0gMDsgaWkgPCByYW5rIDsgaWkrKykKKyAgICB7 CisgICAgICAvKiBUaGlzIHdpbGwgY3JlYXRlIHRoZSBpZiBzdGF0ZW1lbnQg bGFiZWwuICAqLworICAgICAgaWZfc3RtdF9sYWJlbFtpaV0gPSBidWlsZF9k ZWNsIChsb2NhdGlvbiwgTEFCRUxfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAg ICAgIHZvaWRfdHlwZV9ub2RlKTsKKyAgICAgIERFQ0xfQ09OVEVYVCAoaWZf c3RtdF9sYWJlbFtpaV0pID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICAg ICAgREVDTF9BUlRJRklDSUFMIChpZl9zdG10X2xhYmVsW2lpXSkgPSAwOwor ICAgICAgREVDTF9JR05PUkVEX1AgKGlmX3N0bXRfbGFiZWxbaWldKSA9IDE7 CisgIAorICAgICAgLyogVGhpcyBsYWJlbCBzdGF0bWVudCB3aWxsIHBvaW50 IHRvIHRoZSBsb29wIGJvZHkuICAqLworICAgICAgYm9keV9sYWJlbFtpaV0g PSBidWlsZF9kZWNsIChsb2NhdGlvbiwgTEFCRUxfREVDTCwgTlVMTF9UUkVF LAorCQkJCSAgIHZvaWRfdHlwZV9ub2RlKTsKKyAgICAgIERFQ0xfQ09OVEVY VCAoYm9keV9sYWJlbFtpaV0pID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOwor ICAgICAgREVDTF9BUlRJRklDSUFMIChib2R5X2xhYmVsW2lpXSkgPSAwOwor ICAgICAgREVDTF9JR05PUkVEX1AgKGJvZHlfbGFiZWxbaWldKSA9IDE7Cisg ICAgICBib2R5X2xhYmVsX2V4cHJbaWldID0gYnVpbGQxIChMQUJFTF9FWFBS LCB2b2lkX3R5cGVfbm9kZSwgYm9keV9sYWJlbFtpaV0pOworCisgICAgICAv KiBUaGlzIHdpbGwgY3JlYXRlIHRoZSBleGl0IGxhYmVsLi5pLmUuIHdoZXJl IHRoZSB3aGlsZSBsb29wIHdpbGwgYnJhbmNoCisJIG91dCBvZi4gICovCisg ICAgICBleGl0X2xhYmVsW2lpXSA9IGJ1aWxkX2RlY2wgKGxvY2F0aW9uLCBM QUJFTF9ERUNMLCBOVUxMX1RSRUUsCisJCQkJICAgdm9pZF90eXBlX25vZGUp OworICAgICAgREVDTF9DT05URVhUIChleGl0X2xhYmVsW2lpXSkgPSBjdXJy ZW50X2Z1bmN0aW9uX2RlY2w7CisgICAgICBERUNMX0FSVElGSUNJQUwgKGV4 aXRfbGFiZWxbaWldKSA9IDA7CisgICAgICBERUNMX0lHTk9SRURfUCAoZXhp dF9sYWJlbFtpaV0pID0gMTsKKyAgICAgIGV4aXRfbGFiZWxfZXhwcltpaV0g PSBidWlsZDEgKExBQkVMX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBleGl0X2xh YmVsW2lpXSk7CisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rf c2l6ZTsgaWkrKykKKyAgICB7CisgICAgICBpZiAoYXJyYXlfdmVjdG9yW2lp XVswXSkKKwl7CisJICBhcnJheV9vcGVyYW5kW2lpXSA9IGFycmF5X3ZhbHVl W2lpXVtyYW5rIC0gMV07CisJICBnY2NfYXNzZXJ0IChhcnJheV9vcGVyYW5k W2lpXSk7CisKKwkgIGZvciAoamogPSByYW5rIC0gMTsgamogPj0gMDsgamot LSkKKwkgICAgeworCSAgICAgIGlmIChjb3VudF9kb3duW2lpXVtqal0pCisJ CXsKKwkJICAvKiBBcnJheVtzdGFydF9pbmRleCAtIChpbmR1Y3Rpb25fdmFy ICogc3RyaWRlKV0gKi8KKwkJICBhcnJheV9vcGVyYW5kW2lpXSA9IGJ1aWxk X2FycmF5X3JlZgorCQkgICAgKGxvY2F0aW9uLCBhcnJheV9vcGVyYW5kW2lp XSwKKwkJICAgICBidWlsZDIgKE1JTlVTX0VYUFIsIFRSRUVfVFlQRSAoYXJy YXlfdmFyW2pqXSksCisJCQkgICAgIGFycmF5X3N0YXJ0W2lpXVtqal0sCisJ CQkgICAgIGJ1aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zh cltqal0pLAorCQkJCSAgICAgYXJyYXlfdmFyW2pqXSwgYXJyYXlfc3RyaWRl W2lpXVtqal0pKSk7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBB cnJheVtzdGFydF9pbmRleCArIChpbmR1Y3Rpb25fdmFyICogc3RyaWRlKV0g Ki8KKwkJICBhcnJheV9vcGVyYW5kW2lpXSA9IGJ1aWxkX2FycmF5X3JlZgor CQkgICAgKGxvY2F0aW9uLCBhcnJheV9vcGVyYW5kW2lpXSwKKwkJICAgICBi dWlsZDIgKFBMVVNfRVhQUiwgVFJFRV9UWVBFIChhcnJheV92YXJbampdKSwK KwkJCSAgICAgYXJyYXlfc3RhcnRbaWldW2pqXSwKKwkJCSAgICAgYnVpbGQy IChNVUxUX0VYUFIsIFRSRUVfVFlQRSAoYXJyYXlfdmFyW2pqXSksCisJCQkJ ICAgICBhcnJheV92YXJbampdLCBhcnJheV9zdHJpZGVbaWldW2pqXSkpKTsK KwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgcmVwbGFjZV9hcnJheV9ub3Rh dGlvbnMgKCZhcmcsIHRydWUsIGFycmF5X2xpc3QsIGFycmF5X29wZXJhbmQs CisJCQkgICBsaXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkgPCByYW5r OyBpaSsrKSAKKyAgICBleHByX2luY3JbaWldID0gCisgICAgICBidWlsZDIg KE1PRElGWV9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgYXJyYXlfdmFyW2lpXSwg CisJICAgICAgYnVpbGQyIChQTFVTX0VYUFIsIFRSRUVfVFlQRSAoYXJyYXlf dmFyW2lpXSksIGFycmF5X3ZhcltpaV0sIAorCQkgICAgICBidWlsZF9pbnRf Y3N0IChUUkVFX1RZUEUgKGFycmF5X3ZhcltpaV0pLCAxKSkpOworICAKKyAg Zm9yIChqaiA9IDA7IGpqIDwgcmFuazsgamorKykKKyAgICB7CisgICAgICBp ZiAocmFuayAmJiBleHByX2luY3JbampdKQorCXsKKwkgIGlmIChjb3VudF9k b3duWzBdW2pqXSkKKwkgICAgY29tcGFyZV9leHByW2pqXSA9CisJICAgICAg YnVpbGQyIChMVF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgYXJyYXlfdmFy W2pqXSwKKwkJICAgICAgYnVpbGQyIChNVUxUX0VYUFIsIFRSRUVfVFlQRSAo YXJyYXlfdmFyW2pqXSksCisJCQkgICAgICBhcnJheV9sZW5ndGhbMF1bampd LAorCQkJICAgICAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJheV92 YXJbampdKSwgLTEpKSk7CisJICBlbHNlCisJICAgIGNvbXBhcmVfZXhwcltq al0gPSBidWlsZDIgKExUX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLAorCQkJ CSAgICAgICBhcnJheV92YXJbampdLCBhcnJheV9sZW5ndGhbMF1bampdKTsK Kwl9CisgICAgfQorICBmb3IgKGlpID0gMDsgaWkgPCByYW5rOyBpaSsrKQor ICAgIHsKKyAgICAgIGFkZF9zdG10IChpbmRfaW5pdCBbaWldKTsKKyAgICAg IGFkZF9zdG10IChidWlsZDEgKExBQkVMX0VYUFIsIHZvaWRfdHlwZV9ub2Rl LCBpZl9zdG10X2xhYmVsW2lpXSkpOworICAgICAgYWRkX3N0bXQgKGJ1aWxk MyAoQ09ORF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgY29tcGFyZV9leHByW2lp XSwKKwkJCWJ1aWxkMSAoR09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwgYm9k eV9sYWJlbFtpaV0pLAorCQkJYnVpbGQxIChHT1RPX0VYUFIsIHZvaWRfdHlw ZV9ub2RlLCBleGl0X2xhYmVsW2lpXSkpKTsKKyAgICAgIGFkZF9zdG10IChi b2R5X2xhYmVsX2V4cHJbaWldKTsKKyAgICB9CisgIGFkZF9zdG10IChhcmcp OworICBmb3IgKGlpID0gcmFuayAtIDE7IGlpID49IDA7IGlpLS0pCisgICAg eworICAgICAgYWRkX3N0bXQgKGV4cHJfaW5jcltpaV0pOworICAgICAgYWRk X3N0bXQgKGJ1aWxkMSAoR09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwgaWZf c3RtdF9sYWJlbFtpaV0pKTsKKyAgICAgIGFkZF9zdG10IChleGl0X2xhYmVs X2V4cHJbaWldKTsKKyAgICB9CisKKyAgcG9wX3N0bXRfbGlzdCAobG9vcCk7 CisKKyAgWERFTEVURVZFQyAoYm9keV9sYWJlbCk7CisgIFhERUxFVEVWRUMg KGJvZHlfbGFiZWxfZXhwcik7CisgIFhERUxFVEVWRUMgKGV4aXRfbGFiZWwp OworICBYREVMRVRFVkVDIChleGl0X2xhYmVsX2V4cHIpOworICBYREVMRVRF VkVDIChjb21wYXJlX2V4cHIpOworICBYREVMRVRFVkVDIChpZl9zdG10X2xh YmVsKTsKKyAgWERFTEVURVZFQyAoZXhwcl9pbmNyKTsKKyAgWERFTEVURVZF QyAoaW5kX2luaXQpOworICBYREVMRVRFVkVDIChhcnJheV9vcGVyYW5kKTsK KyAgWERFTEVURVZFQyAoYXJyYXlfdmFyKTsKKyAgCisgIGZvciAoaWkgPSAw OyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7CisgICAgICBYREVMRVRF VkVDIChjb3VudF9kb3duW2lpXSk7CisgICAgICBYREVMRVRFVkVDIChhcnJh eV92YWx1ZVtpaV0pOworICAgICAgWERFTEVURVZFQyAoYXJyYXlfc3RyaWRl W2lpXSk7CisgICAgICBYREVMRVRFVkVDIChhcnJheV9sZW5ndGhbaWldKTsK KyAgICAgIFhERUxFVEVWRUMgKGFycmF5X3N0YXJ0W2lpXSk7CisgICAgICBY REVMRVRFVkVDIChhcnJheV9vcHNbaWldKTsKKyAgICAgIFhERUxFVEVWRUMg KGFycmF5X3ZlY3RvcltpaV0pOworICAgIH0KKworICBYREVMRVRFVkVDIChj b3VudF9kb3duKTsKKyAgWERFTEVURVZFQyAoYXJyYXlfdmFsdWUpOworICBY REVMRVRFVkVDIChhcnJheV9zdHJpZGUpOworICBYREVMRVRFVkVDIChhcnJh eV9sZW5ndGgpOworICBYREVMRVRFVkVDIChhcnJheV9zdGFydCk7CisgIFhE RUxFVEVWRUMgKGFycmF5X29wcyk7CisgIFhERUxFVEVWRUMgKGFycmF5X3Zl Y3Rvcik7CisKKyAgYXJnID0gbG9vcDsKKyAgcmV0dXJuIGFyZzsKK30KKwor CisvKiBXYWxrcyB0aHJvdWdoIHRyZWUgbm9kZSBUIGFuZCBmaW5kIGFsbCB0 aGUgY2FsbC1zdGF0bWVudHMgdGhhdCBkbyBub3QgcmV0dXJuCisgICBhbnl0 aGluZyBhbmQgZml4IHVwIGFueSBhcnJheSBub3RhdGlvbnMgdGhleSBtYXkg Y2FycnkuICAqLworCit0cmVlCitleHBhbmRfYXJyYXlfbm90YXRpb25fZXhw cnMgKHRyZWUgdCkKK3sKKyAgaWYgKCF0IHx8ICFjb250YWluc19hcnJheV9u b3RhdGlvbl9leHByICh0KSkKKyAgICByZXR1cm4gdDsKKworICBzd2l0Y2gg KFRSRUVfQ09ERSAodCkpCisgICAgeworICAgIGNhc2UgQklORF9FWFBSOgor ICAgICAgdCA9IGV4cGFuZF9hcnJheV9ub3RhdGlvbl9leHBycyAoQklORF9F WFBSX0JPRFkgKHQpKTsKKyAgICAgIHJldHVybiB0OworICAgIGNhc2UgU1RB VEVNRU5UX0xJU1Q6CisgICAgICB7CisJdHJlZV9zdG10X2l0ZXJhdG9yIGlp X3RzaTsKKwlmb3IgKGlpX3RzaSA9IHRzaV9zdGFydCAodCk7ICF0c2lfZW5k X3AgKGlpX3RzaSk7IHRzaV9uZXh0ICgmaWlfdHNpKSkKKwkgICp0c2lfc3Rt dF9wdHIgKGlpX3RzaSkgPSAKKwkgICAgZXhwYW5kX2FycmF5X25vdGF0aW9u X2V4cHJzICgqdHNpX3N0bXRfcHRyIChpaV90c2kpKTsKKyAgICAgIH0KKyAg ICAgIHJldHVybiB0OworICAgIGNhc2UgQ0FMTF9FWFBSOgorICAgICAgdCA9 IGZpeF9hcnJheV9ub3RhdGlvbl9jYWxsX2V4cHIgKHQpOworICAgICAgcmV0 dXJuIHQ7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiB0OworICAgIH0K KyAgcmV0dXJuIHQ7Cit9CkluZGV4OiBnY2MvdHJlZS5oCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGdjYy90cmVlLmgJKHJldmlzaW9uIDE5MTc2NSkK KysrIGdjYy90cmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDI0 IEBACiBNQVhfVFJFRV9DT0RFUwogfTsKIAorLyogSG9sZHMgdG8gdHlwZSBv ZiB0aGUgcmVkdWN0aW9uIGZ1bmN0aW9ucyB1c2VkIGluIEFycmF5IG5vdGF0 aW9ucywgdGhhdCBpcworICAgcGFydCBvZiB0aGUgQ2lsayBQbHVzIGxhbmd1 YWdlIGV4dGVuc2lvbnMuICAqLwordHlwZWRlZiBlbnVtIGFycmF5X25vdGF0 aW9uX3JlZHVjZV90eXBlIHsKKyAgUkVEVUNFX1VOS05PV04gPSAwLAorICBS RURVQ0VfQURELAorICBSRURVQ0VfTVVMLAorICBSRURVQ0VfQUxMX1pFUk9T LAorICBSRURVQ0VfQUxMX05PTlpFUk9TLAorICBSRURVQ0VfQU5ZX1pFUk9T LAorICBSRURVQ0VfQU5ZX05PTlpFUk9TLAorICBSRURVQ0VfTUFYLAorICBS RURVQ0VfTUlOLAorICBSRURVQ0VfTUFYX0lOREVYLAorICBSRURVQ0VfTUlO X0lOREVYLAorICBSRURVQ0VfQ1VTVE9NLAorICBSRURVQ0VfTVVUQVRJTkcK K30gYW5fcmVkdWNlX3R5cGU7CisKICN1bmRlZiBERUZUUkVFQ09ERQogI3Vu ZGVmIEVORF9PRl9CQVNFX1RSRUVfQ09ERVMKIApAQCAtNjUwNCw0ICs2NTIy LDcgQEAKIAkgICYmIGJ1aWx0aW5faW5mby5pbXBsaWNpdF9wW3Vuc19mbmNv ZGVdKTsKIH0KIAorYm9vbCBpc19zZWNfaW1wbGljaXRfaW5kZXhfZm4gKHRy ZWUpOworaW50IGV4dHJhY3Rfc2VjX2ltcGxpY2l0X2luZGV4X2FyZyAobG9j YXRpb25fdCBsb2NhdGlvbiwgdHJlZSBmbik7Cit2b2lkIGFycmF5X25vdGF0 aW9uX2luaXRfYnVpbHRpbnMgKHZvaWQpOwogI2VuZGlmICAvKiBHQ0NfVFJF RV9IICAqLwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVz L2FycmF5X25vdGF0aW9uL2V4ZWN1dGUvYXJyYXlfdGVzdF9ORC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2Np bGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL2FycmF5X3Rlc3RfTkQu YwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGst cGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL2FycmF5X3Rlc3RfTkQuYwko cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDggQEAKK3ZvaWQgYWJvcnQgKHZv aWQpOwordm9pZCBleGl0KGludCk7CisKK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKK3sKKyAgaW50IHggPSAwOworICBpZiAoYXJnYyA9PSAx KQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmFycmF5W10gPSB7ImEub3V0 IiwgIjEwIiwgIjE1In07CSAgICAgCisgICAgICB4ID0gbWFpbjIgKDMsIGFy cmF5KTsKKyAgICB9CisgIGVsc2UgaWYgKGFyZ2MgPT0gMykKKyAgICB4ID0g bWFpbjIgKGFyZ2MsIGFyZ3YpOworICBlbHNlCisgICAgYWJvcnQgKCk7Cisg ICAgICAKKyAgcmV0dXJuIHg7Cit9CisKK2ludCBtYWluMihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCit7ICAKKyAgaW50IGFycmF5WzEwXVsxNV0sIGlpID0g MCwgamogPSAwLHggPSAwLCB6PSAxICwgeSA9IDEwIDsKKyAgaW50IGFycmF5 XzJbMTBdWzE1XTsKKyAKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkr KykgeworICAgIGZvciAoamogPSAwOyBqajwgMTU7IGpqKyspIHsKKyAgICAg IGFycmF5W2lpXVtqal0gPSBpaStqajsKKyAgICAgIGFycmF5XzJbaWldW2pq XSA9IDA7CisgICAgfQorICB9CisgIGFycmF5XzJbMDo1OjJdWzA6NTozXSA9 IGFycmF5WzA6NToyXVswOjU6M10gKyAxICsgNSArIGFycmF5WzBdWzVdICsg eDsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkgKz0gMikKKyAgICB7 CisgICAgICBmb3IgKGpqID0gMDsgamogPCAxNTsgamogKz0gMykKKwl7CisJ ICBpZiAoYXJyYXlfMltpaV1bampdICE9IGFycmF5W2lpXVtqal0gKyAxICsg NSArIGFycmF5WzBdWzVdICsgeCkKKwkgICAgYWJvcnQgKCk7CisJfQorICAg IH0KKworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSB7CisgICAg Zm9yIChqaiA9IDA7IGpqPCAxNTsgamorKykgeworICAgICAgYXJyYXlbaWld W2pqXSA9IGlpK2pqOworICAgICAgYXJyYXlfMltpaV1bampdID0gMDsKKyAg ICB9CisgIH0KKyAgeCA9IGF0b2koYXJndlsxXSk7CisgIHkgPSBhdG9pKGFy Z3ZbMl0pOworICBhcnJheV8yWzA6eDoxXVswOnk6MV0gPSBhcnJheVswOng6 MV1bMDp5OjFdICsgeCArIHkgKyBhcnJheVswOng6MV1bMDp5OjFdOworCisg IGZvciAoaWkgPSAwOyBpaSA8IHg7IGlpKyspCisgICAgeworICAgICAgZm9y IChqaiA9IDA7IGpqIDwgeTsgamorKykKKwl7CisJICBpZiAoYXJyYXlfMltp aV1bampdICE9IGFycmF5W2lpXVtqal0gKyB4ICsgeSArIGFycmF5W2lpXVtq al0pCisJICAgIGFib3J0ICgpOworCX0KKyAgICB9CisKKyAgZm9yIChpaSA9 IDA7IGlpIDwgMTA7IGlpKyspIHsKKyAgICBmb3IgKGpqID0gMDsgamo8IDE1 OyBqaisrKSB7CisgICAgICBhcnJheVtpaV1bampdID0gaWkramo7CisgICAg ICBhcnJheV8yW2lpXVtqal0gPSAwOworICAgIH0KKyAgfQorICB4ID0gYXRv aShhcmd2WzFdKTsKKyAgeSA9IGF0b2koYXJndlsyXSk7CisgIHogPSAoMjAt IGF0b2kgKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pOworICAvKiAoMjAtMTAp LzEwIGV2YWx1YXRlcyB0byAxIGFsbCB0aGUgdGltZSA6LSkuICovCisgIGFy cmF5XzJbMDp4OnpdWzA6eTp6XSA9IGFycmF5WzA6eDp6XVswOnk6el0gKyBh cnJheVswOng6el1bMDp5OnpdICsgeSArIHo7CisgIAorICBmb3IgKGlpID0g MDsgaWkgPCB4OyBpaSArPSB6KQorICAgIHsKKyAgICAgIGZvciAoamogPSAw OyBqaiA8IHk7IGpqICs9IHopCisJeworCSAgaWYgKGFycmF5XzJbaWldW2pq XSAhPSBhcnJheVtpaV1bampdICsgYXJyYXlbaWldW2pqXSArIHkgKyB6KQor CSAgICBhYm9ydCAoKTsKKwl9CisgICAgfQorCisKKyAKKyAgZm9yIChpaSA9 IDA7IGlpIDwgMTA7IGlpKyspIHsKKyAgICBmb3IgKGpqID0gMDsgamo8IDE1 OyBqaisrKSB7CisgICAgICBhcnJheVtpaV1bampdID0gaWkramo7CisgICAg ICBhcnJheV8yW2lpXVtqal0gPSAwOworICAgIH0KKyAgfQorICB4ID0gYXJn Yy0zOworICB5ID0gMjAtYXRvaShhcmd2WzFdKTsKKyAgeiA9ICgyMC0gYXRv aSAoYXJndlsxXSkpL2F0b2koYXJndlsxXSk7CisgIC8qICgyMC0xMCkvMTAg ZXZhbHVhdGVzIHRvIDEgYWxsIHRoZSB0aW1lIDotKS4gKi8KKyAgYXJyYXlf MlsoYXJnYy0zKTooMjAtYXRvaShhcmd2WzFdKSk6KDIwLWF0b2koYXJndlsx XSkpL2F0b2koYXJndlsxXSldWyhhcmdjLTMpOigzMC1hdG9pKGFyZ3ZbMl0p KTogKCgzMC1hdG9pKGFyZ3ZbMl0pKS9hdG9pKGFyZ3ZbMl0pKV0gPSBhcnJh eVsoYXJnYy0zKToyMC1hdG9pKGFyZ3ZbMV0pOigyMC1hdG9pKGFyZ3ZbMV0p KS9hdG9pKGFyZ3ZbMV0pXVsoYXJnYy0zKTooMzAtYXRvaShhcmd2WzJdKSk6 ICgzMC1hdG9pKGFyZ3ZbMl0pKS9hdG9pKGFyZ3ZbMl0pXSArIGFycmF5Wyhh cmdjLTMpOjIwLWF0b2koYXJndlsxXSk6KDIwLWF0b2koYXJndlsxXSkpL2F0 b2koYXJndlsxXSldWyhhcmdjLTMpOigzMC1hdG9pKGFyZ3ZbMl0pKTogKDMw LWF0b2koYXJndlsyXSkpL2F0b2koYXJndlsyXSldICogYXJyYXlbKGFyZ2Mt Myk6MjAtYXRvaShhcmd2WzFdKTooMjAtYXRvaShhcmd2WzFdKSkvYXRvaShh cmd2WzFdKV1bKGFyZ2MtMyk6KDMwLWF0b2koYXJndlsyXSkpOiAoMzAtYXRv aShhcmd2WzJdKSkvYXRvaShhcmd2WzJdKV07CisgIAorICBmb3IgKGlpID0g MDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAgICBmb3IgKGpqID0gMDsg amogPCAxNTsgamorKykKKwl7CisJICBpZiAoYXJyYXlfMltpaV1bampdICE9 IGFycmF5W2lpXVtqal0gKyBhcnJheVtpaV1bampdICogYXJyYXlbaWldW2pq XSkKKwkgICAgYWJvcnQgKCk7CisJfQorICAgIH0KKyAgZXhpdCAoMCk7Cisg IHJldHVybiAwOworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2ls ay1wbHVzL2FycmF5X25vdGF0aW9uL2V4ZWN1dGUvYXJyYXlfdGVzdDEuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5k Zy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9hcnJheV90ZXN0 MS5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2ls ay1wbHVzL2FycmF5X25vdGF0aW9uL2V4ZWN1dGUvYXJyYXlfdGVzdDEuYwko cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAordm9pZCBhYm9ydCAodm9p ZCk7Cit2b2lkIGV4aXQoaW50KTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQoreworICBpbnQgeCA9IDA7CisgIGlmIChhcmdjID09IDEp CisgICAgeworICAgICAgY29uc3QgY2hhciAqYXJyYXlbXSA9IHsiYS5vdXQi LCAiNSJ9OwkgICAgIAorICAgICAgeCA9IG1haW4yICgyLCBhcnJheSk7Cisg ICAgfQorICBlbHNlCisgICAgeCA9IG1haW4yIChhcmdjLCBhcmd2KTsKKyAg ICAgIAorICByZXR1cm4geDsKK30KKworaW50IG1haW4yIChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCit7CisgIGludCBhcnJheVsxMF0sIGlpID0gMCwgeCA9 IDIsIHo9IDAgLCB5ID0gMCA7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7 IGlpKyspCisgICAgYXJyYXlbaWldID0gMTA7CisKKyAgYXJyYXlbMDoxMDox XSA9IDE1OworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAg IGlmIChhcnJheVtpaV0gIT0gMTUpCisgICAgICBhYm9ydCAoKTsKKyAgCisK KyAgYXJyYXlbMDo1OjJdID0gMjA7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwg MTA7IGlpICs9IDIpCisgICAgaWYgKGFycmF5W2lpXSAhPSAyMCkKKyAgICAg IGFib3J0ICgpOworCisKKyAgeCA9IGF0b2koYXJndlsxXSk7CisgIHogPSAo MTAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFdKTsKKworICBhcnJheVt4 OjU6el0gPSA1MDsKKyAgCisgIGZvciAoaWkgPSB4OyBpaSA8IDEwOyBpaSAr PSB6KQorICAgIGlmIChhcnJheVtpaV0gIT0gNTApCisgICAgICBhYm9ydCAo KTsKKworICB4ID0gYXRvaShhcmd2WzFdKTsKKyAgeiA9ICgxMC1hdG9pKGFy Z3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pOworICB5ID0gMTAtYXRvaShhcmd2WzFd KTsKKyAgCisgIGFycmF5W3g6eTp6XSA9IDUwNTsKKyAgZm9yIChpaSA9IHg7 IGlpIDwgMTA7IGlpICs9IHopCisgICAgaWYgKGFycmF5W2lpXSAhPSA1MDUp CisgICAgICBhYm9ydCAoKTsKKyAgICAKKworICB4ID0gYXRvaShhcmd2WzFd KTsKKyAgeiA9ICgxMC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pOwor ICB5ID0gMTAtYXRvaShhcmd2WzFdKTsKKyAgCisgIGFycmF5W3g6eTooKDEw LWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSkpXSA9IDI1OworCisgIGZv ciAoaWkgPSB4OyBpaSA8IDEwOyBpaSArPSB6KQorICAgIGlmIChhcnJheVtp aV0gIT0gMjUpCisgICAgICBhYm9ydCAoKTsKKyAgCisgIHggPSBhdG9pKGFy Z3ZbMV0pOworICB6ID0gKDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsx XSk7CisgIHkgPSAxMC1hdG9pKGFyZ3ZbMV0pOworIAorICBhcnJheVthdG9p KGFyZ3ZbMV0pOigxMC1hdG9pKGFyZ3ZbMV0pKTooKDEwLWF0b2koYXJndlsx XSkpL2F0b2koYXJndlsxXSkpXSA9CisgICAgMTQwMDsKKyAgZm9yIChpaSA9 IHg7IGlpIDwgMTA7IGlpICs9IHopCisgICAgaWYgKGFycmF5W2lpXSAhPSAx NDAwKQorICAgICAgYWJvcnQgKCk7CisgIAorCisgIGFycmF5W2F0b2koIjUi KTo1OjFdID0gNTU1NTsKKyAgCisgIGZvciAoaWkgPSBhdG9pICgiNSIpOyBp aSA8IDEwOyBpaSsrKQorICAgIGlmIChhcnJheVtpaV0gIT0gNTU1NSkKKyAg ICAgIGFib3J0ICgpOworICAKKworICBhcnJheVthdG9pKCI1Iik6YXRvaSgi NSIpOmF0b2koIjEiKV0gPSA5OTk5OworICBmb3IgKGlpID0gYXRvaSAoIjUi KTsgaWkgPCAoYXRvaSAoIjUiKSArIGF0b2kgKCI1IikpOyBpaSArPSBhdG9p ICgiMSIpKQorICAgIGlmIChhcnJheVtpaV0gIT0gOTk5OSkKKyAgICAgIGFi b3J0ICgpOworICBleGl0ICgwKTsKKyAgcmV0dXJuIDA7Cit9CkluZGV4OiBn Y2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24v ZXhlY3V0ZS9hcnJheV90ZXN0Mi5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3Rh dGlvbi9leGVjdXRlL2FycmF5X3Rlc3QyLmMJKHJldmlzaW9uIDApCisrKyBn Y2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24v ZXhlY3V0ZS9hcnJheV90ZXN0Mi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDEzMiBAQAordm9pZCBhYm9ydCAodm9pZCk7Cit2b2lkIGV4aXQoaW50KTsK KworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQg eCA9IDA7CisgIGlmIChhcmdjID09IDEpCisgICAgeworICAgICAgY29uc3Qg Y2hhciAqYXJyYXlbXSA9IHsiYS5vdXQiLCAiNSJ9OwkgICAgIAorICAgICAg eCA9IG1haW4yICgyLCBhcnJheSk7CisgICAgfQorICBlbHNlCisgICAgeCA9 IG1haW4yIChhcmdjLCBhcmd2KTsKKyAgICAgIAorICByZXR1cm4geDsKK30K KworCitpbnQgbWFpbjIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBp bnQgYXJyYXlbMTBdLCBhcnJheTJbMTBdLCBpaSA9IDAsIHggPSAyLCB6PSAw ICwgeSA9IDAgOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQor ICAgIHsKKyAgICAgIGFycmF5W2lpXSA9IDEwOworICAgICAgYXJyYXkyW2lp XSA9IDUwMDAwMDA7CisgICAgfQorCisgIGFycmF5MlswOjEwOjFdID0gYXJy YXlbMDoxMDoxXTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykK KyAgICBpZiAoYXJyYXkyW2lpXSAhPSBhcnJheVtpaV0pCisgICAgICBhYm9y dCAoKTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7 CisgICAgICBhcnJheVtpaV0gPSAxMDsKKyAgICAgIGFycmF5MltpaV0gPSA1 MDAwMDAwOworICAgIH0KKyAgCisgIGFycmF5MlswOjU6Ml0gPSBhcnJheVsw OjU6Ml07CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpICs9IDIpCisg ICAgaWYgKGFycmF5W2lpXSAhPSBhcnJheTJbaWldKQorICAgICAgYWJvcnQg KCk7CisgIAorICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7 CisgICAgICBhcnJheVtpaV0gPSAxMDsKKyAgICAgIGFycmF5MltpaV0gPSA1 MDAwMDAwOworICAgIH0KKyAgeCA9IGF0b2koYXJndlsxXSk7CisgIHogPSAo MTAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFdKTsKKyAKKyAgYXJyYXky W3g6NTp6XSA9IGFycmF5W3g6NTp6XTsKKworICBmb3IgKGlpID0geDsgaWkg PCA1OyBpaSArPSB6KQorICAgIGlmIChhcnJheTJbaWldICE9IGFycmF5W2lp XSkKKyAgICAgIGFib3J0ICgpOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEw OyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lpXSA9IDUwMDsKKyAgICAg IGFycmF5MltpaV0gPSAxMDAwMDAwOworICAgIH0KKyAgeCA9IGF0b2koYXJn dlsxXSk7CisgIHogPSAoMTAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFd KTsKKyAgeSA9IDEwLWF0b2koYXJndlsxXSk7CisKKyAgYXJyYXkyW3g6eTp6 XSA9IGFycmF5W3g6eTp6XTsKKyAgZm9yIChpaSA9IHg7IGlpIDwgMTA7IGlp ID0gaWkgKyB6KQorICAgIGlmIChhcnJheTJbaWldICE9IGFycmF5W2lpXSkK KyAgICAgIGFib3J0ICgpOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBp aSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lpXSAgPSA1MDA7CisgICAgICBh cnJheTJbaWldID0gMTAwMDAwMDsKKyAgICB9CisgIHggPSBhdG9pKGFyZ3Zb MV0pOworICB6ID0gKDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSk7 CisgIHkgPSAxMC1hdG9pKGFyZ3ZbMV0pOworCisgIGFycmF5W3g6eTooKDEw LWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSkpXSA9IAorICAgIGFycmF5 Mlt4Onk6KCgxMC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pKV07CisK KyAgZm9yIChpaSA9IHg7IGlpIDwgMTA7IGlpICs9IHopCisgICAgaWYgKGFy cmF5W2lpXSAhPSBhcnJheTJbaWldKQorICAgICAgYWJvcnQgKCk7CisgIAor ICAKKyAgeCA9IGF0b2koYXJndlsxXSk7CisgIHogPSAoMTAtYXRvaShhcmd2 WzFdKSkvYXRvaShhcmd2WzFdKTsKKyAgeSA9IDEwLWF0b2koYXJndlsxXSk7 CisgIAorICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7Cisg ICAgICBhcnJheVtpaV0gID0gNTAwOworICAgICAgYXJyYXkyW2lpXSA9IDEw MDAwMDA7CisgICAgfQorICAKKyAgYXJyYXlbYXRvaShhcmd2WzFdKTooMTAt YXRvaShhcmd2WzFdKSk6KCgxMC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3Zb MV0pKV0gPQorICAgIGFycmF5MlthdG9pKGFyZ3ZbMV0pOigxMC1hdG9pKGFy Z3ZbMV0pKTooKDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSkpXTsK KyAgZm9yIChpaSA9IHg7IGlpIDwgMTA7IGlpICs9IHopCisgICAgaWYgKGFy cmF5W2lpXSAhPSBhcnJheTJbaWldKQorICAgICAgYWJvcnQgKCk7CisKKyAg Zm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgYXJy YXlbaWldICA9IDQ7CisgICAgICBhcnJheTJbaWldID0gMjsKKyAgICB9CisK KyAgYXJyYXlbYXRvaSgiNSIpOjU6MV0gPSBhcnJheTJbYXRvaSgiNSIpOjU6 MV07CisKKyAgZm9yIChpaSA9IGF0b2kgKCI1Iik7IGlpIDwgMTA7IGlpKysp CisgICAgaWYgKGFycmF5W2lpXSAhPSBhcnJheTJbaWldKQorICAgICAgYWJv cnQgKCk7CisgIAorICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAg ICB7CisgICAgICBhcnJheVtpaV0gID0gNTsKKyAgICAgIGFycmF5MltpaV0g PSAxOworICAgIH0KKyAgYXJyYXlbYXRvaSgiNSIpOmF0b2koIjUiKTphdG9p KCIxIildID0gYXJyYXkyW2F0b2koIjUiKTphdG9pKCI1Iik6YXRvaSgiMSIp XTsKKworICBmb3IgKGlpID0gNTsgaWkgPCAxMDsgaWkrKykKKyAgICBpZiAo YXJyYXkyW2lpXSAhPSBhcnJheVtpaV0pCisgICAgICBhYm9ydCAoKTsKKyAK KyAgcmV0dXJuIDA7Cit9CkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy9j aWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9nYXRoZXJfc2NhdHRl ci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUv Z2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL2dhdGhl cl9zY2F0dGVyLmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2dj Yy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9nYXRoZXJf c2NhdHRlci5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisjaWYg SEFWRV9JTworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKwordm9pZCBl eGl0IChpbnQpOwordm9pZCBhYm9ydCh2b2lkKTsKKworaW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgYXJyYXlbMTBdWzEwXSwg YXJyYXkyWzEwXSwgYXJyYXkzWzEwXSwgeCA9IDAsIHk7CisgIGludCB4X2Nv cnJlY3QsIHlfY29ycmVjdCwgaWksIGpqID0gMDsKKyAgZmxvYXQgYXJyYXk0 WzEwXVsxMF1bMTBdWzEwXTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlp KyspCisgICAgeworICAgICAgZm9yIChqaiA9IDA7IGpqIDwgMTA7IGpqKysp CisJeworCSAgYXJyYXlbaWldW2pqXSA9IDEraWk7CisJICBhcnJheTJbaWld PSAyOworCSAgYXJyYXkzW2lpXT0gMzsKKwl9CisgICAgfQorICAKKyAgYXJy YXlbYXJyYXkyWzpdXVthcnJheTNbOl1dID0gMTAwMDsKKworICBmb3IgKGlp ID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBpZiAoYXJyYXlbYXJyYXkyW2lp XV1bYXJyYXkzW2lpXV0gIT0gMTAwMCkKKyAgICAgIGFib3J0ICgpOworICAK KyNpZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSB7 CisgICAgZm9yIChqaiA9IDA7IGpqIDwgMTA7IGpqKyspIHsKKyAgICAgIHBy aW50ZigiJTRkXHQiLCBhcnJheVtpaV1bampdKTsKKyAgICB9CisgICAgcHJp bnRmKCJcbiIpOworICB9CisjZW5kaWYKKworICBhcnJheTRbYXJyYXkyWzpd XVthcnJheTNbMDoxMDoxXV1bYXJyYXkyWzA6MTA6MV1dW2FycmF5M1swOjEw OjFdXSA9CisgICAgKGZsb2F0KWFycmF5W2FycmF5Mls6XV1bYXJyYXkzWzpd XTsgCisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgaWYg KGFycmF5NFthcnJheTJbaWldXVthcnJheTNbaWldXVthcnJheTJbaWldXVth cnJheTNbaWldXSAhPQorCShmbG9hdClhcnJheVthcnJheTJbaWldXVthcnJh eTNbaWldXSkKKyAgICAgIGFib3J0ICgpOworICAKKyNpZiBIQVZFX0lPCisg IGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSB7CisgICAgICBmb3IgKGpq ID0gMDsgamogPCAxMDsgamorKykgeworCSAgZm9yIChrayA9IDA7IGtrIDwg MTA7IGtrKyspIHsKKwkgICAgICBmb3IgKGxsID0gMDsgbGwgPCAxMDsgbGwr KykgeworCQkgIHByaW50ZigiJTRkXG4iLCBhcnJheTRbaWldW2pqXVtra11b bGxdKTsKKwkgICAgICB9CisJICB9CisgICAgICB9CisgIH0KKyNlbmRpZgor CisgIGV4aXQgKDApOworICByZXR1cm4gMDsKK30KSW5kZXg6IGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRl L3NlY19pbXBsaWNpdF9leC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlv bi9leGVjdXRlL3NlY19pbXBsaWNpdF9leC5jCShyZXZpc2lvbiAwKQorKysg Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9u L2V4ZWN1dGUvc2VjX2ltcGxpY2l0X2V4LmMJKHJldmlzaW9uIDApCkBAIC0w LDAgKzEsMzEgQEAKKwordm9pZCBhYm9ydCAodm9pZCk7Cit2b2lkIGV4aXQg IChpbnQpOworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK K3sKKyAgaW50IGpqLCBraywgYXJyYXlfM0NbMTBdWzEwXVsxMF07CisgIGlu dCBpaSxhcnJheVsxMF0sIHkgPSAwLCB5X2ludCA9IDAsIGFycmF5MlsxMF0s IGFycmF5XzNbMTBdWzEwXVsxMF07CisgIGRvdWJsZSB4LCB5eSwgYXJyYXkz WzEwXSwgYXJyYXk0WzEwXTsKKworICBhcnJheVs6XSA9IF9fc2VjX2ltcGxp Y2l0X2luZGV4ICgwKTsKKyAgYXJyYXlfM1s6XVs6XVs6XSA9IF9fc2VjX2lt cGxpY2l0X2luZGV4ICgxKSArIF9fc2VjX2ltcGxpY2l0X2luZGV4KDApICsK KyAgICBfX3NlY19pbXBsaWNpdF9pbmRleCAoMik7CisKKyAgZm9yIChpaSA9 IDA7IGlpIDwgMTA7IGlpKyspCisgICAgZm9yIChqaiA9IDA7IGpqIDwgMTA7 IGpqKyspCisgICAgICBmb3IgKGtrID0gMDsga2sgPCAxMDsga2srKykKKwlh cnJheV8zQ1tpaV1bampdW2trXSA9IGlpK2pqK2trOworCQorICBmb3IgKGlp ID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBmb3IgKGpqID0gMDsgamogPCAx MDsgamorKykKKyAgICAgIGZvciAoa2sgPSAwOyBrayA8IDEwOyBraysrKQor CWlmIChhcnJheV8zW2lpXVtqal1ba2tdICE9IGFycmF5XzNDW2lpXVtqal1b a2tdKQorCSAgYWJvcnQgKCk7CisJCisKKyAgZXhpdCAoMCk7CisgIAorICBy ZXR1cm4gMDsKK30KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGst cGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL2J1aWx0aW5fZm5fbXV0YXRp bmcuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRl L2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9idWls dGluX2ZuX211dGF0aW5nLmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1 aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9i dWlsdGluX2ZuX211dGF0aW5nLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs NzAgQEAKKyNkZWZpbmUgSEFWRV9JTyAwCisKKyNpZiBIQVZFX0lPCisjaW5j bHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorLyogI2luY2x1ZGUgPHN0ZGxpYi5o PiAqLworCit2b2lkIGFib3J0ICh2b2lkKTsKK3ZvaWQgZXhpdCAoaW50KTsK Kwordm9pZCBteV9mdW5jIChkb3VibGUgKngsIGRvdWJsZSB5KQoreworICBp ZiAoKnggPCB5KQorICAgICp4ID0geTsKK30KKworCitpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBpaSxhcnJheVsxMF0sIHkg PSAwLCB5X2ludCA9IDAsIGFycmF5MlsxMF07CisgIGRvdWJsZSB4LCB5eSwg YXJyYXkzWzEwXSwgYXJyYXk0WzEwXTsKKyAgZG91YmxlIG1heF92YWx1ZSA9 IDAuMDAwLCBtaW5fdmFsdWUgPSAwLjAwMCwgYWRkX3ZhbHVlLCBtdWxfdmFs dWUgPSAxLjAwOworICBpbnQgbWF4X2luZGV4ID0gMCwgbWluX2luZGV4ID0g MDsKKyNpZiAxIAorICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAg ICB7CisgICAgICBhcnJheVtpaV0gPSAxK2lpOworICAgICAgYXJyYXkyW2lp XT0gMjsgCisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsr KQorICAgIHsKKyAgICAgIGlmIChpaSUyICYmIGlpKQorCWFycmF5M1tpaV0g PSAoZG91YmxlKSgxLjAwMDAvKGRvdWJsZSlpaSk7CisgICAgICBlbHNlCisJ YXJyYXkzW2lpXSA9IChkb3VibGUpIGlpICsgMC4xMDsKKyAgICAgIGFycmF5 NFtpaV0gPSAoZG91YmxlKSAoMS4wMDAwMC8gKGRvdWJsZSkoaWkrMSkpOwor ICAgIH0KKyNlbmRpZiAKKyAgLyogYXJyYXlbOl0gPSA1OyAqLworICBfX3Nl Y19yZWR1Y2VfbXV0YXRpbmcgKCZ4LCBhcnJheTNbOl0gKiBhcnJheTRbOl0s IG15X2Z1bmMpOyAKKyNpZiAxCisgIHkgPSBfX3NlY19yZWR1Y2VfbWF4X2lu ZCAoIGFycmF5M1s6XSAqIGFycmF5NFs6XSk7CisKKyAgLyogSW5pdGlhbGl6 ZSBpdCB0byB0aGUgZmlyc3QgdmFyaWFibGUuICAqLworICBtYXhfdmFsdWUg PSBhcnJheTNbMF0gKiBhcnJheTRbMF07CisgIGZvciAoaWkgPSAwOyBpaSA8 IDEwOyBpaSsrKQorICAgIGlmIChhcnJheTNbaWldICogYXJyYXk0W2lpXSA+ IG1heF92YWx1ZSkgeworICAgICAgbWF4X3ZhbHVlID0gYXJyYXkzW2lpXSAq IGFycmF5NFtpaV07CisgICAgICBtYXhfaW5kZXggPSBpaTsKKyAgICB9Cisg ICAgCisgIAorICAKKyNpZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8 IDEwOyBpaSsrKSAKKyAgICBwcmludGYoIiU1LjNmICIsIGFycmF5M1tpaV0g KiBhcnJheTRbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIk1h eCA9ICU1LjNmXHQgTWF4IEluZGV4ID0gJTJkXG4iLCB4LCB5KTsKKyAgcHJp bnRmKCJNYXggPSAlNS4zZlx0IE1heCBJbmRleCA9ICUyZFxuIiwgbWF4X3Zh bHVlLCBtYXhfaW5kZXgpOworI2VuZGlmCisKKyAgaWYgKHggIT0gbWF4X3Zh bHVlKQorICAgIGFib3J0ICgpOworCisgIGlmICh5ICE9IG1heF9pbmRleCkK KyAgICBhYm9ydCAoKTsKKyNlbmRpZgorICByZXR1cm4gMDsKK30KSW5kZXg6 IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlv bi9leGVjdXRlL2J1aWx0aW5fZm5fY3VzdG9tLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2Fy cmF5X25vdGF0aW9uL2V4ZWN1dGUvYnVpbHRpbl9mbl9jdXN0b20uYwkocmV2 aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9h cnJheV9ub3RhdGlvbi9leGVjdXRlL2J1aWx0aW5fZm5fY3VzdG9tLmMJKHJl dmlzaW9uIDApCkBAIC0wLDAgKzEsNzAgQEAKKyNkZWZpbmUgSEFWRV9JTyAw CisKKyNpZiBIQVZFX0lPCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgor LyogI2luY2x1ZGUgPHN0ZGxpYi5oPiAqLworCit2b2lkIGFib3J0ICh2b2lk KTsKK3ZvaWQgZXhpdCAoaW50KTsKKworZG91YmxlIG15X2Z1bmMgKGRvdWJs ZSB4LCBkb3VibGUgeSkKK3sKKyAgaWYgKHggPiB5KQorICAgIHJldHVybiB4 OworICBlbHNlCisgICAgcmV0dXJuIHk7Cit9CisKKworLyogY2hhciBfX3Nl Y19yZWR1Y2VfYWRkIChpbnQgKik7ICovCitpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCit7CisgIGludCBpaSxhcnJheVsxMF0sIHkgPSAwLCB5 X2ludCA9IDAsIGFycmF5MlsxMF07CisgIGRvdWJsZSB4LCB5eSwgYXJyYXkz WzEwXSwgYXJyYXk0WzEwXTsKKyAgZG91YmxlIG1heF92YWx1ZSA9IDAuMDAw LCBtaW5fdmFsdWUgPSAwLjAwMCwgYWRkX3ZhbHVlLCBtdWxfdmFsdWUgPSAx LjAwOworICBpbnQgbWF4X2luZGV4ID0gMCwgbWluX2luZGV4ID0gMDsKKyAg Zm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgYXJy YXlbaWldID0gMStpaTsKKyAgICAgIGFycmF5MltpaV09IDI7IAorICAgIH0K KworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAg ICBpZiAoaWklMiAmJiBpaSkKKwlhcnJheTNbaWldID0gKGRvdWJsZSkoMS4w MDAwLyhkb3VibGUpaWkpOworICAgICAgZWxzZQorCWFycmF5M1tpaV0gPSAo ZG91YmxlKSBpaSArIDAuMTA7CisgICAgICBhcnJheTRbaWldID0gKGRvdWJs ZSkgKDEuMDAwMDAvIChkb3VibGUpKGlpKzEpKTsKKyAgICB9CisKKyAgLyog YXJyYXlbOl0gPSA1OyAqLworICB4ID0gX19zZWNfcmVkdWNlICgwLCBhcnJh eTNbOl0gKiBhcnJheTRbOl0sIG15X2Z1bmMpOyAKKyAgeSA9IF9fc2VjX3Jl ZHVjZV9tYXhfaW5kICggYXJyYXkzWzpdICogYXJyYXk0WzpdKTsKKworICAv KiBJbml0aWFsaXplIGl0IHRvIHRoZSBmaXJzdCB2YXJpYWJsZS4gICovCisg IG1heF92YWx1ZSA9IGFycmF5M1swXSAqIGFycmF5NFswXTsKKyAgZm9yIChp aSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgaWYgKGFycmF5M1tpaV0gKiBh cnJheTRbaWldID4gbWF4X3ZhbHVlKSB7CisgICAgICBtYXhfdmFsdWUgPSBh cnJheTNbaWldICogYXJyYXk0W2lpXTsKKyAgICAgIG1heF9pbmRleCA9IGlp OworICAgIH0KKyAgICAKKyAgCisgIAorI2lmIEhBVkVfSU8KKyAgZm9yIChp aSA9IDA7IGlpIDwgMTA7IGlpKyspIAorICAgIHByaW50ZigiJTUuM2YgIiwg YXJyYXkzW2lpXSAqIGFycmF5NFtpaV0pOworICBwcmludGYoIlxuIik7Cisg IHByaW50ZigiTWF4ID0gJTUuM2ZcdCBNYXggSW5kZXggPSAlMmRcbiIsIHgs IHkpOworI2VuZGlmCisKKyAgaWYgKHggIT0gbWF4X3ZhbHVlKQorICAgIGFi b3J0ICgpOworCisgIGlmICh5ICE9IG1heF9pbmRleCkKKyAgICBhYm9ydCAo KTsKKworICByZXR1cm4gMDsKK30KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL2J1aWx0aW5f ZnVuY19kb3VibGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2Mv dGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXhl Y3V0ZS9idWlsdGluX2Z1bmNfZG91YmxlLmMJKHJldmlzaW9uIDApCisrKyBn Y2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24v ZXhlY3V0ZS9idWlsdGluX2Z1bmNfZG91YmxlLmMJKHJldmlzaW9uIDApCkBA IC0wLDAgKzEsMTI5IEBACisjZGVmaW5lIEhBVkVfSU8gMAorCisjaWYgSEFW RV9JTworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKy8qICNpbmNsdWRl IDxzdGRsaWIuaD4gKi8KKwordm9pZCBhYm9ydCAodm9pZCk7Cit2b2lkIGV4 aXQgKGludCk7CisKKy8qIGNoYXIgX19zZWNfcmVkdWNlX2FkZCAoaW50ICop OyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBp bnQgaWksYXJyYXlbMTBdLCB5ID0gMCwgeV9pbnQgPSAwLCBhcnJheTJbMTBd OworICBkb3VibGUgeCwgeXksIGFycmF5M1sxMF0sIGFycmF5NFsxMF07Cisg IGRvdWJsZSBtYXhfdmFsdWUgPSAwLjAwMCwgbWluX3ZhbHVlID0gMC4wMDAs IGFkZF92YWx1ZSwgbXVsX3ZhbHVlID0gMS4wMDsKKyAgaW50IG1heF9pbmRl eCA9IDAsIG1pbl9pbmRleCA9IDA7CisgIGZvciAoaWkgPSAwOyBpaSA8IDEw OyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lpXSA9IDEraWk7CisgICAg ICBhcnJheTJbaWldPSAyOyAKKyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpKyspCisgICAgeworICAgICAgaWYgKGlpJTIgJiYgaWkpCisJ YXJyYXkzW2lpXSA9IChkb3VibGUpKDEuMDAwMC8oZG91YmxlKWlpKTsKKyAg ICAgIGVsc2UKKwlhcnJheTNbaWldID0gKGRvdWJsZSkgaWkgKyAwLjEwOwor ICAgICAgYXJyYXk0W2lpXSA9IChkb3VibGUpICgxLjAwMDAwLyAoZG91Ymxl KShpaSsxKSk7CisgICAgfQorCisgIC8qIGFycmF5WzpdID0gNTsgKi8KKyAg eCA9IF9fc2VjX3JlZHVjZV9tYXggKGFycmF5M1s6XSAqIGFycmF5NFs6XSk7 IAorICB5ID0gX19zZWNfcmVkdWNlX21heF9pbmQgKCBhcnJheTNbOl0gKiBh cnJheTRbOl0pOworCisgIC8qIEluaXRpYWxpemUgaXQgdG8gdGhlIGZpcnN0 IHZhcmlhYmxlLiAgKi8KKyAgbWF4X3ZhbHVlID0gYXJyYXkzWzBdICogYXJy YXk0WzBdOworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBp ZiAoYXJyYXkzW2lpXSAqIGFycmF5NFtpaV0gPiBtYXhfdmFsdWUpIHsKKyAg ICAgIG1heF92YWx1ZSA9IGFycmF5M1tpaV0gKiBhcnJheTRbaWldOworICAg ICAgbWF4X2luZGV4ID0gaWk7CisgICAgfQorICAgIAorICAKKyAgCisjaWYg SEFWRV9JTworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykgCisgICAg cHJpbnRmKCIlNS4zZiAiLCBhcnJheTNbaWldICogYXJyYXk0W2lpXSk7Cisg IHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCJNYXggPSAlNS4zZlx0IE1heCBJ bmRleCA9ICUyZFxuIiwgeCwgeSk7CisjZW5kaWYKKworICBpZiAoeCAhPSBt YXhfdmFsdWUpCisgICAgYWJvcnQgKCk7CisKKyAgaWYgKHkgIT0gbWF4X2lu ZGV4KQorICAgIGFib3J0ICgpOworCisgIHggPSBfX3NlY19yZWR1Y2VfbWlu IChhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyAgeSA9IF9fc2VjX3JlZHVj ZV9taW5faW5kICggYXJyYXkzWzpdICogYXJyYXk0WzpdKTsgCisjaWYgSEFW RV9JTworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykgCisgICAgcHJp bnRmKCIlNS4zZiAiLCBhcnJheTNbaWldICogYXJyYXk0W2lpXSk7CisgIHBy aW50ZigiXG4iKTsKKyAgcHJpbnRmKCJNaW4gPSAlNS4zZlx0IE1pbiBJbmRl eCA9ICUyZFxuIiwgeCwgeSk7CisjZW5kaWYKKworICAvKiBJbml0aWFsaXpl IGl0IHRvIHRoZSBmaXJzdCB2YXJpYWJsZS4gICovCisgIG1pbl92YWx1ZSA9 IGFycmF5M1swXSAqIGFycmF5NFswXTsKKyAgZm9yIChpaSA9IDA7IGlpIDwg MTA7IGlpKyspCisgICAgaWYgKGFycmF5M1tpaV0gKiBhcnJheTRbaWldIDwg bWluX3ZhbHVlKSB7CisgICAgICBtaW5fdmFsdWUgPSBhcnJheTNbaWldICog YXJyYXk0W2lpXTsKKyAgICAgIG1pbl9pbmRleCA9IGlpOworICAgIH0KKwor ICBpZiAoeCAhPSBtaW5fdmFsdWUpCisgICAgYWJvcnQgKCk7CisgIGlmICh5 ICE9IG1pbl9pbmRleCkKKyAgICBhYm9ydCAoKTsKKworICB4ID0gX19zZWNf cmVkdWNlX2FkZCAoYXJyYXkzWzpdICogYXJyYXk0WzpdKTsgCisgIHl5ID0g X19zZWNfcmVkdWNlX211bCAoIGFycmF5M1s6XSAqIGFycmF5NFs6XSk7IAor I2lmIEhBVkVfSU8KKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIAor ICAgIHByaW50ZigiJTUuM2YgIiwgYXJyYXkzW2lpXSAqIGFycmF5NFtpaV0p OworICBwcmludGYoIlxuIik7CisgIHByaW50ZigiQWRkID0gJTUuM2ZcdCBN dWwgPSAlZlxuIiwgeCwgeXkpOworI2VuZGlmCisKKyAgIC8qIEluaXRpYWxp emUgaXQgdG8gdGhlIGZpcnN0IHZhcmlhYmxlLiAgKi8KKyAgYWRkX3ZhbHVl ID0gMC4wMDAwOworICBtdWxfdmFsdWUgPSAxLjAwMDA7CisgIGZvciAoaWkg PSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFkZF92YWx1ZSAr PSAoYXJyYXkzW2lpXSAqIGFycmF5NFtpaV0pOworICAgICAgbXVsX3ZhbHVl ICo9IChhcnJheTNbaWldICogYXJyYXk0W2lpXSk7CisgICAgfQorCisgIGlm ICh4ICE9IGFkZF92YWx1ZSkKKyAgICBhYm9ydCAoKTsKKyAgaWYgKHl5ICE9 IG11bF92YWx1ZSkKKyAgICBhYm9ydCAoKTsKKyAgCisgIGZvciAoaWkgPSAw OyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGlmIChpaSUyICYmIGlp KQorCWFycmF5M1tpaV0gPSAoZG91YmxlKSgxLjAwMDAvKGRvdWJsZSlpaSk7 CisgICAgICBlbHNlCisJYXJyYXkzW2lpXSA9IChkb3VibGUpIGlpICsgMC4w MDsKKyAgICAgIGFycmF5NFtpaV0gPSAoZG91YmxlKSAoMS4wMDAwMC8gKGRv dWJsZSkoaWkrMSkpOworICAgIH0KKyAgeV9pbnQgPSBfX3NlY19yZWR1Y2Vf YW55X3plcm8gKGFycmF5M1s6XSAqIGFycmF5NFs6XSk7IAorICB5ID0gX19z ZWNfcmVkdWNlX2FsbF96ZXJvICggYXJyYXkzWzpdICogYXJyYXk0WzpdKTsK KworICBpZiAoeV9pbnQgIT0gMSkKKyAgICBhYm9ydCAoKTsKKworICBpZiAo eSAhPSAwKQorICAgIGFib3J0ICgpOworICAKKyNpZiBIQVZFX0lPCisgIGZv ciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSAKKyAgICBwcmludGYoIiU1LjNm ICIsIGFycmF5M1tpaV0gKiBhcnJheTRbaWldKTsKKyAgcHJpbnRmKCJcbiIp OworICBwcmludGYoIkFueSBaZXJvcyA9ICVkXHQgQWxsIFplcm9zID0gJWRc biIsIHlfaW50LCB5KTsKKyNlbmRpZgorICByZXR1cm4gMDsKK30KSW5kZXg6 IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlv bi9leGVjdXRlL2V4ZWN1dGUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3Rh dGlvbi9leGVjdXRlL2V4ZWN1dGUuZXhwCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2V4 ZWN1dGUvZXhlY3V0ZS5leHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAg QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIAor IyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorIyAKKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyMgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKKyMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisjIFRoaXMgZmlsZSB3YXMgd3JpdHRlbiBieSBCYWxhamkgVi4gSXll ciA8YmFsYWppLnYuaXllckBpbnRlbC5jb20+CisjIE1hbnkgdGhhbmtzIHRv IHRoZSBHQ0MgQy10b3J0dXJlIGNvbnRyaWJ1dG9ycy4KKwordmVyYm9zZSAi JHRvb2wgJGxpYmRpciIgMQorCitzZXQgbGlicmFyeV92YXIgW2dldF9tdWx0 aWxpYnNdCitkZy1pbml0CitzZXQgQ0lMS19UT1JUVVJFX09QVElPTlMgW2xp c3QgXAorCQkJICAgeyAtTzAgLWZjaWxrcGx1cyAgLXN0ZD1jOTl9IFwKKwkJ CSAgIHsgLU8xIC1mY2lsa3BsdXMgIC1zdGQ9Yzk5fSBcCisJCQkgICB7IC1P MiAtZmNpbGtwbHVzICAtc3RkPWM5OX0gXAorCQkJICAgeyAtTzMgLWZjaWxr cGx1cyAgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZ1bnJvbGwtbG9vcHMgLXN0 ZD1jOTl9IFwKKwkJCSAgIHsgLU8zIC1mY2lsa3BsdXMgIC1mb21pdC1mcmFt ZS1wb2ludGVyIC1mdW5yb2xsLWFsbC1sb29wcyAtZmlubGluZS1mdW5jdGlv bnMgLXN0ZD1jOTkgfSBcCisJCQkgICB7IC1PMyAtZmNpbGtwbHVzICAtZm9t aXQtZnJhbWUtcG9pbnRlciAtZnVucm9sbC1hbGwtbG9vcHMgLWZpbmxpbmUt ZnVuY3Rpb25zIC1mdHJlZS12ZWN0b3JpemUgLXN0ZD1jOTkgfSBcCisJCQkg ICB7IC1PMyAtZyAtZmNpbGtwbHVzICAtc3RkPWM5OX0gXAorCQkJICAgeyAt T3MgLWZjaWxrcGx1cyAgLXN0ZD1jOTl9IF0KKworCisKK2lmICR0cmFjZWxl dmVsIHRoZW4geworICAgIHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCisjIGxv YWQgc3VwcG9ydCBwcm9jcworbG9hZF9saWIgdG9ydHVyZS1vcHRpb25zLmV4 cAorbG9hZF9saWIgYy10b3J0dXJlLmV4cAorCit0b3J0dXJlLWluaXQKK3Nl dC10b3J0dXJlLW9wdGlvbnMgJENJTEtfVE9SVFVSRV9PUFRJT05TIHt7fX0g JENJTEtfVE9SVFVSRV9PUFRJT05TCisKKyMKKyMgbWFpbiB0ZXN0IGxvb3AK KyMKKworZm9yZWFjaCBzcmMgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRz cmNkaXIvJHN1YmRpci8qLmNdXSAgeworICAgICMgSWYgd2UncmUgb25seSB0 ZXN0aW5nIHNwZWNpZmljIGZpbGVzIGFuZCB0aGlzIGlzbid0IG9uZSBvZiB0 aGVtLCBza2lwIGl0LgorICAgIGlmICFbcnVudGVzdF9maWxlX3AgJHJ1bnRl c3RzICRzcmNdIHRoZW4geworCWNvbnRpbnVlCisgICAgfQorCisgICAgYy10 b3J0dXJlLWV4ZWN1dGUgJHNyYworfQorCit0b3J0dXJlLWZpbmlzaApJbmRl eDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0 aW9uL2V4ZWN1dGUvaWZfdGVzdC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3Rh dGlvbi9leGVjdXRlL2lmX3Rlc3QuYwkocmV2aXNpb24gMCkKKysrIGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVj dXRlL2lmX3Rlc3QuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTAgQEAK Kwordm9pZCBhYm9ydCAodm9pZCk7Cit2b2lkIGV4aXQoaW50KTsKKworaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgeCA9IDA7 CisgIGlmIChhcmdjID09IDEpCisgICAgeworICAgICAgY29uc3QgY2hhciAq YXJyYXlbXSA9IHsiYS5vdXQiLCAiMTAiLCAiMTUifTsJICAgICAKKyAgICAg IHggPSBtYWluMiAoMywgYXJyYXkpOworICAgIH0KKyAgZWxzZSBpZiAoYXJn YyA9PSAzKQorICAgIHggPSBtYWluMiAoYXJnYywgYXJndik7CisgIGVsc2UK KyAgICBhYm9ydCAoKTsKKyAKKyAgcmV0dXJuIHg7Cit9CisKKworaW50IG1h aW4yIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCB4ID0gMywg eSwgeiwgYXJyYXlbMTBdLCBhcnJheTJbMTBdLCBUd29kQXJyYXlbMTBdWzEw XSwgamosa2ssbGwgOworICBpbnQgYXJyYXkyX2NoZWNrWzEwXTsKKyAgaW50 IEZvdXJEQXJyYXlbMTBdWzEwXVsxMF1bMTBdOworICBpbnQgaWkgPSAwOyAK KworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAg ICBhcnJheVtpaV0gPSBhcmdjJTM7CisgICAgICBhcnJheTJbaWldPSAxMDsK KyAgICAgIGFycmF5Ml9jaGVja1tpaV0gPSAxMDsKKyAgICB9CisKKyAgaWYg KCFhcnJheVs6XSkKKyAgICBhcnJheTJbOl0gPSA1OworICBlbHNlCisgICAg YXJyYXkyWzpdID0gMTA7CisKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsg aWkrKykKKyAgICB7CisgICAgICBpZiAoIWFycmF5W2lpXSkKKwlhcnJheTJf Y2hlY2tbaWldID0gNTsKKyAgICAgIGVsc2UKKwlhcnJheTJfY2hlY2tbaWld ID0gMTA7CisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsr KQorICAgIGlmIChhcnJheTJfY2hlY2tbaWldICE9IGFycmF5MltpaV0pCisg ICAgICBhYm9ydCAoKTsKKyAgCisKKyAgCisgIGlmICghKGFycmF5WzA6MTA6 MV0gKyBhcnJheVswOjEwOjFdKSkKKyAgICBhcnJheTJbOl0gPSA1OworICBl bHNlCisgICAgYXJyYXkyWzpdID0gMTA7CisKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpKyspCisgICAgeworICAgICAgaWYgKCEoYXJyYXlbaWldKyBh cnJheVtpaV0pKQorCWFycmF5Ml9jaGVja1tpaV0gPSA1OworICAgICAgZWxz ZQorCWFycmF5Ml9jaGVja1tpaV0gPSAxMDsKKyAgICB9CisKKyAgZm9yIChp aSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgaWYgKGFycmF5Ml9jaGVja1tp aV0gIT0gYXJyYXkyW2lpXSkKKyAgICAgIGFib3J0ICgpOworICAKKworICAg ICAgCisgICAgICAgCisKKyAgeCA9IGF0b2kgKGFyZ3ZbMV0pLTEwOworICB5 ID0gYXRvaSAoYXJndlsxXSkvMjsKKyAgeiA9IChhdG9pIChhcmd2WzFdKSkv NTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7Cisg ICAgICBpZiAoaWkgJSAyKQorCWFycmF5W2lpXSA9IDA7CisgICAgICBlbHNl CisJYXJyYXlbaWldID0gMTsKKyAgICB9CisKKyAgLypwcmludGYoInggPSAl MmQgeSA9ICUyZCB6ID0gJTJkXG4iLCB4LCB5LCB6KTsgKi8KKworICBmb3Ig KGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBhcnJheVtpaV0gPSAxMDsK KworICAvKiBUaGlzIGlmIGxvb3Agd2lsbCBjaGFuZ2UgYWxsIHRoZSAxMCdz IHRvIDUncyAqLworICBpZiAoYXJyYXlbeDp5OnpdICE9IDkpCisgICAgYXJy YXkyWzpdID0gNTsKKyAgZWxzZQorICAgIGFycmF5Mls6XSA9IDEwOworCisg IGZvciAoaWkgPSB4OyBpaSA8ICh4K3kpOyBpaSArPSB6KQorICAgIHsKKyAg ICAgIGlmIChhcnJheVtpaV0gIT0gOSkKKwlhcnJheTJfY2hlY2tbaWldID0g NTsKKyAgICAgIGVsc2UKKwlhcnJheTJfY2hlY2tbaWldID0gMTA7CisgICAg fQorCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIGlmIChh cnJheTJfY2hlY2tbaWldICE9IGFycmF5MltpaV0pCisgICAgICBhYm9ydCAo KTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBhcnJh eTJbaWldID0gMTA7CisKKyAgLyogVGhpcyBpZiBsb29wIHdpbGwgY2hhbmdl IGFsbCB0aGUgMTAncyB0byA1J3MgKi8KKyAgaWYgKGFycmF5W2F0b2koYXJn dlsxXSktMTA6YXRvaShhcmd2WzFdKTogYXRvaShhcmd2WzFdKS81XSkKKyAg ICBhcnJheTJbOl0gPSA1OworICBlbHNlCisgICAgYXJyYXkyWzpdID0gMTA7 CisKKyAgZm9yIChpaSA9IGF0b2koYXJndlsxXSktMTA7IGlpIDwgYXRvaShh cmd2WzFdKSArIChhdG9pIChhcmd2WzFdKS0xMCk7CisgICAgICAgaWkgKz1h dG9pKGFyZ3ZbMV0pLzUpCisgICAgaWYgKGFycmF5W2lpXSkKKyAgICAgIGFy cmF5Ml9jaGVja1tpaV0gPSA1OworICAgIGVsc2UKKyAgICAgIGFycmF5Ml9j aGVja1tpaV0gPSAxMDsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkr KykKKyAgICBpZiAoYXJyYXkyX2NoZWNrW2lpXSAhPSBhcnJheTJbaWldKQor ICAgICAgYWJvcnQgKCk7CisgCisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7 IGlpKyspCisgICAgZm9yIChqaiA9IDA7IGpqIDwgMTA7IGpqKyspCisgICAg ICBUd29kQXJyYXlbaWldW2pqXSA9IGF0b2koYXJndlsxXSk7CisKKworICBm b3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAgICBhcnJh eTJbaWldID0gMTA7CisgICAgICBhcnJheTJfY2hlY2tbaWldID0gMTA7Cisg ICAgfQorCisgIC8qIGF0b2koYXJndlsxXSkgPT0gMTAsIHNvIGl0IHdpbGwg Y29udmVydCBhbGwgMTAncyB0byA1J3MgKi8KKyAgaWYgKFR3b2RBcnJheVs6 XVs6XSAhPSAxMCkgCisgICAgYXJyYXkyWzpdID0gMTA7IAorICBlbHNlCisg ICAgYXJyYXkyWzpdID0gNTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsg aWkrKykgeworICAgIGZvciAoamogPSAwOyBqaiA8IDEwOyBqaisrKSB7Cisg ICAgICBpZiAoVHdvZEFycmF5W2lpXVtqal0gIT0gMTApCisJYXJyYXkyX2No ZWNrW2lpXSA9IDEwOworICAgIH0KKyAgfQorCisgIGZvciAoaWkgPSAwOyBp aSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5MltpaV0gPSAxMDsK KyAgICAgIGFycmF5Ml9jaGVja1tpaV0gPSAxMDsKKyAgICB9CisKKyAgZm9y IChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgZm9yIChqaiA9IDA7IGpq IDwgMTA7IGpqKyspCisgICAgICBmb3IgKGtrID0gMDsga2sgPCAxMDsga2sr KykKKwlmb3IgKGxsID0gMDsgbGwgPCAxMDsgbGwrKykgCisJICBGb3VyREFy cmF5W2lpXVtqal1ba2tdW2xsXSA9IGF0b2koYXJndlsxXSk7CisgIAorICAv KiBhdG9pKGFyZ3ZbMV0pID09IDEwLCBzbyBpdCB3aWxsIGNvbnZlcnQgYWxs IDEwJ3MgdG8gNSdzICovCisgIGlmIChGb3VyREFycmF5WzpdWzpdWzpdWzpd ICE9IDEwKSAKKyAgICBhcnJheTJbOl0gPSAxMDsgCisgIGVsc2UKKyAgICBh cnJheTJbOl0gPSA1OworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsr KSB7CisgICAgZm9yIChqaiA9IDA7IGpqIDwgMTA7IGpqKyspIHsKKyAgICAg IGZvciAoa2sgPSAwOyBrayA8IDEwOyBraysrKSB7CisJZm9yIChsbCA9IDA7 IGxsIDwgMTA7IGxsKyspIHsKKwkgIGlmIChGb3VyREFycmF5W2lpXVtqal1b a2tdW2xsXSAhPSAxMCkKKwkgICAgYXJyYXkyX2NoZWNrW2lpXSA9IDEwOwor CX0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgCisgIGZvciAoaWkgPSAwOyBp aSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5MltpaV0gPSAxMDsK KyAgICAgIGFycmF5Ml9jaGVja1tpaV0gPSAxMDsKKyAgICB9CisKKyAgZm9y IChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgZm9yIChqaiA9IDA7IGpq IDwgMTA7IGpqKyspCisgICAgICBmb3IgKGtrID0gMDsga2sgPCAxMDsga2sr KykKKwlmb3IgKGxsID0gMDsgbGwgPCAxMDsgbGwrKykgCisJICBGb3VyREFy cmF5W2lpXVtqal1ba2tdW2xsXSA9IGF0b2koYXJndlsxXSk7CisgIAorICAv KiBhdG9pKGFyZ3ZbMV0pID09IDEwLCBzbyBpdCB3aWxsIGNvbnZlcnQgYWxs IDEwJ3MgdG8gNSdzICovCisgIGlmIChGb3VyREFycmF5WzA6MTA6MV1bMDo1 OjJdWzk6MTA6LTFdW3g6eTp6XSAhPSAxMCkgCisgICAgYXJyYXkyWzpdID0g MTA7IAorICBlbHNlCisgICAgYXJyYXkyWzpdID0gNTsKKworICBmb3IgKGlp ID0gMDsgaWkgPCAxMDsgaWkrKykgeworICAgIGZvciAoamogPSAwOyBqaiA8 IDEwOyBqaiArPSAyKSB7CisgICAgICBmb3IgKGtrID0gOTsga2sgPj0gMDsg a2stLSkgeworCWZvciAobGwgPSB4OyBsbCA8IDEwOyBsbCA9IGxsICs9IHop IHsKKwkgIGlmIChGb3VyREFycmF5W2lpXVtqal1ba2tdW2xsXSAhPSAxMCkK KwkgICAgYXJyYXkyX2NoZWNrW2lpXSA9IDEwOworCSAgZWxzZQorCSAgICBh cnJheTJfY2hlY2tbaWldID0gNTsKKwl9CisgICAgICB9CisgICAgfQorICB9 CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAg ICAgYXJyYXkyW2lpXSA9IDEwOworICAgICAgYXJyYXkyX2NoZWNrW2lpXSA9 IDEwOworICAgIH0KKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykK KyAgICBmb3IgKGpqID0gMDsgamogPCAxMDsgamorKykKKyAgICAgIGZvciAo a2sgPSAwOyBrayA8IDEwOyBraysrKQorCWZvciAobGwgPSAwOyBsbCA8IDEw OyBsbCsrKSAKKwkgIEZvdXJEQXJyYXlbaWldW2pqXVtra11bbGxdID0gYXRv aShhcmd2WzFdKTsKKyAgCisgIC8qIGF0b2koYXJndlsxXSkgPT0gMTAsIHNv IGl0IHdpbGwgY29udmVydCBhbGwgMTAncyB0byA1J3MgKi8KKyAgaWYgKEZv dXJEQXJyYXlbMDoxMDoxXVswOjU6Ml1bOToxMDotMV1beDp5OnpdICsKKyAg ICAgIEZvdXJEQXJyYXlbMDoxMDoxXVswOjU6Ml1bOTotMTA6MV1beDp5Onpd ICAhPSAyMCkgCisgICAgYXJyYXkyWzpdID0gMTA7IAorICBlbHNlCisgICAg YXJyYXkyWzpdID0gNTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkr KykgeworICAgIGZvciAoamogPSAwOyBqaiA8IDEwOyBqaiArPSAyKSB7Cisg ICAgICBmb3IgKGtrID0gOTsga2sgPj0gMDsga2stLSkgeworCWZvciAobGwg PSB4OyBsbCA8IDEwOyBsbCA9IGxsICs9IHopIHsKKwkgIGlmIChGb3VyREFy cmF5W2lpXVtqal1ba2tdW2xsXSAhPSAxMCkKKwkgICAgYXJyYXkyX2NoZWNr W2lpXSA9IDEwOworCSAgZWxzZQorCSAgICBhcnJheTJfY2hlY2tbaWldID0g NTsKKwl9CisgICAgICB9CisgICAgfQorICB9CisgIGV4aXQgKDApOworICBy ZXR1cm4gMDsKK30KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGst cGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL2J1aWx0aW5fZnVuY19kb3Vi bGUyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2V4ZWN1dGUvYnVp bHRpbl9mdW5jX2RvdWJsZTIuYwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRl L2J1aWx0aW5fZnVuY19kb3VibGUyLmMJKHJldmlzaW9uIDApCkBAIC0wLDAg KzEsNzcgQEAKKyNkZWZpbmUgSEFWRV9JTyAwCisKKyNpZiBIQVZFX0lPCisj aW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCit2b2lkIGV4aXQgKGludCk7 Cit2b2lkIGFib3J0ICh2b2lkKTsKKworCitpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCit7CisgIGludCBpaSxhcnJheVsxMF0sIHkgPSAwLCB5 X2ludCA9IDAsIGFycmF5MlsxMF0sIHlfaW50Mj0wLCB5Mj0wOworICBkb3Vi bGUgeCwgeXksIGFycmF5M1sxMF0sIGFycmF5NFsxMF07CisgIGludCBhbGxf emVybywgYWxsX25vbnplcm8sIGFueV96ZXJvLCBhbnlfbm9uemVybzsKKyAg Zm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgYXJy YXlbaWldID0gMDsKKyAgICAgIGFycmF5MltpaV0gPSA1OworICAgICAgaWYg KGlpJTIgJiYgaWkpCisJYXJyYXkzW2lpXSA9IChkb3VibGUpKDEuMDAwMC8o ZG91YmxlKWlpKTsKKyAgICAgIGVsc2UKKwlhcnJheTNbaWldID0gKGRvdWJs ZSkgaWkgKyAwLjAwOworICAgICAgYXJyYXk0W2lpXSA9IChkb3VibGUpICgx LjAwMDAwLyAoZG91YmxlKShpaSsxKSk7CisgICAgfQorICB5X2ludCA9IF9f c2VjX3JlZHVjZV9hbnlfbm9uemVybyAoYXJyYXkzWzpdICsgYXJyYXlbNF0p OyAKKyAgeV9pbnQyID0gX19zZWNfcmVkdWNlX2FueV96ZXJvIChhcnJheTNb Ol0gKyBhcnJheVs0XSk7IAorICB5ID0gX19zZWNfcmVkdWNlX2FsbF9ub256 ZXJvICgoYXJyYXkzWzpdICsgYXJyYXk0WzpdKSAqIChhcmdjLTEpKTsgCisg IHkyID0gX19zZWNfcmVkdWNlX2FsbF96ZXJvICgoYXJyYXkzWzpdICsgYXJy YXk0WzpdKSAqIChhcmdjLTEpKTsKKworICBhbnlfemVybyA9IDA7CisgIGFu eV9ub256ZXJvID0gMDsKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKysp CisgICAgeworICAgICAgaWYgKChhcnJheTNbaWldICsgYXJyYXlbNF0pID09 IDApCisJYW55X3plcm8gPSAxOworICAgICAgZWxzZQorCWFueV9ub256ZXJv ID0gMTsKKyAgICB9CisKKyAgaWYgKGFueV9ub256ZXJvICE9IHlfaW50KQor ICAgIGFib3J0ICgpOworICBpZiAoYW55X3plcm8gIT0geV9pbnQyKQorICAg IGFib3J0ICgpOworCisKKyAgYWxsX3plcm8gPSAwOworICBhbGxfbm9uemVy byA9IDA7CisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsK KyAgICAgIGlmICgoKGFycmF5M1tpaV0gKyBhcnJheTRbaWldKSAqIChhcmdj LTEpKSA9PSAwKQorCWFsbF96ZXJvID0gMTsKKyAgICAgIGVsc2UKKwlhbGxf bm9uemVybyA9IDE7CisgICAgfQorCisgIGlmICh5ICE9IGFsbF9ub256ZXJv KQorICAgIGFib3J0ICgpOworICBpZiAoYWxsX3plcm8gIT0geTIpCisgICAg YWJvcnQgKCk7CisgCisKKyNpZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBp aSA8IDEwOyBpaSsrKSB7CisgICAgcHJpbnRmKCIlNS4zZiAiLCBhcnJheTNb aWldICthcnJheTRbaWldKTsKKyAgfQorICBwcmludGYoIlxuIik7CisgIGZv ciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSB7CisgICAgcHJpbnRmKCIlNS4z ZiAiLCAoYXJyYXkzW2lpXSArIGFycmF5NFtpaV0pICogKGFyZ2MtMSkpOwor ICB9CisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCJBbnkgTm9uLXplcm9z ICgxc3QgbGluZSkgPSAlZFx0IEFsbCBub24temVyb3MgKDFzdCBsaW5lKSA9 ICVkXG4iLCAKKwkgeV9pbnQsIHkpOworICBwcmludGYoIkFueSB6ZXJvcyAo Mm5kIGxpbmUpID0gJWRcdCBBbGwgemVyb3MgKDJuZCBsaW5lKSA9ICVkXG4i LCB5X2ludDIsIHkyKTsKKyNlbmRpZgorICByZXR1cm4gMDsKK30KSW5kZXg6 IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlv bi9jb21waWxlL2FycmF5X3Rlc3RfTkQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlf bm90YXRpb24vY29tcGlsZS9hcnJheV90ZXN0X05ELmMJKHJldmlzaW9uIDAp CisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90 YXRpb24vY29tcGlsZS9hcnJheV90ZXN0X05ELmMJKHJldmlzaW9uIDApCkBA IC0wLDAgKzEsOTggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBhcnJheVsxMF1b MTVdLCBpaSA9IDAsIGpqID0gMCx4ID0gMCwgej0gMSAsIHkgPSAxMCA7Cisg IGludCBhcnJheV8yWzEwXVsxNV07CisgCisgIGlmIChhcmdjICE9IDMpCisg ICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgMTAgMTVc biIsIGFyZ3ZbMF0pOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgcHJp bnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09XG4iKTsgCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSB7 CisgICAgZm9yIChqaiA9IDA7IGpqPCAxNTsgamorKykgeworICAgICAgYXJy YXlbaWldW2pqXSA9IGlpK2pqOworICAgICAgYXJyYXlfMltpaV1bampdID0g MDsKKyAgICB9CisgIH0KKyAgYXJyYXlfMlswOjU6Ml1bMDo1OjNdID0gYXJy YXlbMDo1OjJdWzA6NTozXSArIDEgKyA1ICsgYXJyYXlbMF1bNV0gKyB4Owor CisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAg IGZvciAoamogPSAwOyBqaiA8IDE1OyBqaisrKQorCXsKKwkgIHByaW50Zigi JTJkICIsIGFycmF5XzJbaWldW2pqXSk7CisJfQorICAgICAgcHJpbnRmKCJc biIpOworICAgIH0KKworCisgIHByaW50ZigiPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7IAorICBmb3IgKGlp ID0gMDsgaWkgPCAxMDsgaWkrKykgeworICAgIGZvciAoamogPSAwOyBqajwg MTU7IGpqKyspIHsKKyAgICAgIGFycmF5W2lpXVtqal0gPSBpaStqajsKKyAg ICAgIGFycmF5XzJbaWldW2pqXSA9IDA7CisgICAgfQorICB9CisgIHggPSBh dG9pKGFyZ3ZbMV0pOworICB5ID0gYXRvaShhcmd2WzJdKTsKKyAgYXJyYXlf MlswOng6MV1bMDp5OjFdID0gYXJyYXlbMDp4OjFdWzA6eToxXSArIHggKyB5 ICsgYXJyYXlbMDp4OjFdWzA6eToxXTsKKworICBmb3IgKGlpID0gMDsgaWkg PCAxMDsgaWkrKykKKyAgICB7CisgICAgICBmb3IgKGpqID0gMDsgamogPCAx NTsgamorKykKKwl7CisJICBwcmludGYoIiUyZCAiLCBhcnJheV8yW2lpXVtq al0pOworCX0KKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgcHJp bnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09XG4iKTsgCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSB7 CisgICAgZm9yIChqaiA9IDA7IGpqPCAxNTsgamorKykgeworICAgICAgYXJy YXlbaWldW2pqXSA9IGlpK2pqOworICAgICAgYXJyYXlfMltpaV1bampdID0g MDsKKyAgICB9CisgIH0KKyAgeCA9IGF0b2koYXJndlsxXSk7CisgIHkgPSBh dG9pKGFyZ3ZbMl0pOworICB6ID0gKDIwLSBhdG9pIChhcmd2WzFdKSkvYXRv aShhcmd2WzFdKTsKKyAgLyogKDIwLTEwKS8xMCBldmFsdWF0ZXMgdG8gMSBh bGwgdGhlIHRpbWUgOi0pLiAqLworICBhcnJheV8yWzA6eDp6XVswOnk6el0g PSBhcnJheVswOng6el1bMDp5OnpdICsgYXJyYXlbMDp4OnpdWzA6eTp6XSAr IHkgKyB6OworICBwcmludGYoInggPSAlMmRcdHkgPSAlMmRcdHogPSAlMmRc biIsIHgsIHksIHopOworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykK KyAgICB7CisgICAgICBmb3IgKGpqID0gMDsgamogPCAxNTsgamorKykKKwl7 CisJICBwcmludGYoIiUyZCAiLCBhcnJheV8yW2lpXVtqal0pOworCX0KKyAg ICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyNpZiAxCisgIHByaW50Zigi PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PVxuIik7IAorICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykgeworICAg IGZvciAoamogPSAwOyBqajwgMTU7IGpqKyspIHsKKyAgICAgIGFycmF5W2lp XVtqal0gPSBpaStqajsKKyAgICAgIGFycmF5XzJbaWldW2pqXSA9IDA7Cisg ICAgfQorICB9CisgIHggPSBhcmdjLTM7CisgIHkgPSAyMC1hdG9pKGFyZ3Zb MV0pOworICB6ID0gKDIwLSBhdG9pIChhcmd2WzFdKSkvYXRvaShhcmd2WzFd KTsKKyAgLyogKDIwLTEwKS8xMCBldmFsdWF0ZXMgdG8gMSBhbGwgdGhlIHRp bWUgOi0pLiAqLworICBhcnJheV8yWyhhcmdjLTMpOigyMC1hdG9pKGFyZ3Zb MV0pKTooMjAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFdKV1bKGFyZ2Mt Myk6KDMwLWF0b2koYXJndlsyXSkpOiAoKDMwLWF0b2koYXJndlsyXSkpL2F0 b2koYXJndlsyXSkpXSA9IGFycmF5WyhhcmdjLTMpOjIwLWF0b2koYXJndlsx XSk6KDIwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSldWyhhcmdjLTMp OigzMC1hdG9pKGFyZ3ZbMl0pKTogKDMwLWF0b2koYXJndlsyXSkpL2F0b2ko YXJndlsyXSldICsgYXJyYXlbKGFyZ2MtMyk6MjAtYXRvaShhcmd2WzFdKToo MjAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFdKV1bKGFyZ2MtMyk6KDMw LWF0b2koYXJndlsyXSkpOiAoMzAtYXRvaShhcmd2WzJdKSkvYXRvaShhcmd2 WzJdKV0gKiBhcnJheVsoYXJnYy0zKToyMC1hdG9pKGFyZ3ZbMV0pOigyMC1h dG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pXVsoYXJnYy0zKTooMzAtYXRv aShhcmd2WzJdKSk6ICgzMC1hdG9pKGFyZ3ZbMl0pKS9hdG9pKGFyZ3ZbMl0p XTsKKyAgcHJpbnRmKCJ4ID0gJTJkXHR5ID0gJTJkXHR6ID0gJTJkXG4iLCB4 LCB5LCB6KTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAg eworICAgICAgZm9yIChqaiA9IDA7IGpqIDwgMTU7IGpqKyspCisJeworCSAg cHJpbnRmKCIlNGQgIiwgYXJyYXlfMltpaV1bampdKTsKKwl9CisgICAgICBw cmludGYoIlxuIik7CisgICAgfQorI2VuZGlmCisgIHJldHVybiAwOworfQpJ bmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25v dGF0aW9uL2NvbXBpbGUvYXJyYXlfdGVzdDEuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJy YXlfbm90YXRpb24vY29tcGlsZS9hcnJheV90ZXN0MS5jCShyZXZpc2lvbiAw KQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25v dGF0aW9uL2NvbXBpbGUvYXJyYXlfdGVzdDEuYwkocmV2aXNpb24gMCkKQEAg LTAsMCArMSw3NCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBhcnJheVsxMF0sIGlp ID0gMCwgeCA9IDIsIHo9IDAgLCB5ID0gMCA7CisKKyAgaWYgKGFyZ2MgPCAy KQorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCJVc2FnZTolcyA8TlVN QkVSPlxuIiwgYXJndlswXSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQor ICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBhcnJheVtpaV0g PSAxMDsKKworICBhcnJheVswOjEwOjFdID0gMTU7CisKKyAgcHJpbnRmKCI9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 XG4iKTsKKyAgZm9yIChpaSA9IDA7IGlpPDEwOyBpaSsrKQorICAgIHByaW50 ZigiYXJyYXlbJTJkXSA9ICUyZFxuIiwgaWksIGFycmF5W2lpXSk7CisKKyAg YXJyYXlbMDoxMDoyXSA9IDIwOworCisgIHByaW50ZigiPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisgIGZv ciAoaWkgPSAwOyBpaTwxMDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUy ZF0gPSAlMmRcbiIsIGlpLCBhcnJheVtpaV0pOworCisKKyAgeCA9IGF0b2ko YXJndlsxXSk7CisgIHogPSAoMTAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2 WzFdKTsKKyAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgcHJpbnRmKCJ4ID0gJTJkXHR6 ID0gJTJkXG4iLCB4LCB6KTsKKyAgYXJyYXlbeDo1OnpdID0gNTA7CisgIGZv ciAoaWkgPSAwOyBpaTwxMDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUy ZF0gPSAlMmRcbiIsIGlpLCBhcnJheVtpaV0pOworCisgIHggPSBhdG9pKGFy Z3ZbMV0pOworICB6ID0gKDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsx XSk7CisgIHkgPSAxMC1hdG9pKGFyZ3ZbMV0pOworICBwcmludGYoIj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIp OworICBwcmludGYoInggPSAlMmRcdHkgPSAlMmRcdHogPSAlMmRcbiIsIHgs IHksIHopOworICBhcnJheVt4Onk6el0gPSA1MDU7CisgIGZvciAoaWkgPSAw OyBpaTwxMDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUyZF0gPSAlMmRc biIsIGlpLCBhcnJheVtpaV0pOworCisgIHggPSBhdG9pKGFyZ3ZbMV0pOwor ICB6ID0gKDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSk7CisgIHkg PSAxMC1hdG9pKGFyZ3ZbMV0pOworICBwcmludGYoIj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworICBwcmlu dGYoInggPSAlMmRcdHkgPSAlMmRcdHogPSAlMmRcbiIsIHgsIHksIHopOwor ICBhcnJheVt4Onk6KCgxMC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0p KV0gPSAyNTsKKyAgZm9yIChpaSA9IDA7IGlpPDEwOyBpaSsrKQorICAgIHBy aW50ZigiYXJyYXlbJTJkXSA9ICUyZFxuIiwgaWksIGFycmF5W2lpXSk7CisK KyAgeCA9IGF0b2koYXJndlsxXSk7CisgIHogPSAoMTAtYXRvaShhcmd2WzFd KSkvYXRvaShhcmd2WzFdKTsKKyAgeSA9IDEwLWF0b2koYXJndlsxXSk7Cisg IHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PVxuIik7CisgIHByaW50ZigieCA9ICUyZFx0eSA9ICUyZFx0 eiA9ICUyZFxuIiwgeCwgeSwgeik7CisgIGFycmF5W2F0b2koYXJndlsxXSk6 KDEwLWF0b2koYXJndlsxXSkpOigoMTAtYXRvaShhcmd2WzFdKSkvYXRvaShh cmd2WzFdKSldID0KKwkJCQkJIDE0MDA7CisgIGZvciAoaWkgPSAwOyBpaTwx MDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUyZF0gPSAlMmRcbiIsIGlp LCBhcnJheVtpaV0pOworCisgIGFycmF5W2F0b2koIjUiKTo1OjFdID0gNTU1 NTsKKyAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09XG4iKTsKKyAgZm9yIChpaSA9IDA7IGlpPDEwOyBp aSsrKQorICAgIHByaW50ZigiYXJyYXlbJTJkXSA9ICUyZFxuIiwgaWksIGFy cmF5W2lpXSk7CisKKyAgYXJyYXlbYXRvaSgiNSIpOmF0b2koIjUiKTphdG9p KCIxIildID0gOTk5OTsKKyAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgZm9yIChpaSA9 IDA7IGlpPDEwOyBpaSsrKQorICAgIHByaW50ZigiYXJyYXlbJTJkXSA9ICUy ZFxuIiwgaWksIGFycmF5W2lpXSk7CisKKyAgcmV0dXJuIDA7Cit9CkluZGV4 OiBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRp b24vY29tcGlsZS9hcnJheV90ZXN0Mi5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9u b3RhdGlvbi9jb21waWxlL2FycmF5X3Rlc3QyLmMJKHJldmlzaW9uIDApCisr KyBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRp b24vY29tcGlsZS9hcnJheV90ZXN0Mi5jCShyZXZpc2lvbiAwKQpAQCAtMCww ICsxLDEyMiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBhcnJheVsxMF0sIGFycmF5 MlsxMF0sIGlpID0gMCwgeCA9IDIsIHo9IDAgLCB5ID0gMCA7CisgIGlmIChh cmdjIDwgMikKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwiVXNhZ2U6 JXMgPE5VTUJFUj5cbiIsIGFyZ3ZbMF0pOworICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7 CisgICAgICBhcnJheVtpaV0gPSAxMDsKKyAgICAgIGFycmF5MltpaV0gPSA1 MDAwMDAwOworICAgIH0KKworICBhcnJheTJbMDoxMDoxXSA9IGFycmF5WzA6 MTA6MV07CisKKyAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgZm9yIChpaSA9IDA7IGlp PDEwOyBpaSsrKQorICAgIHByaW50ZigiYXJyYXlbJTJkXSA9ICU3ZFx0YXJy YXkyWyUyZF0gPSAlN2RcbiIsIGlpLCBhcnJheVtpaV0sIAorCSAgIGlpLCBh cnJheTJbaWldKTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykK KyAgICB7CisgICAgICBhcnJheVtpaV0gPSAxMDsKKyAgICAgIGFycmF5Mltp aV0gPSA1MDAwMDAwOworICAgIH0KKyAgYXJyYXkyWzA6MTA6Ml0gPSBhcnJh eVswOjEwOjJdOworCisgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisgIGZvciAoaWkgPSAw OyBpaTwxMDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUyZF0gPSAlN2Rc dGFycmF5MlslMmRdID0gJTdkXG4iLCBpaSwgYXJyYXlbaWldLCAKKwkgICBp aSwgYXJyYXkyW2lpXSk7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlp KyspCisgICAgeworICAgICAgYXJyYXlbaWldID0gMTA7CisgICAgICBhcnJh eTJbaWldID0gNTAwMDAwMDsKKyAgICB9CisgIHggPSBhdG9pKGFyZ3ZbMV0p OworICB6ID0gKDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSk7Cisg IHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PVxuIik7CisgIHByaW50ZigieCA9ICUyZFx0eiA9ICUyZFxu IiwgeCwgeik7CisgIGFycmF5Mlt4OjU6el0gPSBhcnJheVt4OjU6el07Cisg IGZvciAoaWkgPSAwOyBpaTwxMDsgaWkrKykKKyAgICBwcmludGYoImFycmF5 WyUyZF0gPSAlN2RcdGFycmF5MlslMmRdID0gJTdkXG4iLCBpaSwgYXJyYXlb aWldLCAKKwkgICBpaSwgYXJyYXkyW2lpXSk7CisKKyAgZm9yIChpaSA9IDA7 IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgYXJyYXlbaWldID0gNTAw OworICAgICAgYXJyYXkyW2lpXSA9IDEwMDAwMDA7CisgICAgfQorICB4ID0g YXRvaShhcmd2WzFdKTsKKyAgeiA9ICgxMC1hdG9pKGFyZ3ZbMV0pKS9hdG9p KGFyZ3ZbMV0pOworICB5ID0gMTAtYXRvaShhcmd2WzFdKTsKKyAgcHJpbnRm KCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09XG4iKTsKKyAgcHJpbnRmKCJ4ID0gJTJkXHR5ID0gJTJkXHR6ID0gJTJk XG4iLCB4LCB5LCB6KTsKKyAgYXJyYXkyW3g6eTp6XSA9IGFycmF5W3g6eTp6 XTsKKyAgZm9yIChpaSA9IDA7IGlpPDEwOyBpaSsrKQorICAgIHByaW50Zigi YXJyYXlbJTJkXSA9ICU3ZFx0YXJyYXkyWyUyZF0gPSAlN2RcbiIsIGlpLCBh cnJheVtpaV0sIAorCSAgIGlpLCBhcnJheTJbaWldKTsKKworICBmb3IgKGlp ID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAgICBhcnJheVtpaV0g ID0gNTAwOworICAgICAgYXJyYXkyW2lpXSA9IDEwMDAwMDA7CisgICAgfQor ICB4ID0gYXRvaShhcmd2WzFdKTsKKyAgeiA9ICgxMC1hdG9pKGFyZ3ZbMV0p KS9hdG9pKGFyZ3ZbMV0pOworICB5ID0gMTAtYXRvaShhcmd2WzFdKTsKKyAg cHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09XG4iKTsKKyAgcHJpbnRmKCJ4ID0gJTJkXHR5ID0gJTJkXHR6 ID0gJTJkXG4iLCB4LCB5LCB6KTsKKyAgYXJyYXlbeDp5OigoMTAtYXRvaShh cmd2WzFdKSkvYXRvaShhcmd2WzFdKSldID0gCisgICAgYXJyYXkyW3g6eToo KDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSkpXTsKKyAgZm9yIChp aSA9IDA7IGlpPDEwOyBpaSsrKQorICAgIHByaW50ZigiYXJyYXlbJTJkXSA9 ICU3ZFx0YXJyYXkyWyUyZF0gPSAlN2RcbiIsIGlpLCBhcnJheVtpaV0sIAor CSAgIGlpLCBhcnJheTJbaWldKTsKKworICB4ID0gYXRvaShhcmd2WzFdKTsK KyAgeiA9ICgxMC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pOworICB5 ID0gMTAtYXRvaShhcmd2WzFdKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7 IGlpKyspCisgICAgeworICAgICAgYXJyYXlbaWldICA9IDUwMDsKKyAgICAg IGFycmF5MltpaV0gPSAxMDAwMDAwOworICAgIH0KKyAgcHJpbnRmKCI9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4i KTsKKyAgcHJpbnRmKCJ4ID0gJTJkXHR5ID0gJTJkXHR6ID0gJTJkXG4iLCB4 LCB5LCB6KTsKKyAgYXJyYXlbYXRvaShhcmd2WzFdKTooMTAtYXRvaShhcmd2 WzFdKSk6KCgxMC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pKV0gPQor ICBhcnJheTJbYXRvaShhcmd2WzFdKTooMTAtYXRvaShhcmd2WzFdKSk6KCgx MC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pKV07CisgIGZvciAoaWkg PSAwOyBpaTwxMDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUyZF0gPSAl N2RcdGFycmF5MlslMmRdID0gJTdkXG4iLCBpaSwgYXJyYXlbaWldLCAKKwkg ICBpaSwgYXJyYXkyW2lpXSk7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7 IGlpKyspCisgICAgeworICAgICAgYXJyYXlbaWldICA9IDQ7CisgICAgICBh cnJheTJbaWldID0gMjsKKyAgICB9CisKKyAgYXJyYXlbYXRvaSgiNSIpOjU6 MV0gPSBhcnJheTJbYXRvaSgiNSIpOjU6MV07CisgIHByaW50ZigiPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7 CisgIGZvciAoaWkgPSAwOyBpaTwxMDsgaWkrKykKKyAgICBwcmludGYoImFy cmF5WyUyZF0gPSAlMmRcdGFycmF5MlslMmRdID0gJTJkXG4iLCBpaSwgYXJy YXlbaWldLCAKKwkgICBpaSwgYXJyYXkyW2lpXSk7CisKKyAgZm9yIChpaSA9 IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgYXJyYXlbaWldICA9 IDU7CisgICAgICBhcnJheTJbaWldID0gMTsKKyAgICB9CisgIGFycmF5W2F0 b2koIjUiKTphdG9pKCI1Iik6YXRvaSgiMSIpXSA9IAorCQkJICAgICBhcnJh eTJbYXRvaSgiNSIpOmF0b2koIjUiKTphdG9pKCIxIildOworICBwcmludGYo Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT1cbiIpOworICBmb3IgKGlpID0gMDsgaWk8MTA7IGlpKyspCisgICAgcHJp bnRmKCJhcnJheVslMmRdID0gJTJkXHRhcnJheTJbJTJkXSA9ICUyZFxuIiwg aWksIGFycmF5W2lpXSwgCisJICAgaWksIGFycmF5MltpaV0pOworCisgIHJl dHVybiAwOworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1w bHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUvZ2F0aGVyX3NjYXR0ZXIuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5k Zy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vY29tcGlsZS9nYXRoZXJfc2Nh dHRlci5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv Y2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUvZ2F0aGVyX3NjYXR0 ZXIuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorI2lmIEhBVkVf SU8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisvKiAjaW5jbHVkZSA8 Y3N0ZGxpYj4gKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQoreworICBpbnQgYXJyYXlbMTBdWzEwXSwgYXJyYXkyWzEwXSwgYXJyYXkz WzEwXSwgeCA9IDAsIHk7CisgIGludCB4X2NvcnJlY3QsIHlfY29ycmVjdCwg aWksIGpqID0gMDsKKyAgZmxvYXQgYXJyYXk0WzEwXVsxMF1bMTBdWzEwXTsK KyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAg Zm9yIChqaiA9IDA7IGpqIDwgMTA7IGpqKyspCisJeworCSAgYXJyYXlbaWld W2pqXSA9IDEraWk7CisJICBhcnJheTJbaWldPSAyOworCSAgYXJyYXkzW2lp XT0gMzsKKwl9CisgICAgfQorICAKKyAgYXJyYXlbYXJyYXkyWzpdXVthcnJh eTNbOl1dID0gMTAwMDsKKyAgCisjaWYgSEFWRV9JTworICBmb3IgKGlpID0g MDsgaWkgPCAxMDsgaWkrKykgeworICAgIGZvciAoamogPSAwOyBqaiA8IDEw OyBqaisrKSB7CisgICAgICBwcmludGYoIiU0ZFx0IiwgYXJyYXlbaWldW2pq XSk7CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKKyAgfQorI2VuZGlmCisK KyAgYXJyYXk0W2FycmF5Mls6XV1bYXJyYXkzWzA6MTA6MV1dW2FycmF5Mlsw OjEwOjFdXVthcnJheTNbMDoxMDoxXV0gPQorICAgIChmbG9hdClhcnJheVth cnJheTJbOl1dW2FycmF5M1s6XV07IAorCisjaWYgSEFWRV9JTworICBmb3Ig KGlpID0gMDsgaWkgPCAxMDsgaWkrKykgeworICAgICAgZm9yIChqaiA9IDA7 IGpqIDwgMTA7IGpqKyspIHsKKwkgIGZvciAoa2sgPSAwOyBrayA8IDEwOyBr aysrKSB7CisJICAgICAgZm9yIChsbCA9IDA7IGxsIDwgMTA7IGxsKyspIHsK KwkJICBwcmludGYoIiU0ZFxuIiwgYXJyYXk0W2lpXVtqal1ba2tdW2xsXSk7 CisJICAgICAgfQorCSAgfQorICAgICAgfQorICB9CisjZW5kaWYgIAorICBy ZXR1cm4gMDsKK30KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGst cGx1cy9hcnJheV9ub3RhdGlvbi9jb21waWxlL3NlY19pbXBsaWNpdF9leC5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9jb21waWxlL3NlY19pbXBs aWNpdF9leC5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUvc2VjX2ltcGxp Y2l0X2V4LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKyNkZWZp bmUgSEFWRV9JTyAxCisKKyNpZiBIQVZFX0lPCisjaW5jbHVkZSA8c3RkaW8u aD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBjaGFyIF9f c2VjX3JlZHVjZV9hZGQgKGludCAqKTsgKi8KK2ludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKK3sKKyAgaW50IGpqLCBraywgYXJyYXlfM0NbMTBd WzEwXVsxMF07CisgIGludCBpaSxhcnJheVsxMF0sIHkgPSAwLCB5X2ludCA9 IDAsIGFycmF5MlsxMF0sIGFycmF5XzNbMTBdWzEwXVsxMF07CisgIGRvdWJs ZSB4LCB5eSwgYXJyYXkzWzEwXSwgYXJyYXk0WzEwXTsKKworICBhcnJheVs6 XSA9IF9fc2VjX2ltcGxpY2l0X2luZGV4ICgwKTsKKyAgYXJyYXlfM1s6XVs6 XVs6XSA9IF9fc2VjX2ltcGxpY2l0X2luZGV4ICgxKSArIF9fc2VjX2ltcGxp Y2l0X2luZGV4KDApICsKKyAgICBfX3NlY19pbXBsaWNpdF9pbmRleCAoMik7 CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgZm9yIChq aiA9IDA7IGpqIDwgMTA7IGpqKyspCisgICAgICBmb3IgKGtrID0gMDsga2sg PCAxMDsga2srKykKKwl7CisJICBhcnJheV8zQ1tpaV1bampdW2trXSA9IGlp K2pqK2trOworCX0KKyNpZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8 IDEwOyBpaSsrKQorICAgIGZvciAoamogPSAwOyBqaiA8IDEwOyBqaisrKQor ICAgICAgZm9yIChrayA9IDA7IGtrIDwgMTA7IGtrKyspCisJeworCSAgcHJp bnRmKCJDb21wdXRlZDogJTNkXHQgQ29ycmVjdDogJTNkXHQiLCBhcnJheV8z W2lpXVtqal1ba2tdLCAKKwkJIGFycmF5XzNDW2lpXVtqal1ba2tdKTsKKwkg IGlmIChhcnJheV8zW2lpXVtqal1ba2tdID09IGFycmF5XzNDW2lpXVtqal1b a2tdKQorCSAgICBwcmludGYoIk9LXG4iKTsKKwkgIGVsc2UKKwkgICAgcHJp bnRmKCJFUlJPUlxuIik7CisJfQorI2VuZGlmCisKKyAgCisgIHJldHVybiAw OworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2Fy cmF5X25vdGF0aW9uL2NvbXBpbGUvY29tcGlsZS5leHAKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVz L2FycmF5X25vdGF0aW9uL2NvbXBpbGUvY29tcGlsZS5leHAJKHJldmlzaW9u IDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlf bm90YXRpb24vY29tcGlsZS9jb21waWxlLmV4cAkocmV2aXNpb24gMCkKQEAg LTAsMCArMSw2NSBAQAorIyAgIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorIyAKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMgCisjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZp bGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IEJhbGFqaSBWLiBJeWVy IDxiYWxhamkudi5peWVyQGludGVsLmNvbT4KKworCitsb2FkX2xpYiBnY2Mt ZGcuZXhwCisKK2RnLWluaXQKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1u b2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNdXSAiIC1mY2lsa3BsdXMi ICIgIgorZGctZmluaXNoCisKK2RnLWluaXQKK2RnLXJ1bnRlc3QgW2xzb3J0 IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNdXSAiIC1P MCAtZmNpbGtwbHVzIiAiICIKK2RnLWZpbmlzaAorCitkZy1pbml0CitkZy1y dW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJk aXIvKi5jXV0gIiAtTzEgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5pc2gKKwor ZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4g JHNyY2Rpci8kc3ViZGlyLyouY11dICIgLU8yIC1mdHJlZS12ZWN0b3JpemUg LWZjaWxrcGx1cyIgIiAiCitkZy1maW5pc2gKKworZGctaW5pdAorZGctcnVu dGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGly LyouY11dICIgLU8zIC1mY2lsa3BsdXMiICIgIgorZGctZmluaXNoCisKKwor ZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4g JHNyY2Rpci8kc3ViZGlyLyouY11dICIgLWcgLWZjaWxrcGx1cyIgIiAiCitk Zy1maW5pc2gKKworZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2dsb2Ig LW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY11dICIgLWcgLU8wIC1m Y2lsa3BsdXMiICIgIgorZGctZmluaXNoCisKK2RnLWluaXQKK2RnLXJ1bnRl c3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8q LmNdXSAiIC1nIC1PMSAtZmNpbGtwbHVzIiAiICIKK2RnLWZpbmlzaAorCitk Zy1pbml0CitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAk c3JjZGlyLyRzdWJkaXIvKi5jXV0gIiAtZyAtTzIgLWZ0cmVlLXZlY3Rvcml6 ZSAtZmNpbGtwbHVzIiAiICIKK2RnLWZpbmlzaAorCitkZy1pbml0CitkZy1y dW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJk aXIvKi5jXV0gIiAtZyAtTzMgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5pc2gK KworZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxh aW4gJHNyY2Rpci8kc3ViZGlyL2FycmF5X25vdGF0aW9uX3Rlc3RzL2Vycm9y cy8qLmNdXSAiIC1PMyAtZnRyZWUtdmVjdG9yaXplIC1mY2lsa3BsdXMgLWci ICIgIgorZGctZmluaXNoCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy9j aWxrLXBsdXMvYXJyYXlfbm90YXRpb24vY29tcGlsZS9idWlsdGluX2Z1bmNf ZG91YmxlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUv YnVpbHRpbl9mdW5jX2RvdWJsZS5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBp bGUvYnVpbHRpbl9mdW5jX2RvdWJsZS5jCShyZXZpc2lvbiAwKQpAQCAtMCww ICsxLDczIEBACisjZGVmaW5lIEhBVkVfSU8gMQorCisjaWYgSEFWRV9JTwor I2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIu aD4KKworLyogY2hhciBfX3NlY19yZWR1Y2VfYWRkIChpbnQgKik7ICovCitp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBpaSxh cnJheVsxMF0sIHkgPSAwLCB5X2ludCA9IDAsIGFycmF5MlsxMF07CisgIGRv dWJsZSB4LCB5eSwgYXJyYXkzWzEwXSwgYXJyYXk0WzEwXTsKKyAgZm9yIChp aSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgYXJyYXlbaWld ID0gMStpaTsKKyAgICAgIGFycmF5MltpaV09IDI7IAorICAgIH0KKworICBm b3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAgICBpZiAo aWklMiAmJiBpaSkKKwlhcnJheTNbaWldID0gKGRvdWJsZSkoMS4wMDAwLyhk b3VibGUpaWkpOworICAgICAgZWxzZQorCWFycmF5M1tpaV0gPSAoZG91Ymxl KSBpaSArIDAuMTA7CisgICAgICBhcnJheTRbaWldID0gKGRvdWJsZSkgKDEu MDAwMDAvIChkb3VibGUpKGlpKzEpKTsKKyAgICB9CisKKyAgLyogYXJyYXlb Ol0gPSA1OyAqLworICB4ID0gX19zZWNfcmVkdWNlX21heCAoYXJyYXkzWzpd ICogYXJyYXk0WzpdKTsgCisgIHkgPSBfX3NlY19yZWR1Y2VfbWF4X2luZCAo IGFycmF5M1s6XSAqIGFycmF5NFs6XSk7IAorI2lmIEhBVkVfSU8KKyAgZm9y IChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIAorICAgIHByaW50ZigiJTUuM2Yg IiwgYXJyYXkzW2lpXSAqIGFycmF5NFtpaV0pOworICBwcmludGYoIlxuIik7 CisgIHByaW50ZigiTWF4ID0gJTUuM2ZcdCBNYXggSW5kZXggPSAlMmRcbiIs IHgsIHkpOworI2VuZGlmCisKKyAgeCA9IF9fc2VjX3JlZHVjZV9taW4gKGFy cmF5M1s6XSAqIGFycmF5NFs6XSk7IAorICB5ID0gX19zZWNfcmVkdWNlX21p bl9pbmQgKCBhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyNpZiBIQVZFX0lP CisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSAKKyAgICBwcmludGYo IiU1LjNmICIsIGFycmF5M1tpaV0gKiBhcnJheTRbaWldKTsKKyAgcHJpbnRm KCJcbiIpOworICBwcmludGYoIk1pbiA9ICU1LjNmXHQgTWluIEluZGV4ID0g JTJkXG4iLCB4LCB5KTsKKyNlbmRpZgorCisgIHggPSBfX3NlY19yZWR1Y2Vf YWRkIChhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyAgeXkgPSBfX3NlY19y ZWR1Y2VfbXVsICggYXJyYXkzWzpdICogYXJyYXk0WzpdKTsgCisjaWYgSEFW RV9JTworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykgCisgICAgcHJp bnRmKCIlNS4zZiAiLCBhcnJheTNbaWldICogYXJyYXk0W2lpXSk7CisgIHBy aW50ZigiXG4iKTsKKyAgcHJpbnRmKCJBZGQgPSAlNS4zZlx0IE11bCA9ICVm XG4iLCB4LCB5eSk7CisjZW5kaWYKKworICBmb3IgKGlpID0gMDsgaWkgPCAx MDsgaWkrKykKKyAgICB7CisgICAgICBpZiAoaWklMiAmJiBpaSkKKwlhcnJh eTNbaWldID0gKGRvdWJsZSkoMS4wMDAwLyhkb3VibGUpaWkpOworICAgICAg ZWxzZQorCWFycmF5M1tpaV0gPSAoZG91YmxlKSBpaSArIDAuMDA7CisgICAg ICBhcnJheTRbaWldID0gKGRvdWJsZSkgKDEuMDAwMDAvIChkb3VibGUpKGlp KzEpKTsKKyAgICB9CisgIHlfaW50ID0gX19zZWNfcmVkdWNlX2FueV96ZXJv IChhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyAgeSA9IF9fc2VjX3JlZHVj ZV9hbGxfemVybyAoIGFycmF5M1s6XSAqIGFycmF5NFs6XSk7IAorI2lmIEhB VkVfSU8KKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIAorICAgIHBy aW50ZigiJTUuM2YgIiwgYXJyYXkzW2lpXSAqIGFycmF5NFtpaV0pOworICBw cmludGYoIlxuIik7CisgIHByaW50ZigiQW55IFplcm9zID0gJWRcdCBBbGwg WmVyb3MgPSAlZFxuIiwgeV9pbnQsIHkpOworI2VuZGlmCisgIHJldHVybiAw OworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2Fy cmF5X25vdGF0aW9uL2NvbXBpbGUvaWZfdGVzdC5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9h cnJheV9ub3RhdGlvbi9jb21waWxlL2lmX3Rlc3QuYwkocmV2aXNpb24gMCkK KysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3Rh dGlvbi9jb21waWxlL2lmX3Rlc3QuYwkocmV2aXNpb24gMCkKQEAgLTAsMCAr MSwxNjIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgeCA9IDMsIHksIHosIGFy cmF5WzEwXSwgYXJyYXkyWzEwXSwgVHdvZEFycmF5WzEwXVsxMF0sIGpqLGtr LGxsIDsKKyAgaW50IEZvdXJEQXJyYXlbMTBdWzEwXVsxMF1bMTBdOworICBp bnQgaWkgPSAwOyAKKworICBpZiAoYXJnYyAhPSAzKQorICAgIHsKKyAgICAg IGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDEwIDE1XG4iLCBhcmd2WzBd KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpKyspCisgICAgeworICAgICAgYXJyYXlbaWldID0gYXJnYyUz OworICAgICAgYXJyYXkyW2lpXT0gMTA7CisgICAgfQorICAKKyAgZm9yIChp aSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgcHJpbnRmKCIlNGQgIiwgYXJy YXlbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworCisgIGlmICghYXJyYXlbOl0p CisgICAgYXJyYXkyWzpdID0gNTsKKyAgZWxzZQorICAgIGFycmF5Mls6XSA9 IDEwOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHBy aW50ZigiJTRkICIsIGFycmF5MltpaV0pOworICBwcmludGYoIlxuIik7CisK KyAgaWYgKCEoYXJyYXlbMDoxMDoxXSArIGFycmF5WzA6MTA6MV0pKQorICAg IGFycmF5Mls6XSA9IDU7CisgIGVsc2UKKyAgICBhcnJheTJbOl0gPSAxMDsK KworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBwcmludGYo IiU0ZCAiLCBhcnJheTJbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworCisgIHgg PSBhdG9pIChhcmd2WzFdKS0xMDsKKyAgeSA9IGF0b2kgKGFyZ3ZbMV0pLzI7 CisgIHogPSAoYXRvaSAoYXJndlsxXSkpLzU7CisKKyAgZm9yIChpaSA9IDA7 IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgaWYgKGlpICUgMikKKwlh cnJheVtpaV0gPSAwOworICAgICAgZWxzZQorCWFycmF5W2lpXSA9IDE7Cisg ICAgfQorCisgIC8qcHJpbnRmKCJ4ID0gJTJkIHkgPSAlMmQgeiA9ICUyZFxu IiwgeCwgeSwgeik7ICovCisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlp KyspCisgICAgYXJyYXlbaWldID0gMTA7CisKKyAgLyogVGhpcyBpZiBsb29w IHdpbGwgY2hhbmdlIGFsbCB0aGUgMTAncyB0byA1J3MgKi8KKyAgaWYgKGFy cmF5W3g6eTp6XSAhPSA5KQorICAgIGFycmF5Mls6XSA9IDU7CisgIGVsc2UK KyAgICBhcnJheTJbOl0gPSAxMDsKKworICBmb3IgKGlpID0gMDsgaWkgPCAx MDsgaWkrKykKKyAgICBwcmludGYoIiU0ZCAiLCBhcnJheTJbaWldKTsKKyAg cHJpbnRmKCJcbiIpOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsr KQorICAgIGFycmF5MltpaV0gPSAxMDsKKworICAvKiBUaGlzIGlmIGxvb3Ag d2lsbCBjaGFuZ2UgYWxsIHRoZSAxMCdzIHRvIDUncyAqLworICBpZiAoYXJy YXlbYXRvaShhcmd2WzFdKS0xMDphdG9pKGFyZ3ZbMV0pOiBhdG9pKGFyZ3Zb MV0pLzVdKQorICAgIGFycmF5Mls6XSA9IDU7CisgIGVsc2UKKyAgICBhcnJh eTJbOl0gPSAxMDsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykK KyAgICBwcmludGYoIiU0ZCAiLCBhcnJheTJbaWldKTsKKyAgcHJpbnRmKCJc biIpOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIGZv ciAoamogPSAwOyBqaiA8IDEwOyBqaisrKQorICAgICAgVHdvZEFycmF5W2lp XVtqal0gPSBhdG9pKGFyZ3ZbMV0pOworCisKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpKyspCisgICAgYXJyYXkyW2lpXSA9IDEwOworCisgIC8qIGF0 b2koYXJndlsxXSkgPT0gMTAsIHNvIGl0IHdpbGwgY29udmVydCBhbGwgMTAn cyB0byA1J3MgKi8KKyAgaWYgKFR3b2RBcnJheVs6XVs6XSAhPSAxMCkgCisg ICAgYXJyYXkyWzpdID0gMTA7IAorICBlbHNlCisgICAgYXJyYXkyWzpdID0g NTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBwcmlu dGYoIiU0ZCAiLCBhcnJheTJbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworCisg IGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIGFycmF5MltpaV0g PSAxMDsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBm b3IgKGpqID0gMDsgamogPCAxMDsgamorKykKKyAgICAgIGZvciAoa2sgPSAw OyBrayA8IDEwOyBraysrKQorCWZvciAobGwgPSAwOyBsbCA8IDEwOyBsbCsr KSAKKwkgIEZvdXJEQXJyYXlbaWldW2pqXVtra11bbGxdID0gYXRvaShhcmd2 WzFdKTsKKyAgCisgIC8qIGF0b2koYXJndlsxXSkgPT0gMTAsIHNvIGl0IHdp bGwgY29udmVydCBhbGwgMTAncyB0byA1J3MgKi8KKyAgaWYgKEZvdXJEQXJy YXlbOl1bOl1bOl1bOl0gIT0gMTApIAorICAgIGFycmF5Mls6XSA9IDEwOyAK KyAgZWxzZQorICAgIGFycmF5Mls6XSA9IDU7CisKKyAgZm9yIChpaSA9IDA7 IGlpIDwgMTA7IGlpKyspCisgICAgcHJpbnRmKCIlNGQgIiwgYXJyYXkyW2lp XSk7CisgIHByaW50ZigiXG4iKTsKKworICAKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpKyspCisgICAgYXJyYXkyW2lpXSA9IDEwOworCisgIGZvciAo aWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIGZvciAoamogPSAwOyBqaiA8 IDEwOyBqaisrKQorICAgICAgZm9yIChrayA9IDA7IGtrIDwgMTA7IGtrKysp CisJZm9yIChsbCA9IDA7IGxsIDwgMTA7IGxsKyspIAorCSAgRm91ckRBcnJh eVtpaV1bampdW2trXVtsbF0gPSBhdG9pKGFyZ3ZbMV0pOworICAKKyAgLyog YXRvaShhcmd2WzFdKSA9PSAxMCwgc28gaXQgd2lsbCBjb252ZXJ0IGFsbCAx MCdzIHRvIDUncyAqLworICBpZiAoRm91ckRBcnJheVswOjEwOjFdWzA6NToy XVs5OjEwOi0xXVt4Onk6el0gIT0gMTApIAorICAgIGFycmF5Mls6XSA9IDEw OyAKKyAgZWxzZQorICAgIGFycmF5Mls6XSA9IDU7CisKKyAgZm9yIChpaSA9 IDA7IGlpIDwgMTA7IGlpKyspCisgICAgcHJpbnRmKCIlNGQgIiwgYXJyYXky W2lpXSk7CisgIHByaW50ZigiXG4iKTsKKworICAgIGZvciAoaWkgPSAwOyBp aSA8IDEwOyBpaSsrKQorICAgIGFycmF5MltpaV0gPSAxMDsKKworICBmb3Ig KGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBmb3IgKGpqID0gMDsgamog PCAxMDsgamorKykKKyAgICAgIGZvciAoa2sgPSAwOyBrayA8IDEwOyBraysr KQorCWZvciAobGwgPSAwOyBsbCA8IDEwOyBsbCsrKSAKKwkgIEZvdXJEQXJy YXlbaWldW2pqXVtra11bbGxdID0gYXRvaShhcmd2WzFdKTsKKyAgCisgIC8q IGF0b2koYXJndlsxXSkgPT0gMTAsIHNvIGl0IHdpbGwgY29udmVydCBhbGwg MTAncyB0byA1J3MgKi8KKyAgaWYgKEZvdXJEQXJyYXlbMDoxMDoxXVswOjU6 Ml1bOToxMDotMV1beDp5OnpdICsKKyAgICAgIEZvdXJEQXJyYXlbMDoxMDox XVswOjU6Ml1bOTotMTA6MV1beDp5OnpdICAhPSAyMCkgCisgICAgYXJyYXky WzpdID0gMTA7IAorICBlbHNlCisgICAgYXJyYXkyWzpdID0gNTsKKworICBm b3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBwcmludGYoIiU0ZCAi LCBhcnJheTJbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworCisgIAorICByZXR1 cm4gMDsKK30KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1 cy9hcnJheV9ub3RhdGlvbi9jb21waWxlL2J1aWx0aW5fZnVuY19kb3VibGUy LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUvYnVpbHRp bl9mdW5jX2RvdWJsZTIuYwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3Vp dGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9jb21waWxlL2J1 aWx0aW5fZnVuY19kb3VibGUyLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs MTAxIEBACisjZGVmaW5lIEhBVkVfSU8gMQorCisjaWYgSEFWRV9JTworI2lu Y2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4K KworLyogY2hhciBfX3NlY19yZWR1Y2VfYWRkIChpbnQgKik7ICovCitpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBpaSxhcnJh eVsxMF0sIHkgPSAwLCB5X2ludCA9IDAsIGFycmF5MlsxMF0sIHlfaW50Mj0w LCB5Mj0wOworICBkb3VibGUgeCwgeXksIGFycmF5M1sxMF0sIGFycmF5NFsx MF07CisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAg ICAgIGFycmF5W2lpXSA9IDEraWk7CisgICAgICBhcnJheTJbaWldPSAyOyAK KyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAg eworICAgICAgaWYgKGlpJTIgJiYgaWkpCisJYXJyYXkzW2lpXSA9IChkb3Vi bGUpKDEuMDAwMC8oZG91YmxlKWlpKTsKKyAgICAgIGVsc2UKKwlhcnJheTNb aWldID0gKGRvdWJsZSkgaWkgKyAwLjEwOworICAgICAgYXJyYXk0W2lpXSA9 IChkb3VibGUpICgxLjAwMDAwLyAoZG91YmxlKShpaSsxKSk7CisgICAgfQor CisgIC8qIGFycmF5WzpdID0gNTsgKi8KKyAgeCA9IF9fc2VjX3JlZHVjZV9t YXggKGFycmF5M1s6XSAqIGFycmF5NFs6XSk7IAorICB5ID0gX19zZWNfcmVk dWNlX21heF9pbmQgKCBhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyNpZiBI QVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSAKKyAgICBw cmludGYoIiU1LjNmICIsIGFycmF5M1tpaV0gKiBhcnJheTRbaWldKTsKKyAg cHJpbnRmKCJcbiIpOworICBwcmludGYoIk1heCA9ICU1LjNmXHQgTWF4IElu ZGV4ID0gJTJkXG4iLCB4LCB5KTsKKyNlbmRpZgorCisgIHggPSBfX3NlY19y ZWR1Y2VfbWluIChhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyAgeSA9IF9f c2VjX3JlZHVjZV9taW5faW5kICggYXJyYXkzWzpdICogYXJyYXk0WzpdKTsg CisjaWYgSEFWRV9JTworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykg CisgICAgcHJpbnRmKCIlNS4zZiAiLCBhcnJheTNbaWldICogYXJyYXk0W2lp XSk7CisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCJNaW4gPSAlNS4zZlx0 IE1pbiBJbmRleCA9ICUyZFxuIiwgeCwgeSk7CisjZW5kaWYKKworICB4ID0g X19zZWNfcmVkdWNlX2FkZCAoYXJyYXkzWzpdICogYXJyYXk0WzpdKTsgCisg IHl5ID0gX19zZWNfcmVkdWNlX211bCAoIGFycmF5M1s6XSAqIGFycmF5NFs6 XSk7IAorI2lmIEhBVkVfSU8KKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlp KyspIAorICAgIHByaW50ZigiJTUuM2YgIiwgYXJyYXkzW2lpXSAqIGFycmF5 NFtpaV0pOworICBwcmludGYoIlxuIik7CisgIHByaW50ZigiQWRkID0gJTUu M2ZcdCBNdWwgPSAlZlxuIiwgeCwgeXkpOworI2VuZGlmCisKKyAgZm9yIChp aSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgaWYgKGlpJTIg JiYgaWkpCisJYXJyYXkzW2lpXSA9IChkb3VibGUpKDEuMDAwMC8oZG91Ymxl KWlpKTsKKyAgICAgIGVsc2UKKwlhcnJheTNbaWldID0gKGRvdWJsZSkgaWkg KyAwLjAwOworICAgICAgYXJyYXk0W2lpXSA9IChkb3VibGUpICgxLjAwMDAw LyAoZG91YmxlKShpaSsxKSk7CisgICAgfQorICB5X2ludCA9IF9fc2VjX3Jl ZHVjZV9hbnlfemVybyAoYXJyYXkzWzpdICogYXJyYXk0WzpdKTsgCisgIHkg PSBfX3NlY19yZWR1Y2VfYWxsX3plcm8gKCBhcnJheTNbOl0gKiBhcnJheTRb Ol0pOyAKKyNpZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBp aSsrKSAKKyAgICBwcmludGYoIiU1LjNmICIsIGFycmF5M1tpaV0gKiBhcnJh eTRbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIkFueSBaZXJv cyA9ICVkXHQgQWxsIFplcm9zID0gJWRcbiIsIHlfaW50LCB5KTsKKyNlbmRp ZgorCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAg ICAgIGFycmF5W2lpXSA9IDA7CisgICAgICBhcnJheTJbaWldID0gNTsKKyAg ICAgIGlmIChpaSUyICYmIGlpKQorCWFycmF5M1tpaV0gPSAoZG91YmxlKSgx LjAwMDAvKGRvdWJsZSlpaSk7CisgICAgICBlbHNlCisJYXJyYXkzW2lpXSA9 IChkb3VibGUpIGlpICsgMC4wMDsKKyAgICAgIGFycmF5NFtpaV0gPSAoZG91 YmxlKSAoMS4wMDAwMC8gKGRvdWJsZSkoaWkrMSkpOworICAgIH0KKyAgeV9p bnQgPSBfX3NlY19yZWR1Y2VfYW55X25vbnplcm8gKGFycmF5M1s6XSArIGFy cmF5WzRdKTsgCisgIHlfaW50MiA9IF9fc2VjX3JlZHVjZV9hbnlfemVybyAo YXJyYXkzWzpdICsgYXJyYXlbNF0pOyAKKyAgeSA9IF9fc2VjX3JlZHVjZV9h bGxfbm9uemVybyAoKGFycmF5M1s6XSArIGFycmF5NFs6XSkgKiAoYXJnYy0x KSk7IAorICB5MiA9IF9fc2VjX3JlZHVjZV9hbGxfemVybyAoKGFycmF5M1s6 XSArIGFycmF5NFs6XSkgKiAoYXJnYy0xKSk7IAorI2lmIEhBVkVfSU8KKyAg Zm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIHsKKyAgICBwcmludGYoIiU1 LjNmICIsIGFycmF5M1tpaV0gK2FycmF5NFtpaV0pOworICB9CisgIHByaW50 ZigiXG4iKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIHsKKyAg ICBwcmludGYoIiU1LjNmICIsIChhcnJheTNbaWldICsgYXJyYXk0W2lpXSkg KiAoYXJnYy0xKSk7CisgIH0KKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYo IkFueSBOb24temVyb3MgKDFzdCBsaW5lKSA9ICVkXHQgQWxsIG5vbi16ZXJv cyAoMm5kIGxpbmUpID0gJWRcbiIsIAorCSB5X2ludCwgeSk7CisgIHByaW50 ZigiQW55IHplcm9zICgxc3QgbGluZSkgPSAlZFx0IEFsbCB6ZXJvcyAoMm5k IGxpbmUpID0gJWRcbiIsIHlfaW50MiwgeTIpOworI2VuZGlmCisgIHJldHVy biAwOworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVz L2FycmF5X25vdGF0aW9uL2Vycm9ycy9yYW5rX21pc21hdGNoLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2ls ay1wbHVzL2FycmF5X25vdGF0aW9uL2Vycm9ycy9yYW5rX21pc21hdGNoLmMJ KHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBs dXMvYXJyYXlfbm90YXRpb24vZXJyb3JzL3JhbmtfbWlzbWF0Y2guYwkocmV2 aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorLyoge2RnLWRvIGNvbXBpbGUg fSAqLworLyoge2RnLW9wdGlvbnMgfSAqLworCitpbnQgbWFpbiAoaW50IGFy Z2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgeCA9IDA7CisgIGlmIChhcmdj ID09IDEpCisgICAgeworICAgICAgY29uc3QgY2hhciAqYXJyYXlbXSA9IHsi YS5vdXQiLCAiNSJ9OworICAgICAgeCA9IG1haW4yICgyLCBhcnJheSk7Cisg ICAgfQorICBlbHNlCisgICAgeCA9IG1haW4yIChhcmdjLCBhcmd2KTsKKwor ICByZXR1cm4geDsKK30KKworaW50IG1haW4yIChpbnQgYXJnYywgY2hhciAq KmFyZ3YpCit7CisgIGludCB4ID0gMDsKKyAgaW50IGFycmF5WzEwXVsxMF0s IGFycmF5MlsxMF07CisKKyAgYXJyYXlbOl1bOl0gPSBhcnJheVs6XTsgLyog eyBkZy1lcnJvciAicmFuayBtaXNtYXRjaCBiZXR3ZWVuIiB9ICovCisKKyAg eCA9IGFycmF5Mls6XTsgLyogeyBkZy1lcnJvciAiY2Fubm90IGJlIHNjYWxh ciB3aGVuIiB9ICovCisKKyAgcmV0dXJuIDA7Cit9CkluZGV4OiBnY2MvdGVz dHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3Jz L3NlY19yZWR1Y2VfbWF4X21pbl9pbmQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlf bm90YXRpb24vZXJyb3JzL3NlY19yZWR1Y2VfbWF4X21pbl9pbmQuYwkocmV2 aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9h cnJheV9ub3RhdGlvbi9lcnJvcnMvc2VjX3JlZHVjZV9tYXhfbWluX2luZC5j CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACisvKiB7ZGctZG8gY29t cGlsZSB9ICovCisvKiB7ZGctb3B0aW9ucyB9ICovCisKK2ludCBtYWluIChp bnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCB4ID0gMDsKKyAgaWYg KGFyZ2MgPT0gMSkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICphcnJheVtd ID0geyJhLm91dCIsICI1In07CisgICAgICB4ID0gbWFpbjIgKDIsIGFycmF5 KTsKKyAgICB9CisgIGVsc2UKKyAgICB4ID0gbWFpbjIgKGFyZ2MsIGFyZ3Yp OworCisgIHJldHVybiB4OworfQorCitpbnQgbWFpbjIgKGludCBhcmdjLCBj aGFyICoqYXJndikKK3sKKyAgaW50IGFycmF5WzEwXVsxMF0sIGFycmF5Mlsx MF07CisgIGludCB4LCB5OworICB4ID0gX19zZWNfcmVkdWNlX21heF9pbmQg KGFycmF5WzpdWzpdKTsgLyogeyBkZy1lcnJvciAiY2Fubm90IGhhdmUgYXJy YXlzIHdpdGggZGltZW5zaW9uIGdyZWF0ZXIgdGhhbiIgfSAqLworCisgIHkg PSBfX3NlY19yZWR1Y2VfbWF4X2luZCAoYXJyYXkyWzpdKTsgLyogdGhpcyBz aG91bGQgYmUgT0suICovCisKKyAgeCA9IF9fc2VjX3JlZHVjZV9taW5faW5k IChhcnJheVs6XVs6XSk7IC8qIHsgZGctZXJyb3IgImNhbm5vdCBoYXZlIGFy cmF5cyB3aXRoIGRpbWVuc2lvbiBncmVhdGVyIHRoYW4iIH0gKi8KKworICB5 ID0gX19zZWNfcmVkdWNlX21pbl9pbmQgKGFycmF5Mls6XSk7IC8qIHRoaXMg c2hvdWxkIGJlIE9LLiAqLworCisgIHJldHVybiAwOworfQpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2Vy cm9ycy9zZWNfaW1wbGljaXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRp b24vZXJyb3JzL3NlY19pbXBsaWNpdC5jCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2Vy cm9ycy9zZWNfaW1wbGljaXQuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy NSBAQAorLyoge2RnLWRvIGNvbXBpbGUgfSAqLworLyoge2RnLW9wdGlvbnMg fSAqLworCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorewor ICBpbnQgeCA9IDA7CisgIGlmIChhcmdjID09IDEpCisgICAgeworICAgICAg Y29uc3QgY2hhciAqYXJyYXlbXSA9IHsiYS5vdXQiLCAiNSJ9OworICAgICAg eCA9IG1haW4yICgyLCBhcnJheSk7CisgICAgfQorICBlbHNlCisgICAgeCA9 IG1haW4yIChhcmdjLCBhcmd2KTsKKworICByZXR1cm4geDsKK30KKworaW50 IG1haW4yIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBhcnJh eVsxMF1bMTBdLCBhcnJheTJbMTBdOworCisgIGFycmF5WzpdWzpdID0gX19z ZWNfaW1wbGljaXRfaW5kZXgoNSkgKyBhcnJheVs6XVs6XTsgLyogeyBkZy1l cnJvciAiX19zZWNfaW1wbGljaXRfaW5kZXggYXJndW1lbnQiIH0gKi8KKwor ICByZXR1cm4gMDsKK30KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2Np bGstcGx1cy9hcnJheV9ub3RhdGlvbi9lcnJvcnMvZXJyb3JzLmV4cAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy9j aWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3JzL2Vycm9ycy5leHAJKHJl dmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMv YXJyYXlfbm90YXRpb24vZXJyb3JzL2Vycm9ycy5leHAJKHJldmlzaW9uIDAp CkBAIC0wLDAgKzEsNjUgQEAKKyMgICBDb3B5cmlnaHQgKEMpIDIwMTIgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyMgCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIAorIyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIyA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBCYWxhamkgVi4g SXllciA8YmFsYWppLnYuaXllckBpbnRlbC5jb20+CisKKworbG9hZF9saWIg Z2NjLWRnLmV4cAorCitkZy1pbml0CitkZy1ydW50ZXN0IFtsc29ydCBbZ2xv YiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jXV0gIiAtZmNpbGtw bHVzIiAiICIKK2RnLWZpbmlzaAorCitkZy1pbml0CitkZy1ydW50ZXN0IFts c29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jXV0g IiAtTzAgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5pc2gKKworZGctaW5pdAor ZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8k c3ViZGlyLyouY11dICIgLU8xIC1mY2lsa3BsdXMiICIgIgorZGctZmluaXNo CisKK2RnLWluaXQKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBs YWluICRzcmNkaXIvJHN1YmRpci8qLmNdXSAiIC1PMiAtZnRyZWUtdmVjdG9y aXplIC1mY2lsa3BsdXMiICIgIgorZGctZmluaXNoCisKK2RnLWluaXQKK2Rn LXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1 YmRpci8qLmNdXSAiIC1PMyAtZmNpbGtwbHVzIiAiICIKK2RnLWZpbmlzaAor CisKK2RnLWluaXQKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBs YWluICRzcmNkaXIvJHN1YmRpci8qLmNdXSAiIC1nIC1mY2lsa3BsdXMiICIg IgorZGctZmluaXNoCisKK2RnLWluaXQKK2RnLXJ1bnRlc3QgW2xzb3J0IFtn bG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNdXSAiIC1nIC1P MCAtZmNpbGtwbHVzIiAiICIKK2RnLWZpbmlzaAorCitkZy1pbml0CitkZy1y dW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJk aXIvKi5jXV0gIiAtZyAtTzEgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5pc2gK KworZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxh aW4gJHNyY2Rpci8kc3ViZGlyLyouY11dICIgLWcgLU8yIC1mdHJlZS12ZWN0 b3JpemUgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5pc2gKKworZGctaW5pdAor ZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8k c3ViZGlyLyouY11dICIgLWcgLU8zIC1mY2lsa3BsdXMiICIgIgorZGctZmlu aXNoCisKK2RnLWluaXQKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2Nv bXBsYWluICRzcmNkaXIvJHN1YmRpci9hcnJheV9ub3RhdGlvbl90ZXN0cy9l cnJvcnMvKi5jXV0gIiAtTzMgLWZ0cmVlLXZlY3Rvcml6ZSAtZmNpbGtwbHVz IC1nIiAiICIKK2RnLWZpbmlzaApJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2Vycm9ycy9zZWNfaW1wbGlj aXQyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2Vycm9ycy9zZWNf aW1wbGljaXQyLmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2dj Yy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3JzL3NlY19pbXBs aWNpdDIuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAorLyoge2Rn LWRvIGNvbXBpbGUgfSAqLworLyoge2RnLW9wdGlvbnMgfSAqLworCitpbnQg bWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgeCA9IDA7 CisgIGlmIChhcmdjID09IDEpCisgICAgeworICAgICAgY29uc3QgY2hhciAq YXJyYXlbXSA9IHsiYS5vdXQiLCAiNSJ9OworICAgICAgeCA9IG1haW4yICgy LCBhcnJheSk7CisgICAgfQorICBlbHNlCisgICAgeCA9IG1haW4yIChhcmdj LCBhcmd2KTsKKworICByZXR1cm4geDsKK30KKworaW50IG1haW4yIChpbnQg YXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBhcnJheVsxMF1bMTBdLCBh cnJheTJbMTBdOworCisgIGFycmF5WzpdWzpdID0gX19zZWNfaW1wbGljaXRf aW5kZXgoYXJnYykgKyBhcnJheVs6XVs6XTsgLyogeyBkZy1lcnJvciAiX19z ZWNfaW1wbGljaXRfaW5kZXggcGFyYW1ldGVyIiB9ICovCisgIHJldHVybiAw OworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2Fy cmF5X25vdGF0aW9uL2Vycm9ycy9wYXJzZXJfZXJyb3JzLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1w bHVzL2FycmF5X25vdGF0aW9uL2Vycm9ycy9wYXJzZXJfZXJyb3JzLmMJKHJl dmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMv YXJyYXlfbm90YXRpb24vZXJyb3JzL3BhcnNlcl9lcnJvcnMuYwkocmV2aXNp b24gMCkKQEAgLTAsMCArMSwyNSBAQAorLyoge2RnLWRvIGNvbXBpbGUgfSAq LworLyoge2RnLW9wdGlvbnMgfSAqLworCitpbnQgbWFpbiAoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQoreworICBpbnQgeCA9IDA7CisgIGlmIChhcmdjID09 IDEpCisgICAgeworICAgICAgY29uc3QgY2hhciAqYXJyYXlbXSA9IHsiYS5v dXQiLCAiNSJ9OworICAgICAgeCA9IG1haW4yICgyLCBhcnJheSk7CisgICAg fQorICBlbHNlCisgICAgeCA9IG1haW4yIChhcmdjLCBhcmd2KTsKKworICBy ZXR1cm4geDsKK30KKworaW50IG1haW4yIChpbnQgYXJnYywgY2hhciAqKmFy Z3YpCit7CisgIGludCBhcnJheVsxMF1bMTBdLCBhcnJheTJbMTBdOworICAK KyAgYXJyYXkyWzpdID0gYXJyYXkyWzogOyAgLyogeyBkZy1lcnJvciAiZXhw ZWN0ZWQgJ10nIiB9ICovCisKKyAgcmV0dXJuIDA7Cit9IC8qIHsgZGctZXJy b3IgImV4cGVjdGVkICc7JyBiZWZvcmUiIH0gKi8KSW5kZXg6IGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9lcnJvcnMv cGFyc2VyX2Vycm9yczIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24v ZXJyb3JzL3BhcnNlcl9lcnJvcnMyLmMJKHJldmlzaW9uIDApCisrKyBnY2Mv dGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJy b3JzL3BhcnNlcl9lcnJvcnMyLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs MjUgQEAKKy8qIHtkZy1kbyBjb21waWxlIH0gKi8KKy8qIHtkZy1vcHRpb25z IH0gKi8KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sK KyAgaW50IHggPSAwOworICBpZiAoYXJnYyA9PSAxKQorICAgIHsKKyAgICAg IGNvbnN0IGNoYXIgKmFycmF5W10gPSB7ImEub3V0IiwgIjUifTsKKyAgICAg IHggPSBtYWluMiAoMiwgYXJyYXkpOworICAgIH0KKyAgZWxzZQorICAgIHgg PSBtYWluMiAoYXJnYywgYXJndik7CisKKyAgcmV0dXJuIHg7Cit9CisKK2lu dCBtYWluMiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgYXJy YXlbMTBdWzEwXSwgYXJyYXkyWzEwXTsKKyAgCisgIGFycmF5Mls6XSA9IGFy cmF5MlsxOjI6XSA7ICAvKiB7IGRnLWVycm9yICJleHBlY3RlZCBleHByZXNz aW9uIGJlZm9yZSIgfSAqLworCisgIHJldHVybiAwOyAvKiB7IGRnLWVycm9y ICJleHBlY3RlZCAnOycgYmVmb3JlIiB9ICovCit9CkluZGV4OiBnY2MvdGVz dHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3Jz L3BhcnNlcl9lcnJvcnMzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9u L2Vycm9ycy9wYXJzZXJfZXJyb3JzMy5jCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2Vy cm9ycy9wYXJzZXJfZXJyb3JzMy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDI1IEBACisvKiB7ZGctZG8gY29tcGlsZSB9ICovCisvKiB7ZGctb3B0aW9u cyB9ICovCisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7 CisgIGludCB4ID0gMDsKKyAgaWYgKGFyZ2MgPT0gMSkKKyAgICB7CisgICAg ICBjb25zdCBjaGFyICphcnJheVtdID0geyJhLm91dCIsICI1In07CisgICAg ICB4ID0gbWFpbjIgKDIsIGFycmF5KTsKKyAgICB9CisgIGVsc2UKKyAgICB4 ID0gbWFpbjIgKGFyZ2MsIGFyZ3YpOworCisgIHJldHVybiB4OworfQorCitp bnQgbWFpbjIgKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGFy cmF5WzEwXVsxMF0sIGFycmF5MlsxMF07CisgIAorICBhcnJheTJbOl0gPSBh cnJheTJbMTo6XSA7ICAvKiB7IGRnLWVycm9yICJleHBlY3RlZCBleHByZXNz aW9uIGJlZm9yZSIgfSAqLworCisgIHJldHVybiAwOyAvKiB7IGRnLWVycm9y ICJleHBlY3RlZCAnOycgYmVmb3JlIiB9ICovCit9CkluZGV4OiBnY2MvdGVz dHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3Jz L3BhcnNlcl9lcnJvcnM0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9u L2Vycm9ycy9wYXJzZXJfZXJyb3JzNC5jCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2Vy cm9ycy9wYXJzZXJfZXJyb3JzNC5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDI1IEBACisvKiB7ZGctZG8gY29tcGlsZSB9ICovCisvKiB7ZGctb3B0aW9u cyB9ICovCisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7 CisgIGludCB4ID0gMDsKKyAgaWYgKGFyZ2MgPT0gMSkKKyAgICB7CisgICAg ICBjb25zdCBjaGFyICphcnJheVtdID0geyJhLm91dCIsICI1In07CisgICAg ICB4ID0gbWFpbjIgKDIsIGFycmF5KTsKKyAgICB9CisgIGVsc2UKKyAgICB4 ID0gbWFpbjIgKGFyZ2MsIGFyZ3YpOworCisgIHJldHVybiB4OworfQorCitp bnQgbWFpbjIgKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGFy cmF5WzEwXVsxMF0sIGFycmF5MlsxMF07CisgIAorICBhcnJheTJbOl0gPSBh cnJheTJbOjpdIDsgIC8qIHsgZGctZXJyb3IgIiBleHBlY3RlZCAnXScgYmVm b3JlICc6JyB0b2tlbiIgfSAqLworCisgIHJldHVybiAwOworfQpJbmRleDog Z2NjL01ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdj Yy9NYWtlZmlsZS5pbgkocmV2aXNpb24gMTkxNzY1KQorKysgZ2NjL01ha2Vm aWxlLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ0LDYgKzExNDQsNyBAQAog CSQoR0dDKSBcCiAJYWxpYXMubyBcCiAJYWxsb2MtcG9vbC5vIFwKKwlhcnJh eS1ub3RhdGlvbi1jb21tb24ubyBcCiAJYXV0by1pbmMtZGVjLm8gXAogCWJi LXJlb3JkZXIubyBcCiAJYml0bWFwLm8gXApAQCAtMzM0MSw2ICszMzQyLDgg QEAKICAgIGluc24tY29uZmlnLmggJChCQVNJQ19CTE9DS19IKSAkKFJFQ09H X0gpICQoT0JTVEFDS19IKSAkKEJJVE1BUF9IKSBcCiAgICAkKEVYUFJfSCkg JChFWENFUFRfSCkgJChSRUdTX0gpICQoVFJFRV9QQVNTX0gpICQoREZfSCkg ZGNlLmggXAogICAgbG93ZXItc3VicmVnLmgKK2FycmF5LW5vdGF0aW9uLWNv bW1vbi5vOiBhcnJheS1ub3RhdGlvbi1jb21tb24uYyAkKENPTkZJR19IKSAk KFNZU1RFTV9IKSBcCisgICAkKFRSRUVfSCkgJChSVExfSCkgJChPUFRBQlNf SCkgJChHSU1QTEVfSCkgJChSRUNPR19IKQogdGFyZ2V0LWdsb2JhbHMubyA6 IHRhcmdldC1nbG9iYWxzLmMgJChDT05GSUdfSCkgJChTWVNURU1fSCkgY29y ZXR5cGVzLmggXAogICAgJChUTV9IKSBpbnNuLWNvbmZpZy5oICQoTUFDSE1P REVfSCkgJChHR0NfSCkgdG9wbGV2LmggdGFyZ2V0LWdsb2JhbHMuaCBcCiAg ICAkKEZMQUdTX0gpICQoUkVHU19IKSAkKFJUTF9IKSByZWxvYWQuaCBleHBt ZWQuaCAkKEVYUFJfSCkgJChPUFRBQlNfSCkgXAo= --_002_BF230D13CA30DD48930C31D40993300016C83F89FMSMSX102amrcor_--