From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) by sourceware.org (Postfix) with ESMTPS id D07B3384BC00 for ; Thu, 6 Oct 2022 12:13:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D07B3384BC00 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x52e.google.com with SMTP id z97so2499628ede.8 for ; Thu, 06 Oct 2022 05:13:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=ScGEJP/AXzK9tYxwwrgxTAmfRuTutRCFesBqiqgi4sE=; b=qndTeXwGyzPGerSv3QJdnYrTMxCd0DGTCKrb479ZdgkwwtdupNAk8/OeD46Rqoz6dd d467VKB9Y9/h57PX2oIfgweNt6rZRcZ78mfsKRzizHCCrgAcpTHQFXqSel34G1QaZv+P xclkv838VXld5PUKueLQbc8wYob0gL+GrlVK9pS3eKDXBYDfCsTpdF5WnaC0MZzBCnat 6x19zN/2LbweNHaauIm/Hc76EeVt5Bh4h+mzKld8GQ11MZ7zMtzVN68cM7SxxSKpC5X1 2EVoXFg+2MXsK5N5CXA8GZkbmaO9vcll0QJR3CK47Dh5YIrNKQdDgCnIkle6f26yJcbC rfSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=ScGEJP/AXzK9tYxwwrgxTAmfRuTutRCFesBqiqgi4sE=; b=D6Q0MITj+9Km5kYHCLeQa27MBqiNOVFk2SZ7OkTUT/WrwvLhk1LkZqWJpmhmhZsn21 IFk2QWZR8b8tSI/GbkceCj+wDnOOF43tG/h79SAp6HDgSIdY/dts065kOQO+zahoB24L hZ54EPqvVTn7Fxk4R1vOjlzXLLBBZGUP04Bp/NModeAjp00mH36hHsXA7sBa7ypbmPJK pB+0lhrvYUWL+6NkAExGTA2GG6mLwx/Efg5T7GEyEygjorhH3z0FmZ5GM6R3PybCzww8 BvVjnH34FkaWz19x+BHwpPhovRG3TxkJScM1c1szAKaLzMp9C4jnX3fcNIagMY0uDumh +t+g== X-Gm-Message-State: ACrzQf0lfvw0hRCe0R5VscFBY/0/uHRZVWi113G8ArhWc2KzFf/c7g9m z5y/EK8hW0Xxf1vF5YUsyzVofwH6ccs579sRiRo= X-Google-Smtp-Source: AMsMyM7k75iR9VQbTs5sXSMqgOrKcDPlXnYY8vwth1CgLSsdKKwytgM4rEw5vrwfSZJ8HbODTcsdgtmW6x/GbzEg/DA= X-Received: by 2002:a05:6402:3584:b0:458:d3fa:fb89 with SMTP id y4-20020a056402358400b00458d3fafb89mr4490392edc.218.1665058431427; Thu, 06 Oct 2022 05:13:51 -0700 (PDT) MIME-Version: 1.0 References: <20220930080033.70151-1-juzhe.zhong@rivai.ai> In-Reply-To: <20220930080033.70151-1-juzhe.zhong@rivai.ai> From: Richard Biener Date: Thu, 6 Oct 2022 14:13:38 +0200 Message-ID: Subject: Re: [PATCH] Add first-order recurrence autovectorization To: juzhe.zhong@rivai.ai Cc: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Content-Type: multipart/mixed; boundary="000000000000566b1b05ea5ca02d" X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,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: --000000000000566b1b05ea5ca02d Content-Type: text/plain; charset="UTF-8" On Fri, Sep 30, 2022 at 10:00 AM wrote: > > From: Ju-Zhe Zhong > > Hi, After fixing previous ICE. > I add full implementation (insert permutation to get correct result.) > > The gimple IR is correct now I think: > # t_21 = PHI <_4(6), t_12(9)> > # i_22 = PHI > # vectp_a.6_26 = PHI > # vect_vec_recur_.9_9 = PHI > # vectp_b.11_7 = PHI > # curr_cnt_36 = PHI > # loop_len_20 = PHI > _38 = .WHILE_LEN (loop_len_20, 32, POLY_INT_CST [4, 4]); > while_len_37 = _38; > _1 = (long unsigned int) i_22; > _2 = _1 * 4; > _3 = a_14(D) + _2; > vect__4.8_19 = .LEN_LOAD (vectp_a.6_26, 32B, loop_len_20, 0); > _4 = *_3; > _5 = b_15(D) + _2; > vect_vec_recur_.9_9 = VEC_PERM_EXPR ; > > But I encounter another ICE: > 0x169e0e7 process_bb > ../../../riscv-gcc/gcc/tree-ssa-sccvn.cc:7498 > 0x16a09af do_rpo_vn(function*, edge_def*, bitmap_head*, bool, bool, vn_lookup_kind) > ../../../riscv-gcc/gcc/tree-ssa-sccvn.cc:8109 > 0x16a0fe7 do_rpo_vn(function*, edge_def*, bitmap_head*) > ../../../riscv-gcc/gcc/tree-ssa-sccvn.cc:8205 > 0x179b7db execute > ../../../riscv-gcc/gcc/tree-vectorizer.cc:1365 > > Could you help me with this? After fixing this ICE, I think the loop vectorizer > can run correctly. Maybe you can test is in X86 or ARM after fixing this ICE. Sorry for the late reply, the issue is that we have vect_vec_recur_.7_7 = VEC_PERM_EXPR ; thus + for (unsigned i = 0; i < ncopies; ++i) + { + gphi *phi = as_a (STMT_VINFO_VEC_STMTS (def_stmt_info)[i]); + tree latch = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop)); + tree recur = gimple_phi_result (phi); + gassign *assign + = gimple_build_assign (recur, VEC_PERM_EXPR, recur, latch, perm); + gimple_assign_set_lhs (assign, recur); needs to create a new SSA name for each LHS. You shouldn't create code in vect_get_vec_defs_for_operand either. Let me mangle the patch a bit. The attached is what I came up with, the permutes need to be generated when the backedge PHI values are filled in. Missing are ncopies > 1 handling, we'd need to think of how the initial value and the permutes would work here, missing is SLP support but more importantly handling in the epilogue (so on x86 requires constant loop bound) I've added a testcase that triggers on x86_64. Richard. --000000000000566b1b05ea5ca02d Content-Type: application/octet-stream; name=p Content-Disposition: attachment; filename=p Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8x0sf3n0 RnJvbSAyYzZlMzI2NWMxZDY2NzViMzQyNzc2NjE4NDcwOGI0NjU1OGI2ZjExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmd1ZW50aGVyQHN1c2UuZGU+CkRh dGU6IFRodSwgNiBPY3QgMjAyMiAxMzo1NjowOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFZlY3Rv cml6YXRpb24gb2YgZmlyc3Qtb3JkZXIgcmVjdXJyZW5jZXMKVG86IGdjYy1wYXRjaGVzQGdjYy5n bnUub3JnCgpNaXNzaW5nOgogKiBuY29waWVzID4gMQogKiBTTFAKICogZXBpbG9ndWUgaGFuZGxp bmcKICogY29zdGluZwogKiBtb3JlIHRlc3RjYXNlcyAod2l0aCBydW50aW1lIHZlcmlmaWNhdGlv bikKCgkqIHRyZWUtdmVjdG9yaXplci5oOgoJKiB0cmVlLXZlY3QtbG9vcC5jYwoJKiB0cmVlLXZl Y3Qtc3RtdHMuY2MKCgkqIGdjYy5kZy92ZWN0L3ZlY3QtcmVjdXJyLTEuYzogTmV3IHRlc3RjYXNl LgotLS0KIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1yZWN1cnItMS5jIHwgIDE0ICsr CiBnY2MvdHJlZS12ZWN0LWxvb3AuY2MgICAgICAgICAgICAgICAgICAgICB8IDIyOCArKysrKysr KysrKysrKysrKysrKy0tCiBnY2MvdHJlZS12ZWN0LXN0bXRzLmNjICAgICAgICAgICAgICAgICAg ICB8ICAxMiArLQogZ2NjL3RyZWUtdmVjdG9yaXplci5oICAgICAgICAgICAgICAgICAgICAgfCAg IDQgKwogNCBmaWxlcyBjaGFuZ2VkLCAyNDAgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXJlY3Vy ci0xLmMKCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtcmVjdXJy LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1yZWN1cnItMS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MGM3YWUxMTdjMQotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1yZWN1cnItMS5jCkBAIC0wLDAg KzEsMTQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKK3ZvaWQgZm9vIChpbnQgKiBfX3Jlc3RyaWN0X18g YSwgaW50ICogX19yZXN0cmljdF9fIGIsIGludCAqIF9fcmVzdHJpY3RfXyBjKQoreworICBpbnQg dCA9ICpjOworICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kpCisgICAgeworICAgICAgYltp XSA9IGFbaV0gLSB0OworICAgICAgdCA9IGFbaV07CisgICAgfQorfQorCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgInZlY3Rvcml6ZWQgMSBsb29wcyBpbiBmdW5jdGlvbiIgInZlY3Qi IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1sb29wLmNjIGIvZ2NjL3RyZWUtdmVj dC1sb29wLmNjCmluZGV4IDI1MzZjYzNjZjQ5Li43YjZiYTFlMDRjOSAxMDA2NDQKLS0tIGEvZ2Nj L3RyZWUtdmVjdC1sb29wLmNjCisrKyBiL2djYy90cmVlLXZlY3QtbG9vcC5jYwpAQCAtNTI5LDYg KzUyOSwzOSBAQCB2ZWN0X2lubmVyX3BoaV9pbl9kb3VibGVfcmVkdWN0aW9uX3AgKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbywgZ3BoaSAqcGhpKQogICByZXR1cm4gZmFsc2U7CiB9CiAKKy8qIFJl dHVybnMgdHJ1ZSBpZiBQaGkgaXMgYSBmaXJzdC1vcmRlciByZWN1cnJlbmNlLiBBIGZpcnN0LW9y ZGVyCisgICByZWN1cnJlbmNlIGlzIGEgbm9uLXJlZHVjdGlvbiByZWN1cnJlbmNlIHJlbGF0aW9u IGluIHdoaWNoIHRoZSB2YWx1ZSBvZgorICAgdGhlIHJlY3VycmVuY2UgaW4gdGhlIGN1cnJlbnQg bG9vcCBpdGVyYXRpb24gZXF1YWxzIGEgdmFsdWUgZGVmaW5lZCBpbgorICAgdGhlIHByZXZpb3Vz IGl0ZXJhdGlvbi4gICovCisKK3N0YXRpYyBib29sCit2ZWN0X3BoaV9maXJzdF9vcmRlcl9yZWN1 cnJlbmNlX3AgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgY2xhc3MgbG9vcCAqbG9vcCwKKwkJ CQkgICBncGhpICpwaGkpCit7CisgIC8qIEVuc3VyZSB0aGUgbG9vcCBsYXRjaCBkZWZpbml0aW9u IGlzIGZyb20gd2l0aGluIHRoZSBsb29wLiAgKi8KKyAgZWRnZSBsYXRjaCA9IGxvb3BfbGF0Y2hf ZWRnZSAobG9vcCk7CisgIHRyZWUgbGRlZiA9IFBISV9BUkdfREVGX0ZST01fRURHRSAocGhpLCBs YXRjaCk7CisgIGlmIChUUkVFX0NPREUgKGxkZWYpICE9IFNTQV9OQU1FCisgICAgICB8fCBTU0Ff TkFNRV9JU19ERUZBVUxUX0RFRiAobGRlZikKKyAgICAgIHx8ICFmbG93X2JiX2luc2lkZV9sb29w X3AgKGxvb3AsIGdpbXBsZV9iYiAoU1NBX05BTUVfREVGX1NUTVQgKGxkZWYpKSkpCisgICAgcmV0 dXJuIGZhbHNlOworCisgIC8qIEZpcnN0LW9yZGVyIHJlY3VycmVuY2UgYXV0b3ZlY3Rvcml6YXRp b24gbmVlZHMgc2h1ZmZsZSB2ZWN0b3IuICAqLworICB0cmVlIHNjYWxhcl90eXBlID0gVFJFRV9U WVBFIChQSElfUkVTVUxUIChwaGkpKTsKKyAgdHJlZSB2ZWN0eXBlID0gZ2V0X3ZlY3R5cGVfZm9y X3NjYWxhcl90eXBlIChsb29wX3ZpbmZvLCBzY2FsYXJfdHlwZSk7CisgIC8qIEZpcnN0LW9yZGVy IHJlY3VycmVuY2UgYXV0b3ZlY3Rvcml6YXRpb24gbmVlZHMgdG8gaGFuZGxlIHBlcm11dGF0aW9u CisgICAgIHdpdGggaW5kaWNlcyA9IFtudW5pdHMtMSwgbnVuaXRzLCBudW5pdHMrMSwgLi4uXS4g ICovCisgIHBvbHlfaW50NjQgbnVuaXRzID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHZlY3R5cGUp OworICB2ZWNfcGVybV9idWlsZGVyIHNlbCAobnVuaXRzLCAxLCAzKTsKKyAgZm9yIChpbnQgaSA9 IDA7IGkgPCAzOyArK2kpCisgICAgc2VsLnF1aWNrX3B1c2ggKG51bml0cyAtIDEgKyBpKTsKKyAg dmVjX3Blcm1faW5kaWNlcyBpbmRpY2VzIChzZWwsIDEsIG51bml0cyAqIDIpOworICBpZiAoIWNh bl92ZWNfcGVybV9jb25zdF9wIChUWVBFX01PREUgKHZlY3R5cGUpLCBUWVBFX01PREUgKHZlY3R5 cGUpLCBpbmRpY2VzKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIHRydWU7Cit9CisK IC8qIEZ1bmN0aW9uIHZlY3RfYW5hbHl6ZV9zY2FsYXJfY3ljbGVzXzEuCiAKICAgIEV4YW1pbmUg dGhlIGNyb3NzIGl0ZXJhdGlvbiBkZWYtdXNlIGN5Y2xlcyBvZiBzY2FsYXIgdmFyaWFibGVzCkBA IC02NjYsNiArNjk5LDggQEAgdmVjdF9hbmFseXplX3NjYWxhcl9jeWNsZXNfMSAobG9vcF92ZWNf aW5mbyBsb29wX3ZpbmZvLCBjbGFzcyBsb29wICpsb29wLAogICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgZWxzZSBpZiAodmVjdF9waGlfZmlyc3Rfb3Jk ZXJfcmVjdXJyZW5jZV9wIChsb29wX3ZpbmZvLCBsb29wLCBwaGkpKQorCVNUTVRfVklORk9fREVG X1RZUEUgKHN0bXRfdmluZm8pID0gdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNlOwogICAgICAg ZWxzZQogICAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAgICAgICAgICAgZHVtcF9wcmlu dGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlvbiwKQEAgLTE4MTAs NyArMTg0NSw4IEBAIHZlY3RfYW5hbHl6ZV9sb29wX29wZXJhdGlvbnMgKGxvb3BfdmVjX2luZm8g bG9vcF92aW5mbykKIAogICAgICAgICAgIGlmICgoU1RNVF9WSU5GT19SRUxFVkFOVCAoc3RtdF9p bmZvKSA9PSB2ZWN0X3VzZWRfaW5fc2NvcGUKICAgICAgICAgICAgICAgIHx8IFNUTVRfVklORk9f TElWRV9QIChzdG10X2luZm8pKQotICAgICAgICAgICAgICAmJiBTVE1UX1ZJTkZPX0RFRl9UWVBF IChzdG10X2luZm8pICE9IHZlY3RfaW5kdWN0aW9uX2RlZikKKwkgICAgICAmJiBTVE1UX1ZJTkZP X0RFRl9UWVBFIChzdG10X2luZm8pICE9IHZlY3RfaW5kdWN0aW9uX2RlZgorCSAgICAgICYmIFNU TVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgIT0gdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJl bmNlKQogCSAgICAvKiBBIHNjYWxhci1kZXBlbmRlbmNlIGN5Y2xlIHRoYXQgd2UgZG9uJ3Qgc3Vw cG9ydC4gICovCiAJICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0IChwaGksCiAJCQkJ CSAgICJub3QgdmVjdG9yaXplZDoiCkBAIC0xODMxLDYgKzE4NjcsMTAgQEAgdmVjdF9hbmFseXpl X2xvb3Bfb3BlcmF0aW9ucyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvKQogCQkgICAgICAgJiYg ISBQVVJFX1NMUF9TVE1UIChzdG10X2luZm8pKQogCQlvayA9IHZlY3Rvcml6YWJsZV9yZWR1Y3Rp b24gKGxvb3BfdmluZm8sCiAJCQkJCSAgICAgc3RtdF9pbmZvLCBOVUxMLCBOVUxMLCAmY29zdF92 ZWMpOworCSAgICAgIGVsc2UgaWYgKFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykKKwkJ CSA9PSB2ZWN0X2ZpcnN0X29yZGVyX3JlY3VycmVuY2UpCisJCW9rID0gdmVjdG9yaXphYmxlX2Rl cF9waGkgKGxvb3BfdmluZm8sIHN0bXRfaW5mbywgTlVMTCwgTlVMTCwKKwkJCQkJICAgJmNvc3Rf dmVjKTsKICAgICAgICAgICAgIH0KIAogCSAgLyogU0xQIFBISXMgYXJlIHRlc3RlZCBieSB2ZWN0 X3NscF9hbmFseXplX25vZGVfb3BlcmF0aW9ucy4gICovCkBAIC04MjY3LDYgKzgzMDcsMTE5IEBA IHZlY3Rvcml6YWJsZV9waGkgKHZlY19pbmZvICosCiAgIHJldHVybiB0cnVlOwogfQogCisvKiBW ZWN0b3JpemVzIERlcCBQSElzLiAgKi8KKworYm9vbAordmVjdG9yaXphYmxlX2RlcF9waGkgKGxv b3BfdmVjX2luZm8gbG9vcF92aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCisJCSAgICAg IGdpbXBsZSAqKnZlY19zdG10LCBzbHBfdHJlZSBzbHBfbm9kZSwKKwkJICAgICAgc3RtdF92ZWN0 b3JfZm9yX2Nvc3QgKikKK3sKKyAgaWYgKCFsb29wX3ZpbmZvIHx8ICFpc19hPGdwaGkgKj4gKHN0 bXRfaW5mby0+c3RtdCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGdwaGkgKnBoaSA9IGFzX2E8 Z3BoaSAqPiAoc3RtdF9pbmZvLT5zdG10KTsKKworICAvKiBTbyBmYXIgd2Ugb25seSBzdXBwb3J0 IGZpcnN0LW9yZGVyIHJlY3VycmVuY2UgYXV0by12ZWN0b3JpemF0aW9uLiAgKi8KKyAgaWYgKFNU TVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgIT0gdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJl bmNlKQorICAgIHJldHVybiBmYWxzZTsKKworICB0cmVlIHZlY3R5cGUgPSBTVE1UX1ZJTkZPX1ZF Q1RZUEUgKHN0bXRfaW5mbyk7CisgIGlmICghdmVjX3N0bXQpIC8qIHRyYW5zZm9ybWF0aW9uIG5v dCByZXF1aXJlZC4gICovCisgICAgeworICAgICAgLyogU28gZmFyIHdlIGRvbid0IHN1cHBvcnQg Zmlyc3Qtb3JkZXIgcmVjdXJyZW5jZSBmb3IgU0xQCisJIGF1dG8tdmVjdG9yaXphdGlvbi4gICAq LworICAgICAgaWYgKHNscF9ub2RlKQorCXsKKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKKwkg ICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlv biwKKwkJCSAgICAgImRvIG5vdCBzdXBwb3J0IGZpcnN0LW9yZGVyIHJlY3VycmVuY2UiCisJCQkg ICAgICJhdXRvdmVjdG9yaXphdGlvbiBmb3IgU0xQIG5vZGVcbiIpOworCSAgcmV0dXJuIGZhbHNl OworCX0KKworICAgICAgLyogPz8/ICBXZSBwcm9iYWJseSBjYW4gc2hpZnQgaW4gemVyb3MgZm9y IHRoZSBpbml0aWFsIHZhbHVlcz8gICovCisgICAgICB1bnNpZ25lZCBuY29waWVzID0gdmVjdF9n ZXRfbnVtX2NvcGllcyAobG9vcF92aW5mbywgdmVjdHlwZSk7CisgICAgICBpZiAobmNvcGllcyA+ IDEpCisJcmV0dXJuIGZhbHNlOworCisgICAgICAvKiA/Pz8gIEFjY291bnQgZm9yIHRoZSBuZWNl c3NhcnkgcGVybXV0ZXMuICAqLworICAgICAgU1RNVF9WSU5GT19UWVBFIChzdG10X2luZm8pID0g ZGVwX3BoaV9pbmZvX3R5cGU7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyogVGhp cyBpcyB0aGUgc2Vjb25kIHBoYXNlIG9mIHZlY3Rvcml6aW5nIGZpcnN0LW9yZGVyIHJlY2VjdXJy ZW5jZXMuIEFuCisgICAgIG92ZXJ2aWV3IG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBkZXNjcmli ZWQgYmVsb3cuIFN1cHBvc2Ugd2UgaGF2ZSB0aGUKKyAgICAgZm9sbG93aW5nIGxvb3AuCisKKyAg ICAgaW50MzJfdCB0ID0gMDsKKyAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAg ICAgeworCWJbaV0gPSBhW2ldIC0gdDsKKwl0ID0gYVtpXTsKKyAgICAgIH0KKworICAgIFRoZXJl IGlzIGEgZmlyc3Qtb3JkZXIgcmVjdXJyZW5jZSBvbiAiYSIuIEZvciB0aGlzIGxvb3AsIHRoZSBz aG9ydGhhbmQKKyAgICBzY2FsYXIgSVIgbG9va3MgbGlrZToKKworICAgIHNjYWxhci5wcmVoZWFk ZXI6CisgICAgICBpbml0ID0gYVstMV0KKyAgICAgIGJyIGxvb3AuYm9keQorCisgICAgc2NhbGFy LmJvZHk6CisgICAgICBpID0gUEhJIDwwKHNjYWxhci5wcmVoZWFkZXIpLCBpKzEoc2NhbGFyLmJv ZHkpPgorICAgICAgXzIgPSBQSEkgPChpbml0KHNjYWxhci5wcmVoZWFkZXIpLCA8XzEoc2NhbGFy LmJvZHkpPgorICAgICAgXzEgPSBhW2ldCisgICAgICBiW2ldID0gXzEgLSBfMgorICAgICAgYnIg Y29uZCwgc2NhbGFyLmJvZHksIC4uLgorCisgICAgSW4gdGhpcyBleGFtcGxlLCBfMiBpcyBhIHJl Y3VycmVuY2UgYmVjYXVzZSBpdCdzIHZhbHVlIGRlcGVuZHMgb24gdGhlCisgICAgcHJldmlvdXMg aXRlcmF0aW9uLiBJbiB0aGUgZmlyc3QgcGhhc2Ugb2YgdmVjdG9yaXphdGlvbiwgd2UgY3JlYXRl ZCBhCisgICAgdGVtcG9yYXJ5IHZhbHVlIGZvciBfMi4gV2Ugbm93IGNvbXBsZXRlIHRoZSB2ZWN0 b3JpemF0aW9uIGFuZCBwcm9kdWNlIHRoZQorICAgIHNob3J0aGFuZCB2ZWN0b3IgSVIgc2hvd24g YmVsb3cgKFZGID0gNCkuCisKKyAgICB2ZWN0b3IucHJlaGVhZGVyOgorICAgICAgdmVjdF9pbml0 ID0gdmVjdF9jc3QoLi4uLCAuLi4sIC4uLiwgYVstMV0pCisgICAgICBiciB2ZWN0b3IuYm9keQor CisgICAgdmVjdG9yLmJvZHkKKyAgICAgIGkgPSBQSEkgPDAodmVjdG9yLnByZWhlYWRlciksIGkr NCh2ZWN0b3IuYm9keSk+CisgICAgICB2ZWN0XzEgPSBQSEkgPHZlY3RfaW5pdCh2ZWN0b3IucHJl aGVhZGVyKSwgdjIodmVjdG9yLmJvZHkpPgorICAgICAgdmVjdF8yID0gYVtpLCBpKzEsIGkrMiwg aSszXTsKKyAgICAgIHZlY3RfMyA9IHZlY3Rvcih2ZWN0XzEoMyksIHZlY3RfMigwLCAxLCAyKSkK KyAgICAgIGJbaSwgaSsxLCBpKzIsIGkrM10gPSB2ZWN0XzIgLSB2ZWN0XzMKKyAgICAgIGJyIGNv bmQsIHZlY3Rvci5ib2R5LCBtaWRkbGUuYmxvY2sKKworICAgIG1pZGRsZS5ibG9jazoKKyAgICAg IHggPSB2ZWN0XzIoMykKKyAgICAgIGJyIHNjYWxhci5wcmVoZWFkZXIKKworICAgIHNjYWxhci5w aDoKKyAgICAgIHNfaW5pdCA9IFBISSA8eChtaWRkbGUuYmxvY2spLCBhWy0xXSwgb3RoZXJ3aXNl PgorICAgICAgYnIgc2NhbGFyLmJvZHkKKworICAgIEFmdGVyIGV4ZWN1dGlvbiBjb21wbGV0ZXMg dGhlIHZlY3RvciBsb29wLCB3ZSBleHRyYWN0IHRoZSBuZXh0IHZhbHVlIG9mCisgICAgdGhlIHJl Y3VycmVuY2UgKHgpIHRvIHVzZSBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBpbiB0aGUgc2NhbGFyIGxv b3AuICAqLworCisgIGVkZ2UgcGUgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChMT09QX1ZJTkZPX0xP T1AgKGxvb3BfdmluZm8pKTsKKyAgYmFzaWNfYmxvY2sgYmIgPSBnaW1wbGVfYmIgKHBoaSk7Cisg IHRyZWUgcHJlaGVhZGVyID0gUEhJX0FSR19ERUZfRlJPTV9FREdFIChwaGksIHBlKTsKKyAgdHJl ZSB2ZWNfaW5pdCA9IGJ1aWxkX3ZlY3Rvcl9mcm9tX3ZhbCAodmVjdHlwZSwgcHJlaGVhZGVyKTsK KyAgdmVjX2luaXQgPSB2ZWN0X2luaXRfdmVjdG9yIChsb29wX3ZpbmZvLCBzdG10X2luZm8sIHZl Y19pbml0LCB2ZWN0eXBlLCBOVUxMKTsKKyAgLyogQ3JlYXRlIHRoZSB2ZWN0b3JpemVkIGZpcnN0 LW9yZGVyIFBISSBub2RlLiAgKi8KKyAgdHJlZSB2ZWNfZGVzdCA9IHZlY3RfZ2V0X25ld192ZWN0 X3ZhciAodmVjdHlwZSwKKwkJCQkJIHZlY3Rfc2ltcGxlX3ZhciwgInZlY19yZWN1cl8iKTsKKyAg Z3BoaSAqbmV3X3BoaSA9IGNyZWF0ZV9waGlfbm9kZSAodmVjX2Rlc3QsIGJiKTsKKyAgYWRkX3Bo aV9hcmcgKG5ld19waGksIHZlY19pbml0LCBwZSwgVU5LTk9XTl9MT0NBVElPTik7CisgIGlmIChz bHBfbm9kZSkKKyAgICBTTFBfVFJFRV9WRUNfU1RNVFMgKHNscF9ub2RlKS5xdWlja19wdXNoIChu ZXdfcGhpKTsKKyAgZWxzZQorICAgIFNUTVRfVklORk9fVkVDX1NUTVRTIChzdG10X2luZm8pLnNh ZmVfcHVzaCAobmV3X3BoaSk7CisKKyAgaWYgKCFzbHBfbm9kZSkKKyAgICAqdmVjX3N0bXQgPSBT VE1UX1ZJTkZPX1ZFQ19TVE1UUyAoc3RtdF9pbmZvKVswXTsKKyAgcmV0dXJuIHRydWU7Cit9CisK IC8qIFJldHVybiB0cnVlIGlmIFZFQ1RZUEUgcmVwcmVzZW50cyBhIHZlY3RvciB0aGF0IHJlcXVp cmVzIGxvd2VyaW5nCiAgICBieSB0aGUgdmVjdG9yIGxvd2VyaW5nIHBhc3MuICAqLwogCkBAIC0x MDIyMywyNyArMTAzNzYsNjYgQEAgbWF5YmVfc2V0X3ZlY3Rvcml6ZWRfYmFja2VkZ2VfdmFsdWUg KGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKICAgaW1tX3VzZV9pdGVyYXRvciBpdGVyOwogICB1 c2Vfb3BlcmFuZF9wIHVzZV9wOwogICBGT1JfRUFDSF9JTU1fVVNFX0ZBU1QgKHVzZV9wLCBpdGVy LCBkZWYpCi0gICAgaWYgKGdwaGkgKnBoaSA9IGR5bl9jYXN0IDxncGhpICo+IChVU0VfU1RNVCAo dXNlX3ApKSkKLSAgICAgIGlmIChnaW1wbGVfYmIgKHBoaSktPmxvb3BfZmF0aGVyLT5oZWFkZXIg PT0gZ2ltcGxlX2JiIChwaGkpCi0JICAmJiAocGhpX2luZm8gPSBsb29wX3ZpbmZvLT5sb29rdXBf c3RtdCAocGhpKSkKLQkgICYmIFNUTVRfVklORk9fUkVMRVZBTlRfUCAocGhpX2luZm8pCi0JICAm JiBWRUNUT1JJWkFCTEVfQ1lDTEVfREVGIChTVE1UX1ZJTkZPX0RFRl9UWVBFIChwaGlfaW5mbykp CisgICAgeworICAgICAgZ3BoaSAqcGhpID0gZHluX2Nhc3QgPGdwaGkgKj4gKFVTRV9TVE1UICh1 c2VfcCkpOworICAgICAgaWYgKCFwaGkpCisJY29udGludWU7CisgICAgICBpZiAoIShnaW1wbGVf YmIgKHBoaSktPmxvb3BfZmF0aGVyLT5oZWFkZXIgPT0gZ2ltcGxlX2JiIChwaGkpCisJICAgICYm IChwaGlfaW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1cF9zdG10IChwaGkpKQorCSAgICAmJiBTVE1U X1ZJTkZPX1JFTEVWQU5UX1AgKHBoaV9pbmZvKSkpCisJY29udGludWU7CisgICAgICBsb29wX3Ag bG9vcCA9IGdpbXBsZV9iYiAocGhpKS0+bG9vcF9mYXRoZXI7CisgICAgICBlZGdlIGUgPSBsb29w X2xhdGNoX2VkZ2UgKGxvb3ApOworICAgICAgaWYgKFBISV9BUkdfREVGX0ZST01fRURHRSAocGhp LCBlKSAhPSBkZWYpCisJY29udGludWU7CisKKyAgICAgIGlmIChWRUNUT1JJWkFCTEVfQ1lDTEVf REVGIChTVE1UX1ZJTkZPX0RFRl9UWVBFIChwaGlfaW5mbykpCiAJICAmJiBTVE1UX1ZJTkZPX1JF RFVDX1RZUEUgKHBoaV9pbmZvKSAhPSBGT0xEX0xFRlRfUkVEVUNUSU9OCiAJICAmJiBTVE1UX1ZJ TkZPX1JFRFVDX1RZUEUgKHBoaV9pbmZvKSAhPSBFWFRSQUNUX0xBU1RfUkVEVUNUSU9OKQogCXsK LQkgIGxvb3BfcCBsb29wID0gZ2ltcGxlX2JiIChwaGkpLT5sb29wX2ZhdGhlcjsKLQkgIGVkZ2Ug ZSA9IGxvb3BfbGF0Y2hfZWRnZSAobG9vcCk7Ci0JICBpZiAoUEhJX0FSR19ERUZfRlJPTV9FREdF IChwaGksIGUpID09IGRlZikKKwkgIHZlYzxnaW1wbGUgKj4gJnBoaV9kZWZzID0gU1RNVF9WSU5G T19WRUNfU1RNVFMgKHBoaV9pbmZvKTsKKwkgIHZlYzxnaW1wbGUgKj4gJmxhdGNoX2RlZnMgPSBT VE1UX1ZJTkZPX1ZFQ19TVE1UUyAoZGVmX3N0bXRfaW5mbyk7CisJICBnY2NfYXNzZXJ0IChwaGlf ZGVmcy5sZW5ndGggKCkgPT0gbGF0Y2hfZGVmcy5sZW5ndGggKCkpOworCSAgZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IHBoaV9kZWZzLmxlbmd0aCAoKTsgKytpKQorCSAgICBhZGRfcGhpX2FyZyAo YXNfYSA8Z3BoaSAqPiAocGhpX2RlZnNbaV0pLAorCQkJIGdpbXBsZV9nZXRfbGhzIChsYXRjaF9k ZWZzW2ldKSwgZSwKKwkJCSBnaW1wbGVfcGhpX2FyZ19sb2NhdGlvbiAocGhpLCBlLT5kZXN0X2lk eCkpOworCX0KKyAgICAgIGVsc2UgaWYgKFNUTVRfVklORk9fREVGX1RZUEUgKHBoaV9pbmZvKSA9 PSB2ZWN0X2ZpcnN0X29yZGVyX3JlY3VycmVuY2UpCisJeworCSAgLyogSW5zZXJ0IHNodWZmbGV2 ZWN0b3IgdG8gZm9yIGZpcnN0LW9yZGVyIHJlY3VycmVuY2UKKwkgICAgIGF1dG92ZWN0b3JpemF0 aW9uLgorCSAgICAgICByZXN1bHQgPSBWRUNfUEVSTSA8dmVjX3JlY3VyLCB2ZWN0XzEsCisJCQkJ ICBpbmRleFtudW5pdHMtMSwgbnVuaXRzLCAuLi5dPi4gICovCisJICB0cmVlIHZlY3R5cGUgPSBT VE1UX1ZJTkZPX1ZFQ1RZUEUgKHBoaV9pbmZvKTsKKwkgIHBvbHlfaW50NjQgbnVuaXRzID0gVFlQ RV9WRUNUT1JfU1VCUEFSVFMgKHZlY3R5cGUpOworCSAgdmVjX3Blcm1fYnVpbGRlciBzZWwgKG51 bml0cywgMSwgMyk7CisJICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKKwkgICAgc2VsLnF1 aWNrX3B1c2ggKG51bml0cyAtIDEgKyBpKTsKKwkgIHZlY19wZXJtX2luZGljZXMgaW5kaWNlcyAo c2VsLCAxLCBudW5pdHMgKiAyKTsKKwkgIHRyZWUgcGVybSA9IHZlY3RfZ2VuX3Blcm1fbWFza19j aGVja2VkICh2ZWN0eXBlLCBpbmRpY2VzKTsKKworCSAgdmVjPGdpbXBsZSAqPiAmcGhpX2RlZnMg PSBTVE1UX1ZJTkZPX1ZFQ19TVE1UUyAocGhpX2luZm8pOworCSAgdmVjPGdpbXBsZSAqPiAmbGF0 Y2hfZGVmcyA9IFNUTVRfVklORk9fVkVDX1NUTVRTIChkZWZfc3RtdF9pbmZvKTsKKwkgIGdjY19h c3NlcnQgKHBoaV9kZWZzLmxlbmd0aCAoKSA9PSBsYXRjaF9kZWZzLmxlbmd0aCAoKSk7CisJICAv KiA/Pz8gIEZvciBuY29waWVzID4gMSB0aGlzIHNjaGVtZSBtaWdodCBub3QgYmUgY29ycmVjdC4g ICovCisJICBnY2NfYXNzZXJ0IChwaGlfZGVmcy5sZW5ndGggKCkgPT0gMSk7CisJICBmb3IgKHVu c2lnbmVkIGkgPSAwOyBpIDwgcGhpX2RlZnMubGVuZ3RoICgpOyArK2kpCiAJICAgIHsKLQkgICAg ICB2ZWM8Z2ltcGxlICo+ICZwaGlfZGVmcyA9IFNUTVRfVklORk9fVkVDX1NUTVRTIChwaGlfaW5m byk7Ci0JICAgICAgdmVjPGdpbXBsZSAqPiAmbGF0Y2hfZGVmcyA9IFNUTVRfVklORk9fVkVDX1NU TVRTIChkZWZfc3RtdF9pbmZvKTsKLQkgICAgICBnY2NfYXNzZXJ0IChwaGlfZGVmcy5sZW5ndGgg KCkgPT0gbGF0Y2hfZGVmcy5sZW5ndGggKCkpOwotCSAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBwaGlfZGVmcy5sZW5ndGggKCk7ICsraSkKLQkJYWRkX3BoaV9hcmcgKGFzX2EgPGdwaGkg Kj4gKHBoaV9kZWZzW2ldKSwKLQkJCSAgICAgZ2ltcGxlX2dldF9saHMgKGxhdGNoX2RlZnNbaV0p LCBlLAotCQkJICAgICBnaW1wbGVfcGhpX2FyZ19sb2NhdGlvbiAocGhpLCBlLT5kZXN0X2lkeCkp OworCSAgICAgIHRyZWUgcmVjdXIgPSBtYWtlX3NzYV9uYW1lICh2ZWN0eXBlKTsKKwkgICAgICBn YXNzaWduICphc3NpZ24KKwkJPSBnaW1wbGVfYnVpbGRfYXNzaWduIChyZWN1ciwgVkVDX1BFUk1f RVhQUiwKKwkJCQkgICAgICAgZ2ltcGxlX3BoaV9yZXN1bHQgKHBoaV9kZWZzW2ldKSwKKwkJCQkg ICAgICAgZ2ltcGxlX2dldF9saHMgKGxhdGNoX2RlZnNbaV0pLCBwZXJtKTsKKwkgICAgICBnaW1w bGVfc3RtdF9pdGVyYXRvciBnc2kgPSBnc2lfZm9yX3N0bXQgKGxhdGNoX2RlZnNbaV0pOworCSAg ICAgIGdzaV9uZXh0ICgmZ3NpKTsKKwkgICAgICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24g KGxvb3BfdmluZm8sIGRlZl9zdG10X2luZm8sCisJCQkJCSAgIGFzc2lnbiwgJmdzaSk7CisJICAg ICAgYWRkX3BoaV9hcmcgKGFzX2EgPGdwaGkgKj4gKHBoaV9kZWZzW2ldKSwgcmVjdXIsIGUsCisJ CQkgICBnaW1wbGVfcGhpX2FyZ19sb2NhdGlvbiAocGhpLCBlLT5kZXN0X2lkeCkpOwogCSAgICB9 CiAJfQorICAgIH0KIH0KIAogLyogVmVjdG9yaXplIFNUTVRfSU5GTyBpZiByZWxldmFudCwgaW5z ZXJ0aW5nIGFueSBuZXcgaW5zdHJ1Y3Rpb25zIGJlZm9yZSBHU0kuCkBAIC0xMDY1Miw2ICsxMDg0 NCw3IEBAIHZlY3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgZ2lt cGxlICpsb29wX3ZlY3Rvcml6ZWRfY2FsbCkKIAkgICAgICAgfHwgU1RNVF9WSU5GT19ERUZfVFlQ RSAoc3RtdF9pbmZvKSA9PSB2ZWN0X3JlZHVjdGlvbl9kZWYKIAkgICAgICAgfHwgU1RNVF9WSU5G T19ERUZfVFlQRSAoc3RtdF9pbmZvKSA9PSB2ZWN0X2RvdWJsZV9yZWR1Y3Rpb25fZGVmCiAJICAg ICAgIHx8IFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgPT0gdmVjdF9uZXN0ZWRfY3lj bGUKKwkgICAgICAgfHwgU1RNVF9WSU5GT19ERUZfVFlQRSAoc3RtdF9pbmZvKSA9PSB2ZWN0X2Zp cnN0X29yZGVyX3JlY3VycmVuY2UKIAkgICAgICAgfHwgU1RNVF9WSU5GT19ERUZfVFlQRSAoc3Rt dF9pbmZvKSA9PSB2ZWN0X2ludGVybmFsX2RlZikKIAkgICAgICAmJiAhIFBVUkVfU0xQX1NUTVQg KHN0bXRfaW5mbykpCiAJICAgIHsKQEAgLTEwNjc3LDcgKzEwODcwLDggQEAgdmVjdF90cmFuc2Zv cm1fbG9vcCAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVjdG9yaXpl ZF9jYWxsKQogCSAgICAgICB8fCBTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2luZm8pID09IHZl Y3RfcmVkdWN0aW9uX2RlZgogCSAgICAgICB8fCBTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2lu Zm8pID09IHZlY3RfZG91YmxlX3JlZHVjdGlvbl9kZWYKIAkgICAgICAgfHwgU1RNVF9WSU5GT19E RUZfVFlQRSAoc3RtdF9pbmZvKSA9PSB2ZWN0X25lc3RlZF9jeWNsZQotCSAgICAgICB8fCBTVE1U X1ZJTkZPX0RFRl9UWVBFIChzdG10X2luZm8pID09IHZlY3RfaW50ZXJuYWxfZGVmKQorCSAgICAg ICB8fCBTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2luZm8pID09IHZlY3RfaW50ZXJuYWxfZGVm CisJICAgICAgIHx8IFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgPT0gdmVjdF9maXJz dF9vcmRlcl9yZWN1cnJlbmNlKQogCSAgICAgICYmICEgUFVSRV9TTFBfU1RNVCAoc3RtdF9pbmZv KSkKIAkgICAgbWF5YmVfc2V0X3ZlY3Rvcml6ZWRfYmFja2VkZ2VfdmFsdWUgKGxvb3BfdmluZm8s IHN0bXRfaW5mbyk7CiAJfQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYyBiL2dj Yy90cmVlLXZlY3Qtc3RtdHMuY2MKaW5kZXggYzhkMWVmYzQ1ZTUuLjY4Yjc5YThmOTg4IDEwMDY0 NAotLS0gYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjCisrKyBiL2djYy90cmVlLXZlY3Qtc3RtdHMu Y2MKQEAgLTExNDA0LDYgKzExNDA0LDEyIEBAIHZlY3RfdHJhbnNmb3JtX3N0bXQgKHZlY19pbmZv ICp2aW5mbywKICAgICAgIGdjY19hc3NlcnQgKGRvbmUpOwogICAgICAgYnJlYWs7CiAKKyAgICBj YXNlIGRlcF9waGlfaW5mb190eXBlOgorICAgICAgZG9uZSA9IHZlY3Rvcml6YWJsZV9kZXBfcGhp IChhc19hIDxsb29wX3ZlY19pbmZvPiAodmluZm8pLAorCQkJCSAgc3RtdF9pbmZvLCAmdmVjX3N0 bXQsIHNscF9ub2RlLCBOVUxMKTsKKyAgICAgIGdjY19hc3NlcnQgKGRvbmUpOworICAgICAgYnJl YWs7CisKICAgICBjYXNlIHBoaV9pbmZvX3R5cGU6CiAgICAgICBkb25lID0gdmVjdG9yaXphYmxl X3BoaSAodmluZm8sIHN0bXRfaW5mbywgJnZlY19zdG10LCBzbHBfbm9kZSwgTlVMTCk7CiAgICAg ICBnY2NfYXNzZXJ0IChkb25lKTsKQEAgLTExODA0LDYgKzExODEwLDkgQEAgdmVjdF9pc19zaW1w bGVfdXNlICh0cmVlIG9wZXJhbmQsIHZlY19pbmZvICp2aW5mbywgZW51bSB2ZWN0X2RlZl90eXBl ICpkdCwKIAljYXNlIHZlY3RfbmVzdGVkX2N5Y2xlOgogCSAgZHVtcF9wcmludGYgKE1TR19OT1RF LCAibmVzdGVkIGN5Y2xlXG4iKTsKIAkgIGJyZWFrOworCWNhc2UgdmVjdF9maXJzdF9vcmRlcl9y ZWN1cnJlbmNlOgorCSAgZHVtcF9wcmludGYgKE1TR19OT1RFLCAiZmlyc3Qgb3JkZXIgcmVjdXJy ZW5jZVxuIik7CisJICBicmVhazsKIAljYXNlIHZlY3RfdW5rbm93bl9kZWZfdHlwZToKIAkgIGR1 bXBfcHJpbnRmIChNU0dfTk9URSwgInVua25vd25cbiIpOwogCSAgYnJlYWs7CkBAIC0xMTg1Miw3 ICsxMTg2MSw4IEBAIHZlY3RfaXNfc2ltcGxlX3VzZSAodHJlZSBvcGVyYW5kLCB2ZWNfaW5mbyAq dmluZm8sIGVudW0gdmVjdF9kZWZfdHlwZSAqZHQsCiAgICAgICB8fCAqZHQgPT0gdmVjdF9pbmR1 Y3Rpb25fZGVmCiAgICAgICB8fCAqZHQgPT0gdmVjdF9yZWR1Y3Rpb25fZGVmCiAgICAgICB8fCAq ZHQgPT0gdmVjdF9kb3VibGVfcmVkdWN0aW9uX2RlZgotICAgICAgfHwgKmR0ID09IHZlY3RfbmVz dGVkX2N5Y2xlKQorICAgICAgfHwgKmR0ID09IHZlY3RfbmVzdGVkX2N5Y2xlCisJCQl8fCAqZHQg PT0gdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNlKQogICAgIHsKICAgICAgICp2ZWN0eXBlID0g U1RNVF9WSU5GT19WRUNUWVBFIChkZWZfc3RtdF9pbmZvKTsKICAgICAgIGdjY19hc3NlcnQgKCp2 ZWN0eXBlICE9IE5VTExfVFJFRSk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmgg Yi9nY2MvdHJlZS12ZWN0b3JpemVyLmgKaW5kZXggNDg3MGM3NTQ0OTkuLmE4YTgzY2VkMjUyIDEw MDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVyLmgKKysrIGIvZ2NjL3RyZWUtdmVjdG9yaXpl ci5oCkBAIC02NSw2ICs2NSw3IEBAIGVudW0gdmVjdF9kZWZfdHlwZSB7CiAgIHZlY3RfcmVkdWN0 aW9uX2RlZiwKICAgdmVjdF9kb3VibGVfcmVkdWN0aW9uX2RlZiwKICAgdmVjdF9uZXN0ZWRfY3lj bGUsCisgIHZlY3RfZmlyc3Rfb3JkZXJfcmVjdXJyZW5jZSwKICAgdmVjdF91bmtub3duX2RlZl90 eXBlCiB9OwogCkBAIC0xMDI3LDYgKzEwMjgsNyBAQCBlbnVtIHN0bXRfdmVjX2luZm9fdHlwZSB7 CiAgIGN5Y2xlX3BoaV9pbmZvX3R5cGUsCiAgIGxjX3BoaV9pbmZvX3R5cGUsCiAgIHBoaV9pbmZv X3R5cGUsCisgIGRlcF9waGlfaW5mb190eXBlLAogICBsb29wX2V4aXRfY3RybF92ZWNfaW5mb190 eXBlCiB9OwogCkBAIC0yMzMxLDYgKzIzMzMsOCBAQCBleHRlcm4gYm9vbCB2ZWN0b3JpemFibGVf bGNfcGhpIChsb29wX3ZlY19pbmZvLCBzdG10X3ZlY19pbmZvLAogCQkJCSBnaW1wbGUgKiosIHNs cF90cmVlKTsKIGV4dGVybiBib29sIHZlY3Rvcml6YWJsZV9waGkgKHZlY19pbmZvICosIHN0bXRf dmVjX2luZm8sIGdpbXBsZSAqKiwgc2xwX3RyZWUsCiAJCQkgICAgICBzdG10X3ZlY3Rvcl9mb3Jf Y29zdCAqKTsKK2V4dGVybiBib29sIHZlY3Rvcml6YWJsZV9kZXBfcGhpIChsb29wX3ZlY19pbmZv LCBzdG10X3ZlY19pbmZvLAorCQkJCSBnaW1wbGUgKiosIHNscF90cmVlLCBzdG10X3ZlY3Rvcl9m b3JfY29zdCAqKTsKIGV4dGVybiBib29sIHZlY3RfZW11bGF0ZWRfdmVjdG9yX3AgKHRyZWUpOwog ZXh0ZXJuIGJvb2wgdmVjdF9jYW5fdmVjdG9yaXplX3dpdGhvdXRfc2ltZF9wICh0cmVlX2NvZGUp OwogZXh0ZXJuIGJvb2wgdmVjdF9jYW5fdmVjdG9yaXplX3dpdGhvdXRfc2ltZF9wIChjb2RlX2hl bHBlcik7Ci0tIAoyLjM1LjMKCg== --000000000000566b1b05ea5ca02d--