From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id B94BB3955CBC for ; Tue, 10 May 2022 11:29:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B94BB3955CBC Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.91,214,1647331200"; d="scan'208";a="75521953" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa3.mentor.iphmx.com with ESMTP; 10 May 2022 03:29:32 -0800 IronPort-SDR: o47Y4fxbHcB6PQzHy5kU1s55uj2iC7i8Nwc0hQFCal5+epyCZ/srHYsAUi7F1acRSF2fbgHtwn N5c1XBF3HgV+ikfixKufy0lIz5ZHSYAWc79F6npRX9L5QaZLdsjzNno7qcfQIZJ4SMmfOraYNB 5WlFENBdEH1Hnt9CxhJmN465pGI9/Vcpb5jqz1tSdHBYUf6u85lBceokrol5nzCLtOV6UnmFNT ZQv1RxgF3+4SZmU7is/EXTsFqZydDwqtQ3YxFlwnW9i9rvQ/OFe7boMNMlOhGdXLc+evXCuQ8d VVY= Content-Type: multipart/mixed; boundary="------------yPYcqqR3RXNJ1ixH4B0PkKs8" Message-ID: Date: Tue, 10 May 2022 19:29:23 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: [PATCH, OpenMP, v2] Implement uses_allocators clause for target regions Content-Language: en-US To: Tobias Burnus , gcc-patches , Jakub Jelinek , Catherine Moore , Andrew Stubbs , Hafiz Abid Qadeer References: <46d77e14-080c-db6c-4032-e12899c5d059@codesourcery.com> <9c0945fa-1054-095e-86ae-a9d8dd1ab625@codesourcery.com> From: Chung-Lin Tang In-Reply-To: <9c0945fa-1054-095e-86ae-a9d8dd1ab625@codesourcery.com> X-ClientProxiedBy: svr-orw-mbx-14.mgc.mentorg.com (147.34.90.214) To svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) X-Spam-Status: No, score=-8.9 required=5.0 tests=BAYES_00, BODY_8BITS, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_MANYTO, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 May 2022 11:29:39 -0000 --------------yPYcqqR3RXNJ1ixH4B0PkKs8 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit On 2022/5/7 12:40 AM, Tobias Burnus wrote: > > Can please also handle the new clause in Fortran's dump-parse-tree.cc? > > I did see some split handling in C, but not in Fortran; do you also need > to up update gfc_split_omp_clauses in Fortran's trans-openmp.cc? Done. > Actually, glancing at the testcases, no combined construct (like > "omp target parallel") is used, I think that would be useful because of ↑. Okay, added some to testcases. >> +/* OpenMP 5.2: >> +   uses_allocators ( allocator-list ) > That's not completely true: uses_allocators is OpenMP 5.1. > However, 5.1 only supports (for non-predefined allocators): >    uses_allocators( allocator(traits) ) > while OpenMP 5.2 added modifiers: >    uses_allocatrors( traits(...), memspace(...) : allocator ) > and deprecated the 5.1 'allocator(traits)'. (Scheduled for removal in OMP 6.0) > > The advantage of 5.2 syntax is that a memory space can be defined. I supported both syntaxes, that's why I designated it as "5.2". > BTW: This makes uses_allocators the first OpenMP 5.2 feature which > will make it into GCC :-) :) > > gcc/fortran/openmp.cc: >> +  if (gfc_get_symbol ("omp_allocator_handle_kind", NULL, &sym) >> +      || !sym->value >> +      || sym->value->expr_type != EXPR_CONSTANT >> +      || sym->value->ts.type != BT_INTEGER) >> +    { >> +      gfc_error ("OpenMP % constant not found by " >> +         "% clause at %C"); >> +      goto error; >> +    } >> +  allocator_handle_kind = sym; > I think you rather want to use >   gfc_find_symbol ("omp_...", NULL, true, &sym) >   || sym == NULL > where true is for parent_flag to search also the parent namespace. > (The function returns 1 if the symbol is ambiguous, 0 otherwise - > including 0 + sym == NULL when the symbol could not be found.) > >   || sym->attr.flavor != FL_PARAMETER >   || sym->ts.type != BT_INTEGER >   || sym->attr.dimension > > Looks cleaner than to access sym->value. The attr.dimension is just > to makes sure the user did not smuggle an array into this. > (Invalid as omp_... is a reserved namespace but users will still do > this and some are good in finding ICE as hobby.) Well, the intention here is to search for "omp_allocator_handle_kind" and "omp_memspace_handle_kind", and use their value to check if the kinds are the same as declared allocator handles and memspace constant. Not to generally search for "omp_...". However the sym->attr.dimension test seems useful, added in new v2 patch. > However, I fear that will fail for the following two examples (both untested): > >   use omp_lib, my_kind = omp_allocator_handle_kind >   integer(my_kind) :: my_allocator > > as this gives 'my_kind' in the symtree->name (while symtree->n.sym->name is "omp_..."). > Hence, by searching the symtree for 'omp_...' the symbol will not be found. > > > It will likely also fail for the following more realistic example: ... > subroutine foo >   use m >   use omp_lib, only: omp_alloctrait ... >   !$omp target uses_allocators(my_allocator(traits_array) allocate(my_allocator:A) firstprivate(A) >      ... >   !$omp end target > end If someone wants to use OpenMP allocators, but intentionally only imports insufficient standard symbols from omp_lib, then he/she is on their own :) The specification really makes this quite clear: omp_allocator_handle_kind, omp_alloctrait, omp_memspace_handle_kind are all part of the same package. > In this case, omp_allocator_handle_kind is not in the namespace of 'foo' > but the code should be still valid. Thus, an alternative would be to hard-code > the value - as done for the depobj. As we have: > >         integer, parameter :: omp_allocator_handle_kind = c_intptr_t >         integer, parameter :: omp_memspace_handle_kind = c_intptr_t > > that would be >    sym->ts.type == BT_CHARACTER >    sym->ts.kind == gfc_index_integer_kind > for the allocator variable and the the memspace kind. > > However, I grant that either example is not very typical. The second one is more > natural – such a code will very likely be written in the real world. But not > with uses_allocators but rather with "!$omp requires dynamic_allocators" and > omp_init_allocator(). > > Thoughts? As above. I mean, what is so hard with including "use omp_lib" where you need it? :D > * * * > > gcc/fortran/openmp.cc >> +      if (++i > 2) >> +    { >> +      gfc_error ("Only two modifiers are allowed on % " >> +             "clause at %C"); >> +      goto error; >> +    } >> + > > Is this really needed? There is a check for multiple traits and multiple memspace > Thus, 'trait(),memspace(),trait()' is already handled and > 'trait(),something' give a break and will lead to an error as in that case > a ':' and not ',something' is expected. I think it could be worth reminding that limitation, instead of a generic error. >> +      if (gfc_match_char ('(') == MATCH_YES) >> +    { >> +      if (memspace_seen || traits_seen) >> +        { >> +          gfc_error ("Modifiers cannot be used with legacy " >> +             "array syntax at %C"); > I wouldn't uses the term 'array synax' to denote >   uses_allocators(allocator (alloc_array) ) > How about: >   error: "Using both modifiers and allocator variable with traits argument" > > (And I think 'deprecated' is better than 'legacy', if we really want to use it.) I've changed it to "(deprecated) traits array list syntax", is that better? >> +      if (traits_sym->ts.type != BT_DERIVED >> +          || strcmp (traits_sym->ts.u.derived->name, >> +             "omp_alloctrait") != 0 >> +          || traits_sym->attr.flavor != FL_PARAMETER >> +          || traits_sym->as->rank != 1 >> +          || traits_sym->value == NULL >> +          || !gfc_is_constant_expr (traits_sym->value)) > > I think the gfc_is_constant_expr is unreachable as you already > have checked FL_PARAMETER. Thus, you can remove the last two > lines. Okay. > [Regarding the traits_sym->ts.u.derived->name, I am not sure whether that > won't fail with >   use omp_lib, trait_t => omp_alloctrait > but I have not checked. It likely does work correctly.] > >> +          /* Check if identifier is of 'omp_..._mem_space' format.  */ >> +          || (pos = strstr (memspace_sym->name, "omp_")) == NULL >> +          || pos != memspace_sym->name >> +          || (pos = strstr (memspace_sym->name, "_mem_space")) == NULL >> +          || *(pos + strlen ("_mem_space")) != '\0') > > I wonder whether that's not more readable written as: >    || !startswith (memspace_sym->name, "omp_") >    || !endswith (memspace_sym->name, "_mem_space") Thanks, didn't know it was this convenient :) I've attached v2 of the patch. Currently in testing. Thanks, Chung-Lin --------------yPYcqqR3RXNJ1ixH4B0PkKs8 Content-Type: text/plain; charset="UTF-8"; name="uses_allocators-2.patch" Content-Disposition: attachment; filename="uses_allocators-2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9idWlsdGluLXR5cGVzLmRlZiBiL2djYy9idWlsdGluLXR5cGVz LmRlZgppbmRleCAzYTdjZWNkZjA4Ny4uYmUzZTZmZjY5N2UgMTAwNjQ0Ci0tLSBhL2djYy9i dWlsdGluLXR5cGVzLmRlZgorKysgYi9nY2MvYnVpbHRpbi10eXBlcy5kZWYKQEAgLTI4Myw2 ICsyODMsNyBAQCBERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9GTl9ERkxPQVQzMl9ERkxPQVQz MiwgQlRfREZMT0FUMzIsIEJUX0RGTE9BVDMyKQogREVGX0ZVTkNUSU9OX1RZUEVfMSAoQlRf Rk5fREZMT0FUNjRfREZMT0FUNjQsIEJUX0RGTE9BVDY0LCBCVF9ERkxPQVQ2NCkKIERFRl9G VU5DVElPTl9UWVBFXzEgKEJUX0ZOX0RGTE9BVDEyOF9ERkxPQVQxMjgsIEJUX0RGTE9BVDEy OCwgQlRfREZMT0FUMTI4KQogREVGX0ZVTkNUSU9OX1RZUEVfMSAoQlRfRk5fVk9JRF9WUFRS LCBCVF9WT0lELCBCVF9WT0xBVElMRV9QVFIpCitERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9G Tl9WT0lEX1BUUk1PREUsIEJUX1ZPSUQsIEJUX1BUUk1PREUpCiBERUZfRlVOQ1RJT05fVFlQ RV8xIChCVF9GTl9WT0lEX1BUUlBUUiwgQlRfVk9JRCwgQlRfUFRSX1BUUikKIERFRl9GVU5D VElPTl9UWVBFXzEgKEJUX0ZOX1ZPSURfQ09OU1RfUFRSLCBCVF9WT0lELCBCVF9DT05TVF9Q VFIpCiBERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9GTl9VSU5UX1VJTlQsIEJUX1VJTlQsIEJU X1VJTlQpCkBAIC02NDEsNiArNjQyLDggQEAgREVGX0ZVTkNUSU9OX1RZUEVfMyAoQlRfRk5f UFRSX1NJWkVfU0laRV9QVFJNT0RFLAogCQkgICAgIEJUX1BUUiwgQlRfU0laRSwgQlRfU0la RSwgQlRfUFRSTU9ERSkKIERFRl9GVU5DVElPTl9UWVBFXzMgKEJUX0ZOX1ZPSURfUFRSX1VJ TlQ4X1BUUk1PREUsIEJUX1ZPSUQsIEJUX1BUUiwgQlRfVUlOVDgsCiAJCSAgICAgQlRfUFRS TU9ERSkKK0RFRl9GVU5DVElPTl9UWVBFXzMgKEJUX0ZOX1BUUk1PREVfUFRSTU9ERV9JTlRf UFRSLCBCVF9QVFJNT0RFLCBCVF9QVFJNT0RFLAorCQkgICAgIEJUX0lOVCwgQlRfUFRSKQog CiBERUZfRlVOQ1RJT05fVFlQRV80IChCVF9GTl9TSVpFX0NPTlNUX1BUUl9TSVpFX1NJWkVf RklMRVBUUiwKIAkJICAgICBCVF9TSVpFLCBCVF9DT05TVF9QVFIsIEJUX1NJWkUsIEJUX1NJ WkUsIEJUX0ZJTEVQVFIpCmRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1vbXAuY2MgYi9n Y2MvYy1mYW1pbHkvYy1vbXAuY2MKaW5kZXggNzc3Y2RjNjU1NzIuLjUwNjZlMTM3Y2Y0IDEw MDY0NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1vbXAuY2MKKysrIGIvZ2NjL2MtZmFtaWx5L2Mt b21wLmNjCkBAIC0xODcwLDYgKzE4NzAsNyBAQCBjX29tcF9zcGxpdF9jbGF1c2VzIChsb2Nh dGlvbl90IGxvYywgZW51bSB0cmVlX2NvZGUgY29kZSwKIAljYXNlIE9NUF9DTEFVU0VfSEFT X0RFVklDRV9BRERSOgogCWNhc2UgT01QX0NMQVVTRV9ERUZBVUxUTUFQOgogCWNhc2UgT01Q X0NMQVVTRV9ERVBFTkQ6CisJY2FzZSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUzoKIAkg IHMgPSBDX09NUF9DTEFVU0VfU1BMSVRfVEFSR0VUOwogCSAgYnJlYWs7CiAJY2FzZSBPTVBf Q0xBVVNFX05VTV9URUFNUzoKZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLXByYWdtYS5o IGIvZ2NjL2MtZmFtaWx5L2MtcHJhZ21hLmgKaW5kZXggNTQ4NjRjMmVjNDEuLjdmODk0NGY4 MWQ2IDEwMDY0NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1wcmFnbWEuaAorKysgYi9nY2MvYy1m YW1pbHkvYy1wcmFnbWEuaApAQCAtMTU0LDYgKzE1NCw3IEBAIGVudW0gcHJhZ21hX29tcF9j bGF1c2UgewogICBQUkFHTUFfT01QX0NMQVVTRV9VTlRJRUQsCiAgIFBSQUdNQV9PTVBfQ0xB VVNFX1VTRV9ERVZJQ0VfUFRSLAogICBQUkFHTUFfT01QX0NMQVVTRV9VU0VfREVWSUNFX0FE RFIsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUywKIAogICAvKiBDbGF1 c2VzIGZvciBPcGVuQUNDLiAgKi8KICAgUFJBR01BX09BQ0NfQ0xBVVNFX0FTWU5DLApkaWZm IC0tZ2l0IGEvZ2NjL2MvYy1wYXJzZXIuY2MgYi9nY2MvYy9jLXBhcnNlci5jYwppbmRleCAx MjlkZDcyN2VmMy4uYmJkZWM5Mjc4MGIgMTAwNjQ0Ci0tLSBhL2djYy9jL2MtcGFyc2VyLmNj CisrKyBiL2djYy9jL2MtcGFyc2VyLmNjCkBAIC0xMjkwNyw2ICsxMjkwNyw4IEBAIGNfcGFy c2VyX29tcF9jbGF1c2VfbmFtZSAoY19wYXJzZXIgKnBhcnNlcikKIAkgICAgcmVzdWx0ID0g UFJBR01BX09NUF9DTEFVU0VfVVNFX0RFVklDRV9BRERSOwogCSAgZWxzZSBpZiAoIXN0cmNt cCAoInVzZV9kZXZpY2VfcHRyIiwgcCkpCiAJICAgIHJlc3VsdCA9IFBSQUdNQV9PTVBfQ0xB VVNFX1VTRV9ERVZJQ0VfUFRSOworCSAgZWxzZSBpZiAoIXN0cmNtcCAoInVzZXNfYWxsb2Nh dG9ycyIsIHApKQorCSAgICByZXN1bHQgPSBQUkFHTUFfT01QX0NMQVVTRV9VU0VTX0FMTE9D QVRPUlM7CiAJICBicmVhazsKIAljYXNlICd2JzoKIAkgIGlmICghc3RyY21wICgidmVjdG9y IiwgcCkpCkBAIC0xNTYyNCw2ICsxNTYyNiwyMzMgQEAgY19wYXJzZXJfb21wX2NsYXVzZV9h bGxvY2F0ZSAoY19wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0KQogICByZXR1cm4gbmw7CiB9 CiAKKy8qIE9wZW5NUCA1LjI6CisgICB1c2VzX2FsbG9jYXRvcnMgKCBhbGxvY2F0b3ItbGlz dCApCisKKyAgIGFsbG9jYXRvci1saXN0OgorICAgYWxsb2NhdG9yCisgICBhbGxvY2F0b3Ig LCBhbGxvY2F0b3ItbGlzdAorICAgYWxsb2NhdG9yICggdHJhaXRzLWFycmF5ICkKKyAgIGFs bG9jYXRvciAoIHRyYWl0cy1hcnJheSApICwgYWxsb2NhdG9yLWxpc3QKKworICAgdXNlc19h bGxvY2F0b3JzICggbW9kaWZpZXIgOiBhbGxvY2F0b3IgKQorICAgdXNlc19hbGxvY2F0b3Jz ICggbW9kaWZpZXIgLCBtb2RpZmllciA6IGFsbG9jYXRvciApCisKKyAgIG1vZGlmaWVyOgor ICAgdHJhaXRzICggdHJhaXRzLWFycmF5ICkKKyAgIG1lbXNwYWNlICggbWVtLXNwYWNlLWhh bmRsZSApICAqLworCitzdGF0aWMgdHJlZQorY19wYXJzZXJfb21wX2NsYXVzZV91c2VzX2Fs bG9jYXRvcnMgKGNfcGFyc2VyICpwYXJzZXIsIHRyZWUgbGlzdCkKK3sKKyAgbG9jYXRpb25f dCBjbGF1c2VfbG9jID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+bG9jYXRpb247 CisgIHRyZWUgdCA9IE5VTExfVFJFRSwgbmwgPSBsaXN0OworICBtYXRjaGluZ19wYXJlbnMg cGFyZW5zOworICBpZiAoIXBhcmVucy5yZXF1aXJlX29wZW4gKHBhcnNlcikpCisgICAgcmV0 dXJuIGxpc3Q7CisKKyAgYm9vbCBoYXNfbW9kaWZpZXJzID0gZmFsc2U7CisgIHRyZWUgbWVt c3BhY2VfZXhwciA9IE5VTExfVFJFRTsKKyAgdHJlZSB0cmFpdHNfdmFyID0gTlVMTF9UUkVF OworCisgIGlmIChjX3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQUF9OQU1FKSkK KyAgICB7CisgICAgICBjX3Rva2VuICp0b2sgPSBjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJz ZXIpOworICAgICAgY29uc3QgY2hhciAqcCA9IElERU5USUZJRVJfUE9JTlRFUiAodG9rLT52 YWx1ZSk7CisKKyAgICAgIGlmIChzdHJjbXAgKCJ0cmFpdHMiLCBwKSA9PSAwIHx8IHN0cmNt cCAoIm1lbXNwYWNlIiwgcCkgPT0gMCkKKwl7CisJICBoYXNfbW9kaWZpZXJzID0gdHJ1ZTsK KwkgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisJICBtYXRjaGluZ19wYXJl bnMgcGFyZW5zMjs7CisJICBwYXJlbnMyLnJlcXVpcmVfb3BlbiAocGFyc2VyKTsKKworCSAg aWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX05BTUUpCisJICAgICAg JiYgKGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmlkX2tpbmQgPT0gQ19JRF9JRAor CQkgIHx8IGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmlkX2tpbmQgPT0gQ19JRF9U WVBFTkFNRSkpCisJICAgIHsKKwkgICAgICB0b2sgPSBjX3BhcnNlcl9wZWVrX3Rva2VuIChw YXJzZXIpOworCSAgICAgIHQgPSBsb29rdXBfbmFtZSAodG9rLT52YWx1ZSk7CisKKwkgICAg ICBpZiAodCA9PSBOVUxMX1RSRUUpCisJCXsKKwkJICB1bmRlY2xhcmVkX3ZhcmlhYmxlICh0 b2stPmxvY2F0aW9uLCB0b2stPnZhbHVlKTsKKwkJICB0ID0gZXJyb3JfbWFya19ub2RlOwor CQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYgKHN0cmNtcCAoIm1lbXNwYWNlIiwgcCkg PT0gMCkKKwkJICAgIG1lbXNwYWNlX2V4cHIgPSB0OworCQkgIGVsc2UKKwkJICAgIHRyYWl0 c192YXIgPSB0OworCQl9CisJICAgICAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2Vy KTsKKwkgICAgfQorCisJICBpZiAoIXBhcmVuczIucmVxdWlyZV9jbG9zZSAocGFyc2VyKSkK KwkgICAgeworCSAgICAgIHBhcmVucy5za2lwX3VudGlsX2ZvdW5kX2Nsb3NlIChwYXJzZXIp OworCSAgICAgIHJldHVybiBsaXN0OworCSAgICB9CisKKwkgIGlmIChjX3BhcnNlcl9uZXh0 X3Rva2VuX2lzIChwYXJzZXIsIENQUF9DT01NQSkpCisJICAgIHsKKwkgICAgICBjX3BhcnNl cl9jb25zdW1lX3Rva2VuIChwYXJzZXIpOworCSAgICAgIHRvayA9IGNfcGFyc2VyX3BlZWtf dG9rZW4gKHBhcnNlcik7CisJICAgICAgY29uc3QgY2hhciAqcSA9ICIiOworCSAgICAgIGlm IChjX3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQUF9OQU1FKSkKKwkJcSA9IElE RU5USUZJRVJfUE9JTlRFUiAodG9rLT52YWx1ZSk7CisJICAgICAgaWYgKHN0cmNtcCAocSwg Im1lbXNwYWNlIikgIT0gMCAmJiBzdHJjbXAgKHEsICJ0cmFpdHMiKSAhPSAwKQorCQl7CisJ CSAgY19wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4cGVjdGVkICU8bWVtc3BhY2UlPiBvciAl PHRyYWl0cyU+Iik7CisJCSAgcGFyZW5zLnNraXBfdW50aWxfZm91bmRfY2xvc2UgKHBhcnNl cik7CisJCSAgcmV0dXJuIGxpc3Q7CisJCX0KKwkgICAgICBlbHNlIGlmIChzdHJjbXAgKHAs IHEpID09IDApCisJCXsKKwkJICBlcnJvcl9hdCAodG9rLT5sb2NhdGlvbiwgImR1cGxpY2F0 ZSAlcXMgbW9kaWZpZXIiLCBwKTsKKwkJICBwYXJlbnMuc2tpcF91bnRpbF9mb3VuZF9jbG9z ZSAocGFyc2VyKTsKKwkJICByZXR1cm4gbGlzdDsKKwkJfQorCSAgICAgIGNfcGFyc2VyX2Nv bnN1bWVfdG9rZW4gKHBhcnNlcik7CisJICAgICAgaWYgKCFwYXJlbnMyLnJlcXVpcmVfb3Bl biAocGFyc2VyKSkKKwkJeworCQkgIHBhcmVucy5za2lwX3VudGlsX2ZvdW5kX2Nsb3NlIChw YXJzZXIpOworCQkgIHJldHVybiBsaXN0OworCQl9CisKKwkgICAgICBpZiAoY19wYXJzZXJf bmV4dF90b2tlbl9pcyAocGFyc2VyLCBDUFBfTkFNRSkKKwkJICAmJiAoY19wYXJzZXJfcGVl a190b2tlbiAocGFyc2VyKS0+aWRfa2luZCA9PSBDX0lEX0lECisJCSAgICAgIHx8IGNfcGFy c2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmlkX2tpbmQgPT0gQ19JRF9UWVBFTkFNRSkpCisJ CXsKKwkJICB0b2sgPSBjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpOworCQkgIHRyZWUg dCA9IGxvb2t1cF9uYW1lICh0b2stPnZhbHVlKTsKKwkJICBpZiAodCA9PSBOVUxMX1RSRUUp CisJCSAgICB7CisJCSAgICAgIHVuZGVjbGFyZWRfdmFyaWFibGUgKHRvay0+bG9jYXRpb24s IHRvay0+dmFsdWUpOworCQkgICAgICB0ID0gZXJyb3JfbWFya19ub2RlOworCQkgICAgfQor CQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgaWYgKHN0cmNtcCAoIm1lbXNwYWNlIiwgcSkg PT0gMCkKKwkJCW1lbXNwYWNlX2V4cHIgPSB0OworCQkgICAgICBlbHNlCisJCQl0cmFpdHNf dmFyID0gdDsKKwkJICAgIH0KKwkJICBjX3BhcnNlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIp OworCQl9CisJICAgICAgcGFyZW5zMi5za2lwX3VudGlsX2ZvdW5kX2Nsb3NlIChwYXJzZXIp OworCSAgICAgIGlmICh0ID09IGVycm9yX21hcmtfbm9kZSkKKwkJcmV0dXJuIGxpc3Q7CisJ ICAgIH0KKwkgIGhhc19tb2RpZmllcnMgPSB0cnVlOworCX0KKyAgICB9CisKKyAgaWYgKGhh c19tb2RpZmllcnMpCisgICAgeworICAgICAgaWYgKCFjX3BhcnNlcl9yZXF1aXJlIChwYXJz ZXIsIENQUF9DT0xPTiwgImV4cGVjdGVkICU8OiU+IikpCisJeworCSAgcGFyZW5zLnNraXBf dW50aWxfZm91bmRfY2xvc2UgKHBhcnNlcik7CisJICByZXR1cm4gbGlzdDsKKwl9CisKKyAg ICAgIGlmIChjX3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQUF9OQU1FKQorCSAg JiYgY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+aWRfa2luZCA9PSBDX0lEX0lEKQor CXsKKwkgIHRyZWUgdCA9IGxvb2t1cF9uYW1lIChjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJz ZXIpLT52YWx1ZSk7CisKKwkgIGlmICh0ID09IE5VTExfVFJFRSkKKwkgICAgeworCSAgICAg IHVuZGVjbGFyZWRfdmFyaWFibGUgKGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmxv Y2F0aW9uLAorCQkJCSAgIGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPnZhbHVlKTsK KwkgICAgICB0ID0gZXJyb3JfbWFya19ub2RlOworCSAgICB9CisJICBlbHNlIGlmICh0ICE9 IGVycm9yX21hcmtfbm9kZSkKKwkgICAgeworCSAgICAgIHRyZWUgYyA9IGJ1aWxkX29tcF9j bGF1c2UgKGNsYXVzZV9sb2MsCisJCQkJCSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUyk7 CisJICAgICAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChjKSA9IHQ7 CisJICAgICAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpID0gbWVt c3BhY2VfZXhwcjsKKwkgICAgICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19UUkFJVFMg KGMpID0gdHJhaXRzX3ZhcjsKKwkgICAgICBPTVBfQ0xBVVNFX0NIQUlOIChjKSA9IGxpc3Q7 CisKKwkgICAgICBubCA9IGM7CisJICAgIH0KKwkgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4g KHBhcnNlcik7CisKKwkgIGlmIChjX3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQ UF9PUEVOX1BBUkVOKSkKKwkgICAgY19wYXJzZXJfZXJyb3IgKHBhcnNlciwgIm1vZGlmaWVy cyBjYW5ub3QgYmUgdXNlZCB3aXRoICIKKwkJCSAgICAibGVnYWN5IGFycmF5IHN5bnRheCIp OworCSAgZWxzZSBpZiAoY19wYXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLCBDUFBfQ09N TUEpKQorCSAgICBjX3BhcnNlcl9lcnJvciAocGFyc2VyLCAibW9kaWZpZXJzIGNhbiBvbmx5 IGJlIHVzZWQgd2l0aCAiCisJCQkgICAgImEgc2luZ2xlIGFsbG9jYXRvciBpbiAlPHVzZXNf YWxsb2NhdG9ycyU+ICIKKwkJCSAgICAiY2xhdXNlIik7CisJfQorICAgICAgZWxzZQorCWNf cGFyc2VyX2Vycm9yIChwYXJzZXIsICJleHBlY3RlZCBpZGVudGlmaWVyIik7CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgd2hpbGUgKHRydWUpCisJeworCSAgaWYgKGNfcGFyc2Vy X25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX05BTUUpCisJICAgICAgJiYgY19wYXJzZXJf cGVla190b2tlbiAocGFyc2VyKS0+aWRfa2luZCA9PSBDX0lEX0lEKQorCSAgICB7CisJICAg ICAgY190b2tlbiAqdG9rID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKTsKKwkgICAg ICB0cmVlIHQgPSBsb29rdXBfbmFtZSAodG9rLT52YWx1ZSk7CisKKwkgICAgICBpZiAodCA9 PSBOVUxMX1RSRUUpCisJCXsKKwkJICB1bmRlY2xhcmVkX3ZhcmlhYmxlICh0b2stPmxvY2F0 aW9uLCB0b2stPnZhbHVlKTsKKwkJICB0ID0gZXJyb3JfbWFya19ub2RlOworCQl9CisJICAg ICAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKKworCSAgICAgIHRyYWl0c192 YXIgPSBOVUxMX1RSRUU7CisJICAgICAgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBh cnNlciwgQ1BQX09QRU5fUEFSRU4pKQorCQl7CisJCSAgbWF0Y2hpbmdfcGFyZW5zIHBhcmVu czI7CisJCSAgcGFyZW5zMi5jb25zdW1lX29wZW4gKHBhcnNlcik7CisJCSAgaWYgKGNfcGFy c2VyX25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX05BTUUpCisJCSAgICAgICYmIGNfcGFy c2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmlkX2tpbmQgPT0gQ19JRF9JRCkKKwkJICAgIHsK KwkJICAgICAgdG9rID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKTsKKwkJICAgICAg dHJhaXRzX3ZhciA9IGxvb2t1cF9uYW1lICh0b2stPnZhbHVlKTsKKwkJICAgICAgaWYgKHRy YWl0c192YXIgPT0gTlVMTF9UUkVFKQorCQkJeworCQkJICB1bmRlY2xhcmVkX3ZhcmlhYmxl ICh0b2stPmxvY2F0aW9uLCB0b2stPnZhbHVlKTsKKwkJCSAgdHJhaXRzX3ZhciA9IGVycm9y X21hcmtfbm9kZTsKKwkJCX0KKwkJICAgICAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFy c2VyKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBjX3BhcnNlcl9lcnJvciAocGFyc2Vy LCAiZXhwZWN0ZWQgaWRlbnRpZmllciIpOworCQkgIHBhcmVuczIucmVxdWlyZV9jbG9zZSAo cGFyc2VyKTsKKwkJfQorCisJICAgICAgaWYgKHQgIT0gZXJyb3JfbWFya19ub2RlICYmIHRy YWl0c192YXIgIT0gZXJyb3JfbWFya19ub2RlKQorCQl7CisJCSAgdHJlZSBjID0gYnVpbGRf b21wX2NsYXVzZSAoY2xhdXNlX2xvYywKKwkJCQkJICAgICBPTVBfQ0xBVVNFX1VTRVNfQUxM T0NBVE9SUyk7CisJCSAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChj KSA9IHQ7CisJCSAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpID0g TlVMTF9UUkVFOworCQkgIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoYykg PSB0cmFpdHNfdmFyOworCQkgIE9NUF9DTEFVU0VfQ0hBSU4gKGMpID0gbmw7CisJCSAgbmwg PSBjOworCQl9CisJICAgIH0KKworCSAgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXNfbm90 IChwYXJzZXIsIENQUF9DT01NQSkpCisJICAgIGJyZWFrOworCSAgY19wYXJzZXJfY29uc3Vt ZV90b2tlbiAocGFyc2VyKTsKKwl9CisgICAgfQorCisgIHBhcmVucy5za2lwX3VudGlsX2Zv dW5kX2Nsb3NlIChwYXJzZXIpOworICByZXR1cm4gbmw7Cit9CisKIC8qIE9wZW5NUCA0LjA6 CiAgICBsaW5lYXIgKCB2YXJpYWJsZS1saXN0ICkKICAgIGxpbmVhciAoIHZhcmlhYmxlLWxp c3QgOiBleHByZXNzaW9uICkKQEAgLTE3MDUwLDYgKzE3Mjc5LDEwIEBAIGNfcGFyc2VyX29t cF9hbGxfY2xhdXNlcyAoY19wYXJzZXIgKnBhcnNlciwgb21wX2NsYXVzZV9tYXNrIG1hc2ss CiAJICBjbGF1c2VzID0gY19wYXJzZXJfb21wX2NsYXVzZV9hbGxvY2F0ZSAocGFyc2VyLCBj bGF1c2VzKTsKIAkgIGNfbmFtZSA9ICJhbGxvY2F0ZSI7CiAJICBicmVhazsKKwljYXNlIFBS QUdNQV9PTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUzoKKwkgIGNsYXVzZXMgPSBjX3BhcnNl cl9vbXBfY2xhdXNlX3VzZXNfYWxsb2NhdG9ycyAocGFyc2VyLCBjbGF1c2VzKTsKKwkgIGNf bmFtZSA9ICJ1c2VzX2FsbG9jYXRvcnMiOworCSAgYnJlYWs7CiAJY2FzZSBQUkFHTUFfT01Q X0NMQVVTRV9MSU5FQVI6IAogCSAgY2xhdXNlcyA9IGNfcGFyc2VyX29tcF9jbGF1c2VfbGlu ZWFyIChwYXJzZXIsIGNsYXVzZXMpOyAKIAkgIGNfbmFtZSA9ICJsaW5lYXIiOwpAQCAtMjEw NjEsNyArMjEyOTQsOCBAQCBjX3BhcnNlcl9vbXBfdGFyZ2V0X2V4aXRfZGF0YSAobG9jYXRp b25fdCBsb2MsIGNfcGFyc2VyICpwYXJzZXIsCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwg UFJBR01BX09NUF9DTEFVU0VfSU5fUkVEVUNUSU9OKQlcCiAJfCAoT01QX0NMQVVTRV9NQVNL XzEgPDwgUFJBR01BX09NUF9DTEFVU0VfVEhSRUFEX0xJTUlUKQlcCiAJfCAoT01QX0NMQVVT RV9NQVNLXzEgPDwgUFJBR01BX09NUF9DTEFVU0VfSVNfREVWSUNFX1BUUilcCi0JfCAoT01Q X0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09NUF9DTEFVU0VfSEFTX0RFVklDRV9BRERSKSkK Kwl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT01QX0NMQVVTRV9IQVNfREVWSUNF X0FERFIpXAorCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PTVBfQ0xBVVNFX1VT RVNfQUxMT0NBVE9SUykpCiAKIHN0YXRpYyBib29sCiBjX3BhcnNlcl9vbXBfdGFyZ2V0IChj X3BhcnNlciAqcGFyc2VyLCBlbnVtIHByYWdtYV9jb250ZXh0IGNvbnRleHQsIGJvb2wgKmlm X3ApCmRpZmYgLS1naXQgYS9nY2MvYy9jLXR5cGVjay5jYyBiL2djYy9jL2MtdHlwZWNrLmNj CmluZGV4IGUxMzAxOTZhM2E3Li4wZTFmMzNiNjU1ZCAxMDA2NDQKLS0tIGEvZ2NjL2MvYy10 eXBlY2suY2MKKysrIGIvZ2NjL2MvYy10eXBlY2suY2MKQEAgLTE0NzYzLDYgKzE0NzYzLDEw MiBAQCBjX2ZpbmlzaF9vbXBfY2xhdXNlcyAodHJlZSBjbGF1c2VzLCBlbnVtIGNfb21wX3Jl Z2lvbl90eXBlIG9ydCkKIAkgICAgfQogCSAgYnJlYWs7CiAKKwljYXNlIE9NUF9DTEFVU0Vf VVNFU19BTExPQ0FUT1JTOgorCSAgdCA9IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX0FM TE9DQVRPUiAoYyk7CisJICBpZiAoYml0bWFwX2JpdF9wICgmZ2VuZXJpY19oZWFkLCBERUNM X1VJRCAodCkpCisJICAgICAgfHwgYml0bWFwX2JpdF9wICgmbWFwX2hlYWQsIERFQ0xfVUlE ICh0KSkKKwkgICAgICB8fCBiaXRtYXBfYml0X3AgKCZmaXJzdHByaXZhdGVfaGVhZCwgREVD TF9VSUQgKHQpKQorCSAgICAgIHx8IGJpdG1hcF9iaXRfcCAoJmxhc3Rwcml2YXRlX2hlYWQs IERFQ0xfVUlEICh0KSkpCisJICAgIHsKKwkgICAgICBlcnJvcl9hdCAoT01QX0NMQVVTRV9M T0NBVElPTiAoYyksCisJCQkiJXFFIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gZGF0YSBj bGF1c2VzIiwgdCk7CisJICAgICAgcmVtb3ZlID0gdHJ1ZTsKKwkgICAgfQorCSAgZWxzZQor CSAgICBiaXRtYXBfc2V0X2JpdCAoJmdlbmVyaWNfaGVhZCwgREVDTF9VSUQgKHQpKTsKKwkg IGlmIChUUkVFX0NPREUgKFRSRUVfVFlQRSAodCkpICE9IEVOVU1FUkFMX1RZUEUKKwkgICAg ICB8fCBzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUiAoVFlQRV9JREVOVElGSUVSIChUUkVF X1RZUEUgKHQpKSksCisJCQkgIm9tcF9hbGxvY2F0b3JfaGFuZGxlX3QiKSAhPSAwKQorCSAg ICB7CisJICAgICAgZXJyb3JfYXQgKE9NUF9DTEFVU0VfTE9DQVRJT04gKGMpLAorCQkJImFs bG9jYXRvciBtdXN0IGJlIG9mICU8b21wX2FsbG9jYXRvcl9oYW5kbGVfdCU+IHR5cGUiKTsK KwkgICAgICByZW1vdmUgPSB0cnVlOworCSAgICB9CisJICBpZiAoVFJFRV9DT0RFICh0KSA9 PSBDT05TVF9ERUNMKQorCSAgICB7CisJICAgICAgaWYgKE9NUF9DTEFVU0VfVVNFU19BTExP Q0FUT1JTX01FTVNQQUNFIChjKQorCQkgIHx8IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JT X1RSQUlUUyAoYykpCisJCWVycm9yX2F0IChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwKKwkJ CSAgIm1vZGlmaWVycyBjYW5ub3QgYmUgdXNlZCB3aXRoIHByZS1kZWZpbmVkICIKKwkJCSAg ImFsbG9jYXRvcnMiKTsKKworCSAgICAgIC8qIEN1cnJlbnRseSBmb3IgcHJlLWRlZmluZWQg YWxsb2NhdG9ycyBpbiBsaWJnb21wLCB3ZSBkbyBub3QKKwkJIHJlcXVpcmUgYWRkaXRpb25h bCBpbml0L2ZpbmkgaW5zaWRlIHRhcmdldCByZWdpb25zLCBzbyBkaXNjYXJkCisJCSBzdWNo IGNsYXVzZXMuICAqLworCSAgICAgIHJlbW92ZSA9IHRydWU7CisJICAgIH0KKwkgIHQgPSBP TVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19NRU1TUEFDRSAoYyk7CisJICBpZiAodCAhPSBO VUxMX1RSRUUKKwkgICAgICAmJiAoVFJFRV9DT0RFICh0KSAhPSBDT05TVF9ERUNMCisJCSAg fHwgVFJFRV9DT0RFIChUUkVFX1RZUEUgKHQpKSAhPSBFTlVNRVJBTF9UWVBFCisJCSAgfHwg c3RyY21wIChJREVOVElGSUVSX1BPSU5URVIgKFRZUEVfSURFTlRJRklFUiAoVFJFRV9UWVBF ICh0KSkpLAorCQkJICAgICAib21wX21lbXNwYWNlX2hhbmRsZV90IikgIT0gMCkpCisJICAg IHsKKwkgICAgICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksICJtZW1zcGFj ZSBtb2RpZmllciBtdXN0IGJlICIKKwkJCSJjb25zdGFudCBlbnVtIG9mICU8b21wX21lbXNw YWNlX2hhbmRsZV90JT4gdHlwZSIpOworCSAgICAgIHJlbW92ZSA9IHRydWU7CisJICAgIH0K KwkgIHQgPSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19UUkFJVFMgKGMpOworCSAgaWYg KHQgIT0gTlVMTF9UUkVFKQorCSAgICB7CisJICAgICAgYm9vbCB0eXBlX2VyciA9IGZhbHNl OworCisJICAgICAgaWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFICh0KSkgIT0gQVJSQVlfVFlQ RSkKKwkJdHlwZV9lcnIgPSB0cnVlOworCSAgICAgIGVsc2UKKwkJeworCQkgIHRyZWUgZWxl bV90ID0gVFJFRV9UWVBFIChUUkVFX1RZUEUgKHQpKTsKKwkJICBpZiAoVFJFRV9DT0RFIChl bGVtX3QpICE9IFJFQ09SRF9UWVBFCisJCSAgICAgIHx8IHN0cmNtcCAoSURFTlRJRklFUl9Q T0lOVEVSIChUWVBFX0lERU5USUZJRVIgKGVsZW1fdCkpLAorCQkJCSAib21wX2FsbG9jdHJh aXRfdCIpICE9IDAKKwkJICAgICAgfHwgIVRZUEVfUkVBRE9OTFkgKGVsZW1fdCkpCisJCSAg ICB0eXBlX2VyciA9IHRydWU7CisJCX0KKwkgICAgICBpZiAodHlwZV9lcnIpCisJCXsKKwkJ ICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksICJ0cmFpdHMgYXJyYXkgbXVz dCBiZSBvZiAiCisJCQkgICAgIiU8Y29uc3Qgb21wX2FsbG9jdHJhaXRfdCBbXSU+IHR5cGUi KTsKKwkJICByZW1vdmUgPSB0cnVlOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgdHJl ZSBjc3RfdmFsID0gZGVjbF9jb25zdGFudF92YWx1ZV8xICh0LCB0cnVlKTsKKwkJICBpZiAo Y3N0X3ZhbCA9PSB0KQorCQkgICAgeworCQkgICAgICBlcnJvcl9hdCAoT01QX0NMQVVTRV9M T0NBVElPTiAoYyksICJ0cmFpdHMgYXJyYXkgbXVzdCBiZSAiCisJCQkJIm9mIGNvbnN0YW50 IHZhbHVlcyIpOworCisJCSAgICAgIHJlbW92ZSA9IHRydWU7CisJCSAgICB9CisJCX0KKwkg ICAgfQorCisJICBpZiAocmVtb3ZlKQorCSAgICBicmVhazsKKwkgIGVsc2UKKwkgICAgewor CSAgICAgIC8qIENyZWF0ZSBhIHByaXZhdGUgY2xhdXNlIGZvciB0aGUgYWxsb2NhdG9yIHZh cmlhYmxlLCBwbGFjZWQKKwkJIHByaW9yIHRvIGN1cnJlbnQgdXNlc19hbGxvY2F0b3JzIGNs YXVzZS4gICovCisJICAgICAgdHJlZSBuYyA9IGJ1aWxkX29tcF9jbGF1c2UgKE9NUF9DTEFV U0VfTE9DQVRJT04gKGMpLAorCQkJCQkgIE9NUF9DTEFVU0VfUFJJVkFURSk7CisJICAgICAg T01QX0NMQVVTRV9ERUNMIChuYykgPSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19BTExP Q0FUT1IgKGMpOworCSAgICAgIE9NUF9DTEFVU0VfQ0hBSU4gKG5jKSA9IGM7CisJICAgICAg KnBjID0gbmM7CisKKwkgICAgICBwYyA9ICZPTVBfQ0xBVVNFX0NIQUlOIChjKTsKKwkgICAg ICBjb250aW51ZTsKKwkgICAgfQorCiAJY2FzZSBPTVBfQ0xBVVNFX0RFUEVORDoKIAkgIHQg PSBPTVBfQ0xBVVNFX0RFQ0wgKGMpOwogCSAgaWYgKHQgPT0gTlVMTF9UUkVFKQpkaWZmIC0t Z2l0IGEvZ2NjL2NwL3BhcnNlci5jYyBiL2djYy9jcC9wYXJzZXIuY2MKaW5kZXggMjIzNWRh MTBjN2MuLmUwNDFiYzY2OWE5IDEwMDY0NAotLS0gYS9nY2MvY3AvcGFyc2VyLmNjCisrKyBi L2djYy9jcC9wYXJzZXIuY2MKQEAgLTM2NDkwLDYgKzM2NDkwLDggQEAgY3BfcGFyc2VyX29t cF9jbGF1c2VfbmFtZSAoY3BfcGFyc2VyICpwYXJzZXIpCiAJICAgIHJlc3VsdCA9IFBSQUdN QV9PTVBfQ0xBVVNFX1VTRV9ERVZJQ0VfQUREUjsKIAkgIGVsc2UgaWYgKCFzdHJjbXAgKCJ1 c2VfZGV2aWNlX3B0ciIsIHApKQogCSAgICByZXN1bHQgPSBQUkFHTUFfT01QX0NMQVVTRV9V U0VfREVWSUNFX1BUUjsKKwkgIGVsc2UgaWYgKCFzdHJjbXAgKCJ1c2VzX2FsbG9jYXRvcnMi LCBwKSkKKwkgICAgcmVzdWx0ID0gUFJBR01BX09NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JT OwogCSAgYnJlYWs7CiAJY2FzZSAndic6CiAJICBpZiAoIXN0cmNtcCAoInZlY3RvciIsIHAp KQpAQCAtMzg3MzMsNiArMzg3MzUsMjQ3IEBAIGNwX3BhcnNlcl9vbXBfY2xhdXNlX2FsbG9j YXRlIChjcF9wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0KQogICByZXR1cm4gbmxpc3Q7CiB9 CiAKKy8qIE9wZW5NUCA1LjI6CisgICB1c2VzX2FsbG9jYXRvcnMgKCBhbGxvY2F0b3ItbGlz dCApCisKKyAgIGFsbG9jYXRvci1saXN0OgorICAgYWxsb2NhdG9yCisgICBhbGxvY2F0b3Ig LCBhbGxvY2F0b3ItbGlzdAorICAgYWxsb2NhdG9yICggdHJhaXRzLWFycmF5ICkKKyAgIGFs bG9jYXRvciAoIHRyYWl0cy1hcnJheSApICwgYWxsb2NhdG9yLWxpc3QKKworICAgdXNlc19h bGxvY2F0b3JzICggbW9kaWZpZXIgOiBhbGxvY2F0b3IgKQorICAgdXNlc19hbGxvY2F0b3Jz ICggbW9kaWZpZXIgLCBtb2RpZmllciA6IGFsbG9jYXRvciApCisKKyAgIG1vZGlmaWVyOgor ICAgdHJhaXRzICggdHJhaXRzLWFycmF5ICkKKyAgIG1lbXNwYWNlICggbWVtLXNwYWNlLWhh bmRsZSApICAqLworCitzdGF0aWMgdHJlZQorY3BfcGFyc2VyX29tcF9jbGF1c2VfdXNlc19h bGxvY2F0b3JzIChjcF9wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0KQoreworICBsb2NhdGlv bl90IGNsYXVzZV9sb2MKKyAgICA9IGNwX2xleGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4 ZXIpLT5sb2NhdGlvbjsKKyAgdHJlZSB0ID0gTlVMTF9UUkVFLCBubCA9IGxpc3Q7CisgIG1h dGNoaW5nX3BhcmVucyBwYXJlbnM7CisgIGlmICghcGFyZW5zLnJlcXVpcmVfb3BlbiAocGFy c2VyKSkKKyAgICByZXR1cm4gbGlzdDsKKworICBib29sIGhhc19tb2RpZmllcnMgPSBmYWxz ZTsKKyAgdHJlZSBtZW1zcGFjZV9leHByID0gTlVMTF9UUkVFOworICB0cmVlIHRyYWl0c192 YXIgPSBOVUxMX1RSRUU7CisKKyAgaWYgKGNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNl ci0+bGV4ZXIsIENQUF9OQU1FKSkKKyAgICB7CisgICAgICBjcF90b2tlbiAqdG9rID0gY3Bf bGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhlcik7CisgICAgICBjb25zdCBjaGFyICpw ID0gSURFTlRJRklFUl9QT0lOVEVSICh0b2stPnUudmFsdWUpOworCisgICAgICBpZiAoc3Ry Y21wICgidHJhaXRzIiwgcCkgPT0gMCB8fCBzdHJjbXAgKCJtZW1zcGFjZSIsIHApID09IDAp CisJeworCSAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5sZXhlcik7CisJICBt YXRjaGluZ19wYXJlbnMgcGFyZW5zMjs7CisJICBwYXJlbnMyLnJlcXVpcmVfb3BlbiAocGFy c2VyKTsKKworCSAgaWYgKGNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+bGV4ZXIs IENQUF9OQU1FKSkKKwkgICAgeworCSAgICAgIHRvayA9IGNwX2xleGVyX3BlZWtfdG9rZW4g KHBhcnNlci0+bGV4ZXIpOworCSAgICAgIHRyZWUgaWQgPSB0b2stPnUudmFsdWU7CisKKwkg ICAgICB0ID0gY3BfcGFyc2VyX2xvb2t1cF9uYW1lX3NpbXBsZSAocGFyc2VyLCBpZCwgdG9r LT5sb2NhdGlvbik7CisJICAgICAgaWYgKHQgPT0gZXJyb3JfbWFya19ub2RlKQorCQljcF9w YXJzZXJfbmFtZV9sb29rdXBfZXJyb3IgKHBhcnNlciwgaWQsIHQsIE5MRV9OVUxMLAorCQkJ CQkgICAgIHRvay0+bG9jYXRpb24pOworCSAgICAgIGVsc2UKKwkJeworCQkgIGlmIChzdHJj bXAgKCJtZW1zcGFjZSIsIHApID09IDApCisJCSAgICBtZW1zcGFjZV9leHByID0gdDsKKwkJ ICBlbHNlCisJCSAgICB0cmFpdHNfdmFyID0gdDsKKwkJfQorCSAgICAgIGNwX2xleGVyX2Nv bnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCSAgICB9CisKKwkgIGlmICghcGFyZW5z Mi5yZXF1aXJlX2Nsb3NlIChwYXJzZXIpKQorCSAgICB7CisJICAgICAgY3BfcGFyc2VyX3Nr aXBfdG9fY2xvc2luZ19wYXJlbnRoZXNpcyAocGFyc2VyLAorCQkJCQkJICAgICAvKnJlY292 ZXJpbmc9Ki90cnVlLAorCQkJCQkJICAgICAvKm9yX2NvbW1hPSovZmFsc2UsCisJCQkJCQkg ICAgIC8qY29uc3VtZV9wYXJlbj0qL3RydWUpOworCSAgICAgIHJldHVybiBsaXN0OworCSAg ICB9CisKKwkgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBD UFBfQ09NTUEpKQorCSAgICB7CisJICAgICAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFy c2VyLT5sZXhlcik7CisJICAgICAgdG9rID0gY3BfbGV4ZXJfcGVla190b2tlbiAocGFyc2Vy LT5sZXhlcik7CisJICAgICAgY29uc3QgY2hhciAqcSA9ICIiOworCisJICAgICAgaWYgKGNw X2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+bGV4ZXIsIENQUF9OQU1FKSkKKwkJcSA9 IElERU5USUZJRVJfUE9JTlRFUiAodG9rLT51LnZhbHVlKTsKKworCSAgICAgIGlmIChzdHJj bXAgKHEsICJtZW1zcGFjZSIpICE9IDAgJiYgc3RyY21wIChxLCAidHJhaXRzIikgIT0gMCkK KwkJeworCQkgIGNwX3BhcnNlcl9lcnJvciAocGFyc2VyLCAiZXhwZWN0ZWQgJTxtZW1zcGFj ZSU+IG9yICU8dHJhaXRzJT4iKTsKKwkJICBjcF9wYXJzZXJfc2tpcF90b19jbG9zaW5nX3Bh cmVudGhlc2lzIChwYXJzZXIsCisJCQkJCQkJIC8qcmVjb3ZlcmluZz0qL3RydWUsCisJCQkJ CQkJIC8qb3JfY29tbWE9Ki9mYWxzZSwKKwkJCQkJCQkgLypjb25zdW1lX3BhcmVuPSovdHJ1 ZSk7CisJCSAgcmV0dXJuIGxpc3Q7CisJCX0KKwkgICAgICBlbHNlIGlmIChzdHJjbXAgKHAs IHEpID09IDApCisJCXsKKwkJICBlcnJvcl9hdCAodG9rLT5sb2NhdGlvbiwgImR1cGxpY2F0 ZSAlcXMgbW9kaWZpZXIiLCBwKTsKKwkJICBjcF9wYXJzZXJfc2tpcF90b19jbG9zaW5nX3Bh cmVudGhlc2lzIChwYXJzZXIsCisJCQkJCQkJIC8qcmVjb3ZlcmluZz0qL3RydWUsCisJCQkJ CQkJIC8qb3JfY29tbWE9Ki9mYWxzZSwKKwkJCQkJCQkgLypjb25zdW1lX3BhcmVuPSovdHJ1 ZSk7CisJCSAgcmV0dXJuIGxpc3Q7CisJCX0KKwkgICAgICBjcF9sZXhlcl9jb25zdW1lX3Rv a2VuIChwYXJzZXItPmxleGVyKTsKKwkgICAgICBpZiAoIXBhcmVuczIucmVxdWlyZV9vcGVu IChwYXJzZXIpKQorCQl7CisJCSAgY3BfcGFyc2VyX3NraXBfdG9fY2xvc2luZ19wYXJlbnRo ZXNpcyAocGFyc2VyLAorCQkJCQkJCSAvKnJlY292ZXJpbmc9Ki90cnVlLAorCQkJCQkJCSAv Km9yX2NvbW1hPSovZmFsc2UsCisJCQkJCQkJIC8qY29uc3VtZV9wYXJlbj0qL3RydWUpOwor CQkgIHJldHVybiBsaXN0OworCQl9CisKKwkgICAgICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tl bl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX05BTUUpKQorCQl7CisJCSAgdG9rID0gY3BfbGV4 ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhlcik7CisJCSAgdHJlZSBpZCA9IHRvay0+dS52 YWx1ZTsKKworCQkgIHQgPSBjcF9wYXJzZXJfbG9va3VwX25hbWVfc2ltcGxlIChwYXJzZXIs IGlkLCB0b2stPmxvY2F0aW9uKTsKKwkJICBpZiAodCA9PSBlcnJvcl9tYXJrX25vZGUpCisJ CSAgICBjcF9wYXJzZXJfbmFtZV9sb29rdXBfZXJyb3IgKHBhcnNlciwgaWQsIHQsIE5MRV9O VUxMLAorCQkJCQkJIHRvay0+bG9jYXRpb24pOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAg ICAgaWYgKHN0cmNtcCAoIm1lbXNwYWNlIiwgcSkgPT0gMCkKKwkJCW1lbXNwYWNlX2V4cHIg PSB0OworCQkgICAgICBlbHNlCisJCQl0cmFpdHNfdmFyID0gdDsKKwkJICAgIH0KKwkJICBj cF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKwkJfQorCisJICAgICAg aWYgKHQgPT0gZXJyb3JfbWFya19ub2RlIHx8ICFwYXJlbnMucmVxdWlyZV9jbG9zZSAocGFy c2VyKSkKKwkJeworCQkgIGNwX3BhcnNlcl9za2lwX3RvX2Nsb3NpbmdfcGFyZW50aGVzaXMg KHBhcnNlciwKKwkJCQkJCQkgLypyZWNvdmVyaW5nPSovdHJ1ZSwKKwkJCQkJCQkgLypvcl9j b21tYT0qL2ZhbHNlLAorCQkJCQkJCSAvKmNvbnN1bWVfcGFyZW49Ki90cnVlKTsKKwkJICBy ZXR1cm4gbGlzdDsKKwkJfQorCSAgICB9CisJICBoYXNfbW9kaWZpZXJzID0gdHJ1ZTsKKwl9 CisgICAgfQorCisgIGlmIChoYXNfbW9kaWZpZXJzKQorICAgIHsKKyAgICAgIGlmICghY3Bf cGFyc2VyX3JlcXVpcmUgKHBhcnNlciwgQ1BQX0NPTE9OLCBSVF9DT0xPTikpCisJeworCSAg Y3BfcGFyc2VyX3NraXBfdG9fY2xvc2luZ19wYXJlbnRoZXNpcyAocGFyc2VyLCAvKnJlY292 ZXJpbmc9Ki90cnVlLAorCQkJCQkJIC8qb3JfY29tbWE9Ki9mYWxzZSwKKwkJCQkJCSAvKmNv bnN1bWVfcGFyZW49Ki90cnVlKTsKKwkgIHJldHVybiBsaXN0OworCX0KKworICAgICAgaWYg KGNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+bGV4ZXIsIENQUF9OQU1FKSkKKwl7 CisJICBjcF90b2tlbiAqdG9rID0gY3BfbGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhl cik7CisJICB0cmVlIGlkID0gdG9rLT51LnZhbHVlOworCSAgdHJlZSB0ID0gY3BfcGFyc2Vy X2xvb2t1cF9uYW1lX3NpbXBsZSAocGFyc2VyLCBpZCwgdG9rLT5sb2NhdGlvbik7CisKKwkg IGlmICh0ID09IGVycm9yX21hcmtfbm9kZSkKKwkgICAgY3BfcGFyc2VyX25hbWVfbG9va3Vw X2Vycm9yIChwYXJzZXIsIGlkLCB0LCBOTEVfTlVMTCwKKwkJCQkJIHRvay0+bG9jYXRpb24p OworCSAgZWxzZQorCSAgICB7CisJICAgICAgdHJlZSBjID0gYnVpbGRfb21wX2NsYXVzZSAo Y2xhdXNlX2xvYywKKwkJCQkJIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKTsKKwkgICAg ICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19BTExPQ0FUT1IgKGMpID0gdDsKKwkgICAg ICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19NRU1TUEFDRSAoYykgPSBtZW1zcGFjZV9l eHByOworCSAgICAgIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoYykgPSB0 cmFpdHNfdmFyOworCSAgICAgIE9NUF9DTEFVU0VfQ0hBSU4gKGMpID0gbGlzdDsKKworCSAg ICAgIG5sID0gYzsKKwkgICAgfQorCSAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2Vy LT5sZXhlcik7CisKKwkgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxl eGVyLCBDUFBfT1BFTl9QQVJFTikpCisJICAgIGNwX3BhcnNlcl9lcnJvciAocGFyc2VyLCAi bW9kaWZpZXJzIGNhbm5vdCBiZSB1c2VkIHdpdGggIgorCQkJICAgICAibGVnYWN5IGFycmF5 IHN5bnRheCIpOworCSAgZWxzZSBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2Vy LT5sZXhlciwgQ1BQX0NPTU1BKSkKKwkgICAgY3BfcGFyc2VyX2Vycm9yIChwYXJzZXIsICJt b2RpZmllcnMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoICIKKwkJCSAgICAgImEgc2luZ2xlIGFs bG9jYXRvciBpbiAlPHVzZXNfYWxsb2NhdG9ycyU+ICIKKwkJCSAgICAgImNsYXVzZSIpOwor CX0KKyAgICAgIGVsc2UKKwljcF9wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4cGVjdGVkIGlk ZW50aWZpZXIiKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB3aGlsZSAodHJ1ZSkK Kwl7CisJICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQ X05BTUUpKQorCSAgICB7CisJICAgICAgY3BfdG9rZW4gKnRvayA9IGNwX2xleGVyX3BlZWtf dG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCSAgICAgIHRyZWUgaWQgPSB0b2stPnUudmFsdWU7 CisJICAgICAgdHJlZSB0ID0gY3BfcGFyc2VyX2xvb2t1cF9uYW1lX3NpbXBsZSAocGFyc2Vy LCBpZCwgdG9rLT5sb2NhdGlvbik7CisKKwkgICAgICBpZiAodCA9PSBlcnJvcl9tYXJrX25v ZGUpCisJCWNwX3BhcnNlcl9uYW1lX2xvb2t1cF9lcnJvciAocGFyc2VyLCBpZCwgdCwgTkxF X05VTEwsCisJCQkJCSAgICAgICB0b2stPmxvY2F0aW9uKTsKKwkgICAgICBjcF9sZXhlcl9j b25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKworCSAgICAgIHRyYWl0c192YXIgPSBO VUxMX1RSRUU7CisJICAgICAgaWYgKGNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+ bGV4ZXIsIENQUF9PUEVOX1BBUkVOKSkKKwkJeworCQkgIG1hdGNoaW5nX3BhcmVucyBwYXJl bnMyOworCQkgIHBhcmVuczIuY29uc3VtZV9vcGVuIChwYXJzZXIpOworCQkgIGlmIChjcF9s ZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfTkFNRSkpCisJCSAgICB7 CisJCSAgICAgIHRvayA9IGNwX2xleGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOwor CQkgICAgICBpZCA9IHRvay0+dS52YWx1ZTsKKwkJICAgICAgdHJhaXRzX3ZhciA9IGNwX3Bh cnNlcl9sb29rdXBfbmFtZV9zaW1wbGUgKHBhcnNlciwgaWQsCisJCQkJCQkJCSB0b2stPmxv Y2F0aW9uKTsKKwkJICAgICAgaWYgKHRyYWl0c192YXIgPT0gZXJyb3JfbWFya19ub2RlKQor CQkJY3BfcGFyc2VyX25hbWVfbG9va3VwX2Vycm9yIChwYXJzZXIsIGlkLCB0cmFpdHNfdmFy LAorCQkJCQkJICAgICBOTEVfTlVMTCwgdG9rLT5sb2NhdGlvbik7CisJCSAgICAgIGNwX2xl eGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCQkgICAgfQorCQkgIGVsc2UK KwkJICAgIGNwX3BhcnNlcl9lcnJvciAocGFyc2VyLCAiZXhwZWN0ZWQgaWRlbnRpZmllciIp OworCQkgIHBhcmVuczIucmVxdWlyZV9jbG9zZSAocGFyc2VyKTsKKwkJfQorCisJICAgICAg aWYgKHQgIT0gZXJyb3JfbWFya19ub2RlICYmIHRyYWl0c192YXIgIT0gZXJyb3JfbWFya19u b2RlKQorCQl7CisJCSAgdHJlZSBjID0gYnVpbGRfb21wX2NsYXVzZSAoY2xhdXNlX2xvYywK KwkJCQkJICAgICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUyk7CisJCSAgT01QX0NMQVVT RV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChjKSA9IHQ7CisJCSAgT01QX0NMQVVTRV9V U0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpID0gTlVMTF9UUkVFOworCQkgIE9NUF9DTEFV U0VfVVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoYykgPSB0cmFpdHNfdmFyOworCQkgIE9NUF9D TEFVU0VfQ0hBSU4gKGMpID0gbmw7CisJCSAgbmwgPSBjOworCQl9CisJICAgIH0KKworCSAg aWYgKGNwX2xleGVyX25leHRfdG9rZW5faXNfbm90IChwYXJzZXItPmxleGVyLCBDUFBfQ09N TUEpKQorCSAgICBicmVhazsKKwkgIGNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+ bGV4ZXIpOworCX0KKyAgICB9CisKKyAgY3BfcGFyc2VyX3NraXBfdG9fY2xvc2luZ19wYXJl bnRoZXNpcyAocGFyc2VyLCAvKnJlY292ZXJpbmc9Ki9mYWxzZSwKKwkJCQkJIC8qb3JfY29t bWE9Ki9mYWxzZSwKKwkJCQkJIC8qY29uc3VtZV9wYXJlbj0qL3RydWUpOworICByZXR1cm4g bmw7Cit9CisKIC8qIE9wZW5NUCAyLjU6CiAgICBsYXN0cHJpdmF0ZSAoIHZhcmlhYmxlLWxp c3QgKQogCkBAIC00MDI4Myw2ICs0MDUyNiwxMCBAQCBjcF9wYXJzZXJfb21wX2FsbF9jbGF1 c2VzIChjcF9wYXJzZXIgKnBhcnNlciwgb21wX2NsYXVzZV9tYXNrIG1hc2ssCiAJICBjbGF1 c2VzID0gY3BfcGFyc2VyX29tcF9jbGF1c2VfYWxsb2NhdGUgKHBhcnNlciwgY2xhdXNlcyk7 CiAJICBjX25hbWUgPSAiYWxsb2NhdGUiOwogCSAgYnJlYWs7CisJY2FzZSBQUkFHTUFfT01Q X0NMQVVTRV9VU0VTX0FMTE9DQVRPUlM6CisJICBjbGF1c2VzID0gY3BfcGFyc2VyX29tcF9j bGF1c2VfdXNlc19hbGxvY2F0b3JzIChwYXJzZXIsIGNsYXVzZXMpOworCSAgY19uYW1lID0g InVzZXNfYWxsb2NhdG9ycyI7CisJICBicmVhazsKIAljYXNlIFBSQUdNQV9PTVBfQ0xBVVNF X0xJTkVBUjoKIAkgIHsKIAkgICAgYm9vbCBkZWNsYXJlX3NpbWQgPSBmYWxzZTsKQEAgLTQ0 MjkxLDcgKzQ0NTM4LDggQEAgY3BfcGFyc2VyX29tcF90YXJnZXRfdXBkYXRlIChjcF9wYXJz ZXIgKnBhcnNlciwgY3BfdG9rZW4gKnByYWdtYV90b2ssCiAJfCAoT01QX0NMQVVTRV9NQVNL XzEgPDwgUFJBR01BX09NUF9DTEFVU0VfSU5fUkVEVUNUSU9OKQlcCiAJfCAoT01QX0NMQVVT RV9NQVNLXzEgPDwgUFJBR01BX09NUF9DTEFVU0VfVEhSRUFEX0xJTUlUKQlcCiAJfCAoT01Q X0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09NUF9DTEFVU0VfSVNfREVWSUNFX1BUUilcCi0J fCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09NUF9DTEFVU0VfSEFTX0RFVklDRV9B RERSKSkKKwl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT01QX0NMQVVTRV9IQVNf REVWSUNFX0FERFIpXAorCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PTVBfQ0xB VVNFX1VTRVNfQUxMT0NBVE9SUykpCiAKIHN0YXRpYyBib29sCiBjcF9wYXJzZXJfb21wX3Rh cmdldCAoY3BfcGFyc2VyICpwYXJzZXIsIGNwX3Rva2VuICpwcmFnbWFfdG9rLApkaWZmIC0t Z2l0IGEvZ2NjL2NwL3NlbWFudGljcy5jYyBiL2djYy9jcC9zZW1hbnRpY3MuY2MKaW5kZXgg Mzc3ZjYxMTEzYzAuLmM0ZmY3M2U3ODk5IDEwMDY0NAotLS0gYS9nY2MvY3Avc2VtYW50aWNz LmNjCisrKyBiL2djYy9jcC9zZW1hbnRpY3MuY2MKQEAgLTc3NzIsNiArNzc3Miw5MCBAQCBm aW5pc2hfb21wX2NsYXVzZXMgKHRyZWUgY2xhdXNlcywgZW51bSBjX29tcF9yZWdpb25fdHlw ZSBvcnQpCiAJICAgIH0KIAkgIGdvdG8gaGFuZGxlX2ZpZWxkX2RlY2w7CiAKKwljYXNlIE9N UF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTOgorCSAgdCA9IE9NUF9DTEFVU0VfVVNFU19BTExP Q0FUT1JTX0FMTE9DQVRPUiAoYyk7CisJICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKHQp KSAhPSBFTlVNRVJBTF9UWVBFCisJICAgICAgfHwgc3RyY21wIChJREVOVElGSUVSX1BPSU5U RVIgKFRZUEVfSURFTlRJRklFUiAoVFJFRV9UWVBFICh0KSkpLAorCQkJICJvbXBfYWxsb2Nh dG9yX2hhbmRsZV90IikgIT0gMCkKKwkgICAgeworCSAgICAgIGVycm9yX2F0IChPTVBfQ0xB VVNFX0xPQ0FUSU9OIChjKSwKKwkJCSJhbGxvY2F0b3IgbXVzdCBiZSBvZiAlPG9tcF9hbGxv Y2F0b3JfaGFuZGxlX3QlPiB0eXBlIik7CisJICAgICAgcmVtb3ZlID0gdHJ1ZTsKKwkgICAg fQorCSAgaWYgKFRSRUVfQ09ERSAodCkgPT0gQ09OU1RfREVDTCkKKwkgICAgeworCSAgICAg IGlmIChPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19NRU1TUEFDRSAoYykKKwkJICB8fCBP TVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19UUkFJVFMgKGMpKQorCQllcnJvcl9hdCAoT01Q X0NMQVVTRV9MT0NBVElPTiAoYyksCisJCQkgICJtb2RpZmllcnMgY2Fubm90IGJlIHVzZWQg d2l0aCBwcmUtZGVmaW5lZCAiCisJCQkgICJhbGxvY2F0b3JzIik7CisKKwkgICAgICAvKiBD dXJyZW50bHkgZm9yIHByZS1kZWZpbmVkIGFsbG9jYXRvcnMgaW4gbGliZ29tcCwgd2UgZG8g bm90CisJCSByZXF1aXJlIGFkZGl0aW9uYWwgaW5pdC9maW5pIGluc2lkZSB0YXJnZXQgcmVn aW9ucywgc28gZGlzY2FyZAorCQkgc3VjaCBjbGF1c2VzLiAgKi8KKwkgICAgICByZW1vdmUg PSB0cnVlOworCSAgICB9CisJICB0ID0gT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfTUVN U1BBQ0UgKGMpOworCSAgaWYgKHQgIT0gTlVMTF9UUkVFCisJICAgICAgJiYgKFRSRUVfQ09E RSAodCkgIT0gQ09OU1RfREVDTAorCQkgIHx8IFRSRUVfQ09ERSAoVFJFRV9UWVBFICh0KSkg IT0gRU5VTUVSQUxfVFlQRQorCQkgIHx8IHN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChU WVBFX0lERU5USUZJRVIgKFRSRUVfVFlQRSAodCkpKSwKKwkJCSAgICAgIm9tcF9tZW1zcGFj ZV9oYW5kbGVfdCIpICE9IDApKQorCSAgICB7CisJICAgICAgZXJyb3JfYXQgKE9NUF9DTEFV U0VfTE9DQVRJT04gKGMpLCAibWVtc3BhY2UgbW9kaWZpZXIgbXVzdCBiZSAiCisJCQkiY29u c3RhbnQgZW51bSBvZiAlPG9tcF9tZW1zcGFjZV9oYW5kbGVfdCU+IHR5cGUiKTsKKwkgICAg ICByZW1vdmUgPSB0cnVlOworCSAgICB9CisJICB0ID0gT01QX0NMQVVTRV9VU0VTX0FMTE9D QVRPUlNfVFJBSVRTIChjKTsKKwkgIGlmICh0ICE9IE5VTExfVFJFRSkKKwkgICAgeworCSAg ICAgIGJvb2wgdHlwZV9lcnIgPSBmYWxzZTsKKworCSAgICAgIGlmIChUUkVFX0NPREUgKFRS RUVfVFlQRSAodCkpICE9IEFSUkFZX1RZUEUpCisJCXR5cGVfZXJyID0gdHJ1ZTsKKwkgICAg ICBlbHNlCisJCXsKKwkJICB0cmVlIGVsZW1fdCA9IFRSRUVfVFlQRSAoVFJFRV9UWVBFICh0 KSk7CisJCSAgaWYgKFRSRUVfQ09ERSAoZWxlbV90KSAhPSBSRUNPUkRfVFlQRQorCQkgICAg ICB8fCBzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUiAoVFlQRV9JREVOVElGSUVSIChlbGVt X3QpKSwKKwkJCQkgIm9tcF9hbGxvY3RyYWl0X3QiKSAhPSAwCisJCSAgICAgIHx8ICFUWVBF X1JFQURPTkxZIChlbGVtX3QpKQorCQkgICAgdHlwZV9lcnIgPSB0cnVlOworCQl9CisJICAg ICAgaWYgKHR5cGVfZXJyKQorCQl7CisJCSAgZXJyb3JfYXQgKE9NUF9DTEFVU0VfTE9DQVRJ T04gKGMpLCAidHJhaXRzIGFycmF5ICVxRSBtdXN0IGJlIG9mICIKKwkJCSAgICAiJTxjb25z dCBvbXBfYWxsb2N0cmFpdF90IFtdJT4gdHlwZSIsIHQpOworCQkgIHJlbW92ZSA9IHRydWU7 CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB0cmVlIGNzdF92YWwgPSBkZWNsX2NvbnN0 YW50X3ZhbHVlICh0KTsKKwkJICBpZiAoY3N0X3ZhbCA9PSB0KQorCQkgICAgeworCQkgICAg ICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksICJ0cmFpdHMgYXJyYXkgbXVz dCBiZSAiCisJCQkJIm9mIGNvbnN0YW50IHZhbHVlcyIpOworCisJCSAgICAgIHJlbW92ZSA9 IHRydWU7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgaWYgKHJlbW92ZSkKKwkgICAgYnJl YWs7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBDcmVhdGUgYSBwcml2YXRlIGNsYXVz ZSBmb3IgdGhlIGFsbG9jYXRvciB2YXJpYWJsZSwgcGxhY2VkCisJCSBwcmlvciB0byBjdXJy ZW50IHVzZXNfYWxsb2NhdG9ycyBjbGF1c2UuICAqLworCSAgICAgIHRyZWUgbmMgPSBidWls ZF9vbXBfY2xhdXNlIChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwKKwkJCQkJICBPTVBfQ0xB VVNFX1BSSVZBVEUpOworCSAgICAgIE9NUF9DTEFVU0VfREVDTCAobmMpID0gT01QX0NMQVVT RV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChjKTsKKwkgICAgICBPTVBfQ0xBVVNFX0NI QUlOIChuYykgPSBjOworCSAgICAgICpwYyA9IG5jOworCisJICAgICAgcGMgPSAmT01QX0NM QVVTRV9DSEFJTiAoYyk7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwogCWNhc2UgT01Q X0NMQVVTRV9ERVBFTkQ6CiAJICB0ID0gT01QX0NMQVVTRV9ERUNMIChjKTsKIAkgIGlmICh0 ID09IE5VTExfVFJFRSkKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJl ZS5jYyBiL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJlZS5jYwppbmRleCAzNjM1NDYwYmZm ZC4uM2FjN2ZjODQ2YWMgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJl ZS5jYworKysgYi9nY2MvZm9ydHJhbi9kdW1wLXBhcnNlLXRyZWUuY2MKQEAgLTE0MjMsNiAr MTQyMywyMCBAQCBzaG93X29tcF9uYW1lbGlzdCAoaW50IGxpc3RfdHlwZSwgZ2ZjX29tcF9u YW1lbGlzdCAqbikKIAkgIGNhc2UgT01QX0xJTkVBUl9VVkFMOiBmcHV0cyAoInV2YWwoIiwg ZHVtcGZpbGUpOyBicmVhazsKIAkgIGRlZmF1bHQ6IGJyZWFrOwogCSAgfQorICAgICAgZWxz ZSBpZiAobGlzdF90eXBlID09IE9NUF9MSVNUX1VTRVNfQUxMT0NBVE9SUykKKwl7CisJICBz aG93X3N5bWJvbCAobi0+c3ltKTsKKwkgIGZwdXRzICgiKG1lbXNwYWNlOiIsIGR1bXBmaWxl KTsKKwkgIGlmIChuLT5tZW1zcGFjZV9zeW0pCisJICAgIHNob3dfc3ltYm9sIChuLT50cmFp dHNfc3ltKTsKKwkgIGZwdXRzICgiLHRyYWl0czoiLCBkdW1wZmlsZSk7CisJICBpZiAobi0+ bWVtc3BhY2Vfc3ltKQorCSAgICBzaG93X3N5bWJvbCAobi0+dHJhaXRzX3N5bSk7CisJICBm cHV0YyAoJyknLCBkdW1wZmlsZSk7CisJICBpZiAobi0+bmV4dCkKKwkgICAgZnB1dGMgKCcs JywgZHVtcGZpbGUpOworCSAgY29udGludWU7CisJfQogICAgICAgZnByaW50ZiAoZHVtcGZp bGUsICIlcyIsIG4tPnN5bS0+bmFtZSk7CiAgICAgICBpZiAobGlzdF90eXBlID09IE9NUF9M SVNUX0xJTkVBUiAmJiBuLT51LmxpbmVhcl9vcCAhPSBPTVBfTElORUFSX0RFRkFVTFQpCiAJ ZnB1dGMgKCcpJywgZHVtcGZpbGUpOwpAQCAtMTY4OSw2ICsxNzAzLDcgQEAgc2hvd19vbXBf Y2xhdXNlcyAoZ2ZjX29tcF9jbGF1c2VzICpvbXBfY2xhdXNlcykKIAkgIGNhc2UgT01QX0xJ U1RfQUxMT0NBVEU6IHR5cGUgPSAiQUxMT0NBVEUiOyBicmVhazsKIAkgIGNhc2UgT01QX0xJ U1RfU0NBTl9JTjogdHlwZSA9ICJJTkNMVVNJVkUiOyBicmVhazsKIAkgIGNhc2UgT01QX0xJ U1RfU0NBTl9FWDogdHlwZSA9ICJFWENMVVNJVkUiOyBicmVhazsKKwkgIGNhc2UgT01QX0xJ U1RfVVNFU19BTExPQ0FUT1JTOiB0eXBlID0gIlVTRVNfQUxMT0NBVE9SUyI7IGJyZWFrOwog CSAgZGVmYXVsdDoKIAkgICAgZ2NjX3VucmVhY2hhYmxlICgpOwogCSAgfQpkaWZmIC0tZ2l0 IGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaCBiL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgKaW5k ZXggN2JmMWQ1YTA0NTIuLjE4ZTY4NWNhMWIxIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9n Zm9ydHJhbi5oCisrKyBiL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgKQEAgLTEzNTMsNiArMTM1 Myw4IEBAIHR5cGVkZWYgc3RydWN0IGdmY19vbXBfbmFtZWxpc3QKICAgICAgIHN0cnVjdCBn ZmNfb21wX25hbWVsaXN0X3VkciAqdWRyOwogICAgICAgZ2ZjX25hbWVzcGFjZSAqbnM7CiAg ICAgfSB1MjsKKyAgc3RydWN0IGdmY19zeW1ib2wgKm1lbXNwYWNlX3N5bTsKKyAgc3RydWN0 IGdmY19zeW1ib2wgKnRyYWl0c19zeW07CiAgIHN0cnVjdCBnZmNfb21wX25hbWVsaXN0ICpu ZXh0OwogICBsb2N1cyB3aGVyZTsKIH0KQEAgLTEzOTQsNiArMTM5Niw3IEBAIGVudW0KICAg T01QX0xJU1RfTk9OVEVNUE9SQUwsCiAgIE9NUF9MSVNUX0FMTE9DQVRFLAogICBPTVBfTElT VF9IQVNfREVWSUNFX0FERFIsCisgIE9NUF9MSVNUX1VTRVNfQUxMT0NBVE9SUywKICAgT01Q X0xJU1RfTlVNIC8qIE11c3QgYmUgdGhlIGxhc3QuICAqLwogfTsKIApkaWZmIC0tZ2l0IGEv Z2NjL2ZvcnRyYW4vb3Blbm1wLmNjIGIvZ2NjL2ZvcnRyYW4vb3Blbm1wLmNjCmluZGV4IDcx NDE0ODEzOGMyLi5hMTg3ZTc1ZTFmZSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vb3Blbm1w LmNjCisrKyBiL2djYy9mb3J0cmFuL29wZW5tcC5jYwpAQCAtOTQ4LDYgKzk0OCw3IEBAIGVu dW0gb21wX21hc2syCiAgIE9NUF9DTEFVU0VfQVRUQUNILAogICBPTVBfQ0xBVVNFX05PSE9T VCwKICAgT01QX0NMQVVTRV9IQVNfREVWSUNFX0FERFIsICAvKiBPcGVuTVAgNS4xICAqLwor ICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUywgIC8qIE9wZW5NUCA1LjIgICovCiAgIC8q IFRoaXMgbXVzdCBjb21lIGxhc3QuICAqLwogICBPTVBfTUFTSzJfTEFTVAogfTsKQEAgLTEz NjQsNiArMTM2NSwyMzQgQEAgZ2ZjX21hdGNoX29tcF9jbGF1c2VfcmVkdWN0aW9uIChjaGFy IHBjLCBnZmNfb21wX2NsYXVzZXMgKmMsIGJvb2wgb3BlbmFjYywKICAgcmV0dXJuIE1BVENI X1lFUzsKIH0KIAorLyogdXNlc19hbGxvY2F0b3JzICggYWxsb2NhdG9yLWxpc3QgKQorCisg ICBhbGxvY2F0b3ItbGlzdDoKKyAgIGFsbG9jYXRvcgorICAgYWxsb2NhdG9yICwgYWxsb2Nh dG9yLWxpc3QKKyAgIGFsbG9jYXRvciAoIHRyYWl0cy1hcnJheSApCisgICBhbGxvY2F0b3Ig KCB0cmFpdHMtYXJyYXkgKSAsIGFsbG9jYXRvci1saXN0CisKKyAgIHVzZXNfYWxsb2NhdG9y cyAoIG1vZGlmaWVyIDogYWxsb2NhdG9yICkKKyAgIHVzZXNfYWxsb2NhdG9ycyAoIG1vZGlm aWVyICwgbW9kaWZpZXIgOiBhbGxvY2F0b3IgKQorCisgICBtb2RpZmllcjoKKyAgIHRyYWl0 cyAoIHRyYWl0cy1hcnJheSApCisgICBtZW1zcGFjZSAoIG1lbS1zcGFjZS1oYW5kbGUgKSAg Ki8KKworc3RhdGljIG1hdGNoCitnZmNfbWF0Y2hfb21wX2NsYXVzZV91c2VzX2FsbG9jYXRv cnMgKGdmY19vbXBfY2xhdXNlcyAqYykKK3sKKyAgZ2ZjX3N5bWJvbCAqc3ltOworICBnZmNf c3ltYm9sICptZW1zcGFjZV9zeW09IE5VTEw7CisgIGdmY19zeW1ib2wgKnRyYWl0c19zeW09 IE5VTEw7CisgIGJvb2wgbWVtc3BhY2Vfc2VlbiA9IGZhbHNlLCB0cmFpdHNfc2VlbiA9IGZh bHNlOworICBtYXRjaCBtOworICBpbnQgaSA9IDA7CisKKyAgaWYgKGdmY19tYXRjaCAoInVz ZXNfYWxsb2NhdG9ycyAoICIpICE9IE1BVENIX1lFUykKKyAgICByZXR1cm4gTUFUQ0hfTk87 CisKKyAgZ2ZjX3N5bWJvbCAqYWxsb2NhdG9yX2hhbmRsZV9raW5kLCAqIG1lbXNwYWNlX2hh bmRsZV9raW5kOworCisgIGlmIChnZmNfZmluZF9zeW1ib2wgKCJvbXBfYWxsb2NhdG9yX2hh bmRsZV9raW5kIiwgTlVMTCwgMSwgJnN5bSkKKyAgICAgIHx8IHN5bSA9PSBOVUxMCisgICAg ICB8fCBzeW0tPmF0dHIuZGltZW5zaW9uCisgICAgICB8fCBzeW0tPnZhbHVlID09IE5VTEwK KyAgICAgIHx8IHN5bS0+dmFsdWUtPmV4cHJfdHlwZSAhPSBFWFBSX0NPTlNUQU5UCisgICAg ICB8fCBzeW0tPnZhbHVlLT50cy50eXBlICE9IEJUX0lOVEVHRVIpCisgICAgeworICAgICAg Z2ZjX2Vycm9yICgiT3Blbk1QICU8b21wX2FsbG9jYXRvcl9oYW5kbGVfa2luZCU+IGNvbnN0 YW50IG5vdCBmb3VuZCBieSAiCisJCSAiJTx1c2VzX2FsbG9jYXRvcnMlPiBjbGF1c2UgYXQg JUMiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICBhbGxvY2F0b3JfaGFuZGxlX2tp bmQgPSBzeW07CisKKyAgaWYgKGdmY19maW5kX3N5bWJvbCAoIm9tcF9tZW1zcGFjZV9oYW5k bGVfa2luZCIsIE5VTEwsIDEsICZzeW0pCisgICAgICB8fCBzeW0gPT0gTlVMTAorICAgICAg fHwgc3ltLT5hdHRyLmRpbWVuc2lvbgorICAgICAgfHwgc3ltLT52YWx1ZSA9PSBOVUxMCisg ICAgICB8fCBzeW0tPnZhbHVlLT5leHByX3R5cGUgIT0gRVhQUl9DT05TVEFOVAorICAgICAg fHwgc3ltLT52YWx1ZS0+dHMudHlwZSAhPSBCVF9JTlRFR0VSKQorICAgIHsKKyAgICAgIGdm Y19lcnJvciAoIk9wZW5NUCAlPG9tcF9tZW1zcGFjZV9oYW5kbGVfa2luZCU+IGNvbnN0YW50 IG5vdCBmb3VuZCBieSAiCisJCSAiJTx1c2VzX2FsbG9jYXRvcnMlPiBjbGF1c2UgYXQgJUMi KTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICBtZW1zcGFjZV9oYW5kbGVfa2luZCA9 IHN5bTsKKworICBkbworICAgIHsKKyAgICAgIGlmICgrK2kgPiAyKQorCXsKKwkgIGdmY19l cnJvciAoIk9ubHkgdHdvIG1vZGlmaWVycyBhcmUgYWxsb3dlZCBvbiAlPHVzZXNfYWxsb2Nh dG9ycyU+ICIKKwkJICAgICAiY2xhdXNlIGF0ICVDIik7CisJICBnb3RvIGVycm9yOworCX0K KworICAgICAgaWYgKGdmY19tYXRjaCAoIm1lbXNwYWNlICggIikgPT0gTUFUQ0hfWUVTKQor CXsKKwkgIGlmIChtZW1zcGFjZV9zZWVuKQorCSAgICB7CisJICAgICAgZ2ZjX2Vycm9yICgi TXVsdGlwbGUgbWVtc3BhY2UgbW9kaWZpZXJzIGF0ICVDIik7CisJICAgICAgZ290byBlcnJv cjsKKwkgICAgfQorCSAgbWVtc3BhY2Vfc2VlbiA9IHRydWU7CisJICBtID0gZ2ZjX21hdGNo X3N5bWJvbCAoJnN5bSwgMSk7CisJICBpZiAobSA9PSBNQVRDSF9ZRVMpCisJICAgIG1lbXNw YWNlX3N5bSA9IHN5bTsKKwkgIGVsc2UKKwkgICAgZ290byBlcnJvcjsKKwkgIGlmIChnZmNf bWF0Y2hfY2hhciAoJyknKSAhPSBNQVRDSF9ZRVMpCisJICAgIGdvdG8gZXJyb3I7CisJfQor ICAgICAgZWxzZSBpZiAoZ2ZjX21hdGNoICgidHJhaXRzICggIikgPT0gTUFUQ0hfWUVTKQor CXsKKwkgIGlmICh0cmFpdHNfc2VlbikKKwkgICAgeworCSAgICAgIGdmY19lcnJvciAoIk11 bHRpcGxlIHRyYWl0cyBtb2RpZmllcnMgYXQgJUMiKTsKKwkgICAgICBnb3RvIGVycm9yOwor CSAgICB9CisJICB0cmFpdHNfc2VlbiA9IHRydWU7CisJICBtID0gZ2ZjX21hdGNoX3N5bWJv bCAoJnN5bSwgMSk7CisJICBpZiAobSA9PSBNQVRDSF9ZRVMpCisJICAgIHRyYWl0c19zeW0g PSBzeW07CisJICBlbHNlCisJICAgIGdvdG8gZXJyb3I7CisJICBpZiAoZ2ZjX21hdGNoX2No YXIgKCcpJykgIT0gTUFUQ0hfWUVTKQorCSAgICBnb3RvIGVycm9yOworCX0KKyAgICAgIGVs c2UKKwlicmVhazsKKyAgICB9CisgIHdoaWxlIChnZmNfbWF0Y2ggKCIgLCAiKSA9PSBNQVRD SF9ZRVMpOworCisgIGlmICgobWVtc3BhY2Vfc2VlbiB8fCB0cmFpdHNfc2VlbikKKyAgICAg ICYmIGdmY19tYXRjaCAoIiA6ICIpICE9IE1BVENIX1lFUykKKyAgICBnb3RvIGVycm9yOwor CisgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIG0gPSBnZmNfbWF0Y2hfc3ltYm9sICgm c3ltLCAxKTsKKyAgICAgIGlmIChtICE9IE1BVENIX1lFUykKKwl7CisJICBnZmNfZXJyb3Ig KCJFeHBlY3RlZCBuYW1lIG9mIGFsbG9jYXRvciBhdCAlQyIpOworCSAgZ290byBlcnJvcjsK Kwl9CisgICAgICBnZmNfc3ltYm9sICphbGxvY2F0b3Jfc3ltID0gc3ltOworCisgICAgICBp ZiAoZ2ZjX21hdGNoX2NoYXIgKCcoJykgPT0gTUFUQ0hfWUVTKQorCXsKKwkgIGlmIChtZW1z cGFjZV9zZWVuIHx8IHRyYWl0c19zZWVuKQorCSAgICB7CisJICAgICAgZ2ZjX2Vycm9yICgi TW9kaWZpZXJzIGNhbm5vdCBiZSB1c2VkIHdpdGggKGRlcHJlY2F0ZWQpIHRyYWl0cyAiCisJ CQkgImFycmF5IGxpc3Qgc3ludGF4IGF0ICVDIik7CisJICAgICAgZ290byBlcnJvcjsKKwkg ICAgfQorCSAgbSA9IGdmY19tYXRjaF9zeW1ib2wgKCZzeW0sIDEpOworCSAgaWYgKG0gPT0g TUFUQ0hfWUVTKQorCSAgICB0cmFpdHNfc3ltID0gc3ltOworCSAgZWxzZQorCSAgICBnb3Rv IGVycm9yOworCSAgaWYgKGdmY19tYXRjaF9jaGFyICgnKScpICE9IE1BVENIX1lFUykKKwkg ICAgZ290byBlcnJvcjsKKwl9CisKKyAgICAgIGlmICh0cmFpdHNfc3ltKQorCXsKKwkgIGlm ICh0cmFpdHNfc3ltLT50cy50eXBlICE9IEJUX0RFUklWRUQKKwkgICAgICB8fCBzdHJjbXAg KHRyYWl0c19zeW0tPnRzLnUuZGVyaXZlZC0+bmFtZSwKKwkJCSAib21wX2FsbG9jdHJhaXQi KSAhPSAwCisJICAgICAgfHwgdHJhaXRzX3N5bS0+YXR0ci5mbGF2b3IgIT0gRkxfUEFSQU1F VEVSCisJICAgICAgfHwgdHJhaXRzX3N5bS0+YXMtPnJhbmsgIT0gMSkKKwkgICAgeworCSAg ICAgIGdmY19lcnJvciAoIiU8JXMlPiBhdCAlQyBtdXN0IGJlIG9mIGNvbnN0YW50ICIKKwkJ CSAiJTx0eXBlKG9tcF9hbGxvY3RyYWl0KSU+IGFycmF5IHR5cGUgYW5kIGhhdmUgYSAiCisJ CQkgImNvbnN0YW50IGluaXRpYWxpemVyIiwgdHJhaXRzX3N5bS0+bmFtZSk7CisJICAgICAg Z290byBlcnJvcjsKKwkgICAgfQorCSAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAodHJhaXRz X3N5bSk7CisJfQorCisgICAgICBpZiAobWVtc3BhY2Vfc3ltKQorCXsKKwkgIGlmIChtZW1z cGFjZV9zeW0tPnRzLnR5cGUgIT0gQlRfSU5URUdFUgorCSAgICAgIHx8IG1lbXNwYWNlX3N5 bS0+YXR0ci5mbGF2b3IgIT0gRkxfUEFSQU1FVEVSCisJICAgICAgfHwgbXB6X2NtcF9zaSAo bWVtc3BhY2VfaGFuZGxlX2tpbmQtPnZhbHVlLT52YWx1ZS5pbnRlZ2VyLAorCQkJICAgICBt ZW1zcGFjZV9zeW0tPnRzLmtpbmQpICE9IDAKKwkgICAgICAvKiBDaGVjayBpZiBpZGVudGlm aWVyIGlzIG9mICdvbXBfLi4uX21lbV9zcGFjZScgZm9ybWF0LiAgKi8KKwkgICAgICB8fCAh c3RhcnRzd2l0aCAobWVtc3BhY2Vfc3ltLT5uYW1lLCAib21wXyIpCisJICAgICAgfHwgIWVu ZHN3aXRoIChtZW1zcGFjZV9zeW0tPm5hbWUsICJfbWVtX3NwYWNlIikpCisJICAgIHsKKwkg ICAgICBnZmNfZXJyb3IgKCIlPCVzJT4gYXQgJUMgaXMgbm90IGEgcHJlLWRlZmluZWQgbWVt b3J5IHNwYWNlIG5hbWUiLAorCQkJIG1lbXNwYWNlX3N5bS0+bmFtZSk7CisJICAgICAgZ290 byBlcnJvcjsKKwkgICAgfQorCX0KKworICAgICAgaWYgKGFsbG9jYXRvcl9zeW0tPnRzLnR5 cGUgIT0gQlRfSU5URUdFUgorCSAgfHwgbXB6X2NtcF9zaSAoYWxsb2NhdG9yX2hhbmRsZV9r aW5kLT52YWx1ZS0+dmFsdWUuaW50ZWdlciwKKwkJCSBhbGxvY2F0b3Jfc3ltLT50cy5raW5k KSAhPSAwKQorCXsKKwkgIGdmY19lcnJvciAoIiU8JXMlPiBhdCAlQyBtdXN0IGJlIGludGVn ZXIgb2YgJTwlcyU+IGtpbmQiLAorCQkgICAgIGFsbG9jYXRvcl9zeW0tPm5hbWUsIGFsbG9j YXRvcl9oYW5kbGVfa2luZC0+bmFtZSk7CisJICBnb3RvIGVycm9yOworCX0KKworICAgICAg aWYgKGFsbG9jYXRvcl9zeW0tPmF0dHIuZmxhdm9yID09IEZMX1BBUkFNRVRFUikKKwl7CisJ ICAvKiBDaGVjayBpZiBpZGVudGlmaWVyIGlzIGEgJ29tcF8uLi5fbWVtX2FsbG9jJyBwcmUt ZGVmaW5lZAorCSAgICAgYWxsb2NhdG9yLiAgKi8KKwkgIGlmICghc3RhcnRzd2l0aCAoYWxs b2NhdG9yX3N5bS0+bmFtZSwgIm9tcF8iKQorCSAgICAgIHx8ICFlbmRzd2l0aCAoYWxsb2Nh dG9yX3N5bS0+bmFtZSwgIl9tZW1fYWxsb2MiKSkKKwkgICAgeworCSAgICAgIGdmY19lcnJv ciAoIiU8JXMlPiBhdCAlQyBpcyBub3QgYSBwcmUtZGVmaW5lZCBtZW1vcnkgYWxsb2NhdG9y IiwKKwkJCSBhbGxvY2F0b3Jfc3ltLT5uYW1lKTsKKwkgICAgICBnb3RvIGVycm9yOworCSAg ICB9CisKKwkgIC8qIEN1cnJlbnRseSBmb3IgcHJlLWRlZmluZWQgYWxsb2NhdG9ycyBpbiBs aWJnb21wLCB3ZSBkbyBub3QKKwkgICAgIHJlcXVpcmUgYWRkaXRpb25hbCBpbml0L2Zpbmkg aW5zaWRlIHRhcmdldCByZWdpb25zLAorCSAgICAgc28gZG8gbm90aGluZyBoZXJlIHRvIGRp c2NhcmQgc3VjaCBjbGF1c2VzLiAgKi8KKwl9CisgICAgICBlbHNlCisJeworCSAgZ2ZjX3Nl dF9zeW1fcmVmZXJlbmNlZCAoYWxsb2NhdG9yX3N5bSk7CisKKwkgIGdmY19vbXBfbmFtZWxp c3QgKm4gPSBnZmNfZ2V0X29tcF9uYW1lbGlzdCAoKTsKKwkgIG4tPnN5bSA9IGFsbG9jYXRv cl9zeW07CisJICBuLT5tZW1zcGFjZV9zeW0gPSBtZW1zcGFjZV9zeW07CisJICBuLT50cmFp dHNfc3ltID0gdHJhaXRzX3N5bTsKKwkgIG4tPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7 CisKKwkgIG4tPm5leHQgPSBjLT5saXN0c1tPTVBfTElTVF9VU0VTX0FMTE9DQVRPUlNdOwor CSAgYy0+bGlzdHNbT01QX0xJU1RfVVNFU19BTExPQ0FUT1JTXSA9IG47CisJfQorCisgICAg ICBpZiAoZ2ZjX21hdGNoICgiICwgIikgPT0gTUFUQ0hfWUVTKQorCXsKKwkgIGlmIChtZW1z cGFjZV9zZWVuIHx8IHRyYWl0c19zZWVuKQorCSAgICB7CisJICAgICAgZ2ZjX2Vycm9yICgi V2hlbiB1c2luZyBtb2RpZmllcnMsIG9ubHkgYSBzaW5nbGUgYWxsb2NhdG9yIGNhbiBiZSAi CisJCQkgInNwZWNpZmllZCBpbiBlYWNoICU8dXNlc19hbGxvY2F0b3JzJT4gY2xhdXNlIGF0 ICVDIik7CisJICAgICAgZ290byBlcnJvcjsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwli cmVhazsKKworICAgICAgbWVtc3BhY2Vfc3ltID0gTlVMTDsKKyAgICAgIHRyYWl0c19zeW0g PSBOVUxMOworICAgIH0KKworICBpZiAoZ2ZjX21hdGNoX2NoYXIgKCcpJykgIT0gTUFUQ0hf WUVTKQorICAgIGdvdG8gZXJyb3I7CisKKyAgcmV0dXJuIE1BVENIX1lFUzsKKworIGVycm9y OgorICByZXR1cm4gTUFUQ0hfRVJST1I7Cit9CiAKIC8qIE1hdGNoIHdpdGggZHVwbGljYXRl IGNoZWNrLiBNYXRjaGVzICduYW1lJy4gSWYgZXhwciAhPSBOVUxMLCBpdAogICAgdGhlbiBt YXRjaGVzICcoZXhwciknLCBvdGhlcndpc2UsIGlmIG9wZW5fcGFyZW5zIGlzIHRydWUsCkBA IC0yOTI0LDYgKzMxNTMsOSBAQCBnZmNfbWF0Y2hfb21wX2NsYXVzZXMgKGdmY19vbXBfY2xh dXNlcyAqKmNwLCBjb25zdCBvbXBfbWFzayBtYXNrLAogCQkgICAoInVzZV9kZXZpY2VfYWRk ciAoIiwgJmMtPmxpc3RzW09NUF9MSVNUX1VTRV9ERVZJQ0VfQUREUl0sCiAJCSAgICBmYWxz ZSwgTlVMTCwgTlVMTCwgdHJ1ZSkgPT0gTUFUQ0hfWUVTKQogCSAgICBjb250aW51ZTsKKwkg IGlmICgobWFzayAmIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKQorCSAgICAgICYmIGdm Y19tYXRjaF9vbXBfY2xhdXNlX3VzZXNfYWxsb2NhdG9ycyAoYykgPT0gTUFUQ0hfWUVTKQor CSAgICBjb250aW51ZTsKIAkgIGJyZWFrOwogCWNhc2UgJ3YnOgogCSAgLyogVkVDVE9SX0xF TkdUSCBtdXN0IGJlIG1hdGNoZWQgYmVmb3JlIFZFQ1RPUiwgYmVjYXVzZSB0aGUgbGF0dGVy CkBAIC0zNjUwLDcgKzM4ODIsNyBAQCBjbGVhbnVwOgogICAgfCBPTVBfQ0xBVVNFX0ZJUlNU UFJJVkFURSB8IE9NUF9DTEFVU0VfREVGQVVMVE1BUAkJCVwKICAgIHwgT01QX0NMQVVTRV9J U19ERVZJQ0VfUFRSIHwgT01QX0NMQVVTRV9JTl9SRURVQ1RJT04JCQlcCiAgICB8IE9NUF9D TEFVU0VfVEhSRUFEX0xJTUlUIHwgT01QX0NMQVVTRV9BTExPQ0FURQkJCVwKLSAgIHwgT01Q X0NMQVVTRV9IQVNfREVWSUNFX0FERFIpCisgICB8IE9NUF9DTEFVU0VfSEFTX0RFVklDRV9B RERSIHwgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlMpCiAjZGVmaW5lIE9NUF9UQVJHRVRf REFUQV9DTEFVU0VTIFwKICAgKG9tcF9tYXNrIChPTVBfQ0xBVVNFX0RFVklDRSkgfCBPTVBf Q0xBVVNFX01BUCB8IE9NUF9DTEFVU0VfSUYJXAogICAgfCBPTVBfQ0xBVVNFX1VTRV9ERVZJ Q0VfUFRSIHwgT01QX0NMQVVTRV9VU0VfREVWSUNFX0FERFIpCkBAIC02MjgyLDcgKzY1MTQs NyBAQCByZXNvbHZlX29tcF9jbGF1c2VzIChnZmNfY29kZSAqY29kZSwgZ2ZjX29tcF9jbGF1 c2VzICpvbXBfY2xhdXNlcywKIAkiSU5fUkVEVUNUSU9OIiwgIlRBU0tfUkVEVUNUSU9OIiwK IAkiREVWSUNFX1JFU0lERU5UIiwgIkxJTksiLCAiVVNFX0RFVklDRSIsCiAJIkNBQ0hFIiwg IklTX0RFVklDRV9QVFIiLCAiVVNFX0RFVklDRV9QVFIiLCAiVVNFX0RFVklDRV9BRERSIiwK LQkiTk9OVEVNUE9SQUwiLCAiQUxMT0NBVEUiLCAiSEFTX0RFVklDRV9BRERSIiB9OworCSJO T05URU1QT1JBTCIsICJBTExPQ0FURSIsICJIQVNfREVWSUNFX0FERFIiLCAiVVNFU19BTExP Q0FUT1JTIiB9OwogICBTVEFUSUNfQVNTRVJUIChBUlJBWV9TSVpFIChjbGF1c2VfbmFtZXMp ID09IE9NUF9MSVNUX05VTSk7CiAKICAgaWYgKG9tcF9jbGF1c2VzID09IE5VTEwpCmRpZmYg LS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYyBiL2djYy9mb3J0cmFuL3RyYW5z LWFycmF5LmNjCmluZGV4IDA1MTM0OTUyZGI0Li5hMmEyYjg4OWQwMyAxMDA2NDQKLS0tIGEv Z2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJy YXkuY2MKQEAgLTYzNDMsMTAgKzYzNDMsOCBAQCBnZmNfY29udl9hcnJheV9pbml0aWFsaXpl ciAodHJlZSB0eXBlLCBnZmNfZXhwciAqIGV4cHIpCiAJCQkgICAgICAgJmV4cHItPndoZXJl LCBmbGFnX21heF9hcnJheV9jb25zdHJ1Y3Rvcik7CiAJICAgICAgcmV0dXJuIE5VTExfVFJF RTsKIAkgICAgfQotICAgICAgICAgIGlmIChtcHpfY21wX3NpIChjLT5vZmZzZXQsIDApICE9 IDApCi0gICAgICAgICAgICBpbmRleCA9IGdmY19jb252X21wel90b190cmVlIChjLT5vZmZz ZXQsIGdmY19pbmRleF9pbnRlZ2VyX2tpbmQpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAg ICAgIGluZGV4ID0gTlVMTF9UUkVFOworCisJICBpbmRleCA9IGdmY19jb252X21wel90b190 cmVlIChjLT5vZmZzZXQsIGdmY19pbmRleF9pbnRlZ2VyX2tpbmQpOwogCiAJICBpZiAobXB6 X2NtcF9zaSAoYy0+cmVwZWF0LCAxKSA+IDApCiAJICAgIHsKZGlmZiAtLWdpdCBhL2djYy9m b3J0cmFuL3RyYW5zLW9wZW5tcC5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYwpp bmRleCA0M2Q1OWFiZTllMC4uYjA5NGIxN2YwNTQgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFu L3RyYW5zLW9wZW5tcC5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MKQEAg LTI2ODYsOSArMjY4NiwxNiBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190 ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgICAgaWYgKG4tPmV4cHIp CiAJCSAgICAgIHsKIAkJCXRyZWUgYWxsb2NhdG9yXzsKLQkJCWdmY19pbml0X3NlICgmc2Us IE5VTEwpOwotCQkJZ2ZjX2NvbnZfZXhwciAoJnNlLCBuLT5leHByKTsKLQkJCWFsbG9jYXRv cl8gPSBnZmNfZXZhbHVhdGVfbm93IChzZS5leHByLCBibG9jayk7CisJCQlpZiAobi0+ZXhw ci0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUpCisJCQkgIGFsbG9jYXRvcl8KKwkJCSAg ICA9IGdmY190cmFuc19vbXBfdmFyaWFibGUgKG4tPmV4cHItPnN5bXRyZWUtPm4uc3ltLAor CQkJCQkJICAgICAgZmFsc2UpOworCQkJZWxzZQorCQkJICB7CisJCQkgICAgZ2ZjX2luaXRf c2UgKCZzZSwgTlVMTCk7CisJCQkgICAgZ2ZjX2NvbnZfZXhwciAoJnNlLCBuLT5leHByKTsK KwkJCSAgICBhbGxvY2F0b3JfID0gZ2ZjX2V2YWx1YXRlX25vdyAoc2UuZXhwciwgYmxvY2sp OworCQkJICB9CiAJCQlPTVBfQ0xBVVNFX0FMTE9DQVRFX0FMTE9DQVRPUiAobm9kZSkgPSBh bGxvY2F0b3JfOwogCQkgICAgICB9CiAJCSAgICBvbXBfY2xhdXNlcyA9IGdmY190cmFuc19h ZGRfY2xhdXNlIChub2RlLCBvbXBfY2xhdXNlcyk7CkBAIC0zNjU3LDYgKzM2NjQsMjkgQEAg Z2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xh dXNlcyAqY2xhdXNlcywKIAkgICAgICBvbXBfY2xhdXNlcyA9IGdmY190cmFuc19hZGRfY2xh dXNlIChub2RlLCBvbXBfY2xhdXNlcyk7CiAJICAgIH0KIAkgIGJyZWFrOworCWNhc2UgT01Q X0xJU1RfVVNFU19BTExPQ0FUT1JTOgorCSAgZm9yICg7IG4gIT0gTlVMTDsgbiA9IG4tPm5l eHQpCisJICAgIHsKKwkgICAgICB0cmVlIGFsbG9jYXRvciA9IGdmY190cmFuc19vbXBfdmFy aWFibGUgKG4tPnN5bSwgZmFsc2UpOworCSAgICAgIHRyZWUgbWVtc3BhY2UgPSAobi0+bWVt c3BhY2Vfc3ltCisJCQkgICAgICAgPyBnZmNfY29udl9jb25zdGFudF90b190cmVlIChuLT5t ZW1zcGFjZV9zeW0tPnZhbHVlKQorCQkJICAgICAgIDogTlVMTF9UUkVFKTsKKwkgICAgICB0 cmVlIHRyYWl0cyA9IChuLT50cmFpdHNfc3ltCisJCQkgICAgID8gZ2ZjX3RyYW5zX29tcF92 YXJpYWJsZSAobi0+dHJhaXRzX3N5bSwgZmFsc2UpCisJCQkgICAgIDogTlVMTF9UUkVFKTsK KworCSAgICAgIHRyZWUgbmMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwg T01QX0NMQVVTRV9QUklWQVRFKTsKKwkgICAgICBPTVBfQ0xBVVNFX0RFQ0wgKG5jKSA9IGFs bG9jYXRvcjsKKwkgICAgICBvbXBfY2xhdXNlcyA9IGdmY190cmFuc19hZGRfY2xhdXNlIChu Yywgb21wX2NsYXVzZXMpOworCisJICAgICAgbmMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1 dF9sb2NhdGlvbiwKKwkJCQkgICAgIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKTsKKwkg ICAgICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19BTExPQ0FUT1IgKG5jKSA9IGFsbG9j YXRvcjsKKwkgICAgICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19NRU1TUEFDRSAobmMp ID0gbWVtc3BhY2U7CisJICAgICAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfVFJBSVRT IChuYykgPSB0cmFpdHM7CisJICAgICAgb21wX2NsYXVzZXMgPSBnZmNfdHJhbnNfYWRkX2Ns YXVzZSAobmMsIG9tcF9jbGF1c2VzKTsKKwkgICAgfQorCSAgYnJlYWs7CiAJZGVmYXVsdDoK IAkgIGJyZWFrOwogCX0KQEAgLTYwNzQsNiArNjEwNCw4IEBAIGdmY19zcGxpdF9vbXBfY2xh dXNlcyAoZ2ZjX2NvZGUgKmNvZGUsCiAJICAgID0gY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5k ZXZpY2U7CiAJICBjbGF1c2VzYVtHRkNfT01QX1NQTElUX1RBUkdFVF0udGhyZWFkX2xpbWl0 CiAJICAgID0gY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT50aHJlYWRfbGltaXQ7CisJICBjbGF1 c2VzYVtHRkNfT01QX1NQTElUX1RBUkdFVF0ubGlzdHNbT01QX0xJU1RfVVNFU19BTExPQ0FU T1JTXQorCSAgICA9IGNvZGUtPmV4dC5vbXBfY2xhdXNlcy0+bGlzdHNbT01QX0xJU1RfVVNF U19BTExPQ0FUT1JTXTsKIAkgIGZvciAoaW50IGkgPSAwOyBpIDwgT01QX0RFRkFVTFRNQVBf Q0FUX05VTTsgaSsrKQogCSAgICBjbGF1c2VzYVtHRkNfT01QX1NQTElUX1RBUkdFVF0uZGVm YXVsdG1hcFtpXQogCSAgICAgID0gY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5kZWZhdWx0bWFw W2ldOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHlwZXMuZGVmIGIvZ2NjL2ZvcnRyYW4v dHlwZXMuZGVmCmluZGV4IGNkNzlhZDQ1MTY3Li4xOGExYmVjODcyNCAxMDA2NDQKLS0tIGEv Z2NjL2ZvcnRyYW4vdHlwZXMuZGVmCisrKyBiL2djYy9mb3J0cmFuL3R5cGVzLmRlZgpAQCAt ODEsNiArODEsNyBAQCBERUZfRlVOQ1RJT05fVFlQRV8wIChCVF9GTl9VSU5ULCBCVF9VSU5U KQogREVGX0ZVTkNUSU9OX1RZUEVfMCAoQlRfRk5fVk9JRCwgQlRfVk9JRCkKIAogREVGX0ZV TkNUSU9OX1RZUEVfMSAoQlRfRk5fVk9JRF9QVFIsIEJUX1ZPSUQsIEJUX1BUUikKK0RFRl9G VU5DVElPTl9UWVBFXzEgKEJUX0ZOX1ZPSURfUFRSTU9ERSwgQlRfVk9JRCwgQlRfUFRSTU9E RSkKIERFRl9GVU5DVElPTl9UWVBFXzEgKEJUX0ZOX1ZPSURfUFRSUFRSLCBCVF9WT0lELCBC VF9QVFJfUFRSKQogREVGX0ZVTkNUSU9OX1RZUEVfMSAoQlRfRk5fVk9JRF9WUFRSLCBCVF9W T0lELCBCVF9WT0xBVElMRV9QVFIpCiBERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9GTl9JTlRf SU5ULCBCVF9JTlQsIEJUX0lOVCkKQEAgLTE1NCw2ICsxNTUsOCBAQCBERUZfRlVOQ1RJT05f VFlQRV8zIChCVF9GTl9WT0lEX1NJWkVfU0laRV9QVFIsIEJUX1ZPSUQsIEJUX1NJWkUsIEJU X1NJWkUsCiBERUZfRlVOQ1RJT05fVFlQRV8zIChCVF9GTl9VSU5UX1VJTlRfUFRSX1BUUiwg QlRfVUlOVCwgQlRfVUlOVCwgQlRfUFRSLCBCVF9QVFIpCiBERUZfRlVOQ1RJT05fVFlQRV8z IChCVF9GTl9QVFJfU0laRV9TSVpFX1BUUk1PREUsCiAJCSAgICAgQlRfUFRSLCBCVF9TSVpF LCBCVF9TSVpFLCBCVF9QVFJNT0RFKQorREVGX0ZVTkNUSU9OX1RZUEVfMyAoQlRfRk5fUFRS TU9ERV9QVFJNT0RFX0lOVF9QVFIsIEJUX1BUUk1PREUsIEJUX1BUUk1PREUsCisJCSAgICAg QlRfSU5ULCBCVF9QVFIpCiAKIERFRl9GVU5DVElPTl9UWVBFXzQgKEJUX0ZOX1ZPSURfT01Q Rk5fUFRSX1VJTlRfVUlOVCwKICAgICAgICAgICAgICAgICAgICAgIEJUX1ZPSUQsIEJUX1BU Ul9GTl9WT0lEX1BUUiwgQlRfUFRSLCBCVF9VSU5ULCBCVF9VSU5UKQpkaWZmIC0tZ2l0IGEv Z2NjL2dpbXBsaWZ5LmNjIGIvZ2NjL2dpbXBsaWZ5LmNjCmluZGV4IDI1ODg4MjRkY2UyLi4z ZTg1OGZhOTUxMiAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsaWZ5LmNjCisrKyBiL2djYy9naW1w bGlmeS5jYwpAQCAtOTE0OCw2ICs5MTQ4LDEwIEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVz ZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiAgIGhhc2hfbWFwPHRyZWVf b3BlcmFuZF9oYXNoLCB0cmVlPiAqc3RydWN0X21hcF90b19jbGF1c2UgPSBOVUxMOwogICBo YXNoX21hcDx0cmVlX29wZXJhbmRfaGFzaCwgdHJlZSAqPiAqc3RydWN0X3NlZW5fY2xhdXNl ID0gTlVMTDsKICAgaGFzaF9zZXQ8dHJlZT4gKnN0cnVjdF9kZXJlZl9zZXQgPSBOVUxMOwor CisgIGhhc2hfc2V0PHRyZWU+ICphbGxvY2F0ZV9jbGF1c2VzID0gTlVMTDsKKyAgaGFzaF9z ZXQ8dHJlZT4gKnVzZXNfYWxsb2NhdG9yc19hbGxvY2F0b3JzID0gTlVMTDsKKwogICB0cmVl ICpwcmV2X2xpc3RfcCA9IE5VTEwsICpvcmlnX2xpc3RfcCA9IGxpc3RfcDsKICAgaW50IGhh bmRsZWRfZGVwZW5kX2l0ZXJhdG9ycyA9IC0xOwogICBpbnQgbm93YWl0ID0gLTE7CkBAIC05 MTg1LDYgKzkxODksMTMgQEAgZ2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlz dF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKICAgICAgIHx8IGNvZGUgPT0gT01QX1RBUkdFVF9F WElUX0RBVEEpCiAgICAgb21wX3RhcmdldF9yZW9yZGVyX2NsYXVzZXMgKGxpc3RfcCk7CiAK KyAgaWYgKGNvZGUgPT0gT01QX1RBUkdFVAorICAgICAgJiYgKG9tcF9yZXF1aXJlc19tYXNr ICYgT01QX1JFUVVJUkVTX0RZTkFNSUNfQUxMT0NBVE9SUykgPT0gMCkKKyAgICB7CisgICAg ICBhbGxvY2F0ZV9jbGF1c2VzID0gbmV3IGhhc2hfc2V0PHRyZWU+ICgpOworICAgICAgdXNl c19hbGxvY2F0b3JzX2FsbG9jYXRvcnMgPSBuZXcgaGFzaF9zZXQ8dHJlZT4gKCk7CisgICAg fQorCiAgIHdoaWxlICgoYyA9ICpsaXN0X3ApICE9IE5VTEwpCiAgICAgewogICAgICAgYm9v bCByZW1vdmUgPSBmYWxzZTsKQEAgLTEwODg0LDYgKzEwODk1LDE4IEBAIGdpbXBsaWZ5X3Nj YW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiAJICAg IE9NUF9DTEFVU0VfQUxMT0NBVEVfQUxMT0NBVE9SIChjKQogCSAgICAgID0gZ2V0X2luaXRp YWxpemVkX3RtcF92YXIgKE9NUF9DTEFVU0VfQUxMT0NBVEVfQUxMT0NBVE9SIChjKSwKIAkJ CQkJIHByZV9wLCBOVUxMLCBmYWxzZSk7CisJICBpZiAoYWxsb2NhdGVfY2xhdXNlcworCSAg ICAgICYmIE9NUF9DTEFVU0VfQUxMT0NBVEVfQUxMT0NBVE9SIChjKQorCSAgICAgICYmIERF Q0xfUCAoT01QX0NMQVVTRV9BTExPQ0FURV9BTExPQ0FUT1IgKGMpKQorCSAgICAgICYmICFh bGxvY2F0ZV9jbGF1c2VzLT5jb250YWlucyAoYykpCisJICAgIGFsbG9jYXRlX2NsYXVzZXMt PmFkZCAoYyk7CisJICBicmVhazsKKworCWNhc2UgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRP UlM6CisJICBkZWNsID0gT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChj KTsKKwkgIGlmICh1c2VzX2FsbG9jYXRvcnNfYWxsb2NhdG9ycworCSAgICAgICYmICF1c2Vz X2FsbG9jYXRvcnNfYWxsb2NhdG9ycy0+Y29udGFpbnMgKGRlY2wpKQorCSAgICB1c2VzX2Fs bG9jYXRvcnNfYWxsb2NhdG9ycy0+YWRkIChkZWNsKTsKIAkgIGJyZWFrOwogCiAJY2FzZSBP TVBfQ0xBVVNFX0RFRkFVTFQ6CkBAIC0xMDkzNiw2ICsxMDk1OSwyNiBAQCBnaW1wbGlmeV9z Y2FuX29tcF9jbGF1c2VzICh0cmVlICpsaXN0X3AsIGdpbXBsZV9zZXEgKnByZV9wLAogCWxp c3RfcCA9ICZPTVBfQ0xBVVNFX0NIQUlOIChjKTsKICAgICB9CiAKKyAgaWYgKGNvZGUgPT0g T01QX1RBUkdFVAorICAgICAgJiYgKG9tcF9yZXF1aXJlc19tYXNrICYgT01QX1JFUVVJUkVT X0RZTkFNSUNfQUxMT0NBVE9SUykgPT0gMCkKKyAgICB7CisgICAgICBmb3IgKGhhc2hfc2V0 PHRyZWU+OjppdGVyYXRvciBpID0gYWxsb2NhdGVfY2xhdXNlcy0+YmVnaW4gKCk7CisJICAg aSAhPSBhbGxvY2F0ZV9jbGF1c2VzLT5lbmQgKCk7ICsraSkKKwl7CisJICB0cmVlIGFsbG9j YXRvciA9IE9NUF9DTEFVU0VfQUxMT0NBVEVfQUxMT0NBVE9SICgqaSk7CisJICBpZiAodXNl c19hbGxvY2F0b3JzX2FsbG9jYXRvcnMtPmNvbnRhaW5zIChhbGxvY2F0b3IpKQorCSAgICBj b250aW51ZTsKKworCSAgZXJyb3JfYXQgKE9NUF9DTEFVU0VfTE9DQVRJT04gKCppKSwKKwkJ ICAgICJhbGxvY2F0b3IgJTwlcUUlPmluICU8YWxsb2NhdGUlPiBjbGF1c2Ugb24gdGFyZ2V0 IHJlZ2lvbiAiCisJCSAgICAiaXMgbWlzc2luZyAlPHVzZXNfYWxsb2NhdG9ycyglRSklPiBj bGF1c2UiLAorCQkgICAgREVDTF9OQU1FIChhbGxvY2F0b3IpLCBERUNMX05BTUUgKGFsbG9j YXRvcikpOworCX0KKworICAgICAgZGVsZXRlIGFsbG9jYXRlX2NsYXVzZXM7CisgICAgICBk ZWxldGUgdXNlc19hbGxvY2F0b3JzX2FsbG9jYXRvcnM7CisgICAgfQorCiAgIGN0eC0+Y2xh dXNlcyA9ICpvcmlnX2xpc3RfcDsKICAgZ2ltcGxpZnlfb21wX2N0eHAgPSBjdHg7CiAgIGlm IChzdHJ1Y3Rfc2Vlbl9jbGF1c2UpCkBAIC0xNDE2NSw2ICsxNDIwOCw3MyBAQCBnaW1wbGlm eV9vbXBfd29ya3NoYXJlICh0cmVlICpleHByX3AsIGdpbXBsZV9zZXEgKnByZV9wKQogCSAg Ym9keSA9IE5VTEw7CiAJICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmYm9keSwgZyk7CiAJfQor ICAgICAgZWxzZSBpZiAoKG9ydCAmIE9SVF9UQVJHRVQpICE9IDAgJiYgKG9ydCAmIE9SVF9B Q0MpID09IDApCisJeworCSAgZ2ltcGxlX3NlcSBpbml0X3NlcSA9IE5VTEw7CisJICBnaW1w bGVfc2VxIGZpbmlfc2VxID0gTlVMTDsKKworCSAgdHJlZSBvbXBfaW5pdF9hbGxvY2F0b3Jf Zm4KKwkgICAgPSBidWlsdGluX2RlY2xfZXhwbGljaXQgKEJVSUxUX0lOX09NUF9JTklUX0FM TE9DQVRPUik7CisJICB0cmVlIG9tcF9kZXN0cm95X2FsbG9jYXRvcl9mbgorCSAgICA9IGJ1 aWx0aW5fZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5fT01QX0RFU1RST1lfQUxMT0NBVE9SKTsK KworCSAgZm9yICh0cmVlICpjcCA9ICZPTVBfQ0xBVVNFUyAoZXhwcik7ICpjcCAhPSBOVUxM OykKKwkgICAgaWYgKE9NUF9DTEFVU0VfQ09ERSAoKmNwKSA9PSBPTVBfQ0xBVVNFX1VTRVNf QUxMT0NBVE9SUykKKwkgICAgICB7CisJCXRyZWUgYyA9ICpjcDsKKwkJdHJlZSBhbGxvY2F0 b3IgPSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19BTExPQ0FUT1IgKGMpOworCQl0cmVl IG1lbXNwYWNlID0gT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpOwor CQl0cmVlIHRyYWl0cyA9IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoYyk7 CisJCXRyZWUgbnRyYWl0cworCQkgID0gKCh0cmFpdHMKKwkJICAgICAgJiYgREVDTF9JTklU SUFMICh0cmFpdHMpCisJCSAgICAgICYmIFRSRUVfQ09ERSAoREVDTF9JTklUSUFMICh0cmFp dHMpKSA9PSBDT05TVFJVQ1RPUikKKwkJICAgICA/IGJ1aWxkX2ludF9jc3QgKGludGVnZXJf dHlwZV9ub2RlLAorCQkJCSAgICAgIENPTlNUUlVDVE9SX05FTFRTIChERUNMX0lOSVRJQUwg KHRyYWl0cykpKQorCQkgICAgIDogaW50ZWdlcl96ZXJvX25vZGUpOworCQl0cmVlIHRyYWl0 c192YXIKKwkJICA9ICh0cmFpdHMgIT0gTlVMTF9UUkVFCisJCSAgICAgPyBnZXRfaW5pdGlh bGl6ZWRfdG1wX3ZhciAoREVDTF9JTklUSUFMICh0cmFpdHMpLAorCQkJCQkJJmluaXRfc2Vx LCBOVUxMKQorCQkgICAgIDogbnVsbF9wb2ludGVyX25vZGUpOworCisJCXRyZWUgbWVtc3Bh Y2VfdmFyID0gY3JlYXRlX3RtcF92YXIgKHBvaW50ZXJfc2l6ZWRfaW50X25vZGUsCisJCQkJ CQkgICAgIm1lbXNwYWNlX2VudW0iKTsKKwkJaWYgKG1lbXNwYWNlID09IE5VTExfVFJFRSkK KwkJICBtZW1zcGFjZSA9IGJ1aWxkX2ludF9jc3QgKHBvaW50ZXJfc2l6ZWRfaW50X25vZGUs IDApOworCQllbHNlCisJCSAgbWVtc3BhY2UgPSBmb2xkX2NvbnZlcnQgKHBvaW50ZXJfc2l6 ZWRfaW50X25vZGUsCisJCQkJCSAgIG1lbXNwYWNlKTsKKwkJZyA9IGdpbXBsZV9idWlsZF9h c3NpZ24gKG1lbXNwYWNlX3ZhciwgbWVtc3BhY2UpOworCQlnaW1wbGVfc2VxX2FkZF9zdG10 ICgmaW5pdF9zZXEsIGcpOworCisJCXRyZWUgaW5pdGNhbGwgPSBidWlsZF9jYWxsX2V4cHJf bG9jIChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwKKwkJCQkJCSAgICAgb21wX2luaXRfYWxs b2NhdG9yX2ZuLCAzLAorCQkJCQkJICAgICBtZW1zcGFjZV92YXIsCisJCQkJCQkgICAgIG50 cmFpdHMsCisJCQkJCQkgICAgIHRyYWl0c192YXIpOworCQlpbml0Y2FsbCA9IGZvbGRfY29u dmVydCAoVFJFRV9UWVBFIChhbGxvY2F0b3IpLCBpbml0Y2FsbCk7CisJCWdpbXBsaWZ5X2Fz c2lnbiAoYWxsb2NhdG9yLCBpbml0Y2FsbCwgJmluaXRfc2VxKTsKKworCQlnID0gZ2ltcGxl X2J1aWxkX2NhbGwgKG9tcF9kZXN0cm95X2FsbG9jYXRvcl9mbiwgMSwgYWxsb2NhdG9yKTsK KwkJZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmZpbmlfc2VxLCBnKTsKKworCQkvKiBGaW5pc2hl ZCBnZW5lcmF0aW5nIHJ1bnRpbWUgY2FsbHMsIHJlbW92ZSBVU0VTX0FMTE9DQVRPUlMKKwkJ ICAgY2xhdXNlLiAgKi8KKwkJKmNwID0gT01QX0NMQVVTRV9DSEFJTiAoYyk7CisJICAgICAg fQorCSAgICBlbHNlCisJICAgICAgY3AgPSAmT01QX0NMQVVTRV9DSEFJTiAoKmNwKTsKKwor CSAgaWYgKGZpbmlfc2VxKQorCSAgICB7CisJICAgICAgZ2JpbmQgKmJpbmQgPSBhc19hPGdi aW5kICo+IChnaW1wbGVfc2VxX2ZpcnN0X3N0bXQgKGJvZHkpKTsKKwkgICAgICBnID0gZ2lt cGxlX2J1aWxkX3RyeSAoZ2ltcGxlX2JpbmRfYm9keSAoYmluZCksCisJCQkJICAgIGZpbmlf c2VxLCBHSU1QTEVfVFJZX0ZJTkFMTFkpOworCSAgICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQg KCZpbml0X3NlcSwgZyk7CisJICAgICAgZ2ltcGxlX2JpbmRfc2V0X2JvZHkgKGJpbmQsIGlu aXRfc2VxKTsKKwkgICAgfQorCX0KICAgICB9CiAgIGVsc2UKICAgICBnaW1wbGlmeV9hbmRf YWRkIChPTVBfQk9EWSAoZXhwciksICZib2R5KTsKZGlmZiAtLWdpdCBhL2djYy9vbXAtYnVp bHRpbnMuZGVmIGIvZ2NjL29tcC1idWlsdGlucy5kZWYKaW5kZXggY2ZhNjQ4M2M3YWUuLmUz MTAzY2VhMWMzIDEwMDY0NAotLS0gYS9nY2Mvb21wLWJ1aWx0aW5zLmRlZgorKysgYi9nY2Mv b21wLWJ1aWx0aW5zLmRlZgpAQCAtNzYsNiArNzYsMTAgQEAgREVGX0dPTVBfQlVJTFRJTiAo QlVJTFRfSU5fT01QX0dFVF9URUFNX05VTSwgIm9tcF9nZXRfdGVhbV9udW0iLAogCQkgIEJU X0ZOX0lOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKIERFRl9HT01QX0JVSUxU SU4gKEJVSUxUX0lOX09NUF9HRVRfTlVNX1RFQU1TLCAib21wX2dldF9udW1fdGVhbXMiLAog CQkgIEJUX0ZOX0lOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01Q X0JVSUxUSU4gKEJVSUxUX0lOX09NUF9JTklUX0FMTE9DQVRPUiwgIm9tcF9pbml0X2FsbG9j YXRvciIsCisJCSAgQlRfRk5fUFRSTU9ERV9QVFJNT0RFX0lOVF9QVFIsIEFUVFJfTk9USFJP V19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9PTVBfREVTVFJPWV9B TExPQ0FUT1IsICJvbXBfZGVzdHJveV9hbGxvY2F0b3IiLAorCQkgIEJUX0ZOX1ZPSURfUFRS TU9ERSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKIAogREVGX0dPTVBfQlVJTFRJTiAoQlVJ TFRfSU5fR09NUF9BVE9NSUNfU1RBUlQsICJHT01QX2F0b21pY19zdGFydCIsCiAJCSAgQlRf Rk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL2dvbXAvdXNlc19hbGxvY2F0b3JzLTEuYyBiL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL2dvbXAvdXNlc19hbGxvY2F0b3JzLTEuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjk1NDFhYmQ1MjUKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3VzZXNfYWxsb2NhdG9y cy0xLmMKQEAgLTAsMCArMSw0NiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1bXAtdHJlZS1vcmlnaW5hbCAtZmR1bXAtdHJl ZS1naW1wbGUiIH0gKi8KKworI2luY2x1ZGUgPG9tcC5oPgorCitvbXBfYWxsb2N0cmFpdF9r ZXlfdCBrOworb21wX2FsbG9jdHJhaXRfdmFsdWVfdCB2OworCitpbnQgbWFpbiAodm9pZCkK K3sKKyAgb21wX2FsbG9jYXRvcl9oYW5kbGVfdCBmb28sIGJhcjsKKyAgY29uc3Qgb21wX2Fs bG9jdHJhaXRfdCBmb29fdHJhaXRzW10gPSB7IHsgb21wX2F0a19waW5uZWQsICAgIG9tcF9h dHZfdHJ1ZSB9LAorICAJCQkJCSAgeyBvbXBfYXRrX3BhcnRpdGlvbiwgb21wX2F0dl9uZWFy ZXN0IH0gfTsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0CisgICAgOworICAjcHJhZ21hIG9tcCB0 YXJnZXQgdXNlc19hbGxvY2F0b3JzIChiYXIpCisgICAgOworICAjcHJhZ21hIG9tcCB0YXJn ZXQgdXNlc19hbGxvY2F0b3JzIChmb28gKGZvb190cmFpdHMpKQorICAgIDsKKyAgI3ByYWdt YSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAoZm9vIChmb29fdHJhaXRzKSwgYmFyIChm b29fdHJhaXRzKSkKKyAgICA7CisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRv cnMgKG1lbXNwYWNlKG9tcF9oaWdoX2J3X21lbV9zcGFjZSkgOiBmb28pCisgICAgOworICAj cHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzICh0cmFpdHMoZm9vX3RyYWl0cykg OiBiYXIpCisgICAgOworICAjcHJhZ21hIG9tcCB0YXJnZXQgcGFyYWxsZWwgdXNlc19hbGxv Y2F0b3JzIChtZW1zcGFjZShvbXBfaGlnaF9id19tZW1fc3BhY2UpLCB0cmFpdHMoZm9vX3Ry YWl0cykgOiBiYXIpCisgICAgOworICAjcHJhZ21hIG9tcCB0YXJnZXQgcGFyYWxsZWwgdXNl c19hbGxvY2F0b3JzICh0cmFpdHMoZm9vX3RyYWl0cyksIG1lbXNwYWNlKG9tcF9oaWdoX2J3 X21lbV9zcGFjZSkgOiBiYXIpIHVzZXNfYWxsb2NhdG9ycyhmb28pCisgIHsKKyAgICB2b2lk ICpwID0gb21wX2FsbG9jICgodW5zaWduZWQgbG9uZykgMzIsIGJhcik7CisgICAgb21wX2Zy ZWUgKHAsIGJhcik7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQiICJvcmlnaW5hbCIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0IHByaXZh dGVcXChiYXJcXCkgdXNlc19hbGxvY2F0b3JzXFwoYmFyOiBtZW1zcGFjZVxcKFxcKSwgdHJh aXRzXFwoXFwpXFwpIiAib3JpZ2luYWwiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wICJwcmFnbWEgb21wIHRhcmdldCBwcml2YXRlXFwoZm9vXFwpIHVzZXNfYWxs b2NhdG9yc1xcKGZvbzogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKGZvb190cmFpdHNcXClc XCkiICJvcmlnaW5hbCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg InByYWdtYSBvbXAgdGFyZ2V0IHByaXZhdGVcXChiYXJcXCkgdXNlc19hbGxvY2F0b3JzXFwo YmFyOiBtZW1zcGFjZVxcKFxcKSwgdHJhaXRzXFwoZm9vX3RyYWl0c1xcKVxcKSBwcml2YXRl XFwoZm9vXFwpIHVzZXNfYWxsb2NhdG9yc1xcKGZvbzogbWVtc3BhY2VcXChcXCksIHRyYWl0 c1xcKGZvb190cmFpdHNcXClcXCkiICJvcmlnaW5hbCIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0IHByaXZhdGVcXChmb29cXCkg dXNlc19hbGxvY2F0b3JzXFwoZm9vOiBtZW1zcGFjZVxcKG9tcF9oaWdoX2J3X21lbV9zcGFj ZVxcKSwgdHJhaXRzXFwoXFwpXFwpIiAib3JpZ2luYWwiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wICJwcmFnbWEgb21wIHRhcmdldCBwcml2YXRlXFwoYmFyXFwp IHVzZXNfYWxsb2NhdG9yc1xcKGJhcjogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKGZvb190 cmFpdHNcXClcXCkiICJvcmlnaW5hbCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0IHByaXZhdGVcXChiYXJcXCkgdXNlc19hbGxv Y2F0b3JzXFwoYmFyOiBtZW1zcGFjZVxcKG9tcF9oaWdoX2J3X21lbV9zcGFjZVxcKSwgdHJh aXRzXFwoZm9vX3RyYWl0c1xcKVxcKSIgIm9yaWdpbmFsIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0ZVxcKGJhclxc KSB1c2VzX2FsbG9jYXRvcnNcXChiYXI6IG1lbXNwYWNlXFwob21wX2hpZ2hfYndfbWVtX3Nw YWNlXFwpLCB0cmFpdHNcXChmb29fdHJhaXRzXFwpXFwpIHByaXZhdGVcXChmb29cXCkgdXNl c19hbGxvY2F0b3JzXFwoZm9vOiBtZW1zcGFjZVxcKFxcKSwgdHJhaXRzXFwoXFwpXFwpIiAi b3JpZ2luYWwiIH0gfSAqLworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIl9fYnVpbHRpbl9vbXBfaW5pdF9hbGxvY2F0b3IiIDkgImdpbXBsZSIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIl9fYnVpbHRpbl9vbXBfZGVz dHJveV9hbGxvY2F0b3IiIDkgImdpbXBsZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3VzZXNfYWxsb2NhdG9ycy0yLmMgYi9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3VzZXNfYWxsb2NhdG9ycy0yLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc4YTJkNzg2MjQ4Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC91c2VzX2FsbG9jYXRv cnMtMi5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisKKyNp bmNsdWRlIDxvbXAuaD4KKworb21wX2FsbG9jdHJhaXRfa2V5X3QgazsKK29tcF9hbGxvY3Ry YWl0X3ZhbHVlX3QgdjsKKworaW50IG1haW4gKHZvaWQpCit7CisgIG9tcF9hbGxvY2F0b3Jf aGFuZGxlX3QgZm9vLCBiYXI7CisgIGNvbnN0IG9tcF9hbGxvY3RyYWl0X3QgdHJhaXRzX2Fy cmF5W10gPSB7IHsgb21wX2F0a19waW5uZWQsICAgIG9tcF9hdHZfdHJ1ZSB9LAorCQkJCQkg ICAgeyBvbXBfYXRrX3BhcnRpdGlvbiwgb21wX2F0dl9uZWFyZXN0IH0gfTsKKworICAjcHJh Z21hIG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzIChiYXopIC8qIHsgZGctZXJyb3IgIidi YXonIHVuZGVjbGFyZWQgLmZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uLiIgIiIgeyB0YXJn ZXQgYyB9IH0gKi8KKyAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB7IGRnLWVycm9yICInYmF6JyBoYXMgbm90IGJlZW4gZGVjbGFyZWQiICIiIHsgdGFy Z2V0IGMrKyB9IC4tMSB9ICovCisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRv cnMgKGZvbyAoeHl6KSkgLyogeyBkZy1lcnJvciAiJ3h5eicgdW5kZWNsYXJlZCAuZmlyc3Qg dXNlIGluIHRoaXMgZnVuY3Rpb24uIiAiIiB7IHRhcmdldCBjIH0gfSAqLworICAgIDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHsgZGctZXJyb3Ig Iid4eXonIGhhcyBub3QgYmVlbiBkZWNsYXJlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0xIH0g Ki8KKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAoZm9vICh0cmFpdHNf YXJyYXkpLCBiYXogKHRyYWl0c19hcnJheSkpIC8qIHsgZGctZXJyb3IgIidiYXonIGhhcyBu b3QgYmVlbiBkZWNsYXJlZCIgIiIgeyB0YXJnZXQgYysrIH0gfSAqLworICAgIDsKKyAgI3By YWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAobWVtc3BhY2Uob21wX25vX3N1Y2hf c3BhY2UpIDogZm9vKSAvKiB7IGRnLWVycm9yICInb21wX25vX3N1Y2hfc3BhY2UnIHVuZGVj bGFyZWQgLmZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uLiIgIiIgeyB0YXJnZXQgYyB9IH0g Ki8KKyAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB7IGRnLWVycm9yICInb21wX25vX3N1Y2hfc3Bh Y2UnIGhhcyBub3QgYmVlbiBkZWNsYXJlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0xIH0gKi8K KyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAobWVtc3BhY2UoMSkgOiBm b28pIC8qIHsgZGctZXJyb3IgImV4cGVjdGVkICdcXFwpJyBiZWZvcmUgbnVtZXJpYyBjb25z dGFudCIgfSAqLworICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogeyBkZy1lcnJvciAiZXhwZWN0ZWQgJyNwcmFnbWEgb21wJyBj bGF1c2UgYmVmb3JlICc6JyB0b2tlbiIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLwor ICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzIChtZW1zcGFjZShvbXBfbm9f c3VjaF9zcGFjZSkgOiBmb28sIGJhcikgLyogeyBkZy1lcnJvciAibW9kaWZpZXJzIGNhbiBv bmx5IGJlIHVzZWQgd2l0aCBhIHNpbmdsZSBhbGxvY2F0b3IgaW4gJ3VzZXNfYWxsb2NhdG9y cycgY2xhdXNlIiB9ICovCisgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB7IGRnLWVycm9y ICJtZW1zcGFjZSBtb2RpZmllciBtdXN0IGJlIGNvbnN0YW50IGVudW0gb2YgJ29tcF9tZW1z cGFjZV9oYW5kbGVfdCcgdHlwZSIgIiIgeyB0YXJnZXQgYyB9IC4tMSB9ICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB7IGRnLWVycm9yICInb21wX25vX3N1Y2hfc3BhY2UnIGhh cyBub3QgYmVlbiBkZWNsYXJlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0yIH0gKi8KKyAgI3By YWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAodHJhaXRzKHh5eikgOiBiYXIpIC8q IHsgZGctZXJyb3IgInRyYWl0cyBhcnJheSBtdXN0IGJlIG9mICdjb25zdCBvbXBfYWxsb2N0 cmFpdF90IFxcXFtcXFxdJyB0eXBlIiAiIiB7IHRhcmdldCBjIH0gfSAqLworICAgIDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeyBk Zy1lcnJvciAiJ3h5eicgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIiAiIiB7IHRhcmdldCBjKysg fSAuLTEgfSAqLworICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzIChtZW1z cGFjZShvbXBfaGlnaF9id19tZW1fc3BhY2UpLCB0cmFpdHModHJhaXRzX2FycmF5KSwgbWVt c3BhY2UgKG9tcF9ub19zdWNoX3NwYWNlKSA6IGJhcikgLyogeyBkZy1lcnJvciAiZXhwZWN0 ZWQgJzonIGJlZm9yZSAnLCcgdG9rZW4iIH0gKi8KKyAgICA7CisgICNwcmFnbWEgb21wIHRh cmdldCB1c2VzX2FsbG9jYXRvcnMgKHRyYWl0eih0cmFpdHNfYXJyYXkpLCBtZW1zcGFjZShv bXBfaGlnaF9id19tZW1fc3BhY2UpIDogYmFyKSAvKiB7IGRnLWVycm9yICIndHJhaXR6JyB1 bmRlY2xhcmVkIiAiIiB7IHRhcmdldCBjIH0gfSAqLworICAgIDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogeyBkZy1lcnJvciAiJ21lbXNwYWNlJyB1bmRl Y2xhcmVkIiAiIiB7IHRhcmdldCBjIH0gLi0xIH0gKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHsgZGctZXJyb3IgImV4cGVjdGVkICdcXFwp JyBiZWZvcmUgJzonIHRva2VuIiAiIiB7IHRhcmdldCBjIH0gLi0yIH0gKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHsgZGctZXJyb3IgIid0 cmFpdHonIGhhcyBub3QgYmVlbiBkZWNsYXJlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0zIH0g Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHsg ZGctZXJyb3IgIidtZW1zcGFjZScgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIiAiIiB7IHRhcmdl dCBjKysgfSAuLTQgfSAqLworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC91c2VzX2FsbG9jYXRvcnMtMS5mOTAgYi9nY2MvdGVz dHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvdXNlc19hbGxvY2F0b3JzLTEuZjkwCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40Y2E3NmU3MDA0YwotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC91c2VzX2FsbG9jYXRv cnMtMS5mOTAKQEAgLTAsMCArMSw1MyBAQAorISB7IGRnLWRvIGNvbXBpbGUgfQorISB7IGRn LWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZkdW1wLXRyZWUtb3JpZ2luYWwgLWZkdW1wLXRyZWUt Z2ltcGxlIiB9CisKK3Byb2dyYW0gbWFpbgorICB1c2Ugb21wX2xpYgorICBpbXBsaWNpdCBu b25lCisgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IGFycig6KQorICBpbnRlZ2VyIChvbXBf YWxsb2NhdG9yX2hhbmRsZV9raW5kKSA6OiBiYXIsIGZvbworCisgIHR5cGUgKG9tcF9hbGxv Y3RyYWl0KSwgcGFyYW1ldGVyIDo6IHRyYWl0c19hcnJheSgqKSA9ICYKKyAgICAgICBbb21w X2FsbG9jdHJhaXQob21wX2F0a19waW5uZWQsb21wX2F0dl90cnVlKSwmCisgICAgICAgb21w X2FsbG9jdHJhaXQob21wX2F0a19wYXJ0aXRpb24sb21wX2F0dl9uZWFyZXN0KV0KKworICAh JG9tcCB0YXJnZXQgYWxsb2NhdGUoYmFyIDogYXJyKSB1c2VzX2FsbG9jYXRvcnMoYmFyKQor ICBibG9jaworICAgIGFsbG9jYXRlKGFycigxMDApKQorICBlbmQgYmxvY2sKKworICAhJG9t cCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzKG9tcF9kZWZhdWx0X21lbV9hbGxvYykKKyAgYmxv Y2sKKyAgZW5kIGJsb2NrCisKKyAgISRvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyhiYXIo dHJhaXRzX2FycmF5KSwgZm9vICh0cmFpdHNfYXJyYXkpKQorICBibG9jaworICBlbmQgYmxv Y2sKKworICAhJG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzKHRyYWl0cyh0cmFpdHNfYXJy YXkpIDogYmFyKQorICBibG9jaworICBlbmQgYmxvY2sKKworICAhJG9tcCB0YXJnZXQgcGFy YWxsZWwgdXNlc19hbGxvY2F0b3JzKG1lbXNwYWNlIChvbXBfbG93X2xhdF9tZW1fc3BhY2Up IDogYmFyKQorICBibG9jaworICBlbmQgYmxvY2sKKworICAhJG9tcCB0YXJnZXQgcGFyYWxs ZWwgdXNlc19hbGxvY2F0b3JzKG1lbXNwYWNlIChvbXBfaGlnaF9id19tZW1fc3BhY2UpLCB0 cmFpdHModHJhaXRzX2FycmF5KSA6IGJhcikKKyAgYmxvY2sKKyAgICB1c2UgaXNvX2NfYmlu ZGluZworICAgIHR5cGUoY19wdHIpIDo6IHB0cgorICAgIGludGVnZXIoY19zaXplX3QpIDo6 IHN6ID0gMzIKKyAgICBwdHIgPSBvbXBfYWxsb2MgKHN6LCBiYXIpCisgICAgY2FsbCBvbXBf ZnJlZSAocHRyLCBiYXIpCisgIGVuZCBibG9jaworCitlbmQgcHJvZ3JhbSBtYWluCisKKyEg eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFnbWEgb21wIHRhcmdldCBhbGxvY2F0 ZVxcKGFsbG9jYXRvclxcKGJhclxcKTphcnJcXCkgcHJpdmF0ZVxcKGJhclxcKSB1c2VzX2Fs bG9jYXRvcnNcXChiYXI6IG1lbXNwYWNlXFwoXFwpLCB0cmFpdHNcXChcXClcXCkiICJvcmln aW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0 YXJnZXQiICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAi cHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0ZVxcKGZvb1xcKSB1c2VzX2FsbG9jYXRvcnNcXChm b286IG1lbXNwYWNlXFwoXFwpLCB0cmFpdHNcXCh0cmFpdHNfYXJyYXlcXClcXCkgcHJpdmF0 ZVxcKGJhclxcKSB1c2VzX2FsbG9jYXRvcnNcXChiYXI6IG1lbXNwYWNlXFwoXFwpLCB0cmFp dHNcXCh0cmFpdHNfYXJyYXlcXClcXCkiICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0ZVxcKGJhclxcKSB1 c2VzX2FsbG9jYXRvcnNcXChiYXI6IG1lbXNwYWNlXFwoXFwpLCB0cmFpdHNcXCh0cmFpdHNf YXJyYXlcXClcXCkiICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0ZVxcKGJhclxcKSB1c2VzX2FsbG9jYXRv cnNcXChiYXI6IG1lbXNwYWNlXFwoLlxcKSwgdHJhaXRzXFwoXFwpXFwpIiAib3JpZ2luYWwi IH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0 IHByaXZhdGVcXChiYXJcXCkgdXNlc19hbGxvY2F0b3JzXFwoYmFyOiBtZW1zcGFjZVxcKC5c XCksIHRyYWl0c1xcKHRyYWl0c19hcnJheVxcKVxcKSIgIm9yaWdpbmFsIiB9IH0KKyEgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJfX2J1aWx0aW5fb21wX2luaXRfYWxs b2NhdG9yIiA2ICJnaW1wbGUiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgIl9fYnVpbHRpbl9vbXBfZGVzdHJveV9hbGxvY2F0b3IiIDYgImdpbXBsZSIgfSB9 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvdXNlc19hbGxv Y2F0b3JzLTIuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3VzZXNfYWxs b2NhdG9ycy0yLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NTMwZDYwNDkwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2dvbXAvdXNlc19hbGxvY2F0b3JzLTIuZjkwCkBAIC0wLDAgKzEsNDQgQEAKKyEgeyBk Zy1kbyBjb21waWxlIH0KKworcHJvZ3JhbSBtYWluCisgIHVzZSBvbXBfbGliCisgIGltcGxp Y2l0IG5vbmUKKyAgaW50ZWdlciAob21wX2FsbG9jYXRvcl9oYW5kbGVfa2luZCkgOjogYmFy LCBmb28KKworICB0eXBlIChvbXBfYWxsb2N0cmFpdCksIHBhcmFtZXRlciA6OiB0cmFpdHNf YXJyYXkoKikgPSAmCisgICAgICAgW29tcF9hbGxvY3RyYWl0KG9tcF9hdGtfcGlubmVkLG9t cF9hdHZfdHJ1ZSksJgorICAgICAgIG9tcF9hbGxvY3RyYWl0KG9tcF9hdGtfcGFydGl0aW9u LG9tcF9hdHZfbmVhcmVzdCldCisKKyAgISRvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyhv bXBfbm9uX2V4aXN0YW50X2FsbG9jKSAhIHsgZGctZXJyb3IgIidvbXBfbm9uX2V4aXN0YW50 X2FsbG9jJyBhdCAuMS4gbXVzdCBiZSBpbnRlZ2VyIG9mICdvbXBfYWxsb2NhdG9yX2hhbmRs ZV9raW5kJyBraW5kIiB9CisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEkb21wIHRhcmdl dCB1c2VzX2FsbG9jYXRvcnMoYmFyKHRyYWl0c19hcnJheSksIGZvbyAodHJhaXRzX2FycmF5 KSwgKSAhIHsgZGctZXJyb3IgIkV4cGVjdGVkIG5hbWUgb2YgYWxsb2NhdG9yIGF0IC4xLiIg fQorICBibG9jaworICBlbmQgYmxvY2sKKworICAhJG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0 b3JzKHRyYWl0cyh4eXopIDogYmFyKSAhIHsgZGctZXJyb3IgIid4eXonIGF0IC4xLiBtdXN0 IGJlIG9mIGNvbnN0YW50ICd0eXBlLm9tcF9hbGxvY3RyYWl0LicgYXJyYXkgdHlwZSBhbmQg aGF2ZSBhIGNvbnN0YW50IGluaXRpYWxpemVyIiB9CisgIGJsb2NrCisgIGVuZCBibG9jawor CisgICEkb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMobWVtc3BhY2Uob21wX25vbl9leGlz dGFudF9tZW1fc3BhY2UpIDogZm9vKSAhIHsgZGctZXJyb3IgIidvbXBfbm9uX2V4aXN0YW50 X21lbV9zcGFjZScgYXQgLjEuIGlzIG5vdCBhIHByZS1kZWZpbmVkIG1lbW9yeSBzcGFjZSBu YW1lIiB9CisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEkb21wIHRhcmdldCB1c2VzX2Fs bG9jYXRvcnModHJhaXRzKHRyYWl0c19hcnJheSksIHRyYWl0cyh0cmFpdHNfYXJyYXkpIDog YmFyKSAhIHsgZGctZXJyb3IgIk11bHRpcGxlIHRyYWl0cyBtb2RpZmllcnMgYXQgLjEuIiB9 CisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEkb21wIHRhcmdldCB1c2VzX2FsbG9jYXRv cnMobWVtc3BhY2Uob21wX2RlZmF1bHRfbWVtX3NwYWNlKSwgbWVtc3BhY2Uob21wX2RlZmF1 bHRfbWVtX3NwYWNlKSA6IGZvbykgISB7IGRnLWVycm9yICJNdWx0aXBsZSBtZW1zcGFjZSBt b2RpZmllcnMgYXQgLjEuIiB9CisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEkb21wIHRh cmdldCB1c2VzX2FsbG9jYXRvcnMobWVtc3BhY2Uob21wX2RlZmF1bHRfbWVtX3NwYWNlKSwg dHJhaXRzKHRyYWl0c19hcnJheSksIHRyYWl0cyh0cmFpdHNfYXJyYXkpIDogZm9vKSAhIHsg ZGctZXJyb3IgIk9ubHkgdHdvIG1vZGlmaWVycyBhcmUgYWxsb3dlZCBvbiAndXNlc19hbGxv Y2F0b3JzJyBjbGF1c2UgYXQgLjEuIiB9CisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEk b21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMobWVtc3BhY2Uob21wX2RlZmF1bHRfbWVtX3Nw YWNlKSwgdHJhaXRzKHRyYWl0c19hcnJheSkgOiBmb28sIGJhcikgISB7IGRnLWVycm9yICJX aGVuIHVzaW5nIG1vZGlmaWVycywgb25seSBhIHNpbmdsZSBhbGxvY2F0b3IgY2FuIGJlIHNw ZWNpZmllZCBpbiBlYWNoICd1c2VzX2FsbG9jYXRvcnMnIGNsYXVzZSBhdCAuMS4iIH0KKyAg YmxvY2sKKyAgZW5kIGJsb2NrCisKK2VuZCBwcm9ncmFtIG1haW4KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC91c2VzX2FsbG9jYXRvcnMtMy5mOTAgYi9n Y2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvdXNlc19hbGxvY2F0b3JzLTMuZjkwCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNjRjY2Y0NTViMQotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC91c2VzX2Fs bG9jYXRvcnMtMy5mOTAKQEAgLTAsMCArMSwxNCBAQAorISB7IGRnLWRvIGNvbXBpbGUgfQor Citwcm9ncmFtIG1haW4KKyAgdXNlIG9tcF9saWIKKyAgaW1wbGljaXQgbm9uZQorICBpbnRl Z2VyLCBhbGxvY2F0YWJsZSA6OiBhcnIoOikKKyAgaW50ZWdlciAob21wX2FsbG9jYXRvcl9o YW5kbGVfa2luZCkgOjogYmFyCisKKyAgISRvbXAgdGFyZ2V0IGFsbG9jYXRlKGJhciA6IGFy cikgISB7IGRnLWVycm9yICJhbGxvY2F0b3IgJydiYXInJ2luICdhbGxvY2F0ZScgY2xhdXNl IG9uIHRhcmdldCByZWdpb24gaXMgbWlzc2luZyAndXNlc19hbGxvY2F0b3JzLmJhci4nIGNs YXVzZSIgfQorICBibG9jaworICAgIGFsbG9jYXRlKGFycigxMDApKQorICBlbmQgYmxvY2sK KworZW5kIHByb2dyYW0gbWFpbgpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtY29yZS5oIGIvZ2Nj L3RyZWUtY29yZS5oCmluZGV4IGYxYzJiNjQxM2EzLi43YWMwYjQ3YWMyZCAxMDA2NDQKLS0t IGEvZ2NjL3RyZWUtY29yZS5oCisrKyBiL2djYy90cmVlLWNvcmUuaApAQCAtNTIyLDYgKzUy Miw5IEBAIGVudW0gb21wX2NsYXVzZV9jb2RlIHsKIAogICAvKiBPcGVuQUNDIGNsYXVzZTog bm9ob3N0LiAgKi8KICAgT01QX0NMQVVTRV9OT0hPU1QsCisKKyAgLyogT3Blbk1QIGNsYXVz ZTogdXNlc19hbGxvY2F0b3JzLiAgKi8KKyAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlMs CiB9OwogCiAjdW5kZWYgREVGVFJFRVNUUlVDVApkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtcHJl dHR5LXByaW50LmNjIGIvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNjCmluZGV4IDk5YWY5Nzc5 NzlkLi5hNDZkYjAyNDE1NyAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNj CisrKyBiL2djYy90cmVlLXByZXR0eS1wcmludC5jYwpAQCAtNzY5LDYgKzc2OSwyMCBAQCBk dW1wX29tcF9jbGF1c2UgKHByZXR0eV9wcmludGVyICpwcCwgdHJlZSBjbGF1c2UsIGludCBz cGMsIGR1bXBfZmxhZ3NfdCBmbGFncykKICAgICAgIHBwX3JpZ2h0X3BhcmVuIChwcCk7CiAg ICAgICBicmVhazsKIAorICAgIGNhc2UgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlM6Cisg ICAgICBwcF9zdHJpbmcgKHBwLCAidXNlc19hbGxvY2F0b3JzKCIpOworICAgICAgZHVtcF9n ZW5lcmljX25vZGUgKHBwLCBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19BTExPQ0FUT1Ig KGNsYXVzZSksCisJCQkgc3BjLCBmbGFncywgZmFsc2UpOworICAgICAgcHBfc3RyaW5nIChw cCwgIjogbWVtc3BhY2UoIik7CisgICAgICBkdW1wX2dlbmVyaWNfbm9kZSAocHAsIE9NUF9D TEFVU0VfVVNFU19BTExPQ0FUT1JTX01FTVNQQUNFIChjbGF1c2UpLAorCQkJIHNwYywgZmxh Z3MsIGZhbHNlKTsKKyAgICAgIHBwX3N0cmluZyAocHAsICIpLCB0cmFpdHMoIik7CisgICAg ICBkdW1wX2dlbmVyaWNfbm9kZSAocHAsIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX1RS QUlUUyAoY2xhdXNlKSwKKwkJCSBzcGMsIGZsYWdzLCBmYWxzZSk7CisgICAgICBwcF9yaWdo dF9wYXJlbiAocHApOworICAgICAgcHBfcmlnaHRfcGFyZW4gKHBwKTsKKyAgICAgIGJyZWFr OworCiAgICAgY2FzZSBPTVBfQ0xBVVNFX0FGRklOSVRZOgogICAgICAgcHBfc3RyaW5nIChw cCwgImFmZmluaXR5KCIpOwogICAgICAgewpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUuY2MgYi9n Y2MvdHJlZS5jYwppbmRleCA0Y2YzNzg1MjcwYi4uOTczYTgzNjYzNzIgMTAwNjQ0Ci0tLSBh L2djYy90cmVlLmNjCisrKyBiL2djYy90cmVlLmNjCkBAIC0zNDksNiArMzQ5LDcgQEAgdW5z aWduZWQgY29uc3QgY2hhciBvbXBfY2xhdXNlX251bV9vcHNbXSA9CiAgIDAsIC8qIE9NUF9D TEFVU0VfSUZfUFJFU0VOVCAqLwogICAwLCAvKiBPTVBfQ0xBVVNFX0ZJTkFMSVpFICovCiAg IDAsIC8qIE9NUF9DTEFVU0VfTk9IT1NUICovCisgIDMsIC8qIE9NUF9DTEFVU0VfVVNFU19B TExPQ0FUT1JTICovCiB9OwogCiBjb25zdCBjaGFyICogY29uc3Qgb21wX2NsYXVzZV9jb2Rl X25hbWVbXSA9CkBAIC00MzksNiArNDQwLDcgQEAgY29uc3QgY2hhciAqIGNvbnN0IG9tcF9j bGF1c2VfY29kZV9uYW1lW10gPQogICAiaWZfcHJlc2VudCIsCiAgICJmaW5hbGl6ZSIsCiAg ICJub2hvc3QiLAorICAidXNlc19hbGxvY2F0b3JzIiwKIH07CiAKIC8qIFVubGVzcyBzcGVj aWZpYyB0byBPcGVuQUNDLCB3ZSB0ZW5kIHRvIGludGVybmFsbHkgbWFpbnRhaW4gT3Blbk1Q LWNlbnRyaWMKZGlmZiAtLWdpdCBhL2djYy90cmVlLmggYi9nY2MvdHJlZS5oCmluZGV4IDg4 NDQ0NzFlOWE1Li5iZmUyY2Q4MjIzMiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUuaAorKysgYi9n Y2MvdHJlZS5oCkBAIC0xODI0LDYgKzE4MjQsMTUgQEAgY2xhc3MgYXV0b19zdXBwcmVzc19s b2NhdGlvbl93cmFwcGVycwogI2RlZmluZSBPTVBfQ0xBVVNFX0FMTE9DQVRFX0NPTUJJTkVE KE5PREUpIFwKICAgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVT RV9BTExPQ0FURSktPmJhc2UucHVibGljX2ZsYWcpCiAKKyNkZWZpbmUgT01QX0NMQVVTRV9V U0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SKE5PREUpIFwKKyAgT01QX0NMQVVTRV9PUEVSQU5E IChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfVVNFU19BTExP Q0FUT1JTKSwgMCkKKworI2RlZmluZSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19NRU1T UEFDRShOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RF X0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUyksIDEpCisKKyNkZWZp bmUgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfVFJBSVRTKE5PREUpIFwKKyAgT01QX0NM QVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFV U0VfVVNFU19BTExPQ0FUT1JTKSwgMikKKwogI2RlZmluZSBPTVBfQ0xBVVNFX05VTV9URUFN U19VUFBFUl9FWFBSKE5PREUpIFwKICAgT01QX0NMQVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNF X1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfTlVNX1RFQU1TKSwgMCkKIAo= --------------yPYcqqR3RXNJ1ixH4B0PkKs8--