From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x634.google.com (mail-pl1-x634.google.com [IPv6:2607:f8b0:4864:20::634]) by sourceware.org (Postfix) with ESMTPS id 31FFA3858C60 for ; Mon, 20 Dec 2021 22:22:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 31FFA3858C60 Received: by mail-pl1-x634.google.com with SMTP id y7so9198908plp.0 for ; Mon, 20 Dec 2021 14:22:40 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=a7PnBXjZKAENuFTf0p5Q5oEPenU0oGVLlg6nAYsuu5Q=; b=0Vn/zoacJVgF8BDHcRpvygZqmRwk1EVtuZsAIurO3tv1yUnqmxqYAae9NgSLPYoIIi ElibJ22JwwMmBlG6PEa0KJXeTrimmFR52TkpeKQqCTI590TT28wW1Bimdqd3/yvDgd2Q XJQEgy8BrFu/Ap++xCBMTSR8xFXMM49ux0nOaIPsMjugTYfIfCCKFlhV81YJYIeY+PjO R53fkBrST2mKYvRhD6wNO7F/Et/4DEa1z5SghSePdV5IA3RblZ7CQdw2VVUmmSpT+as5 01E6XfWBK/0XxiESN7H93v7K69hcLvDU3x6TbT13qDjH7F7Ykon39tKz6tKcx8p05SiA PrLQ== X-Gm-Message-State: AOAM530FfYHaE3rfxndfT3InB11dIVtQRT7t4LzLOm2t4+F+KS314p7e BF9KYnPRDl1wn1m6zjpYzfnWQlryl2/usQCtDy0= X-Google-Smtp-Source: ABdhPJyoXqTom9Xay8Ky7F+XhEjFhLmDN1B+hfGpG1HLOqKTuS6M/gXangLjfL5xqOpfrYJMMgGKQWZ7q5NEzjBfKpM= X-Received: by 2002:a17:903:191:b0:148:a2e8:2c17 with SMTP id z17-20020a170903019100b00148a2e82c17mr300235plg.102.1640038959105; Mon, 20 Dec 2021 14:22:39 -0800 (PST) MIME-Version: 1.0 From: "H.J. Lu" Date: Mon, 20 Dec 2021 14:22:03 -0800 Message-ID: Subject: [PATCH v2] ix86: Don't use the 'm' constraint for x86_64_general_operand To: Jakub Jelinek , Uros Bizjak , Hongtao Liu , liwei.xu@intel.com Cc: GCC Patches Content-Type: multipart/mixed; boundary="0000000000009404bb05d39b53ad" X-Spam-Status: No, score=-3022.3 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 autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Dec 2021 22:22:41 -0000 --0000000000009404bb05d39b53ad Content-Type: text/plain; charset="UTF-8" On Mon, Dec 20, 2021 at 12:38 PM Jakub Jelinek wrote: > > On Mon, Dec 20, 2021 at 11:44:08AM -0800, H.J. Lu wrote: > > The problem is in > > > > (define_memory_constraint "TARGET_MEM_CONSTRAINT" > > "Matches any valid memory." > > (and (match_code "mem") > > (match_test "memory_address_addr_space_p (GET_MODE (op), XEXP (op, 0), > > MEM_ADDR_SPACE (op))"))) > > > > define_register_constraint allows LRA to convert the operand to the form > > '(mem (reg X))', where X is a base register. I am testing the v2 patch with > > If you mean replacing an immediate with a MEM containing that immediate, > isn't that often the right thing though? > I mean, if the register pressure is high and options are either spill some > register, set it to immediate, use it in one instruction and then fill the > spilled register (i.e. 2 memory loads), compared to a MEM use on the > arithmetic instruction one MEM seems cheaper to me. With -fPIC and the > cst needing runtime relocation slightly less so of course. > We will check the performance impact on SPEC CPU 2017. Here is the v2 patch. Liwei, can you help collect SPEC CPU 2017 impact of the enclosed patch? Thanks. > The code due to ivopts is trying to have something like > size_t a = (size_t) &tunable_list; > size_t b = 0xffffffffffffffa8 - a; > size_t c = x + b; > and for that cst - &symbol one needs actually 2 registers, one to hold the > constant and one to hold the (%rip) based address. > (insn 790 789 791 111 (set (reg:DI 292) > (const_int -88 [0xffffffffffffffa8])) "dl-tunables.c":304:15 76 {*movdi_internal} > (nil)) > (insn 791 790 792 111 (set (reg:DI 293) > (symbol_ref:DI ("tunable_list") [flags 0x2] )) "dl-tunables.c":304:15 76 {*movdi_internal} > (nil)) > (insn 792 791 793 111 (parallel [ > (set (reg:DI 291) > (minus:DI (reg:DI 292) > (reg:DI 293))) > (clobber (reg:CC 17 flags)) > ]) "dl-tunables.c":304:15 299 {*subdi_1} > (nil)) > (insn 793 792 794 111 (parallel [ > (set (reg:DI 294) > (plus:DI (reg:DI 291) > (reg:DI 198 [ ivtmp.176 ]))) > (clobber (reg:CC 17 flags)) > ]) "dl-tunables.c":304:15 226 {*adddi_1} > (nil)) > It would be smarter to rewrite the above into a lea 88+tunable_list(%rip), %temp1 > and use a subtraction instead of addition in the last insn above, or of > course in the particular case even consider the following 2 instructions > that do: > (insn 794 793 795 111 (set (reg:DI 296) > (symbol_ref:DI ("tunable_list") [flags 0x2] )) "dl-tunables.c":304:15 76 {*movdi_internal} > (nil)) > (insn 795 794 796 111 (parallel [ > (set (reg:DI 295 [ cur ]) > (plus:DI (reg:DI 294) > (reg:DI 296))) > (clobber (reg:CC 17 flags)) > ]) "dl-tunables.c":304:15 226 {*adddi_1} > (nil)) > and find out that &tuneble_list - &tuneble_list is 0 and we don't need it at > all. Guess we don't figure that out due to the cast of one of those > addresses to size_t and the other one used in POINTER_PLUS_EXPR as normal > pointer. > > Jakub > -- H.J. --0000000000009404bb05d39b53ad Content-Type: application/x-patch; name="v2-0001-ix86-Don-t-use-the-m-constraint-for-x86_64_genera.patch" Content-Disposition: attachment; filename="v2-0001-ix86-Don-t-use-the-m-constraint-for-x86_64_genera.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kxf8lniq0 RnJvbSA0NTY3NjcwOWJlMmEzOTkyMGUwZTkzMjYwNDk2NzZlNmRmZGQ3ODg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IFN1biwgMTkgRGVjIDIwMjEgMDg6NDc6MDMgLTA4MDAKU3ViamVjdDogW1BBVENIIHYyXSBpeDg2 OiBEb24ndCB1c2UgdGhlICdtJyBjb25zdHJhaW50IGZvcgogeDg2XzY0X2dlbmVyYWxfb3BlcmFu ZAoKVGhlICdtJyBjb25zdHJhaW50IGlzIGRlZmluZWQgd2l0aCBkZWZpbmVfbWVtb3J5X2NvbnN0 cmFpbnQgd2hpY2ggYWxsb3dzCkxSQSB0byBjb252ZXJ0IHRoZSBvcGVyYW5kIHRvIHRoZSBmb3Jt ICcobWVtIChyZWcgWCkpJywgd2hlcmUgWCBpcyBhCmJhc2UgcmVnaXN0ZXIuICBUbyBwcmV2ZW50 IExSQSBmcm9tIGdlbmVyYXRpbmcgJyhtZW0gKHJlZyBYKSknIGZyb20gYQpyZWdpc3RlcjoKCjEu IEFkZCBhICdCTScgY29uc3RyYWludCB3aGljaCBpcyBzaW1pbGFyIHRvIHRoZSAnbScgY29uc3Ry YWludCwgYnV0CmlzIGRlZmluZWQgd2l0aCBkZWZpbmVfY29uc3RyYWludC4KMi4gQWRkIGEgJ20n IG1vZGUgYXR0cmlidXRlIHdoaWNoIGlzIG1hcHBlZCB0byB0aGUgJ20nIGNvbnN0cmFpbnQgZm9y CmdlbmVyYWxfb3BlcmFuZCBhbmQgdGhlICdCTScgY29uc3RyYWludCBmb3IgeDg2XzY0X2dlbmVy YWxfb3BlcmFuZC4KMy4gUmVwbGFjZSB0aGUgJ20nIGNvbnN0cmFpbnQgb24gPGdlbmVyYWxfb3Bl cmFuZD4gd2l0aCB0aGUgJzxtPicKY29uc3RyYWludC4KNC4gUmVwbGFjZSB0aGUgJ20nIGNvbnN0 cmFpbnQgb24geDg2XzY0X2dlbmVyYWxfb3BlcmFuZCB3aXRoIHRoZSAnQk0nCmNvbnN0cmFpbnQu CgpnY2MvCgoJUFIgdGFyZ2V0LzEwMzc2MgoJKiBjb25maWcvaTM4Ni9jb25zdHJhaW50cy5tZCAo Qk0pOiBOZXcgY29uc3RyYWludC4KCSogY29uZmlnL2kzODYvaTM4Ni5tZCAobSk6IE5ldyBtb2Rl IGF0dHJpYnV0ZS4KCVJlcGxhY2UgdGhlICdtJyBjb25zdHJhaW50IG9uIDxnZW5lcmFsX29wZXJh bmQ+IHdpdGggdGhlICc8bT4nCgljb25zdHJhaW50LgoJUmVwbGFjZSB0aGUgJ20nIGNvbnN0cmFp bnQgb24geDg2XzY0X2dlbmVyYWxfb3BlcmFuZCB3aXRoIHRoZQoJJ0JNJyBjb25zdHJhaW50LgoK Z2NjL3Rlc3RzdWl0ZS8KCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjEwMzc2Mi0xYS5jOiBOZXcgdGVz dC4KCSogZ2NjLnRhcmdldC9pMzg2L3ByMTAzNzYyLTFiLmM6IExpa2V3aXNlLgoJKiBnY2MudGFy Z2V0L2kzODYvcHIxMDM3NjItMWMuYzogTGlrZXdpc2UuCi0tLQogZ2NjL2NvbmZpZy9pMzg2L2Nv bnN0cmFpbnRzLm1kICAgICAgICAgICAgICB8ICAxMCArCiBnY2MvY29uZmlnL2kzODYvaTM4Ni5t ZCAgICAgICAgICAgICAgICAgICAgIHwgIDY3ICstCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjEwMzc2Mi0xYS5jIHwgNjQ3ICsrKysrKysrKysrKysrKysrKysrCiBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMzc2Mi0xYi5jIHwgICA3ICsKIGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByMTAzNzYyLTFjLmMgfCAgIDcgKwogNSBmaWxlcyBjaGFuZ2VkLCA3 MDYgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHIxMDM3NjItMWEuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTAzNzYyLTFiLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMzc2Mi0xYy5jCgpk aWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2NvbnN0cmFpbnRzLm1kIGIvZ2NjL2NvbmZpZy9p Mzg2L2NvbnN0cmFpbnRzLm1kCmluZGV4IDZiMjkxYTAyZDg4Li5kZWQyZTE5NWJiMCAxMDA2NDQK LS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2NvbnN0cmFpbnRzLm1kCisrKyBiL2djYy9jb25maWcvaTM4 Ni9jb25zdHJhaW50cy5tZApAQCAtMTY4LDYgKzE2OCw3IEBACiA7OyAgeiAgQ29uc3RhbnQgY2Fs bCBhZGRyZXNzIG9wZXJhbmQuCiA7OyAgQyAgSW50ZWdlciBTU0UgY29uc3RhbnQgd2l0aCBhbGwg Yml0cyBzZXQgb3BlcmFuZC4KIDs7ICBGICBGbG9hdGluZy1wb2ludCBTU0UgY29uc3RhbnQgd2l0 aCBhbGwgYml0cyBzZXQgb3BlcmFuZC4KKzs7ICBNICB4ODYtNjQgbWVtb3J5IG9wZXJhbmQuCiAK IChkZWZpbmVfY29uc3RyYWludCAiQmYiCiAgICJAaW50ZXJuYWwgRmxhZ3MgcmVnaXN0ZXIgb3Bl cmFuZC4iCkBAIC0yMzIsNiArMjMzLDE1IEBACiAgIChhbmQgKG1hdGNoX3Rlc3QgIlRBUkdFVF9T U0UiKQogICAgICAgIChtYXRjaF9vcGVyYW5kIDAgImZsb2F0X3ZlY3Rvcl9hbGxfb25lc19vcGVy YW5kIikpKQogCis7OyBOQjogU2ltaWxhciB0byAnbScsIGJ1dCBkb24ndCB1c2UgZGVmaW5lX21l bW9yeV9jb25zdHJhaW50IG9uIHg4Ni02NAorOzsgdG8gcHJldmVudCBMUkEgZnJvbSBjb252ZXJ0 aW5nIHRoZSBvcGVyYW5kIHRvIHRoZSBmb3JtICcobWVtIChyZWcgWCkpJworOzsgd2hlcmUgWCBp cyBhIGJhc2UgcmVnaXN0ZXIuCisoZGVmaW5lX2NvbnN0cmFpbnQgIkJNIgorICAiQGludGVybmFs IHg4Ni02NCBtZW1vcnkgb3BlcmFuZC4iCisgIChhbmQgKG1hdGNoX2NvZGUgIm1lbSIpCisgICAg ICAgKG1hdGNoX3Rlc3QgIm1lbW9yeV9hZGRyZXNzX2FkZHJfc3BhY2VfcCAoR0VUX01PREUgKG9w KSwgWEVYUCAob3AsIDApLAorCQkJCQkJIE1FTV9BRERSX1NQQUNFIChvcCkpIikpKQorCiA7OyBJ bnRlZ2VyIGNvbnN0YW50IGNvbnN0cmFpbnRzLgogKGRlZmluZV9jb25zdHJhaW50ICJXYiIKICAg IkludGVnZXIgY29uc3RhbnQgaW4gdGhlIHJhbmdlIDAgQGRvdHN7fSA3LCBmb3IgOC1iaXQgc2hp ZnRzLiIKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2Lm1kIGIvZ2NjL2NvbmZpZy9p Mzg2L2kzODYubWQKaW5kZXggZDI1NDUzZmU1NzQuLjk0YzA3NWFhZTg1IDEwMDY0NAotLS0gYS9n Y2MvY29uZmlnL2kzODYvaTM4Ni5tZAorKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5tZApAQCAt MTE0Myw2ICsxMTQzLDkgQEAKIDs7IEdlbmVyYWwgb3BlcmFuZCBjb25zdHJhaW50IGZvciB3b3Jk IG1vZGVzLgogKGRlZmluZV9tb2RlX2F0dHIgZyBbKFFJICJxbW4iKSAoSEkgInJtbiIpIChTSSAi cm1lIikgKERJICJybWUiKV0pCiAKKzs7IE1lbW9yeSBvcGVyYW5kIGNvbnN0cmFpbnQgZm9yIHdv cmQgbW9kZXMuCisoZGVmaW5lX21vZGVfYXR0ciBtIFsoUUkgIm0iKSAoSEkgIm0iKSAoU0kgIkJN IikgKERJICJCTSIpXSkKKwogOzsgSW1tZWRpYXRlIG9wZXJhbmQgY29uc3RyYWludCBmb3IgZG91 YmxlIGludGVnZXIgbW9kZXMuCiAoZGVmaW5lX21vZGVfYXR0ciBkaSBbKFNJICJuRiIpIChESSAi V2QiKV0pCiAKQEAgLTEzODUsNyArMTM4OCw3IEBACiAoZGVmaW5lX2luc24gIipjbXA8bW9kZT5f MSIKICAgWyhzZXQgKHJlZyBGTEFHU19SRUcpCiAJKGNvbXBhcmUgKG1hdGNoX29wZXJhbmQ6U1dJ IDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPHI+bSw8cj4iKQotCQkgKG1hdGNoX29wZXJhbmQ6 U1dJIDEgIjxnZW5lcmFsX29wZXJhbmQ+IiAiPHI+PGk+LDxyPm0iKSkpXQorCQkgKG1hdGNoX29w ZXJhbmQ6U1dJIDEgIjxnZW5lcmFsX29wZXJhbmQ+IiAiPHI+PGk+LDxyPjxtPiIpKSldCiAgICJp eDg2X21hdGNoX2NjbW9kZSAoaW5zbiwgQ0Ntb2RlKSIKICAgImNtcHs8aW1vZGVzdWZmaXg+fVx0 eyUxLCAlMHwlMCwgJTF9IgogICBbKHNldF9hdHRyICJ0eXBlIiAiaWNtcCIpCkBAIC0xMzk1LDcg KzEzOTgsNyBAQAogICBbKHNldCAocmVnIEZMQUdTX1JFRykKIAkoY29tcGFyZQogCSAgKG1pbnVz OlNXSSAobWF0Y2hfb3BlcmFuZDpTV0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI8cj5tLDxy PiIpCi0JCSAgICAgKG1hdGNoX29wZXJhbmQ6U1dJIDEgIjxnZW5lcmFsX29wZXJhbmQ+IiAiPHI+ PGk+LDxyPm0iKSkKKwkJICAgICAobWF0Y2hfb3BlcmFuZDpTV0kgMSAiPGdlbmVyYWxfb3BlcmFu ZD4iICI8cj48aT4sPHI+PG0+IikpCiAJICAoY29uc3RfaW50IDApKSldCiAgICJpeDg2X21hdGNo X2NjbW9kZSAoaW5zbiwgQ0NHT0Ntb2RlKSIKICAgImNtcHs8aW1vZGVzdWZmaXg+fVx0eyUxLCAl MHwlMCwgJTF9IgpAQCAtNTY1Myw3ICs1NjU2LDcgQEAKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 U1dJNDggMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI9cm0scixyLHIiKQogCShwbHVzOlNXSTQ4 CiAJICAobWF0Y2hfb3BlcmFuZDpTV0k0OCAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiUwLDAs cixyIikKLQkgIChtYXRjaF9vcGVyYW5kOlNXSTQ4IDIgIng4Nl82NF9nZW5lcmFsX29wZXJhbmQi ICJyZSxtLDAsbGUiKSkpCisJICAobWF0Y2hfb3BlcmFuZDpTV0k0OCAyICJ4ODZfNjRfZ2VuZXJh bF9vcGVyYW5kIiAicmUsQk0sMCxsZSIpKSkKICAgIChjbG9iYmVyIChyZWc6Q0MgRkxBR1NfUkVH KSldCiAgICJpeDg2X2JpbmFyeV9vcGVyYXRvcl9vayAoUExVUywgPE1PREU+bW9kZSwgb3BlcmFu ZHMpIgogewpAQCAtNTcwOSw3ICs1NzEyLDcgQEAKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIsciIpCiAJKHplcm9fZXh0ZW5kOkRJCiAJICAocGx1 czpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiUwLHIsciIp Ci0JCSAgIChtYXRjaF9vcGVyYW5kOlNJIDIgIng4Nl82NF9nZW5lcmFsX29wZXJhbmQiICJybWUs MCxsZSIpKSkpCisJCSAgIChtYXRjaF9vcGVyYW5kOlNJIDIgIng4Nl82NF9nZW5lcmFsX29wZXJh bmQiICJyQk1lLDAsbGUiKSkpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFHU19SRUcpKV0KICAg IlRBUkdFVF82NEJJVCAmJiBpeDg2X2JpbmFyeV9vcGVyYXRvcl9vayAoUExVUywgU0ltb2RlLCBv cGVyYW5kcykiCiB7CkBAIC01OTY3LDcgKzU5NzAsNyBAQAogCShjb21wYXJlCiAJICAocGx1czpT V0kKIAkgICAgKG1hdGNoX29wZXJhbmQ6U1dJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiJTAs MCw8cj4iKQotCSAgICAobWF0Y2hfb3BlcmFuZDpTV0kgMiAiPGdlbmVyYWxfb3BlcmFuZD4iICI8 cj48aT4sbSwwIikpCisJICAgIChtYXRjaF9vcGVyYW5kOlNXSSAyICI8Z2VuZXJhbF9vcGVyYW5k PiIgIjxyPjxpPiw8bT4sMCIpKQogCSAgKGNvbnN0X2ludCAwKSkpCiAgICAoc2V0IChtYXRjaF9v cGVyYW5kOlNXSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj08cj5tLDxyPiw8cj4iKQogCShw bHVzOlNXSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKV0KQEAgLTYwMTIsNyArNjAxNSw3 IEBACiAgIFsoc2V0IChyZWcgRkxBR1NfUkVHKQogCShjb21wYXJlCiAJICAocGx1czpTSSAobWF0 Y2hfb3BlcmFuZDpTSSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiUwLHIiKQotCQkgICAobWF0 Y2hfb3BlcmFuZDpTSSAyICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAicm1lLDAiKSkKKwkJICAg KG1hdGNoX29wZXJhbmQ6U0kgMiAieDg2XzY0X2dlbmVyYWxfb3BlcmFuZCIgInJCTWUsMCIpKQog CSAgKGNvbnN0X2ludCAwKSkpCiAgICAoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9cixyIikKIAkoemVyb19leHRlbmQ6REkgKHBsdXM6U0kgKG1hdGNoX2R1cCAx KSAobWF0Y2hfZHVwIDIpKSkpXQpAQCAtNjA5Nyw3ICs2MTAwLDcgQEAKIChkZWZpbmVfaW5zbiAi KmFkZHNpXzNfemV4dCIKICAgWyhzZXQgKHJlZyBGTEFHU19SRUcpCiAJKGNvbXBhcmUKLQkgIChu ZWc6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMiAieDg2XzY0X2dlbmVyYWxfb3BlcmFuZCIgInJtZSww IikpCisJICAobmVnOlNJIChtYXRjaF9vcGVyYW5kOlNJIDIgIng4Nl82NF9nZW5lcmFsX29wZXJh bmQiICJyQk1lLDAiKSkKIAkgIChtYXRjaF9vcGVyYW5kOlNJIDEgIm5vbmltbWVkaWF0ZV9vcGVy YW5kIiAiJTAsciIpKSkKICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj1yLHIiKQogCSh6ZXJvX2V4dGVuZDpESSAocGx1czpTSSAobWF0Y2hfZHVwIDEpICht YXRjaF9kdXAgMikpKSldCkBAIC02ODAxLDcgKzY4MDQsNyBAQAogICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpTV0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI9PHI+bSw8cj4iKQogCShtaW51czpT V0kKIAkgIChtYXRjaF9vcGVyYW5kOlNXSSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIjAsMCIp Ci0JICAobWF0Y2hfb3BlcmFuZDpTV0kgMiAiPGdlbmVyYWxfb3BlcmFuZD4iICI8cj48aT4sbSIp KSkKKwkgIChtYXRjaF9vcGVyYW5kOlNXSSAyICI8Z2VuZXJhbF9vcGVyYW5kPiIgIjxyPjxpPiw8 bT4iKSkpCiAgICAoY2xvYmJlciAocmVnOkNDIEZMQUdTX1JFRykpXQogICAiaXg4Nl9iaW5hcnlf b3BlcmF0b3Jfb2sgKE1JTlVTLCA8TU9ERT5tb2RlLCBvcGVyYW5kcykiCiAgICJzdWJ7PGltb2Rl c3VmZml4Pn1cdHslMiwgJTB8JTAsICUyfSIKQEAgLTY4MTIsNyArNjgxNSw3IEBACiAgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCiAJKHplcm9fZXh0 ZW5kOkRJCiAJICAobWludXM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgIjAiKQotCQkgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAieDg2XzY0X2dlbmVyYWxfb3BlcmFu ZCIgInJtZSIpKSkpCisJCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4ODZfNjRfZ2VuZXJhbF9v cGVyYW5kIiAickJNZSIpKSkpCiAgICAoY2xvYmJlciAocmVnOkNDIEZMQUdTX1JFRykpXQogICAi VEFSR0VUXzY0QklUICYmIGl4ODZfYmluYXJ5X29wZXJhdG9yX29rIChNSU5VUywgU0ltb2RlLCBv cGVyYW5kcykiCiAgICJzdWJ7bH1cdHslMiwgJWswfCVrMCwgJTJ9IgpAQCAtNjg0NCw3ICs2ODQ3 LDcgQEAKIAkoY29tcGFyZQogCSAgKG1pbnVzOlNXSQogCSAgICAobWF0Y2hfb3BlcmFuZDpTV0kg MSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIwLDAiKQotCSAgICAobWF0Y2hfb3BlcmFuZDpTV0kg MiAiPGdlbmVyYWxfb3BlcmFuZD4iICI8cj48aT4sbSIpKQorCSAgICAobWF0Y2hfb3BlcmFuZDpT V0kgMiAiPGdlbmVyYWxfb3BlcmFuZD4iICI8cj48aT4sPG0+IikpCiAJICAoY29uc3RfaW50IDAp KSkKICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U1dJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAi PTxyPm0sPHI+IikKIAkobWludXM6U1dJIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpXQpA QCAtNjg1OCw3ICs2ODYxLDcgQEAKICAgWyhzZXQgKHJlZyBGTEFHU19SRUcpCiAJKGNvbXBhcmUK IAkgIChtaW51czpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIp Ci0JCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAicm1l IikpCisJCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAi ckJNZSIpKQogCSAgKGNvbnN0X2ludCAwKSkpCiAgICAoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAg InJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCiAJKHplcm9fZXh0ZW5kOkRJCkBAIC03MTExLDcgKzcx MTQsNyBAQAogKGRlZmluZV9pbnNuICIqc3ViPG1vZGU+XzMiCiAgIFsoc2V0IChyZWcgRkxBR1Nf UkVHKQogCShjb21wYXJlIChtYXRjaF9vcGVyYW5kOlNXSSAxICJub25pbW1lZGlhdGVfb3BlcmFu ZCIgIjAsMCIpCi0JCSAobWF0Y2hfb3BlcmFuZDpTV0kgMiAiPGdlbmVyYWxfb3BlcmFuZD4iICI8 cj48aT4sbSIpKSkKKwkJIChtYXRjaF9vcGVyYW5kOlNXSSAyICI8Z2VuZXJhbF9vcGVyYW5kPiIg IjxyPjxpPiw8bT4iKSkpCiAgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNXSSAwICJub25pbW1lZGlh dGVfb3BlcmFuZCIgIj08cj5tLDxyPiIpCiAJKG1pbnVzOlNXSSAobWF0Y2hfZHVwIDEpIChtYXRj aF9kdXAgMikpKV0KICAgIml4ODZfbWF0Y2hfY2Ntb2RlIChpbnNuLCBDQ21vZGUpCkBAIC03MTg3 LDcgKzcxOTAsNyBAQAogKGRlZmluZV9pbnNuICIqc3Vic2lfM196ZXh0IgogICBbKHNldCAocmVn IEZMQUdTX1JFRykKIAkoY29tcGFyZSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVy YW5kIiAiMCIpCi0JCSAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5k IiAicm1lIikpKQorCQkgKG1hdGNoX29wZXJhbmQ6U0kgMiAieDg2XzY0X2dlbmVyYWxfb3BlcmFu ZCIgInJCTWUiKSkpCiAgICAoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJh bmQiICI9ciIpCiAJKHplcm9fZXh0ZW5kOkRJCiAJICAobWludXM6U0kgKG1hdGNoX2R1cCAxKQpA QCAtNzIwNyw3ICs3MjEwLDcgQEAKIAkgICAgKG1hdGNoX29wZXJhdG9yOlNXSSA0ICJpeDg2X2Nh cnJ5X2ZsYWdfb3BlcmF0b3IiCiAJICAgICBbKG1hdGNoX29wZXJhbmQgMyAiZmxhZ3NfcmVnX29w ZXJhbmQiKSAoY29uc3RfaW50IDApXSkKIAkgICAgKG1hdGNoX29wZXJhbmQ6U1dJIDEgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIiAiJTAsMCIpKQotCSAgKG1hdGNoX29wZXJhbmQ6U1dJIDIgIjxnZW5l cmFsX29wZXJhbmQ+IiAiPHI+PGk+LG0iKSkpCisJICAobWF0Y2hfb3BlcmFuZDpTV0kgMiAiPGdl bmVyYWxfb3BlcmFuZD4iICI8cj48aT4sPG0+IikpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFH U19SRUcpKV0KICAgIml4ODZfYmluYXJ5X29wZXJhdG9yX29rIChQTFVTLCA8TU9ERT5tb2RlLCBv cGVyYW5kcykiCiAgICJhZGN7PGltb2Rlc3VmZml4Pn1cdHslMiwgJTB8JTAsICUyfSIKQEAgLTcy NTEsNyArNzI1NCw3IEBACiAJICAgIChwbHVzOlNJIChtYXRjaF9vcGVyYXRvcjpTSSAzICJpeDg2 X2NhcnJ5X2ZsYWdfb3BlcmF0b3IiCiAJCSAgICAgIFsocmVnIEZMQUdTX1JFRykgKGNvbnN0X2lu dCAwKV0pCiAJCSAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUw IikpCi0JICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgIng4Nl82NF9nZW5lcmFsX29wZXJhbmQiICJy bWUiKSkpKQorCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5k IiAickJNZSIpKSkpCiAgICAoY2xvYmJlciAocmVnOkNDIEZMQUdTX1JFRykpXQogICAiVEFSR0VU XzY0QklUICYmIGl4ODZfYmluYXJ5X29wZXJhdG9yX29rIChQTFVTLCBTSW1vZGUsIG9wZXJhbmRz KSIKICAgImFkY3tsfVx0eyUyLCAlazB8JWswLCAlMn0iCkBAIC03Mzc3LDcgKzczODAsNyBAQAog CSAgICAobWF0Y2hfb3BlcmFuZDpTV0kgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIwLDAiKQog CSAgICAobWF0Y2hfb3BlcmF0b3I6U1dJIDQgIml4ODZfY2FycnlfZmxhZ19vcGVyYXRvciIKIAkg ICAgIFsobWF0Y2hfb3BlcmFuZCAzICJmbGFnc19yZWdfb3BlcmFuZCIpIChjb25zdF9pbnQgMCld KSkKLQkgIChtYXRjaF9vcGVyYW5kOlNXSSAyICI8Z2VuZXJhbF9vcGVyYW5kPiIgIjxyPjxpPixt IikpKQorCSAgKG1hdGNoX29wZXJhbmQ6U1dJIDIgIjxnZW5lcmFsX29wZXJhbmQ+IiAiPHI+PGk+ LDxtPiIpKSkKICAgIChjbG9iYmVyIChyZWc6Q0MgRkxBR1NfUkVHKSldCiAgICJpeDg2X2JpbmFy eV9vcGVyYXRvcl9vayAoTUlOVVMsIDxNT0RFPm1vZGUsIG9wZXJhbmRzKSIKICAgInNiYns8aW1v ZGVzdWZmaXg+fVx0eyUyLCAlMHwlMCwgJTJ9IgpAQCAtNzQyMiw3ICs3NDI1LDcgQEAKIAkgICAg ICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCiAJICAgICAgKG1h dGNoX29wZXJhdG9yOlNJIDMgIml4ODZfY2FycnlfZmxhZ19vcGVyYXRvciIKIAkgICAgICAgWyhy ZWcgRkxBR1NfUkVHKSAoY29uc3RfaW50IDApXSkpCi0JICAgIChtYXRjaF9vcGVyYW5kOlNJIDIg Ing4Nl82NF9nZW5lcmFsX29wZXJhbmQiICJybWUiKSkpKQorCSAgICAobWF0Y2hfb3BlcmFuZDpT SSAyICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAickJNZSIpKSkpCiAgICAoY2xvYmJlciAocmVn OkNDIEZMQUdTX1JFRykpXQogICAiVEFSR0VUXzY0QklUICYmIGl4ODZfYmluYXJ5X29wZXJhdG9y X29rIChNSU5VUywgU0ltb2RlLCBvcGVyYW5kcykiCiAgICJzYmJ7bH1cdHslMiwgJWswfCVrMCwg JTJ9IgpAQCAtNzQ5OCw3ICs3NTAxLDcgQEAKIChkZWZpbmVfaW5zbiAiQHN1Yjxtb2RlPjNfY2Fy cnlfY2NneiIKICAgWyhzZXQgKHJlZzpDQ0daIEZMQUdTX1JFRykKIAkodW5zcGVjOkNDR1ogWyht YXRjaF9vcGVyYW5kOkRXSUggMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQotCQkgICAgICAobWF0 Y2hfb3BlcmFuZDpEV0lIIDIgIng4Nl82NF9nZW5lcmFsX29wZXJhbmQiICJybWUiKQorCQkgICAg ICAobWF0Y2hfb3BlcmFuZDpEV0lIIDIgIng4Nl82NF9nZW5lcmFsX29wZXJhbmQiICJyQk1lIikK IAkJICAgICAgKGx0dTpEV0lIIChyZWc6Q0MgRkxBR1NfUkVHKSAoY29uc3RfaW50IDApKV0KIAkJ ICAgICBVTlNQRUNfU0JCKSkKICAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOkRXSUggMCAiPXIi KSldCkBAIC03NTg1LDcgKzc1ODgsNyBAQAogCShjb21wYXJlOkNDQwogCSAgICAocGx1czpTV0kK IAkJKG1hdGNoX29wZXJhbmQ6U1dJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiJTAsMCIpCi0J CShtYXRjaF9vcGVyYW5kOlNXSSAyICI8Z2VuZXJhbF9vcGVyYW5kPiIgIjxyPjxpPixtIikpCisJ CShtYXRjaF9vcGVyYW5kOlNXSSAyICI8Z2VuZXJhbF9vcGVyYW5kPiIgIjxyPjxpPiw8bT4iKSkK IAkgICAgKG1hdGNoX2R1cCAxKSkpCiAgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNXSSAwICJub25p bW1lZGlhdGVfb3BlcmFuZCIgIj08cj5tLDxyPiIpCiAJKHBsdXM6U1dJIChtYXRjaF9kdXAgMSkg KG1hdGNoX2R1cCAyKSkpXQpAQCAtNzYxNiw3ICs3NjE5LDcgQEAKIAkoY29tcGFyZTpDQ0MKIAkg IChwbHVzOlNJCiAJICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IiAiJTAiKQotCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5k IiAicm1lIikpCisJICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgIng4Nl82NF9nZW5lcmFsX29wZXJh bmQiICJyQk1lIikpCiAJICAobWF0Y2hfZHVwIDEpKSkKICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6 REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKIAkoemVyb19leHRlbmQ6REkgKHBsdXM6U0kg KG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSkpXQpAQCAtNzY0Myw3ICs3NjQ2LDcgQEAKIAko Y29tcGFyZTpDQ0MKIAkgICAgKHBsdXM6U1dJCiAJCShtYXRjaF9vcGVyYW5kOlNXSSAxICJub25p bW1lZGlhdGVfb3BlcmFuZCIgIiUwLDAiKQotCQkobWF0Y2hfb3BlcmFuZDpTV0kgMiAiPGdlbmVy YWxfb3BlcmFuZD4iICI8cj48aT4sbSIpKQorCQkobWF0Y2hfb3BlcmFuZDpTV0kgMiAiPGdlbmVy YWxfb3BlcmFuZD4iICI8cj48aT4sPG0+IikpCiAJICAgIChtYXRjaF9kdXAgMikpKQogICAgKHNl dCAobWF0Y2hfb3BlcmFuZDpTV0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI9PHI+bSw8cj4i KQogCShwbHVzOlNXSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKV0KQEAgLTc2NTcsNyAr NzY2MCw3IEBACiAJKGNvbXBhcmU6Q0NDCiAJICAocGx1czpTSQogCSAgICAobWF0Y2hfb3BlcmFu ZDpTSSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiUwIikKLQkgICAgKG1hdGNoX29wZXJhbmQ6 U0kgMiAieDg2XzY0X2dlbmVyYWxfb3BlcmFuZCIgInJtZSIpKQorCSAgICAobWF0Y2hfb3BlcmFu ZDpTSSAyICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAickJNZSIpKQogCSAgKG1hdGNoX2R1cCAy KSkpCiAgICAoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIp CiAJKHplcm9fZXh0ZW5kOkRJIChwbHVzOlNJIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkp KV0KQEAgLTgwMDEsNyArODAwNCw3IEBACiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNXSU0yNDgg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIsciIpCiAJKG11bHQ6U1dJTTI0OAogCSAgKG1hdGNo X29wZXJhbmQ6U1dJTTI0OCAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiVybSxybSwwIikKLQkg IChtYXRjaF9vcGVyYW5kOlNXSU0yNDggMiAiPGdlbmVyYWxfb3BlcmFuZD4iICJLLDxpPixtciIp KSkKKwkgIChtYXRjaF9vcGVyYW5kOlNXSU0yNDggMiAiPGdlbmVyYWxfb3BlcmFuZD4iICJLLDxp Piw8bT5yIikpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFHU19SRUcpKV0KICAgIiEoTUVNX1Ag KG9wZXJhbmRzWzFdKSAmJiBNRU1fUCAob3BlcmFuZHNbMl0pKSIKICAgIkAKQEAgLTgwMzcsNyAr ODA0MCw3IEBACiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9cixyLHIiKQogCSh6ZXJvX2V4dGVuZDpESQogCSAgKG11bHQ6U0kgKG1hdGNoX29wZXJhbmQ6 U0kgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIlcm0scm0sMCIpCi0JCSAgIChtYXRjaF9vcGVy YW5kOlNJIDIgIng4Nl82NF9nZW5lcmFsX29wZXJhbmQiICJLLGUsbXIiKSkpKQorCQkgICAobWF0 Y2hfb3BlcmFuZDpTSSAyICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAiSyxlLEJNciIpKSkpCiAg ICAoY2xvYmJlciAocmVnOkNDIEZMQUdTX1JFRykpXQogICAiVEFSR0VUXzY0QklUCiAgICAmJiAh KE1FTV9QIChvcGVyYW5kc1sxXSkgJiYgTUVNX1AgKG9wZXJhbmRzWzJdKSkiCkBAIC05NzExLDcg Kzk3MTQsNyBAQAogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPXIiKQogCSh6ZXJvX2V4dGVuZDpESQogCSAgKGFuZDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAx ICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiUwIikKLQkJICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4 ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAicm1lIikpKSkKKwkJICAobWF0Y2hfb3BlcmFuZDpTSSAy ICJ4ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAickJNZSIpKSkpCiAgICAoY2xvYmJlciAocmVnOkND IEZMQUdTX1JFRykpXQogICAiVEFSR0VUXzY0QklUICYmIGl4ODZfYmluYXJ5X29wZXJhdG9yX29r IChBTkQsIFNJbW9kZSwgb3BlcmFuZHMpIgogICAiYW5ke2x9XHR7JTIsICVrMHwlazAsICUyfSIK QEAgLTk3MjEsNyArOTcyNCw3IEBACiAoZGVmaW5lX2luc24gIiphbmQ8bW9kZT5fMSIKICAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6U1dJMjQgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI9cm0scixZ YSw/ayIpCiAJKGFuZDpTV0kyNCAobWF0Y2hfb3BlcmFuZDpTV0kyNCAxICJub25pbW1lZGlhdGVf b3BlcmFuZCIgIiUwLDAscW0sayIpCi0JCSAgIChtYXRjaF9vcGVyYW5kOlNXSTI0IDIgIjxnZW5l cmFsX29wZXJhbmQ+IiAicjxpPixtLEwsayIpKSkKKwkJICAgKG1hdGNoX29wZXJhbmQ6U1dJMjQg MiAiPGdlbmVyYWxfb3BlcmFuZD4iICJyPGk+LDxtPixMLGsiKSkpCiAgICAoY2xvYmJlciAocmVn OkNDIEZMQUdTX1JFRykpXQogICAiaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2sgKEFORCwgPE1PREU+ bW9kZSwgb3BlcmFuZHMpIgogICAiQApAQCAtOTkwMyw3ICs5OTA2LDcgQEAKICAgWyhzZXQgKHJl ZyBGTEFHU19SRUcpCiAJKGNvbXBhcmUgKGFuZDpTSQogCQkgIChtYXRjaF9vcGVyYW5kOlNJIDEg Im5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiJTAiKQotCQkgIChtYXRjaF9vcGVyYW5kOlNJIDIgIng4 Nl82NF9nZW5lcmFsX29wZXJhbmQiICJybWUiKSkKKwkJICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4 ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAickJNZSIpKQogCQkgKGNvbnN0X2ludCAwKSkpCiAgICAo c2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCiAJKHplcm9f ZXh0ZW5kOkRJIChhbmQ6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSkpXQpAQCAtOTk0 Niw3ICs5OTQ5LDcgQEAKICAgWyhzZXQgKHJlZyBGTEFHU19SRUcpCiAJKGNvbXBhcmUgKGFuZDpT V0kxMjQKIAkJICAobWF0Y2hfb3BlcmFuZDpTV0kxMjQgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQi ICIlMCwwIikKLQkJICAobWF0Y2hfb3BlcmFuZDpTV0kxMjQgMiAiPGdlbmVyYWxfb3BlcmFuZD4i ICI8cj48aT4sbSIpKQorCQkgIChtYXRjaF9vcGVyYW5kOlNXSTEyNCAyICI8Z2VuZXJhbF9vcGVy YW5kPiIgIjxyPjxpPiw8bT4iKSkKIAkJIChjb25zdF9pbnQgMCkpKQogICAgKHNldCAobWF0Y2hf b3BlcmFuZDpTV0kxMjQgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI9PHI+bSw8cj4iKQogCShh bmQ6U1dJMTI0IChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpXQpAQCAtMTAyNjAsNyArMTAy NjMsNyBAQAogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTV0kyNDggMCAibm9uaW1tZWRpYXRlX29w ZXJhbmQiICI9cm0sciw/ayIpCiAJKGFueV9vcjpTV0kyNDgKIAkgKG1hdGNoX29wZXJhbmQ6U1dJ MjQ4IDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiJTAsMCxrIikKLQkgKG1hdGNoX29wZXJhbmQ6 U1dJMjQ4IDIgIjxnZW5lcmFsX29wZXJhbmQ+IiAicjxpPixtLGsiKSkpCisJIChtYXRjaF9vcGVy YW5kOlNXSTI0OCAyICI8Z2VuZXJhbF9vcGVyYW5kPiIgInI8aT4sPG0+LGsiKSkpCiAgICAoY2xv YmJlciAocmVnOkNDIEZMQUdTX1JFRykpXQogICAiaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2sgKDxD T0RFPiwgPE1PREU+bW9kZSwgb3BlcmFuZHMpIgogICAiQApAQCAtMTAzMjgsNyArMTAzMzEsNyBA QAogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQog CSh6ZXJvX2V4dGVuZDpESQogCSAoYW55X29yOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIiAiJTAiKQotCQkgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAieDg2XzY0 X2dlbmVyYWxfb3BlcmFuZCIgInJtZSIpKSkpCisJCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4 ODZfNjRfZ2VuZXJhbF9vcGVyYW5kIiAickJNZSIpKSkpCiAgICAoY2xvYmJlciAocmVnOkNDIEZM QUdTX1JFRykpXQogICAiVEFSR0VUXzY0QklUICYmIGl4ODZfYmluYXJ5X29wZXJhdG9yX29rICg8 Q09ERT4sIFNJbW9kZSwgb3BlcmFuZHMpIgogICAiPGxvZ2ljPntsfVx0eyUyLCAlazB8JWswLCAl Mn0iCkBAIC0xMDQzMSw3ICsxMDQzNCw3IEBACiAgIFsoc2V0IChyZWcgRkxBR1NfUkVHKQogCShj b21wYXJlIChhbnlfb3I6U1dJCiAJCSAgKG1hdGNoX29wZXJhbmQ6U1dJIDEgIm5vbmltbWVkaWF0 ZV9vcGVyYW5kIiAiJTAsMCIpCi0JCSAgKG1hdGNoX29wZXJhbmQ6U1dJIDIgIjxnZW5lcmFsX29w ZXJhbmQ+IiAiPHI+PGk+LG0iKSkKKwkJICAobWF0Y2hfb3BlcmFuZDpTV0kgMiAiPGdlbmVyYWxf b3BlcmFuZD4iICI8cj48aT4sPG0+IikpCiAJCSAoY29uc3RfaW50IDApKSkKICAgIChzZXQgKG1h dGNoX29wZXJhbmQ6U1dJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPTxyPm0sPHI+IikKIAko YW55X29yOlNXSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKV0KQEAgLTEwNDQ2LDcgKzEw NDQ5LDcgQEAKIChkZWZpbmVfaW5zbiAiKjxjb2RlPnNpXzJfemV4dCIKICAgWyhzZXQgKHJlZyBG TEFHU19SRUcpCiAJKGNvbXBhcmUgKGFueV9vcjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJub25p bW1lZGlhdGVfb3BlcmFuZCIgIiUwIikKLQkJCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ4ODZf NjRfZ2VuZXJhbF9vcGVyYW5kIiAicm1lIikpCisJCQkgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAi eDg2XzY0X2dlbmVyYWxfb3BlcmFuZCIgInJCTWUiKSkKIAkJIChjb25zdF9pbnQgMCkpKQogICAg KHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQogCSh6ZXJv X2V4dGVuZDpESSAoYW55X29yOlNJIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpKV0KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTAzNzYyLTFhLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMzc2Mi0xYS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jOWU3NWJjMTJkOAotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTAzNzYyLTFhLmMKQEAgLTAsMCArMSw2 NDcgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtc3Rk PWdudTExIC1mZ251ODktaW5saW5lIiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICIucXVhZFxbXFx0IFxdK3R1bmFibGVfbGlzdCIgeyB0YXJnZXQgbHA2NCB9IH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiLmxvbmdcW1xcdCBcXSt0dW5h YmxlX2xpc3QiIHsgdGFyZ2V0IHsgISBscDY0IH0gfSB9IH0gKi8KKwordHlwZWRlZiB1bnNpZ25l ZCBsb25nIGludCBzaXplX3Q7Cit0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cit0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludG1heF90OwordHlwZWRlZiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IHVpbnQ2NF90OwordHlwZWRlZiBpbnRtYXhfdCB0dW5hYmxlX251bV90Owor dHlwZWRlZiB1bmlvbgoreworICB0dW5hYmxlX251bV90IG51bXZhbDsKKyAgY29uc3QgY2hhciAq c3RydmFsOworfSB0dW5hYmxlX3ZhbF90OworZW51bQoreworICBIV0NBUF9YODZfU1NFMiA9IDEg PDwgMCwKKyAgSFdDQVBfWDg2XzY0ID0gMSA8PCAxLAorICBIV0NBUF9YODZfQVZYNTEyXzEgPSAx IDw8IDIKK307Cit0eXBlZGVmIHZvaWQgKCp0dW5hYmxlX2NhbGxiYWNrX3QpICh0dW5hYmxlX3Zh bF90ICopOworZXh0ZXJuIHZvaWQgKl9fbWluaW1hbF9tYWxsb2MgKHNpemVfdCBuKQorICAgIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKK2V4dGVybiBpbnQgX19saWJj X2VuYWJsZV9zZWN1cmUgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZGF0YS5yZWwucm8iKSkp OworZXh0ZXJuIHVpbnQ2NF90IF9kbF9zdHJ0b3VsIChjb25zdCBjaGFyICosIGNoYXIgKiopCisg ICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOworZXh0ZXJuIHZvaWQg X2RsX2ZhdGFsX3ByaW50ZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDEsIDIpLCBfX25vcmV0dXJuX18pKTsKK3R5cGVk ZWYgZW51bQoreworICBnbGliY19ydGxkX25ucywKKyAgZ2xpYmNfZWxpc2lvbl9za2lwX2xvY2tf YWZ0ZXJfcmV0cmllcywKKyAgZ2xpYmNfbWFsbG9jX3RyaW1fdGhyZXNob2xkLAorICBnbGliY19t YWxsb2NfcGVydHVyYiwKKyAgZ2xpYmNfY3B1X3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZSwKKyAgZ2xp YmNfcHRocmVhZF9yc2VxLAorICBnbGliY19tZW1fdGFnZ2luZywKKyAgZ2xpYmNfZWxpc2lvbl90 cmllcywKKyAgZ2xpYmNfZWxpc2lvbl9lbmFibGUsCisgIGdsaWJjX21hbGxvY19odWdldGxiLAor ICBnbGliY19jcHVfeDg2X3JlcF9tb3ZzYl90aHJlc2hvbGQsCisgIGdsaWJjX21hbGxvY19teGZh c3QsCisgIGdsaWJjX3J0bGRfZHluYW1pY19zb3J0LAorICBnbGliY19lbGlzaW9uX3NraXBfbG9j a19idXN5LAorICBnbGliY19tYWxsb2NfdG9wX3BhZCwKKyAgZ2xpYmNfY3B1X3g4Nl9yZXBfc3Rv c2JfdGhyZXNob2xkLAorICBnbGliY19jcHVfeDg2X25vbl90ZW1wb3JhbF90aHJlc2hvbGQsCisg IGdsaWJjX2NwdV94ODZfc2hzdGssCisgIGdsaWJjX3B0aHJlYWRfc3RhY2tfY2FjaGVfc2l6ZSwK KyAgZ2xpYmNfY3B1X2h3Y2FwX21hc2ssCisgIGdsaWJjX21hbGxvY19tbWFwX21heCwKKyAgZ2xp YmNfZWxpc2lvbl9za2lwX3RyeWxvY2tfaW50ZXJuYWxfYWJvcnQsCisgIGdsaWJjX21hbGxvY190 Y2FjaGVfdW5zb3J0ZWRfbGltaXQsCisgIGdsaWJjX2NwdV94ODZfaWJ0LAorICBnbGliY19jcHVf aHdjYXBzLAorICBnbGliY19lbGlzaW9uX3NraXBfbG9ja19pbnRlcm5hbF9hYm9ydCwKKyAgZ2xp YmNfbWFsbG9jX2FyZW5hX21heCwKKyAgZ2xpYmNfbWFsbG9jX21tYXBfdGhyZXNob2xkLAorICBn bGliY19jcHVfeDg2X2RhdGFfY2FjaGVfc2l6ZSwKKyAgZ2xpYmNfbWFsbG9jX3RjYWNoZV9jb3Vu dCwKKyAgZ2xpYmNfbWFsbG9jX2FyZW5hX3Rlc3QsCisgIGdsaWJjX3B0aHJlYWRfbXV0ZXhfc3Bp bl9jb3VudCwKKyAgZ2xpYmNfcnRsZF9vcHRpb25hbF9zdGF0aWNfdGxzLAorICBnbGliY19tYWxs b2NfdGNhY2hlX21heCwKKyAgZ2xpYmNfbWFsbG9jX2NoZWNrLAorfSB0dW5hYmxlX2lkX3Q7Cit0 eXBlZGVmIGVudW0KK3sKKyAgVFVOQUJMRV9UWVBFX0lOVF8zMiwKKyAgVFVOQUJMRV9UWVBFX1VJ TlRfNjQsCisgIFRVTkFCTEVfVFlQRV9TSVpFX1QsCisgIFRVTkFCTEVfVFlQRV9TVFJJTkcKK30g dHVuYWJsZV90eXBlX2NvZGVfdDsKK3R5cGVkZWYgc3RydWN0Cit7CisgIHR1bmFibGVfdHlwZV9j b2RlX3QgdHlwZV9jb2RlOworICB0dW5hYmxlX251bV90IG1pbjsKKyAgdHVuYWJsZV9udW1fdCBt YXg7Cit9IHR1bmFibGVfdHlwZV90OwordHlwZWRlZiBlbnVtCit7CisgIFRVTkFCTEVfU0VDTEVW RUxfU1hJRF9FUkFTRSA9IDAsCisgIFRVTkFCTEVfU0VDTEVWRUxfU1hJRF9JR05PUkUgPSAxLAor ICBUVU5BQkxFX1NFQ0xFVkVMX05PTkUgPSAyLAorfSB0dW5hYmxlX3NlY2xldmVsX3Q7CitzdHJ1 Y3QgX3R1bmFibGUKK3sKKyAgY29uc3QgY2hhciBuYW1lWzQyXTsKKyAgdHVuYWJsZV90eXBlX3Qg dHlwZTsKKyAgdHVuYWJsZV92YWxfdCB2YWw7CisgIF9Cb29sIGluaXRpYWxpemVkOworICB0dW5h YmxlX3NlY2xldmVsX3Qgc2VjdXJpdHlfbGV2ZWw7CisgIGNvbnN0IGNoYXIgZW52X2FsaWFzWzIz XTsKK307Cit0eXBlZGVmIHN0cnVjdCBfdHVuYWJsZSB0dW5hYmxlX3Q7CitleHRlcm4gX0Jvb2wg dW5zaWduZWRfdHVuYWJsZV90eXBlICh0dW5hYmxlX3R5cGVfY29kZV90IHQpOworCitzdGF0aWMg dHVuYWJsZV90IHR1bmFibGVfbGlzdFtdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmRhdGEu cmVsLnJvIikpKSA9IHsKKyAgeyAiZ2xpYmMiCisgICAgIi4iCisgICAgInJ0bGQiCisgICAgIi4i CisgICAgIm5ucyIsCisgICAgeyBUVU5BQkxFX1RZUEVfU0laRV9ULCAxLCAxNiB9LAorICAgIHsg Lm51bXZhbCA9IDQgfSwKKyAgICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NFQ0xFVkVMX1NY SURfRVJBU0UsCisgICAgeyAwIH0gfSwKKyAgeyAiZ2xpYmMiCisgICAgIi4iCisgICAgImVsaXNp b24iCisgICAgIi4iCisgICAgInNraXBfbG9ja19hZnRlcl9yZXRyaWVzIiwKKyAgICB7IFRVTkFC TEVfVFlQRV9JTlRfMzIsIDAsICgyMTQ3NDgzNjQ3KSB9LAorICAgIHsgLm51bXZhbCA9IDMgfSwK KyAgICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NFQ0xFVkVMX1NYSURfRVJBU0UsCisgICAg eyAwIH0gfSwKKyAgeyAiZ2xpYmMiCisgICAgIi4iCisgICAgIm1hbGxvYyIKKyAgICAiLiIKKyAg ICAidHJpbV90aHJlc2hvbGQiLAorICAgIHsgVFVOQUJMRV9UWVBFX1NJWkVfVCwgMCwgKDE4NDQ2 NzQ0MDczNzA5NTUxNjE1VUwpIH0sCisgICAge30sCisgICAgKCh2b2lkICopMCksCisgICAgVFVO QUJMRV9TRUNMRVZFTF9TWElEX0lHTk9SRSwKKyAgICAiTUFMTE9DX1RSSU1fVEhSRVNIT0xEXyIg fSwKKyAgeyAiZ2xpYmMiCisgICAgIi4iCisgICAgIm1hbGxvYyIKKyAgICAiLiIKKyAgICAicGVy dHVyYiIsCisgICAgeyBUVU5BQkxFX1RZUEVfSU5UXzMyLCAwLCAweGZmIH0sCisgICAge30sCisg ICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0lHTk9SRSwKKyAgICAi TUFMTE9DX1BFUlRVUkJfIiB9LAorICB7ICJnbGliYyIKKyAgICAiLiIKKyAgICAiY3B1IgorICAg ICIuIgorICAgICJ4ODZfc2hhcmVkX2NhY2hlX3NpemUiLAorICAgIHsgVFVOQUJMRV9UWVBFX1NJ WkVfVCwgMCwgKDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwpIH0sCisgICAge30sCisgICAgKCh2b2lk ICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0VSQVNFLAorICAgIHsgMCB9IH0sCisg IHsgImdsaWJjIgorICAgICIuIgorICAgICJwdGhyZWFkIgorICAgICIuIgorICAgICJyc2VxIiwK KyAgICB7IFRVTkFCTEVfVFlQRV9JTlRfMzIsIDAsIDEgfSwKKyAgICB7IC5udW12YWwgPSAxIH0s CisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0VSQVNFLAorICAg IHsgMCB9IH0sCisgIHsgImdsaWJjIgorICAgICIuIgorICAgICJtZW0iCisgICAgIi4iCisgICAg InRhZ2dpbmciLAorICAgIHsgVFVOQUJMRV9UWVBFX0lOVF8zMiwgMCwgMjU1IH0sCisgICAge30s CisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0lHTk9SRSwKKyAg ICB7IDAgfSB9LAorICB7ICJnbGliYyIKKyAgICAiLiIKKyAgICAiZWxpc2lvbiIKKyAgICAiLiIK KyAgICAidHJpZXMiLAorICAgIHsgVFVOQUJMRV9UWVBFX0lOVF8zMiwgMCwgKDIxNDc0ODM2NDcp IH0sCisgICAgeyAubnVtdmFsID0gMyB9LAorICAgICgodm9pZCAqKTApLAorICAgIFRVTkFCTEVf U0VDTEVWRUxfU1hJRF9FUkFTRSwKKyAgICB7IDAgfSB9LAorICB7ICJnbGliYyIKKyAgICAiLiIK KyAgICAiZWxpc2lvbiIKKyAgICAiLiIKKyAgICAiZW5hYmxlIiwKKyAgICB7IFRVTkFCTEVfVFlQ RV9JTlRfMzIsIDAsIDEgfSwKKyAgICB7fSwKKyAgICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxF X1NFQ0xFVkVMX1NYSURfRVJBU0UsCisgICAgeyAwIH0gfSwKKyAgeyAiZ2xpYmMiCisgICAgIi4i CisgICAgIm1hbGxvYyIKKyAgICAiLiIKKyAgICAiaHVnZXRsYiIsCisgICAgeyBUVU5BQkxFX1RZ UEVfU0laRV9ULCAwLCAoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTCkgfSwKKyAgICB7fSwKKyAgICAo KHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NFQ0xFVkVMX1NYSURfRVJBU0UsCisgICAgeyAwIH0g fSwKKyAgeyAiZ2xpYmMiCisgICAgIi4iCisgICAgImNwdSIKKyAgICAiLiIKKyAgICAieDg2X3Jl cF9tb3ZzYl90aHJlc2hvbGQiLAorICAgIHsgVFVOQUJMRV9UWVBFX1NJWkVfVCwgMSwgKDE4NDQ2 NzQ0MDczNzA5NTUxNjE1VUwpIH0sCisgICAge30sCisgICAgKCh2b2lkICopMCksCisgICAgVFVO QUJMRV9TRUNMRVZFTF9TWElEX0VSQVNFLAorICAgIHsgMCB9IH0sCisgIHsgImdsaWJjIgorICAg ICIuIgorICAgICJtYWxsb2MiCisgICAgIi4iCisgICAgIm14ZmFzdCIsCisgICAgeyBUVU5BQkxF X1RZUEVfU0laRV9ULCAwLCAoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTCkgfSwKKyAgICB7fSwKKyAg ICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NFQ0xFVkVMX1NYSURfSUdOT1JFLAorICAgIHsg MCB9IH0sCisgIHsgImdsaWJjIgorICAgICIuIgorICAgICJydGxkIgorICAgICIuIgorICAgICJk eW5hbWljX3NvcnQiLAorICAgIHsgVFVOQUJMRV9UWVBFX0lOVF8zMiwgMSwgMiB9LAorICAgIHsg Lm51bXZhbCA9IDIgfSwKKyAgICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NFQ0xFVkVMX1NY SURfRVJBU0UsCisgICAgeyAwIH0gfSwKKyAgeyAiZ2xpYmMiCisgICAgIi4iCisgICAgImVsaXNp b24iCisgICAgIi4iCisgICAgInNraXBfbG9ja19idXN5IiwKKyAgICB7IFRVTkFCTEVfVFlQRV9J TlRfMzIsIDAsICgyMTQ3NDgzNjQ3KSB9LAorICAgIHsgLm51bXZhbCA9IDMgfSwKKyAgICAoKHZv aWQgKikwKSwKKyAgICBUVU5BQkxFX1NFQ0xFVkVMX1NYSURfRVJBU0UsCisgICAgeyAwIH0gfSwK KyAgeyAiZ2xpYmMiCisgICAgIi4iCisgICAgIm1hbGxvYyIKKyAgICAiLiIKKyAgICAidG9wX3Bh ZCIsCisgICAgeyBUVU5BQkxFX1RZUEVfU0laRV9ULCAwLCAoMTg0NDY3NDQwNzM3MDk1NTE2MTVV TCkgfSwKKyAgICB7fSwKKyAgICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NFQ0xFVkVMX1NY SURfSUdOT1JFLAorICAgICJNQUxMT0NfVE9QX1BBRF8iIH0sCisgIHsgImdsaWJjIgorICAgICIu IgorICAgICJjcHUiCisgICAgIi4iCisgICAgIng4Nl9yZXBfc3Rvc2JfdGhyZXNob2xkIiwKKyAg ICB7IFRVTkFCTEVfVFlQRV9TSVpFX1QsIDEsICgxODQ0Njc0NDA3MzcwOTU1MTYxNVVMKSB9LAor ICAgIHsgLm51bXZhbCA9IDIwNDggfSwKKyAgICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NF Q0xFVkVMX1NYSURfRVJBU0UsCisgICAgeyAwIH0gfSwKKyAgeyAiZ2xpYmMiCisgICAgIi4iCisg ICAgImNwdSIKKyAgICAiLiIKKyAgICAieDg2X25vbl90ZW1wb3JhbF90aHJlc2hvbGQiLAorICAg IHsgVFVOQUJMRV9UWVBFX1NJWkVfVCwgMCwgKDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwpIH0sCisg ICAge30sCisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0VSQVNF LAorICAgIHsgMCB9IH0sCisgIHsgImdsaWJjIgorICAgICIuIgorICAgICJjcHUiCisgICAgIi4i CisgICAgIng4Nl9zaHN0ayIsCisgICAgeyBUVU5BQkxFX1RZUEVfU1RSSU5HLCAwLCAwIH0sCisg ICAge30sCisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0VSQVNF LAorICAgIHsgMCB9IH0sCisgIHsgImdsaWJjIgorICAgICIuIgorICAgICJwdGhyZWFkIgorICAg ICIuIgorICAgICJzdGFja19jYWNoZV9zaXplIiwKKyAgICB7IFRVTkFCTEVfVFlQRV9TSVpFX1Qs IDAsICgxODQ0Njc0NDA3MzcwOTU1MTYxNVVMKSB9LAorICAgIHsgLm51bXZhbCA9IDQxOTQzMDQw IH0sCisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0VSQVNFLAor ICAgIHsgMCB9IH0sCisgIHsgImdsaWJjIgorICAgICIuIgorICAgICJjcHUiCisgICAgIi4iCisg ICAgImh3Y2FwX21hc2siLAorICAgIHsgVFVOQUJMRV9UWVBFX1VJTlRfNjQsIDAsICgxODQ0Njc0 NDA3MzcwOTU1MTYxNVVMKSB9LAorICAgIHsgLm51bXZhbCA9IChIV0NBUF9YODZfNjQgfCBIV0NB UF9YODZfQVZYNTEyXzEpIH0sCisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZF TF9TWElEX0VSQVNFLAorICAgICJMRF9IV0NBUF9NQVNLIiB9LAorICB7ICJnbGliYyIKKyAgICAi LiIKKyAgICAibWFsbG9jIgorICAgICIuIgorICAgICJtbWFwX21heCIsCisgICAgeyBUVU5BQkxF X1RZUEVfSU5UXzMyLCAwLCAoMjE0NzQ4MzY0NykgfSwKKyAgICB7fSwKKyAgICAoKHZvaWQgKikw KSwKKyAgICBUVU5BQkxFX1NFQ0xFVkVMX1NYSURfSUdOT1JFLAorICAgICJNQUxMT0NfTU1BUF9N QVhfIiB9LAorICB7ICJnbGliYyIKKyAgICAiLiIKKyAgICAiZWxpc2lvbiIKKyAgICAiLiIKKyAg ICAic2tpcF90cnlsb2NrX2ludGVybmFsX2Fib3J0IiwKKyAgICB7IFRVTkFCTEVfVFlQRV9JTlRf MzIsIDAsICgyMTQ3NDgzNjQ3KSB9LAorICAgIHsgLm51bXZhbCA9IDMgfSwKKyAgICAoKHZvaWQg KikwKSwKKyAgICBUVU5BQkxFX1NFQ0xFVkVMX1NYSURfRVJBU0UsCisgICAgeyAwIH0gfSwKKyAg eyAiZ2xpYmMiCisgICAgIi4iCisgICAgIm1hbGxvYyIKKyAgICAiLiIKKyAgICAidGNhY2hlX3Vu c29ydGVkX2xpbWl0IiwKKyAgICB7IFRVTkFCTEVfVFlQRV9TSVpFX1QsIDAsICgxODQ0Njc0NDA3 MzcwOTU1MTYxNVVMKSB9LAorICAgIHt9LAorICAgICgodm9pZCAqKTApLAorICAgIFRVTkFCTEVf U0VDTEVWRUxfU1hJRF9FUkFTRSwKKyAgICB7IDAgfSB9LAorICB7ICJnbGliYyIKKyAgICAiLiIK KyAgICAiY3B1IgorICAgICIuIgorICAgICJ4ODZfaWJ0IiwKKyAgICB7IFRVTkFCTEVfVFlQRV9T VFJJTkcsIDAsIDAgfSwKKyAgICB7fSwKKyAgICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NF Q0xFVkVMX1NYSURfRVJBU0UsCisgICAgeyAwIH0gfSwKKyAgeyAiZ2xpYmMiCisgICAgIi4iCisg ICAgImNwdSIKKyAgICAiLiIKKyAgICAiaHdjYXBzIiwKKyAgICB7IFRVTkFCTEVfVFlQRV9TVFJJ TkcsIDAsIDAgfSwKKyAgICB7fSwKKyAgICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NFQ0xF VkVMX1NYSURfRVJBU0UsCisgICAgeyAwIH0gfSwKKyAgeyAiZ2xpYmMiCisgICAgIi4iCisgICAg ImVsaXNpb24iCisgICAgIi4iCisgICAgInNraXBfbG9ja19pbnRlcm5hbF9hYm9ydCIsCisgICAg eyBUVU5BQkxFX1RZUEVfSU5UXzMyLCAwLCAoMjE0NzQ4MzY0NykgfSwKKyAgICB7IC5udW12YWwg PSAzIH0sCisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0VSQVNF LAorICAgIHsgMCB9IH0sCisgIHsgImdsaWJjIgorICAgICIuIgorICAgICJtYWxsb2MiCisgICAg Ii4iCisgICAgImFyZW5hX21heCIsCisgICAgeyBUVU5BQkxFX1RZUEVfU0laRV9ULCAxLCAoMTg0 NDY3NDQwNzM3MDk1NTE2MTVVTCkgfSwKKyAgICB7fSwKKyAgICAoKHZvaWQgKikwKSwKKyAgICBU VU5BQkxFX1NFQ0xFVkVMX1NYSURfSUdOT1JFLAorICAgICJNQUxMT0NfQVJFTkFfTUFYIiB9LAor ICB7ICJnbGliYyIKKyAgICAiLiIKKyAgICAibWFsbG9jIgorICAgICIuIgorICAgICJtbWFwX3Ro cmVzaG9sZCIsCisgICAgeyBUVU5BQkxFX1RZUEVfU0laRV9ULCAwLCAoMTg0NDY3NDQwNzM3MDk1 NTE2MTVVTCkgfSwKKyAgICB7fSwKKyAgICAoKHZvaWQgKikwKSwKKyAgICBUVU5BQkxFX1NFQ0xF VkVMX1NYSURfSUdOT1JFLAorICAgICJNQUxMT0NfTU1BUF9USFJFU0hPTERfIiB9LAorICB7ICJn bGliYyIKKyAgICAiLiIKKyAgICAiY3B1IgorICAgICIuIgorICAgICJ4ODZfZGF0YV9jYWNoZV9z aXplIiwKKyAgICB7IFRVTkFCTEVfVFlQRV9TSVpFX1QsIDAsICgxODQ0Njc0NDA3MzcwOTU1MTYx NVVMKSB9LAorICAgIHt9LAorICAgICgodm9pZCAqKTApLAorICAgIFRVTkFCTEVfU0VDTEVWRUxf U1hJRF9FUkFTRSwKKyAgICB7IDAgfSB9LAorICB7ICJnbGliYyIKKyAgICAiLiIKKyAgICAibWFs bG9jIgorICAgICIuIgorICAgICJ0Y2FjaGVfY291bnQiLAorICAgIHsgVFVOQUJMRV9UWVBFX1NJ WkVfVCwgMCwgKDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwpIH0sCisgICAge30sCisgICAgKCh2b2lk ICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0VSQVNFLAorICAgIHsgMCB9IH0sCisg IHsgImdsaWJjIgorICAgICIuIgorICAgICJtYWxsb2MiCisgICAgIi4iCisgICAgImFyZW5hX3Rl c3QiLAorICAgIHsgVFVOQUJMRV9UWVBFX1NJWkVfVCwgMSwgKDE4NDQ2NzQ0MDczNzA5NTUxNjE1 VUwpIH0sCisgICAge30sCisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9T WElEX0lHTk9SRSwKKyAgICAiTUFMTE9DX0FSRU5BX1RFU1QiIH0sCisgIHsgImdsaWJjIgorICAg ICIuIgorICAgICJwdGhyZWFkIgorICAgICIuIgorICAgICJtdXRleF9zcGluX2NvdW50IiwKKyAg ICB7IFRVTkFCTEVfVFlQRV9JTlRfMzIsIDAsIDMyNzY3IH0sCisgICAgeyAubnVtdmFsID0gMTAw IH0sCisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNMRVZFTF9TWElEX0VSQVNFLAor ICAgIHsgMCB9IH0sCisgIHsgImdsaWJjIgorICAgICIuIgorICAgICJydGxkIgorICAgICIuIgor ICAgICJvcHRpb25hbF9zdGF0aWNfdGxzIiwKKyAgICB7IFRVTkFCTEVfVFlQRV9TSVpFX1QsIDAs ICgxODQ0Njc0NDA3MzcwOTU1MTYxNVVMKSB9LAorICAgIHsgLm51bXZhbCA9IDUxMiB9LAorICAg ICgodm9pZCAqKTApLAorICAgIFRVTkFCTEVfU0VDTEVWRUxfU1hJRF9FUkFTRSwKKyAgICB7IDAg fSB9LAorICB7ICJnbGliYyIKKyAgICAiLiIKKyAgICAibWFsbG9jIgorICAgICIuIgorICAgICJ0 Y2FjaGVfbWF4IiwKKyAgICB7IFRVTkFCTEVfVFlQRV9TSVpFX1QsIDAsICgxODQ0Njc0NDA3Mzcw OTU1MTYxNVVMKSB9LAorICAgIHt9LAorICAgICgodm9pZCAqKTApLAorICAgIFRVTkFCTEVfU0VD TEVWRUxfU1hJRF9FUkFTRSwKKyAgICB7IDAgfSB9LAorICB7ICJnbGliYyIKKyAgICAiLiIKKyAg ICAibWFsbG9jIgorICAgICIuIgorICAgICJjaGVjayIsCisgICAgeyBUVU5BQkxFX1RZUEVfSU5U XzMyLCAwLCAzIH0sCisgICAge30sCisgICAgKCh2b2lkICopMCksCisgICAgVFVOQUJMRV9TRUNM RVZFTF9TWElEX0VSQVNFLAorICAgICJNQUxMT0NfQ0hFQ0tfIiB9LAorfTsKK2V4dGVybiB2b2lk IF9fdHVuYWJsZXNfaW5pdCAoY2hhciAqKik7CitleHRlcm4gdm9pZCBfX3R1bmFibGVzX3ByaW50 ICh2b2lkKTsKK2V4dGVybiB2b2lkIF9fdHVuYWJsZV9nZXRfdmFsICh0dW5hYmxlX2lkX3QsIHZv aWQgKiwgdHVuYWJsZV9jYWxsYmFja190KTsKK2V4dGVybiB2b2lkIF9fdHVuYWJsZV9zZXRfdmFs ICh0dW5hYmxlX2lkX3QsIHR1bmFibGVfdmFsX3QgKiwgdHVuYWJsZV9udW1fdCAqLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR1bmFibGVfbnVtX3QgKik7CitzdGF0aWMgX19pbmxp bmUgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkgX0Jvb2wKK3R1bmFibGVfdmFs X2x0ICh0dW5hYmxlX251bV90IGxocywgdHVuYWJsZV9udW1fdCByaHMsIF9Cb29sIHVuc2lnbmVk X2NtcCkKK3sKKyAgaWYgKHVuc2lnbmVkX2NtcCkKKyAgICByZXR1cm4gKHVpbnRtYXhfdClsaHMg PCAodWludG1heF90KXJoczsKKyAgZWxzZQorICAgIHJldHVybiBsaHMgPCByaHM7Cit9CitzdGF0 aWMgX19pbmxpbmUgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkgX0Jvb2wKK3R1 bmFibGVfdmFsX2d0ICh0dW5hYmxlX251bV90IGxocywgdHVuYWJsZV9udW1fdCByaHMsIF9Cb29s IHVuc2lnbmVkX2NtcCkKK3sKKyAgaWYgKHVuc2lnbmVkX2NtcCkKKyAgICByZXR1cm4gKHVpbnRt YXhfdClsaHMgPiAodWludG1heF90KXJoczsKKyAgZWxzZQorICAgIHJldHVybiBsaHMgPiByaHM7 Cit9CitzdGF0aWMgX19pbmxpbmUgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkg X0Jvb2wKK3R1bmFibGVfaXNfbmFtZSAoY29uc3QgY2hhciAqb3JpZywgY29uc3QgY2hhciAqZW52 bmFtZSkKK3sKKyAgZm9yICg7ICpvcmlnICE9ICdcMCcgJiYgKmVudm5hbWUgIT0gJ1wwJzsgZW52 bmFtZSsrLCBvcmlnKyspCisgICAgaWYgKCpvcmlnICE9ICplbnZuYW1lKQorICAgICAgYnJlYWs7 CisgIGlmICgqb3JpZyA9PSAnXDAnICYmICplbnZuYW1lID09ICc9JykKKyAgICByZXR1cm4gMTsK KyAgZWxzZQorICAgIHJldHVybiAwOworfQorc3RhdGljIGNoYXIgKgordHVuYWJsZXNfc3RyZHVw IChjb25zdCBjaGFyICppbikKK3sKKyAgc2l6ZV90IGkgPSAwOworICB3aGlsZSAoaW5baSsrXSAh PSAnXDAnKQorICAgIDsKKyAgY2hhciAqb3V0ID0gX19taW5pbWFsX21hbGxvYyAoaSArIDEpOwor ICBpZiAob3V0ID09ICgodm9pZCAqKTApKQorICAgIF9kbF9mYXRhbF9wcmludGYgKCJmYWlsZWQg dG8gYWxsb2NhdGUgbWVtb3J5IHRvIHByb2Nlc3MgdHVuYWJsZXNcbiIpOworICB3aGlsZSAoaS0t ID4gMCkKKyAgICBvdXRbaV0gPSBpbltpXTsKKyAgcmV0dXJuIG91dDsKK30KK3N0YXRpYyBjaGFy ICoqCitnZXRfbmV4dF9lbnYgKGNoYXIgKiplbnZwLCBjaGFyICoqbmFtZSwgc2l6ZV90ICpuYW1l bGVuLCBjaGFyICoqdmFsLAorICAgICAgICAgICAgICBjaGFyICoqKnByZXZfZW52cCkKK3sKKyAg d2hpbGUgKGVudnAgIT0gKCh2b2lkICopMCkgJiYgKmVudnAgIT0gKCh2b2lkICopMCkpCisgICAg eworICAgICAgY2hhciAqKnByZXYgPSBlbnZwOworICAgICAgY2hhciAqZW52bGluZSA9ICplbnZw Kys7CisgICAgICBpbnQgbGVuID0gMDsKKyAgICAgIHdoaWxlIChlbnZsaW5lW2xlbl0gIT0gJ1ww JyAmJiBlbnZsaW5lW2xlbl0gIT0gJz0nKQorICAgICAgICBsZW4rKzsKKyAgICAgIGlmIChlbnZs aW5lW2xlbl0gPT0gJ1wwJykKKyAgICAgICAgY29udGludWU7CisgICAgICAqbmFtZSA9IGVudmxp bmU7CisgICAgICAqbmFtZWxlbiA9IGxlbjsKKyAgICAgICp2YWwgPSAmZW52bGluZVtsZW4gKyAx XTsKKyAgICAgICpwcmV2X2VudnAgPSBwcmV2OworICAgICAgcmV0dXJuIGVudnA7CisgICAgfQor ICByZXR1cm4gKCh2b2lkICopMCk7Cit9CitzdGF0aWMgdm9pZAorZG9fdHVuYWJsZV91cGRhdGVf dmFsICh0dW5hYmxlX3QgKmN1ciwgY29uc3QgdHVuYWJsZV92YWxfdCAqdmFscCwKKyAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdHVuYWJsZV9udW1fdCAqbWlucCwgY29uc3QgdHVuYWJsZV9u dW1fdCAqbWF4cCkKK3sKKyAgdHVuYWJsZV9udW1fdCB2YWwsIG1pbiwgbWF4OworICBpZiAoY3Vy LT50eXBlLnR5cGVfY29kZSA9PSBUVU5BQkxFX1RZUEVfU1RSSU5HKQorICAgIHsKKyAgICAgIGN1 ci0+dmFsLnN0cnZhbCA9IHZhbHAtPnN0cnZhbDsKKyAgICAgIGN1ci0+aW5pdGlhbGl6ZWQgPSAx OworICAgICAgcmV0dXJuOworICAgIH0KKyAgX0Jvb2wgdW5zaWduZWRfY21wID0gdW5zaWduZWRf dHVuYWJsZV90eXBlIChjdXItPnR5cGUudHlwZV9jb2RlKTsKKyAgdmFsID0gdmFscC0+bnVtdmFs OworICBtaW4gPSBtaW5wICE9ICgodm9pZCAqKTApID8gKm1pbnAgOiBjdXItPnR5cGUubWluOwor ICBtYXggPSBtYXhwICE9ICgodm9pZCAqKTApID8gKm1heHAgOiBjdXItPnR5cGUubWF4OworICBp ZiAodHVuYWJsZV92YWxfbHQgKG1pbiwgY3VyLT50eXBlLm1pbiwgdW5zaWduZWRfY21wKSkKKyAg ICBtaW4gPSBjdXItPnR5cGUubWluOworICBpZiAodHVuYWJsZV92YWxfZ3QgKG1heCwgY3VyLT50 eXBlLm1heCwgdW5zaWduZWRfY21wKSkKKyAgICBtYXggPSBjdXItPnR5cGUubWF4OworICBpZiAo dHVuYWJsZV92YWxfZ3QgKG1pbiwgbWF4LCB1bnNpZ25lZF9jbXApKQorICAgIHsKKyAgICAgIG1p biA9IGN1ci0+dHlwZS5taW47CisgICAgICBtYXggPSBjdXItPnR5cGUubWF4OworICAgIH0KKyAg aWYgKHR1bmFibGVfdmFsX2x0ICh2YWwsIG1pbiwgdW5zaWduZWRfY21wKQorICAgICAgfHwgdHVu YWJsZV92YWxfbHQgKG1heCwgdmFsLCB1bnNpZ25lZF9jbXApKQorICAgIHJldHVybjsKKyAgY3Vy LT52YWwubnVtdmFsID0gdmFsOworICBjdXItPnR5cGUubWluID0gbWluOworICBjdXItPnR5cGUu bWF4ID0gbWF4OworICBjdXItPmluaXRpYWxpemVkID0gMTsKK30KK3N0YXRpYyB2b2lkCit0dW5h YmxlX2luaXRpYWxpemUgKHR1bmFibGVfdCAqY3VyLCBjb25zdCBjaGFyICpzdHJ2YWwpCit7Cisg IHR1bmFibGVfdmFsX3QgdmFsOworICBpZiAoY3VyLT50eXBlLnR5cGVfY29kZSAhPSBUVU5BQkxF X1RZUEVfU1RSSU5HKQorICAgIHZhbC5udW12YWwgPSAodHVuYWJsZV9udW1fdClfZGxfc3RydG91 bCAoc3RydmFsLCAoKHZvaWQgKikwKSk7CisgIGVsc2UKKyAgICB2YWwuc3RydmFsID0gc3RydmFs OworICBkb190dW5hYmxlX3VwZGF0ZV92YWwgKGN1ciwgJnZhbCwgKCh2b2lkICopMCksICgodm9p ZCAqKTApKTsKK30KK3N0YXRpYyB2b2lkCitwYXJzZV90dW5hYmxlcyAoY2hhciAqdHVuZXN0ciwg Y2hhciAqdmFsc3RyaW5nKQoreworICBpZiAodHVuZXN0ciA9PSAoKHZvaWQgKikwKSB8fCAqdHVu ZXN0ciA9PSAnXDAnKQorICAgIHJldHVybjsKKyAgY2hhciAqcCA9IHR1bmVzdHI7CisgIHNpemVf dCBvZmYgPSAwOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBjaGFyICpuYW1lID0gcDsKKyAg ICAgIHNpemVfdCBsZW4gPSAwOworICAgICAgd2hpbGUgKHBbbGVuXSAhPSAnPScgJiYgcFtsZW5d ICE9ICc6JyAmJiBwW2xlbl0gIT0gJ1wwJykKKyAgICAgICAgbGVuKys7CisgICAgICBpZiAocFts ZW5dID09ICdcMCcpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoX19saWJjX2VuYWJsZV9zZWN1 cmUpCisgICAgICAgICAgICB0dW5lc3RyW29mZl0gPSAnXDAnOworICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorICAgICAgaWYgKHBbbGVuXSA9PSAnOicpCisgICAgICAgIHsKKyAgICAgICAg ICBwICs9IGxlbiArIDE7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIHAg Kz0gbGVuICsgMTsKKyAgICAgIGNoYXIgKnZhbHVlID0gJnZhbHN0cmluZ1twIC0gdHVuZXN0cl07 CisgICAgICBsZW4gPSAwOworICAgICAgd2hpbGUgKHBbbGVuXSAhPSAnOicgJiYgcFtsZW5dICE9 ICdcMCcpCisgICAgICAgIGxlbisrOworICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl b2YgKHR1bmFibGVfbGlzdCkgLyBzaXplb2YgKHR1bmFibGVfdCk7IGkrKykKKyAgICAgICAgewor ICAgICAgICAgIHR1bmFibGVfdCAqY3VyID0gJnR1bmFibGVfbGlzdFtpXTsKKyAgICAgICAgICBp ZiAodHVuYWJsZV9pc19uYW1lIChjdXItPm5hbWUsIG5hbWUpKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICBpZiAoX19saWJjX2VuYWJsZV9zZWN1cmUpCisgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgaWYgKGN1ci0+c2VjdXJpdHlfbGV2ZWwgIT0gVFVOQUJMRV9TRUNM RVZFTF9TWElEX0VSQVNFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgaWYgKG9mZiA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICB0dW5lc3RyW29mZisr XSA9ICc6JzsKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuID0gY3VyLT5uYW1l OworICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqbiAhPSAnXDAnKQorICAgICAgICAgICAg ICAgICAgICAgICAgdHVuZXN0cltvZmYrK10gPSAqbisrOworICAgICAgICAgICAgICAgICAgICAg IHR1bmVzdHJbb2ZmKytdID0gJz0nOworICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90 IGogPSAwOyBqIDwgbGVuOyBqKyspCisgICAgICAgICAgICAgICAgICAgICAgICB0dW5lc3RyW29m ZisrXSA9IHZhbHVlW2pdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICBpZiAoY3VyLT5zZWN1cml0eV9sZXZlbCAhPSBUVU5BQkxFX1NFQ0xFVkVMX05PTkUpCisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg dmFsdWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICAgIHR1bmFibGVfaW5pdGlhbGl6ZSAoY3Vy LCB2YWx1ZSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICBpZiAocFtsZW5dICE9ICdcMCcpCisgICAgICAgIHAgKz0gbGVuICsgMTsKKyAgICB9 Cit9Cit2b2lkCitfX3R1bmFibGVzX2luaXQgKGNoYXIgKiplbnZwKQoreworICBjaGFyICplbnZu YW1lID0gKCh2b2lkICopMCk7CisgIGNoYXIgKmVudnZhbCA9ICgodm9pZCAqKTApOworICBzaXpl X3QgbGVuID0gMDsKKyAgY2hhciAqKnByZXZfZW52cCA9IGVudnA7CisgIHdoaWxlICgoZW52cCA9 IGdldF9uZXh0X2VudiAoZW52cCwgJmVudm5hbWUsICZsZW4sICZlbnZ2YWwsICZwcmV2X2VudnAp KQorICAgICAgICAgIT0gKCh2b2lkICopMCkpCisgICAgeworICAgICAgaWYgKHR1bmFibGVfaXNf bmFtZSAoIkdMSUJDX1RVTkFCTEVTIiwgZW52bmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICBj aGFyICpuZXdfZW52ID0gdHVuYWJsZXNfc3RyZHVwIChlbnZuYW1lKTsKKyAgICAgICAgICBpZiAo bmV3X2VudiAhPSAoKHZvaWQgKikwKSkKKyAgICAgICAgICAgIHBhcnNlX3R1bmFibGVzIChuZXdf ZW52ICsgbGVuICsgMSwgZW52dmFsKTsKKyAgICAgICAgICAqcHJldl9lbnZwID0gbmV3X2VudjsK KyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBzaXplb2YgKHR1bmFibGVfbGlzdCkgLyBzaXplb2YgKHR1bmFibGVfdCk7IGkrKykKKyAgICAg ICAgeworICAgICAgICAgIHR1bmFibGVfdCAqY3VyID0gJnR1bmFibGVfbGlzdFtpXTsKKyAgICAg ICAgICBjb25zdCBjaGFyICpuYW1lID0gY3VyLT5lbnZfYWxpYXM7CisgICAgICAgICAgaWYgKHR1 bmFibGVfaXNfbmFtZSAobmFtZSwgZW52bmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIHR1bmFibGVfaW5pdGlhbGl6ZSAoY3VyLCBlbnZ2YWwpOworICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTAzNzYyLTFiLmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjEwMzc2Mi0xYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi4zOTFmNTFjZjdmMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByMTAzNzYyLTFiLmMKQEAgLTAsMCArMSw3IEBACisvKiB7IGRnLWRv IGNvbXBpbGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgcGllIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIC1zdGQ9Z251MTEgLWZnbnU4OS1pbmxpbmUgLWZwaWUiIH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIi5xdWFkXFtcXHQgXF0rdHVu YWJsZV9saXN0IiB7IHRhcmdldCBscDY0IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItbm90ICIubG9uZ1xbXFx0IFxdK3R1bmFibGVfbGlzdCIgeyB0YXJnZXQgeyAhIGxw NjQgfSB9IH0gfSAqLworCisjaW5jbHVkZSAicHIxMDM3NjItMWEuYyIKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTAzNzYyLTFjLmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjEwMzc2Mi0xYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi40NjY3YjA2YzE3MQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L3ByMTAzNzYyLTFjLmMKQEAgLTAsMCArMSw3IEBACisvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgZnBpYyB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtc3RkPWdudTExIC1mZ251ODktaW5saW5lIC1mcGlj IiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIucXVhZFxbXFx0IFxd K3R1bmFibGVfbGlzdCIgeyB0YXJnZXQgbHA2NCB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLW5vdCAiLmxvbmdcW1xcdCBcXSt0dW5hYmxlX2xpc3QiIHsgdGFyZ2V0IHsg ISBscDY0IH0gfSB9IH0gKi8KKworI2luY2x1ZGUgInByMTAzNzYyLTFhLmMiCi0tIAoyLjMzLjEK Cg== --0000000000009404bb05d39b53ad--