From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x531.google.com (mail-pg1-x531.google.com [IPv6:2607:f8b0:4864:20::531]) by sourceware.org (Postfix) with ESMTPS id 38BF93858C55; Sun, 3 Mar 2024 16:04:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 38BF93858C55 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 38BF93858C55 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::531 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709481870; cv=none; b=JXqIQuoDiiYfHala3mrc6tQtPvkGgs3DGwJGB4gSM8sDtlvJnJRWqkgelYXuvDMciIAoTnKLVj+Sk8owXXSu24PKMvYf9lvwCtHFNpQXWuh8RCCjpWfI8SEtAFNhwctuRRZMGlQNWo7ryuh/Yepr/fECfCqiEt5Zbr3l7+oDfNE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709481870; c=relaxed/simple; bh=5g9X5SbKFg3eBT682xNXHeI61XJy97y0p7VR8ZHqCXc=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=pb6DmGERv+K3/4BtxIk/r0MskUMMWmoCrNdoPqmSyGWndn9aem0LQPYwCGSBW2jvXvvoFTNFw1N/IqEiTyMC95S8CukbUaszAx015dMX9I8cFs6x5GW11o+UG2BsxCGLh1p4wn6BIW4AUOeLrtyRJueiD7UOBljJzKJYerOmyiA= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pg1-x531.google.com with SMTP id 41be03b00d2f7-5d4a1e66750so2774365a12.0; Sun, 03 Mar 2024 08:04:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709481862; x=1710086662; darn=gcc.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=B20eKtoF17Dw8mzWMNl9MfkZGHtNdwemry8sOuHOgaw=; b=ZnnlnQsD/IEnLpXwJa1xkEYEn4he06XsCUKM5GrerxcJjlOzW8tHNgi9AAofgIei2+ Pp4JF2gnSLt2JA7BLVD5T4UM8YtnNlO0lCsEQ7hV0/4V4bgoDHyfxARp9E69SNXTiB3B KVItiBk/Y4eYsgxreVCDJTrkRTeQ/+hJ4SOu9uzdyhgjGV9DbEquSaqLu1abzaq6Y2Y3 9g+62emY3yuTnsn/CRpFdg2Eu5Ej5L+GEZSsQe2izdBJZGUsC6E55nDFOV+iXXqoJDgC W2nDvRSDnt5gKSUxDgj2NzHCeYQu0tRozX/snd3PNcKaOsQfBfPXYo35WyNonncwLUTN 3BNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709481862; x=1710086662; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=B20eKtoF17Dw8mzWMNl9MfkZGHtNdwemry8sOuHOgaw=; b=xDchqaXnnfln7wL2+Qn4louQ5EB1MsTrQGdy/Zi+9CKTLxDAditJ1skL7+xDTpkjhb tcGmUyIZazaQ0jP2RIINDuauHRoDOn797MrYs1YW2DkuooXIkfNUBx7dgVkoU3jJcOKr jOArz8ZFK1ZODMivB7zD4JrO94Slci/xjShPritC4zWvGLVGSWNMqvumgzYz5hkF5Xhw C3qhqootrm+GdQtlET7ln83KMMGqffH5T7BP0c9uytCU712HHCHj+AkCqaqwE7uVtkjR 8BZ8GLQS3epbPoTrsUh9tj7BA/lNRh2A0DdggouyQrVzmKZs6t2B+vGDgGDY7c5wLFU3 MkiQ== X-Forwarded-Encrypted: i=1; AJvYcCXshVBqLaOSOuG/jzc2er26IqlDcl0i+EJ54pGNMLMab5b+ysXiFK9YRSFdsO41o/GrYAXotmo3/YJ1D2ZqV52iotAGWAQafA== X-Gm-Message-State: AOJu0Yz+2hDZUqy2rlU709owKZi5uLu5b72ehIsVCUU19yZHkqqJgc8g 05dU5b1NzOEFkr+ra3/02JBjf2MFYqn+vY01NrSks4YM5BTid9AY353hUFesxoIPOJezL9ZJiNV msU5UJ4/G0F6zxK+c3ZE8YiYWTqI= X-Google-Smtp-Source: AGHT+IEXbPDDYlAhnSQQSi3NxU/Fbfxs8xdXajUxwUF6F0G8R0ud5n15DDiEN8XlTo+QuhvowBR/KWrn7Y3UVd5c4gM= X-Received: by 2002:a05:6a21:3482:b0:1a1:4c7b:43d2 with SMTP id yo2-20020a056a21348200b001a14c7b43d2mr886782pzb.40.1709481861934; Sun, 03 Mar 2024 08:04:21 -0800 (PST) MIME-Version: 1.0 References: <674cfbf0-a95d-4433-a025-29e78dc0bcef@gmx.de> In-Reply-To: <674cfbf0-a95d-4433-a025-29e78dc0bcef@gmx.de> From: Paul Richard Thomas Date: Sun, 3 Mar 2024 16:04:10 +0000 Message-ID: Subject: Re: [Patch, fortran PR89645/99065 No IMPLICIT type error with: ASSOCIATE( X => function() ) To: Harald Anlauf Cc: "fortran@gcc.gnu.org" , gcc-patches , Steve Kargl Content-Type: multipart/mixed; boundary="000000000000219c820612c3c3d3" X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,HTML_MESSAGE,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_FILL_THIS_FORM_SHORT,T_SCC_BODY_TEXT_LINE,URIBL_BLACK,WEIRD_PORT autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000219c820612c3c3d3 Content-Type: multipart/alternative; boundary="000000000000219c810612c3c3d1" --000000000000219c810612c3c3d1 Content-Type: text/plain; charset="UTF-8" Hi Harald, Please find an updated version of the patch that rolls in Steve's patch for PR114141, fixes unlimited polymorphic function selectors and cures the memory leaks. I apologise for not working on this sooner but, as I informed you, I have been away for an extended trip to Australia. The chunks that fix PR114141 are picked out in comment 14 to the PR and the cures to the problems that you found in the first review are found at trans-stmt.cc:2047-49. Regtests fine. OK for trunk, bearing in mind that most of the patch is ring fenced by the inferred_type flag? Cheers Paul On Mon, 8 Jan 2024 at 21:53, Harald Anlauf wrote: > Hi Paul, > > your patch looks already very impressive! > > Regarding the patch as is, I am still trying to grok it, even with your > explanations at hand... > > While the testcase works as advertised, I noticed that it exhibits a > runtime memleak that occurs for (likely) each case where the associate > target is an allocatable, class-valued function result. > > I tried to produce a minimal testcase using class(*), which apparently > is not handled by your patch (it ICEs for me): > > program p > implicit none > class(*), allocatable :: x(:) > x = foo() > call prt (x) > deallocate (x) > ! up to here no memleak... > associate (var => foo()) > call prt (var) > end associate > contains > function foo() result(res) > class(*), allocatable :: res(:) > res = [42] > end function foo > subroutine prt (x) > class(*), intent(in) :: x(:) > select type (x) > type is (integer) > print *, x > class default > stop 99 > end select > end subroutine prt > end > > Traceback (truncated): > > foo.f90:9:18: > > 9 | call prt (var) > | 1 > internal compiler error: tree check: expected record_type or union_type > or qual_union_type, have function_type in gfc_class_len_get, at > fortran/trans-expr.cc:271 > 0x19fd5d5 tree_check_failed(tree_node const*, char const*, int, char > const*, ...) > ../../gcc-trunk/gcc/tree.cc:8952 > 0xe1562d tree_check3(tree_node*, char const*, int, char const*, > tree_code, tree_code, tree_code) > ../../gcc-trunk/gcc/tree.h:3652 > 0xe3e264 gfc_class_len_get(tree_node*) > ../../gcc-trunk/gcc/fortran/trans-expr.cc:271 > 0xecda48 trans_associate_var > ../../gcc-trunk/gcc/fortran/trans-stmt.cc:2325 > 0xecdd09 gfc_trans_block_construct(gfc_code*) > ../../gcc-trunk/gcc/fortran/trans-stmt.cc:2383 > [...] > > I don't see anything wrong with it: NAG groks it, like Nvidia and Flang, > while Intel crashes at runtime. > > Can you have another brief look? > > Thanks, > Harald > > > On 1/6/24 18:26, Paul Richard Thomas wrote: > > These PRs come about because of gfortran's single pass parsing. If the > > function in the title is parsed after the associate construct, then its > > type and rank are not known. The point at which this becomes a problem is > > when expressions within the associate block are parsed. primary.cc > > (gfc_match_varspec) could already deal with intrinsic types and so > > component references were the trigger for the problem. > > > > The two major parts of this patch are the fixup needed in > gfc_match_varspec > > and the resolution of expressions with references in resolve.cc > > (gfc_fixup_inferred_type_refs). The former relies on the two new > functions > > in symbol.cc to search for derived types with an appropriate component to > > match the component reference and then set the associate name to have a > > matching derived type. gfc_fixup_inferred_type_refs is called in > resolution > > and so the type of the selector function is known. > > gfc_fixup_inferred_type_refs ensures that the component references use > this > > derived type and that array references occur in the right place in > > expressions and match preceding array specs. Most of the work in > preparing > > the patch was sorting out cases where the selector was not a derived type > > but, instead, a class function. If it were not for this, the patch would > > have been submitted six months ago :-( > > > > The patch is relatively safe because most of the chunks are guarded by > > testing for the associate name being an inferred type, which is set in > > gfc_match_varspec. For this reason, I do not think it likely that the > patch > > will cause regressions. However, it is more than possible that variants > not > > appearing in the submitted testcase will throw up new bugs. > > > > Jerry has already given the patch a whirl and found that it applies > > cleanly, regtests OK and works as advertised. > > > > OK for trunk? > > > > Paul > ...snip... --000000000000219c810612c3c3d1-- --000000000000219c820612c3c3d3 Content-Type: text/x-patch; charset="US-ASCII"; name="resubmit.diff" Content-Disposition: attachment; filename="resubmit.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltbp3n4w0 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2NsYXNzLmNjIGIvZ2NjL2ZvcnRy YW4vY2xhc3MuY2MKaW5kZXggY2UzMWE5M2FiY2QuLmFiZTg5NjMwYmUzIDEw MDY0NAotLS0gYS9nY2MvZm9ydHJhbi9jbGFzcy5jYworKysgYi9nY2MvZm9y dHJhbi9jbGFzcy5jYwpAQCAtODE1LDYgKzgxNSw1NiBAQCBnZmNfYnVpbGRf Y2xhc3Nfc3ltYm9sIChnZmNfdHlwZXNwZWMgKnRzLCBzeW1ib2xfYXR0cmli dXRlICphdHRyLAogfQogCiAKKy8qIENoYW5nZSBjbGFzcywgdXNpbmcgZ2Zj X2J1aWxkX2NsYXNzX3N5bWJvbC4gVGhpcyBpcyBuZWVkZWQgZm9yIGFzc29j aWF0ZQorICAgbmFtZXMsIHdoZW4gcmFuayBjaGFuZ2VzIG9yIGEgZGVyaXZl ZCB0eXBlIGlzIHByb2R1Y2VkIGJ5IHJlc29sdXRpb24uICAqLworCit2b2lk CitnZmNfY2hhbmdlX2NsYXNzIChnZmNfdHlwZXNwZWMgKnRzLCBzeW1ib2xf YXR0cmlidXRlICpzeW1fYXR0ciwKKwkJICBnZmNfYXJyYXlfc3BlYyAqc3lt X2FzLCBpbnQgcmFuaywgaW50IGNvcmFuaykKK3sKKyAgc3ltYm9sX2F0dHJp YnV0ZSBhdHRyOworICBnZmNfY29tcG9uZW50ICpjOworICBnZmNfYXJyYXlf c3BlYyAqYXMgPSBOVUxMOworICBnZmNfc3ltYm9sICpkZXIgPSB0cy0+dS5k ZXJpdmVkOworCisgIHRzLT50eXBlID0gQlRfQ0xBU1M7CisgIGF0dHIgPSAq c3ltX2F0dHI7CisgIGF0dHIuY2xhc3Nfb2sgPSAwOworICBhdHRyLmFzc29j aWF0ZV92YXIgPSAxOworICBhdHRyLmNsYXNzX3BvaW50ZXIgPSAxOworICBh dHRyLmFsbG9jYXRhYmxlID0gMDsKKyAgYXR0ci5wb2ludGVyID0gMTsKKyAg YXR0ci5kaW1lbnNpb24gPSByYW5rID8gMSA6IDA7CisgIGlmIChyYW5rKQor ICAgIHsKKyAgICAgIGlmIChzeW1fYXMpCisJYXMgPSBnZmNfY29weV9hcnJh eV9zcGVjIChzeW1fYXMpOworICAgICAgZWxzZQorCXsKKwkgIGFzID0gZ2Zj X2dldF9hcnJheV9zcGVjICgpOworCSAgYXMtPnJhbmsgPSByYW5rOworCSAg YXMtPnR5cGUgPSBBU19ERUZFUlJFRDsKKwkgIGFzLT5jb3JhbmsgPSBjb3Jh bms7CisJfQorICAgIH0KKyAgaWYgKGFzICYmIGFzLT5jb3JhbmsgIT0gMCkK KyAgICBhdHRyLmNvZGltZW5zaW9uID0gMTsKKworICBpZiAoIWdmY19idWls ZF9jbGFzc19zeW1ib2wgKHRzLCAmYXR0ciwgJmFzKSkKKyAgICBnY2NfdW5y ZWFjaGFibGUgKCk7CisKKyAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAodHMt PnUuZGVyaXZlZCk7CisKKyAgLyogTWFrZSBzdXJlIHRoZSBfdnB0ciBpcyBz ZXQuICAqLworICBjID0gZ2ZjX2ZpbmRfY29tcG9uZW50ICh0cy0+dS5kZXJp dmVkLCAiX3ZwdHIiLCB0cnVlLCB0cnVlLCBOVUxMKTsKKyAgaWYgKGMtPnRz LnUuZGVyaXZlZCA9PSBOVUxMKQorICAgIGMtPnRzLnUuZGVyaXZlZCA9IGdm Y19maW5kX2Rlcml2ZWRfdnRhYiAoZGVyKTsKKyAgLyogX3ZwdHIgbm93IGhh cyB0aGUgX3Z0YWIgaW4gaXQsIGNoYW5nZSBpdCB0byB0aGUgX3Z0eXBlLiAg Ki8KKyAgaWYgKGMtPnRzLnUuZGVyaXZlZC0+YXR0ci52dGFiKQorICAgIGMt PnRzLnUuZGVyaXZlZCA9IGMtPnRzLnUuZGVyaXZlZC0+dHMudS5kZXJpdmVk OworfQorCisKIC8qIEFkZCBhIHByb2NlZHVyZSBwb2ludGVyIGNvbXBvbmVu dCB0byB0aGUgdnR5cGUKICAgIHRvIHJlcHJlc2VudCBhIHNwZWNpZmljIHR5 cGUtYm91bmQgcHJvY2VkdXJlLiAgKi8KIApkaWZmIC0tZ2l0IGEvZ2NjL2Zv cnRyYW4vZHVtcC1wYXJzZS10cmVlLmNjIGIvZ2NjL2ZvcnRyYW4vZHVtcC1w YXJzZS10cmVlLmNjCmluZGV4IDdiMTU0ZWIzY2E3Li45OWI1NzdjOTFjNCAx MDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vZHVtcC1wYXJzZS10cmVlLmNjCisr KyBiL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJlZS5jYwpAQCAtMjY5Miwx MSArMjY5MiwyMCBAQCBzaG93X2NvZGVfbm9kZSAoaW50IGxldmVsLCBnZmNf Y29kZSAqYykKIAogICAgIGNhc2UgRVhFQ19CTE9DSzoKICAgICAgIHsKLQlj b25zdCBjaGFyKiBibG9ja3R5cGU7CisJY29uc3QgY2hhciAqYmxvY2t0eXBl LCAqc25hbWUgPSBOVUxMOwogCWdmY19uYW1lc3BhY2UgKnNhdmVkX25zOwog CWdmY19hc3NvY2lhdGlvbl9saXN0ICphbGlzdDsKIAotCWlmIChjLT5leHQu YmxvY2suYXNzb2MpCisJaWYgKGMtPmV4dC5ibG9jay5ucyAmJiBjLT5leHQu YmxvY2subnMtPmNvZGUKKwkgICAgJiYgYy0+ZXh0LmJsb2NrLm5zLT5jb2Rl LT5vcCA9PSBFWEVDX1NFTEVDVF9UWVBFKQorCSAgeworCSAgICBnZmNfZXhw ciAqZmNuID0gYy0+ZXh0LmJsb2NrLm5zLT5jb2RlLT5leHByMTsKKwkgICAg YmxvY2t0eXBlID0gIlNFTEVDVCBUWVBFIjsKKwkgICAgLyogZXhwcjEgaXMg X2xvYyhhc3NvY19uYW1lLT52cHRyKSAgKi8KKwkgICAgaWYgKGZjbiAmJiBm Y24tPmV4cHJfdHlwZSA9PSBFWFBSX0ZVTkNUSU9OKQorCSAgICAgIHNuYW1l ID0gZmNuLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHItPnN5bXRyZWUt Pm4uc3ltLT5uYW1lOworCSAgfQorCWVsc2UgaWYgKGMtPmV4dC5ibG9jay5h c3NvYykKIAkgIGJsb2NrdHlwZSA9ICJBU1NPQ0lBVEUiOwogCWVsc2UKIAkg IGJsb2NrdHlwZSA9ICJCTE9DSyI7CkBAIC0yNzA0LDcgKzI3MTMsNyBAQCBz aG93X2NvZGVfbm9kZSAoaW50IGxldmVsLCBnZmNfY29kZSAqYykKIAlmcHJp bnRmIChkdW1wZmlsZSwgIiVzICIsIGJsb2NrdHlwZSk7CiAJZm9yIChhbGlz dCA9IGMtPmV4dC5ibG9jay5hc3NvYzsgYWxpc3Q7IGFsaXN0ID0gYWxpc3Qt Pm5leHQpCiAJICB7Ci0JICAgIGZwcmludGYgKGR1bXBmaWxlLCAiICVzID0g IiwgYWxpc3QtPm5hbWUpOworCSAgICBmcHJpbnRmIChkdW1wZmlsZSwgIiAl cyA9ICIsIHNuYW1lID8gc25hbWUgOiBhbGlzdC0+bmFtZSk7CiAJICAgIHNo b3dfZXhwciAoYWxpc3QtPnRhcmdldCk7CiAJICB9CiAKQEAgLTI3MzUsNyAr Mjc0NCw3IEBAIHNob3dfY29kZV9ub2RlIChpbnQgbGV2ZWwsIGdmY19jb2Rl ICpjKQogICAgICAgaWYgKGMtPm9wID09IEVYRUNfU0VMRUNUX1JBTkspCiAJ ZnB1dHMgKCJTRUxFQ1QgUkFOSyAiLCBkdW1wZmlsZSk7CiAgICAgICBlbHNl IGlmIChjLT5vcCA9PSBFWEVDX1NFTEVDVF9UWVBFKQotCWZwdXRzICgiU0VM RUNUIFRZUEUgIiwgZHVtcGZpbGUpOworCWZwdXRzICgiU0VMRUNUIENBU0Ug IiwgZHVtcGZpbGUpOyAvLyBQcmVjZWRlZCBieSBTRUxFQ1QgVFlQRSBjb25z dHJ1Y3QKICAgICAgIGVsc2UKIAlmcHV0cyAoIlNFTEVDVCBDQVNFICIsIGR1 bXBmaWxlKTsKICAgICAgIHNob3dfZXhwciAoYy0+ZXhwcjEpOwpkaWZmIC0t Z2l0IGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaCBiL2djYy9mb3J0cmFuL2dm b3J0cmFuLmgKaW5kZXggZWJiYTIzMzZlMTIuLjcwYjlmYWFkMDc0IDEwMDY0 NAotLS0gYS9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCisrKyBiL2djYy9mb3J0 cmFuL2dmb3J0cmFuLmgKQEAgLTI5NjMsNiArMjk2MywxMSBAQCB0eXBlZGVm IHN0cnVjdCBnZmNfYXNzb2NpYXRpb25fbGlzdAogICBsb2N1cyB3aGVyZTsK IAogICBnZmNfZXhwciAqdGFyZ2V0OworCisgIC8qIFVzZWQgZm9yIGluZmVy cmluZyB0aGUgZGVyaXZlZCB0eXBlIG9mIGFuIGFzc29jaWF0ZSBuYW1lLCB3 aG9zZSBzZWxlY3RvcgorICAgICBpcyBhIHNpYmxpbmcgZGVyaXZlZCB0eXBl IGZ1bmN0aW9uIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBwYXJzZWQuICAqLwor ICBnZmNfc3ltYm9sICpkZXJpdmVkX3R5cGVzOworICB1bnNpZ25lZCBpbmZl cnJlZF90eXBlOjE7CiB9CiBnZmNfYXNzb2NpYXRpb25fbGlzdDsKICNkZWZp bmUgZ2ZjX2dldF9hc3NvY2lhdGlvbl9saXN0KCkgWENORVcgKGdmY19hc3Nv Y2lhdGlvbl9saXN0KQpAQCAtMzUyOSw2ICszNTM0LDcgQEAgYm9vbCBnZmNf YWRkX2NvbXBvbmVudCAoZ2ZjX3N5bWJvbCAqLCBjb25zdCBjaGFyICosIGdm Y19jb21wb25lbnQgKiopOwogZ2ZjX3N5bWJvbCAqZ2ZjX3VzZV9kZXJpdmVk IChnZmNfc3ltYm9sICopOwogZ2ZjX2NvbXBvbmVudCAqZ2ZjX2ZpbmRfY29t cG9uZW50IChnZmNfc3ltYm9sICosIGNvbnN0IGNoYXIgKiwgYm9vbCwgYm9v bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ZjX3Jl ZiAqKik7CitpbnQgZ2ZjX2ZpbmRfZGVyaXZlZF90eXBlcyAoZ2ZjX3N5bWJv bCAqLCBnZmNfbmFtZXNwYWNlICosIGNvbnN0IGNoYXIgKik7CiAKIGdmY19z dF9sYWJlbCAqZ2ZjX2dldF9zdF9sYWJlbCAoaW50KTsKIHZvaWQgZ2ZjX2Zy ZWVfc3RfbGFiZWwgKGdmY19zdF9sYWJlbCAqKTsKQEAgLTM3OTUsNiArMzgw MSw3IEBAIHZvaWQgZ2ZjX2ZyZWVfYXNzb2NpYXRpb25fbGlzdCAoZ2ZjX2Fz c29jaWF0aW9uX2xpc3QgKik7CiB2b2lkIGdmY19leHByZXNzaW9uX3Jhbmsg KGdmY19leHByICopOwogYm9vbCBnZmNfb3BfcmFua19jb25mb3JtYWJsZSAo Z2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKik7CiBib29sIGdmY19yZXNvbHZlX3Jl ZiAoZ2ZjX2V4cHIgKik7Cit2b2lkIGdmY19maXh1cF9pbmZlcnJlZF90eXBl X3JlZnMgKGdmY19leHByICopOwogYm9vbCBnZmNfcmVzb2x2ZV9leHByIChn ZmNfZXhwciAqKTsKIHZvaWQgZ2ZjX3Jlc29sdmUgKGdmY19uYW1lc3BhY2Ug Kik7CiB2b2lkIGdmY19yZXNvbHZlX2NvZGUgKGdmY19jb2RlICosIGdmY19u YW1lc3BhY2UgKik7CkBAIC0zOTg4LDYgKzM5OTUsOCBAQCB1bnNpZ25lZCBp bnQgZ2ZjX2hhc2hfdmFsdWUgKGdmY19zeW1ib2wgKik7CiBnZmNfZXhwciAq Z2ZjX2dldF9sZW5fY29tcG9uZW50IChnZmNfZXhwciAqZSwgaW50KTsKIGJv b2wgZ2ZjX2J1aWxkX2NsYXNzX3N5bWJvbCAoZ2ZjX3R5cGVzcGVjICosIHN5 bWJvbF9hdHRyaWJ1dGUgKiwKIAkJCSAgICAgZ2ZjX2FycmF5X3NwZWMgKiop Owordm9pZCBnZmNfY2hhbmdlX2NsYXNzIChnZmNfdHlwZXNwZWMgKiwgc3lt Ym9sX2F0dHJpYnV0ZSAqLAorCQkgICAgICAgZ2ZjX2FycmF5X3NwZWMgKiwg aW50LCBpbnQpOwogZ2ZjX3N5bWJvbCAqZ2ZjX2ZpbmRfZGVyaXZlZF92dGFi IChnZmNfc3ltYm9sICopOwogZ2ZjX3N5bWJvbCAqZ2ZjX2ZpbmRfdnRhYiAo Z2ZjX3R5cGVzcGVjICopOwogZ2ZjX3N5bXRyZWUqIGdmY19maW5kX3R5cGVi b3VuZF9wcm9jIChnZmNfc3ltYm9sKiwgYm9vbCosCkBAIC00MDE4LDYgKzQw MjcsMTAgQEAgYm9vbCBnZmNfbWF5X2JlX2ZpbmFsaXplZCAoZ2ZjX3R5cGVz cGVjKTsKICNkZWZpbmUgSVNfUFJPQ19QT0lOVEVSKHN5bSkgXAogCShzeW0t PnRzLnR5cGUgPT0gQlRfQ0xBU1MgJiYgc3ltLT5hdHRyLmNsYXNzX29rICYm IENMQVNTX0RBVEEgKHN5bSkgXAogCSA/IENMQVNTX0RBVEEgKHN5bSktPmF0 dHIucHJvY19wb2ludGVyIDogc3ltLT5hdHRyLnByb2NfcG9pbnRlcikKKyNk ZWZpbmUgSVNfSU5GRVJSRURfVFlQRShleHByKSBcCisJKGV4cHIgJiYgZXhw ci0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUgXAorCSAmJiBleHByLT5z eW10cmVlLT5uLnN5bS0+YXNzb2MgXAorCSAmJiBleHByLT5zeW10cmVlLT5u LnN5bS0+YXNzb2MtPmluZmVycmVkX3R5cGUpCiAKIC8qIGZyb250ZW5kLXBh c3Nlcy5jYyAqLwogCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9tYXRjaC5j YyBiL2djYy9mb3J0cmFuL21hdGNoLmNjCmluZGV4IGVlZTU2OWRhYzkxLi42 NGY2MWM1MGM2NiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vbWF0Y2guY2MK KysrIGIvZ2NjL2ZvcnRyYW4vbWF0Y2guY2MKQEAgLTE5NjMsNiArMTk2Mywy MCBAQCBnZmNfbWF0Y2hfYXNzb2NpYXRlICh2b2lkKQogCSAgZ290byBhc3Nv Y0xpc3RFcnJvcjsKIAl9CiAKKyAgICAgIC8qIElmIHRoZSBzZWxlY3RvciBl eHByZXNzaW9uIGlzIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIGFuZCB0aGUK KwkgZXhwcmVzc2lvbiBpcyBub3QgYSB2YXJpYWJsZSwgdGhyb3cgdGhlIHBh cmVudGhlc2VzIGF3YXkuICAqLworICAgICAgd2hpbGUgKG5ld0Fzc29jLT50 YXJnZXQtPmV4cHJfdHlwZSA9PSBFWFBSX09QCisJICAgICAmJiBuZXdBc3Nv Yy0+dGFyZ2V0LT52YWx1ZS5vcC5vcCA9PSBJTlRSSU5TSUNfUEFSRU5USEVT RVMpCisJeworCSAgaWYgKG5ld0Fzc29jLT50YXJnZXQtPnZhbHVlLm9wLm9w MS0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUpCisJICAgIGJyZWFrOwor CSAgZWxzZQorCSAgICB7CisJICAgICAgZ2ZjX2V4cHIgKmUgPSBnZmNfY29w eV9leHByIChuZXdBc3NvYy0+dGFyZ2V0LT52YWx1ZS5vcC5vcDEpOworCSAg ICAgIGdmY19yZXBsYWNlX2V4cHIgKG5ld0Fzc29jLT50YXJnZXQsIGUpOwor CSAgICB9CisJfQorCiAgICAgICAvKiBUaGUgYHZhcmlhYmxlJyBmaWVsZCBp cyBsZWZ0IGJsYW5rIGZvciBub3c7IGJlY2F1c2UgdGhlIHRhcmdldCBpcyBu b3QKIAkgeWV0IHJlc29sdmVkLCB3ZSBjYW4ndCB1c2UgZ2ZjX2hhc192ZWN0 b3Jfc3Vic2NyaXB0IHRvIGRldGVybWluZSBpdAogCSBmb3Igbm93LiAgVGhp cyBpcyBzZXQgZHVyaW5nIHJlc29sdXRpb24uICAqLwpAQCAtNjMyMiw3ICs2 MzM2LDggQEAgZ2ZjX21hdGNoX3NlbGVjdCAodm9pZCkKIC8qIFRyYW5zZmVy IHRoZSBzZWxlY3RvciB0eXBlc3BlYyB0byB0aGUgYXNzb2NpYXRlIG5hbWUu ICAqLwogCiBzdGF0aWMgdm9pZAotY29weV90c19mcm9tX3NlbGVjdG9yX3Rv X2Fzc29jaWF0ZSAoZ2ZjX2V4cHIgKmFzc29jaWF0ZSwgZ2ZjX2V4cHIgKnNl bGVjdG9yKQorY29weV90c19mcm9tX3NlbGVjdG9yX3RvX2Fzc29jaWF0ZSAo Z2ZjX2V4cHIgKmFzc29jaWF0ZSwgZ2ZjX2V4cHIgKnNlbGVjdG9yLAorCQkJ CSAgICBib29sIHNlbGVjdF90eXBlID0gZmFsc2UpCiB7CiAgIGdmY19yZWYg KnJlZjsKICAgZ2ZjX3N5bWJvbCAqYXNzb2Nfc3ltOwpAQCAtNjQwNSwxMiAr NjQyMCwzMCBAQCBjb3B5X3RzX2Zyb21fc2VsZWN0b3JfdG9fYXNzb2NpYXRl IChnZmNfZXhwciAqYXNzb2NpYXRlLCBnZmNfZXhwciAqc2VsZWN0b3IpCiAg ICAgYXNzb2Nfc3ltLT5hcyA9IE5VTEw7CiAKIGJ1aWxkX2NsYXNzX3N5bToK LSAgaWYgKHNlbGVjdG9yLT50cy50eXBlID09IEJUX0NMQVNTKQorICAvKiBE ZWFsIHdpdGggdGhlIHZlcnkgc3BlY2lmaWMgY2FzZSBvZiBhIFNFTEVDVF9U WVBFIHNlbGVjdG9yIGJlaW5nIGFuCisgICAgIGFzc29jaWF0ZV9uYW1lIHdo b3NlIHR5cGUgaGFzIGJlZW4gaWRlbnRpZmllZCBieSBjb21wb25lbnQgcmVm ZXJlbmNlcy4KKyAgICAgSXQgbXVzdCBiZSBhc3N1bWVkIHRoYXQgaXQgd2ls bCBiZSBpZGVudGlmaWVkIGFzIGEgQ0xBU1MgZXhwcmVzc2lvbiwKKyAgICAg c28gY29udmVydCBpdCBub3cuICAqLworICBpZiAoc2VsZWN0X3R5cGUKKyAg ICAgICYmIElTX0lORkVSUkVEX1RZUEUgKHNlbGVjdG9yKQorICAgICAgJiYg c2VsZWN0b3ItPnRzLnR5cGUgPT0gQlRfREVSSVZFRCkKKyAgICB7CisgICAg ICBnZmNfZmluZF9kZXJpdmVkX3Z0YWIgKHNlbGVjdG9yLT50cy51LmRlcml2 ZWQpOworICAgICAgLyogVGhlIGNvcnJlY3QgY2xhc3MgY29udGFpbmVyIGhh cyB0byBiZSBhdmFpbGFibGUuICAqLworICAgICAgYXNzb2Nfc3ltLT50cy51 LmRlcml2ZWQgPSBzZWxlY3Rvci0+dHMudS5kZXJpdmVkOworICAgICAgYXNz b2Nfc3ltLT50cy50eXBlID0gQlRfQ0xBU1M7CisgICAgICBhc3NvY19zeW0t PmF0dHIucG9pbnRlciA9IDE7CisgICAgICBpZiAoIXNlbGVjdG9yLT50cy51 LmRlcml2ZWQtPmF0dHIuaXNfY2xhc3MpCisJZ2ZjX2J1aWxkX2NsYXNzX3N5 bWJvbCAoJmFzc29jX3N5bS0+dHMsICZhc3NvY19zeW0tPmF0dHIsICZhc3Nv Y19zeW0tPmFzKTsKKyAgICAgIGFzc29jaWF0ZS0+dHMgPSBhc3NvY19zeW0t PnRzOworICAgIH0KKyAgZWxzZSBpZiAoc2VsZWN0b3ItPnRzLnR5cGUgPT0g QlRfQ0xBU1MpCiAgICAgewogICAgICAgLyogVGhlIGNvcnJlY3QgY2xhc3Mg Y29udGFpbmVyIGhhcyB0byBiZSBhdmFpbGFibGUuICAqLwogICAgICAgYXNz b2Nfc3ltLT50cy50eXBlID0gQlRfQ0xBU1M7CiAgICAgICBhc3NvY19zeW0t PnRzLnUuZGVyaXZlZCA9IENMQVNTX0RBVEEgKHNlbGVjdG9yKQotCT8gQ0xB U1NfREFUQSAoc2VsZWN0b3IpLT50cy51LmRlcml2ZWQgOiBzZWxlY3Rvci0+ dHMudS5kZXJpdmVkOworCQkJCT8gQ0xBU1NfREFUQSAoc2VsZWN0b3IpLT50 cy51LmRlcml2ZWQKKwkJCQk6IHNlbGVjdG9yLT50cy51LmRlcml2ZWQ7CiAg ICAgICBhc3NvY19zeW0tPmF0dHIucG9pbnRlciA9IDE7CiAgICAgICBnZmNf YnVpbGRfY2xhc3Nfc3ltYm9sICgmYXNzb2Nfc3ltLT50cywgJmFzc29jX3N5 bS0+YXR0ciwgJmFzc29jX3N5bS0+YXMpOwogICAgIH0KQEAgLTY0MzgsNyAr NjQ3MSw3IEBAIGJ1aWxkX2Fzc29jaWF0ZV9uYW1lIChjb25zdCBjaGFyICpu YW1lLCBnZmNfZXhwciAqKmUxLCBnZmNfZXhwciAqKmUyKQogICBpZiAoZXhw cjItPnRzLnR5cGUgPT0gQlRfVU5LTk9XTikKICAgICBzeW0tPmF0dHIudW50 eXBlZCA9IDE7CiAgIGVsc2UKLSAgICBjb3B5X3RzX2Zyb21fc2VsZWN0b3Jf dG9fYXNzb2NpYXRlIChleHByMSwgZXhwcjIpOworICAgIGNvcHlfdHNfZnJv bV9zZWxlY3Rvcl90b19hc3NvY2lhdGUgKGV4cHIxLCBleHByMiwgdHJ1ZSk7 CiAKICAgc3ltLT5hdHRyLmZsYXZvciA9IEZMX1ZBUklBQkxFOwogICBzeW0t PmF0dHIucmVmZXJlbmNlZCA9IDE7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJh bi9wYXJzZS5jYyBiL2djYy9mb3J0cmFuL3BhcnNlLmNjCmluZGV4IGE0ZmRh NmU1ZWI2Li5hMmJmMzI4ZjY4MSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4v cGFyc2UuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vcGFyc2UuY2MKQEAgLTUxNTAs NiArNTE1MCwxNyBAQCBwYXJzZV9hc3NvY2lhdGUgKHZvaWQpCiAgICAgICBz eW0tPmRlY2xhcmVkX2F0ID0gYS0+d2hlcmU7CiAgICAgICBnZmNfc2V0X3N5 bV9yZWZlcmVuY2VkIChzeW0pOwogCisgICAgICAvKiBJZiB0aGUgc2VsZWN0 b3IgaXMgYSBpbmZlcnJlZCB0eXBlIHRoZW4gdGhlIGFzc29jaWF0ZV9uYW1l IGhhZCBiZXR0ZXIKKwkgYmUgYXMgd2VsbC4gVXNlIGFycmF5IHJlZmVyZW5j ZXMsIGlmIHByZXNlbnQsIHRvIGlkZW50aWZ5IGl0IGFzIGFuCisJIGFycmF5 LiAgKi8KKyAgICAgIGlmIChJU19JTkZFUlJFRF9UWVBFIChhLT50YXJnZXQp KQorCXsKKwkgIHN5bS0+YXNzb2MtPmluZmVycmVkX3R5cGUgPSAxOworCSAg Zm9yIChnZmNfcmVmICpyID0gYS0+dGFyZ2V0LT5yZWY7IHI7IHIgPSByLT5u ZXh0KQorCSAgICBpZiAoci0+dHlwZSA9PSBSRUZfQVJSQVkpCisJICAgICAg c3ltLT5hdHRyLmRpbWVuc2lvbiA9IDE7CisJfQorCiAgICAgICAvKiBJbml0 aWFsaXplIHRoZSB0eXBlc3BlYy4gIEl0IGlzIG5vdCBhdmFpbGFibGUgaW4g YWxsIGNhc2VzLAogCSBob3dldmVyLCBhcyBpdCBtYXkgb25seSBiZSBzZXQg b24gdGhlIHRhcmdldCBkdXJpbmcgcmVzb2x1dGlvbi4KIAkgU3RpbGwsIHNv bWV0aW1lcyBpdCBoZWxwcyB0byBoYXZlIGl0IHJpZ2h0IG5vdyAtLSBlc3Bl Y2lhbGx5CkBAIC01MTc2LDIxICs1MTg3LDQxIEBAIHBhcnNlX2Fzc29jaWF0 ZSAodm9pZCkKIAkgICAgICAgJiYgc3ltLT50cy51LmNsLT5sZW5ndGgtPmV4 cHJfdHlwZSA9PSBFWFBSX0NPTlNUQU5UKSkKIAlzeW0tPnRzLnUuY2wgPSBn ZmNfbmV3X2NoYXJsZW4gKGdmY19jdXJyZW50X25zLCBOVUxMKTsKIAorICAg ICAgLyogSWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIHBhcnNlZCwgZ28gc3Ry YWlnaHQgdG8gdGhlIHJlc3VsdCB0bworCSBvYnRhaW4gdGhlIGV4cHJlc3Np b24gcmFuay4gICovCisgICAgICBpZiAodGFyZ2V0LT5leHByX3R5cGUgPT0g RVhQUl9GVU5DVElPTgorCSAgJiYgdGFyZ2V0LT5zeW10cmVlCisJICAmJiB0 YXJnZXQtPnN5bXRyZWUtPm4uc3ltKQorCXsKKwkgIHRzeW0gPSB0YXJnZXQt PnN5bXRyZWUtPm4uc3ltOworCSAgaWYgKCF0c3ltLT5yZXN1bHQpCisJICAg IHRzeW0tPnJlc3VsdCA9IHRzeW07CisJICBzeW0tPnRzID0gdHN5bS0+cmVz dWx0LT50czsKKwkgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCisJ ICAgIHsKKwkgICAgICBpZiAoQ0xBU1NfREFUQSAoc3ltKS0+YXMpCisJCXRh cmdldC0+cmFuayA9IENMQVNTX0RBVEEgKHN5bSktPmFzLT5yYW5rOworCSAg ICAgIHN5bS0+YXR0ci5jbGFzc19vayA9IDE7CisJICAgIH0KKwkgIGVsc2UK KwkgICAgdGFyZ2V0LT5yYW5rID0gdHN5bS0+cmVzdWx0LT5hcyA/IHRzeW0t PnJlc3VsdC0+YXMtPnJhbmsgOiAwOworCX0KKwogICAgICAgLyogQ2hlY2sg aWYgdGhlIHRhcmdldCBleHByZXNzaW9uIGlzIGFycmF5IHZhbHVlZC4gVGhp cyBjYW5ub3QgYmUgZG9uZQogCSBieSBjYWxsaW5nIGdmY19yZXNvbHZlX2V4 cHIgYmVjYXVzZSB0aGUgY29udGV4dCBpcyB1bmF2YWlsYWJsZS4KIAkgSG93 ZXZlciwgdGhlIHJlZmVyZW5jZXMgY2FuIGJlIHJlc29sdmVkIGFuZCB0aGUg cmFuayBvZiB0aGUgdGFyZ2V0CiAJIGV4cHJlc3Npb24gc2V0LiAgKi8KLSAg ICAgIGlmICh0YXJnZXQtPnJlZiAmJiBnZmNfcmVzb2x2ZV9yZWYgKHRhcmdl dCkKKyAgICAgIGlmICghc3ltLT5hc3NvYy0+aW5mZXJyZWRfdHlwZQorCSAg JiYgdGFyZ2V0LT5yZWYgJiYgZ2ZjX3Jlc29sdmVfcmVmICh0YXJnZXQpCiAJ ICAmJiB0YXJnZXQtPmV4cHJfdHlwZSAhPSBFWFBSX0FSUkFZCiAJICAmJiB0 YXJnZXQtPmV4cHJfdHlwZSAhPSBFWFBSX0NPTVBDQUxMKQogCWdmY19leHBy ZXNzaW9uX3JhbmsgKHRhcmdldCk7CiAKICAgICAgIC8qIERldGVybWluZSB3 aGV0aGVyIG9yIG5vdCBmdW5jdGlvbiBleHByZXNzaW9ucyB3aXRoIHVua25v d24gdHlwZSBhcmUKIAkgc3RydWN0dXJlIGNvbnN0cnVjdG9ycy4gSWYgc28s IHRoZSBmdW5jdGlvbiByZXN1bHQgY2FuIGJlIGNvbnZlcnRlZAotCSB0byBi ZSBhIGRlcml2ZWQgdHlwZS4KLQkgVE9ETzogRGVhbCB3aXRoIHJlZmVyZW5j ZXMgdG8gc2libGluZyBmdW5jdGlvbnMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVl bgotCSBwYXJzZWQgKFBScyA4OTY0NSBhbmQgOTkwNjUpLiAgKi8KLSAgICAg IGlmICh0YXJnZXQtPmV4cHJfdHlwZSA9PSBFWFBSX0ZVTkNUSU9OICYmIHRh cmdldC0+dHMudHlwZSA9PSBCVF9VTktOT1dOKQorCSB0byBiZSBhIGRlcml2 ZWQgdHlwZS4gICovCisgICAgICBpZiAodGFyZ2V0LT5leHByX3R5cGUgPT0g RVhQUl9GVU5DVElPTgorCSAgJiYgdGFyZ2V0LT50cy50eXBlID09IEJUX1VO S05PV04pCiAJewogCSAgZ2ZjX3N5bWJvbCAqZGVyaXZlZDsKIAkgIC8qIFRo ZSBkZXJpdmVkIHR5cGUgaGFzIGEgbGVhZGluZyB1cHBlcmNhc2UgY2hhcmFj dGVyLiAgKi8KQEAgLTUyMDAsMTYgKzUyMzEsNyBAQCBwYXJzZV9hc3NvY2lh dGUgKHZvaWQpCiAJICAgIHsKIAkgICAgICBzeW0tPnRzLnR5cGUgPSBCVF9E RVJJVkVEOwogCSAgICAgIHN5bS0+dHMudS5kZXJpdmVkID0gZGVyaXZlZDsK LQkgICAgfQotCSAgZWxzZSBpZiAodGFyZ2V0LT5zeW10cmVlICYmICh0c3lt ID0gdGFyZ2V0LT5zeW10cmVlLT5uLnN5bSkpCi0JICAgIHsKLQkgICAgICBz eW0tPnRzID0gdHN5bS0+cmVzdWx0ID8gdHN5bS0+cmVzdWx0LT50cyA6IHRz eW0tPnRzOwotCSAgICAgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1Mp Ci0JCXsKLQkJICBpZiAoQ0xBU1NfREFUQSAoc3ltKS0+YXMpCi0JCSAgICB0 YXJnZXQtPnJhbmsgPSBDTEFTU19EQVRBIChzeW0pLT5hcy0+cmFuazsKLQkJ ICBzeW0tPmF0dHIuY2xhc3Nfb2sgPSAxOwotCQl9CisJICAgICAgc3ltLT5h c3NvYy0+aW5mZXJyZWRfdHlwZSA9IDA7CiAJICAgIH0KIAl9CiAKZGlmZiAt LWdpdCBhL2djYy9mb3J0cmFuL3ByaW1hcnkuY2MgYi9nY2MvZm9ydHJhbi9w cmltYXJ5LmNjCmluZGV4IDEyZTdiZjNjODczLi5jNjRlYmY2N2M3MCAxMDA2 NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vcHJpbWFyeS5jYworKysgYi9nY2MvZm9y dHJhbi9wcmltYXJ5LmNjCkBAIC0yMDU3LDYgKzIwNTcsNyBAQCBnZmNfbWF0 Y2hfdmFyc3BlYyAoZ2ZjX2V4cHIgKnByaW1hcnksIGludCBlcXVpdl9mbGFn LCBib29sIHN1Yl9mbGFnLAogICBib29sIHVua25vd247CiAgIGJvb2wgaW5x dWlyeTsKICAgYm9vbCBpbnRyaW5zaWM7CisgIGJvb2wgaW5mZXJyZWRfdHlw ZTsKICAgbG9jdXMgb2xkX2xvYzsKICAgY2hhciBzZXA7CiAKQEAgLTIwODcs NiArMjA4OCwxOCBAQCBnZmNfbWF0Y2hfdmFyc3BlYyAoZ2ZjX2V4cHIgKnBy aW1hcnksIGludCBlcXVpdl9mbGFnLCBib29sIHN1Yl9mbGFnLAogICBpZiAo c3ltLT5hc3NvYyAmJiBzeW0tPmFzc29jLT50YXJnZXQpCiAgICAgdGd0X2V4 cHIgPSBzeW0tPmFzc29jLT50YXJnZXQ7CiAKKyAgaW5mZXJyZWRfdHlwZSA9 IElTX0lORkVSUkVEX1RZUEUgKHByaW1hcnkpOworCisgIC8qIFNFTEVDVCBU WVBFIGFuZCBTRUxFQ1QgUkFOSyB0ZW1wb3JhcmllcyB3aXRoaW4gYW4gQVNT T0NJQVRFIGJsb2NrLCB3aG9zZQorICAgICBzZWxlY3RvciBoYXMgbm90IGJl ZW4gcGFyc2VkLCBjYW4gZ2VuZXJhdGUgZXJyb3JzIHdpdGggYXJyYXkgYW5k IGNvbXBvbmVudAorICAgICByZWZzLi4gVXNlICdpbmZlcnJlZF90eXBlJyBh cyBhIGZsYWcgdG8gc3VwcHJlc3MgdGhlc2UgZXJyb3JzLiAgKi8KKyAgaWYg KCFpbmZlcnJlZF90eXBlCisgICAgICAmJiAoZ2ZjX3BlZWtfYXNjaWlfY2hh ciAoKSA9PSAnKCcgJiYgIXN5bS0+YXR0ci5kaW1lbnNpb24pCisgICAgICAm JiAhc3ltLT5hdHRyLmNvZGltZW5zaW9uCisgICAgICAmJiBzeW0tPmF0dHIu c2VsZWN0X3R5cGVfdGVtcG9yYXJ5CisgICAgICAmJiAhc3ltLT5hdHRyLnNl bGVjdF9yYW5rX3RlbXBvcmFyeSkKKyAgICBpbmZlcnJlZF90eXBlID0gdHJ1 ZTsKKwogICAvKiBGb3IgYXNzb2NpYXRlIG5hbWVzLCB3ZSBtYXkgbm90IHll dCBrbm93IHdoZXRoZXIgdGhleSBhcmUgYXJyYXlzIG9yIG5vdC4KICAgICAg SWYgdGhlIHNlbGVjdG9yIGV4cHJlc3Npb24gaXMgdW5hbWJpZ3VvdXNseSBh biBhcnJheTsgZWcuIGEgZnVsbCBhcnJheQogICAgICBvciBhbiBhcnJheSBz ZWN0aW9uLCB0aGVuIHRoZSBhc3NvY2lhdGUgbmFtZSBtdXN0IGJlIGFuIGFy cmF5IGFuZCB3ZSBjYW4KQEAgLTIxMzYsNyArMjE0OSw4IEBAIGdmY19tYXRj aF92YXJzcGVjIChnZmNfZXhwciAqcHJpbWFyeSwgaW50IGVxdWl2X2ZsYWcs IGJvb2wgc3ViX2ZsYWcsCiAJc3ltLT50cy51LmRlcml2ZWQgPSB0Z3RfZXhw ci0+dHMudS5kZXJpdmVkOwogICAgIH0KIAotICBpZiAoKGVxdWl2X2ZsYWcg JiYgZ2ZjX3BlZWtfYXNjaWlfY2hhciAoKSA9PSAnKCcpCisgIGlmICgoaW5m ZXJyZWRfdHlwZSAmJiAhc3ltLT5hcyAmJiBnZmNfcGVla19hc2NpaV9jaGFy ICgpID09ICcoJykKKyAgICAgIHx8IChlcXVpdl9mbGFnICYmIGdmY19wZWVr X2FzY2lpX2NoYXIgKCkgPT0gJygnKQogICAgICAgfHwgZ2ZjX3BlZWtfYXNj aWlfY2hhciAoKSA9PSAnWycgfHwgc3ltLT5hdHRyLmNvZGltZW5zaW9uCiAg ICAgICB8fCAoc3ltLT5hdHRyLmRpbWVuc2lvbiAmJiBzeW0tPnRzLnR5cGUg IT0gQlRfQ0xBU1MKIAkgICYmICFzeW0tPmF0dHIucHJvY19wb2ludGVyICYm ICFnZmNfaXNfcHJvY19wdHJfY29tcCAocHJpbWFyeSkKQEAgLTIxOTQsNyAr MjIwOCw3IEBAIGdmY19tYXRjaF92YXJzcGVjIChnZmNfZXhwciAqcHJpbWFy eSwgaW50IGVxdWl2X2ZsYWcsIGJvb2wgc3ViX2ZsYWcsCiAgIGlucXVpcnkg PSBmYWxzZTsKICAgaWYgKG0gPT0gTUFUQ0hfWUVTICYmIHNlcCA9PSAnJScK ICAgICAgICYmIHByaW1hcnktPnRzLnR5cGUgIT0gQlRfQ0xBU1MKLSAgICAg ICYmIHByaW1hcnktPnRzLnR5cGUgIT0gQlRfREVSSVZFRCkKKyAgICAgICYm IChwcmltYXJ5LT50cy50eXBlICE9IEJUX0RFUklWRUQgfHwgaW5mZXJyZWRf dHlwZSkpCiAgICAgewogICAgICAgbWF0Y2ggbW07CiAgICAgICBvbGRfbG9j ID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CkBAIC0yMjA5LDcgKzIyMjMsOCBAQCBn ZmNfbWF0Y2hfdmFyc3BlYyAoZ2ZjX2V4cHIgKnByaW1hcnksIGludCBlcXVp dl9mbGFnLCBib29sIHN1Yl9mbGFnLAogICAgIGdmY19zZXRfZGVmYXVsdF90 eXBlIChzeW0sIDAsIHN5bS0+bnMpOwogCiAgIC8qIFNlZSBpZiB0aGVyZSBp cyBhIHVzYWJsZSB0eXBlc3BlYyBpbiB0aGUgIm5vIElNUExJQ0lUIHR5cGUi IGVycm9yLiAgKi8KLSAgaWYgKHN5bS0+dHMudHlwZSA9PSBCVF9VTktOT1dO ICYmIG0gPT0gTUFUQ0hfWUVTKQorICBpZiAoKHN5bS0+dHMudHlwZSA9PSBC VF9VTktOT1dOIHx8IGluZmVycmVkX3R5cGUpCisgICAgICAmJiBtID09IE1B VENIX1lFUykKICAgICB7CiAgICAgICBib29sIHBlcm1pc3NpYmxlOwogCkBA IC0yMjIwLDcgKzIyMzUsOCBAQCBnZmNfbWF0Y2hfdmFyc3BlYyAoZ2ZjX2V4 cHIgKnByaW1hcnksIGludCBlcXVpdl9mbGFnLCBib29sIHN1Yl9mbGFnLAog CQkJfHwgdGd0X2V4cHItPnN5bXRyZWUtPm4uc3ltLT5hdHRyLmlmX3NvdXJj ZQogCQkJCQkJCQk9PSBJRlNSQ19ERUNMKTsKICAgICAgIHBlcm1pc3NpYmxl ID0gcGVybWlzc2libGUKLQkJICAgIHx8ICh0Z3RfZXhwciAmJiB0Z3RfZXhw ci0+ZXhwcl90eXBlID09IEVYUFJfT1ApOworCQkgICAgfHwgKHRndF9leHBy ICYmICh0Z3RfZXhwci0+ZXhwcl90eXBlID09IEVYUFJfT1AKKwkJCXx8IChp bnF1aXJ5ICYmIHRndF9leHByLT5leHByX3R5cGUgPT0gRVhQUl9GVU5DVElP TikpKTsKIAogICAgICAgaWYgKHBlcm1pc3NpYmxlKQogCXsKQEAgLTIyMjgs NiArMjI0NCwzMSBAQCBnZmNfbWF0Y2hfdmFyc3BlYyAoZ2ZjX2V4cHIgKnBy aW1hcnksIGludCBlcXVpdl9mbGFnLCBib29sIHN1Yl9mbGFnLAogCSAgc3lt LT50cyA9IHRndF9leHByLT50czsKIAl9CiAKKyAgICAgIC8qIElmIHRoaXMg aGFzbid0IGRvbmUgdGhlIHRyaWNrIGFuZCB0aGUgdGFyZ2V0IGV4cHJlc3Np b24gaXMgYSBmdW5jdGlvbiwKKwkgdGhlbiB0aGlzIG11c3QgYmUgYSBkZXJp dmVkIHR5cGUgaWYgJ25hbWUnIG1hdGNoZXMgYW4gYWNjZXNzaWJsZSB0eXBl CisJIGJvdGggaW4gdGhpcyBuYW1lc3BhY2UgYW5kIHRoZSBhcyB5ZXQgdW5w YXJzZWQgc2libGluZyBmdW5jdGlvbi4gICovCisgICAgICBpZiAodGd0X2V4 cHIgJiYgdGd0X2V4cHItPmV4cHJfdHlwZSA9PSBFWFBSX0ZVTkNUSU9OCisJ ICAmJiAoc3ltLT50cy50eXBlID09IEJUX1VOS05PV04gfHwgaW5mZXJyZWRf dHlwZSkKKwkgICYmIGdmY19maW5kX2Rlcml2ZWRfdHlwZXMgKHN5bSwgZ2Zj X2N1cnJlbnRfbnMsIG5hbWUpKQorCXsKKwkgIHN5bS0+YXNzb2MtPmluZmVy cmVkX3R5cGUgPSAxOworCSAgLyogVGhlIGZpcnN0IHJldHVybmVkIHR5cGUg aXMgYXMgZ29vZCBhcyBhbnkgYXQgdGhpcyBzdGFnZS4gICovCisJICBnZmNf c3ltYm9sICoqZHRzID0gJnN5bS0+YXNzb2MtPmRlcml2ZWRfdHlwZXM7CisJ ICB0Z3RfZXhwci0+dHMudHlwZSA9IEJUX0RFUklWRUQ7CisJICB0Z3RfZXhw ci0+dHMua2luZCA9IDA7CisJICB0Z3RfZXhwci0+dHMudS5kZXJpdmVkID0g KmR0czsKKwkgIHN5bS0+dHMgPSB0Z3RfZXhwci0+dHM7CisJICAvKiBEZWxl dGUgdGhlIGR0IGxpc3QgdG8gcHJldmVudCBpbnRlcmZlcmVuY2Ugd2l0aCB0 cmFucy10eXBlLmNjJ3MKKwkgICAgIHRyZWF0bWVudCBvZiBkZXJpdmVkIHR5 cGUgZGVjbHMsIGV2ZW4gaWYgdGhpcyBwcm9jZXNzIGhhcyB0byBiZQorCSAg ICAgZG9uZSBhZ2FpbiBmb3IgYW5vdGhlciBwcmltYXJ5IGV4cHJlc3Npb24u ICAqLworCSAgd2hpbGUgKCpkdHMgJiYgKCpkdHMpLT5kdF9uZXh0KQorCSAg ICB7CisJICAgICAgZ2ZjX3N5bWJvbCAqKnRtcCA9ICYoKmR0cyktPmR0X25l eHQ7CisJICAgICAgKmR0cyA9IE5VTEw7CisJICAgICAgZHRzID0gdG1wOwor CSAgICB9CisJfQorCiAgICAgICBpZiAoc3ltLT50cy50eXBlID09IEJUX1VO S05PV04pCiAJewogCSAgZ2ZjX2Vycm9yICgiU3ltYm9sICVxcyBhdCAlQyBo YXMgbm8gSU1QTElDSVQgdHlwZSIsIHN5bS0+bmFtZSk7CkBAIC0yMjk0LDYg KzIzMzUsMTcgQEAgZ2ZjX21hdGNoX3ZhcnNwZWMgKGdmY19leHByICpwcmlt YXJ5LCBpbnQgZXF1aXZfZmxhZywgYm9vbCBzdWJfZmxhZywKIAkJICAgICAg YnJlYWs7CiAJCSAgICB9CiAKKwkJICAvKiBXaXRoICdhc3NvY2lhdGUoeCA9 PiBzaW4oY21wbHgoMSwwKSkpJywgZ2ZvcnRyYW4gZ2V0cyBoZXJlCisJCSAg ICAgd2l0aCBhbiB1bmtub3duIHR5cGUtc3BlYyBmb3IgcHJpbWFyeSwgYnV0 IGl0IGNhbiBiZQorCQkgICAgIGdsZWFuZWQgZnJvbSB0aGUgYXNzb2NpYXRl IHRhcmdldC4gICovCisJCSAgaWYgKCh0bXAtPnUuaSA9PSBJTlFVSVJZX1JF IHx8IHRtcC0+dS5pID09IElOUVVJUllfSU0pCisJCSAgICAgICYmIHByaW1h cnktPnRzLnR5cGUgPT0gQlRfVU5LTk9XTgorCQkgICAgICAmJiBwcmltYXJ5 LT5zeW10cmVlICYmIHByaW1hcnktPnN5bXRyZWUtPm4uc3ltCisJCSAgICAg ICYmIHByaW1hcnktPnN5bXRyZWUtPm4uc3ltLT5hc3NvYworCQkgICAgICAm JiBwcmltYXJ5LT5zeW10cmVlLT5uLnN5bS0+YXNzb2MtPnRhcmdldAorCQkg ICAgICAmJiBwcmltYXJ5LT5zeW10cmVlLT5uLnN5bS0+YXNzb2MtPnRhcmdl dC0+dHMudHlwZSA9PSBCVF9DT01QTEVYKQorCQkgICAgcHJpbWFyeS0+dHMg PSBwcmltYXJ5LT5zeW10cmVlLT5uLnN5bS0+YXNzb2MtPnRhcmdldC0+dHM7 CisKIAkJICBpZiAoKHRtcC0+dS5pID09IElOUVVJUllfUkUgfHwgdG1wLT51 LmkgPT0gSU5RVUlSWV9JTSkKIAkJICAgICAgJiYgcHJpbWFyeS0+dHMudHlw ZSAhPSBCVF9DT01QTEVYKQogCQkgICAgewpkaWZmIC0tZ2l0IGEvZ2NjL2Zv cnRyYW4vcmVzb2x2ZS5jYyBiL2djYy9mb3J0cmFuL3Jlc29sdmUuY2MKaW5k ZXggMDJhY2M0YWVmMzEuLjNmNDhlYzM0OTMyIDEwMDY0NAotLS0gYS9nY2Mv Zm9ydHJhbi9yZXNvbHZlLmNjCisrKyBiL2djYy9mb3J0cmFuL3Jlc29sdmUu Y2MKQEAgLTU4NjYsNiArNTg2NiwxMyBAQCByZXNvbHZlX3ZhcmlhYmxlIChn ZmNfZXhwciAqZSkKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAg LyogR3Vlc3NlZCB0eXBlIHZhcmlhYmxlcyBhcmUgYXNzb2NpYXRlX25hbWVz IHdob3NlIHNlbGVjdG9yIGhhZCBub3QgYmVlbgorICAgICBwYXJzZWQgYXQg dGhlIHRpbWUgdGhhdCB0aGUgY29uc3RydWN0IHdhcyBwYXJzZWQuIE5vdyB0 aGUgbmFtZXNwYWNlIGlzCisgICAgIGJlaW5nIHJlc29sdmVkLCB0aGUgVEtS IG9mIHRoZSBzZWxlY3RvciB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgZml4dXAg b2YKKyAgICAgdGhlIGFzc29jaWF0ZV9uYW1lLiAgKi8KKyAgaWYgKElTX0lO RkVSUkVEX1RZUEUgKGUpICYmIGUtPnJlZikKKyAgICBnZmNfZml4dXBfaW5m ZXJyZWRfdHlwZV9yZWZzIChlKTsKKwogICAvKiBGb3IgdmFyaWFibGVzIHRo YXQgYXJlIHVzZWQgaW4gYW4gYXNzb2NpYXRlICh0YXJnZXQgPT4gb2JqZWN0 KSB3aGVyZQogICAgICB0aGUgb2JqZWN0J3MgYmFzZXR5cGUgaXMgYXJyYXkg dmFsdWVkIHdoaWxlIHRoZSB0YXJnZXQgaXMgc2NhbGFyLAogICAgICB0aGUg dHMnIHR5cGUgb2YgdGhlIGNvbXBvbmVudCByZWZzIGlzIHN0aWxsIGFycmF5 IHZhbHVlZCwgd2hpY2gKQEAgLTYxNzEsNiArNjE3OCwxMTUgQEAgcmVzb2x2 ZV9wcm9jZWR1cmU6CiB9CiAKIAorLyogJ3N5bScgd2FzIGluaXRpYWxseSBn dWVzc2VkIHRvIGJlIGRlcml2ZWQgdHlwZSBidXQgaGFzIGJlZW4gY29ycmVj dGVkCisgICBpbiByZXNvbHZlX2Fzc29jX3ZhciB0byBiZSBhIGNsYXNzIGVu dGl0eSBvciB0aGUgZGVyaXZlZCB0eXBlIGNvcnJlY3RpbmcuCisgICBJZiBh IGNsYXNzIGVudGl0eSBpdCB3aWxsIGNlcnRhaW5seSBuZWVkIHRoZSBfZGF0 YSByZWZlcmVuY2Ugb3IgdGhlCisgICByZWZlcmVuY2UgZGVyaXZlZCB0eXBl IHN5bWJvbCBjb3JyZWN0aW5nIGluIHRoZSBmaXJzdCBjb21wb25lbnQgcmVm IGlmCisgICBhIGRlcml2ZWQgdHlwZS4gICovCisKK3ZvaWQKK2dmY19maXh1 cF9pbmZlcnJlZF90eXBlX3JlZnMgKGdmY19leHByICplKQoreworICBnZmNf cmVmICpyZWY7CisgIGdmY19zeW1ib2wgKnN5bSwgKmRlcml2ZWQ7CisgIGdm Y19leHByICp0YXJnZXQ7CisgIHN5bSA9IGUtPnN5bXRyZWUtPm4uc3ltOwor CisgIC8qIFRoaXMgaXMgYW4gYXNzb2NpYXRlX25hbWUgd2hvc2Ugc2VsZWN0 b3IgaXMgYSBjb21wb25lbnQgcmVmIG9mIGEgc2VsZWN0b3IKKyAgICAgdGhh dCBpcyBhIGluZmVycmVkIHR5cGUgYXNzb2NpYXRlX25hbWUuICAqLworICBp ZiAoc3ltLT50cy50eXBlICE9IEJUX0RFUklWRUQgJiYgc3ltLT50cy50eXBl ICE9IEJUX0NMQVNTKQorICAgIHsKKyAgICAgIGUtPnJhbmsgPSBzeW0tPmFz ID8gc3ltLT5hcy0+cmFuayA6IDA7CisgICAgICBzeW0tPmF0dHIuZGltZW5z aW9uID0gZS0+cmFuayA/IDEgOiAwOworICAgICAgaWYgKCFlLT5yYW5rICYm IGUtPnJlZi0+dHlwZSA9PSBSRUZfQVJSQVkpCisJeworCSAgcmVmID0gZS0+ cmVmOworCSAgZS0+cmVmID0gcmVmLT5uZXh0OworCSAgZnJlZSAocmVmKTsK Kwl9CisgICAgICByZXR1cm47CisgICAgfQorCisgIGRlcml2ZWQgPSBzeW0t PnRzLnR5cGUgPT0gQlRfQ0xBU1MgPyBDTEFTU19EQVRBIChzeW0pLT50cy51 LmRlcml2ZWQKKwkJCQkgICAgIDogc3ltLT50cy51LmRlcml2ZWQ7CisKKyAg LyogRW5zdXJlIHRoYXQgY2xhc3Mgc3ltYm9scyBoYXZlIGFuIGFycmF5IHNw ZWMgYW5kIGVuc3VyZSB0aGF0IHRoZXJlCisgICAgIGlzIGEgX2RhdGEgZmll bGQgcmVmZXJlbmNlIGZvbGxvd2luZyBjbGFzcyB0eXBlIHJlZmVyZW5jZXMu ICAqLworICBpZiAoc3ltLT50cy50eXBlID09IEJUX0NMQVNTCisgICAgICAm JiBzeW0tPmFzc29jLT50YXJnZXQtPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCisg ICAgeworICAgICAgZS0+cmFuayA9IENMQVNTX0RBVEEgKHN5bSktPmFzID8g Q0xBU1NfREFUQSAoc3ltKS0+YXMtPnJhbmsgOiAwOworICAgICAgc3ltLT5h dHRyLmRpbWVuc2lvbiA9IDA7CisgICAgICBDTEFTU19EQVRBIChzeW0pLT5h dHRyLmRpbWVuc2lvbiA9IGUtPnJhbmsgPyAxIDogMDsKKyAgICAgIGlmIChl LT5yZWYgJiYgKGUtPnJlZi0+dHlwZSAhPSBSRUZfQ09NUE9ORU5UCisJCSAg ICAgfHwgZS0+cmVmLT51LmMuY29tcG9uZW50LT5uYW1lWzBdICE9ICdfJykp CisJeworCSAgcmVmID0gZ2ZjX2dldF9yZWYgKCk7CisJICByZWYtPnR5cGUg PSBSRUZfQ09NUE9ORU5UOworCSAgcmVmLT5uZXh0ID0gZS0+cmVmOworCSAg ZS0+cmVmID0gcmVmOworCSAgcmVmLT51LmMuY29tcG9uZW50ID0gZ2ZjX2Zp bmRfY29tcG9uZW50IChzeW0tPnRzLnUuZGVyaXZlZCwgIl9kYXRhIiwKKwkJ CQkJCSAgIHRydWUsIHRydWUsIE5VTEwpOworCSAgcmVmLT51LmMuc3ltID0g c3ltLT50cy51LmRlcml2ZWQ7CisJfQorICAgIH0KKworICAvKiBQcm9jZWVk IGFzIGZhciBhcyB0aGUgZmlyc3QgY29tcG9uZW50IHJlZmVyZW5jZSBhbmQg ZW5zdXJlIHRoYXQgdGhlCisgICAgIGNvcnJlY3QgZGVyaXZlZCB0eXBlIGlz IGJlaW5nIHVzZWQuICAqLworICBmb3IgKHJlZiA9IGUtPnJlZjsgcmVmOyBy ZWYgPSByZWYtPm5leHQpCisgICAgaWYgKHJlZi0+dHlwZSA9PSBSRUZfQ09N UE9ORU5UKQorICAgICAgeworCWlmIChyZWYtPnUuYy5jb21wb25lbnQtPm5h bWVbMF0gIT0gJ18nKQorCSAgcmVmLT51LmMuc3ltID0gZGVyaXZlZDsKKwll bHNlCisJICByZWYtPnUuYy5zeW0gPSBzeW0tPnRzLnUuZGVyaXZlZDsKKwli cmVhazsKKyAgICAgIH0KKworICAvKiBWZXJpZnkgdGhhdCB0aGUgdHlwZSBp bmZlcnJlbmNlIG1lY2hhbmlzbSBoYXMgbm90IGludHJvZHVjZWQgYSBzcHVy aW91cworICAgICBhcnJheSByZWZlcmVuY2UuICBUaGlzIGNhbiBoYXBwZW4g d2l0aCBhbiBhc3NvY2lhdGUgbmFtZSwgd2hvc2Ugc2VsZWN0b3IKKyAgICAg aXMgYW4gZWxlbWVudCBvZiBhbm90aGVyIGluZmVycmVkIHR5cGUuICAqLwor ICB0YXJnZXQgPSBlLT5zeW10cmVlLT5uLnN5bS0+YXNzb2MtPnRhcmdldDsK KyAgaWYgKCEoc3ltLT50cy50eXBlID09IEJUX0NMQVNTID8gQ0xBU1NfREFU QSAoc3ltKS0+YXMgOiBzeW0tPmFzKQorICAgICAgJiYgZSAhPSB0YXJnZXQg JiYgIXRhcmdldC0+cmFuaykKKyAgICB7CisgICAgICAvKiBGaXJzdCBjYXNl OiBhcnJheSByZWYgYWZ0ZXIgdGhlIHNjYWxhciBjbGFzcyBvciBkZXJpdmVk IGFzc29jaWF0ZV9uYW1lLiAgKi8KKyAgICAgIGlmIChlLT5yZWYgJiYgZS0+ cmVmLT50eXBlID09IFJFRl9BUlJBWQorCSAgJiYgZS0+cmVmLT51LmFyLnR5 cGUgIT0gQVJfRUxFTUVOVCkKKwl7CisJICByZWYgPSBlLT5yZWY7CisJICBl LT5yZWYgPSByZWYtPm5leHQ7CisJICBmcmVlIChyZWYpOworCisJICAvKiBJ ZiBpdCBoYXNuJ3QgYSByZWYgdG8gdGhlICdfZGF0YScgZmllbGQgc3VwcGx5 IG9uZS4gICovCisJICBpZiAoc3ltLT50cy50eXBlID09IEJUX0NMQVNTCisJ ICAgICAgJiYgIShlLT5yZWYtPnR5cGUgPT0gUkVGX0NPTVBPTkVOVAorCQkg ICAmJiBzdHJjbXAgKGUtPnJlZi0+dS5jLmNvbXBvbmVudC0+bmFtZSwgIl9k YXRhIikpKQorCSAgICB7CisJICAgICAgZ2ZjX3JlZiAqbmV3X3JlZjsKKwkg ICAgICBnZmNfZmluZF9jb21wb25lbnQgKGUtPnN5bXRyZWUtPm4uc3ltLT50 cy51LmRlcml2ZWQsCisJCQkJICAiX2RhdGEiLCB0cnVlLCB0cnVlLCAmbmV3 X3JlZik7CisJICAgICAgbmV3X3JlZi0+bmV4dCA9IGUtPnJlZjsKKwkgICAg ICBlLT5yZWYgPSBuZXdfcmVmOworCSAgICB9CisJfQorICAgICAgLyogMm5k IGNhc2U6IGEgcmVmIHRvIHRoZSAnX2RhdGEnIGZpZWxkIGZvbGxvd2VkIGJ5 IGFuIGFycmF5IHJlZi4gICovCisgICAgICBlbHNlIGlmIChlLT5yZWYgJiYg ZS0+cmVmLT50eXBlID09IFJFRl9DT01QT05FTlQKKwkgICAgICAgJiYgc3Ry Y21wIChlLT5yZWYtPnUuYy5jb21wb25lbnQtPm5hbWUsICJfZGF0YSIpID09 IDAKKwkgICAgICAgJiYgZS0+cmVmLT5uZXh0ICYmIGUtPnJlZi0+bmV4dC0+ dHlwZSA9PSBSRUZfQVJSQVkKKwkgICAgICAgJiYgZS0+cmVmLT5uZXh0LT51 LmFyLnR5cGUgIT0gQVJfRUxFTUVOVCkKKwl7CisJICByZWYgPSBlLT5yZWYt Pm5leHQ7CisJICBlLT5yZWYtPm5leHQgPSBlLT5yZWYtPm5leHQtPm5leHQ7 CisJICBmcmVlIChyZWYpOworCX0KKyAgICB9CisKKyAgLyogTm93IHRoYXQg YWxsIHRoZSByZWZlcmVuY2VzIGFyZSBPSywgZ2V0IHRoZSBleHByZXNzaW9u IHJhbmsuICAqLworICBnZmNfZXhwcmVzc2lvbl9yYW5rIChlKTsKK30KKwor CiAvKiBDaGVja3MgdG8gc2VlIHRoYXQgdGhlIGNvcnJlY3Qgc3ltYm9sIGhh cyBiZWVuIGhvc3QgYXNzb2NpYXRlZC4KICAgIFRoZSBvbmx5IHNpdHVhdGlv bnMgd2hlcmUgdGhpcyBhcmlzZXMgYXJlOgogCShpKSAgVGhhdCBpbiB3aGlj aCBhIHR3aWNlIGNvbnRhaW5lZCBmdW5jdGlvbiBpcyBwYXJzZWQgYWZ0ZXIK QEAgLTkyNjMsNiArOTM3OSw0NiBAQCByZXNvbHZlX2Fzc29jX3ZhciAoZ2Zj X3N5bWJvbCogc3ltLCBib29sIHJlc29sdmVfdGFyZ2V0KQogICAgICAgcmV0 dXJuOwogICAgIH0KIAorICBpZiAoc3ltLT5hc3NvYy0+aW5mZXJyZWRfdHlw ZSB8fCBJU19JTkZFUlJFRF9UWVBFICh0YXJnZXQpKQorICAgIHsKKyAgICAg IHN5bWJvbF9hdHRyaWJ1dGUgYXR0cjsKKworICAgICAgLyogQnkgbm93LCB0 aGUgdHlwZSBvZiB0aGUgdGFyZ2V0IGhhcyBiZWVuIGZpeGVkIHVwLiAgKi8K KyAgICAgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfREVSSVZFRAorCSAgJiYg dGFyZ2V0LT50cy50eXBlID09IEJUX0NMQVNTCisJICAmJiAhVU5MSU1JVEVE X1BPTFkgKHRhcmdldCkpCisJeworCSAgc3ltLT50cyA9IENMQVNTX0RBVEEg KHRhcmdldCktPnRzOworCSAgaWYgKCFzeW0tPmFzKQorCSAgICBzeW0tPmFz ID0gZ2ZjX2NvcHlfYXJyYXlfc3BlYyAoQ0xBU1NfREFUQSAodGFyZ2V0KS0+ YXMpOworCSAgYXR0ciA9IENMQVNTX0RBVEEgKHN5bSkgPyBDTEFTU19EQVRB IChzeW0pLT5hdHRyIDogc3ltLT5hdHRyOworCSAgc3ltLT5hdHRyLmRpbWVu c2lvbiA9IHRhcmdldC0+cmFuayA/IDEgOiAwOworCSAgZ2ZjX2NoYW5nZV9j bGFzcyAoJnN5bS0+dHMsICZhdHRyLCBzeW0tPmFzLAorCQkJICAgIHRhcmdl dC0+cmFuaywgZ2ZjX2dldF9jb3JhbmsgKHRhcmdldCkpOworCSAgc3ltLT5h cyA9IE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAodGFyZ2V0LT50cy50eXBl ID09IEJUX0RFUklWRUQKKwkgICAgICAgJiYgdGFyZ2V0LT5zeW10cmVlLT5u LnN5bS0+dHMudHlwZSA9PSBCVF9DTEFTUworCSAgICAgICAmJiBJU19JTkZF UlJFRF9UWVBFICh0YXJnZXQpCisJICAgICAgICYmIHRhcmdldC0+cmVmICYm IHRhcmdldC0+cmVmLT5uZXh0CisJICAgICAgICYmIHRhcmdldC0+cmVmLT5u ZXh0LT50eXBlID09IFJFRl9BUlJBWQorCSAgICAgICAmJiAhdGFyZ2V0LT5y ZWYtPm5leHQtPm5leHQpCisJeworCSAgc3ltLT50cyA9IHRhcmdldC0+dHM7 CisJICBhdHRyID0gQ0xBU1NfREFUQSAoc3ltKSA/IENMQVNTX0RBVEEgKHN5 bSktPmF0dHIgOiBzeW0tPmF0dHI7CisJICBzeW0tPmF0dHIuZGltZW5zaW9u ID0gdGFyZ2V0LT5yYW5rID8gMSA6IDA7CisJICBnZmNfY2hhbmdlX2NsYXNz ICgmc3ltLT50cywgJmF0dHIsIHN5bS0+YXMsCisJCQkgICAgdGFyZ2V0LT5y YW5rLCBnZmNfZ2V0X2NvcmFuayAodGFyZ2V0KSk7CisJICBzeW0tPmFzID0g TlVMTDsKKwkgIHRhcmdldC0+dHMgPSBzeW0tPnRzOworCX0KKyAgICAgIGVs c2UgaWYgKCh0YXJnZXQtPnRzLnR5cGUgPT0gQlRfREVSSVZFRCkKKwkgICAg ICAgfHwgKHN5bS0+dHMudHlwZSA9PSBCVF9DTEFTUyAmJiB0YXJnZXQtPnRz LnR5cGUgPT0gQlRfQ0xBU1MKKwkJICAgJiYgQ0xBU1NfREFUQSAodGFyZ2V0 KS0+YXMgJiYgIUNMQVNTX0RBVEEgKHN5bSktPmFzKSkKKwlzeW0tPnRzID0g dGFyZ2V0LT50czsKKyAgICB9CisKKwogICBpZiAodGFyZ2V0LT5leHByX3R5 cGUgPT0gRVhQUl9OVUxMKQogICAgIHsKICAgICAgIGdmY19lcnJvciAoIlNl bGVjdG9yIGF0ICVMIGNhbm5vdCBiZSBOVUxMKCkiLCAmdGFyZ2V0LT53aGVy ZSk7CkBAIC05Mjg5LDE1ICs5NDQ1LDUwIEBAIHJlc29sdmVfYXNzb2NfdmFy IChnZmNfc3ltYm9sKiBzeW0sIGJvb2wgcmVzb2x2ZV90YXJnZXQpCiAJCQkg IHx8IGdmY19pc19wdHJfZmNuICh0YXJnZXQpKTsKIAogICAvKiBGaW5hbGx5 IHJlc29sdmUgaWYgdGhpcyBpcyBhbiBhcnJheSBvciBub3QuICAqLworICBp ZiAodGFyZ2V0LT5leHByX3R5cGUgPT0gRVhQUl9GVU5DVElPTgorICAgICAg JiYgKHN5bS0+dHMudHlwZSA9PSBCVF9DTEFTUyB8fCBzeW0tPnRzLnR5cGUg PT0gQlRfREVSSVZFRCkpCisgICAgeworICAgICAgZ2ZjX2V4cHJlc3Npb25f cmFuayAodGFyZ2V0KTsKKyAgICAgIGlmICh0YXJnZXQtPnRzLnR5cGUgPT0g QlRfREVSSVZFRAorCSAgJiYgIXN5bS0+YXMKKwkgICYmIHRhcmdldC0+c3lt dHJlZS0+bi5zeW0tPmFzKQorCXsKKwkgIHN5bS0+YXMgPSBnZmNfY29weV9h cnJheV9zcGVjICh0YXJnZXQtPnN5bXRyZWUtPm4uc3ltLT5hcyk7CisJICBz eW0tPmF0dHIuZGltZW5zaW9uID0gMTsKKwl9CisgICAgICBlbHNlIGlmICh0 YXJnZXQtPnRzLnR5cGUgPT0gQlRfQ0xBU1MKKwkgICAgICAgJiYgQ0xBU1Nf REFUQSAodGFyZ2V0KS0+YXMpCisJeworCSAgdGFyZ2V0LT5yYW5rID0gQ0xB U1NfREFUQSAodGFyZ2V0KS0+YXMtPnJhbms7CisJICBpZiAoIShzeW0tPnRz LnR5cGUgPT0gQlRfQ0xBU1MgJiYgQ0xBU1NfREFUQSAoc3ltKS0+YXMpKQor CSAgICB7CisJICAgICAgc3ltLT50cyA9IHRhcmdldC0+dHM7CisJICAgICAg c3ltLT5hdHRyLmRpbWVuc2lvbiA9IDA7CisJICAgIH0KKwl9CisgICAgfQor CisKICAgaWYgKHN5bS0+YXR0ci5kaW1lbnNpb24gJiYgdGFyZ2V0LT5yYW5r ID09IDApCiAgICAgewogICAgICAgLyogcHJpbWFyeS5jYyBtYWtlcyB0aGUg YXNzdW1wdGlvbiB0aGF0IGEgcmVmZXJlbmNlIHRvIGFuIGFzc29jaWF0ZQog CSBuYW1lIGZvbGxvd2VkIGJ5IGEgbGVmdCBwYXJlbnRoZXNpcyBpcyBhbiBh cnJheSByZWZlcmVuY2UuICAqLwotICAgICAgaWYgKHN5bS0+dHMudHlwZSAh PSBCVF9DSEFSQUNURVIpCi0JZ2ZjX2Vycm9yICgiQXNzb2NpYXRlLW5hbWUg JXFzIGF0ICVMIGlzIHVzZWQgYXMgYXJyYXkiLAotCQkgICBzeW0tPm5hbWUs ICZzeW0tPmRlY2xhcmVkX2F0KTsKLSAgICAgIHN5bS0+YXR0ci5kaW1lbnNp b24gPSAwOwotICAgICAgcmV0dXJuOworICAgICAgaWYgKHN5bS0+YXNzb2Mt PmluZmVycmVkX3R5cGUgJiYgc3ltLT50cy50eXBlICE9IEJUX0NMQVNTKQor CXsKKwkgIGdmY19leHByZXNzaW9uX3JhbmsgKHN5bS0+YXNzb2MtPnRhcmdl dCk7CisJICBzeW0tPmF0dHIuZGltZW5zaW9uID0gc3ltLT5hc3NvYy0+dGFy Z2V0LT5yYW5rID8gMSA6IDA7CisJICBpZiAoIXN5bS0+YXR0ci5kaW1lbnNp b24gJiYgc3ltLT5hcykKKwkgICAgc3ltLT5hcyA9IE5VTEw7CisJfQorCisg ICAgICBpZiAoc3ltLT5hdHRyLmRpbWVuc2lvbiAmJiB0YXJnZXQtPnJhbmsg PT0gMCkKKwl7CisJICBpZiAoc3ltLT50cy50eXBlICE9IEJUX0NIQVJBQ1RF UikKKwkgICAgZ2ZjX2Vycm9yICgiQXNzb2NpYXRlLW5hbWUgJXFzIGF0ICVM IGlzIHVzZWQgYXMgYXJyYXkiLAorCQkgICAgICAgc3ltLT5uYW1lLCAmc3lt LT5kZWNsYXJlZF9hdCk7CisJICBzeW0tPmF0dHIuZGltZW5zaW9uID0gMDsK KwkgIHJldHVybjsKKwl9CiAgICAgfQogCiAgIC8qIFdlIGNhbm5vdCBkZWFs IHdpdGggY2xhc3Mgc2VsZWN0b3JzIHRoYXQgbmVlZCB0ZW1wb3Jhcmllcy4g ICovCkBAIC05MzU2LDcgKzk1NDcsNyBAQCByZXNvbHZlX2Fzc29jX3ZhciAo Z2ZjX3N5bWJvbCogc3ltLCBib29sIHJlc29sdmVfdGFyZ2V0KQogCSAgICAg Y29ycmVjdCB0aGlzIG5vdy4gICovCiAJICBnZmNfdHlwZXNwZWMgKnRzID0g JnRhcmdldC0+dHM7CiAJICBnZmNfcmVmICpyZWY7Ci0JICBnZmNfY29tcG9u ZW50ICpjOworCiAJICBmb3IgKHJlZiA9IHRhcmdldC0+cmVmOyByZWYgIT0g TlVMTDsgcmVmID0gcmVmLT5uZXh0KQogCSAgICB7CiAJICAgICAgc3dpdGNo IChyZWYtPnR5cGUpCkBAIC05Mzc0LDMyICs5NTY1LDE1IEBAIHJlc29sdmVf YXNzb2NfdmFyIChnZmNfc3ltYm9sKiBzeW0sIGJvb2wgcmVzb2x2ZV90YXJn ZXQpCiAJICAgIH0KIAkgIC8qIENyZWF0ZSBhIHNjYWxhciBpbnN0YW5jZSBv ZiB0aGUgY3VycmVudCBjbGFzcyB0eXBlLiAgQmVjYXVzZSB0aGUKIAkgICAg IHJhbmsgb2YgYSBjbGFzcyBhcnJheSBnb2VzIGludG8gaXRzIG5hbWUsIHRo ZSB0eXBlIGhhcyB0byBiZQotCSAgICAgcmVidWlsZC4gIFRoZSBhbHRlcm5h dGl2ZSBvZiAocmUtKXNldHRpbmcganVzdCB0aGUgYXR0cmlidXRlcworCSAg ICAgcmVidWlsdC4gIFRoZSBhbHRlcm5hdGl2ZSBvZiAocmUtKXNldHRpbmcg anVzdCB0aGUgYXR0cmlidXRlcwogCSAgICAgYW5kIGFzIGluIHRoZSBjdXJy ZW50IHR5cGUsIGRlc3Ryb3lzIHRoZSB0eXBlIGFsc28gaW4gb3RoZXIKIAkg ICAgIHBsYWNlcy4gICovCiAJICBhcyA9IE5VTEw7CiAJICBzeW0tPnRzID0g KnRzOwogCSAgc3ltLT50cy50eXBlID0gQlRfQ0xBU1M7CiAJICBhdHRyID0g Q0xBU1NfREFUQSAoc3ltKSA/IENMQVNTX0RBVEEgKHN5bSktPmF0dHIgOiBz eW0tPmF0dHI7Ci0JICBhdHRyLmNsYXNzX29rID0gMDsKLQkgIGF0dHIuYXNz b2NpYXRlX3ZhciA9IDE7Ci0JICBhdHRyLmRpbWVuc2lvbiA9IGF0dHIuY29k aW1lbnNpb24gPSAwOwotCSAgYXR0ci5jbGFzc19wb2ludGVyID0gMTsKLQkg IGlmICghZ2ZjX2J1aWxkX2NsYXNzX3N5bWJvbCAoJnN5bS0+dHMsICZhdHRy LCAmYXMpKQotCSAgICBnY2NfdW5yZWFjaGFibGUgKCk7Ci0JICAvKiBNYWtl IHN1cmUgdGhlIF92cHRyIGlzIHNldC4gICovCi0JICBjID0gZ2ZjX2ZpbmRf Y29tcG9uZW50IChzeW0tPnRzLnUuZGVyaXZlZCwgIl92cHRyIiwgdHJ1ZSwg dHJ1ZSwgTlVMTCk7Ci0JICBpZiAoYy0+dHMudS5kZXJpdmVkID09IE5VTEwp Ci0JICAgIGMtPnRzLnUuZGVyaXZlZCA9IGdmY19maW5kX2Rlcml2ZWRfdnRh YiAoc3ltLT50cy51LmRlcml2ZWQpOwotCSAgQ0xBU1NfREFUQSAoc3ltKS0+ YXR0ci5wb2ludGVyID0gMTsKLQkgIENMQVNTX0RBVEEgKHN5bSktPmF0dHIu Y2xhc3NfcG9pbnRlciA9IDE7Ci0JICBnZmNfc2V0X3N5bV9yZWZlcmVuY2Vk IChzeW0tPnRzLnUuZGVyaXZlZCk7Ci0JICBnZmNfY29tbWl0X3N5bWJvbCAo c3ltLT50cy51LmRlcml2ZWQpOwotCSAgLyogX3ZwdHIgbm93IGhhcyB0aGUg X3Z0YWIgaW4gaXQsIGNoYW5nZSBpdCB0byB0aGUgX3Z0eXBlLiAgKi8KLQkg IGlmIChjLT50cy51LmRlcml2ZWQtPmF0dHIudnRhYikKLQkgICAgYy0+dHMu dS5kZXJpdmVkID0gYy0+dHMudS5kZXJpdmVkLT50cy51LmRlcml2ZWQ7Ci0J ICBjLT50cy51LmRlcml2ZWQtPm5zLT50eXBlc19yZXNvbHZlZCA9IDA7Ci0J ICByZXNvbHZlX3R5cGVzIChjLT50cy51LmRlcml2ZWQtPm5zKTsKKwkgIGdm Y19jaGFuZ2VfY2xhc3MgKCZzeW0tPnRzLCAmYXR0ciwgYXMsIDAsIDApOwor CSAgc3ltLT5hcyA9IE5VTEw7CiAJfQogICAgIH0KIApAQCAtOTQ0Myw2ICs5 NjE3LDE0IEBAIHJlc29sdmVfYXNzb2NfdmFyIChnZmNfc3ltYm9sKiBzeW0s IGJvb2wgcmVzb2x2ZV90YXJnZXQpCiAJfQogICAgIH0KIAorICBpZiAoc3lt LT50cy50eXBlID09IEJUX0NMQVNTCisgICAgICAmJiBJU19JTkZFUlJFRF9U WVBFICh0YXJnZXQpCisgICAgICAmJiB0YXJnZXQtPnRzLnR5cGUgPT0gQlRf REVSSVZFRAorICAgICAgJiYgQ0xBU1NfREFUQSAoc3ltKS0+dHMudS5kZXJp dmVkID09IHRhcmdldC0+dHMudS5kZXJpdmVkCisgICAgICAmJiB0YXJnZXQt PnJlZiAmJiB0YXJnZXQtPnJlZi0+bmV4dAorICAgICAgJiYgdGFyZ2V0LT5y ZWYtPm5leHQtPnR5cGUgPT0gUkVGX0FSUkFZKQorICAgIHRhcmdldC0+dHMg PSB0YXJnZXQtPnN5bXRyZWUtPm4uc3ltLT50czsKKwogICAvKiBJZiB0aGUg dGFyZ2V0IGlzIGEgZ29vZCBjbGFzcyBvYmplY3QsIHNvIGlzIHRoZSBhc3Nv Y2lhdGUgdmFyaWFibGUuICAqLwogICBpZiAoc3ltLT50cy50eXBlID09IEJU X0NMQVNTICYmIGdmY19leHByX2F0dHIgKHRhcmdldCkuY2xhc3Nfb2spCiAg ICAgc3ltLT5hdHRyLmNsYXNzX29rID0gMTsKZGlmZiAtLWdpdCBhL2djYy9m b3J0cmFuL3N5bWJvbC5jYyBiL2djYy9mb3J0cmFuL3N5bWJvbC5jYwppbmRl eCA1ZDk4NTJjNzllMC4uNmQ4Y2RmMzlmOTQgMTAwNjQ0Ci0tLSBhL2djYy9m b3J0cmFuL3N5bWJvbC5jYworKysgYi9nY2MvZm9ydHJhbi9zeW1ib2wuY2MK QEAgLTI5MSw2ICsyOTEsMTkgQEAgYm9vbAogZ2ZjX3NldF9kZWZhdWx0X3R5 cGUgKGdmY19zeW1ib2wgKnN5bSwgaW50IGVycm9yX2ZsYWcsIGdmY19uYW1l c3BhY2UgKm5zKQogewogICBnZmNfdHlwZXNwZWMgKnRzOworICBnZmNfZXhw ciAqZTsKKworICAvKiBDaGVjayB0byBzZWUgaWYgYSBmdW5jdGlvbiBzZWxl Y3RvciBvZiB1bmtub3duIHR5cGUgY2FuIGJlIHJlc29sdmVkLiAgKi8KKyAg aWYgKHN5bS0+YXNzb2MKKyAgICAgICYmIChlID0gc3ltLT5hc3NvYy0+dGFy Z2V0KQorICAgICAgJiYgZS0+ZXhwcl90eXBlID09IEVYUFJfRlVOQ1RJT04p CisgICAgeworICAgICAgaWYgKGUtPnRzLnR5cGUgPT0gQlRfVU5LTk9XTikK KwlnZmNfcmVzb2x2ZV9leHByIChlKTsKKyAgICAgIHN5bS0+dHMgPSBlLT50 czsKKyAgICAgIGlmIChzeW0tPnRzLnR5cGUgIT0gQlRfVU5LTk9XTikKKwly ZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgaWYgKHN5bS0+dHMudHlwZSAhPSBC VF9VTktOT1dOKQogICAgIGdmY19pbnRlcm5hbF9lcnJvciAoImdmY19zZXRf ZGVmYXVsdF90eXBlKCk6IHN5bWJvbCBhbHJlYWR5IGhhcyBhIHR5cGUiKTsK QEAgLTMwNyw3ICszMjAsNyBAQCBnZmNfc2V0X2RlZmF1bHRfdHlwZSAoZ2Zj X3N5bWJvbCAqc3ltLCBpbnQgZXJyb3JfZmxhZywgZ2ZjX25hbWVzcGFjZSAq bnMpCiAJCSAgICAgICAiOyBkaWQgeW91IG1lYW4gJXFzPyIsCiAJCSAgICAg ICBzeW0tPm5hbWUsICZzeW0tPmRlY2xhcmVkX2F0LCBndWVzc2VkKTsKIAkg IGVsc2UKLQkgICAgZ2ZjX2Vycm9yICgiU3ltYm9sICVxcyBhdCAlTCBoYXMg bm8gSU1QTElDSVQgdHlwZSIsCisJICAgIGdmY19lcnJvciAoIlN5bWJvbCAl cXMgYXQgJUwgaGFzIG5vIElNUExJQ0lUIHR5cGUoc3ltYm9sKSIsCiAJCSAg ICAgICBzeW0tPm5hbWUsICZzeW0tPmRlY2xhcmVkX2F0KTsKIAkgIHN5bS0+ YXR0ci51bnR5cGVkID0gMTsgLyogRW5zdXJlIHdlIG9ubHkgZ2l2ZSBhbiBl cnJvciBvbmNlLiAgKi8KIAl9CkBAIC0yNDAyLDYgKzI0MTUsNjYgQEAgYmFk OgogfQogCiAKKy8qIEZpbmQgYWxsIGRlcml2ZWQgdHlwZXMgaW4gdGhlIHVw cGVybW9zdCBuYW1lc3BhY2UgdGhhdCBoYXZlIGEgY29tcG9uZW50CisgICBh IGNvbXBvbmVudCBjYWxsZWQgbmFtZSBhbmQgc3Rhc2ggdGhlbSBpbiB0aGUg YXNzb2MgZmllbGQgb2YgYW4KKyAgIGFzc29jaWF0ZSBuYW1lIHZhcmlhYmxl LgorICAgVGhpcyBpcyB1c2VkIHRvIGluZmVyIHRoZSBkZXJpdmVkIHR5cGUg b2YgYW4gYXNzb2NpYXRlIG5hbWUsIHdob3NlIHNlbGVjdG9yCisgICBpcyBh IHNpYmxpbmcgZGVyaXZlZCB0eXBlIGZ1bmN0aW9uIHRoYXQgaGFzIG5vdCB5 ZXQgYmVlbiBwYXJzZWQuIEVpdGhlcgorICAgdGhlIGRlcml2ZWQgdHlwZSBp cyB1c2UgYXNzb2NpYXRlZCBpbiBib3RoIGNvbnRhaW5lZCBhbmQgc2libGlu ZyBwcm9jZWR1cmVzCisgICBvciBpdCBhcHBlYXJzIGluIHRoZSB1cHBlcm1v c3QgbmFtZXNwYWNlLiAgKi8KKworc3RhdGljIGludCBjdHMgPSAwOworc3Rh dGljIHZvaWQKK2ZpbmRfZGVyaXZlZF90eXBlcyAoZ2ZjX3N5bWJvbCAqc3lt LCBnZmNfc3ltdHJlZSAqc3QsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICBi b29sIGNvbnRhaW5lZCkKK3sKKyAgaWYgKHN0LT5uLnN5bSAmJiBzdC0+bi5z eW0tPmF0dHIuZmxhdm9yID09IEZMX0RFUklWRUQKKyAgICAgICYmICFzdC0+ bi5zeW0tPmF0dHIuaXNfY2xhc3MKKyAgICAgICYmICgoY29udGFpbmVkICYm IHN0LT5uLnN5bS0+YXR0ci51c2VfYXNzb2MpIHx8ICFjb250YWluZWQpCisg ICAgICAmJiBnZmNfZmluZF9jb21wb25lbnQgKHN0LT5uLnN5bSwgbmFtZSwg dHJ1ZSwgdHJ1ZSwgTlVMTCkpCisgICAgeworICAgICAgLyogRG8gdGhlIHN0 YXNoaW5nLiAgKi8KKyAgICAgIGN0cysrOworICAgICAgaWYgKHN5bS0+YXNz b2MtPmRlcml2ZWRfdHlwZXMpCisJc3QtPm4uc3ltLT5kdF9uZXh0ID0gc3lt LT5hc3NvYy0+ZGVyaXZlZF90eXBlczsKKyAgICAgIHN5bS0+YXNzb2MtPmRl cml2ZWRfdHlwZXMgPSBzdC0+bi5zeW07CisgICAgfQorCisgIGlmIChzdC0+ bGVmdCkKKyAgICBmaW5kX2Rlcml2ZWRfdHlwZXMgKHN5bSwgc3QtPmxlZnQs IG5hbWUsIGNvbnRhaW5lZCk7CisKKyAgaWYgKHN0LT5yaWdodCkKKyAgICBm aW5kX2Rlcml2ZWRfdHlwZXMgKHN5bSwgc3QtPnJpZ2h0LCBuYW1lLCBjb250 YWluZWQpOworfQorCitpbnQKK2dmY19maW5kX2Rlcml2ZWRfdHlwZXMgKGdm Y19zeW1ib2wgKnN5bSwgZ2ZjX25hbWVzcGFjZSAqbnMsIGNvbnN0IGNoYXIg Km5hbWUpCit7CisgIGdmY19uYW1lc3BhY2UgKmVuY29tcGFzc2luZyA9IE5V TEw7CisgIGdjY19hc3NlcnQgKHN5bS0+YXNzb2MpOworCisgIGN0cyA9IDA7 CisgIHdoaWxlIChucy0+cGFyZW50KQorICAgIHsKKyAgICAgIGlmICghbnMt PnBhcmVudC0+cGFyZW50ICYmIG5zLT5wcm9jX25hbWUKKwkgICYmIChucy0+ cHJvY19uYW1lLT5hdHRyLmZ1bmN0aW9uIHx8IG5zLT5wcm9jX25hbWUtPmF0 dHIuc3Vicm91dGluZSkpCisJZW5jb21wYXNzaW5nID0gbnM7CisgICAgICBu cyA9IG5zLT5wYXJlbnQ7CisgICAgfQorCisgIGlmICghbnMtPmNvbnRhaW5l ZCkKKyAgICByZXR1cm4gY3RzOworCisgIC8qIFNlYXJjaCB0aGUgdG9wIGxl dmVsIG5hbWVzcGFjZSBmaXJzdC4gICovCisgIGZpbmRfZGVyaXZlZF90eXBl cyAoc3ltLCBucy0+c3ltX3Jvb3QsIG5hbWUsIGZhbHNlKTsKKworICAvKiBU aGVuIHRoZSBlbmNvbXBhc3NpbmcgbmFtZXNwYWNlLiAgKi8KKyAgaWYgKGVu Y29tcGFzc2luZykKKyAgICBmaW5kX2Rlcml2ZWRfdHlwZXMgKHN5bSwgZW5j b21wYXNzaW5nLT5zeW1fcm9vdCwgbmFtZSwgdHJ1ZSk7CisKKyAgcmV0dXJu IGN0czsKK30KKwogLyogRmluZCB0aGUgY29tcG9uZW50IHdpdGggdGhlIGdp dmVuIG5hbWUgaW4gdGhlIHVuaW9uIHR5cGUgc3ltYm9sLgogICAgSWYgcmVm IGlzIG5vdCBOVUxMIGl0IHdpbGwgYmUgc2V0IHRvIHRoZSBjaGFpbiBvZiBj b21wb25lbnRzIHRocm91Z2ggd2hpY2gKICAgIHRoZSBjb21wb25lbnQgY2Fu IGFjdHVhbGx5IGJlIGFjY2Vzc2VkLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3Ig dW5pb25zIGJlY2F1c2UKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5z LWV4cHIuY2MgYi9nY2MvZm9ydHJhbi90cmFucy1leHByLmNjCmluZGV4IGQ2 M2MzMDQ2NjFhLi5iZDE0Y2U5OWVkNiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRy YW4vdHJhbnMtZXhwci5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1leHBy LmNjCkBAIC0zMTQyLDYgKzMxNDIsMTAgQEAgZ2ZjX2NvbnZfdmFyaWFibGUg KGdmY19zZSAqIHNlLCBnZmNfZXhwciAqIGV4cHIpCiAgICAgICBnY2NfYXNz ZXJ0IChzZS0+c3RyaW5nX2xlbmd0aCk7CiAgICAgfQogCisgIC8qIFNvbWUg ZXhwcmVzc2lvbnMgbGVhayB0aHJvdWdoIHRoYXQgaGF2ZW4ndCBiZWVuIGZp eGVkIHVwLiAgKi8KKyAgaWYgKElTX0lORkVSUkVEX1RZUEUgKGV4cHIpICYm IGV4cHItPnJlZikKKyAgICBnZmNfZml4dXBfaW5mZXJyZWRfdHlwZV9yZWZz IChleHByKTsKKwogICBnZmNfdHlwZXNwZWMgKnRzID0gJnN5bS0+dHM7CiAg IHdoaWxlIChyZWYpCiAgICAgewpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4v dHJhbnMtc3RtdC5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLXN0bXQuY2MKaW5k ZXggZTA5ODI4ZTIxOGIuLjFlYzc2Zjk3NzhjIDEwMDY0NAotLS0gYS9nY2Mv Zm9ydHJhbi90cmFucy1zdG10LmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5z LXN0bXQuY2MKQEAgLTE3NDcsOSArMTc0Nyw5IEBAIHRyYW5zX2Fzc29jaWF0 ZV92YXIgKGdmY19zeW1ib2wgKnN5bSwgZ2ZjX3dyYXBwZWRfYmxvY2sgKmJs b2NrKQogICBlID0gc3ltLT5hc3NvYy0+dGFyZ2V0OwogCiAgIGNsYXNzX3Rh cmdldCA9IChlLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRSkKLQkJICAg ICYmIGUtPnRzLnR5cGUgPT0gQlRfQ0xBU1MKLQkJICAgICYmIChnZmNfaXNf Y2xhc3Nfc2NhbGFyX2V4cHIgKGUpCi0JCQl8fCBnZmNfaXNfY2xhc3NfYXJy YXlfcmVmIChlLCBOVUxMKSk7CisJCSAgJiYgZS0+dHMudHlwZSA9PSBCVF9D TEFTUworCQkgICYmIChnZmNfaXNfY2xhc3Nfc2NhbGFyX2V4cHIgKGUpCisJ CSAgICAgIHx8IGdmY19pc19jbGFzc19hcnJheV9yZWYgKGUsIE5VTEwpKTsK IAogICB1bmxpbWl0ZWQgPSBVTkxJTUlURURfUE9MWSAoZSk7CiAKQEAgLTIw NDMsNiArMjA0MywxMCBAQCB0cmFuc19hc3NvY2lhdGVfdmFyIChnZmNfc3lt Ym9sICpzeW0sIGdmY193cmFwcGVkX2Jsb2NrICpibG9jaykKIAl7CiAJICBn ZmNfY29udl9leHByICgmc2UsIGUpOwogCSAgc2UuZXhwciA9IGdmY19ldmFs dWF0ZV9ub3cgKHNlLmV4cHIsICZzZS5wcmUpOworCSAgLyogRmluYWxpemUg dGhlIGV4cHJlc3Npb24gYW5kIGZyZWUgaWYgaXQgaXMgYWxsb2NhdGFibGUu ICAqLworCSAgZ2ZjX2ZpbmFsaXplX3RyZWVfZXhwciAoJnNlLCBOVUxMLCBn ZmNfZXhwcl9hdHRyIChlKSwgZS0+cmFuayk7CisJICBnZmNfYWRkX2Jsb2Nr X3RvX2Jsb2NrICgmc2UucG9zdCwgJnNlLmZpbmFsYmxvY2spOworCSAgbmVl ZF9sZW5fYXNzaWduID0gZmFsc2U7CiAJfQogICAgICAgZWxzZSBpZiAoc3lt LT50cy50eXBlID09IEJUX0NMQVNTICYmIENMQVNTX0RBVEEgKHN5bSktPmF0 dHIuZGltZW5zaW9uKQogCXsKQEAgLTIxNTcsMjYgKzIxNjEsMzYgQEAgdHJh bnNfYXNzb2NpYXRlX3ZhciAoZ2ZjX3N5bWJvbCAqc3ltLCBnZmNfd3JhcHBl ZF9ibG9jayAqYmxvY2spCiAJICAgIHsKIAkgICAgICB0cmVlIHN0bXA7CiAJ ICAgICAgdHJlZSBkdG1wOworCSAgICAgIHRyZWUgY3RtcDsKIAotCSAgICAg IHNlLmV4cHIgPSBjdHJlZTsKKwkgICAgICBjdG1wID0gY3RyZWU7CiAJICAg ICAgZHRtcCA9IFRSRUVfVFlQRSAoVFJFRV9UWVBFIChzeW0tPmJhY2tlbmRf ZGVjbCkpOwogCSAgICAgIGN0cmVlID0gZ2ZjX2NyZWF0ZV92YXIgKGR0bXAs ICJjbGFzcyIpOwogCi0JICAgICAgc3RtcCA9IGdmY19jbGFzc19kYXRhX2dl dCAoc2UuZXhwcik7CisJICAgICAgaWYgKElTX0lORkVSUkVEX1RZUEUgKGUp CisJCSAgJiYgIUdGQ19DTEFTU19UWVBFX1AgKFRSRUVfVFlQRSAoc2UuZXhw cikpKQorCQlzdG1wID0gc2UuZXhwcjsKKwkgICAgICBlbHNlCisJCXN0bXAg PSBnZmNfY2xhc3NfZGF0YV9nZXQgKGN0bXApOworCiAJICAgICAgLyogQ29h cnJheSBzY2FsYXIgY29tcG9uZW50IGV4cHJlc3Npb25zIGNhbiBlbWVyZ2Ug ZnJvbQogCQkgdGhlIGZyb250IGVuZCBhcyBhcnJheSBlbGVtZW50cyBvZiB0 aGUgX2RhdGEgZmllbGQuICAqLwogCSAgICAgIGlmIChHRkNfREVTQ1JJUFRP Ul9UWVBFX1AgKFRSRUVfVFlQRSAoc3RtcCkpKQogCQlzdG1wID0gZ2ZjX2Nv bnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoc3RtcCk7CisKKwkgICAgICBpZiAo IVBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKHN0bXApKSkKKwkJc3RtcCA9 IGdmY19idWlsZF9hZGRyX2V4cHIgKE5VTEwsIHN0bXApOworCiAJICAgICAg ZHRtcCA9IGdmY19jbGFzc19kYXRhX2dldCAoY3RyZWUpOwogCSAgICAgIHN0 bXAgPSBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoZHRtcCksIHN0bXApOwog CSAgICAgIGdmY19hZGRfbW9kaWZ5ICgmc2UucHJlLCBkdG1wLCBzdG1wKTsK LQkgICAgICBzdG1wID0gZ2ZjX2NsYXNzX3ZwdHJfZ2V0IChzZS5leHByKTsK KwkgICAgICBzdG1wID0gZ2ZjX2NsYXNzX3ZwdHJfZ2V0IChjdG1wKTsKIAkg ICAgICBkdG1wID0gZ2ZjX2NsYXNzX3ZwdHJfZ2V0IChjdHJlZSk7CiAJICAg ICAgc3RtcCA9IGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChkdG1wKSwgc3Rt cCk7CiAJICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS5wcmUsIGR0bXAsIHN0 bXApOwogCSAgICAgIGlmIChVTkxJTUlURURfUE9MWSAoc3ltKSkKIAkJewot CQkgIHN0bXAgPSBnZmNfY2xhc3NfbGVuX2dldCAoc2UuZXhwcik7CisJCSAg c3RtcCA9IGdmY19jbGFzc19sZW5fZ2V0IChjdG1wKTsKIAkJICBkdG1wID0g Z2ZjX2NsYXNzX2xlbl9nZXQgKGN0cmVlKTsKIAkJICBzdG1wID0gZm9sZF9j b252ZXJ0IChUUkVFX1RZUEUgKGR0bXApLCBzdG1wKTsKIAkJICBnZmNfYWRk X21vZGlmeSAoJnNlLnByZSwgZHRtcCwgc3RtcCk7Cg== --000000000000219c820612c3c3d3 Content-Type: text/x-fortran; charset="US-ASCII"; name="associate_66.f90" Content-Disposition: attachment; filename="associate_66.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltbp5uph3 ISB7IGRnLWRvIHJ1biB9CiEgeyBkZy1vcHRpb25zICItZmR1bXAtdHJlZS1v cmlnaW5hbCIgfQohCiEgVGVzdHMgdW5saW1pdGVkIHBvbHltb3JwaGljIGZ1 bmN0aW9uIHNlbGVjdG9ycyBpbiBBU1NPQ0lBVEUuCiEKISBDb250cmlidXRl ZCBieSBIYXJhbGQgQW5sYXVmICA8YW5sYXVmQGdteC5kZT4gaW4KISBodHRw czovL2djYy5nbnUub3JnL3BpcGVybWFpbC9mb3J0cmFuLzIwMjQtSmFudWFy eS8wNjAwOTguaHRtbAohCnByb2dyYW0gcAogICBpbXBsaWNpdCBub25lCiEg ICAgICAgICAgICAgc2NhbGFyICAgICAgICAgICAgIGFycmF5CiAgIGFzc29j aWF0ZSAodmFyMSA9PiBmb28xKCksICAgIHZhcjIgPT4gZm9vMigpKQogICAg Y2FsbCBwcnQgKHZhcjEpOyAgIGNhbGwgcHJ0ICh2YXIyKQogICBlbmQgYXNz b2NpYXRlCmNvbnRhaW5zCiEgU2NhbGFyIHZhbHVlCiAgIGZ1bmN0aW9uIGZv bzEoKSByZXN1bHQocmVzKQogICAgIGNsYXNzKCopLCBhbGxvY2F0YWJsZSA6 OiByZXMKICAgICByZXMgPSA0Mi4wCiAgIGVuZCBmdW5jdGlvbiBmb28xCiEg QXJyYXkgdmFsdWUKICAgZnVuY3Rpb24gZm9vMigpIHJlc3VsdChyZXMpCiAg ICAgY2xhc3MoKiksIGFsbG9jYXRhYmxlIDo6IHJlcyg6KQogICAgIHJlcyA9 IFs0MiwgODRdCiAgIGVuZCBmdW5jdGlvbiBmb28yCiEgVGVzdCB0aGUgYXNz b2NpYXRlLW5hbWUgdmFsdWUKICAgc3Vicm91dGluZSBwcnQgKHgpCiAgICAg Y2xhc3MoKiksIGludGVudChpbikgOjogeCguLikKICAgICBsb2dpY2FsIDo6 IG9rID0gLmZhbHNlLgogICAgIHNlbGVjdCByYW5rKHgpCiAgICAgICByYW5r ICgwKQogICAgICAgICBzZWxlY3QgdHlwZSAoeCkKICAgICAgICAgICB0eXBl IGlzIChyZWFsKQogICAgICAgICAgIGlmIChpbnQoeCoxMCkgLmVxLiA0MjAp IG9rID0gLnRydWUuCiAgICAgICAgIGVuZCBzZWxlY3QKICAgICAgIHJhbmsg KDEpCiAgICAgICAgIHNlbGVjdCB0eXBlICh4KQogICAgICAgICAgIHR5cGUg aXMgKGludGVnZXIpCiAgICAgICAgICAgaWYgKGFsbCAoeCAuZXEuIFs0Miwg ODRdKSkgb2sgPSAudHJ1ZS4KICAgICAgICAgZW5kIHNlbGVjdAogICAgIGVu ZCBzZWxlY3QKICAgICBpZiAoLm5vdC5vaykgc3RvcCAxCiAgIGVuZCBzdWJy b3V0aW5lIHBydAplbmQKISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgIl9fYnVpbHRpbl9mcmVlIiAyICJvcmlnaW5hbCIgfSB9Cg== --000000000000219c820612c3c3d3 Content-Type: text/x-fortran; charset="UTF-8"; name="associate_65.f90" Content-Disposition: attachment; filename="associate_65.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltbp5upg2 ISB7IGRnLWRvIHJ1biB9CiEgVGVzdCBmaXggZm9yIFBSMTE0MTQxCiEgQ29u dHJpYnV0ZWQgYnkgU3RldmUgS2FyZ2wgIDxzZ2tAdHJvdXRtYXNrLmFwbC53 YXNoaW5ndG9uLmVkdT4KcHJvZ3JhbSBmb28KICAgaW1wbGljaXQgbm9uZQog ICByZWFsIDo6IHkKICAgY29tcGxleCA6OiB6ID0gY21wbHgoLTEsMCkKICAg YXNzb2NpYXRlICh4ID0+IGxvZyhjbXBseCgtMSwwKSkpCiAgICAgIHkgPSB4 JWltICAhIEdhdmUgJ1N5bWJvbCDigJh44oCZIGF0ICgxKSBoYXMgbm8gSU1Q TElDSVQgdHlwZScKICAgICAgaWYgKGludCgxMDAqeSktMzE0IC89IDApIHN0 b3AgMQogICBlbmQgYXNzb2NpYXRlCgohIENoZWNrIHdyaW5rbGUgaW4gY29t bWVudCAxIChwYXJlbnRoZXNlcyBhcm91bmQgc2VsZWN0b3IpIG9mIHRoZSBQ UiBpcyBmaXhlZC4KICAgYXNzb2NpYXRlICh4ID0+ICgobG9nKGNtcGx4KC0x LDApKSkpKQogICAgICB5ID0geCVpbSAgISBHYXZlICdUaGUgUkUgb3IgSU0g cGFydF9yZWYgYXQgKDEpIG11c3QgYmUgYXBwbGllZCB0byBhCiAgICAgICAg ICAgICAgICAhIENPTVBMRVggZXhwcmVzc2lvbicKICAgICAgaWYgKGludCgx MDAqeSktMzE0IC89IDApIHN0b3AgMgogICBlbmQgYXNzb2NpYXRlCgohIE1h a2Ugc3VyZSB0aGF0IElNQUcgaW50cmluc2ljIGlzIE9LLgogICBhc3NvY2lh dGUgKHggPT4gKChsb2coY21wbHgoLTEsMCkpKSkpCiAgICAgIHkgPSBpbWFn ICh4KQogICAgICBpZiAoaW50KDEwMCp5KS0zMTQgLz0gMCkgc3RvcCAzCiAg IGVuZCBhc3NvY2lhdGUKZW5kIHByb2dyYW0K --000000000000219c820612c3c3d3 Content-Type: text/x-fortran; charset="US-ASCII"; name="associate_64.f90" Content-Disposition: attachment; filename="associate_64.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltbp5upb1 ISB7IGRnLWRvIHJ1biB9CiEgeyBkZy1vcHRpb25zICItZmR1bXAtdHJlZS1v cmlnaW5hbCIgfQohCiEgVGVzdHMgdGhlIGZpeCBmb3IgUFI4OTY0NSBhbmQg OTkwNjUsIGluIHdoaWNoIGRlcml2ZWQgdHlwZSBvciBjbGFzcyBmdW5jdGlv bnMsCiEgdXNlZCBhcyBhc3NvY2lhdGUgc2VsZWN0b3JzIGFuZCB3aGljaCB3 ZXJlIHBhcnNlZCBhZnRlciB0aGUgY29udGFpbmluZyBzY29wZQohIG9mIHRo ZSBhc3NvY2lhdGUgc3RhdGVtZW50LCBjYXVzZWQgIm5vIElNUExJQ0lUIHR5 cGUiIGFuZCAiU3ludGF4IiBlcnJvcnMuCiEKISBDb250cmlidXRlZCBieSBJ YW4gSGFydmV5ICA8aWFuX2hhcnZleUBiaWdwb25kLmNvbT4KIQptb2R1bGUg bQogIGltcGxpY2l0IG5vbmUKICB0eXBlIHQKICAgIGludGVnZXIgOjogaSA9 IDAKICBlbmQgdHlwZSB0CiAgaW50ZWdlciA6OiBpID0gMAogIHR5cGUodCks IHBhcmFtZXRlciA6OiB0ZXN0X2FycmF5ICgyKSA9IFt0KDQyKSx0KDg0KV0s ICYKICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zY2FsYXIgPSB0KDk5 KQplbmQgbW9kdWxlIG0KCiEgREVSSVZFRCBUWVBFIFZFUlNJT04gT0YgVEhF IFBST0JMRU0sIEFTIFJFUE9SVEVEIElOIFRIRSBQUnMKbW9kdWxlIHR5cGVf c2VsZWN0b3JzCiAgdXNlIG0KICBpbXBsaWNpdCBub25lCiAgcHJpdmF0ZQog IHB1YmxpYyBmb28xCmNvbnRhaW5zCiEgU2luY2UgdGhlc2UgZnVuY3Rpb25z IGFyZSBwYXJzZWQgZmlyc3QsIHRoZSBzeW1ib2xzIGFyZSBhdmFpbGFibGUg Zm9yCiEgcGFyc2luZyBpbiAnZm9vJy4KICBmdW5jdGlvbiBiYXIxKCkgcmVz dWx0KHJlcykgISBUaGUgYXJyYXkgdmVyc2lvbiBjYXVzZWQgc3ludGF4IGVy cm9ycyBpbiBmb28KICAgIHR5cGUodCksIGFsbG9jYXRhYmxlIDo6IHJlcyg6 KQogICAgYWxsb2NhdGUgKHJlcywgc291cmNlID0gdGVzdF9hcnJheSkKICBl bmQKICBmdW5jdGlvbiBiYXIyKCkgcmVzdWx0KHJlcykgISBTY2FsYXIgY2xh c3MgZnVuY3Rpb25zIHdlcmUgT0sgLSB0ZXN0IGFueXdheQogICAgdHlwZSh0 KSwgYWxsb2NhdGFibGUgOjogcmVzCiAgICBhbGxvY2F0ZSAocmVzLCBzb3Vy Y2UgPSB0ZXN0X3NjYWxhcikKICBlbmQKICBzdWJyb3V0aW5lIGZvbzEoKQoh IEZpcnN0IHRoZSBhcnJheSBzZWxlY3RvcgogICAgYXNzb2NpYXRlICh2YXIx ID0+IGJhcjEoKSkKICAgICAgaWYgKGFueSAodmFyMSVpIC5uZS4gdGVzdF9h cnJheSVpKSkgc3RvcCAxCiAgICAgIGlmICh2YXIxKDIpJWkgLm5lLiB0ZXN0 X2FycmF5KDIpJWkpIHN0b3AgMgogICAgZW5kIGFzc29jaWF0ZQohIE5vdyB0 aGUgc2NhbGFyIHNlbGVjdG9yCiAgICBhc3NvY2lhdGUgKHZhcjIgPT4gYmFy MigpKQogICAgICBpZiAodmFyMiVpIC5uZS4gdGVzdF9zY2FsYXIlaSkgc3Rv cCAzCiAgICBlbmQgYXNzb2NpYXRlCgohIE5vdyB0aGUgYXJyYXkgc2VsZWN0 b3IgdGhhdCBuZWVkZWQgZml4aW5nIHVwIGJlY2F1c2UgdGhlIGZ1bmN0aW9u IGZvbGxvd3MuLi4uCiAgICBhc3NvY2lhdGUgKHZhcjEgPT4gYmFyMygpKQog ICAgICBpZiAoYW55ICh2YXIxJWkgLm5lLiB0ZXN0X2FycmF5JWkpKSBzdG9w IDQKICAgICAgaWYgKHZhcjEoMiklaSAubmUuIHRlc3RfYXJyYXkoMiklaSkg c3RvcCA1CiAgICBlbmQgYXNzb2NpYXRlCiEgLi4uLmFuZCBlcXVpdmFsZW50 IHNjYWxhciBzZWxlY3RvcgogICAgYXNzb2NpYXRlICh2YXIyID0+IGJhcjQo KSkKICAgICAgaWYgKHZhcjIlaSAubmUuIHRlc3Rfc2NhbGFyJWkpIHN0b3Ag NgogICAgZW5kIGFzc29jaWF0ZQogIGVuZCBzdWJyb3V0aW5lIGZvbzEKCiEg VGhlc2UgZnVuY3Rpb25zIGFyZSBwYXJzZWQgYWZ0ZXIgJ2Zvbycgc28gdGhl IHN5bWJvbHMgd2VyZSBub3QgYXZhaWxhYmxlCiEgZm9yIHRoZSBzZWxlY3Rv cnMgYW5kIHRoZSBmaXh1cCwgdGVzdGVkIGhlcmUsIHdhcyBuZWNlc3Nhcnku CiAgZnVuY3Rpb24gYmFyMygpIHJlc3VsdChyZXMpCiAgICBjbGFzcyh0KSwg YWxsb2NhdGFibGUgOjogcmVzKDopCiAgICBhbGxvY2F0ZSAocmVzLCBzb3Vy Y2UgPSB0ZXN0X2FycmF5KQogIGVuZAoKICBmdW5jdGlvbiBiYXI0KCkgcmVz dWx0KHJlcykKICAgIGNsYXNzKHQpLCBhbGxvY2F0YWJsZSA6OiByZXMKICAg IGFsbG9jYXRlIChyZXMsIHNvdXJjZSA9IHQoOTkpKQogIGVuZAplbmQgbW9k dWxlIHR5cGVfc2VsZWN0b3JzCgohIENMQVNTIFZFUlNJT04gT0YgVEhFIFBS T0JMRU0sIFdISUNIIFJFUVVJUkVEIE1PU1QgT0YgVEhFIFdPUkshCm1vZHVs ZSBjbGFzc19zZWxlY3RvcnMKICB1c2UgbQogIGltcGxpY2l0IG5vbmUKICBw cml2YXRlCiAgcHVibGljIGZvbzIKY29udGFpbnMKCiEgU2luY2UgdGhlc2Ug ZnVuY3Rpb25zIGFyZSBwYXJzZWQgZmlyc3QsIHRoZSBzeW1ib2xzIGFyZSBh dmFpbGFibGUgZm9yCiEgcGFyc2luZyBpbiAnZm9vJy4KICBmdW5jdGlvbiBi YXIxKCkgcmVzdWx0KHJlcykgISBUaGUgYXJyYXkgdmVyc2lvbiBjYXVzZWQg c3ludGF4IGVycm9ycyBpbiBmb28KICAgIGNsYXNzKHQpLCBhbGxvY2F0YWJs ZSA6OiByZXMoOikKICAgIGFsbG9jYXRlIChyZXMsIHNvdXJjZSA9IHRlc3Rf YXJyYXkpCiAgZW5kCgogIGZ1bmN0aW9uIGJhcjIoKSByZXN1bHQocmVzKSAh IFNjYWxhciBjbGFzcyBmdW5jdGlvbnMgd2VyZSBPSyAtIHRlc3QgYW55d2F5 CiAgICBjbGFzcyh0KSwgYWxsb2NhdGFibGUgOjogcmVzCiAgICBhbGxvY2F0 ZSAocmVzLCBzb3VyY2UgPSB0KDk5KSkKICBlbmQKCiAgc3Vicm91dGluZSBm b28yKCkKISBGaXJzdCB0aGUgYXJyYXkgc2VsZWN0b3IKICAgIGFzc29jaWF0 ZSAodmFyMSA9PiBiYXIxKCkpCiAgICAgIGlmIChhbnkgKHZhcjElaSAubmUu IHRlc3RfYXJyYXklaSkpIHN0b3AgNwogICAgICBpZiAodmFyMSgyKSVpIC5u ZS4gdGVzdF9hcnJheSgyKSVpKSBzdG9wIDgKICAgICAgc2VsZWN0IHR5cGUg KHggPT4gdmFyMSkKICAgICAgICB0eXBlIGlzICh0KQogICAgICAgICAgaWYg KGFueSAoeCVpIC5uZS4gdGVzdF9hcnJheSVpKSkgc3RvcCA5CiAgICAgICAg ICBpZiAoeCgxKSVpIC5uZS4gdGVzdF9hcnJheSgxKSVpKSBzdG9wIDEwCiAg ICAgICAgY2xhc3MgZGVmYXVsdAogICAgICAgICAgc3RvcCAxMQogICAgICBl bmQgc2VsZWN0CiAgICBlbmQgYXNzb2NpYXRlCgohIE5vdyBzY2FsYXIgc2Vs ZWN0b3IKICAgIGFzc29jaWF0ZSAodmFyMiA9PiBiYXIyKCkpCiAgICAgIHNl bGVjdCB0eXBlICh6ID0+IHZhcjIpCiAgICAgICAgdHlwZSBpcyAodCkKICAg ICAgICAgIGlmICh6JWkgLm5lLiB0ZXN0X3NjYWxhciVpKSBzdG9wIDEyCiAg ICAgICAgY2xhc3MgZGVmYXVsdAogICAgICAgICAgc3RvcCAxMwogICAgICBl bmQgc2VsZWN0CiAgICBlbmQgYXNzb2NpYXRlCgohIFRoaXMgaXMgdGhlIGFy cmF5IHNlbGVjdG9yIHRoYXQgbmVlZGVkIHRoZSBmaXh1cC4KICAgIGFzc29j aWF0ZSAodmFyMSA9PiBiYXIzKCkpCiAgICAgIGlmIChhbnkgKHZhcjElaSAu bmUuIHRlc3RfYXJyYXklaSkpIHN0b3AgMTQKICAgICAgaWYgKHZhcjEoMikl aSAubmUuIHRlc3RfYXJyYXkoMiklaSkgc3RvcCAxNQogICAgICBzZWxlY3Qg dHlwZSAoeCA9PiB2YXIxKQogICAgICAgIHR5cGUgaXMgKHQpCiAgICAgICAg ICBpZiAoYW55ICh4JWkgLm5lLiB0ZXN0X2FycmF5JWkpKSBzdG9wIDE2CiAg ICAgICAgICBpZiAoeCgxKSVpIC5uZS4gdGVzdF9hcnJheSgxKSVpKSBzdG9w IDE3CiAgICAgICAgY2xhc3MgZGVmYXVsdAogICAgICAgICAgc3RvcCAxOAog ICAgICBlbmQgc2VsZWN0CiAgICBlbmQgYXNzb2NpYXRlCgohIE5vdyB0aGUg ZXF1aXZhbGVudCBzY2FsYXIgc2VsZWN0b3IKICAgIGFzc29jaWF0ZSAodmFy MiA9PiBiYXI0KCkpCiAgICAgIHNlbGVjdCB0eXBlICh6ID0+IHZhcjIpCiAg ICAgICAgdHlwZSBpcyAodCkKICAgICAgICAgIGlmICh6JWkgLm5lLiB0ZXN0 X3NjYWxhciVpKSBzdG9wIDE5CiAgICAgICAgY2xhc3MgZGVmYXVsdAogICAg ICAgICAgc3RvcCAyMAogICAgICBlbmQgc2VsZWN0CiAgICBlbmQgYXNzb2Np YXRlCgogIGVuZCBzdWJyb3V0aW5lIGZvbzIKCiEgVGhlc2UgZnVuY3Rpb25z IGFyZSBwYXJzZWQgYWZ0ZXIgJ2Zvbycgc28gdGhlIHN5bWJvbHMgd2VyZSBu b3QgYXZhaWxhYmxlCiEgZm9yIHRoZSBzZWxlY3RvcnMgYW5kIHRoZSBmaXh1 cCwgdGVzdGVkIGhlcmUsIHdhcyBuZWNlc3NhcnkuCiAgZnVuY3Rpb24gYmFy MygpIHJlc3VsdChyZXMpCiAgICBjbGFzcyh0KSwgYWxsb2NhdGFibGUgOjog cmVzKDopCiAgICBhbGxvY2F0ZSAocmVzLCBzb3VyY2UgPSB0ZXN0X2FycmF5 KQogIGVuZAoKICBmdW5jdGlvbiBiYXI0KCkgcmVzdWx0KHJlcykKICAgIGNs YXNzKHQpLCBhbGxvY2F0YWJsZSA6OiByZXMKICAgIGFsbG9jYXRlIChyZXMs IHNvdXJjZSA9IHQoOTkpKQogIGVuZAplbmQgbW9kdWxlIGNsYXNzX3NlbGVj dG9ycwoKISBUSEVTRSBURVNUUyBDQVVTRUQgUFJPQkxFTVMgRFVSSU5HIERF VkVMT1BNRU5UIEZPUiBCT1RIIFBBUlNJTkcgT1JERVJTLgptb2R1bGUgcHJv YmxlbV9zZWxlY3RvcnMKICBpbXBsaWNpdCBub25lCiAgcHJpdmF0ZQogIHB1 YmxpYyBmb28zLCBmb280CiAgdHlwZSB0CiAgICBpbnRlZ2VyIDo6IGkKICBl bmQgdHlwZSB0CiAgdHlwZSBzCiAgICBpbnRlZ2VyIDo6IGkKICAgIHR5cGUo dCkgOjogZHQKICBlbmQgdHlwZSBzCiAgdHlwZSh0KSwgcGFyYW1ldGVyIDo6 IHRlc3RfYXJyYXkgKDIpID0gW3QoNDIpLHQoODQpXSwgJgogICAgICAgICAg ICAgICAgICAgICAgICB0ZXN0X3NjYWxhciA9IHQoOTkpCiAgdHlwZShzKSwg cGFyYW1ldGVyIDo6IHRlc3Rfc2FycmF5ICgyKSA9IFtzKDE0Mix0KDQyKSks cygxODQsdCg4NCkpXQpjb250YWlucwoKICBzdWJyb3V0aW5lIGZvbzMoKQog ICAgaW50ZWdlciA6OiBpCiAgICBibG9jawogICAgICBhc3NvY2lhdGUgKHZh cjEgPT4gYmFyNygpKQogICAgICAgIGlmIChhbnkgKHZhcjElaSAubmUuIHRl c3RfYXJyYXklaSkpIHN0b3AgMjEKICAgICAgICBpZiAodmFyMSgyKSVpIC5u ZS4gdGVzdF9hcnJheSgyKSVpKSBzdG9wIDIyCiAgICAgICAgYXNzb2NpYXRl ICh6ID0+IHZhcjEoMSklaSkKICAgICAgICAgICBpZiAoeiAubmUuIDQyKSBz dG9wIDIzCiAgICAgICAgZW5kIGFzc29jaWF0ZQogICAgZW5kIGFzc29jaWF0 ZQogICAgZW5kIGJsb2NrCgogICAgYXNzb2NpYXRlICh2YXIyID0+IGJhcjgo KSkKICAgICAgaSA9IHZhcjIoMiklaQogICAgICBhc3NvY2lhdGUgKHZhcjMg PT4gdmFyMiVkdCkKICAgICAgICBpZiAoYW55ICh2YXIzJWkgLm5lLiB0ZXN0 X3NhcnJheSVkdCVpKSkgc3RvcCAyNAogICAgICBlbmQgYXNzb2NpYXRlCiAg ICAgIGFzc29jaWF0ZSAodmFyNCA9PiB2YXIyKDIpKQogICAgICAgIGlmICh2 YXI0JWkgLm5lLiAxODQpIHN0b3AgMjUKICAgICAgZW5kIGFzc29jaWF0ZQog ICAgZW5kIGFzc29jaWF0ZQogIGVuZCBzdWJyb3V0aW5lIGZvbzMKCiAgZnVu Y3Rpb24gYmFyNygpIHJlc3VsdChyZXMpCiAgICB0eXBlKHQpLCBhbGxvY2F0 YWJsZSA6OiByZXMoOikKICAgIGFsbG9jYXRlIChyZXMsIHNvdXJjZSA9IHRl c3RfYXJyYXkpCiAgZW5kCgogIGZ1bmN0aW9uIGJhcjgoKSByZXN1bHQocmVz KQogICAgdHlwZShzKSwgYWxsb2NhdGFibGUgOjogcmVzKDopCiAgICBhbGxv Y2F0ZSAocmVzLCBzb3VyY2UgPSB0ZXN0X3NhcnJheSkKICBlbmQKCiAgc3Vi cm91dGluZSBmb280KCkKICAgIGludGVnZXIgOjogaQogICAgYmxvY2sKICAg ICAgYXNzb2NpYXRlICh2YXIxID0+IGJhcjcoKSkKICAgICAgICBpZiAoYW55 ICh2YXIxJWkgLm5lLiB0ZXN0X2FycmF5JWkpKSBzdG9wIDI2CiAgICAgICAg aWYgKHZhcjEoMiklaSAubmUuIHRlc3RfYXJyYXkoMiklaSkgc3RvcCAyNwog ICAgICAgIGFzc29jaWF0ZSAoeiA9PiB2YXIxKDEpJWkpCiAgICAgICAgICAg aWYgKHogLm5lLiA0Mikgc3RvcCAyOAogICAgICAgIGVuZCBhc3NvY2lhdGUK ICAgIGVuZCBhc3NvY2lhdGUKICAgIGVuZCBibG9jawoKICAgIGFzc29jaWF0 ZSAodmFyMiA9PiBiYXI4KCkpCiAgICAgIGkgPSB2YXIyKDIpJWkKICAgICAg YXNzb2NpYXRlICh2YXIzID0+IHZhcjIlZHQpCiAgICAgICAgaWYgKGFueSAo dmFyMyVpIC5uZS4gdGVzdF9zYXJyYXklZHQlaSkpIHN0b3AgMjkKICAgICAg ZW5kIGFzc29jaWF0ZQogICAgICBhc3NvY2lhdGUgKHZhcjQgPT4gdmFyMigy KSkKICAgICAgICBpZiAodmFyNCVpIC5uZS4gMTg0KSBzdG9wIDMwCiAgICAg IGVuZCBhc3NvY2lhdGUKICAgIGVuZCBhc3NvY2lhdGUKICBlbmQgc3Vicm91 dGluZSBmb280CgplbmQgbW9kdWxlIHByb2JsZW1fc2VsZWN0b3JzCgptb2R1 bGUgbW9yZV9wcm9ibGVtX3NlbGVjdG9ycwogIGltcGxpY2l0IG5vbmUKICBw cml2YXRlCiAgcHVibGljIGZvbzUsIGZvbzYKICB0eXBlIHQKICAgIGludGVn ZXIgOjogaSA9IDAKICBlbmQgdHlwZSB0CiAgdHlwZSBzCiAgICBpbnRlZ2Vy IDo6IGkgPSAwCiAgICB0eXBlKHQpIDo6IGR0CiAgZW5kIHR5cGUgcwpjb250 YWlucwohIEluIHRoaXMgdmVyc2lvbiwgdGhlIG9yZGVyIG9mIGRlY2xhcmF0 aW9ucyBvZiAndCcgYW5kICdzJyBpcyBzdWNoIHRoYXQKISBwYXJzaW5nIHZh ciVpIHNldHMgdGhlIHR5cGUgb2YgdmFyIHRvICd0JyBhbmQgdGhpcyBpcyBj b3JyZWN0ZWQgdG8gJ3MnCiEgb24gcGFyc2luZyB2YXIlZHQlaQogIHN1YnJv dXRpbmUgZm9vNSgpCiAgICBhc3NvY2lhdGUgKHZhcjMgPT4gYmFyMygpKQog ICAgICBpZiAodmFyMyVpIC5uZS4gNDIpIHN0b3AgMzEKICAgICAgaWYgKHZh cjMlZHQlaSAubmUuIDg0KSBzdG9wIDMyCiAgICBlbmQgYXNzb2NpYXRlCgoh IFJlcGVhdCB3aXRoIGNsYXNzIHZlcnNpb24KICAgIGFzc29jaWF0ZSAodmFy NCA9PiBiYXI0KCkpCiAgICAgIGlmICh2YXI0JWkgLm5lLiA4NCkgc3RvcCAz MwogICAgICBpZiAodmFyNCVkdCVpIC5uZS4gMTY4KSBzdG9wIDM0CiAgICAg IHNlbGVjdCB0eXBlICh4ID0+IHZhcjQpCiAgICAgICAgdHlwZSBpcyAocykK ICAgICAgICAgIGlmICh4JWkgLm5lLiB2YXI0JWkpIHN0b3AgMzUKICAgICAg ICAgIGlmICh4JWR0JWkgLm5lLiB2YXI0JWR0JWkpIHN0b3AgMzYKICAgICAg ICBjbGFzcyBkZWZhdWx0CiAgICAgICAgICBzdG9wIDM3CiAgICAgIGVuZCBz ZWxlY3QKICAgIGVuZCBhc3NvY2lhdGUKCiEgRGl0dG8gd2l0aCBubyB0eXBl IGNvbXBvbmVudCBjbHVlcyBmb3Igc2VsZWN0IHR5cGUKICAgIGFzc29jaWF0 ZSAodmFyNSA9PiBiYXI0KCkpCiAgICAgIHNlbGVjdCB0eXBlICh6ID0+IHZh cjUpCiAgICAgICAgdHlwZSBpcyAocykKICAgICAgICAgIGlmICh6JWkgLm5l LiA4NCkgc3RvcCAzOAogICAgICAgICAgaWYgKHolZHQlaSAubmUuIDE2OCkg c3RvcCAzOQogICAgICAgIGNsYXNzIGRlZmF1bHQKICAgICAgICAgIHN0b3Ag NDAKICAgICAgZW5kIHNlbGVjdAogICAgZW5kIGFzc29jaWF0ZQogIGVuZCBz dWJyb3V0aW5lIGZvbzUKCiEgTm93IHRoZSBhcnJheSB2ZXJzaW9ucwogIHN1 YnJvdXRpbmUgZm9vNigpCiAgICBjbGFzcyhzKSwgYWxsb2NhdGFibGUgOjog ZWxlbQogICAgYXNzb2NpYXRlICh2YXI2ID0+IGJhcjUoKSkKICAgICAgaWYg KHZhcjYoMSklaSAubmUuIDQyKSBzdG9wIDQxCiAgICAgIGlmIChhbnkgKHZh cjYlZHQlaSAubmUuIFs4NF0pKSBzdG9wIDQyCiAgICBlbmQgYXNzb2NpYXRl CgohIENsYXNzIHZlcnNpb24gd2l0aCBhbiBhc3NpZ25tZW50IHRvIGEgbmFt ZWQgdmFyaWFibGUKICAgIGFzc29jaWF0ZSAodmFyNyA9PiBiYXI2KCkpCiAg ICAgIGVsZW0gPSB2YXI3KDIpCiAgICAgIGlmIChhbnkgKHZhcjclaSAubmUu IFs4NCwgMTY4XSkpIHN0b3AgNDMKICAgICAgaWYgKGFueSAodmFyNyVkdCVp IC5uZS4gWzE2OCwgMzM2XSkpIHN0b3AgNDQKICAgIGVuZCBhc3NvY2lhdGUK ICAgIGlmIChlbGVtJWkgLm5lLiAxNjgpIHN0b3AgNDUKICAgIGlmIChlbGVt JWR0JWkgLm5lLiAzMzYpIHN0b3AgNDYKCiAgICBzZWxlY3QgdHlwZSAoeiA9 PiBlbGVtKQogICAgICB0eXBlIGlzIChzKQogICAgICAgIGlmICh6JWkgLm5l LiAxNjgpIHN0b3AgNDcKICAgICAgICBpZiAoeiVkdCVpIC5uZS4gMzM2KSBz dG9wIDQ4CiAgICAgIGNsYXNzIGRlZmF1bHQKICAgICAgICBzdG9wIDQ5CiAg ICBlbmQgc2VsZWN0CgohIEFycmF5IHZlcnNpb24gd2l0aG91dCB0eXBlIGNs dWVzIGJlZm9yZSBzZWxlY3QgdHlwZQogICAgYXNzb2NpYXRlICh2YXI4ID0+ IGJhcjYoKSkKICAgICAgc2VsZWN0IHR5cGUgKHogPT4gdmFyOCkKICAgICAg ICB0eXBlIGlzIChzKQogICAgICAgICAgaWYgKGFueSAoeiVpIC5uZS4gWzg0 LDE2OF0pKSBzdG9wIDUwCiAgICAgICAgICBpZiAoYW55ICh6JWR0JWkgLm5l LiBbMTY4LDMzNl0pKSBzdG9wIDUxCiAgICAgICAgY2xhc3MgZGVmYXVsdAog ICAgICAgICAgc3RvcCA1MgogICAgICBlbmQgc2VsZWN0CiAgICBlbmQgYXNz b2NpYXRlCiAgZW5kIHN1YnJvdXRpbmUgZm9vNgoKICB0eXBlKHMpIGZ1bmN0 aW9uIGJhcjMoKQogICAgYmFyMz0gcyg0MiwgdCg4NCkpCiAgZW5kCgogIGZ1 bmN0aW9uIGJhcjQoKSByZXN1bHQocmVzKQogICAgY2xhc3MocyksIGFsbG9j YXRhYmxlIDo6IHJlcwogICAgcmVzID0gcyg4NCwgdCgxNjgpKQogIGVuZAoK ICBmdW5jdGlvbiBiYXI1KCkgcmVzdWx0IChyZXMpCiAgICB0eXBlKHMpLCBh bGxvY2F0YWJsZSA6OiByZXMoOikKICAgIHJlcyA9IFtzKDQyLCB0KDg0KSld CiAgZW5kCgogIGZ1bmN0aW9uIGJhcjYoKSByZXN1bHQgKHJlcykKICAgIGNs YXNzKHMpLCBhbGxvY2F0YWJsZSA6OiByZXMoOikKICAgIHJlcyA9IFtzKDg0 LCB0KDE2OCkpLHMoMTY4LCB0KDMzNikpXQogIGVuZAoKZW5kIG1vZHVsZSBt b3JlX3Byb2JsZW1fc2VsZWN0b3JzCgpwcm9ncmFtIHRlc3QKICB1c2UgdHlw ZV9zZWxlY3RvcnMKICB1c2UgY2xhc3Nfc2VsZWN0b3JzCiAgdXNlIHByb2Js ZW1fc2VsZWN0b3JzCiAgdXNlIG1vcmVfcHJvYmxlbV9zZWxlY3RvcnMKICBj YWxsIGZvbzEoKQogIGNhbGwgZm9vMigpCiAgY2FsbCBmb28zKCkKICBjYWxs IGZvbzQoKQogIGNhbGwgZm9vNSgpCiAgY2FsbCBmb282KCkKZW5kIHByb2dy YW0gdGVzdAohIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi X19idWlsdGluX2ZyZWUiIDE4ICJvcmlnaW5hbCIgfSB9Cg== --000000000000219c820612c3c3d3 Content-Type: application/octet-stream; name="Change99065.Logs" Content-Disposition: attachment; filename="Change99065.Logs" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltbp7z814 Rm9ydHJhbjogRml4IGNsYXNzL2Rlcml2ZWQvY29tcGxleCBmdW5jdGlvbiBh c3NvY2lhdGUgc2VsZWN0b3JzIFtQUjg3NDc3XQoKMjAyNC0wMy0wMyAgUGF1 bCBUaG9tYXMgIDxwYXVsdEBnY2MuZ251Lm9yZz4KCSAgICBTdGV2ZSBLYXJn bCAgPHNna0B0cm91dG1hc2suYXBsLndhc2hpbmd0b24uZWR1PgoKZ2NjL2Zv cnRyYW4KCVBSIGZvcnRyYW4vODc0NzcKCVBSIGZvcnRyYW4vODk2NDUKCVBS IGZvcnRyYW4vOTkwNjUKCVBSIGZvcnRyYW4vMTE0MTQxCgkqIGNsYXNzLmNj IChnZmNfY2hhbmdlX2NsYXNzKTogTmV3IGZ1bmN0aW9uIG5lZWRlZCBmb3IK CWFzc29jaWF0ZSBuYW1lcywgd2hlbiByYW5rIGNoYW5nZXMgb3IgYSBkZXJp dmVkIHR5cGUgaXMKCXByb2R1Y2VkIGJ5IHJlc29sdXRpb24KCSogZHVtcC1w YXJzZS10cmVlLmNjIChzaG93X2NvZGVfbm9kZSk6IE1ha2Ugb3V0cHV0IGZv ciBTRUxFQ1QKCVRZUEUgbW9yZSBjb21wcmVoZW5zaWJsZS4KCSogZ2ZvcnRy YW4uaCA6IEFkZCAnZ2ZjX2Fzc29jaWF0aW9uX2xpc3QnIHRvIHN0cnVjdHVy ZQoJJ2dmY19hc3NvY2lhdGlvbl9saXN0Jy4gQWRkIHByb3RvdHlwZXMgZm9y CgknZ2ZjX2ZpbmRfZGVyaXZlZF90eXBlcycsICdnZmNfZml4dXBfaW5mZXJy ZWRfdHlwZV9yZWZzJyBhbmQKCSdnZmNfY2hhbmdlX2NsYXNzJy4gQWRkIG1h Y3JvIElTX0lORkVSUkVEX1RZUEUuCgkqIG1hdGNoLmNjIChnZmNfbWF0Y2hf YXNzb2NpYXRlKTogRWxpbWluYXRlIHBhcmVudGhlc2VzIGZyb20KCXNlbGVj dG9yIGV4cHJlc3Npb24gZXhjZXB0IGZvciB2YXJpYWJsZXMuCgkoY29weV90 c19mcm9tX3NlbGVjdG9yX3RvX2Fzc29jaWF0ZSk6IEFkZCBib2xlYW4gYXJn Cgknc2VsZWN0X3R5cGUnIHdpdGggZGVmYXVsdCBmYWxzZS4gSWYgdGhpcyBp cyBhIHNlbGVjdCB0eXBlIG5hbWUKCWFuZCB0aGUgc2VsZWN0b3IgaXMgYSBp bmZlcnJlZCB0eXBlLCBidWlsZCB0aGUgY2xhc3MgdHlwZSBhbmQKCWFwcGx5 IGl0IHRvIHRoZSBhc3NvY2lhdGUgbmFtZS4KCShidWlsZF9hc3NvY2lhdGVf bmFtZSk6IFBhc3MgdHJ1ZSB0byAnc2VsZWN0X3R5cGUnIGluIGNhbGwgdG8K CXByZXZpb3VzLgoJKiBwYXJzZS5jYyAocGFyc2VfYXNzb2NpYXRlKTogSWYg dGhlIHNlbGVjdG9yIGlzIGEgaW5mZXJyZWQgdHlwZQoJdGhlIGFzc29jaWF0 ZSBuYW1lIGlzIHRvby4gTWFrZSBzdXJlIHRoYXQgZnVuY3Rpb24gc2VsZWN0 b3IKCWNsYXNzIGFuZCByYW5rLCBpZiBrbm93biwgYXJlIHBhc3NlZCB0byB0 aGUgYXNzb2NpYXRlIG5hbWUuIElmCglhIGZ1bmN0aW9uIHJlc3VsdCBleGlz dHMsIHBhc3MgaXRzIHR5cGVzcGVjIHRvIHRoZSBhc3NvY2lhdGUKCW5hbWUu CgkqIHByaW1hcnkuY2MgKGdmY19tYXRjaF92YXJzcGVjKTogSWYgYSBzY2Fs YXIgZGVyaXZlZCB0eXBlCglzZWxlY3QgdHlwZSB0ZW1wb3JhcnkgaGFzIGFu IGFycmF5IHJlZmVyZW5jZSwgbWF0Y2ggdGhlIGFycmF5CglyZWZlcmVuY2Us IHRyZWF0aW5nIHRoaXMgaW4gdGhlIHNhbWUgd2F5IGFzIGFuIGVxdWl2YWxl bmNlCgltZW1iZXIuIElmIHRoaXMgaXMgYSBpbmZlcnJlZCB0eXBlIHdpdGgg YSBjb21wb25lbnQgcmVmZXJlbmNlLAoJY2FsbCAnZ2ZjX2ZpbmRfZGVyaXZl ZF90eXBlcycgdG8gZmluZCBhIHN1aXRhYmxlIGRlcml2ZWQgdHlwZS4KCUlm IHRoaXMgaXMgYW4gaW5xdWlyeSByZWZlcmVuY2UsIHRoZSB0YXJnZXQgZXhw cmVzc2lvbiBpcwoJcGVybWlzc2FibGUgYW5kIGNhbiBiZSByZXNvbHZlZCBh bmQgdGhlIHByaW1hcnkgZXhwcmVzc2lvbiBtdXN0CgliZSBjb21wbGV4IGZv ciByZSBhbmQgaW0gcmVmZXJlbmNlcy4KCSogcmVzb2x2ZS5jYyAocmVzb2x2 ZV92YXJpYWJsZSk6IENhbGwgbmV3IGZ1bmN0aW9uIGJlbG93LgoJKGdmY19m aXh1cF9pbmZlcnJlZF90eXBlX3JlZnMpOiBOZXcgZnVuY3Rpb24gdG8gZW5z dXJlIHRoYXQgdGhlCglleHByZXNzaW9uIHJlZmVyZW5jZXMgZm9yIGEgaW5m ZXJyZWQgdHlwZSBhcmUgY29uc2lzdGVudCB3aXRoCgl0aGUgbm93IGZpeGVk IHVwIHNlbGVjdG9yLgoJKHJlc29sdmVfYXNzb2NfdmFyKTogRW5zdXJlIHRo YXQgZGVyaXZlZCB0eXBlIG9yIGNsYXNzIGZ1bmN0aW9uCglzZWxlY3RvcnMg dHJhbnNtaXQgdGhlIGNvcnJlY3QgYXJyYXlzcGVjIHRvIHRoZSBhc3NvY2lh dGUgbmFtZS4KCShyZXNvbHZlX3NlbGVjdF90eXBlKTogSWYgdGhlIHNlbGVj dG9yIGlzIGFuIGFzc29jaWF0ZSBuYW1lIG9mCglpbmZlcnJlZCB0eXBlIGFu ZCBoYXMgbm8gY29tcG9uZW50IHJlZmVyZW5jZXMsIHRoZSBhc3NvY2lhdGUK CW5hbWUgc2hvdWxkIGhhdmUgaXRzIHR5cGVzcGVjLgoJKiBzeW1ib2wuY2Mg KGdmY19zZXRfZGVmYXVsdF90eXBlKTogSWYgYW4gYXNzb2NpYXRlIG5hbWUg d2l0aAoJdW5rbm93biB0eXBlIGhhcyBhIHNlbGVjdG9yIGV4cHJlc3Npb24s IHRyeSByZXNvbHZpbmcgdGhlIGV4cHIuCgkoZmluZF9kZXJpdmVkX3R5cGVz LCBnZmNfZmluZF9kZXJpdmVkX3R5cGVzKTogTmV3IGZ1bmN0aW9ucwoJdGhh dCBzZWFyY2ggZm9yIGEgZGVyaXZlZCB0eXBlIHdpdGggYSBnaXZlbiBuYW1l LgoJKiB0cmFucy1leHByLmNjIChnZmNfY29udl92YXJpYWJsZSk6IFNvbWUg aW5mZXJyZWQgdHlwZSBleHBycwoJZXNjYXBlIHJlc29sdXRpb24gc28gY2Fs bCAnZ2ZjX2ZpeHVwX2luZmVycmVkX3R5cGVfcmVmcycuCgkqIHRyYW5zLXN0 bXQuY2MgKHRyYW5zX2Fzc29jaWF0ZV92YXIpOiBUaWR5IHVwIGV4cHJlc3Np b24gZm9yCgknY2xhc3NfdGFyZ2V0Jy4gQ29ycmVjdGx5IGhhbmRsZSBzZWxl Y3RvcnMgdGhhdCBhcmUgY2xhc3MKCWZ1bmN0aW9ucyBhbmQgY2xhc3MgYXJy YXkgcmVmZXJlbmNlcywgcGFzc2VkIGFzIGRlcml2ZWQgdHlwZXMuCgpnY2Mv dGVzdHN1aXRlLwoJUFIgZm9ydHJhbi84NzQ3NwoJUFIgZm9ydHJhbi84OTY0 NQoJUFIgZm9ydHJhbi85OTA2NQoJKiBnZm9ydHJhbi5kZy9hc3NvY2lhdGVf NjQuZjkwIDogTmV3IHRlc3QKCSogZ2ZvcnRyYW4uZGcvYXNzb2NpYXRlXzY2 LmY5MCA6IE5ldyB0ZXN0CgoJUFIgZm9ydHJhbi8xMTQxNDEKCSogZ2ZvcnRy YW4uZGcvYXNzb2NpYXRlXzY1LmY5MCA6IE5ldyB0ZXN0Cg== --000000000000219c820612c3c3d3--