From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11577 invoked by alias); 6 Jul 2010 07:15:42 -0000 Received: (qmail 11399 invoked by uid 22791); 6 Jul 2010 07:15:19 -0000 X-SWARE-Spam-Status: No, hits=-0.3 required=5.0 tests=AWL,BAYES_50,TW_TM,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mtagate4.de.ibm.com (HELO mtagate4.de.ibm.com) (195.212.17.164) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 06 Jul 2010 07:14:54 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate4.de.ibm.com (8.13.1/8.13.1) with ESMTP id o667EooC007486 for ; Tue, 6 Jul 2010 07:14:50 GMT Received: from d12av04.megacenter.de.ibm.com (d12av04.megacenter.de.ibm.com [9.149.165.229]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o667EmX71831046 for ; Tue, 6 Jul 2010 09:14:50 +0200 Received: from d12av04.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av04.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id o667Em54001426 for ; Tue, 6 Jul 2010 09:14:48 +0200 Received: from d12mc102.megacenter.de.ibm.com (d12mc102.megacenter.de.ibm.com [9.149.167.114]) by d12av04.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id o667EmqO001422 for ; Tue, 6 Jul 2010 09:14:48 +0200 In-Reply-To: References: Subject: Re: [RFC] [patch] Support vectorization of min/max location pattern X-KeepSent: 5EE44A9E:17266140-C2257758:00270A88; type=4; name=$KeepSent To: Ira Rosen Cc: gcc-patches@gcc.gnu.org Message-ID: From: Ira Rosen Date: Tue, 06 Jul 2010 07:15:00 -0000 MIME-Version: 1.0 Content-type: multipart/mixed; Boundary="0__=4DBBFDCBDFB48C188f9e8a93df938690918c4DBBFDCBDFB48C18" Content-Disposition: inline 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: 2010-07/txt/msg00426.txt.bz2 --0__=4DBBFDCBDFB48C188f9e8a93df938690918c4DBBFDCBDFB48C18 Content-type: text/plain; charset=US-ASCII Content-length: 7472 gcc-patches-owner@gcc.gnu.org wrote on 01/07/2010 11:00:50 AM: > Hi, > > This patch adds vectorization support of min/max location pattern: > > for (i = 0; i < N; i++) > if (arr[i] < limit) > { > pos = i + 1; > limit = arr[i]; > } > > The recognized pattern is compound of two statements (and is called > compound pattern): > > # pos_22 = PHI > # limit_24 = PHI > ... > pos_1 = [cond_expr] limit_9 < limit_24 ? pos_10 : pos_22; > limit_4 = [cond_expr] limit_9 < limit_24 ? limit_9 : limit_24; > > both statements should be reductions with cond_expr and have the same > condition part. The min/max statement is expected to be of the form "x op > y ? x : y" (where op can be >, <, >= or <=), and the location is expected > to be an induction. > > To vectorize min/max location pattern we use a technique described in > "Multimedia vectorization of floating-point MIN/MAX reductions" by > A.J.C.Bik, X.Tian and M.B.Girkar, > http://portal.acm.org/citation.cfm?id=1145765. > > Vectorized loop (maxloc, first index): > vcx[0:vl-1:1] = | x |..| x |; - vector of max values > vck[0:vl-1:1] = | k |..| k |; - vector of positions > ind[0:vl-1:1] = |vl-1|..| 0 |; > inc[0:vl-1:1] = | vl |..| vl |; > for (i = 0; i < N; i += vl) { > msk[0:vl-1:1] = (a[i:i+vl-1:1] > vcx[0:vl-1:1]); > vck[0:vl-1:1] = (ind[0:vl-1:1] & msk[0:vl-1:1]) | > (vck[0:vl-1:1] & !msk[0:vl-1:1]); > vcx[0:vl-1:1] = VMAX(vcx[0:vl-1:1], a[i:i+vl-1:1]); > ind[0:vl-1:1] += inc[0:vl-1:1]; > } > x = HMAX(vcx[0:vl-1:1]); - scalar maximum extraction > msk[0:vl-1:1] = (vcx[0:vl-1:1] == |x|..|x|); > vck[0:vl-1:1] = (vck[0:vl-1:1] & msk[0:vl-1:1]) | > (|MaxInt|..|MaxInt| & !msk[0:vl-1:1]); > k = HMIN(vck[0:vl-1:1]); - first position extraction > > > Vectorization of minloc is supposed to help gas_dyn from Polyhedron as > discussed in PR 31067. > > PRs 44710 and 44711 currently prevent the vectorization. PR 44711 can be > bypassed by using -fno-tree-pre. I'll wait for a fix of PR 44710 before I > commit this patch (after I regtest it again). > Also the case of pos = i; instead of pos = i+1; is not supported since in > this case the operands are switched, i.e., we get "x op y ? y : x". > > > My main question is the implementation of vector comparisons. I understand > that different targets can return different types of results. So instead of > defining new tree codes, I used target builtin which also returns the type > of the result. > > Other comments are welcome too. > > Bootstrapped and tested on powerpc64-suse-linux. Since it looks like nobody objects the use of target builtins for vector comparison, I am resubmitting an updated patch (the code) for review of non-vectorizer parts. Thanks, Ira ChangeLog: * doc/tm.texi: Regenerate. * doc/tm.texi.in (TARGET_VECTORIZE_BUILTIN_VECT_COMPARE): Document. * target.def (builtin_vect_compare): Add new builtin. * tree-vectorizer.h (enum vect_compound_pattern): New. (struct _stmt_vec_info): Add new fields compound_pattern and reduc_scalar_result_stmt. Add macros to access them. (is_pattern_stmt_p): Return true for compound pattern. (vectorizable_condition): Add arguments. (vect_recog_compound_func_ptr): New function-pointer type. (NUM_COMPOUND_PATTERNS): New. (vect_compound_pattern_recog): Declare. * tree-vect-loop.c (vect_determine_vectorization_factor): Fix assert for compound patterns. (vect_analyze_scalar_cycles_1): Fix typo. Detect compound reduction patterns. Update comment. (vect_analyze_scalar_cycles): Update comment. (destroy_loop_vec_info): Update def stmt for the original pattern statement. (vect_is_simple_reduction_1): Skip compound pattern statements in uses check. Add spaces. Skip commutativity and type checks for minimum location statement. Fix printings. (vect_model_reduction_cost): Add min/max location pattern cost computation. (vect_create_epilogue_for_compound_pattern): New function. (vect_create_epilog_for_reduction): Don't retrieve the original statement for compound pattern. Fix comment accordingly. Store the result of vector reduction computation in a variable and use it. Call vect_create_epilogue_for_compound_pattern (). Check if optab exists before using it. Keep the scalar result computation statement. Use either exit phi node result or compound pattern result in scalar extraction. Don't expect to find an exit phi node for min/max statement. (vectorizable_reduction): Skip check for uses in loop for compound patterns. Don't retrieve the original statement for compound pattern. Call vectorizable_condition () with additional parameters. Skip reduction code check for compound patterns. Prepare operands for min/max location statement vectorization and pass them to vectorizable_condition (). (vectorizable_live_operation): Return TRUE for compound patterns. * tree-vect-patterns.c (vect_recog_min_max_loc_pattern): Declare. (vect_recog_compound_func_ptrs): Likewise. (vect_recog_min_max_loc_pattern): New function. (vect_compound_pattern_recog): Likewise. * tree-vect-stmts.c (process_use): Mark compound pattern statements as used by reduction. (vect_mark_stmts_to_be_vectorized): Allow compound pattern statements to be used by reduction. (vectorize_minmax_location_pattern): New function. (vectorizable_condition): Update comment, add arguments. Skip checks irrelevant for compound pattern. Check that vector comparisons are supported by the target. Prepare operands using new arguments. Call vectorize_minmax_location_pattern(). (vect_analyze_stmt): Allow nested cycle statements to be used by reduction. Call vectorizable_condition () with additional arguments. (vect_transform_stmt): Call vectorizable_condition () with additional arguments. (new_stmt_vec_info): Initialize new fields. * config/rs6000/rs6000-builtin.def (ALTIVEC_BUILTIN_VCMPLTFP): New. (ALTIVEC_BUILTIN_VCMPLEFP): New. * config/rs6000/rs6000.c (rs6000_builtin_vect_compare): New. (TARGET_VECTORIZE_BUILTIN_VEC_CMP): Redefine. (struct builtin_description bdesc_2arg): Add altivec_vcmpltfp and altivec_vcmplefp. * config/rs6000/altivec.md (altivec_vcmpltfp): New pattern. (altivec_vcmplefp): Likewise. * tree-vect-slp.c (vect_get_and_check_slp_defs): Fail for compound patterns. (See attached file: minloc-new.txt) > > testsuite/ChangeLog: > > * gcc.dg/vect/vect.exp: Define how to run tests named fast-math*.c > * lib/target-supports.exp (check_effective_target_vect_cmp): New. > * gcc.dg/vect/fast-math-no-pre-minmax-loc-1.c: New test. > * gcc.dg/vect/fast-math-no-pre-minmax-loc-2.c, > gcc.dg/vect/fast-math-no-pre-minmax-loc-3.c, > gcc.dg/vect/fast-math-no-pre-minmax-loc-4.c, > gcc.dg/vect/fast-math-no-pre-minmax-loc-5.c, > gcc.dg/vect/fast-math-no-pre-minmax-loc-6.c, > gcc.dg/vect/fast-math-no-pre-minmax-loc-7.c, > gcc.dg/vect/fast-math-no-pre-minmax-loc-8.c, > gcc.dg/vect/fast-math-no-pre-minmax-loc-9.c: Likewise. > --0__=4DBBFDCBDFB48C188f9e8a93df938690918c4DBBFDCBDFB48C18 Content-type: text/plain; name="minloc-new.txt" Content-Disposition: attachment; filename="minloc-new.txt" Content-transfer-encoding: base64 Content-length: 93184 SW5kZXg6IGRvYy90bS50ZXhpCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGRvYy90bS50ZXhpCShyZXZpc2lvbiAxNjE4NjIpCisrKyBkb2MvdG0udGV4 aQkod29ya2luZyBjb3B5KQpAQCAtNTc1Myw2ICs1NzUzLDEzIEBAIHRoZSBl bGVtZW50cyBpbiB0aGUgdmVjdG9ycyBzaG91bGQgYmUgb2YKIHBhcmFtZXRl ciBpcyB0cnVlIGlmIHRoZSBtZW1vcnkgYWNjZXNzIGlzIGRlZmluZWQgaW4g YSBwYWNrZWQgc3RydWN0LgogQGVuZCBkZWZ0eXBlZm4KIAorQGRlZnR5cGVm biB7VGFyZ2V0IEhvb2t9IHRyZWUgVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElO X1ZFQ1RfQ09NUEFSRSAodW5zaWduZWQgQHZhcntjb2RlfSwgdHJlZSBAdmFy e3R5cGV9LCB0cmVlICpAdmFye3JldHVybl90eXBlfSkgCitUYXJnZXQgYnVp bHRpbiB0aGF0IGltcGxlbWVudHMgdmVjdG9yIGVsZW1lbnQtd2lzZSBjb21w YXJpc29uLgorVGhlIHZhbHVlIG9mIEB2YXJ7Y29kZX0gaXMgb25lIG9mIHRo ZSBlbnVtZXJhdG9ycyBpbiBAY29kZXtlbnVtIHRyZWVfY29kZX0gYW5kCitz cGVjaWZpZXMgY29tcGFyaXNvbiBvcGVyYXRpb24sIEB2YXJ7dHlwZX0gc3Bl Y2lmaWVzIHRoZSB0eXBlIG9mIGlucHV0IHZlY3RvcnMuCitUaGUgZnVuY3Rp b24gcmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgY29tcGFyaXNvbiByZXN1bHQg aW4gQHZhcntyZXN1bHRfdHlwZX0uCitAZW5kIGRlZnR5cGVmbgorCiBAbm9k ZSBBbmNob3JlZCBBZGRyZXNzZXMKIEBzZWN0aW9uIEFuY2hvcmVkIEFkZHJl c3NlcwogQGNpbmRleCBhbmNob3JlZCBhZGRyZXNzZXMKSW5kZXg6IGRvYy90 bS50ZXhpLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvYy90bS50 ZXhpLmluCShyZXZpc2lvbiAxNjE4NjIpCisrKyBkb2MvdG0udGV4aS5pbgko d29ya2luZyBjb3B5KQpAQCAtNTc1Myw2ICs1NzUzLDEzIEBAIHRoZSBlbGVt ZW50cyBpbiB0aGUgdmVjdG9ycyBzaG91bGQgYmUgb2YKIHBhcmFtZXRlciBp cyB0cnVlIGlmIHRoZSBtZW1vcnkgYWNjZXNzIGlzIGRlZmluZWQgaW4gYSBw YWNrZWQgc3RydWN0LgogQGVuZCBkZWZ0eXBlZm4KIAorQGhvb2sgVEFSR0VU X1ZFQ1RPUklaRV9CVUlMVElOX1ZFQ1RfQ09NUEFSRSAKK1RhcmdldCBidWls dGluIHRoYXQgaW1wbGVtZW50cyB2ZWN0b3IgZWxlbWVudC13aXNlIGNvbXBh cmlzb24uCitUaGUgdmFsdWUgb2YgQHZhcntjb2RlfSBpcyBvbmUgb2YgdGhl IGVudW1lcmF0b3JzIGluIEBjb2Rle2VudW0gdHJlZV9jb2RlfSBhbmQKK3Nw ZWNpZmllcyBjb21wYXJpc29uIG9wZXJhdGlvbiwgQHZhcnt0eXBlfSBzcGVj aWZpZXMgdGhlIHR5cGUgb2YgaW5wdXQgdmVjdG9ycy4KK1RoZSBmdW5jdGlv biByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjb21wYXJpc29uIHJlc3VsdCBp biBAdmFye3Jlc3VsdF90eXBlfS4KK0BlbmQgZGVmdHlwZWZuCisKIEBub2Rl IEFuY2hvcmVkIEFkZHJlc3NlcwogQHNlY3Rpb24gQW5jaG9yZWQgQWRkcmVz c2VzCiBAY2luZGV4IGFuY2hvcmVkIGFkZHJlc3NlcwpJbmRleDogdGFyZ2V0 LmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0YXJnZXQuZGVmCShy ZXZpc2lvbiAxNjE4NjIpCisrKyB0YXJnZXQuZGVmCSh3b3JraW5nIGNvcHkp CkBAIC04MjksNiArODI5LDEyIEBAIERFRkhPT0sKICAoZW51bSBtYWNoaW5l X21vZGUgbW9kZSwgY29uc3RfdHJlZSB0eXBlLCBpbnQgbWlzYWxpZ25tZW50 LCBib29sIGlzX3BhY2tlZCksCiAgZGVmYXVsdF9idWlsdGluX3N1cHBvcnRf dmVjdG9yX21pc2FsaWdubWVudCkKIAorLyogVGFyZ2V0IGJ1aWx0aW4gdGhh dCBpbXBsZW1lbnRzIHZlY3RvciBlbGVtZW50LXdpc2UgY29tcGFyaXNvbi4g ICovCitERUZIT09LCisoYnVpbHRpbl92ZWN0X2NvbXBhcmUsCisgIiIsCisg dHJlZSwgKHVuc2lnbmVkIGNvZGUsIHRyZWUgdHlwZSwgdHJlZSAqcmV0dXJu X3R5cGUpLCBOVUxMKQorCiBIT09LX1ZFQ1RPUl9FTkQgKHZlY3Rvcml6ZSkK IAogI3VuZGVmIEhPT0tfUFJFRklYCkluZGV4OiB0cmVlLXZlY3Rvcml6ZXIu aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0cmVlLXZlY3Rvcml6ZXIu aAkocmV2aXNpb24gMTYxODYyKQorKysgdHJlZS12ZWN0b3JpemVyLmgJKHdv cmtpbmcgY29weSkKQEAgLTQwOSw2ICs0MDksMTcgQEAgZW51bSBzbHBfdmVj dF90eXBlIHsKICAgaHlicmlkCiB9OwogCisvKiBDb21wb3VuZCBwYXR0ZXJu IGlzIGEgcGF0dGVybiBjb25zaXN0aW5nIG1vcmUgdGhhbiBvbmUgc3RhdGVt ZW50IHRoYXQgbmVlZAorICAgdG8gYmUgdmVjdG9yaXplZC4gQ3VycmVudHkg bWluL21heCBsb2NhdGlvbiBwYXR0ZXJuIGlzIHRoZSBvbmx5IHN1cHBvcnRl ZAorICAgY29tcG91bmQgcGF0dGVybi4gSXQgaGFzIHR3byBzdGF0ZW1lbnRz OiB0aGUgZmlyc3Qgc3RhdGVtZW50IGNhbGN1bGF0ZXMgdGhlIAorICAgbWlu aW11bSAobWFya2VkIE1JTk1BWF9TVE1UKSBhbmQgdGhlIHNlY29uZCBvbmUg Y2FsY3VsYXRlcyB0aGUgbG9jYXRpb24gCisgICAobWFya2VkIE1JTk1BWF9M T0NfU1RNVCkuICAqLworZW51bSB2ZWN0X2NvbXBvdW5kX3BhdHRlcm4gewor ICBub3RfaW5fcGF0dGVybiA9IDAsCisgIG1pbm1heF9zdG10LAorICBtaW5t YXhfbG9jX3N0bXQKK307CisKIAogdHlwZWRlZiBzdHJ1Y3QgZGF0YV9yZWZl cmVuY2UgKmRyX3A7CiBERUZfVkVDX1AoZHJfcCk7CkBAIC00MjUsNiArNDM2 LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9zdG10X3ZlY19pbmZvIHsKICAgLyog U3RtdCBpcyBwYXJ0IG9mIHNvbWUgcGF0dGVybiAoY29tcHV0YXRpb24gaWRp b20pICAqLwogICBib29sIGluX3BhdHRlcm5fcDsKIAorICAvKiBTdGF0ZW1l bnQgaXMgYSBwYXJ0IG9mIGEgY29tcG91bmQgcGF0dGVybiwgaS5lLiwgYSBw YXR0ZXJuIGNvbnNpc3RpbmcKKyAgICAgbW9yZSB0aGFuIG9uZSBzdGF0ZW1l bnQuICAqLworICBlbnVtIHZlY3RfY29tcG91bmRfcGF0dGVybiBjb21wb3Vu ZF9wYXR0ZXJuOworCiAgIC8qIEZvciBsb2FkcyBvbmx5LCBpZiB0aGVyZSBp cyBhIHN0b3JlIHdpdGggdGhlIHNhbWUgbG9jYXRpb24sIHRoaXMgZmllbGQg aXMKICAgICAgVFJVRS4gICovCiAgIGJvb2wgcmVhZF93cml0ZV9kZXA7CkBA IC01MTEsNiArNTI2LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9zdG10X3ZlY19p bmZvIHsKICAgLyogVGhlIGJiX3ZlY19pbmZvIHdpdGggcmVzcGVjdCB0byB3 aGljaCBTVE1UIGlzIHZlY3Rvcml6ZWQuICAqLwogICBiYl92ZWNfaW5mbyBi Yl92aW5mbzsKIAorICAvKiBUaGUgc2NhbGFyIHJlc3VsdCBvZiB2ZWN0b3Jp emVkIHJlZHVjdGlvbiBjb21wdXRhdGlvbiBnZW5lcmF0ZWQgaW4KKyAgICAg cmVkdWN0aW9uIGVwaWxvZ3VlLiAgKi8KKyAgZ2ltcGxlIHJlZHVjX3NjYWxh cl9yZXN1bHRfc3RtdDsKKwogICAvKiBJcyB0aGlzIHN0YXRlbWVudCB2ZWN0 b3JpemFibGUgb3Igc2hvdWxkIGl0IGJlIHNraXBwZWQgaW4gKHBhcnRpYWwp CiAgICAgIHZlY3Rvcml6YXRpb24uICAqLwogICBib29sIHZlY3Rvcml6YWJs ZTsKQEAgLTUzNSw2ICs1NTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBfc3RtdF92 ZWNfaW5mbyB7CiAjZGVmaW5lIFNUTVRfVklORk9fRFJfQUxJR05FRF9UTyhT KSAgICAgICAgKFMpLT5kcl9hbGlnbmVkX3RvCiAKICNkZWZpbmUgU1RNVF9W SU5GT19JTl9QQVRURVJOX1AoUykgICAgICAgICAoUyktPmluX3BhdHRlcm5f cAorI2RlZmluZSBTVE1UX1ZJTkZPX0NPTVBPVU5EX1BBVFRFUk4oUykgICAg IChTKS0+Y29tcG91bmRfcGF0dGVybgogI2RlZmluZSBTVE1UX1ZJTkZPX1JF TEFURURfU1RNVChTKSAgICAgICAgIChTKS0+cmVsYXRlZF9zdG10CiAjZGVm aW5lIFNUTVRfVklORk9fU0FNRV9BTElHTl9SRUZTKFMpICAgICAgKFMpLT5z YW1lX2FsaWduX3JlZnMKICNkZWZpbmUgU1RNVF9WSU5GT19ERUZfVFlQRShT KSAgICAgICAgICAgICAoUyktPmRlZl90eXBlCkBAIC01NDYsNiArNTY2LDcg QEAgdHlwZWRlZiBzdHJ1Y3QgX3N0bXRfdmVjX2luZm8gewogI2RlZmluZSBT VE1UX1ZJTkZPX0RSX0dST1VQX1NBTUVfRFJfU1RNVChTKShTKS0+c2FtZV9k cl9zdG10CiAjZGVmaW5lIFNUTVRfVklORk9fRFJfR1JPVVBfUkVBRF9XUklU RV9ERVBFTkRFTkNFKFMpICAoUyktPnJlYWRfd3JpdGVfZGVwCiAjZGVmaW5l IFNUTVRfVklORk9fU1RSSURFRF9BQ0NFU1MoUykgICAgICAoKFMpLT5maXJz dF9kciAhPSBOVUxMKQorI2RlZmluZSBTVE1UX1ZJTkZPX1JFRFVDX1NDQUxB Ul9SRVNfU1RNVChTKSAoUyktPnJlZHVjX3NjYWxhcl9yZXN1bHRfc3RtdAog CiAjZGVmaW5lIERSX0dST1VQX0ZJUlNUX0RSKFMpICAgICAgICAgICAgICAg KFMpLT5maXJzdF9kcgogI2RlZmluZSBEUl9HUk9VUF9ORVhUX0RSKFMpICAg ICAgICAgICAgICAgIChTKS0+bmV4dF9kcgpAQCAtNjQyLDcgKzY2Myw4IEBA IGlzX3BhdHRlcm5fc3RtdF9wIChzdG10X3ZlY19pbmZvIHN0bXRfaW4KICAg cmVsYXRlZF9zdG10ID0gU1RNVF9WSU5GT19SRUxBVEVEX1NUTVQgKHN0bXRf aW5mbyk7CiAgIGlmIChyZWxhdGVkX3N0bXQKICAgICAgICYmIChyZWxhdGVk X3N0bXRfaW5mbyA9IHZpbmZvX2Zvcl9zdG10IChyZWxhdGVkX3N0bXQpKQot ICAgICAgJiYgU1RNVF9WSU5GT19JTl9QQVRURVJOX1AgKHJlbGF0ZWRfc3Rt dF9pbmZvKSkKKyAgICAgICYmIChTVE1UX1ZJTkZPX0lOX1BBVFRFUk5fUCAo cmVsYXRlZF9zdG10X2luZm8pCisgICAgICAgICAgfHwgU1RNVF9WSU5GT19D T01QT1VORF9QQVRURVJOIChyZWxhdGVkX3N0bXRfaW5mbykpKQogICAgIHJl dHVybiB0cnVlOwogCiAgIHJldHVybiBmYWxzZTsKQEAgLTc2NCw3ICs3ODYs OSBAQCBleHRlcm4gYm9vbCB2ZWN0X3RyYW5zZm9ybV9zdG10IChnaW1wbGUs CiBleHRlcm4gdm9pZCB2ZWN0X3JlbW92ZV9zdG9yZXMgKGdpbXBsZSk7CiBl eHRlcm4gYm9vbCB2ZWN0X2FuYWx5emVfc3RtdCAoZ2ltcGxlLCBib29sICos IHNscF90cmVlKTsKIGV4dGVybiBib29sIHZlY3Rvcml6YWJsZV9jb25kaXRp b24gKGdpbXBsZSwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlICos Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLCBp bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJl ZSwgaW50LCB0cmVlLCBpbnQpOworZXh0ZXJuIGdpbXBsZSB2ZWN0b3JpemVf bWlubWF4X2xvY2F0aW9uX3BhdHRlcm4gKGdpbXBsZSwgZ2ltcGxlX3N0bXRf aXRlcmF0b3IqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUp OwogZXh0ZXJuIHZvaWQgdmVjdF9nZXRfbG9hZF9jb3N0IChzdHJ1Y3QgZGF0 YV9yZWZlcmVuY2UgKiwgaW50LCBib29sLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKiwgdW5zaWduZWQgaW50ICop OwogZXh0ZXJuIHZvaWQgdmVjdF9nZXRfc3RvcmVfY29zdCAoc3RydWN0IGRh dGFfcmVmZXJlbmNlICosIGludCwgdW5zaWduZWQgaW50ICopOwpAQCAtODQ0 LDggKzg2OCwxMSBAQCBleHRlcm4gdm9pZCB2ZWN0X3NscF90cmFuc2Zvcm1f YmIgKGJhc2ljCiAgICBBZGRpdGlvbmFsIHBhdHRlcm4gcmVjb2duaXRpb24g ZnVuY3Rpb25zIGNhbiAoYW5kIHdpbGwpIGJlIGFkZGVkCiAgICBpbiB0aGUg ZnV0dXJlLiAgKi8KIHR5cGVkZWYgZ2ltcGxlICgqIHZlY3RfcmVjb2dfZnVu Y19wdHIpIChnaW1wbGUsIHRyZWUgKiwgdHJlZSAqKTsKLSNkZWZpbmUgTlVN X1BBVFRFUk5TIDQKK3R5cGVkZWYgYm9vbCAoKiB2ZWN0X3JlY29nX2NvbXBv dW5kX2Z1bmNfcHRyKSAodW5zaWduZWQgaW50LCB2YV9saXN0KTsKKyNkZWZp bmUgTlVNX1BBVFRFUk5TIDQgCisjZGVmaW5lIE5VTV9DT01QT1VORF9QQVRU RVJOUyAxICAKIHZvaWQgdmVjdF9wYXR0ZXJuX3JlY29nIChsb29wX3ZlY19p bmZvKTsKK3ZvaWQgdmVjdF9jb21wb3VuZF9wYXR0ZXJuX3JlY29nICh1bnNp Z25lZCBpbnQsIC4uLik7CiAKIC8qIEluIHRyZWUtdmVjdG9yaXplci5jLiAg Ki8KIHVuc2lnbmVkIHZlY3Rvcml6ZV9sb29wcyAodm9pZCk7CkluZGV4OiB0 cmVlLXZlY3QtbG9vcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRy ZWUtdmVjdC1sb29wLmMJKHJldmlzaW9uIDE2MTg2MikKKysrIHRyZWUtdmVj dC1sb29wLmMJKHdvcmtpbmcgY29weSkKQEAgLTI5NSw3ICsyOTUsOCBAQCB2 ZWN0X2RldGVybWluZV92ZWN0b3JpemF0aW9uX2ZhY3RvciAobG9vCiAJICBl bHNlCiAJICAgIHsKIAkgICAgICBnY2NfYXNzZXJ0ICghU1RNVF9WSU5GT19E QVRBX1JFRiAoc3RtdF9pbmZvKQotCQkJICAmJiAhaXNfcGF0dGVybl9zdG10 X3AgKHN0bXRfaW5mbykpOworCQkJICAmJiAoIWlzX3BhdHRlcm5fc3RtdF9w IChzdG10X2luZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 fCBTVE1UX1ZJTkZPX0NPTVBPVU5EX1BBVFRFUk4gKHN0bXRfaW5mbykpKTsK IAogCSAgICAgIHNjYWxhcl90eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfZ2V0 X2xocyAoc3RtdCkpOwogCSAgICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5m byAoUkVQT1JUX0RFVEFJTFMpKQpAQCAtNDQ0LDEwICs0NDUsMTUgQEAgc3Rh dGljIHZvaWQKIHZlY3RfYW5hbHl6ZV9zY2FsYXJfY3ljbGVzXzEgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywgc3RydWN0IGxvb3AgKmxvb3ApCiB7CiAg IGJhc2ljX2Jsb2NrIGJiID0gbG9vcC0+aGVhZGVyOwotICB0cmVlIGR1bXk7 CisgIHRyZWUgZHVtbXk7CiAgIFZFQyhnaW1wbGUsaGVhcCkgKndvcmtsaXN0 ID0gVkVDX2FsbG9jIChnaW1wbGUsIGhlYXAsIDY0KTsKICAgZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgZ3NpOwotICBib29sIGRvdWJsZV9yZWR1YzsKKyAgYm9v bCBkb3VibGVfcmVkdWMsIGZvdW5kLCBtaW5tYXhfbG9jID0gZmFsc2U7Cisg IGdpbXBsZSBmaXJzdF9jb25kX3N0bXQgPSBOVUxMLCBzZWNvbmRfY29uZF9z dG10ID0gTlVMTDsKKyAgZ2ltcGxlIGZpcnN0X3BoaSA9IE5VTEwsIHNlY29u ZF9waGkgPSBOVUxMLCBwaGksIHVzZV9zdG10OworICBpbnQgaTsKKyAgaW1t X3VzZV9pdGVyYXRvciBpbW1faXRlcjsKKyAgdXNlX29wZXJhbmRfcCB1c2Vf cDsKIAogICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRB SUxTKSkKICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICI9PT0gdmVjdF9hbmFs eXplX3NjYWxhcl9jeWNsZXMgPT09Iik7CkBAIC00ODQsNyArNDkwLDggQEAg dmVjdF9hbmFseXplX3NjYWxhcl9jeWNsZXNfMSAobG9vcF92ZWNfaQogCX0K IAogICAgICAgaWYgKCFhY2Nlc3NfZm4KLQkgIHx8ICF2ZWN0X2lzX3NpbXBs ZV9pdl9ldm9sdXRpb24gKGxvb3AtPm51bSwgYWNjZXNzX2ZuLCAmZHVteSwg JmR1bXkpKQorCSAgfHwgIXZlY3RfaXNfc2ltcGxlX2l2X2V2b2x1dGlvbiAo bG9vcC0+bnVtLCBhY2Nlc3NfZm4sICZkdW1teSwgCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15KSkgCiAJewog CSAgVkVDX3NhZmVfcHVzaCAoZ2ltcGxlLCBoZWFwLCB3b3JrbGlzdCwgcGhp KTsKIAkgIGNvbnRpbnVlOwpAQCAtNDk1LDggKzUwMiw1NiBAQCB2ZWN0X2Fu YWx5emVfc2NhbGFyX2N5Y2xlc18xIChsb29wX3ZlY19pCiAgICAgICBTVE1U X1ZJTkZPX0RFRl9UWVBFIChzdG10X3ZpbmZvKSA9IHZlY3RfaW5kdWN0aW9u X2RlZjsKICAgICB9CiAKKyAgLyogRGV0ZWN0IGNvbXBvdW5kIHJlZHVjdGlv biBwYXR0ZXJucyAoYmVmb3JlIHJlZHVjdGlvbiBkZXRlY3Rpb24pOiAgCisg ICAgIHdlIGN1cnJlbnRseSBzdXBwb3J0IG9ubHkgbWluL21heCBsb2NhdGlv biBwYXR0ZXJuLCBzbyB3ZSBsb29rIGZvciB0d28gCisgICAgIHJlZHVjdGlv biBjb25kaXRpb24gc3RhdGVtZW50cy4gICovCisgIGZvciAoaSA9IDA7IFZF Q19pdGVyYXRlIChnaW1wbGUsIHdvcmtsaXN0LCBpLCBwaGkpOyBpKyspCisg ICAgeworICAgICAgdHJlZSBkZWYgPSBQSElfUkVTVUxUIChwaGkpOworCisg ICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgRk9SX0VBQ0hfSU1NX1VTRV9G QVNUICh1c2VfcCwgaW1tX2l0ZXIsIGRlZikKKyAgICAgICAgeworICAgICAg ICAgIHVzZV9zdG10ID0gVVNFX1NUTVQgKHVzZV9wKTsKKyAgICAgICAgICBp ZiAoZmxvd19iYl9pbnNpZGVfbG9vcF9wIChsb29wLCBnaW1wbGVfYmIgKHVz ZV9zdG10KSkKKyAgICAgICAgICAgICAgJiYgdmluZm9fZm9yX3N0bXQgKHVz ZV9zdG10KQorICAgICAgICAgICAgICAmJiBpc19naW1wbGVfYXNzaWduICh1 c2Vfc3RtdCkKKyAgICAgICAgICAgICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNf Y29kZSAodXNlX3N0bXQpID09IENPTkRfRVhQUikKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBpZiAo IWZvdW5kKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgaWYgKCFmaXJz dF9jb25kX3N0bXQpCisgICAgICAgIHsKKyAgICAgICAgICBmaXJzdF9jb25k X3N0bXQgPSB1c2Vfc3RtdDsKKyAgICAgICAgICBmaXJzdF9waGkgPSBwaGk7 CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg IGlmIChzZWNvbmRfY29uZF9zdG10KQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAvKiBUaGlzIG9uZSBpcyB0aGUgdGhpcmQgcmVkdWN0aW9uIGNv bmRpdGlvbiBzdGF0ZW1lbnQgaW4gdGhlIAorICAgICAgICAgICAgICAgICBs b29wLiBUaGlzIGlzIHRvbyBjb25mdXNpbmcsIHdlIGJhaWwgb3V0LiAgKi8K KyAgICAgICAgICAgICAgbWlubWF4X2xvYyA9IGZhbHNlOworICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHNlY29u ZF9jb25kX3N0bXQgPSB1c2Vfc3RtdDsKKyAgICAgICAgICBzZWNvbmRfcGhp ID0gcGhpOworICAgICAgICAgIG1pbm1heF9sb2MgPSB0cnVlOworICAgICAg ICB9CisgICAgfQorCisgIGlmIChtaW5tYXhfbG9jKQorICAgIHZlY3RfY29t cG91bmRfcGF0dGVybl9yZWNvZyAoNCwgZmlyc3RfcGhpLCBmaXJzdF9jb25k X3N0bXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vj b25kX3BoaSwgc2Vjb25kX2NvbmRfc3RtdCk7CiAKLSAgLyogU2Vjb25kIC0g aWRlbnRpZnkgYWxsIHJlZHVjdGlvbnMgYW5kIG5lc3RlZCBjeWNsZXMuICAq LworICAvKiBJZGVudGlmeSBhbGwgcmVkdWN0aW9ucyBhbmQgbmVzdGVkIGN5 Y2xlcy4gICovCiAgIHdoaWxlIChWRUNfbGVuZ3RoIChnaW1wbGUsIHdvcmts aXN0KSA+IDApCiAgICAgewogICAgICAgZ2ltcGxlIHBoaSA9IFZFQ19wb3Ag KGdpbXBsZSwgd29ya2xpc3QpOwpAQCAtNTk1LDExICs2NTAsOSBAQCB2ZWN0 X2FuYWx5emVfc2NhbGFyX2N5Y2xlcyAobG9vcF92ZWNfaW5mCiAgIC8qIFdo ZW4gdmVjdG9yaXppbmcgYW4gb3V0ZXItbG9vcCwgdGhlIGlubmVyLWxvb3Ag aXMgZXhlY3V0ZWQgc2VxdWVudGlhbGx5LgogICAgICBSZWR1Y3Rpb25zIGlu IHN1Y2ggaW5uZXItbG9vcCB0aGVyZWZvcmUgaGF2ZSBkaWZmZXJlbnQgcHJv cGVydGllcyB0aGFuCiAgICAgIHRoZSByZWR1Y3Rpb25zIGluIHRoZSBuZXN0 IHRoYXQgZ2V0cyB2ZWN0b3JpemVkOgotICAgICAxLiBXaGVuIHZlY3Rvcml6 ZWQsIHRoZXkgYXJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIGlu IHRoZSBvcmlnaW5hbAotICAgICAgICBzY2FsYXIgbG9vcCwgc28gd2UgY2Fu J3QgY2hhbmdlIHRoZSBvcmRlciBvZiBjb21wdXRhdGlvbiB3aGVuCi0gICAg ICAgIHZlY3Rvcml6aW5nIHRoZW0uCi0gICAgIDIuIEZJWE1FOiBJbm5lci1s b29wIHJlZHVjdGlvbnMgY2FuIGJlIHVzZWQgaW4gdGhlIGlubmVyLWxvb3As IHNvIHRoZQotICAgICAgICBjdXJyZW50IGNoZWNrcyBhcmUgdG9vIHN0cmlj dC4gICovCisgICAgIHdoZW4gdmVjdG9yaXplZCwgdGhleSBhcmUgZXhlY3V0 ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlIG9yaWdpbmFsCisgICAg IHNjYWxhciBsb29wLCBzbyB3ZSBjYW4ndCBjaGFuZ2UgdGhlIG9yZGVyIG9m IGNvbXB1dGF0aW9uIHdoZW4KKyAgICAgdmVjdG9yaXppbmcgdGhlbS4gICov CiAKICAgaWYgKGxvb3AtPmlubmVyKQogICAgIHZlY3RfYW5hbHl6ZV9zY2Fs YXJfY3ljbGVzXzEgKGxvb3BfdmluZm8sIGxvb3AtPmlubmVyKTsKQEAgLTgy MCw3ICs4NzMsMTUgQEAgZGVzdHJveV9sb29wX3ZlY19pbmZvIChsb29wX3Zl Y19pbmZvIGxvbwogICAgICAgICAgICAgICAgICAgaWYgKG9yaWdfc3RtdF9p bmZvCiAgICAgICAgICAgICAgICAgICAgICAgJiYgU1RNVF9WSU5GT19JTl9Q QVRURVJOX1AgKG9yaWdfc3RtdF9pbmZvKSkKICAgICAgICAgICAgICAgICAg ICAgcmVtb3ZlX3N0bXRfcCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgCisJCSAgLyogV2UgYXJlIHJlbW92aW5nIHN0YXRl bWVudCBpbnNlcnRlZCBieSB0aGUgcGF0dGVybiAKKwkJICAgICBkZXRlY3Rp b24gcGFzcy4gVXBkYXRlIHRoZSBvcmlnaW5hbCBzdGF0ZW1lbnQgdG8gYmUg dGhlIAorCQkgICAgIGRlZiBzdG10IG9mIHRoZSBzdGF0ZW1lbnQncyBMSFMu ICAqLworICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZV9zdG10X3AgJiYg aXNfZ2ltcGxlX2Fzc2lnbiAob3JpZ19zdG10KSAKKyAgICAgICAgICAgICAg ICAgICAgICAmJiBUUkVFX0NPREUgKGdpbXBsZV9hc3NpZ25fbGhzIChvcmln X3N0bXQpKSA9PSBTU0FfTkFNRSkKKyAgICAgICAgICAgICAgICAgICAgU1NB X05BTUVfREVGX1NUTVQgKGdpbXBsZV9hc3NpZ25fbGhzIChvcmlnX3N0bXQp KSAKKyAgICAgICAgICAgICAgICAgICAgICA9IG9yaWdfc3RtdDsKKyAgICAg ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIC8qIEZyZWUgc3RtdF92 ZWNfaW5mby4gICovCiAgICAgICAgICAgICAgIGZyZWVfc3RtdF92ZWNfaW5m byAoc3RtdCk7CkBAIC0xNjcwLDEzICsxNzMxLDE2IEBAIHZlY3RfaXNfc2lt cGxlX3JlZHVjdGlvbl8xIChsb29wX3ZlY19pbmYKICAgICAgIGdpbXBsZSB1 c2Vfc3RtdCA9IFVTRV9TVE1UICh1c2VfcCk7CiAgICAgICBpZiAoaXNfZ2lt cGxlX2RlYnVnICh1c2Vfc3RtdCkpCiAJY29udGludWU7CisKICAgICAgIGlm IChmbG93X2JiX2luc2lkZV9sb29wX3AgKGxvb3AsIGdpbXBsZV9iYiAodXNl X3N0bXQpKQogCSAgJiYgdmluZm9fZm9yX3N0bXQgKHVzZV9zdG10KQotCSAg JiYgIWlzX3BhdHRlcm5fc3RtdF9wICh2aW5mb19mb3Jfc3RtdCAodXNlX3N0 bXQpKSkKKwkgICYmICFpc19wYXR0ZXJuX3N0bXRfcCAodmluZm9fZm9yX3N0 bXQgKHVzZV9zdG10KSkKKwkgICYmICFTVE1UX1ZJTkZPX0NPTVBPVU5EX1BB VFRFUk4gKHZpbmZvX2Zvcl9zdG10ICh1c2Vfc3RtdCkpKQogICAgICAgICBu bG9vcF91c2VzKys7CisgICAKICAgICAgIGlmIChubG9vcF91c2VzID4gMSkK ICAgICAgICAgewotICAgICAgICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5m byAoUkVQT1JUX0RFVEFJTFMpKQorICAgICAgICAgIGlmICh2ZWN0X3ByaW50 X2R1bXBfaW5mbyAoUkVQT1JUX0RFVEFJTFMpKSAKICAgICAgICAgICAgIGZw cmludGYgKHZlY3RfZHVtcCwgInJlZHVjdGlvbiB1c2VkIGluIGxvb3AuIik7 CiAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTE3MjQs MTAgKzE3ODgsMTIgQEAgdmVjdF9pc19zaW1wbGVfcmVkdWN0aW9uXzEgKGxv b3BfdmVjX2luZgogICAgICAgZ2ltcGxlIHVzZV9zdG10ID0gVVNFX1NUTVQg KHVzZV9wKTsKICAgICAgIGlmIChpc19naW1wbGVfZGVidWcgKHVzZV9zdG10 KSkKIAljb250aW51ZTsKKwogICAgICAgaWYgKGZsb3dfYmJfaW5zaWRlX2xv b3BfcCAobG9vcCwgZ2ltcGxlX2JiICh1c2Vfc3RtdCkpCiAJICAmJiB2aW5m b19mb3Jfc3RtdCAodXNlX3N0bXQpCiAJICAmJiAhaXNfcGF0dGVybl9zdG10 X3AgKHZpbmZvX2Zvcl9zdG10ICh1c2Vfc3RtdCkpKQogCW5sb29wX3VzZXMr KzsKKwogICAgICAgaWYgKG5sb29wX3VzZXMgPiAxKQogCXsKIAkgIGlmICh2 ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JUX0RFVEFJTFMpKQpAQCAtMTc3 Nyw2ICsxODQzLDkgQEAgdmVjdF9pc19zaW1wbGVfcmVkdWN0aW9uXzEgKGxv b3BfdmVjX2luZgogICAgIGNvZGUgPSBQTFVTX0VYUFI7CiAKICAgaWYgKGNo ZWNrX3JlZHVjdGlvbgorICAgICAgJiYgKCF2aW5mb19mb3Jfc3RtdCAoZGVm X3N0bXQpCisgICAgICAgICAgfHwgU1RNVF9WSU5GT19DT01QT1VORF9QQVRU RVJOICh2aW5mb19mb3Jfc3RtdCAoZGVmX3N0bXQpKQorICAgICAgICAgICAg ICAgICE9IG1pbm1heF9sb2Nfc3RtdCkKICAgICAgICYmICghY29tbXV0YXRp dmVfdHJlZV9jb2RlIChjb2RlKSB8fCAhYXNzb2NpYXRpdmVfdHJlZV9jb2Rl IChjb2RlKSkpCiAgICAgewogICAgICAgaWYgKHZlY3RfcHJpbnRfZHVtcF9p bmZvIChSRVBPUlRfREVUQUlMUykpCkBAIC0xODI3LDE0ICsxODk2LDE2IEBA IHZlY3RfaXNfc2ltcGxlX3JlZHVjdGlvbl8xIChsb29wX3ZlY19pbmYKICAg IH0KIAogICB0eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfYXNzaWduX2xocyAo ZGVmX3N0bXQpKTsKLSAgaWYgKChUUkVFX0NPREUgKG9wMSkgPT0gU1NBX05B TUUKLSAgICAgICAmJiAhdHlwZXNfY29tcGF0aWJsZV9wICh0eXBlLFRSRUVf VFlQRSAob3AxKSkpCi0gICAgICB8fCAoVFJFRV9DT0RFIChvcDIpID09IFNT QV9OQU1FCi0gICAgICAgICAgJiYgIXR5cGVzX2NvbXBhdGlibGVfcCAodHlw ZSwgVFJFRV9UWVBFIChvcDIpKSkKLSAgICAgIHx8IChvcDMgJiYgVFJFRV9D T0RFIChvcDMpID09IFNTQV9OQU1FCi0gICAgICAgICAgJiYgIXR5cGVzX2Nv bXBhdGlibGVfcCAodHlwZSwgVFJFRV9UWVBFIChvcDMpKSkKLSAgICAgIHx8 IChvcDQgJiYgVFJFRV9DT0RFIChvcDQpID09IFNTQV9OQU1FCi0gICAgICAg ICAgJiYgIXR5cGVzX2NvbXBhdGlibGVfcCAodHlwZSwgVFJFRV9UWVBFIChv cDQpKSkpCisgIGlmIChTVE1UX1ZJTkZPX0NPTVBPVU5EX1BBVFRFUk4gKHZp bmZvX2Zvcl9zdG10IChkZWZfc3RtdCkpIAorICAgICAgICAhPSBtaW5tYXhf bG9jX3N0bXQKKyAgICAgICYmICgoVFJFRV9DT0RFIChvcDEpID09IFNTQV9O QU1FIAorICAgICAgICAgICAmJiAhdHlwZXNfY29tcGF0aWJsZV9wICh0eXBl LCBUUkVFX1RZUEUgKG9wMSkpKQorICAgICAgICAgIHx8IChUUkVFX0NPREUg KG9wMikgPT0gU1NBX05BTUUKKyAgICAgICAgICAgJiYgIXR5cGVzX2NvbXBh dGlibGVfcCAodHlwZSwgVFJFRV9UWVBFIChvcDIpKSkKKyAgICAgICAgICB8 fCAob3AzICYmIFRSRUVfQ09ERSAob3AzKSA9PSBTU0FfTkFNRQorICAgICAg ICAgICAmJiAhdHlwZXNfY29tcGF0aWJsZV9wICh0eXBlLCBUUkVFX1RZUEUg KG9wMykpKQorICAgICAgICAgIHx8IChvcDQgJiYgVFJFRV9DT0RFIChvcDQp ID09IFNTQV9OQU1FCisgICAgICAgICAgICYmICF0eXBlc19jb21wYXRpYmxl X3AgKHR5cGUsIFRSRUVfVFlQRSAob3A0KSkpKSkKICAgICB7CiAgICAgICBp ZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxTKSkKICAg ICAgICAgewpAQCAtMTg0MiwxNyArMTkxMywxNyBAQCB2ZWN0X2lzX3NpbXBs ZV9yZWR1Y3Rpb25fMSAobG9vcF92ZWNfaW5mCiAgICAgICAgICAgcHJpbnRf Z2VuZXJpY19leHByICh2ZWN0X2R1bXAsIHR5cGUsIFRERl9TTElNKTsKICAg ICAgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICIsIG9wZXJhbmRzIHR5cGVz OiAiKTsKICAgICAgICAgICBwcmludF9nZW5lcmljX2V4cHIgKHZlY3RfZHVt cCwgVFJFRV9UWVBFIChvcDEpLCBUREZfU0xJTSk7Ci0gICAgICAgICAgZnBy aW50ZiAodmVjdF9kdW1wLCAiLCIpOworICAgICAgICAgIGZwcmludGYgKHZl Y3RfZHVtcCwgIiwgIik7CiAgICAgICAgICAgcHJpbnRfZ2VuZXJpY19leHBy ICh2ZWN0X2R1bXAsIFRSRUVfVFlQRSAob3AyKSwgVERGX1NMSU0pOwogICAg ICAgICAgIGlmIChvcDMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg IGZwcmludGYgKHZlY3RfZHVtcCwgIiwiKTsKKyAgICAgICAgICAgICAgZnBy aW50ZiAodmVjdF9kdW1wLCAiLCAiKTsKICAgICAgICAgICAgICAgcHJpbnRf Z2VuZXJpY19leHByICh2ZWN0X2R1bXAsIFRSRUVfVFlQRSAob3AzKSwgVERG X1NMSU0pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgaWYgKG9wNCkK ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZnByaW50ZiAodmVjdF9k dW1wLCAiLCIpOworICAgICAgICAgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAs ICIsICIpOwogICAgICAgICAgICAgICBwcmludF9nZW5lcmljX2V4cHIgKHZl Y3RfZHVtcCwgVFJFRV9UWVBFIChvcDQpLCBUREZfU0xJTSk7CiAgICAgICAg ICAgICB9CiAgICAgICAgIH0KQEAgLTE5NjAsNyArMjAzMSw3IEBAIHZlY3Rf aXNfc2ltcGxlX3JlZHVjdGlvbl8xIChsb29wX3ZlY19pbmYKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA9PSB2ZWN0X2ludGVybmFsX2RlZgog CQkgICAgICAgICAgICYmICFpc19sb29wX2hlYWRlcl9iYl9wIChnaW1wbGVf YmIgKGRlZjIpKSkpKSkpCiAgICAgewotICAgICAgaWYgKGNoZWNrX3JlZHVj dGlvbikKKyAgICAgIGlmIChjaGVja19yZWR1Y3Rpb24gJiYgY29kZSAhPSBD T05EX0VYUFIpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBTd2FwIG9wZXJh bmRzIChqdXN0IGZvciBzaW1wbGljaXR5IC0gc28gdGhhdCB0aGUgcmVzdCBv ZiB0aGUgY29kZQogCSAgICAgY2FuIGFzc3VtZSB0aGF0IHRoZSByZWR1Y3Rp b24gdmFyaWFibGUgaXMgYWx3YXlzIHRoZSBsYXN0IChzZWNvbmQpCkBAIC0y NDMxLDcgKzI1MDIsNiBAQCB2ZWN0X21vZGVsX3JlZHVjdGlvbl9jb3N0IChz dG10X3ZlY19pbmZvCiAgIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbyA9IFNU TVRfVklORk9fTE9PUF9WSU5GTyAoc3RtdF9pbmZvKTsKICAgc3RydWN0IGxv b3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOwogCi0K ICAgLyogQ29zdCBvZiByZWR1Y3Rpb24gb3AgaW5zaWRlIGxvb3AuICAqLwog ICBTVE1UX1ZJTkZPX0lOU0lERV9PRl9MT09QX0NPU1QgKHN0bXRfaW5mbykg CiAgICAgKz0gbmNvcGllcyAqIHZlY3RfZ2V0X2Nvc3QgKHZlY3Rvcl9zdG10 KTsKQEAgLTI0NjgsMTEgKzI1MzgsMTUgQEAgdmVjdF9tb2RlbF9yZWR1Y3Rp b25fY29zdCAoc3RtdF92ZWNfaW5mbwogICBtb2RlID0gVFlQRV9NT0RFICh2 ZWN0eXBlKTsKICAgb3JpZ19zdG10ID0gU1RNVF9WSU5GT19SRUxBVEVEX1NU TVQgKHN0bXRfaW5mbyk7CiAKLSAgaWYgKCFvcmlnX3N0bXQpCisgIGlmICgh b3JpZ19zdG10IHx8IFNUTVRfVklORk9fQ09NUE9VTkRfUEFUVEVSTiAoc3Rt dF9pbmZvKSkgCiAgICAgb3JpZ19zdG10ID0gU1RNVF9WSU5GT19TVE1UIChz dG10X2luZm8pOwogCiAgIGNvZGUgPSBnaW1wbGVfYXNzaWduX3Joc19jb2Rl IChvcmlnX3N0bXQpOwogCisgIGlmIChTVE1UX1ZJTkZPX0NPTVBPVU5EX1BB VFRFUk4gKHN0bXRfaW5mbykgPT0gbWlubWF4X2xvY19zdG10KQorICAgIFNU TVRfVklORk9fSU5TSURFX09GX0xPT1BfQ09TVCAoc3RtdF9pbmZvKQorICAg ICAgKz0gbmNvcGllcyAqIDUgKiB2ZWN0X2dldF9jb3N0ICh2ZWN0b3Jfc3Rt dCk7CisKICAgLyogQWRkIGluIGNvc3QgZm9yIGluaXRpYWwgZGVmaW5pdGlv bi4gICovCiAgIG91dGVyX2Nvc3QgKz0gdmVjdF9nZXRfY29zdCAoc2NhbGFy X3RvX3ZlYyk7CiAKQEAgLTI0ODgsMjggKzI1NjIsMzQgQEAgdmVjdF9tb2Rl bF9yZWR1Y3Rpb25fY29zdCAoc3RtdF92ZWNfaW5mbwogICAgICAgICAgICAg ICAgICAgICAgICsgdmVjdF9nZXRfY29zdCAodmVjX3RvX3NjYWxhcik7IAog ICAgICAgZWxzZQogCXsKLQkgIGludCB2ZWNfc2l6ZV9pbl9iaXRzID0gdHJl ZV9sb3dfY3N0IChUWVBFX1NJWkUgKHZlY3R5cGUpLCAxKTsKLQkgIHRyZWUg Yml0c2l6ZSA9Ci0JICAgIFRZUEVfU0laRSAoVFJFRV9UWVBFIChnaW1wbGVf YXNzaWduX2xocyAob3JpZ19zdG10KSkpOwotCSAgaW50IGVsZW1lbnRfYml0 c2l6ZSA9IHRyZWVfbG93X2NzdCAoYml0c2l6ZSwgMSk7Ci0JICBpbnQgbmVs ZW1lbnRzID0gdmVjX3NpemVfaW5fYml0cyAvIGVsZW1lbnRfYml0c2l6ZTsK LQotCSAgb3B0YWIgPSBvcHRhYl9mb3JfdHJlZV9jb2RlIChjb2RlLCB2ZWN0 eXBlLCBvcHRhYl9kZWZhdWx0KTsKLQotCSAgLyogV2UgaGF2ZSBhIHdob2xl IHZlY3RvciBzaGlmdCBhdmFpbGFibGUuICAqLwotCSAgaWYgKFZFQ1RPUl9N T0RFX1AgKG1vZGUpCi0JICAgICAgJiYgb3B0YWJfaGFuZGxlciAob3B0YWIs IG1vZGUpICE9IENPREVfRk9SX25vdGhpbmcKLQkgICAgICAmJiBvcHRhYl9o YW5kbGVyICh2ZWNfc2hyX29wdGFiLCBtb2RlKSAhPSBDT0RFX0ZPUl9ub3Ro aW5nKQotCSAgICAvKiBGaW5hbCByZWR1Y3Rpb24gdmlhIHZlY3RvciBzaGlm dHMgYW5kIHRoZSByZWR1Y3Rpb24gb3BlcmF0b3IuIEFsc28KLQkgICAgICAg cmVxdWlyZXMgc2NhbGFyIGV4dHJhY3QuICAqLwotCSAgICBvdXRlcl9jb3N0 ICs9ICgoZXhhY3RfbG9nMihuZWxlbWVudHMpICogMikgCi0gICAgICAgICAg ICAgICogdmVjdF9nZXRfY29zdCAodmVjdG9yX3N0bXQpIAotICAJICAgICAg KyB2ZWN0X2dldF9jb3N0ICh2ZWNfdG9fc2NhbGFyKSk7Ci0JICBlbHNlCi0J ICAgIC8qIFVzZSBleHRyYWN0cyBhbmQgcmVkdWN0aW9uIG9wIGZvciBmaW5h bCByZWR1Y3Rpb24uICBGb3IgTiBlbGVtZW50cywKLSAgICAgICAgICAgICAg IHdlIGhhdmUgTiBleHRyYWN0cyBhbmQgTi0xIHJlZHVjdGlvbiBvcHMuICAq LwotCSAgICBvdXRlcl9jb3N0ICs9ICgobmVsZW1lbnRzICsgbmVsZW1lbnRz IC0gMSkgCi0gICAgICAgICAgICAgICogdmVjdF9nZXRfY29zdCAodmVjdG9y X3N0bXQpKTsKKyAgICAgICAgICBpZiAoU1RNVF9WSU5GT19DT01QT1VORF9Q QVRURVJOIChzdG10X2luZm8pKQorICAgICAgICAgICAgb3V0ZXJfY29zdCAr PSA2ICogdmVjdF9nZXRfY29zdCAodmVjdG9yX3N0bXQpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICsgdmVjdF9nZXRfY29zdCAodmVjX3RvX3NjYWxh cik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworCSAgICAgIGlu dCB2ZWNfc2l6ZV9pbl9iaXRzID0gdHJlZV9sb3dfY3N0IChUWVBFX1NJWkUg KHZlY3R5cGUpLCAxKTsKKwkgICAgICB0cmVlIGJpdHNpemUgPQorCQlUWVBF X1NJWkUgKFRSRUVfVFlQRSAoZ2ltcGxlX2Fzc2lnbl9saHMgKG9yaWdfc3Rt dCkpKTsKKwkgICAgICBpbnQgZWxlbWVudF9iaXRzaXplID0gdHJlZV9sb3df Y3N0IChiaXRzaXplLCAxKTsKKwkgICAgICBpbnQgbmVsZW1lbnRzID0gdmVj X3NpemVfaW5fYml0cyAvIGVsZW1lbnRfYml0c2l6ZTsKKworCSAgICAgIG9w dGFiID0gb3B0YWJfZm9yX3RyZWVfY29kZSAoY29kZSwgdmVjdHlwZSwgb3B0 YWJfZGVmYXVsdCk7CisKKwkgICAgICAvKiBXZSBoYXZlIGEgd2hvbGUgdmVj dG9yIHNoaWZ0IGF2YWlsYWJsZS4gICovCisJICAgICAgaWYgKFZFQ1RPUl9N T0RFX1AgKG1vZGUpCisJICAgICAgICAgICYmIG9wdGFiX2hhbmRsZXIgKG9w dGFiLCBtb2RlKSAhPSBDT0RFX0ZPUl9ub3RoaW5nCisJICAgICAgICAgICYm IG9wdGFiX2hhbmRsZXIgKHZlY19zaHJfb3B0YWIsIG1vZGUpICE9IENPREVf Rk9SX25vdGhpbmcpCisJICAgICAgICAvKiBGaW5hbCByZWR1Y3Rpb24gdmlh IHZlY3RvciBzaGlmdHMgYW5kIHRoZSByZWR1Y3Rpb24gCisJCSAgIG9wZXJh dG9yLiBBbHNvIHJlcXVpcmVzIHNjYWxhciBleHRyYWN0LiAgKi8KKwkgICAg ICAgIG91dGVyX2Nvc3QgKz0gKChleGFjdF9sb2cyKG5lbGVtZW50cykgKiAy KSAKKyAgICAgICAgICAgICAgICAgICogdmVjdF9nZXRfY29zdCAodmVjdG9y X3N0bXQpIAorICAJICAgICAgICAgICsgdmVjdF9nZXRfY29zdCAodmVjX3Rv X3NjYWxhcikpOworCSAgICAgIGVsc2UKKwkgICAgICAgIC8qIFVzZSBleHRy YWN0cyBhbmQgcmVkdWN0aW9uIG9wIGZvciBmaW5hbCByZWR1Y3Rpb24uICBG b3IgTiAKKwkJICAgZWxlbWVudHMsIHdlIGhhdmUgTiBleHRyYWN0cyBhbmQg Ti0xIHJlZHVjdGlvbiBvcHMuICAqLworCQlvdXRlcl9jb3N0ICs9ICgobmVs ZW1lbnRzICsgbmVsZW1lbnRzIC0gMSkgCisJCSAgKiB2ZWN0X2dldF9jb3N0 ICh2ZWN0b3Jfc3RtdCkpOworCSAgICB9CiAJfQogICAgIH0KIApAQCAtMzAx MCw2ICszMDkwLDEyNyBAQCBnZXRfaW5pdGlhbF9kZWZfZm9yX3JlZHVjdGlv biAoZ2ltcGxlIHN0CiAgIHJldHVybiBpbml0X2RlZjsKIH0KIAorLyogQ3Jl YXRlIG1pbi9tYXggbG9jYXRpb24gZXBpbG9ndWUgY2FsY3VsYXRpb24uIFdl IGhhdmUgYm90aCB2ZWN0b3IgYW5kCisgICBleHRyYWN0ZWQgc2NhbGFyIHJl c3VsdHMgb2YgbWluL21heCBjb21wdXRhdGlvbiwgYW5kIGEgdmVjdG9yIG9m IGxvY2F0aW9ucworICAgdGhhdCB3ZSBuZWVkIHRvIHJlZHVjZSB0byBhIHNj YWxhciByZXN1bHQgbm93LgorICAgV2UgdXNlIGEgdGVjaG5pcXVlIGRlc2Ny aWJlZCBpbiB0aGUgZG9jdW1lbnRpb24gb2YKKyAgIHZlY3Rvcml6ZV9taW5t YXhfbG9jYXRpb25fcGF0dGVybiAoKS4gICovCisKK3N0YXRpYyB2b2lkCit2 ZWN0X2NyZWF0ZV9lcGlsb2d1ZV9mb3JfY29tcG91bmRfcGF0dGVybiAoZ2lt cGxlIHN0bXQsIHRyZWUgdmVjdHlwZSwgCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgKnJlZHVj X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2ltcGxlICpuZXdfcGhpLCAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciAq ZXhpdF9nc2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW51bSB0cmVlX2NvZGUgKmNvZGUpCit7CisgIHN0bXRfdmVj X2luZm8gc3RtdF9pbmZvID0gdmluZm9fZm9yX3N0bXQgKHN0bXQpOworICBs b29wX3ZlY19pbmZvIGxvb3BfdmluZm8gPSBTVE1UX1ZJTkZPX0xPT1BfVklO Rk8gKHN0bXRfaW5mbyk7CisgIHN0cnVjdCBsb29wICpsb29wID0gTE9PUF9W SU5GT19MT09QIChsb29wX3ZpbmZvKTsKKyAgdHJlZSB0ID0gTlVMTF9UUkVF LCBtaW5tYXhfdmVjLCBtaW5tYXhfcmVzID0gTlVMTF9UUkVFLCBvcmlnX2Nv bmQsIHZhbDsKKyAgZ2ltcGxlIHJlbGF0ZWQsIG1pbl9tYXhfc3RtdCwgcmVs YXRlZF9yZXM7CisgIGVudW0gbWFjaGluZV9tb2RlIHZlY19tb2RlOworICBv cHRhYiByZWR1Y19vcHRhYjsKKyAgdW5zaWduZWQgaW50IG51bml0czsKKyAg aW50IGk7CisgIGltbV91c2VfaXRlcmF0b3IgaW1tX2l0ZXI7CisgIHVzZV9v cGVyYW5kX3AgdXNlX3A7CisgIGJhc2ljX2Jsb2NrIGV4aXRfYmI7CisgIGVu dW0gdHJlZV9jb2RlIG9yaWdfY29kZTsKKworICBpZiAobmVzdGVkX2luX3Zl Y3RfbG9vcF9wIChsb29wLCBzdG10KSkKKyAgICBsb29wID0gbG9vcC0+aW5u ZXI7CisKKyAgZXhpdF9iYiA9IHNpbmdsZV9leGl0IChsb29wKS0+ZGVzdDsK KworICBpZiAoU1RNVF9WSU5GT19DT01QT1VORF9QQVRURVJOIChzdG10X2lu Zm8pICE9IG1pbm1heF9sb2Nfc3RtdCkKKyAgICByZXR1cm47CisKKyAgcmVs YXRlZCA9IFNUTVRfVklORk9fUkVMQVRFRF9TVE1UIChzdG10X2luZm8pOwor ICByZWxhdGVkX3JlcyA9IFNUTVRfVklORk9fUkVEVUNfU0NBTEFSX1JFU19T VE1UICh2aW5mb19mb3Jfc3RtdCAocmVsYXRlZCkpOworICBnY2NfYXNzZXJ0 IChyZWxhdGVkX3Jlcyk7CisKKyAgLyogR2V0IGEgdmVjdG9yIHJlc3VsdCBv ZiBtaW4vbWF4IGNvbXB1dGF0aW9uLiAgKi8KKyAgbWluX21heF9zdG10ID0g U1RNVF9WSU5GT19WRUNfU1RNVCAodmluZm9fZm9yX3N0bXQgKHJlbGF0ZWQp KTsKKyAgRk9SX0VBQ0hfSU1NX1VTRV9GQVNUICh1c2VfcCwgaW1tX2l0ZXIs IGdpbXBsZV9hc3NpZ25fbGhzIChtaW5fbWF4X3N0bXQpKQorICAgIGlmIChn aW1wbGVfYmIgKFVTRV9TVE1UICh1c2VfcCkpID09IGV4aXRfYmIKKyAgICAg ICAgJiYgZ2ltcGxlX2NvZGUgKFVTRV9TVE1UICh1c2VfcCkpID09IEdJTVBM RV9QSEkpCisgICAgICBtaW5tYXhfcmVzID0gUEhJX1JFU1VMVCAoVVNFX1NU TVQgKHVzZV9wKSk7CisgICAKKyAgZ2NjX2Fzc2VydCAobWlubWF4X3Jlcyk7 CisKKyAgLyogQ3JlYXRlIHZlY3RvciB7bWluLCBtaW4sLi4ufSBvciB7bWF4 LCBtYXgsIC4uLn0uICAqLworICBudW5pdHMgPSBUWVBFX1ZFQ1RPUl9TVUJQ QVJUUyAodmVjdHlwZSk7CisgIGZvciAoaSA9IG51bml0cyAtIDE7IGkgPj0g MDsgLS1pKQorICAgIHQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgZ2ltcGxl X2Fzc2lnbl9saHMgKHJlbGF0ZWRfcmVzKSwgdCk7CisKKyAgbWlubWF4X3Zl YyA9IGJ1aWxkX2NvbnN0cnVjdG9yX2Zyb21fbGlzdCAoVFJFRV9UWVBFICht aW5tYXhfcmVzKSwgdCk7CisKKyAgLyogVG8gZXh0cmFjdCB0aGUgZmluYWwg cG9zaXRpb24gdmFsdWUsIHdlIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRvIGxv b2sKKyAgICAgZm9yIG1heGltdW0gKEdUX0VYUFIgYW5kIExUX0VYUFIpIG9y IG1pbmltdW0gKEdFX0VYUFIgb3IgTEVfRVhQUikuICAqLyAKKyAgb3JpZ19j b25kID0gVFJFRV9PUEVSQU5EIChnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQp LCAwKTsKKyAgaWYgKFRSRUVfQ09ERSAob3JpZ19jb25kKSA9PSBTU0FfTkFN RSkKKyAgICB7CisgICAgICBnaW1wbGUgY29uZF9kZWZfc3RtdCA9IFNTQV9O QU1FX0RFRl9TVE1UIChvcmlnX2NvbmQpOworICAgICAgb3JpZ19jb2RlID0g Z2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoY29uZF9kZWZfc3RtdCk7CisgICAg fQorICBlbHNlCisgICAgb3JpZ19jb2RlID0gVFJFRV9DT0RFIChvcmlnX2Nv bmQpOworCisgIGlmIChvcmlnX2NvZGUgPT0gR1RfRVhQUiB8fCBvcmlnX2Nv ZGUgPT0gTFRfRVhQUikKKyAgICB7CisgICAgICB2YWwgPSBUWVBFX01BWF9W QUxVRSAoVFJFRV9UWVBFIChnaW1wbGVfYXNzaWduX2xocyAoc3RtdCkpKTsK KyAgICAgICpjb2RlID0gTUlOX0VYUFI7CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgdmFsID0gVFlQRV9NSU5fVkFMVUUgKFRSRUVfVFlQRSAoZ2lt cGxlX2Fzc2lnbl9saHMgKHN0bXQpKSk7CisgICAgICAqY29kZSA9IE1BWF9F WFBSOworICAgIH0KKworICAvKiBCdWlsZCBhIHZlY3RvciBvZiBtYXhpbXVt IG9yIG1pbmltdW0gdmFsdWVzLiAgKi8KKyAgdCA9IE5VTExfVFJFRTsKKyAg Zm9yIChpID0gbnVuaXRzIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgdCA9IHRy ZWVfY29ucyAoTlVMTF9UUkVFLCB2YWwsIHQpOyAKKworICAvKiBQcm9tb3Rl IEdTSSB0byBhZnRlciB0aGUgbWluL21heCByZXN1bHQgZXh0cmFjdGlvbiwg c2luY2Ugd2UgdXNlIGl0CisgICAgIGluIGluZGV4IGNhbGN1bGF0aW9uLiAo V2UgaW5zZXJ0IHRoZSBtaW4vbWF4IHNjYWxhciBzdGF0ZW1lbnQgYmVmb3Jl CisgICAgIHRoZSBpbmRleCBjYWxjdWxhdGlvbiBzdGF0ZW1lbnQgKGluIHZl Y3RfcmVjb2dfbWluX21heF9sb2NfcGF0dGVybigpKSwKKyAgICAgdGhlcmVm b3JlLCBpdHMgZXBpbG9ndWUgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGVwaWxv Z3VlIG9mIHRoZSBpbmRleAorICAgICBjYWxjdWxhdGlvbiBzdGF0ZW1lbnQu ICAqLworICAqZXhpdF9nc2kgPSBnc2lfZm9yX3N0bXQgKHJlbGF0ZWRfcmVz KTsKKyAgZ3NpX25leHQgKGV4aXRfZ3NpKTsKKyAgbWlubWF4X3ZlYyA9IHZl Y3RfaW5pdF92ZWN0b3IgKHN0bXQsIG1pbm1heF92ZWMsIFRSRUVfVFlQRSAo bWlubWF4X3JlcyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXhpdF9nc2kpOworICAqbmV3X3BoaSA9IHZlY3Rvcml6ZV9taW5tYXhf bG9jYXRpb25fcGF0dGVybiAoc3RtdCwgZXhpdF9nc2ksIEVRX0VYUFIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtaW5tYXhfcmVzLCBtaW5tYXhfdmVjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEhJX1JFU1VMVCAoKm5l d19waGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnVpbGRfdmVjdG9yICh2ZWN0eXBlLCB0KSk7CisKKyAg LyogRXh0cmFjdCBtaW5pbXVtIG9yIG1heGltdW0gZnJvbSBWRUNUT1JfUkVT VUxUIHRvIGdldCB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QKKyAgICAgaW5kZXgg KHVzaW5nIG9uZSBvZiB0aGUgYWJvdmUgdGVjaG5pcXVlcykuICAqLworICAq cmVkdWNfY29kZSA9IEVSUk9SX01BUks7CisgIGlmIChyZWR1Y3Rpb25fY29k ZV9mb3Jfc2NhbGFyX2NvZGUgKCpjb2RlLCByZWR1Y19jb2RlKSkKKyAgICB7 CisgICAgICByZWR1Y19vcHRhYiA9IG9wdGFiX2Zvcl90cmVlX2NvZGUgKCpy ZWR1Y19jb2RlLCB2ZWN0eXBlLCBvcHRhYl9kZWZhdWx0KTsKKyAgICAgIGlm ICghcmVkdWNfb3B0YWIpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAodmVj dF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxTKSkKKyAgICAgICAg ICAgIGZwcmludGYgKHZlY3RfZHVtcCwgIm5vIG9wdGFiIGZvciByZWR1Y3Rp b24uIik7CisKKyAgICAgICAgICByZWR1Y19jb2RlID0gRVJST1JfTUFSSzsK KyAgICAgICAgfQorCisgICAgICAgIHZlY19tb2RlID0gVFlQRV9NT0RFICh2 ZWN0eXBlKTsKKyAgICAgICAgaWYgKHJlZHVjX29wdGFiCisgICAgICAgICAg ICAmJiBvcHRhYl9oYW5kbGVyIChyZWR1Y19vcHRhYiwgdmVjX21vZGUpICA9 PSBDT0RFX0ZPUl9ub3RoaW5nKQorICAgICAgICAgIHsKKyAgICAgICAgICAg IGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JUX0RFVEFJTFMpKQor ICAgICAgICAgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJyZWR1YyBvcCBu b3Qgc3VwcG9ydGVkIGJ5IHRhcmdldC4iKTsKKworICAgICAgICAgICAgKnJl ZHVjX2NvZGUgPSBFUlJPUl9NQVJLOworICAgICAgICAgIH0KKyAgICAgfQor fQogCiAvKiBGdW5jdGlvbiB2ZWN0X2NyZWF0ZV9lcGlsb2dfZm9yX3JlZHVj dGlvbgogCkBAIC0zMTEyLDYgKzMzMTMsNyBAQCB2ZWN0X2NyZWF0ZV9lcGls b2dfZm9yX3JlZHVjdGlvbiAoVkVDICh0CiAgIHVuc2lnbmVkIGludCBncm91 cF9zaXplID0gMSwgaywgcmF0aW87CiAgIFZFQyAodHJlZSwgaGVhcCkgKnZl Y19pbml0aWFsX2RlZnMgPSBOVUxMOwogICBWRUMgKGdpbXBsZSwgaGVhcCkg KnBoaXM7CisgIHRyZWUgdmVjX3RlbXA7CiAKICAgaWYgKHNscF9ub2RlKQog ICAgIGdyb3VwX3NpemUgPSBWRUNfbGVuZ3RoIChnaW1wbGUsIFNMUF9UUkVF X1NDQUxBUl9TVE1UUyAoc2xwX25vZGUpKTsgCkBAIC0zMTY5LDkgKzMzNzEs OSBAQCB2ZWN0X2NyZWF0ZV9lcGlsb2dfZm9yX3JlZHVjdGlvbiAoVkVDICh0 CiAgIGVsc2UKICAgICB7CiAgICAgICB2ZWNfaW5pdGlhbF9kZWZzID0gVkVD X2FsbG9jICh0cmVlLCBoZWFwLCAxKTsKLSAgICAgLyogRm9yIHRoZSBjYXNl IG9mIHJlZHVjdGlvbiwgdmVjdF9nZXRfdmVjX2RlZl9mb3Jfb3BlcmFuZCBy ZXR1cm5zCi0gICAgICAgIHRoZSBzY2FsYXIgZGVmIGJlZm9yZSB0aGUgbG9v cCwgdGhhdCBkZWZpbmVzIHRoZSBpbml0aWFsIHZhbHVlCi0gICAgICAgIG9m IHRoZSByZWR1Y3Rpb24gdmFyaWFibGUuICAqLworICAgICAgLyogRm9yIHRo ZSBjYXNlIG9mIHJlZHVjdGlvbiwgdmVjdF9nZXRfdmVjX2RlZl9mb3Jfb3Bl cmFuZCByZXR1cm5zCisgICAgICAgICB0aGUgc2NhbGFyIGRlZiBiZWZvcmUg dGhlIGxvb3AsIHRoYXQgZGVmaW5lcyB0aGUgaW5pdGlhbCB2YWx1ZQorICAg ICAgICAgb2YgdGhlIHJlZHVjdGlvbiB2YXJpYWJsZS4gICovCiAgICAgICB2 ZWNfaW5pdGlhbF9kZWYgPSB2ZWN0X2dldF92ZWNfZGVmX2Zvcl9vcGVyYW5k IChyZWR1Y3Rpb25fb3AsIHN0bXQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRqdXN0bWVudF9k ZWYpOwogICAgICAgVkVDX3F1aWNrX3B1c2ggKHRyZWUsIHZlY19pbml0aWFs X2RlZnMsIHZlY19pbml0aWFsX2RlZik7CkBAIC0zMjcxLDE4ICszNDczLDE4 IEBAIHZlY3RfY3JlYXRlX2VwaWxvZ19mb3JfcmVkdWN0aW9uIChWRUMgKHQK ICAgICAgICAgIGRlZmluZWQgaW4gdGhlIGxvb3AuICBJbiBjYXNlIFNUTVQg aXMgYSAicGF0dGVybi1zdG10IiAoaS5lLiAtIGl0CiAgICAgICAgICByZXBy ZXNlbnRzIGEgcmVkdWN0aW9uIHBhdHRlcm4pLCB0aGUgdHJlZS1jb2RlIGFu ZCBzY2FsYXItZGVmIGFyZQogICAgICAgICAgdGFrZW4gZnJvbSB0aGUgb3Jp Z2luYWwgc3RtdCB0aGF0IHRoZSBwYXR0ZXJuLXN0bXQgKFNUTVQpIHJlcGxh Y2VzLgotICAgICAgICAgT3RoZXJ3aXNlIChpdCBpcyBhIHJlZ3VsYXIgcmVk dWN0aW9uKSAtIHRoZSB0cmVlLWNvZGUgYW5kIHNjYWxhci1kZWYKLSAgICAg ICAgIGFyZSB0YWtlbiBmcm9tIFNUTVQuICAqLworICAgICAgICAgT3RoZXJ3 aXNlIChpdCBpcyBhIHJlZ3VsYXIgcmVkdWN0aW9uIG9yIGEgY29tcG91bmQg cGF0dGVybikgLSB0aGUgCisgICAgICAgICB0cmVlLWNvZGUgYW5kIHNjYWxh ci1kZWYgYXJlIHRha2VuIGZyb20gU1RNVC4gICovCiAKICAgb3JpZ19zdG10 ID0gU1RNVF9WSU5GT19SRUxBVEVEX1NUTVQgKHN0bXRfaW5mbyk7Ci0gIGlm ICghb3JpZ19zdG10KQorICBpZiAoIW9yaWdfc3RtdCB8fCBTVE1UX1ZJTkZP X0NPTVBPVU5EX1BBVFRFUk4gKHN0bXRfaW5mbykpICAKICAgICB7Ci0gICAg ICAvKiBSZWd1bGFyIHJlZHVjdGlvbiAgKi8KKyAgICAgIC8qIFJlZ3VsYXIg cmVkdWN0aW9uIG9yIGNvbXBvdW5kIHBhdHRlcm4uICAqLwogICAgICAgb3Jp Z19zdG10ID0gc3RtdDsKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICAv KiBSZWR1Y3Rpb24gcGF0dGVybiAgKi8KKyAgICAgIC8qIFJlZHVjdGlvbiBw YXR0ZXJuLiAgKi8gCiAgICAgICBzdG10X3ZlY19pbmZvIHN0bXRfdmluZm8g PSB2aW5mb19mb3Jfc3RtdCAob3JpZ19zdG10KTsKICAgICAgIGdjY19hc3Nl cnQgKFNUTVRfVklORk9fSU5fUEFUVEVSTl9QIChzdG10X3ZpbmZvKSk7CiAg ICAgICBnY2NfYXNzZXJ0IChTVE1UX1ZJTkZPX1JFTEFURURfU1RNVCAoc3Rt dF92aW5mbykgPT0gc3RtdCk7CkBAIC0zMzA5LDYgKzM1MTEsMTYgQEAgdmVj dF9jcmVhdGVfZXBpbG9nX2Zvcl9yZWR1Y3Rpb24gKFZFQyAodAogICBpZiAo bmVzdGVkX2luX3ZlY3RfbG9vcCAmJiAhZG91YmxlX3JlZHVjKQogICAgIGdv dG8gdmVjdF9maW5hbGl6ZV9yZWR1Y3Rpb247CiAKKyAgLyogQ3JlYXRlIGFu IGVwaWxvZ3VlIGZvciBjb21wb3VuZCBwYXR0ZXJuLiAgKi8KKyAgaWYgKFNU TVRfVklORk9fQ09NUE9VTkRfUEFUVEVSTiAoc3RtdF9pbmZvKSkKKyAgICB7 CisgICAgICAvKiBGT1JOT1c6IFNMUCB3aXRoIGNvbXBvdW5kIHBhdHRlcm5z IGlzIG5vdCBzdXBwb3J0ZWQuICAqLworICAgICAgbmV3X3BoaSA9IFZFQ19p bmRleCAoZ2ltcGxlLCBuZXdfcGhpcywgMCk7CisgICAgICB2ZWN0X2NyZWF0 ZV9lcGlsb2d1ZV9mb3JfY29tcG91bmRfcGF0dGVybiAoc3RtdCwgdmVjdHlw ZSwgJnJlZHVjX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm5ld19waGksICZleGl0X2dzaSwgJmNv ZGUpOworICAgICAgVkVDX3JlcGxhY2UgKGdpbXBsZSwgbmV3X3BoaXMsIDAs IG5ld19waGkpOworICAgIH0KKyAgCiAgIC8qIDIuMyBDcmVhdGUgdGhlIHJl ZHVjdGlvbiBjb2RlLCB1c2luZyBvbmUgb2YgdGhlIHRocmVlIHNjaGVtZXMg ZGVzY3JpYmVkCiAgICAgICAgICBhYm92ZS4gSW4gU0xQIHdlIHNpbXBseSBu ZWVkIHRvIGV4dHJhY3QgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSAKICAg ICAgICAgIHZlY3RvciAod2l0aG91dCByZWR1Y2luZyB0aGVtKSwgc28gd2Ug dXNlIHNjYWxhciBzaGlmdHMuICAqLwpAQCAtMzMyNCw3ICszNTM2LDExIEBA IHZlY3RfY3JlYXRlX2VwaWxvZ19mb3JfcmVkdWN0aW9uIChWRUMgKHQKIAog ICAgICAgdmVjX2Rlc3QgPSB2ZWN0X2NyZWF0ZV9kZXN0aW5hdGlvbl92YXIg KHNjYWxhcl9kZXN0LCB2ZWN0eXBlKTsKICAgICAgIG5ld19waGkgPSBWRUNf aW5kZXggKGdpbXBsZSwgbmV3X3BoaXMsIDApOwotICAgICAgdG1wID0gYnVp bGQxIChyZWR1Y19jb2RlLCB2ZWN0eXBlLCAgUEhJX1JFU1VMVCAobmV3X3Bo aSkpOworICAgICAgaWYgKGdpbXBsZV9jb2RlIChuZXdfcGhpKSA9PSBHSU1Q TEVfUEhJKQorICAgICAgICB2ZWNfdGVtcCA9IFBISV9SRVNVTFQgKG5ld19w aGkpOworICAgICAgZWxzZQorICAgICAgICB2ZWNfdGVtcCA9IGdpbXBsZV9h c3NpZ25fbGhzIChuZXdfcGhpKTsKKyAgICAgIHRtcCA9IGJ1aWxkMSAocmVk dWNfY29kZSwgdmVjdHlwZSwgIHZlY190ZW1wKTsKICAgICAgIGVwaWxvZ19z dG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjX2Rlc3QsIHRtcCk7CiAg ICAgICBuZXdfdGVtcCA9IG1ha2Vfc3NhX25hbWUgKHZlY19kZXN0LCBlcGls b2dfc3RtdCk7CiAgICAgICBnaW1wbGVfYXNzaWduX3NldF9saHMgKGVwaWxv Z19zdG10LCBuZXdfdGVtcCk7CkBAIC0zMzM5LDcgKzM1NTUsNiBAQCB2ZWN0 X2NyZWF0ZV9lcGlsb2dfZm9yX3JlZHVjdGlvbiAoVkVDICh0CiAgICAgICBp bnQgYml0X29mZnNldDsKICAgICAgIGludCBlbGVtZW50X2JpdHNpemUgPSB0 cmVlX2xvd19jc3QgKGJpdHNpemUsIDEpOwogICAgICAgaW50IHZlY19zaXpl X2luX2JpdHMgPSB0cmVlX2xvd19jc3QgKFRZUEVfU0laRSAodmVjdHlwZSks IDEpOwotICAgICAgdHJlZSB2ZWNfdGVtcDsKIAogICAgICAgaWYgKG9wdGFi X2hhbmRsZXIgKHZlY19zaHJfb3B0YWIsIG1vZGUpICE9IENPREVfRk9SX25v dGhpbmcpCiAgICAgICAgIHNoaWZ0X2NvZGUgPSBWRUNfUlNISUZUX0VYUFI7 CkBAIC0zMzU3LDcgKzM1NzIsNyBAQCB2ZWN0X2NyZWF0ZV9lcGlsb2dfZm9y X3JlZHVjdGlvbiAoVkVDICh0CiAgICAgICBlbHNlCiAgICAgICAgIHsKICAg ICAgICAgICBvcHRhYiBvcHRhYiA9IG9wdGFiX2Zvcl90cmVlX2NvZGUgKGNv ZGUsIHZlY3R5cGUsIG9wdGFiX2RlZmF1bHQpOwotICAgICAgICAgIGlmIChv cHRhYl9oYW5kbGVyIChvcHRhYiwgbW9kZSkgPT0gQ09ERV9GT1Jfbm90aGlu ZykKKyAgICAgICAgICBpZiAoIW9wdGFiIHx8IG9wdGFiX2hhbmRsZXIgKG9w dGFiLCBtb2RlKSA9PSBDT0RFX0ZPUl9ub3RoaW5nKQogICAgICAgICAgICAg aGF2ZV93aG9sZV92ZWN0b3Jfc2hpZnQgPSBmYWxzZTsKICAgICAgICAgfQog CkBAIC0zMzc1LDcgKzM1OTAsMTAgQEAgdmVjdF9jcmVhdGVfZXBpbG9nX2Zv cl9yZWR1Y3Rpb24gKFZFQyAodAogCiAgICAgICAgICAgdmVjX2Rlc3QgPSB2 ZWN0X2NyZWF0ZV9kZXN0aW5hdGlvbl92YXIgKHNjYWxhcl9kZXN0LCB2ZWN0 eXBlKTsKICAgICAgICAgICBuZXdfcGhpID0gVkVDX2luZGV4IChnaW1wbGUs IG5ld19waGlzLCAwKTsKLSAgICAgICAgICBuZXdfdGVtcCA9IFBISV9SRVNV TFQgKG5ld19waGkpOworICAgICAgICAgIGlmIChnaW1wbGVfY29kZSAobmV3 X3BoaSkgPT0gR0lNUExFX1BISSkKKyAgICAgICAgICAgIG5ld190ZW1wID0g UEhJX1JFU1VMVCAobmV3X3BoaSk7CisgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgbmV3X3RlbXAgPSBnaW1wbGVfYXNzaWduX2xocyAobmV3X3BoaSk7 CiAgICAgICAgICAgZm9yIChiaXRfb2Zmc2V0ID0gdmVjX3NpemVfaW5fYml0 cy8yOwogICAgICAgICAgICAgICAgYml0X29mZnNldCA+PSBlbGVtZW50X2Jp dHNpemU7CiAgICAgICAgICAgICAgICBiaXRfb2Zmc2V0IC89IDIpCkBAIC0z NDE3LDcgKzM2MzUsMTAgQEAgdmVjdF9jcmVhdGVfZXBpbG9nX2Zvcl9yZWR1 Y3Rpb24gKFZFQyAodAogICAgICAgICAgIHZlY19zaXplX2luX2JpdHMgPSB0 cmVlX2xvd19jc3QgKFRZUEVfU0laRSAodmVjdHlwZSksIDEpOwogICAgICAg ICAgIGZvciAoaSA9IDA7IFZFQ19pdGVyYXRlIChnaW1wbGUsIG5ld19waGlz LCBpLCBuZXdfcGhpKTsgaSsrKQogICAgICAgICAgICAgewotICAgICAgICAg ICAgICB2ZWNfdGVtcCA9IFBISV9SRVNVTFQgKG5ld19waGkpOworICAgICAg ICAgICAgICBpZiAoZ2ltcGxlX2NvZGUgKG5ld19waGkpID09IEdJTVBMRV9Q SEkpCisgICAgICAgICAgICAgICAgdmVjX3RlbXAgPSBQSElfUkVTVUxUIChu ZXdfcGhpKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg IHZlY190ZW1wID0gZ2ltcGxlX2Fzc2lnbl9saHMgKG5ld19waGkpOwogICAg ICAgICAgICAgICByaHMgPSBidWlsZDMgKEJJVF9GSUVMRF9SRUYsIHNjYWxh cl90eXBlLCB2ZWNfdGVtcCwgYml0c2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiaXRzaXplX3plcm9fbm9kZSk7CiAgICAgICAgICAgICAg IGVwaWxvZ19zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3NjYWxh cl9kZXN0LCByaHMpOwpAQCAtMzQ4Nyw2ICszNzA4LDcgQEAgdmVjdF9jcmVh dGVfZXBpbG9nX2Zvcl9yZWR1Y3Rpb24gKFZFQyAodAogICAgICAgICAgICAg LyogTm90IFNMUCAtIHdlIGhhdmUgb25lIHNjYWxhciB0byBrZWVwIGluIFND QUxBUl9SRVNVTFRTLiAgKi8KICAgICAgICAgICAgIFZFQ19zYWZlX3B1c2gg KHRyZWUsIGhlYXAsIHNjYWxhcl9yZXN1bHRzLCBuZXdfdGVtcCk7CiAKKyAg ICAgICAgICBTVE1UX1ZJTkZPX1JFRFVDX1NDQUxBUl9SRVNfU1RNVCAoc3Rt dF9pbmZvKSA9IGVwaWxvZ19zdG10OwogICAgICAgICAgIGV4dHJhY3Rfc2Nh bGFyX3Jlc3VsdCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMzUx NCw2ICszNzM2LDcgQEAgdmVjdF9jcmVhdGVfZXBpbG9nX2Zvcl9yZWR1Y3Rp b24gKFZFQyAodAogICAgICAgZ2ltcGxlX2Fzc2lnbl9zZXRfbGhzIChlcGls b2dfc3RtdCwgbmV3X3RlbXApOwogICAgICAgZ3NpX2luc2VydF9iZWZvcmUg KCZleGl0X2dzaSwgZXBpbG9nX3N0bXQsIEdTSV9TQU1FX1NUTVQpOwogICAg ICAgVkVDX3NhZmVfcHVzaCAodHJlZSwgaGVhcCwgc2NhbGFyX3Jlc3VsdHMs IG5ld190ZW1wKTsKKyAgICAgIFNUTVRfVklORk9fUkVEVUNfU0NBTEFSX1JF U19TVE1UIChzdG10X2luZm8pID0gZXBpbG9nX3N0bXQ7CiAgICAgfQogICAK IHZlY3RfZmluYWxpemVfcmVkdWN0aW9uOgpAQCAtMzUyOSw4ICszNzUyLDEz IEBAIHZlY3RfZmluYWxpemVfcmVkdWN0aW9uOgogICAgICAgaWYgKG5lc3Rl ZF9pbl92ZWN0X2xvb3ApCiAJewogICAgICAgICAgIG5ld19waGkgPSBWRUNf aW5kZXggKGdpbXBsZSwgbmV3X3BoaXMsIDApOworICAgICAgICAgIGlmIChn aW1wbGVfY29kZSAobmV3X3BoaSkgPT0gR0lNUExFX1BISSkKKyAgICAgICAg ICAgIHZlY190ZW1wID0gUEhJX1JFU1VMVCAobmV3X3BoaSk7CisgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgdmVjX3RlbXAgPSBnaW1wbGVfYXNzaWdu X2xocyAobmV3X3BoaSk7CisKIAkgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAo VFJFRV9UWVBFIChhZGp1c3RtZW50X2RlZikpID09IFZFQ1RPUl9UWVBFKTsK LQkgIGV4cHIgPSBidWlsZDIgKGNvZGUsIHZlY3R5cGUsIFBISV9SRVNVTFQg KG5ld19waGkpLCBhZGp1c3RtZW50X2RlZik7CisJICBleHByID0gYnVpbGQy IChjb2RlLCB2ZWN0eXBlLCB2ZWNfdGVtcCwgYWRqdXN0bWVudF9kZWYpOwog CSAgbmV3X2Rlc3QgPSB2ZWN0X2NyZWF0ZV9kZXN0aW5hdGlvbl92YXIgKHNj YWxhcl9kZXN0LCB2ZWN0eXBlKTsKIAl9CiAgICAgICBlbHNlCkBAIC0zNTYz LDYgKzM3OTEsNyBAQCB2ZWN0X2ZpbmFsaXplX3JlZHVjdGlvbjoKICAgICAg ICAgVkVDX3JlcGxhY2UgKHRyZWUsIHNjYWxhcl9yZXN1bHRzLCAwLCBuZXdf dGVtcCk7CiAKICAgICAgIFZFQ19yZXBsYWNlIChnaW1wbGUsIG5ld19waGlz LCAwLCBlcGlsb2dfc3RtdCk7CisgICAgICBTVE1UX1ZJTkZPX1JFRFVDX1ND QUxBUl9SRVNfU1RNVCAoc3RtdF9pbmZvKSA9IGVwaWxvZ19zdG10OwogICAg IH0KIAogICAvKiAyLjYgIEhhbmRsZSB0aGUgbG9vcC1leGl0IHBoaXMuIFJl cGxhY2UgdGhlIHVzZXMgb2Ygc2NhbGFyIGxvb3AtZXhpdApAQCAtMzYzMiw4 ICszODYxLDEwIEBAIHZlY3RfZmluYWxpemVfcmVkdWN0aW9uOgogICAgICAg ICAgIFZFQ19zYWZlX3B1c2ggKGdpbXBsZSwgaGVhcCwgcGhpcywgVVNFX1NU TVQgKHVzZV9wKSk7CiAKICAgICAgIC8qIFdlIGV4cGVjdCB0byBoYXZlIGZv dW5kIGFuIGV4aXRfcGhpIGJlY2F1c2Ugb2YgbG9vcC1jbG9zZWQtc3NhCi0g ICAgICAgICBmb3JtLiAgKi8KLSAgICAgIGdjY19hc3NlcnQgKCFWRUNfZW1w dHkgKGdpbXBsZSwgcGhpcykpOworICAgICAgICAgZm9ybSx1bmxlc3MgaXQn cyBhIG1pbi9tYXggc3RhdGVtZW50IG9mIG1pbi9tYXggbG9jYXRpb24gcGF0 dGVybiwgCisgICAgICAgICB3aGljaCBpcyBpbnNlcnRlZCBieSB0aGUgcGF0 dGVybiByZWNvZ25pdGlvbiBwaGFzZS4gICovCisgICAgICBnY2NfYXNzZXJ0 ICghVkVDX2VtcHR5IChnaW1wbGUsIHBoaXMpCisgICAgICAgICAgICAgICAg ICB8fCBTVE1UX1ZJTkZPX0NPTVBPVU5EX1BBVFRFUk4gKHN0bXRfaW5mbykg PT0gbWlubWF4X3N0bXQpOwogCiAgICAgICBmb3IgKGkgPSAwOyBWRUNfaXRl cmF0ZSAoZ2ltcGxlLCBwaGlzLCBpLCBleGl0X3BoaSk7IGkrKykKICAgICAg ICAgewpAQCAtMzcxNCw3ICszOTQ1LDEyIEBAIHZlY3RfZmluYWxpemVfcmVk dWN0aW9uOgogICAgICAgICAgICAgICAgICAgYWRkX3BoaV9hcmcgKHZlY3Rf cGhpLCB2ZWN0X3BoaV9pbml0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxvb3BfcHJlaGVhZGVyX2VkZ2UgKG91dGVyX2xvb3ApLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOS05PV05fTE9DQVRJT04p OwotICAgICAgICAgICAgICAgICAgYWRkX3BoaV9hcmcgKHZlY3RfcGhpLCBQ SElfUkVTVUxUIChlcGlsb2dfc3RtdCksCisgICAgICAgICAgICAgICAgICBp ZiAoZ2ltcGxlX2NvZGUgKGVwaWxvZ19zdG10KSA9PSBHSU1QTEVfUEhJKQor ICAgICAgICAgICAgICAgICAgICB2ZWNfdGVtcCA9IFBISV9SRVNVTFQgKGVw aWxvZ19zdG10KTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICAgICAgdmVjX3RlbXAgPSBnaW1wbGVfYXNzaWduX2xocyAoZXBp bG9nX3N0bXQpOworCisgICAgICAgICAgICAgICAgICBhZGRfcGhpX2FyZyAo dmVjdF9waGksIHZlY190ZW1wLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxvb3BfbGF0Y2hfZWRnZSAob3V0ZXJfbG9vcCksIFVOS05PV05f TE9DQVRJT04pOwogICAgICAgICAgICAgICAgICAgaWYgKHZlY3RfcHJpbnRf ZHVtcF9pbmZvIChSRVBPUlRfREVUQUlMUykpCiAgICAgICAgICAgICAgICAg ICAgIHsKQEAgLTM4MzcsMTEgKzQwNzMsMTEgQEAgdmVjdG9yaXphYmxlX3Jl ZHVjdGlvbiAoZ2ltcGxlIHN0bXQsIGdpbQogICBiYXNpY19ibG9jayBkZWZf YmI7CiAgIHN0cnVjdCBsb29wICogZGVmX3N0bXRfbG9vcCwgKm91dGVyX2xv b3AgPSBOVUxMOwogICB0cmVlIGRlZl9hcmc7Ci0gIGdpbXBsZSBkZWZfYXJn X3N0bXQ7CisgIGdpbXBsZSBkZWZfYXJnX3N0bXQsIHJlbGF0ZWQ7CiAgIFZF QyAodHJlZSwgaGVhcCkgKnZlY19vcHJuZHMwID0gTlVMTCwgKnZlY19vcHJu ZHMxID0gTlVMTCwgKnZlY3RfZGVmcyA9IE5VTEw7CiAgIFZFQyAoZ2ltcGxl LCBoZWFwKSAqcGhpcyA9IE5VTEw7Ci0gIGludCB2ZWNfbnVtOwotICB0cmVl IGRlZjAsIGRlZjE7CisgIGludCB2ZWNfbnVtLCBjb25kX3JlZHVjX2luZGV4 ID0gMDsKKyAgdHJlZSBkZWYwLCBkZWYxLCBjb25kX3JlZHVjX2RlZiA9IE5V TExfVFJFRTsKIAogICBpZiAobmVzdGVkX2luX3ZlY3RfbG9vcF9wIChsb29w LCBzdG10KSkKICAgICB7CkBAIC0zODUxLDggKzQwODcsMTAgQEAgdmVjdG9y aXphYmxlX3JlZHVjdGlvbiAoZ2ltcGxlIHN0bXQsIGdpbQogICAgIH0KIAog ICAvKiAxLiBJcyB2ZWN0b3JpemFibGUgcmVkdWN0aW9uPyAgKi8KLSAgLyog Tm90IHN1cHBvcnRhYmxlIGlmIHRoZSByZWR1Y3Rpb24gdmFyaWFibGUgaXMg dXNlZCBpbiB0aGUgbG9vcC4gICovCi0gIGlmIChTVE1UX1ZJTkZPX1JFTEVW QU5UIChzdG10X2luZm8pID4gdmVjdF91c2VkX2luX291dGVyKQorICAvKiBO b3Qgc3VwcG9ydGFibGUgaWYgdGhlIHJlZHVjdGlvbiB2YXJpYWJsZSBpcyB1 c2VkIGluIHRoZSBsb29wLAorICAgICB1bmxlc3MgaXQncyBhIHBhdHRlcm4u ICAqLworICBpZiAoU1RNVF9WSU5GT19SRUxFVkFOVCAoc3RtdF9pbmZvKSA+ IHZlY3RfdXNlZF9pbl9vdXRlciAKKyAgICAgICYmICFTVE1UX1ZJTkZPX0NP TVBPVU5EX1BBVFRFUk4gKHN0bXRfaW5mbykpCiAgICAgcmV0dXJuIGZhbHNl OwogCiAgIC8qIFJlZHVjdGlvbnMgdGhhdCBhcmUgbm90IHVzZWQgZXZlbiBp biBhbiBlbmNsb3Npbmcgb3V0ZXItbG9vcCwKQEAgLTM4NzQsMTQgKzQxMTIs MTcgQEAgdmVjdG9yaXphYmxlX3JlZHVjdGlvbiAoZ2ltcGxlIHN0bXQsIGdp bQogICAgICB0aGUgb3JpZ2luYWwgc2VxdWVuY2UgdGhhdCBjb25zdGl0dXRl cyB0aGUgcGF0dGVybi4gICovCiAKICAgb3JpZ19zdG10ID0gU1RNVF9WSU5G T19SRUxBVEVEX1NUTVQgKHN0bXRfaW5mbyk7Ci0gIGlmIChvcmlnX3N0bXQp CisgIGlmIChvcmlnX3N0bXQgCisgICAgICAmJiAhU1RNVF9WSU5GT19DT01Q T1VORF9QQVRURVJOIChzdG10X2luZm8pKQogICAgIHsKICAgICAgIG9yaWdf c3RtdF9pbmZvID0gdmluZm9fZm9yX3N0bXQgKG9yaWdfc3RtdCk7CiAgICAg ICBnY2NfYXNzZXJ0IChTVE1UX1ZJTkZPX1JFTEFURURfU1RNVCAob3JpZ19z dG10X2luZm8pID09IHN0bXQpOwogICAgICAgZ2NjX2Fzc2VydCAoU1RNVF9W SU5GT19JTl9QQVRURVJOX1AgKG9yaWdfc3RtdF9pbmZvKSk7CiAgICAgICBn Y2NfYXNzZXJ0ICghU1RNVF9WSU5GT19JTl9QQVRURVJOX1AgKHN0bXRfaW5m bykpOwogICAgIH0KLQorICBlbHNlCisgICAgb3JpZ19zdG10ID0gTlVMTDsK KyAKICAgLyogMy4gQ2hlY2sgdGhlIG9wZXJhbmRzIG9mIHRoZSBvcGVyYXRp b24uIFRoZSBmaXJzdCBvcGVyYW5kcyBhcmUgZGVmaW5lZAogICAgICAgICBp bnNpZGUgdGhlIGxvb3AgYm9keS4gVGhlIGxhc3Qgb3BlcmFuZCBpcyB0aGUg cmVkdWN0aW9uIHZhcmlhYmxlLAogICAgICAgICB3aGljaCBpcyBkZWZpbmVk IGJ5IHRoZSBsb29wLWhlYWRlci1waGkuICAqLwpAQCAtMzk5NCwxMiArNDIz NSwxMyBAQCB2ZWN0b3JpemFibGVfcmVkdWN0aW9uIChnaW1wbGUgc3RtdCwg Z2ltCiAKICAgaWYgKGNvZGUgPT0gQ09ORF9FWFBSKQogICAgIHsKLSAgICAg IGlmICghdmVjdG9yaXphYmxlX2NvbmRpdGlvbiAoc3RtdCwgZ3NpLCBOVUxM LCBvcHNbcmVkdWNfaW5kZXhdLCAwKSkKKyAgICAgIGlmICghdmVjdG9yaXph YmxlX2NvbmRpdGlvbiAoc3RtdCwgZ3NpLCBOVUxMLCBvcHNbcmVkdWNfaW5k ZXhdLCAwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uZF9yZWR1Y19kZWYsIGNvbmRfcmVkdWNfaW5kZXgpKSAKICAgICAgICAg ewogICAgICAgICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JU X0RFVEFJTFMpKQogICAgICAgICAgICAgZnByaW50ZiAodmVjdF9kdW1wLCAi dW5zdXBwb3J0ZWQgY29uZGl0aW9uIGluIHJlZHVjdGlvbiIpOwogCi0gICAg ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgcmV0dXJuIGZhbHNl OwogICAgICAgICB9CiAgICAgfQogICBlbHNlCkBAIC00MTMyLDcgKzQzNzQs MTIgQEAgdmVjdG9yaXphYmxlX3JlZHVjdGlvbiAoZ2ltcGxlIHN0bXQsIGdp bQogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIGlmICghbmVzdGVkX2N5 Y2xlIHx8IGRvdWJsZV9yZWR1YykKKyAgICAgIC8qIFRoZXJlIGlzIG5vIG5l ZWQgaW4gcmVkdWN0aW9uIGVwaWxvZ3VlIGluIGNhc2Ugb2YgYSBuZXN0ZWQg Y3ljbGUsIAorICAgICAgICAgdW5sZXNzIGl0IGlzIGRvdWJsZSByZWR1Y3Rp b24uIEZvciByZWR1Y3Rpb24gcGF0dGVybiwgd2UgYXNzdW1lIHRoYXQKKyAg ICAgICAgIHdlIGtub3cgaG93IHRvIGNyZWF0ZSBhbiBlcGlsb2d1ZSBldmVu IGlmIHRoZXJlIGlzIG5vIHJlZHVjdGlvbiBjb2RlCisgICAgICAgICBmb3Ig aXQuICAqLyAKKyAgICAgIGlmICgoIW5lc3RlZF9jeWNsZSB8fCBkb3VibGVf cmVkdWMpIAorICAgICAgICAgICAmJiAhU1RNVF9WSU5GT19DT01QT1VORF9Q QVRURVJOIChzdG10X2luZm8pKQogICAgICAgICB7CiAgICAgICAgICAgaWYg KHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBPUlRfREVUQUlMUykpCiAgICAg ICAgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJubyByZWR1YyBjb2RlIGZv ciBzY2FsYXIgY29kZS4iKTsKQEAgLTQxNTIsOCArNDM5OSw5IEBAIHZlY3Rv cml6YWJsZV9yZWR1Y3Rpb24gKGdpbXBsZSBzdG10LCBnaW0KICAgaWYgKCF2 ZWNfc3RtdCkgLyogdHJhbnNmb3JtYXRpb24gbm90IHJlcXVpcmVkLiAgKi8K ICAgICB7CiAgICAgICBTVE1UX1ZJTkZPX1RZUEUgKHN0bXRfaW5mbykgPSBy ZWR1Y192ZWNfaW5mb190eXBlOwotICAgICAgaWYgKCF2ZWN0X21vZGVsX3Jl ZHVjdGlvbl9jb3N0IChzdG10X2luZm8sIGVwaWxvZ19yZWR1Y19jb2RlLCBu Y29waWVzKSkKKyAgICAgIGlmICghdmVjdF9tb2RlbF9yZWR1Y3Rpb25fY29z dCAoc3RtdF9pbmZvLCBlcGlsb2dfcmVkdWNfY29kZSwgbmNvcGllcykpIAog ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgIHJldHVybiB0cnVlOwog ICAgIH0KIApAQCAtNDIwNCw2ICs0NDUyLDMyIEBAIHZlY3Rvcml6YWJsZV9y ZWR1Y3Rpb24gKGdpbXBsZSBzdG10LCBnaW0KICAgZWxzZQogICAgIGVwaWxv Z19jb3BpZXMgPSBuY29waWVzOwogCisgIC8qIFByZXBhcmUgdmVjdG9yIG9w ZXJhbmRzIGZvciBtaW4vbWF4IGxvY2F0aW9uLiAgKi8KKyAgaWYgKFNUTVRf VklORk9fQ09NUE9VTkRfUEFUVEVSTiAoc3RtdF9pbmZvKSA9PSBtaW5tYXhf bG9jX3N0bXQpCisgICAgeworICAgICAgdHJlZSBjb25kX29wOworICAgICAg Z2ltcGxlIGNvbmRfZGVmX3N0bXQ7CisKKyAgICAgIHJlbGF0ZWQgPSBTVE1U X1ZJTkZPX1JFTEFURURfU1RNVCAodmluZm9fZm9yX3N0bXQgKHN0bXQpKTsK KyAgICAgIGNvbmRfb3AgPSBUUkVFX09QRVJBTkQgKG9wc1swXSwgMCk7Cisg ICAgICBjb25kX2RlZl9zdG10ID0gU1NBX05BTUVfREVGX1NUTVQgKGNvbmRf b3ApOworICAgICAgaWYgKGdpbXBsZV9jb2RlIChjb25kX2RlZl9zdG10KSA9 PSBHSU1QTEVfUEhJKQorICAgICAgICB7CisgICAgICAgICAgY29uZF9yZWR1 Y19pbmRleCA9IDE7CisgICAgICAgICAgY29uZF9yZWR1Y19kZWYgPSBnaW1w bGVfYXNzaWduX3JoczEgKFNUTVRfVklORk9fVkVDX1NUTVQgKAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZpbmZvX2Zvcl9zdG10IChyZWxhdGVkKSkpOworICAgICAgICB9CisgICAg ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25kX29wID0gVFJFRV9P UEVSQU5EIChvcHNbMF0sIDEpOworICAgICAgICAgIGNvbmRfZGVmX3N0bXQg PSBTU0FfTkFNRV9ERUZfU1RNVCAoY29uZF9vcCk7CisgICAgICAgICAgZ2Nj X2Fzc2VydCAoZ2ltcGxlX2NvZGUgKGNvbmRfZGVmX3N0bXQpID09IEdJTVBM RV9QSEkpOworICAgICAgICAgIGNvbmRfcmVkdWNfaW5kZXggPSAyOworICAg ICAgICAgIGNvbmRfcmVkdWNfZGVmID0gZ2ltcGxlX2Fzc2lnbl9yaHMyIChT VE1UX1ZJTkZPX1ZFQ19TVE1UICgKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aW5mb19mb3Jfc3RtdCAo cmVsYXRlZCkpKTsKKyAgICAgICAgfQorICAgIH0KKwogICBwcmV2X3N0bXRf aW5mbyA9IE5VTEw7CiAgIHByZXZfcGhpX2luZm8gPSBOVUxMOwogICBpZiAo c2xwX25vZGUpCkBAIC00MjQ3LDcgKzQ1MjEsOCBAQCB2ZWN0b3JpemFibGVf cmVkdWN0aW9uIChnaW1wbGUgc3RtdCwgZ2ltCiAgICAgICAgICAgZ2NjX2Fz c2VydCAoIXNscF9ub2RlKTsKICAgICAgICAgICB2ZWN0b3JpemFibGVfY29u ZGl0aW9uIChzdG10LCBnc2ksIHZlY19zdG10LCAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQSElfUkVTVUxUIChWRUNfaW5kZXggKGdp bXBsZSwgcGhpcywgMCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZWR1Y19pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVkdWNfaW5kZXgsIGNvbmRfcmVkdWNfZGVmLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kX3JlZHVjX2lu ZGV4KTsKICAgICAgICAgICAvKiBNdWx0aXBsZSB0eXBlcyBhcmUgbm90IHN1 cHBvcnRlZCBmb3IgY29uZGl0aW9uLiAgKi8KICAgICAgICAgICBicmVhazsK ICAgICAgICAgfQpAQCAtNDQ4Myw2ICs0NzU4LDkgQEAgdmVjdG9yaXphYmxl X2xpdmVfb3BlcmF0aW9uIChnaW1wbGUgc3RtdAogCiAgIGdjY19hc3NlcnQg KFNUTVRfVklORk9fTElWRV9QIChzdG10X2luZm8pKTsKIAorICBpZiAoU1RN VF9WSU5GT19DT01QT1VORF9QQVRURVJOIChzdG10X2luZm8pKQorICAgIHJl dHVybiB0cnVlOworCiAgIGlmIChTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10 X2luZm8pID09IHZlY3RfcmVkdWN0aW9uX2RlZikKICAgICByZXR1cm4gZmFs c2U7CiAKSW5kZXg6IHRyZWUtdmVjdC1wYXR0ZXJucy5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIHRyZWUtdmVjdC1wYXR0ZXJucy5jCShyZXZpc2lv biAxNjE4NjIpCisrKyB0cmVlLXZlY3QtcGF0dGVybnMuYwkod29ya2luZyBj b3B5KQpAQCAtNTMsNiArNTMsMTAgQEAgc3RhdGljIHZlY3RfcmVjb2dfZnVu Y19wdHIgdmVjdF92ZWN0X3JlYwogCXZlY3RfcmVjb2dfd2lkZW5fc3VtX3Bh dHRlcm4sCiAJdmVjdF9yZWNvZ19kb3RfcHJvZF9wYXR0ZXJuLAogCXZlY3Rf cmVjb2dfcG93X3BhdHRlcm59Oworc3RhdGljIGJvb2wgdmVjdF9yZWNvZ19t aW5fbWF4X2xvY19wYXR0ZXJuICh1bnNpZ25lZCBpbnQsIHZhX2xpc3QpOwor c3RhdGljIHZlY3RfcmVjb2dfY29tcG91bmRfZnVuY19wdHIgCisgICB2ZWN0 X3JlY29nX2NvbXBvdW5kX2Z1bmNfcHRyc1tOVU1fQ09NUE9VTkRfUEFUVEVS TlNdID0geworICAgICAgICB2ZWN0X3JlY29nX21pbl9tYXhfbG9jX3BhdHRl cm59OwogCiAKIC8qIEZ1bmN0aW9uIHdpZGVuZWRfbmFtZV9wCkBAIC04NDYs MyArODUwLDI4NiBAQCB2ZWN0X3BhdHRlcm5fcmVjb2cgKGxvb3BfdmVjX2lu Zm8gbG9vcF92CiAgICAgICAgIH0KICAgICB9CiB9CisKKworLyogRGV0ZWN0 IG1pbi9tYXggbG9jYXRpb24gcGF0dGVybi4gCisgICBHaXZlbiB0d28gcmVk dWN0b24gY29uZGl0aW9uIHN0YXRlbWVudHMgYW5kIHRoZWlyIHBoaSBub2Rl cywgd2UgY2hlY2sKKyAgIGlmIG9uZSBvZiB0aGUgc3RhdGVtZW50cyBjYWxj dWxhdGVzIG1pbmltdW0gb3IgbWF4aW11bSwgYW5kIHRoZSBvdGhlciBvbmUK KyAgIHJlY29yZHMgaXRzIGxvY2F0aW9uLiBJZiB0aGUgcGF0dGVybiBpcyBk ZXRlY3RlZCwgd2UgcmVwbGFjZSB0aGUgbWluL21heCAKKyAgIGNvbmRpdGlv biBzdGF0ZW1lbnQgd2l0aCBNSU5fRVhQUiBvciBNQVhfRVhQUiwgYW5kIG1h cmsgdGhlIG9sZCBzdGF0ZW1lbnQgCisgICBhcyBwYXR0ZXJuIHN0YXRlbWVu dC4KKworICAgVGhlIHBhdHRlcm4gd2UgYXJlIGxvb2tpbmcgZm9yOgorCisg ICBzMTogbWluID0gW2NvbmRfZXhwcl0gYSA8IG1pbiA/IGEgOiBtaW4KKyAg IHMyOiBpbmRleCA9IFtjb25kX2V4cHJdIGEgPCBtaW4gPyBuZXdfaW5kZXgg OiBpbmRleAorCisgICBXZSBhZGQgTUlOX0VYUFIgc3RhdGVtZW50IGJlZm9y ZSB0aGUgaW5kZXggY2FsY3VsYXRpb24gc3RhdGVtZW50OgorCisgICBzMTog IG1pbiA9IFtjb25kX2V4cHJdIGEgPCBtaW4gPyBhIDogbWluCisgICBzMSc6 IG1pbiA9IFttaW5fZXhwcl0gPGEsIG1pbj4KKyAgIHMyOiAgaW5kZXggPSBb Y29uZF9leHByXSBhIDwgbWluID8gbmV3X2luZGV4IDogaW5kZXgKKworICAg czEgaXMgbWFya2VkIGFzIHBhdHRlcm4gc3RhdGVtZW50CisgICBzMScgcG9p bnRzIHRvIHMxIHZpYSByZWxhdGVkX3N0bXQgZmllbGQKKyAgIHMxIHBvaW50 cyB0byBzMScgdmlhIHJlbGF0ZWRfc3RtdCBmaWVsZAorICAgczIgcG9pbnRz IHRvIHMxJyB2aWEgcmVsYXRlZF9zdG10IGZpZWxkLiAgCisgICBzMScgYW5k IHMyIGFyZSBtYXJrZWQgYXMgY29tcG91bmQgcGF0dGVybiBtaW4vbWF4IGFu ZCBtaW4vbWF4IGxvY2F0aW9uCisgICBzdGF0ZW1lbnRzLiAgKi8KKworc3Rh dGljIGJvb2wKK3ZlY3RfcmVjb2dfbWluX21heF9sb2NfcGF0dGVybiAodW5z aWduZWQgaW50IG5hcmdzLCB2YV9saXN0IGFyZ3MpCit7CisgIGdpbXBsZSBm aXJzdF9waGksIGZpcnN0X3N0bXQsIHNlY29uZF9waGksIHNlY29uZF9zdG10 LCBsb29wX29wX2RlZl9zdG10OworICBzdG10X3ZlY19pbmZvIHN0bXRfdmlu Zm8sIG5ld19zdG10X2luZm8sIG1pbm1heF9zdG10X2luZm8sIHBvc19zdG10 X2luZm87CisgIGxvb3BfdmVjX2luZm8gbG9vcF9pbmZvOworICBzdHJ1Y3Qg bG9vcCAqbG9vcDsKKyAgZW51bSB0cmVlX2NvZGUgY29kZSwgZmlyc3RfY29k ZSwgc2Vjb25kX2NvZGU7CisgIGdpbXBsZSBmaXJzdF9jb25kX2RlZl9zdG10 ID0gTlVMTCwgc2Vjb25kX2NvbmRfZGVmX3N0bXQgPSBOVUxMOworICB0cmVl IGZpcnN0X2NvbmRfb3AwLCBmaXJzdF9jb25kX29wMSwgc2Vjb25kX2NvbmRf b3AwLCBzZWNvbmRfY29uZF9vcDE7CisgIHRyZWUgZmlyc3Rfc3RtdF9vcHJu ZDAsIGZpcnN0X3N0bXRfb3BybmQxLCBzZWNvbmRfc3RtdF9vcHJuZDA7Cisg IHRyZWUgc2Vjb25kX3N0bXRfb3BybmQxLCBmaXJzdF9jb25kLCBzZWNvbmRf Y29uZDsKKyAgaW50IHBoaV9kZWZfaW5kZXg7CisgIHRyZWUgZmlyc3RfbG9v cF9vcCwgc2Vjb25kX2xvb3Bfb3AsIHBvc19zdG10X2xvb3Bfb3AsIGRlZiwg cmVzdWx0OworICBnaW1wbGUgcG9zX3N0bXQsIG1pbl9tYXhfc3RtdCwgbmV3 X3N0bXQsIGRlZl9zdG10OworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2k7 CisKKyAgaWYgKG5hcmdzIDwgNCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAg Zmlyc3RfcGhpID0gdmFfYXJnIChhcmdzLCBnaW1wbGUpOworICBmaXJzdF9z dG10ID0gdmFfYXJnIChhcmdzLCBnaW1wbGUpOworICBzZWNvbmRfcGhpID0g dmFfYXJnIChhcmdzLCBnaW1wbGUpOworICBzZWNvbmRfc3RtdCA9IHZhX2Fy ZyAoYXJncywgZ2ltcGxlKTsKKworICBzdG10X3ZpbmZvID0gdmluZm9fZm9y X3N0bXQgKGZpcnN0X3N0bXQpOworICBsb29wX2luZm8gPSBTVE1UX1ZJTkZP X0xPT1BfVklORk8gKHN0bXRfdmluZm8pOworICBsb29wID0gTE9PUF9WSU5G T19MT09QIChsb29wX2luZm8pOworCisgIC8qIENoZWNrIHRoYXQgdGhlIGNv bmRpdGlvbiBpcyB0aGUgc2FtZSBhbmQgaXMgR1Qgb3IgTFQuICAqLworICBm aXJzdF9jb25kID0gVFJFRV9PUEVSQU5EIChnaW1wbGVfYXNzaWduX3JoczEg KGZpcnN0X3N0bXQpLCAwKTsKKyAgaWYgKFRSRUVfQ09ERSAoZmlyc3RfY29u ZCkgPT0gU1NBX05BTUUpCisgICAgeworICAgICAgZmlyc3RfY29uZF9kZWZf c3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1UIChmaXJzdF9jb25kKTsKKyAgICAg IGZpcnN0X2NvZGUgPSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChmaXJzdF9j b25kX2RlZl9zdG10KTsKKyAgICAgIGZpcnN0X2NvbmRfb3AwID0gZ2ltcGxl X2Fzc2lnbl9yaHMxIChmaXJzdF9jb25kX2RlZl9zdG10KTsKKyAgICAgIGZp cnN0X2NvbmRfb3AxID0gZ2ltcGxlX2Fzc2lnbl9yaHMyIChmaXJzdF9jb25k X2RlZl9zdG10KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmaXJz dF9jb2RlID0gVFJFRV9DT0RFIChmaXJzdF9jb25kKTsKKyAgICAgIGZpcnN0 X2NvbmRfb3AwID0gVFJFRV9PUEVSQU5EIChmaXJzdF9jb25kLCAwKTsKKyAg ICAgIGZpcnN0X2NvbmRfb3AxID0gVFJFRV9PUEVSQU5EIChmaXJzdF9jb25k LCAxKTsKKyAgICB9CisKKyAgaWYgKGZpcnN0X2NvZGUgIT0gR1RfRVhQUiAm JiBmaXJzdF9jb2RlICE9IExUX0VYUFIKKyAgICAgICYmIGZpcnN0X2NvZGUg IT0gR0VfRVhQUiAmJiBmaXJzdF9jb2RlICE9IExFX0VYUFIpCisgICAgcmV0 dXJuIGZhbHNlOworCisgIHNlY29uZF9jb25kID0gVFJFRV9PUEVSQU5EIChn aW1wbGVfYXNzaWduX3JoczEgKHNlY29uZF9zdG10KSwgMCk7CisgIGlmIChU UkVFX0NPREUgKHNlY29uZF9jb25kKSA9PSBTU0FfTkFNRSkKKyAgICB7Cisg ICAgICBzZWNvbmRfY29uZF9kZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1U IChzZWNvbmRfY29uZCk7CisgICAgICBzZWNvbmRfY29kZSA9IGdpbXBsZV9h c3NpZ25fcmhzX2NvZGUgKHNlY29uZF9jb25kX2RlZl9zdG10KTsKKyAgICAg IHNlY29uZF9jb25kX29wMCA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoc2Vjb25k X2NvbmRfZGVmX3N0bXQpOworICAgICAgc2Vjb25kX2NvbmRfb3AxID0gZ2lt cGxlX2Fzc2lnbl9yaHMyIChzZWNvbmRfY29uZF9kZWZfc3RtdCk7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgc2Vjb25kX2NvZGUgPSBUUkVFX0NP REUgKHNlY29uZF9jb25kKTsKKyAgICAgIHNlY29uZF9jb25kX29wMCA9IFRS RUVfT1BFUkFORCAoc2Vjb25kX2NvbmQsIDApOworICAgICAgc2Vjb25kX2Nv bmRfb3AxID0gVFJFRV9PUEVSQU5EIChzZWNvbmRfY29uZCwgMSk7CisgICAg fQorCisgIGlmIChmaXJzdF9jb2RlICE9IHNlY29uZF9jb2RlKQorICAgIHJl dHVybiBmYWxzZTsKKworICBpZiAoZmlyc3RfY29uZF9kZWZfc3RtdAorICAg ICAgJiYgKCFzZWNvbmRfY29uZF9kZWZfc3RtdAorICAgICAgICAgIHx8IGZp cnN0X2NvbmRfZGVmX3N0bXQgIT0gc2Vjb25kX2NvbmRfZGVmX3N0bXQKKyAg ICAgICAgICB8fCAhb3BlcmFuZF9lcXVhbF9wIChmaXJzdF9jb25kX29wMCwg c2Vjb25kX2NvbmRfb3AwLCAwKQorICAgICAgICAgIHx8ICFvcGVyYW5kX2Vx dWFsX3AgKGZpcnN0X2NvbmRfb3AxLCBzZWNvbmRfY29uZF9vcDEsIDApKSkK KyAgIHJldHVybiBmYWxzZTsKKworICAvKiBCb3RoIHN0YXRlbWVudHMgaGF2 ZSB0aGUgc2FtZSBjb25kaXRpb24uICAqLworCisgIGZpcnN0X3N0bXRfb3By bmQwID0gVFJFRV9PUEVSQU5EIChnaW1wbGVfYXNzaWduX3JoczEgKGZpcnN0 X3N0bXQpLCAxKTsKKyAgZmlyc3Rfc3RtdF9vcHJuZDEgPSBUUkVFX09QRVJB TkQgKGdpbXBsZV9hc3NpZ25fcmhzMSAoZmlyc3Rfc3RtdCksIDIpOworCisg IHNlY29uZF9zdG10X29wcm5kMCA9IFRSRUVfT1BFUkFORCAoZ2ltcGxlX2Fz c2lnbl9yaHMxIChzZWNvbmRfc3RtdCksIDEpOworICBzZWNvbmRfc3RtdF9v cHJuZDEgPSBUUkVFX09QRVJBTkQgKGdpbXBsZV9hc3NpZ25fcmhzMSAoc2Vj b25kX3N0bXQpLCAyKTsKKworICBpZiAoVFJFRV9DT0RFIChmaXJzdF9zdG10 X29wcm5kMCkgIT0gU1NBX05BTUUKKyAgICAgIHx8IFRSRUVfQ09ERSAoZmly c3Rfc3RtdF9vcHJuZDEpICE9IFNTQV9OQU1FCisgICAgICB8fCBUUkVFX0NP REUgKHNlY29uZF9zdG10X29wcm5kMCkgIT0gU1NBX05BTUUKKyAgICAgIHx8 IFRSRUVfQ09ERSAoc2Vjb25kX3N0bXRfb3BybmQxKSAhPSBTU0FfTkFNRSkK KyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKG9wZXJhbmRfZXF1YWxfcCAo UEhJX1JFU1VMVCAoZmlyc3RfcGhpKSwgZmlyc3Rfc3RtdF9vcHJuZDAsIDAp CisgICAgICAmJiBvcGVyYW5kX2VxdWFsX3AgKFBISV9SRVNVTFQgKHNlY29u ZF9waGkpLCBzZWNvbmRfc3RtdF9vcHJuZDAsIDApKQorICAgIHsKKyAgICAg IHBoaV9kZWZfaW5kZXggPSAwOworICAgICAgZmlyc3RfbG9vcF9vcCA9IGZp cnN0X3N0bXRfb3BybmQxOworICAgICAgc2Vjb25kX2xvb3Bfb3AgPSBzZWNv bmRfc3RtdF9vcHJuZDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg aWYgKG9wZXJhbmRfZXF1YWxfcCAoUEhJX1JFU1VMVCAoZmlyc3RfcGhpKSwg Zmlyc3Rfc3RtdF9vcHJuZDEsIDApCisgICAgICAgICAgJiYgb3BlcmFuZF9l cXVhbF9wIChQSElfUkVTVUxUIChzZWNvbmRfcGhpKSwgc2Vjb25kX3N0bXRf b3BybmQxLCAwKSkKKyAgICAgICAgeworICAgICAgICAgIHBoaV9kZWZfaW5k ZXggPSAxOworICAgICAgICAgIGZpcnN0X2xvb3Bfb3AgPSBmaXJzdF9zdG10 X29wcm5kMDsKKyAgICAgICAgICBzZWNvbmRfbG9vcF9vcCA9IHNlY29uZF9z dG10X29wcm5kMDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgfQorCisgIC8qIE5vdyB3ZSBrbm93IHdoaWNo IG9wZXJhbmQgaXMgZGVmaW5lZCBieSBwaGkgbm9kZS4gQW5hbHl6ZSB0aGUg c2Vjb25kCisgICAgIG9uZS4gICovCisKKyAgLyogVGhlIG1pbi9tYXggc3Rt dCBtdXN0IGJlIHggPCB5ID8geCA6IHkuICAqLworICBpZiAob3BlcmFuZF9l cXVhbF9wIChmaXJzdF9jb25kX29wMCwgZmlyc3Rfc3RtdF9vcHJuZDAsIDAp CisgICAgICAmJiBvcGVyYW5kX2VxdWFsX3AgKGZpcnN0X2NvbmRfb3AxLCBm aXJzdF9zdG10X29wcm5kMSwgMCkpCisgICAgeworICAgICAgcG9zX3N0bXQg PSBzZWNvbmRfc3RtdDsKKyAgICAgIG1pbl9tYXhfc3RtdCA9IGZpcnN0X3N0 bXQ7CisgICAgICBwb3Nfc3RtdF9sb29wX29wID0gc2Vjb25kX2xvb3Bfb3A7 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKG9wZXJhbmRfZXF1 YWxfcCAoc2Vjb25kX2NvbmRfb3AwLCBzZWNvbmRfc3RtdF9vcHJuZDAsIDAp CisgICAgICAgICAgJiYgb3BlcmFuZF9lcXVhbF9wIChzZWNvbmRfY29uZF9v cDEsIHNlY29uZF9zdG10X29wcm5kMSwgMCkpCisgICAgICAgIHsKKyAgICAg ICAgICBwb3Nfc3RtdCA9IGZpcnN0X3N0bXQ7CisgICAgICAgICAgbWluX21h eF9zdG10ID0gc2Vjb25kX3N0bXQ7CisgICAgICAgICAgcG9zX3N0bXRfbG9v cF9vcCA9IGZpcnN0X2xvb3Bfb3A7CisgICAgICAgIH0KKyAgICAgIGVsc2UK KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAvKiBBbmFseXpl IHRoZSBwb3NpdGlvbiBzdG10LiBXZSBleHBlY3QgaXQgdG8gYmUgZWl0aGVy IGluZHVjdGlvbiBvcgorICAgICBpbmR1Y3Rpb24gcGx1cyBjb25zdGFudC4g ICovCisgIGxvb3Bfb3BfZGVmX3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAo cG9zX3N0bXRfbG9vcF9vcCk7CisKKyAgaWYgKCFmbG93X2JiX2luc2lkZV9s b29wX3AgKGxvb3AsIGdpbXBsZV9iYiAobG9vcF9vcF9kZWZfc3RtdCkpKQor ICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoZ2ltcGxlX2NvZGUgKGxvb3Bf b3BfZGVmX3N0bXQpID09IEdJTVBMRV9QSEkpCisgICAgeworICAgICAgaWYg KFNUTVRfVklORk9fREVGX1RZUEUgKHZpbmZvX2Zvcl9zdG10IChsb29wX29w X2RlZl9zdG10KSkKKyAgICAgICAgICAhPSB2ZWN0X2luZHVjdGlvbl9kZWYp CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIGVsc2UKKyAgICB7 CisgICAgICBpZiAoIWlzX2dpbXBsZV9hc3NpZ24gKGxvb3Bfb3BfZGVmX3N0 bXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgIGlmIChnZXRf Z2ltcGxlX3Joc19jbGFzcyAoZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAobG9v cF9vcF9kZWZfc3RtdCkpCisgICAgICAgICAgID09IEdJTVBMRV9VTkFSWV9S SFMpCisgICAgICAgIGRlZiA9IGdpbXBsZV9hc3NpZ25fcmhzMSAobG9vcF9v cF9kZWZfc3RtdCk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg ICB0cmVlIG9wMSwgb3AyOworCisgICAgICAgICAgaWYgKGdldF9naW1wbGVf cmhzX2NsYXNzIChnaW1wbGVfYXNzaWduX3Joc19jb2RlIChsb29wX29wX2Rl Zl9zdG10KSkKKyAgICAgICAgICAgICAgICE9IEdJTVBMRV9CSU5BUllfUkhT CisgICAgICAgICAgICAgIHx8IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGxv b3Bfb3BfZGVmX3N0bXQpICE9IFBMVVNfRVhQUikKKyAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKKworICAgICAgICAgIG9wMSA9IGdpbXBsZV9hc3NpZ25f cmhzMSAobG9vcF9vcF9kZWZfc3RtdCk7CisgICAgICAgICAgb3AyID0gZ2lt cGxlX2Fzc2lnbl9yaHMyIChsb29wX29wX2RlZl9zdG10KTsKKworICAgICAg ICAgIGlmIChUUkVFX0NPTlNUQU5UIChvcDEpKQorICAgICAgICAgICAgZGVm ID0gb3AyOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgaWYgKFRSRUVfQ09OU1RBTlQgKG9wMikpCisgICAgICAgICAg ICAgICAgZGVmID0gb3AxOworICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg ICB9CisKKyAgICAgIGlmIChUUkVFX0NPREUgKGRlZikgIT0gU1NBX05BTUUp CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgZGVmX3N0bXQgPSBT U0FfTkFNRV9ERUZfU1RNVCAoZGVmKTsKKyAgICAgIGlmICghZmxvd19iYl9p bnNpZGVfbG9vcF9wIChsb29wLCBnaW1wbGVfYmIgKGRlZl9zdG10KSkKKyAg ICAgICAgICB8fCBnaW1wbGVfY29kZSAoZGVmX3N0bXQpICE9IEdJTVBMRV9Q SEkKKyAgICAgICAgICB8fCBTVE1UX1ZJTkZPX0RFRl9UWVBFICh2aW5mb19m b3Jfc3RtdCAoZGVmX3N0bXQpKQorICAgICAgICAgICAgICAhPSB2ZWN0X2lu ZHVjdGlvbl9kZWYpCisgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor CisgIC8qIFBhdHRlcm4gZGV0ZWN0ZWQuIENyZWF0ZSBhIHN0bXQgdG8gYmUg dXNlZCB0byByZXBsYWNlIHRoZSBwYXR0ZXJuLiAgKi8KKyAgaWYgKGZpcnN0 X2NvZGUgPT0gR1RfRVhQUiB8fCBmaXJzdF9jb2RlID09IEdFX0VYUFIpCisg ICAgY29kZSA9IHBoaV9kZWZfaW5kZXggPyBNQVhfRVhQUiA6IE1JTl9FWFBS OworICBlbHNlCisgICAgY29kZSA9IHBoaV9kZWZfaW5kZXggPyBNSU5fRVhQ UiA6IE1BWF9FWFBSOworCisgIHJlc3VsdCA9IGdpbXBsZV9hc3NpZ25fbGhz IChtaW5fbWF4X3N0bXQpOworICBuZXdfc3RtdCA9IGdpbXBsZV9idWlsZF9h c3NpZ25fd2l0aF9vcHMgKGNvZGUsIHJlc3VsdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgVFJFRV9PUEVSQU5EIChnaW1wbGVfYXNzaWduX3JoczEg KG1pbl9tYXhfc3RtdCksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBUUkVFX09QRVJBTkQgKGdpbXBsZV9hc3NpZ25fcmhzMSAobWluX21heF9z dG10KSwgMikpOworICBnc2kgPSBnc2lfZm9yX3N0bXQgKHBvc19zdG10KTsK KyAgZ3NpX2luc2VydF9iZWZvcmUgKCZnc2ksIG5ld19zdG10LCBHU0lfU0FN RV9TVE1UKTsKKyAgU1NBX05BTUVfREVGX1NUTVQgKHJlc3VsdCkgPSBuZXdf c3RtdDsKKworICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9E RVRBSUxTKSkKKyAgICB7CisgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJE ZXRlY3RlZCBtaW4vbWF4IGxvY2F0aW9uIHBhdHRlcm46XG5taW4vbWF4IHN0 bXQgIik7CisgICAgICBwcmludF9naW1wbGVfc3RtdCAodmVjdF9kdW1wLCBt aW5fbWF4X3N0bXQsIDAsIFRERl9TTElNKTsKKyAgICAgIGZwcmludGYgKHZl Y3RfZHVtcCwgIlxubG9jYXRpb24gc3RtdCAiKTsKKyAgICAgIHByaW50X2dp bXBsZV9zdG10ICh2ZWN0X2R1bXAsIHBvc19zdG10LCAwLCBUREZfU0xJTSk7 CisgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJcbkNyZWF0ZWQgc3RtdDog Iik7CisgICAgICBwcmludF9naW1wbGVfc3RtdCAodmVjdF9kdW1wLCBuZXdf c3RtdCwgMCwgVERGX1NMSU0pOworICAgIH0KKworICAvKiBNYXJrIHRoZSBz dG10cyB0aGF0IGFyZSBpbnZvbHZlZCBpbiB0aGUgcGF0dGVybi4gKi8KKyAg c2V0X3ZpbmZvX2Zvcl9zdG10IChuZXdfc3RtdCwKKyAgICAgICAgICAgICAg ICAgICAgICBuZXdfc3RtdF92ZWNfaW5mbyAobmV3X3N0bXQsIGxvb3BfaW5m bywgTlVMTCkpOworICBuZXdfc3RtdF9pbmZvID0gdmluZm9fZm9yX3N0bXQg KG5ld19zdG10KTsKKworICBwb3Nfc3RtdF9pbmZvID0gdmluZm9fZm9yX3N0 bXQgKHBvc19zdG10KTsKKyAgbWlubWF4X3N0bXRfaW5mbyA9IHZpbmZvX2Zv cl9zdG10IChtaW5fbWF4X3N0bXQpOworCisgIFNUTVRfVklORk9fREVGX1RZ UEUgKG5ld19zdG10X2luZm8pID0gU1RNVF9WSU5GT19ERUZfVFlQRSAobWlu bWF4X3N0bXRfaW5mbyk7CisgIFNUTVRfVklORk9fVkVDVFlQRSAobmV3X3N0 bXRfaW5mbykgPSBTVE1UX1ZJTkZPX1ZFQ1RZUEUgKG1pbm1heF9zdG10X2lu Zm8pOworCisgIFNUTVRfVklORk9fSU5fUEFUVEVSTl9QIChtaW5tYXhfc3Rt dF9pbmZvKSA9IHRydWU7CisgIFNUTVRfVklORk9fQ09NUE9VTkRfUEFUVEVS TiAobmV3X3N0bXRfaW5mbykgPSBtaW5tYXhfc3RtdDsKKyAgU1RNVF9WSU5G T19DT01QT1VORF9QQVRURVJOIChwb3Nfc3RtdF9pbmZvKSA9IG1pbm1heF9s b2Nfc3RtdDsKKyAgU1RNVF9WSU5GT19SRUxBVEVEX1NUTVQgKG5ld19zdG10 X2luZm8pID0gbWluX21heF9zdG10OworICBTVE1UX1ZJTkZPX1JFTEFURURf U1RNVCAobWlubWF4X3N0bXRfaW5mbykgPSBuZXdfc3RtdDsKKyAgU1RNVF9W SU5GT19SRUxBVEVEX1NUTVQgKHBvc19zdG10X2luZm8pID0gbmV3X3N0bXQ7 CisKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIERldGVjdCBwYXR0ZXJucyBj b25zaXN0aW5nIG9mIHR3byBtb3JlIHN0YXRlbWVudHMgdG8gYmUgdmVjdG9y aXplZC4KKyAgIEN1cnJlbnRseSB0aGUgb25seSBzdXBwb3J0ZWQgcGF0dGVy biBpcyBtaW4vbWF4IGxvY2F0aW9uLiAgKi8KKwordm9pZAordmVjdF9jb21w b3VuZF9wYXR0ZXJuX3JlY29nICh1bnNpZ25lZCBpbnQgbmFyZ3MsIC4uLikK K3sKKyAgdW5zaWduZWQgaW50IGo7CisgIHZhX2xpc3QgYXJnczsKKyAgYm9v bCBkZXRlY3RlZCA9IGZhbHNlOworCisgIGlmICh2ZWN0X3ByaW50X2R1bXBf aW5mbyAoUkVQT1JUX0RFVEFJTFMpKQorICAgIGZwcmludGYgKHZlY3RfZHVt cCwgIj09PSB2ZWN0X2NvbXBvdW5kX3BhdHRlcm5fcmVjb2cgPT09Iik7CisK KyAgLyogU2NhbiBvdmVyIGFsbCBnZW5lcmljIHZlY3RfcmVjb2dfX2NvbXBv dW5kX3h4eF9wYXR0ZXJuIGZ1bmN0aW9ucy4gICovCisgIGZvciAoaiA9IDA7 IGogPCBOVU1fQ09NUE9VTkRfUEFUVEVSTlM7IGorKykKKyAgICB7CisgICAg ICB2YV9zdGFydCAoYXJncywgbmFyZ3MpOworICAgICAgZGV0ZWN0ZWQgPSAo KiB2ZWN0X3JlY29nX2NvbXBvdW5kX2Z1bmNfcHRyc1tqXSkgKG5hcmdzLCBh cmdzKTsKKyAgICAgIHZhX2VuZCAoYXJncyk7CisgICAgICBpZiAoZGV0ZWN0 ZWQpCisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwpJbmRleDogdHJlZS12 ZWN0LXN0bXRzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdHJlZS12 ZWN0LXN0bXRzLmMJKHJldmlzaW9uIDE2MTg2MikKKysrIHRyZWUtdmVjdC1z dG10cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsOCArMjcxLDEwIEBAIHBy b2Nlc3NfdXNlIChnaW1wbGUgc3RtdCwgdHJlZSB1c2UsIGxvb3AKICAgLyog Y2FzZSAyOiBBIHJlZHVjdGlvbiBwaGkgKFNUTVQpIGRlZmluZWQgYnkgYSBy ZWR1Y3Rpb24gc3RtdCAoREVGX1NUTVQpLgogICAgICBERUZfU1RNVCBtdXN0 IGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCwgYmVjYXVzZSB0aGlzIHNo b3VsZCBiZSB0aGUKICAgICAgb25seSB3YXkgdGhhdCBTVE1ULCB3aGljaCBp cyBhIHJlZHVjdGlvbi1waGksIHdhcyBwdXQgaW4gdGhlIHdvcmtsaXN0LAot ICAgICBhcyB0aGVyZSBzaG91bGQgYmUgbm8gb3RoZXIgdXNlcyBmb3IgREVG X1NUTVQgaW4gdGhlIGxvb3AuICBTbyB3ZSBqdXN0Ci0gICAgIGNoZWNrIHRo YXQgZXZlcnl0aGluZyBpcyBhcyBleHBlY3RlZCwgYW5kIHdlIGFyZSBkb25l LiAgKi8KKyAgICAgYXMgdGhlcmUgc2hvdWxkIGJlIG5vIG90aGVyIHVzZXMg Zm9yIERFRl9TVE1UIGluIHRoZSBsb29wLCB1bmxlc3MgaXQgaXMKKyAgICAg bWluL21heCBsb2NhdGlvbiBwYXR0ZXJuLiAgU28gd2UganVzdCBjaGVjayB0 aGF0IGV2ZXJ5dGhpbmcgaXMgYXMKKyAgICAgYXMgZXhwZWN0ZWQsIGFuZCBt YXJrIHRoZSBtaW4vbWF4IHN0bXQgb2YgdGhlIGxvY2F0aW9uIHBhdHRlcm4g c3RtdCBhcworICAgICB1c2VkIGJ5IHJlZHVjdGlvbiAoaXQgaXMgdXNlZCBi eSB0aGUgcmVkdWN0aW9uIG9mIGxvY2F0aW9uKS4gICovCiAgIGRzdG10X3Zp bmZvID0gdmluZm9fZm9yX3N0bXQgKGRlZl9zdG10KTsKICAgYmIgPSBnaW1w bGVfYmIgKHN0bXQpOwogICBpZiAoZ2ltcGxlX2NvZGUgKHN0bXQpID09IEdJ TVBMRV9QSEkKQEAgLTI4MywxMSArMjg1LDIyIEBAIHByb2Nlc3NfdXNlIChn aW1wbGUgc3RtdCwgdHJlZSB1c2UsIGxvb3AKICAgICB7CiAgICAgICBpZiAo dmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxTKSkKIAlmcHJp bnRmICh2ZWN0X2R1bXAsICJyZWR1Yy1zdG10IGRlZmluaW5nIHJlZHVjLXBo aSBpbiB0aGUgc2FtZSBuZXN0LiIpOworCisgICAgICAvKiBDb21wb3VuZCBy ZWR1Y3Rpb24gcGF0dGVybjogaXMgdXNlZCBieSByZWR1Y3Rpb24uICAqLwor ICAgICAgaWYgKFNUTVRfVklORk9fQ09NUE9VTkRfUEFUVEVSTiAoZHN0bXRf dmluZm8pKQorICAgICAgICB7CisgICAgICAgICAgcmVsZXZhbnQgPSB2ZWN0 X3VzZWRfYnlfcmVkdWN0aW9uOworICAgICAgICAgIHZlY3RfbWFya19yZWxl dmFudCAod29ya2xpc3QsIGRlZl9zdG10LCByZWxldmFudCwgbGl2ZV9wKTsK KyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICBp ZiAoU1RNVF9WSU5GT19JTl9QQVRURVJOX1AgKGRzdG10X3ZpbmZvKSkKIAlk c3RtdF92aW5mbyA9IHZpbmZvX2Zvcl9zdG10IChTVE1UX1ZJTkZPX1JFTEFU RURfU1RNVCAoZHN0bXRfdmluZm8pKTsKKwogICAgICAgZ2NjX2Fzc2VydCAo U1RNVF9WSU5GT19SRUxFVkFOVCAoZHN0bXRfdmluZm8pIDwgdmVjdF91c2Vk X2J5X3JlZHVjdGlvbik7Ci0gICAgICBnY2NfYXNzZXJ0IChTVE1UX1ZJTkZP X0xJVkVfUCAoZHN0bXRfdmluZm8pCi0JCSAgfHwgU1RNVF9WSU5GT19SRUxF VkFOVCAoZHN0bXRfdmluZm8pID4gdmVjdF91bnVzZWRfaW5fc2NvcGUpOwor ICAgICAgZ2NjX2Fzc2VydCAoU1RNVF9WSU5GT19MSVZFX1AgKGRzdG10X3Zp bmZvKSAKKwkJICB8fCBTVE1UX1ZJTkZPX1JFTEVWQU5UIChkc3RtdF92aW5m bykgPiB2ZWN0X3VudXNlZF9pbl9zY29wZQorCQkgIHx8IFNUTVRfVklORk9f Q09NUE9VTkRfUEFUVEVSTiAoZHN0bXRfdmluZm8pKTsKICAgICAgIHJldHVy biB0cnVlOwogICAgIH0KIApAQCAtNDgxLDcgKzQ5NCw4IEBAIHZlY3RfbWFy a19zdG10c190b19iZV92ZWN0b3JpemVkIChsb29wX3YKIAkgICAgICAgICAg YnJlYWs7CiAKIAkgICAgICAgIGNhc2UgdmVjdF91c2VkX2J5X3JlZHVjdGlv bjoKLQkgICAgICAgICAgaWYgKGdpbXBsZV9jb2RlIChzdG10KSA9PSBHSU1Q TEVfUEhJKQorCSAgICAgICAgICBpZiAoZ2ltcGxlX2NvZGUgKHN0bXQpID09 IEdJTVBMRV9QSEkKKyAgICAgICAgICAgICAgICAgICAgICB8fCBTVE1UX1ZJ TkZPX0NPTVBPVU5EX1BBVFRFUk4gKHN0bXRfdmluZm8pKQogICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgCSAgICAgICAgICAvKiBmYWxsIHRocm91 Z2ggKi8KIApAQCAtMzk3NSw2ICszOTg5LDEwNiBAQCB2ZWN0X2lzX3NpbXBs ZV9jb25kICh0cmVlIGNvbmQsIGxvb3BfdmVjCiAgIHJldHVybiB0cnVlOwog fQogCisvKiBDcmVhdGUgYSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRoYXQg dmVjdG9yaXplcyBtaW4vbWF4IGxvY2F0aW9uIHBhdHRlcm4KKyAgIGVpdGhl ciBpbnNpZGUgdGhlIGxvb3AgYm9keSwgb3IgaW4gcmVkdWN0aW9uIGVwaWxv Z3VlLiBUaGUgdGVjaG5pcXVlIHVzZWQKKyAgIGhlcmUgd2FzIHRha2VuIGZy b20gIk11bHRpbWVkaWEgdmVjdG9yaXphdGlvbiBvZiBmbG9hdGluZy1wb2lu dCBNSU4vTUFYIAorICAgcmVkdWN0aW9ucyIgYnkgQS5KLkMuQmlrLCBYLlRp YW4gYW5kIE0uQi5HaXJrYXIsIAorICAgaHR0cDovL3BvcnRhbC5hY20ub3Jn L2NpdGF0aW9uLmNmbT9pZD0xMTQ1NzY1LiAKKyAgIFZlY3Rvcml6ZWQgbG9v cCAobWF4bG9jLCBmaXJzdCBpbmRleCk6CisgICAgIHZjeFswOnZsLTE6MV0g PSB8IHggfC4ufCB4IHw7ICAtIHZlY3RvciBvZiBtYXggdmFsdWVzCisgICAg IHZja1swOnZsLTE6MV0gPSB8IGsgfC4ufCBrIHw7ICAtIHZlY3RvciBvZiBw b3NpdGlvbnMKKyAgICAgaW5kWzA6dmwtMToxXSA9IHx2bC0xfC4ufCAwIHw7 IAorICAgICBpbmNbMDp2bC0xOjFdID0gfCB2bCB8Li58IHZsIHw7IAorICAg ICBmb3IgKGkgPSAwOyBpIDwgTjsgaSArPSB2bCkgeyAKKyAgICAgICBtc2tb MDp2bC0xOjFdID0gKGFbaTppK3ZsLTE6MV0gPiB2Y3hbMDp2bC0xOjFdKTsg CisgICAgICAgdmNrWzA6dmwtMToxXSA9IChpbmRbMDp2bC0xOjFdICYgbXNr WzA6dmwtMToxXSkgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgKHZja1sw OnZsLTE6MV0gJiAhbXNrWzA6dmwtMToxXSk7IAorICAgICAgIHZjeFswOnZs LTE6MV0gPSBWTUFYKHZjeFswOnZsLTE6MV0sIGFbaTppK3ZsLTE6MV0pOyAK KyAgICAgICBpbmRbMDp2bC0xOjFdICs9IGluY1swOnZsLTE6MV07IAorICAg ICB9IAorICAgICB4ID0gSE1BWCh2Y3hbMDp2bC0xOjFdKTsgICAgICAgLSBz Y2FsYXIgbWF4aW11bSBleHRyYWN0aW9uCisgICAgIG1za1swOnZsLTE6MV0g PSAodmN4WzA6dmwtMToxXSA9PSB8eHwuLnx4fCk7IAorICAgICB2Y2tbMDp2 bC0xOjFdID0gKHZja1swOnZsLTE6MV0gJiBtc2tbMDp2bC0xOjFdKSB8IAor ICAgICAgICAgICAgICAgICAgICAgKHxNYXhJbnR8Li58TWF4SW50fCAmICFt c2tbMDp2bC0xOjFdKTsgCisgICAgIGsgPSBITUlOKHZja1swOnZsLTE6MV0p OyAgICAgICAtIGZpcnN0IHBvc2l0aW9uIGV4dHJhY3Rpb24KKworICAgSW4g dGhpcyBmdW5jdGlvbiB3ZSBnZW5lcmF0ZToKKyAgICBNQVNLID0gQ09ERSAo Q09NUEFSRV9PUFJORDEsIENPTVBBUkVfT1BSTkQyKQorICAgIFZFQ19ERVNU ID0gKFZFQ19PUFJORDEgJiBNQVNLKSB8IChWRUNfT1BSTkQyICYgIU1BU0sp ICAKKworICAgV2hlbiBjYWxsZWQgZnJvbSB2ZWN0b3JpemFibGVfY29uZGl0 aW9uKCksIHRoZSBsb29wIGJvZHkgY29kZSBpcyBnZW5lcmF0ZWQuCisgICBX aGVuIGNhbGxlZCBmcm9tIHZlY3RfY3JlYXRlX2VwaWxvZ19mb3JfcmVkdWN0 aW9uKCksIHRoZSBmdW5jdGlvbiBnZW5lcmF0ZXMKKyAgIHRoZSBjb2RlIGZv ciBzY2FsYXIgZXh0cmFjdGlvbiBpbiB0aGUgcmVkdWN0aW9uIGVwaWxvZ3Vl LiAKKworICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbGFzdCBzdGF0ZW1l bnQgaW4gdGhlIGFib3ZlIHNlcXVlbmNlLiAgKi8KKworZ2ltcGxlCit2ZWN0 b3JpemVfbWlubWF4X2xvY2F0aW9uX3BhdHRlcm4gKGdpbXBsZSBzdG10LCBn aW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbnVtIHRyZWVfY29kZSBjb2RlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlIGNvbXBhcmVfb3By bmQxLCB0cmVlIGNvbXBhcmVfb3BybmQyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0cmVlIHZlY19vcHJuZDEsIHRyZWUgdmVjX29w cm5kMikKK3sKKyAgdHJlZSBtYXNrX3R5cGUsIGJ1aWx0aW5fZGVjbCwgdmVj X2Rlc3QsIG5ld190ZW1wLCB2ZWN0X21hc2s7CisgIHRyZWUgYW5kX3JlczEs IGFuZF9yZXMyLCBhbmRfZGVzdDEsIGFuZF9kZXN0MiwgdG1wLCBub3RfbWFz aywgbWFzaywgdG1wX21hc2s7CisgIGdpbXBsZSBtYXNrX3N0bXQsIG5ld19z dG10OworICBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbyA9IHZpbmZvX2Zvcl9z dG10IChzdG10KTsKKyAgdHJlZSB2ZWN0eXBlID0gU1RNVF9WSU5GT19WRUNU WVBFIChzdG10X2luZm8pOworICB0cmVlIHNjYWxhcl9kZXN0ID0gZ2ltcGxl X2Fzc2lnbl9saHMgKHN0bXQpOworICBnaW1wbGUgcmVsYXRlZCA9IFNUTVRf VklORk9fUkVMQVRFRF9TVE1UIChzdG10X2luZm8pOworICB0cmVlIHJlbGF0 ZWRfbGhzID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHJlbGF0ZWQpOworICB0cmVl IGNvbXBhcmlzb25fdHlwZSA9IGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlw ZSAoVFJFRV9UWVBFIChyZWxhdGVkX2xocykpOworCisgIC8qIENyZWF0ZSBt YXNrOiBNQVNLID0gQ09ERSAoQ09NUEFSRV9PUFJORDEsIENPTVBBUkVfT1BS TkQyKS4gICovIAorICBidWlsdGluX2RlY2wgPSB0YXJnZXRtLnZlY3Rvcml6 ZS5idWlsdGluX3ZlY3RfY29tcGFyZSAoY29kZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNv bl90eXBlLCAmbWFza190eXBlKTsKKyAgdmVjdF9tYXNrID0gdmVjdF9jcmVh dGVfZGVzdGluYXRpb25fdmFyIChyZWxhdGVkX2xocywgbWFza190eXBlKTsK KyAgbWFza19zdG10ID0gZ2ltcGxlX2J1aWxkX2NhbGwgKGJ1aWx0aW5fZGVj bCwgMiwgY29tcGFyZV9vcHJuZDEsIAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29tcGFyZV9vcHJuZDIpOworICB0bXBfbWFzayA9IG1h a2Vfc3NhX25hbWUgKHZlY3RfbWFzaywgbWFza19zdG10KTsKKyAgZ2ltcGxl X2NhbGxfc2V0X2xocyAobWFza19zdG10LCB0bXBfbWFzayk7CisgIHZlY3Rf ZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAoc3RtdCwgbWFza19zdG10LCBnc2kp OworCisgIC8qIENvbnZlcnQgdGhlIG1hc2sgdG8gVkVDVFlQRS4gICovCisg IHZlY3RfbWFzayA9IHZlY3RfY3JlYXRlX2Rlc3RpbmF0aW9uX3ZhciAoc2Nh bGFyX2Rlc3QsIHZlY3R5cGUpOworICBtYXNrX3N0bXQgPSBnaW1wbGVfYnVp bGRfYXNzaWduICh2ZWN0X21hc2ssIGZvbGRfYnVpbGQxIChWSUVXX0NPTlZF UlRfRVhQUiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3R5cGUsIHRtcF9tYXNrKSk7 CisgIG1hc2sgPSBtYWtlX3NzYV9uYW1lICh2ZWN0X21hc2ssIG1hc2tfc3Rt dCk7CisgIGdpbXBsZV9hc3NpZ25fc2V0X2xocyAobWFza19zdG10LCBtYXNr KTsKKyAgdmVjdF9maW5pc2hfc3RtdF9nZW5lcmF0aW9uIChzdG10LCBtYXNr X3N0bXQsIGdzaSk7CisKKyAgLyogQ3JlYXRlOiBWRUNfREVTVCA9IChWRUNf T1BSTkQxICYgTUFTSykgfCAoVkVDX09QUk5EMiAmICFNQVNLKS4gICovIAor ICBhbmRfZGVzdDEgPSB2ZWN0X2NyZWF0ZV9kZXN0aW5hdGlvbl92YXIgKHNj YWxhcl9kZXN0LCB2ZWN0eXBlKTsKKyAgYW5kX2Rlc3QyID0gdmVjdF9jcmVh dGVfZGVzdGluYXRpb25fdmFyIChzY2FsYXJfZGVzdCwgdmVjdHlwZSk7Cisg IHZlY19kZXN0ID0gdmVjdF9jcmVhdGVfZGVzdGluYXRpb25fdmFyIChzY2Fs YXJfZGVzdCwgdmVjdHlwZSk7CisKKyAgdG1wID0gYnVpbGQyIChCSVRfQU5E X0VYUFIsIHZlY3R5cGUsIHZlY19vcHJuZDEsIG1hc2spOworICBuZXdfc3Rt dCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGFuZF9kZXN0MSwgdG1wKTsKKyAg YW5kX3JlczEgPSBtYWtlX3NzYV9uYW1lIChhbmRfZGVzdDEsIG5ld19zdG10 KTsKKyAgZ2ltcGxlX2Fzc2lnbl9zZXRfbGhzIChuZXdfc3RtdCwgYW5kX3Jl czEpOworICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKHN0bXQsIG5l d19zdG10LCBnc2kpOworCisgIHRtcCA9IGJ1aWxkMSAoQklUX05PVF9FWFBS LCB2ZWN0eXBlLCBtYXNrKTsKKyAgbmV3X3N0bXQgPSBnaW1wbGVfYnVpbGRf YXNzaWduICh2ZWNfZGVzdCwgdG1wKTsKKyAgbm90X21hc2sgPSBtYWtlX3Nz YV9uYW1lICh2ZWNfZGVzdCwgbmV3X3N0bXQpOworICBnaW1wbGVfYXNzaWdu X3NldF9saHMgKG5ld19zdG10LCBub3RfbWFzayk7CisgIHZlY3RfZmluaXNo X3N0bXRfZ2VuZXJhdGlvbiAoc3RtdCwgbmV3X3N0bXQsIGdzaSk7CisKKyAg dG1wID0gYnVpbGQyIChCSVRfQU5EX0VYUFIsIHZlY3R5cGUsIHZlY19vcHJu ZDIsIG5vdF9tYXNrKTsKKyAgbmV3X3N0bXQgPSBnaW1wbGVfYnVpbGRfYXNz aWduIChhbmRfZGVzdDIsIHRtcCk7CisgIGFuZF9yZXMyID0gbWFrZV9zc2Ff bmFtZSAoYW5kX2Rlc3QyLCBuZXdfc3RtdCk7CisgIGdpbXBsZV9hc3NpZ25f c2V0X2xocyAobmV3X3N0bXQsIGFuZF9yZXMyKTsKKyAgdmVjdF9maW5pc2hf c3RtdF9nZW5lcmF0aW9uIChzdG10LCBuZXdfc3RtdCwgZ3NpKTsKKworICB2 ZWNfZGVzdCA9IHZlY3RfY3JlYXRlX2Rlc3RpbmF0aW9uX3ZhciAoc2NhbGFy X2Rlc3QsIHZlY3R5cGUpOworICB0bXAgPSBidWlsZDIgKEJJVF9JT1JfRVhQ UiwgdmVjdHlwZSwgYW5kX3JlczEsIGFuZF9yZXMyKTsKKyAgbmV3X3N0bXQg PSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWNfZGVzdCwgdG1wKTsKKyAgbmV3 X3RlbXAgPSBtYWtlX3NzYV9uYW1lICh2ZWNfZGVzdCwgbmV3X3N0bXQpOwor ICBnaW1wbGVfYXNzaWduX3NldF9saHMgKG5ld19zdG10LCBuZXdfdGVtcCk7 CisgIHZlY3RfZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAoc3RtdCwgbmV3X3N0 bXQsIGdzaSk7CisKKyAgcmV0dXJuIG5ld19zdG10OworfQorCiAvKiB2ZWN0 b3JpemFibGVfY29uZGl0aW9uLgogCiAgICBDaGVjayBpZiBTVE1UIGlzIGNv bmRpdGlvbmFsIG1vZGlmeSBleHByZXNzaW9uIHRoYXQgY2FuIGJlIHZlY3Rv cml6ZWQuCkBAIC0zOTg2LDExICs0MTAwLDE2IEBAIHZlY3RfaXNfc2ltcGxl X2NvbmQgKHRyZWUgY29uZCwgbG9vcF92ZWMKICAgIHRvIGJlIHVzZWQgYXQg UkVEVUNfSU5ERVggKGluIHRoZW4gY2xhdXNlIGlmIFJFRFVDX0lOREVYIGlz IDEsIGFuZCBpbgogICAgZWxzZSBjYWx1c2UgaWYgaXQgaXMgMikuCiAKKyAg IEluIG1pbi9tYXggbG9jYXRpb24gcGF0dGVybiwgcmVkdWN0aW9uIGRlZnMg YXJlIHVzZWQgaW4gYm90aCBjb25kaXRpb24gcGFydAorICAgYW5kIHRoZW4v ZWxzZSBjbGF1c2UuIEluIHRoYXQgY2FzZSBDT05EX1JFRFVDX0RFRiBjb250 YWlucyBzdWNoIHZlY3RvciBkZWYsCisgICBhbmQgQ09ORF9SRURVQ19JTkRF WCBzcGVjaWZpZXMgaXRzIHBsYWNlIGluIHRoZSBjb25kaXRpb24uCisKICAg IFJldHVybiBGQUxTRSBpZiBub3QgYSB2ZWN0b3JpemFibGUgU1RNVCwgVFJV RSBvdGhlcndpc2UuICAqLwogCiBib29sCiB2ZWN0b3JpemFibGVfY29uZGl0 aW9uIChnaW1wbGUgc3RtdCwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwK LQkJCWdpbXBsZSAqdmVjX3N0bXQsIHRyZWUgcmVkdWNfZGVmLCBpbnQgcmVk dWNfaW5kZXgpCisJCQlnaW1wbGUgKnZlY19zdG10LCB0cmVlIHJlZHVjX2Rl ZiwgaW50IHJlZHVjX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAg dHJlZSBjb25kX3JlZHVjX2RlZiwgaW50IGNvbmRfcmVkdWNfaW5kZXgpIAog ewogICB0cmVlIHNjYWxhcl9kZXN0ID0gTlVMTF9UUkVFOwogICB0cmVlIHZl Y19kZXN0ID0gTlVMTF9UUkVFOwpAQCAtNDAwOCw2ICs0MTI3LDcgQEAgdmVj dG9yaXphYmxlX2NvbmRpdGlvbiAoZ2ltcGxlIHN0bXQsIGdpbQogICBpbnQg bnVuaXRzID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHZlY3R5cGUpOwogICBp bnQgbmNvcGllcyA9IExPT1BfVklORk9fVkVDVF9GQUNUT1IgKGxvb3Bfdmlu Zm8pIC8gbnVuaXRzOwogICBlbnVtIHRyZWVfY29kZSBjb2RlOworICB0cmVl IGNvbXBhcmlzb25fdHlwZSwgbWFza190eXBlOwogCiAgIC8qIEZPUk5PVzog dW5zdXBwb3J0ZWQgaW4gYmFzaWMgYmxvY2sgU0xQLiAgKi8KICAgZ2NjX2Fz c2VydCAobG9vcF92aW5mbyk7CkBAIC00MDE2LDIwICs0MTM2LDIzIEBAIHZl Y3Rvcml6YWJsZV9jb25kaXRpb24gKGdpbXBsZSBzdG10LCBnaW0KICAgaWYg KG5jb3BpZXMgPiAxKQogICAgIHJldHVybiBmYWxzZTsgLyogRk9STk9XICov CiAKLSAgaWYgKCFTVE1UX1ZJTkZPX1JFTEVWQU5UX1AgKHN0bXRfaW5mbykp CisgIGlmICghU1RNVF9WSU5GT19SRUxFVkFOVF9QIChzdG10X2luZm8pCisg ICAgICAmJiAhU1RNVF9WSU5GT19DT01QT1VORF9QQVRURVJOIChzdG10X2lu Zm8pKQogICAgIHJldHVybiBmYWxzZTsKIAogICBpZiAoU1RNVF9WSU5GT19E RUZfVFlQRSAoc3RtdF9pbmZvKSAhPSB2ZWN0X2ludGVybmFsX2RlZgotICAg ICAgJiYgIShTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2luZm8pID09IHZl Y3RfbmVzdGVkX2N5Y2xlCisgICAgICAmJiAhKChTVE1UX1ZJTkZPX0RFRl9U WVBFIChzdG10X2luZm8pID09IHZlY3RfbmVzdGVkX2N5Y2xlCisgICAgICAg ICAgICB8fCBTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2luZm8pID09IHZl Y3RfcmVkdWN0aW9uX2RlZikKICAgICAgICAgICAgJiYgcmVkdWNfZGVmKSkK LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZhbHNlOyAgCiAKICAg LyogRk9STk9XOiBTTFAgbm90IHN1cHBvcnRlZC4gICovCiAgIGlmIChTVE1U X1NMUF9UWVBFIChzdG10X2luZm8pKQogICAgIHJldHVybiBmYWxzZTsKIAog ICAvKiBGT1JOT1c6IG5vdCB5ZXQgc3VwcG9ydGVkLiAgKi8KLSAgaWYgKFNU TVRfVklORk9fTElWRV9QIChzdG10X2luZm8pKQorICBpZiAoU1RNVF9WSU5G T19MSVZFX1AgKHN0bXRfaW5mbykgCisgICAgICAmJiAhU1RNVF9WSU5GT19D T01QT1VORF9QQVRURVJOIChzdG10X2luZm8pKSAKICAgICB7CiAgICAgICBp ZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxTKSkKICAg ICAgICAgZnByaW50ZiAodmVjdF9kdW1wLCAidmFsdWUgdXNlZCBhZnRlciBs b29wLiIpOwpAQCAtNDA1Nyw3ICs0MTgwLDEwIEBAIHZlY3Rvcml6YWJsZV9j b25kaXRpb24gKGdpbXBsZSBzdG10LCBnaW0KICAgLyogV2UgZG8gbm90IGhh bmRsZSB0d28gZGlmZmVyZW50IHZlY3RvciB0eXBlcyBmb3IgdGhlIGNvbmRp dGlvbgogICAgICBhbmQgdGhlIHZhbHVlcy4gICovCiAgIGlmICghdHlwZXNf Y29tcGF0aWJsZV9wIChUUkVFX1RZUEUgKFRSRUVfT1BFUkFORCAoY29uZF9l eHByLCAwKSksCi0JCQkgICBUUkVFX1RZUEUgKHZlY3R5cGUpKSkKKwkJCSAg IFRSRUVfVFlQRSAodmVjdHlwZSkpCisgICAgICAmJiAhKFNUTVRfVklORk9f Q09NUE9VTkRfUEFUVEVSTiAoc3RtdF9pbmZvKQorICAgICAgICAgICAmJiBU WVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKGNvbmRf ZXhwciwgMCkpKQorICAgICAgICAgICAgICAgPT0gVFlQRV9TSVpFX1VOSVQg KFRSRUVfVFlQRSAodmVjdHlwZSkpKSkKICAgICByZXR1cm4gZmFsc2U7CiAK ICAgaWYgKFRSRUVfQ09ERSAodGhlbl9jbGF1c2UpID09IFNTQV9OQU1FKQpA QCAtNDA4Nyw0MiArNDIxMyw3NyBAQCB2ZWN0b3JpemFibGVfY29uZGl0aW9u IChnaW1wbGUgc3RtdCwgZ2ltCiAKICAgdmVjX21vZGUgPSBUWVBFX01PREUg KHZlY3R5cGUpOwogCi0gIGlmICghdmVjX3N0bXQpCisgIGNvbXBhcmlzb25f dHlwZSA9IAorICAgICAgICAgZ2V0X3ZlY3R5cGVfZm9yX3NjYWxhcl90eXBl IChUUkVFX1RZUEUgKFRSRUVfT1BFUkFORCAoY29uZF9leHByLCAwKSkpOwor CisgIC8qIENoZWNrIHRoYXQgbWluL21heCBsb2NhdGlvbiBwYXR0ZXJuIGlz IHN1cHBvcnRlZCwgaS5lLiwgdGhlIHJlbGV2YW50IAorICAgICB2ZWN0b3Ig Y29tcGFyaXNvbnMgZXhpc3QgKGluY2x1ZGluZyBFUV9FWFBSIGZvciByZWR1 Y3Rpb24gZXBpbG9ndWUpLiAgKi8KKyAgaWYgKFNUTVRfVklORk9fQ09NUE9V TkRfUEFUVEVSTiAoc3RtdF9pbmZvKSA9PSBtaW5tYXhfbG9jX3N0bXQKKyAg ICAgICYmICghdGFyZ2V0bS52ZWN0b3JpemUuYnVpbHRpbl92ZWN0X2NvbXBh cmUKKyAgICAgICAgICB8fCAhdGFyZ2V0bS52ZWN0b3JpemUuYnVpbHRpbl92 ZWN0X2NvbXBhcmUgKFRSRUVfQ09ERSAoY29uZF9leHByKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bXBhcmlzb25fdHlwZSwgJm1hc2tfdHlwZSkKKyAgICAgICAgICB8fCAhdGFy Z2V0bS52ZWN0b3JpemUuYnVpbHRpbl92ZWN0X2NvbXBhcmUgKEVRX0VYUFIs IGNvbXBhcmlzb25fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXNrX3R5cGUpKSkKKyAg ICB7CisgICAgICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9E RVRBSUxTKSkKKyAgICAgICAgZnByaW50ZiAodmVjdF9kdW1wLCAidW5zdXBw b3J0ZWQgY29tcGFyaXNvbiIpOworCisgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgfQorCisgIGlmICghdmVjX3N0bXQpIAogICAgIHsKICAgICAgIFNUTVRf VklORk9fVFlQRSAoc3RtdF9pbmZvKSA9IGNvbmRpdGlvbl92ZWNfaW5mb190 eXBlOwogICAgICAgcmV0dXJuIGV4cGFuZF92ZWNfY29uZF9leHByX3AgKFRS RUVfVFlQRSAob3ApLCB2ZWNfbW9kZSk7CiAgICAgfQogCi0gIC8qIFRyYW5z Zm9ybSAqLworICAvKiBUcmFuc2Zvcm0uICAqLwogCiAgIC8qIEhhbmRsZSBk ZWYuICAqLwogICBzY2FsYXJfZGVzdCA9IGdpbXBsZV9hc3NpZ25fbGhzIChz dG10KTsKICAgdmVjX2Rlc3QgPSB2ZWN0X2NyZWF0ZV9kZXN0aW5hdGlvbl92 YXIgKHNjYWxhcl9kZXN0LCB2ZWN0eXBlKTsKIAogICAvKiBIYW5kbGUgY29u ZCBleHByLiAgKi8KLSAgdmVjX2NvbmRfbGhzID0KLSAgICB2ZWN0X2dldF92 ZWNfZGVmX2Zvcl9vcGVyYW5kIChUUkVFX09QRVJBTkQgKGNvbmRfZXhwciwg MCksIHN0bXQsIE5VTEwpOwotICB2ZWNfY29uZF9yaHMgPQotICAgIHZlY3Rf Z2V0X3ZlY19kZWZfZm9yX29wZXJhbmQgKFRSRUVfT1BFUkFORCAoY29uZF9l eHByLCAxKSwgc3RtdCwgTlVMTCk7CisgIGlmIChjb25kX3JlZHVjX2luZGV4 ID09IDEpCisgICAgdmVjX2NvbmRfbGhzID0gY29uZF9yZWR1Y19kZWY7Cisg IGVsc2UKKyAgICB2ZWNfY29uZF9saHMgPSAKKyAgICAgIHZlY3RfZ2V0X3Zl Y19kZWZfZm9yX29wZXJhbmQgKFRSRUVfT1BFUkFORCAoY29uZF9leHByLCAw KSwgc3RtdCwgTlVMTCk7CisKKyAgaWYgKGNvbmRfcmVkdWNfaW5kZXggPT0g MikKKyAgICB2ZWNfY29uZF9yaHMgPSBjb25kX3JlZHVjX2RlZjsKKyAgZWxz ZQorICAgIHZlY19jb25kX3JocyA9IAorICAgICAgdmVjdF9nZXRfdmVjX2Rl Zl9mb3Jfb3BlcmFuZCAoVFJFRV9PUEVSQU5EIChjb25kX2V4cHIsIDEpLCBz dG10LCBOVUxMKTsKKwogICBpZiAocmVkdWNfaW5kZXggPT0gMSkKICAgICB2 ZWNfdGhlbl9jbGF1c2UgPSByZWR1Y19kZWY7CiAgIGVsc2UKICAgICB2ZWNf dGhlbl9jbGF1c2UgPSB2ZWN0X2dldF92ZWNfZGVmX2Zvcl9vcGVyYW5kICh0 aGVuX2NsYXVzZSwgc3RtdCwgTlVMTCk7CisKICAgaWYgKHJlZHVjX2luZGV4 ID09IDIpCiAgICAgdmVjX2Vsc2VfY2xhdXNlID0gcmVkdWNfZGVmOwogICBl bHNlCiAgICAgdmVjX2Vsc2VfY2xhdXNlID0gdmVjdF9nZXRfdmVjX2RlZl9m b3Jfb3BlcmFuZCAoZWxzZV9jbGF1c2UsIHN0bXQsIE5VTEwpOwogCiAgIC8q IEFyZ3VtZW50cyBhcmUgcmVhZHkuIENyZWF0ZSB0aGUgbmV3IHZlY3RvciBz dG10LiAgKi8KLSAgdmVjX2NvbXBhcmUgPSBidWlsZDIgKFRSRUVfQ09ERSAo Y29uZF9leHByKSwgdmVjdHlwZSwKLQkJCXZlY19jb25kX2xocywgdmVjX2Nv bmRfcmhzKTsKLSAgdmVjX2NvbmRfZXhwciA9IGJ1aWxkMyAoVkVDX0NPTkRf RVhQUiwgdmVjdHlwZSwKLQkJCSAgdmVjX2NvbXBhcmUsIHZlY190aGVuX2Ns YXVzZSwgdmVjX2Vsc2VfY2xhdXNlKTsKLQotICAqdmVjX3N0bXQgPSBnaW1w bGVfYnVpbGRfYXNzaWduICh2ZWNfZGVzdCwgdmVjX2NvbmRfZXhwcik7Ci0g IG5ld190ZW1wID0gbWFrZV9zc2FfbmFtZSAodmVjX2Rlc3QsICp2ZWNfc3Rt dCk7Ci0gIGdpbXBsZV9hc3NpZ25fc2V0X2xocyAoKnZlY19zdG10LCBuZXdf dGVtcCk7Ci0gIHZlY3RfZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAoc3RtdCwg KnZlY19zdG10LCBnc2kpOworICBpZiAoU1RNVF9WSU5GT19DT01QT1VORF9Q QVRURVJOIChzdG10X2luZm8pID09IG1pbm1heF9sb2Nfc3RtdCkKKyAgICB7 CisgICAgICAqdmVjX3N0bXQgPSB2ZWN0b3JpemVfbWlubWF4X2xvY2F0aW9u X3BhdHRlcm4gKHN0bXQsIGdzaSwgIAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUUkVFX0NPREUgKGNvbmRfZXhwciksIHZlY19jb25kX2xocywg dmVjX2NvbmRfcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 ZWNfdGhlbl9jbGF1c2UsIHZlY19lbHNlX2NsYXVzZSk7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgdmVjX2NvbXBhcmUgPSBidWlsZDIgKFRSRUVf Q09ERSAoY29uZF9leHByKSwgdmVjdHlwZSwgdmVjX2NvbmRfbGhzLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfY29uZF9yaHMpOworICAg ICAgdmVjX2NvbmRfZXhwciA9IGJ1aWxkMyAoVkVDX0NPTkRfRVhQUiwgdmVj dHlwZSwgdmVjX2NvbXBhcmUsIAorICAgIAkJCSAgICAgIHZlY190aGVuX2Ns YXVzZSwgdmVjX2Vsc2VfY2xhdXNlKTsKKyAgICAgICp2ZWNfc3RtdCA9IGdp bXBsZV9idWlsZF9hc3NpZ24gKHZlY19kZXN0LCB2ZWNfY29uZF9leHByKTsK KyAgICAgIG5ld190ZW1wID0gbWFrZV9zc2FfbmFtZSAodmVjX2Rlc3QsICp2 ZWNfc3RtdCk7CisgICAgICBnaW1wbGVfYXNzaWduX3NldF9saHMgKCp2ZWNf c3RtdCwgbmV3X3RlbXApOworICAgICAgdmVjdF9maW5pc2hfc3RtdF9nZW5l cmF0aW9uIChzdG10LCAqdmVjX3N0bXQsIGdzaSk7CisgICAgfQogCiAgIHJl dHVybiB0cnVlOwogfQpAQCAtNDE3OSw3ICs0MzQwLDggQEAgdmVjdF9hbmFs eXplX3N0bXQgKGdpbXBsZSBzdG10LCBib29sICpuZQogICAgICAgY2FzZSB2 ZWN0X25lc3RlZF9jeWNsZToKICAgICAgICAgIGdjY19hc3NlcnQgKCFiYl92 aW5mbyAmJiAocmVsZXZhbmNlID09IHZlY3RfdXNlZF9pbl9vdXRlcgogICAg ICAgICAgICAgICAgICAgICAgfHwgcmVsZXZhbmNlID09IHZlY3RfdXNlZF9p bl9vdXRlcl9ieV9yZWR1Y3Rpb24KLSAgICAgICAgICAgICAgICAgICAgIHx8 IHJlbGV2YW5jZSA9PSB2ZWN0X3VudXNlZF9pbl9zY29wZSkpOworICAgICAg ICAgICAgICAgICAgICAgfHwgcmVsZXZhbmNlID09IHZlY3RfdW51c2VkX2lu X3Njb3BlCisgICAgICAgICAgICAgICAgICAgICB8fCByZWxldmFuY2UgPT0g dmVjdF91c2VkX2J5X3JlZHVjdGlvbikpOwogICAgICAgICAgYnJlYWs7CiAK ICAgICAgIGNhc2UgdmVjdF9pbmR1Y3Rpb25fZGVmOgpAQCAtNDI0MSw3ICs0 NDAzLDcgQEAgdmVjdF9hbmFseXplX3N0bXQgKGdpbXBsZSBzdG10LCBib29s ICpuZQogICAgICAgICAgICAgfHwgdmVjdG9yaXphYmxlX2NhbGwgKHN0bXQs IE5VTEwsIE5VTEwpCiAgICAgICAgICAgICB8fCB2ZWN0b3JpemFibGVfc3Rv cmUgKHN0bXQsIE5VTEwsIE5VTEwsIE5VTEwpCiAgICAgICAgICAgICB8fCB2 ZWN0b3JpemFibGVfcmVkdWN0aW9uIChzdG10LCBOVUxMLCBOVUxMLCBOVUxM KQotICAgICAgICAgICAgfHwgdmVjdG9yaXphYmxlX2NvbmRpdGlvbiAoc3Rt dCwgTlVMTCwgTlVMTCwgTlVMTCwgMCkpOworICAgICAgICAgICAgfHwgdmVj dG9yaXphYmxlX2NvbmRpdGlvbiAoc3RtdCwgTlVMTCwgTlVMTCwgTlVMTCwg MCwgTlVMTCwgMCkpOyAKICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIGlm IChiYl92aW5mbykKQEAgLTQzODIsNyArNDU0NCw3IEBAIHZlY3RfdHJhbnNm b3JtX3N0bXQgKGdpbXBsZSBzdG10LCBnaW1wbGUKIAogICAgIGNhc2UgY29u ZGl0aW9uX3ZlY19pbmZvX3R5cGU6CiAgICAgICBnY2NfYXNzZXJ0ICghc2xw X25vZGUpOwotICAgICAgZG9uZSA9IHZlY3Rvcml6YWJsZV9jb25kaXRpb24g KHN0bXQsIGdzaSwgJnZlY19zdG10LCBOVUxMLCAwKTsKKyAgICAgIGRvbmUg PSB2ZWN0b3JpemFibGVfY29uZGl0aW9uIChzdG10LCBnc2ksICZ2ZWNfc3Rt dCwgTlVMTCwgMCwgTlVMTCwgMCk7IAogICAgICAgZ2NjX2Fzc2VydCAoZG9u ZSk7CiAgICAgICBicmVhazsKIApAQCAtNDUyMCw2ICs0NjgyLDcgQEAgbmV3 X3N0bXRfdmVjX2luZm8gKGdpbXBsZSBzdG10LCBsb29wX3ZlYwogICBTVE1U X1ZJTkZPX1ZFQ19TVE1UIChyZXMpID0gTlVMTDsKICAgU1RNVF9WSU5GT19W RUNUT1JJWkFCTEUgKHJlcykgPSB0cnVlOwogICBTVE1UX1ZJTkZPX0lOX1BB VFRFUk5fUCAocmVzKSA9IGZhbHNlOworICBTVE1UX1ZJTkZPX0NPTVBPVU5E X1BBVFRFUk4gKHJlcykgPSBub3RfaW5fcGF0dGVybjsKICAgU1RNVF9WSU5G T19SRUxBVEVEX1NUTVQgKHJlcykgPSBOVUxMOwogICBTVE1UX1ZJTkZPX0RB VEFfUkVGIChyZXMpID0gTlVMTDsKIApAQCAtNDUzOCw2ICs0NzAxLDcgQEAg bmV3X3N0bXRfdmVjX2luZm8gKGdpbXBsZSBzdG10LCBsb29wX3ZlYwogICBT VE1UX1ZJTkZPX1NBTUVfQUxJR05fUkVGUyAocmVzKSA9IFZFQ19hbGxvYyAo ZHJfcCwgaGVhcCwgNSk7CiAgIFNUTVRfVklORk9fSU5TSURFX09GX0xPT1Bf Q09TVCAocmVzKSA9IDA7CiAgIFNUTVRfVklORk9fT1VUU0lERV9PRl9MT09Q X0NPU1QgKHJlcykgPSAwOworICBTVE1UX1ZJTkZPX1JFRFVDX1NDQUxBUl9S RVNfU1RNVCAocmVzKSA9IE5VTEw7CiAgIFNUTVRfU0xQX1RZUEUgKHJlcykg PSBsb29wX3ZlY3Q7CiAgIERSX0dST1VQX0ZJUlNUX0RSIChyZXMpID0gTlVM TDsKICAgRFJfR1JPVVBfTkVYVF9EUiAocmVzKSA9IE5VTEw7CkluZGV4OiBj b25maWcvcnM2MDAwL3JzNjAwMC1idWlsdGluLmRlZgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBjb25maWcvcnM2MDAwL3JzNjAwMC1idWlsdGluLmRl ZgkocmV2aXNpb24gMTYxODYyKQorKysgY29uZmlnL3JzNjAwMC9yczYwMDAt YnVpbHRpbi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDggQEAg UlM2MDAwX0JVSUxUSU4oQUxUSVZFQ19CVUlMVElOX1ZDTVBHVFNILAogUlM2 MDAwX0JVSUxUSU4oQUxUSVZFQ19CVUlMVElOX1ZDTVBHVFVXLAkJUlM2MDAw X0JUQ19DT05TVCkKIFJTNjAwMF9CVUlMVElOKEFMVElWRUNfQlVJTFRJTl9W Q01QR1RTVywJCVJTNjAwMF9CVENfQ09OU1QpCiBSUzYwMDBfQlVJTFRJTihB TFRJVkVDX0JVSUxUSU5fVkNNUEdURlAsCQlSUzYwMDBfQlRDX0ZQX1BVUkUp CitSUzYwMDBfQlVJTFRJTihBTFRJVkVDX0JVSUxUSU5fVkNNUExURlAsCQlS UzYwMDBfQlRDX0ZQX1BVUkUpCitSUzYwMDBfQlVJTFRJTihBTFRJVkVDX0JV SUxUSU5fVkNNUExFRlAsCQlSUzYwMDBfQlRDX0ZQX1BVUkUpCiBSUzYwMDBf QlVJTFRJTihBTFRJVkVDX0JVSUxUSU5fVkVYUFRFRlAsCQlSUzYwMDBfQlRD X0ZQX1BVUkUpCiBSUzYwMDBfQlVJTFRJTihBTFRJVkVDX0JVSUxUSU5fVkxP R0VGUCwJCQlSUzYwMDBfQlRDX0ZQX1BVUkUpCiBSUzYwMDBfQlVJTFRJTihB TFRJVkVDX0JVSUxUSU5fVk1BRERGUCwJCQlSUzYwMDBfQlRDX0ZQX1BVUkUp CkluZGV4OiBjb25maWcvcnM2MDAwL3JzNjAwMC5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMJKHJldmlzaW9u IDE2MTg2MikKKysrIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMJKHdvcmtpbmcg Y29weSkKQEAgLTEwNzcsNiArMTA3Nyw3IEBAIHN0YXRpYyBib29sIHJzNjAw MF9idWlsdGluX3N1cHBvcnRfdmVjdG8KIAkJCQkJCQlpbnQsIGJvb2wpOwog c3RhdGljIGludCByczYwMDBfYnVpbHRpbl92ZWN0b3JpemF0aW9uX2Nvc3Qg KGVudW0gdmVjdF9jb3N0X2Zvcl9zdG10LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUsIGludCk7CitzdGF0 aWMgdHJlZSByczYwMDBfYnVpbHRpbl92ZWN0X2NvbXBhcmUgKHVuc2lnbmVk IGludCwgdHJlZSwgdHJlZSAqKTsKIAogc3RhdGljIHZvaWQgZGVmX2J1aWx0 aW4gKGludCwgY29uc3QgY2hhciAqLCB0cmVlLCBpbnQpOwogc3RhdGljIGJv b2wgcnM2MDAwX3ZlY3Rvcl9hbGlnbm1lbnRfcmVhY2hhYmxlIChjb25zdF90 cmVlLCBib29sKTsKQEAgLTE0NzIsNiArMTQ3Myw4IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgcnM2MDAKICN1bmRlZiBUQVJHRVRf VkVDVE9SSVpFX0JVSUxUSU5fVkVDVE9SSVpBVElPTl9DT1NUCiAjZGVmaW5l IFRBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9WRUNUT1JJWkFUSU9OX0NPU1Qg XAogICByczYwMDBfYnVpbHRpbl92ZWN0b3JpemF0aW9uX2Nvc3QKKyN1bmRl ZiBUQVJHRVRfVkVDVE9SSVpFX0JVSUxUSU5fVkVDVF9DTVAKKyNkZWZpbmUg VEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX1ZFQ1RfQ01QIHJzNjAwMF9idWls dGluX3ZlY3RfY29tcGFyZQogCiAjdW5kZWYgVEFSR0VUX0lOSVRfQlVJTFRJ TlMKICNkZWZpbmUgVEFSR0VUX0lOSVRfQlVJTFRJTlMgcnM2MDAwX2luaXRf YnVpbHRpbnMKQEAgLTM1MTUsNiArMzUxOCw0NSBAQCByczYwMDBfYnVpbHRp bl92ZWN0b3JpemF0aW9uX2Nvc3QgKGVudW0gCiAgICAgfQogfQogCisvKiBJ bXBsZW1lbnQgdGFyZ2V0bS52ZWN0b3JpemUuYnVpbHRpbl92ZWN0X2NvbXBh cmUuICAqLwordHJlZQorcnM2MDAwX2J1aWx0aW5fdmVjdF9jb21wYXJlICh1 bnNpZ25lZCBpbnQgdGNvZGUsIHRyZWUgdHlwZSwgdHJlZSAqcmV0dXJuX3R5 cGUpCit7CisgIGVudW0gdHJlZV9jb2RlIGNvZGUgPSAoZW51bSB0cmVlX2Nv ZGUpIHRjb2RlOworCisgIGlmICghVEFSR0VUX0FMVElWRUMpCisgICAgcmV0 dXJuIE5VTExfVFJFRTsKKworICBzd2l0Y2ggKFRZUEVfTU9ERSAodHlwZSkp CisgICAgeworICAgIGNhc2UgVjRTRm1vZGU6CisgICAgICAqcmV0dXJuX3R5 cGUgPSBWNFNGX3R5cGVfbm9kZTsKKyAgICAgIHN3aXRjaCAoY29kZSkKKyAg ICAgICAgeworICAgICAgICAgIGNhc2UgR1RfRVhQUjoKKyAgICAgICAgICAg IHJldHVybiByczYwMDBfYnVpbHRpbl9kZWNsc1tBTFRJVkVDX0JVSUxUSU5f VkNNUEdURlBdOworICAgICAgICAgICAgCisgICAgICAgICAgY2FzZSBMVF9F WFBSOgorICAgICAgICAgICAgcmV0dXJuIHJzNjAwMF9idWlsdGluX2RlY2xz W0FMVElWRUNfQlVJTFRJTl9WQ01QTFRGUF07CisKKyAgICAgICAgICBjYXNl IEdFX0VYUFI6CisgICAgICAgICAgICByZXR1cm4gcnM2MDAwX2J1aWx0aW5f ZGVjbHNbQUxUSVZFQ19CVUlMVElOX1ZDTVBHRUZQXTsKKworICAgICAgICAg IGNhc2UgTEVfRVhQUjoKKyAgICAgICAgICAgIHJldHVybiByczYwMDBfYnVp bHRpbl9kZWNsc1tBTFRJVkVDX0JVSUxUSU5fVkNNUExFRlBdOworCisgICAg ICAgICAgY2FzZSBFUV9FWFBSOgorICAgICAgICAgICAgcmV0dXJuIHJzNjAw MF9idWlsdGluX2RlY2xzW0FMVElWRUNfQlVJTFRJTl9WQ01QRVFGUF07CisK KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5VTExf VFJFRTsKKyAgICAgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVy biBOVUxMX1RSRUU7CisgICAgfQorfQorCiAvKiBIYW5kbGUgZ2VuZXJpYyBv cHRpb25zIG9mIHRoZSBmb3JtIC1tZm9vPXllcy9uby4KICAgIE5BTUUgaXMg dGhlIG9wdGlvbiBuYW1lLgogICAgVkFMVUUgaXMgdGhlIG9wdGlvbiB2YWx1 ZS4KQEAgLTkzMzcsNiArOTM3OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgYnVpbHRp bl9kZXNjcmlwdGlvbiBiZGVzY18KICAgeyBNQVNLX0FMVElWRUMsIENPREVf Rk9SX3ZlY3Rvcl9ndHV2NHNpLCAiX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0 dXciLCBBTFRJVkVDX0JVSUxUSU5fVkNNUEdUVVcgfSwKICAgeyBNQVNLX0FM VElWRUMsIENPREVfRk9SX3ZlY3Rvcl9ndHY0c2ksICJfX2J1aWx0aW5fYWx0 aXZlY192Y21wZ3RzdyIsIEFMVElWRUNfQlVJTFRJTl9WQ01QR1RTVyB9LAog ICB7IE1BU0tfQUxUSVZFQywgQ09ERV9GT1JfdmVjdG9yX2d0djRzZiwgIl9f YnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwIiwgQUxUSVZFQ19CVUlMVElOX1ZD TVBHVEZQIH0sCisgIHsgTUFTS19BTFRJVkVDLCBDT0RFX0ZPUl9hbHRpdmVj X3ZjbXBsdGZwLCAiX19idWlsdGluX2FsdGl2ZWNfdmNtcGx0ZnAiLCBBTFRJ VkVDX0JVSUxUSU5fVkNNUExURlAgfSwKKyAgeyBNQVNLX0FMVElWRUMsIENP REVfRk9SX2FsdGl2ZWNfdmNtcGxlZnAsICJfX2J1aWx0aW5fYWx0aXZlY192 Y21wbGVmcCIsIEFMVElWRUNfQlVJTFRJTl9WQ01QTEVGUCB9LAogICB7IE1B U0tfQUxUSVZFQywgQ09ERV9GT1JfYWx0aXZlY192Y3RzeHMsICJfX2J1aWx0 aW5fYWx0aXZlY192Y3RzeHMiLCBBTFRJVkVDX0JVSUxUSU5fVkNUU1hTIH0s CiAgIHsgTUFTS19BTFRJVkVDLCBDT0RFX0ZPUl9hbHRpdmVjX3ZjdHV4cywg Il9fYnVpbHRpbl9hbHRpdmVjX3ZjdHV4cyIsIEFMVElWRUNfQlVJTFRJTl9W Q1RVWFMgfSwKICAgeyBNQVNLX0FMVElWRUMsIENPREVfRk9SX3VtYXh2MTZx aTMsICJfX2J1aWx0aW5fYWx0aXZlY192bWF4dWIiLCBBTFRJVkVDX0JVSUxU SU5fVk1BWFVCIH0sCkluZGV4OiBjb25maWcvcnM2MDAwL2FsdGl2ZWMubWQK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmlnL3JzNjAwMC9hbHRp dmVjLm1kCShyZXZpc2lvbiAxNjE4NjIpCisrKyBjb25maWcvcnM2MDAwL2Fs dGl2ZWMubWQJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsOCBAQAog ICAgKFVOU1BFQ19WVVBLSFVfVjRTRiAgMzI2KQogICAgKFVOU1BFQ19WVVBL TFVfVjRTRiAgMzI3KQogICAgKFVOU1BFQ19WTk1TVUJGUAkzMjgpCisgICAo VU5TUEVDX1ZDTVBMVEZQICAgICAzMjkpCisgICAoVU5TUEVDX1ZDTVBMRUZQ ICAgICAzMzApCiBdKQogCiAoZGVmaW5lX2NvbnN0YW50cwpAQCAtMjgwMiwz ICsyODA0LDIyIEBACiAgIGVtaXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdmNmdXgg KG9wZXJhbmRzWzBdLCB0bXAsIGNvbnN0MF9ydHgpKTsKICAgRE9ORTsKIH0i KQorCisKKyhkZWZpbmVfaW5zbiAiYWx0aXZlY192Y21wbHRmcCIKKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6VjRTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXYiKQorICAgICAgICAodW5zcGVjOlY0U0YgWyhtYXRjaF9vcGVyYW5kOlY0 U0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInYiKQorICAgICAgICAgICAgICAg ICAgKG1hdGNoX29wZXJhbmQ6VjRTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAi diIpXQorICAgICAgICAgICAgICAgICAgIFVOU1BFQ19WQ01QTFRGUCkpXQor ICAiVEFSR0VUX0FMVElWRUMiCisgICJ2Y21wZ3RmcCAlMCwlMiwlMSIKKyAg WyhzZXRfYXR0ciAidHlwZSIgInZlY2NtcCIpXSkKKworKGRlZmluZV9pbnNu ICJhbHRpdmVjX3ZjbXBsZWZwIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpW NFNGIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9diIpCisgICAgICAgICh1bnNw ZWM6VjRTRiBbKG1hdGNoX29wZXJhbmQ6VjRTRiAxICJyZWdpc3Rlcl9vcGVy YW5kIiAidiIpCisgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpW NFNGIDIgInJlZ2lzdGVyX29wZXJhbmQiICJ2IildCisgICAgICAgICAgICAg ICAgICAgVU5TUEVDX1ZDTVBMRUZQKSldCisgICJUQVJHRVRfQUxUSVZFQyIK KyAgInZjbXBnZWZwICUwLCUyLCUxIgorICBbKHNldF9hdHRyICJ0eXBlIiAi dmVjY21wIildKQpJbmRleDogdHJlZS12ZWN0LXNscC5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIHRyZWUtdmVjdC1zbHAuYwkocmV2aXNpb24gMTYx ODYyKQorKysgdHJlZS12ZWN0LXNscC5jCSh3b3JraW5nIGNvcHkpCkBAIC0x NDYsNiArMTQ2LDE4IEBAIHZlY3RfZ2V0X2FuZF9jaGVja19zbHBfZGVmcyAo bG9vcF92ZWNfaW4KIAkgIHJldHVybiBmYWxzZTsKIAl9CiAKKyAgICAgIGlm IChkZWZfc3RtdCAmJiB2aW5mb19mb3Jfc3RtdCAoZGVmX3N0bXQpCisgICAg ICAgICAgJiYgU1RNVF9WSU5GT19DT01QT1VORF9QQVRURVJOICh2aW5mb19m b3Jfc3RtdCAoZGVmX3N0bXQpKSkgCisgICAgICAgIHsKKyAgICAgICAgICBp ZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9TTFApKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJC dWlsZCBTTFAgZmFpbGVkOiBjb21wb3VuZCBwYXR0ZXJuICIpOworICAgICAg ICAgICAgICBwcmludF9naW1wbGVfc3RtdCAodmVjdF9kdW1wLCBkZWZfc3Rt dCwgMCwgVERGX1NMSU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgIC8qIENoZWNrIGlm IERFRl9TVE1UIGlzIGEgcGFydCBvZiBhIHBhdHRlcm4gaW4gTE9PUCBhbmQg Z2V0IHRoZSBkZWYgc3RtdAogICAgICAgICAgZnJvbSB0aGUgcGF0dGVybi4g Q2hlY2sgdGhhdCBhbGwgdGhlIHN0bXRzIG9mIHRoZSBub2RlIGFyZSBpbiB0 aGUKICAgICAgICAgIHBhdHRlcm4uICAqLwo= --0__=4DBBFDCBDFB48C188f9e8a93df938690918c4DBBFDCBDFB48C18--