From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2803 invoked by alias); 27 Aug 2015 18:51:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 2793 invoked by uid 89); 27 Aug 2015 18:51:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-ob0-f172.google.com Received: from mail-ob0-f172.google.com (HELO mail-ob0-f172.google.com) (209.85.214.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 27 Aug 2015 18:51:38 +0000 Received: by obbwr7 with SMTP id wr7so24116323obb.2 for ; Thu, 27 Aug 2015 11:51:36 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.60.69.2 with SMTP id a2mr1115363oeu.3.1440701496013; Thu, 27 Aug 2015 11:51:36 -0700 (PDT) Received: by 10.60.147.202 with HTTP; Thu, 27 Aug 2015 11:51:35 -0700 (PDT) Date: Thu, 27 Aug 2015 18:53:00 -0000 Message-ID: Subject: [PATCH, i386]: Fix PR67317, silly code generation for _addcarry/_subborrow intrinsics From: Uros Bizjak To: "gcc-patches@gcc.gnu.org" Cc: Segher Boessenkool , "H.J. Lu" Content-Type: multipart/mixed; boundary=001a11c1a0e6e5e193051e4f746b X-SW-Source: 2015-08/txt/msg01738.txt.bz2 --001a11c1a0e6e5e193051e4f746b Content-Type: text/plain; charset=UTF-8 Content-length: 5066 Hello! Attached patch improves code generation for _addcarry_* and _subborrow_* intrinsics considerably. For the following testcase: --cut here-- typedef unsigned long long u64; u64 testcarry_u64 (u64 a, u64 b, u64 c, u64 d) { u64 result0, result1; __builtin_ia32_addcarryx_u64 (__builtin_ia32_addcarryx_u64 (0, a, c, &result0), b, d, &result1); return result0 ^ result1; } --cut here-- unpatched compiler generates: xorl %r8d, %r8d addb $-1, %r8b adcq %rdi, %rdx setc %r8b movq %rdx, %rax addb $-1, %r8b adcq %rsi, %rcx xorq %rcx, %rax ret and patched compiler improves the compiled code to: addq %rdi, %rdx adcq %rsi, %rcx movq %rdx, %rax xorq %rcx, %rax ret To achieve this improvement, patterns involving UNSPECs were removed and equivalent add3_cconly_overflow patterns are used instead. Also, to enable desired combine simplifications, several patterns were rewritten to their canonical representation, similar to: (define_insn "addcarry" [(set (reg:CCC FLAGS_REG) (compare:CCC (plus:SWI48 (plus:SWI48 (match_operator:SWI48 4 "ix86_carry_flag_operator" [(match_operand 3 "flags_reg_operand") (const_int 0)]) (match_operand:SWI48 1 "nonimmediate_operand" "%0")) (match_operand:SWI48 2 "nonimmediate_operand" "rm")) (match_dup 1))) (set (match_operand:SWI48 0 "register_operand" "=r") (plus:SWI48 (plus:SWI48 (match_op_dup 4 [(match_dup 3) (const_int 0)]) (match_dup 1)) (match_dup 2)))] "ix86_binary_operator_ok (PLUS, mode, operands)" "adc{}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "use_carry" "1") (set_attr "pent_pair" "pu") (set_attr "mode" "")]) and (define_insn "subborrow" [(set (reg:CCC FLAGS_REG) (compare:CCC (match_operand:SWI48 1 "nonimmediate_operand" "0") (plus:SWI48 (match_operator:SWI48 4 "ix86_carry_flag_operator" [(match_operand 3 "flags_reg_operand") (const_int 0)]) (match_operand:SWI48 2 "nonimmediate_operand" "rm")))) (set (match_operand:SWI48 0 "register_operand" "=r") (minus:SWI48 (minus:SWI48 (match_dup 1) (match_op_dup 4 [(match_dup 3) (const_int 0)])) (match_dup 2)))] "ix86_binary_operator_ok (MINUS, mode, operands)" "sbb{}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "use_carry" "1") (set_attr "pent_pair" "pu") (set_attr "mode" "")]) Also, the patch removes generation of adcx instructions. I'd argue that there is no point to generate larger and probably slower adcx instead of equivalent shorter and well optimized adc[lq] instructions. (If this is not the case, the follow-up patch to generate correct insn mnemonic depending on TARGET_ADX would be trivial). Please also note that unpatched expander breaks carry flag chains. The rewritten expander takes care not to expand arguments (expansion can result in carry flag clobbering add insns) in the middle of carry flag chain. Due to this problem, the patch will also be backported to gcc-5 branch. 2015-08-27 Uros Bizjak PR target/67317 * config/i386/i386.md (*add3_cc): Remove insn pattern. (addqi3_cc): Ditto. (UNSPEC_ADD_CARRY): Remove. (addqi3_cconly_overflow): New expander. (*add3_doubleword): Split to add3_cconly_overflow. Adjust for changed add3_carry. (*neg2_doubleword): Adjust for changed add3_carry. (*sub3_doubleword): Adjust for changed sub3_carry. (3_carry): Remove expander. (*3_carry): Split insn pattern to add3_carry and sub3_carry. (plusminus_carry_mnemonic): Remove code attribute. (add3_carry): Canonicalize insn pattern. (*addsi3_carry_zext): Ditto. (sub3_carry): Ditto. (*subsi3_carry_zext): Ditto. (adcx3): Remove insn pattern. (addcarry): New insn pattern. (subborrow): Ditto. * config/i386/i386.c (ix86_expand_strlensi_unroll_1): Use gen_addqi3_cconly_overflow instead of gen_addqi3_cc. (ix86_expand_builtin) : Use CODE_FOR_subborrowsi, CODE_FOR_subborrowdi, CODE_FOR_addcarrysi and CODE_FOR_addcarrydi. Rewrite expander to not clobber carry flag chains. testsuite/ChangeLog: 2015-08-27 Uros Bizjak PR target/67317 * gcc.target/i386/pr67317-1.c: New test. * gcc.target/i386/pr67317-2.c: Ditto. * gcc.target/i386/pr67317-3.c: Ditto. * gcc.target/i386/pr67317-4.c: Ditto. * gcc.target/i386/adx-addcarryx32-1.c: Also scan for adcl. * gcc.target/i386/adx-addcarryx32-2.c: Also scan for adcq. Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Patch was committed to mainline, and will be backported to gcc-5 branch after a week without problems in mainline. Uros. --001a11c1a0e6e5e193051e4f746b Content-Type: text/plain; charset=US-ASCII; name="p.diff.txt" Content-Disposition: attachment; filename="p.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_idukeash0 Content-length: 23180 SW5kZXg6IGNvbmZpZy9pMzg2L2kzODYuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBjb25maWcvaTM4Ni9pMzg2LmMJKHJldmlzaW9uIDIyNzI2MSkK KysrIGNvbmZpZy9pMzg2L2kzODYuYwkod29ya2luZyBjb3B5KQpAQCAtMjU1 MzEsNyArMjU1MzEsNyBAQCBpeDg2X2V4cGFuZF9zdHJsZW5zaV91bnJvbGxf MSAocnR4IG91dCwgcnR4IHNyYywgcgogCiAgIC8qIEF2b2lkIGJyYW5jaCBp biBmaXhpbmcgdGhlIGJ5dGUuICAqLwogICB0bXByZWcgPSBnZW5fbG93cGFy dCAoUUltb2RlLCB0bXByZWcpOwotICBlbWl0X2luc24gKGdlbl9hZGRxaTNf Y2MgKHRtcHJlZywgdG1wcmVnLCB0bXByZWcpKTsKKyAgZW1pdF9pbnNuIChn ZW5fYWRkcWkzX2Njb25seV9vdmVyZmxvdyAodG1wcmVnLCB0bXByZWcpKTsK ICAgdG1wID0gZ2VuX3J0eF9SRUcgKENDbW9kZSwgRkxBR1NfUkVHKTsKICAg Y21wID0gZ2VuX3J0eF9MVFUgKFZPSURtb2RlLCB0bXAsIGNvbnN0MF9ydHgp OwogICBlbWl0X2luc24gKGl4ODZfZ2VuX3N1YjNfY2FycnkgKG91dCwgb3V0 LCBHRU5fSU5UICgzKSwgdG1wLCBjbXApKTsKQEAgLTM5NTEwLDUzICszOTUx MCw0MSBAQCByZHNlZWRfc3RlcDoKICAgICAgIHJldHVybiB0YXJnZXQ7CiAK ICAgICBjYXNlIElYODZfQlVJTFRJTl9TQkIzMjoKLSAgICAgIGljb2RlID0g Q09ERV9GT1Jfc3Vic2kzX2NhcnJ5OworICAgICAgaWNvZGUgPSBDT0RFX0ZP Ul9zdWJib3Jyb3dzaTsKICAgICAgIG1vZGUwID0gU0ltb2RlOwotICAgICAg Z290byBhZGRjYXJyeXg7CisgICAgICBnb3RvIGhhbmRsZWNhcnJ5OwogCiAg ICAgY2FzZSBJWDg2X0JVSUxUSU5fU0JCNjQ6Ci0gICAgICBpY29kZSA9IENP REVfRk9SX3N1YmRpM19jYXJyeTsKKyAgICAgIGljb2RlID0gQ09ERV9GT1Jf c3ViYm9ycm93ZGk7CiAgICAgICBtb2RlMCA9IERJbW9kZTsKLSAgICAgIGdv dG8gYWRkY2Fycnl4OworICAgICAgZ290byBoYW5kbGVjYXJyeTsKIAogICAg IGNhc2UgSVg4Nl9CVUlMVElOX0FERENBUlJZWDMyOgotICAgICAgaWNvZGUg PSBUQVJHRVRfQURYID8gQ09ERV9GT1JfYWRjeHNpMyA6IENPREVfRk9SX2Fk ZHNpM19jYXJyeTsKKyAgICAgIGljb2RlID0gQ09ERV9GT1JfYWRkY2Fycnlz aTsKICAgICAgIG1vZGUwID0gU0ltb2RlOwotICAgICAgZ290byBhZGRjYXJy eXg7CisgICAgICBnb3RvIGhhbmRsZWNhcnJ5OwogCiAgICAgY2FzZSBJWDg2 X0JVSUxUSU5fQUREQ0FSUllYNjQ6Ci0gICAgICBpY29kZSA9IFRBUkdFVF9B RFggPyBDT0RFX0ZPUl9hZGN4ZGkzIDogQ09ERV9GT1JfYWRkZGkzX2NhcnJ5 OworICAgICAgaWNvZGUgPSBDT0RFX0ZPUl9hZGRjYXJyeWRpOwogICAgICAg bW9kZTAgPSBESW1vZGU7CiAKLWFkZGNhcnJ5eDoKKyAgICBoYW5kbGVjYXJy eToKICAgICAgIGFyZzAgPSBDQUxMX0VYUFJfQVJHIChleHAsIDApOyAvKiB1 bnNpZ25lZCBjaGFyIGNfaW4uICAqLwogICAgICAgYXJnMSA9IENBTExfRVhQ Ul9BUkcgKGV4cCwgMSk7IC8qIHVuc2lnbmVkIGludCBzcmMxLiAgKi8KICAg ICAgIGFyZzIgPSBDQUxMX0VYUFJfQVJHIChleHAsIDIpOyAvKiB1bnNpZ25l ZCBpbnQgc3JjMi4gICovCiAgICAgICBhcmczID0gQ0FMTF9FWFBSX0FSRyAo ZXhwLCAzKTsgLyogdW5zaWduZWQgaW50ICpzdW1fb3V0LiAgKi8KIAotICAg ICAgb3AwID0gZ2VuX3JlZ19ydHggKFFJbW9kZSk7Ci0KLSAgICAgIC8qIEdl bmVyYXRlIENGIGZyb20gaW5wdXQgb3BlcmFuZC4gICovCiAgICAgICBvcDEg PSBleHBhbmRfbm9ybWFsIChhcmcwKTsKICAgICAgIG9wMSA9IGNvcHlfdG9f bW9kZV9yZWcgKFFJbW9kZSwgY29udmVydF90b19tb2RlIChRSW1vZGUsIG9w MSwgMSkpOwotICAgICAgZW1pdF9pbnNuIChnZW5fYWRkcWkzX2NjIChvcDAs IG9wMSwgY29uc3RtMV9ydHgpKTsKIAotICAgICAgLyogR2VuIEFEQ1ggaW5z dHJ1Y3Rpb24gdG8gY29tcHV0ZSBYK1krQ0YuICAqLwogICAgICAgb3AyID0g ZXhwYW5kX25vcm1hbCAoYXJnMSk7CisgICAgICBpZiAoIXJlZ2lzdGVyX29w ZXJhbmQgKG9wMiwgbW9kZTApKQorCW9wMiA9IGNvcHlfdG9fbW9kZV9yZWcg KG1vZGUwLCBvcDIpOworCiAgICAgICBvcDMgPSBleHBhbmRfbm9ybWFsIChh cmcyKTsKLQotICAgICAgaWYgKCFSRUdfUCAob3AyKSkKLQlvcDIgPSBjb3B5 X3RvX21vZGVfcmVnIChtb2RlMCwgb3AyKTsKLSAgICAgIGlmICghUkVHX1Ag KG9wMykpCisgICAgICBpZiAoIXJlZ2lzdGVyX29wZXJhbmQgKG9wMywgbW9k ZTApKQogCW9wMyA9IGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUwLCBvcDMpOwog Ci0gICAgICBvcDAgPSBnZW5fcmVnX3J0eCAobW9kZTApOwotCi0gICAgICBv cDQgPSBnZW5fcnR4X1JFRyAoQ0NDbW9kZSwgRkxBR1NfUkVHKTsKLSAgICAg IHBhdCA9IGdlbl9ydHhfTFRVIChWT0lEbW9kZSwgb3A0LCBjb25zdDBfcnR4 KTsKLSAgICAgIGVtaXRfaW5zbiAoR0VOX0ZDTiAoaWNvZGUpIChvcDAsIG9w Miwgb3AzLCBvcDQsIHBhdCkpOwotCi0gICAgICAvKiBTdG9yZSB0aGUgcmVz dWx0LiAgKi8KICAgICAgIG9wNCA9IGV4cGFuZF9ub3JtYWwgKGFyZzMpOwog ICAgICAgaWYgKCFhZGRyZXNzX29wZXJhbmQgKG9wNCwgVk9JRG1vZGUpKQog CXsKQEAgLTM5NTYzLDggKzM5NTUxLDE3IEBAIHJkc2VlZF9zdGVwOgogCSAg b3A0ID0gY29udmVydF9tZW1vcnlfYWRkcmVzcyAoUG1vZGUsIG9wNCk7CiAJ ICBvcDQgPSBjb3B5X2FkZHJfdG9fcmVnIChvcDQpOwogCX0KLSAgICAgIGVt aXRfbW92ZV9pbnNuIChnZW5fcnR4X01FTSAobW9kZTAsIG9wNCksIG9wMCk7 CiAKKyAgICAgIC8qIEdlbmVyYXRlIENGIGZyb20gaW5wdXQgb3BlcmFuZC4g ICovCisgICAgICBlbWl0X2luc24gKGdlbl9hZGRxaTNfY2Nvbmx5X292ZXJm bG93IChvcDEsIGNvbnN0bTFfcnR4KSk7CisKKyAgICAgIC8qIEdlbmVyYXRl IGluc3RydWN0aW9uIHRoYXQgY29uc3VtZXMgQ0YuICAqLworICAgICAgb3Aw ID0gZ2VuX3JlZ19ydHggKG1vZGUwKTsKKworICAgICAgb3AxID0gZ2VuX3J0 eF9SRUcgKENDQ21vZGUsIEZMQUdTX1JFRyk7CisgICAgICBwYXQgPSBnZW5f cnR4X0xUVSAobW9kZTAsIG9wMSwgY29uc3QwX3J0eCk7CisgICAgICBlbWl0 X2luc24gKEdFTl9GQ04gKGljb2RlKSAob3AwLCBvcDIsIG9wMywgb3AxLCBw YXQpKTsKKwogICAgICAgLyogUmV0dXJuIGN1cnJlbnQgQ0YgdmFsdWUuICAq LwogICAgICAgaWYgKHRhcmdldCA9PSAwKQogICAgICAgICB0YXJnZXQgPSBn ZW5fcmVnX3J0eCAoUUltb2RlKTsKQEAgLTM5NTcxLDYgKzM5NTY4LDEwIEBA IHJkc2VlZF9zdGVwOgogCiAgICAgICBQVVRfTU9ERSAocGF0LCBRSW1vZGUp OwogICAgICAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAodGFyZ2V0LCBwYXQp KTsKKworICAgICAgLyogU3RvcmUgdGhlIHJlc3VsdC4gICovCisgICAgICBl bWl0X21vdmVfaW5zbiAoZ2VuX3J0eF9NRU0gKG1vZGUwLCBvcDQpLCBvcDAp OworCiAgICAgICByZXR1cm4gdGFyZ2V0OwogCiAgICAgY2FzZSBJWDg2X0JV SUxUSU5fUkVBRF9GTEFHUzoKSW5kZXg6IGNvbmZpZy9pMzg2L2kzODYubWQK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmlnL2kzODYvaTM4Ni5t ZAkocmV2aXNpb24gMjI3MjYxKQorKysgY29uZmlnL2kzODYvaTM4Ni5tZAko d29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw2IEBACiAgIFVOU1BFQ19T QUhGCiAgIFVOU1BFQ19QQVJJVFkKICAgVU5TUEVDX0ZTVENXCi0gIFVOU1BF Q19BRERfQ0FSUlkKICAgVU5TUEVDX0ZMRENXCiAgIFVOU1BFQ19SRVAKICAg VU5TUEVDX0xEX01QSUMJOyBsb2FkX21hY2hvX3BpY2Jhc2UKQEAgLTg0OCw4 ICs4NDcsNiBAQAogKGRlZmluZV9jb2RlX2F0dHIgcGx1c21pbnVzX21uZW1v bmljCiAgIFsocGx1cyAiYWRkIikgKHNzX3BsdXMgImFkZHMiKSAodXNfcGx1 cyAiYWRkdXMiKQogICAgKG1pbnVzICJzdWIiKSAoc3NfbWludXMgInN1YnMi KSAodXNfbWludXMgInN1YnVzIildKQotKGRlZmluZV9jb2RlX2F0dHIgcGx1 c21pbnVzX2NhcnJ5X21uZW1vbmljCi0gIFsocGx1cyAiYWRjIikgKG1pbnVz ICJzYmIiKV0pCiAoZGVmaW5lX2NvZGVfYXR0ciBtdWx0ZGl2X21uZW1vbmlj CiAgIFsobXVsdCAibXVsIikgKGRpdiAiZGl2IildKQogCkBAIC01MzE3LDQ2 ICs1MzE0LDIxIEBACiAgICJpeDg2X2JpbmFyeV9vcGVyYXRvcl9vayAoUExV UywgPERXST5tb2RlLCBvcGVyYW5kcykiCiAgICIjIgogICAicmVsb2FkX2Nv bXBsZXRlZCIKLSAgWyhwYXJhbGxlbCBbKHNldCAocmVnOkNDIEZMQUdTX1JF RykKLQkJICAgKHVuc3BlYzpDQyBbKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVw IDIpXQotCQkJICAgICAgVU5TUEVDX0FERF9DQVJSWSkpCisgIFsocGFyYWxs ZWwgWyhzZXQgKHJlZzpDQ0MgRkxBR1NfUkVHKQorCQkgICAoY29tcGFyZTpD Q0MKKwkJICAgICAocGx1czpEV0lIIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1 cCAyKSkKKwkJICAgICAobWF0Y2hfZHVwIDEpKSkKIAkgICAgICAoc2V0ICht YXRjaF9kdXAgMCkKIAkJICAgKHBsdXM6RFdJSCAobWF0Y2hfZHVwIDEpICht YXRjaF9kdXAgMikpKV0pCiAgICAocGFyYWxsZWwgWyhzZXQgKG1hdGNoX2R1 cCAzKQogCQkgICAocGx1czpEV0lICi0JCSAgICAgKG1hdGNoX2R1cCA0KQog CQkgICAgIChwbHVzOkRXSUgKIAkJICAgICAgIChsdHU6RFdJSCAocmVnOkND IEZMQUdTX1JFRykgKGNvbnN0X2ludCAwKSkKLQkJICAgICAgIChtYXRjaF9k dXAgNSkpKSkKKwkJICAgICAgIChtYXRjaF9kdXAgNCkpCisJCSAgICAgKG1h dGNoX2R1cCA1KSkpCiAJICAgICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFHU19S RUcpKV0pXQogICAic3BsaXRfZG91YmxlX21vZGUgKDxEV0k+bW9kZSwgJm9w ZXJhbmRzWzBdLCAzLCAmb3BlcmFuZHNbMF0sICZvcGVyYW5kc1szXSk7IikK IAotKGRlZmluZV9pbnNuICIqYWRkPG1vZGU+M19jYyIKLSAgWyhzZXQgKHJl ZzpDQyBGTEFHU19SRUcpCi0JKHVuc3BlYzpDQwotCSAgWyhtYXRjaF9vcGVy YW5kOlNXSTQ4IDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiJTAsMCIpCi0J ICAgKG1hdGNoX29wZXJhbmQ6U1dJNDggMiAiPGdlbmVyYWxfb3BlcmFuZD4i ICJyPGk+LHJtIildCi0JICBVTlNQRUNfQUREX0NBUlJZKSkKLSAgIChzZXQg KG1hdGNoX29wZXJhbmQ6U1dJNDggMCAibm9uaW1tZWRpYXRlX29wZXJhbmQi ICI9cm0sciIpCi0JKHBsdXM6U1dJNDggKG1hdGNoX2R1cCAxKSAobWF0Y2hf ZHVwIDIpKSldCi0gICJpeDg2X2JpbmFyeV9vcGVyYXRvcl9vayAoUExVUywg PE1PREU+bW9kZSwgb3BlcmFuZHMpIgotICAiYWRkezxpbW9kZXN1ZmZpeD59 XHR7JTIsICUwfCUwLCAlMn0iCi0gIFsoc2V0X2F0dHIgInR5cGUiICJhbHUi KQotICAgKHNldF9hdHRyICJtb2RlIiAiPE1PREU+IildKQotCi0oZGVmaW5l X2luc24gImFkZHFpM19jYyIKLSAgWyhzZXQgKHJlZzpDQyBGTEFHU19SRUcp Ci0JKHVuc3BlYzpDQwotCSAgWyhtYXRjaF9vcGVyYW5kOlFJIDEgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIiAiJTAsMCIpCi0JICAgKG1hdGNoX29wZXJhbmQ6 UUkgMiAiZ2VuZXJhbF9vcGVyYW5kIiAicW4scW0iKV0KLQkgIFVOU1BFQ19B RERfQ0FSUlkpKQotICAgKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJub25p bW1lZGlhdGVfb3BlcmFuZCIgIj1xbSxxIikKLQkocGx1czpRSSAobWF0Y2hf ZHVwIDEpIChtYXRjaF9kdXAgMikpKV0KLSAgIml4ODZfYmluYXJ5X29wZXJh dG9yX29rIChQTFVTLCBRSW1vZGUsIG9wZXJhbmRzKSIKLSAgImFkZHtifVx0 eyUyLCAlMHwlMCwgJTJ9IgotICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IikK LSAgIChzZXRfYXR0ciAibW9kZSIgIlFJIildKQotCiAoZGVmaW5lX2luc24g IiphZGQ8bW9kZT5fMSIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U1dJNDgg MCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI9cixybSxyLHIiKQogCShwbHVz OlNXSTQ4CkBAIC02MjY0LDEwICs2MjM2LDEwIEBACiAJCSAgIChtaW51czpE V0lIIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpXSkKICAgIChwYXJh bGxlbCBbKHNldCAobWF0Y2hfZHVwIDMpCiAJCSAgIChtaW51czpEV0lICi0J CSAgICAgKG1hdGNoX2R1cCA0KQotCQkgICAgIChwbHVzOkRXSUgKLQkJICAg ICAgIChsdHU6RFdJSCAocmVnOkNDIEZMQUdTX1JFRykgKGNvbnN0X2ludCAw KSkKLQkJICAgICAgIChtYXRjaF9kdXAgNSkpKSkKKwkJICAgICAobWludXM6 RFdJSAorCQkgICAgICAgKG1hdGNoX2R1cCA0KQorCQkgICAgICAgKGx0dTpE V0lIIChyZWc6Q0MgRkxBR1NfUkVHKSAoY29uc3RfaW50IDApKSkKKwkJICAg ICAobWF0Y2hfZHVwIDUpKSkKIAkgICAgICAoY2xvYmJlciAocmVnOkNDIEZM QUdTX1JFRykpXSldCiAgICJzcGxpdF9kb3VibGVfbW9kZSAoPERXST5tb2Rl LCAmb3BlcmFuZHNbMF0sIDMsICZvcGVyYW5kc1swXSwgJm9wZXJhbmRzWzNd KTsiKQogCkBAIC02NDMxLDI5ICs2NDAzLDE3IEBACiAMCiA7OyBBZGQgd2l0 aCBjYXJyeSBhbmQgc3VidHJhY3Qgd2l0aCBib3Jyb3cKIAotKGRlZmluZV9l eHBhbmQgIjxwbHVzbWludXNfaW5zbj48bW9kZT4zX2NhcnJ5IgotICBbKHBh cmFsbGVsCi0gICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U1dJIDAgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIikKLQkgIChwbHVzbWludXM6U1dJCi0JICAgICht YXRjaF9vcGVyYW5kOlNXSSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIpCi0J ICAgIChwbHVzOlNXSSAobWF0Y2hfb3BlcmF0b3I6U1dJIDQgIml4ODZfY2Fy cnlfZmxhZ19vcGVyYXRvciIKLQkJICAgICAgIFsobWF0Y2hfb3BlcmFuZCAz ICJmbGFnc19yZWdfb3BlcmFuZCIpCi0JCQkoY29uc3RfaW50IDApXSkKLQkJ ICAgICAgKG1hdGNoX29wZXJhbmQ6U1dJIDIgIjxnZW5lcmFsX29wZXJhbmQ+ IikpKSkKLSAgICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFHU19SRUcpKV0pXQot ICAiaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2sgKDxDT0RFPiwgPE1PREU+bW9k ZSwgb3BlcmFuZHMpIikKLQotKGRlZmluZV9pbnNuICIqPHBsdXNtaW51c19p bnNuPjxtb2RlPjNfY2FycnkiCisoZGVmaW5lX2luc24gImFkZDxtb2RlPjNf Y2FycnkiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNXSSAwICJub25pbW1l ZGlhdGVfb3BlcmFuZCIgIj08cj5tLDxyPiIpCi0JKHBsdXNtaW51czpTV0kK LQkgIChtYXRjaF9vcGVyYW5kOlNXSSAxICJub25pbW1lZGlhdGVfb3BlcmFu ZCIgIjxjb21tPjAsMCIpCisJKHBsdXM6U1dJCiAJICAocGx1czpTV0kKLQkg ICAgKG1hdGNoX29wZXJhdG9yIDMgIml4ODZfY2FycnlfZmxhZ19vcGVyYXRv ciIKLQkgICAgIFsocmVnIEZMQUdTX1JFRykgKGNvbnN0X2ludCAwKV0pCi0J ICAgIChtYXRjaF9vcGVyYW5kOlNXSSAyICI8Z2VuZXJhbF9vcGVyYW5kPiIg IjxyPjxpPiw8cj5tIikpKSkKKwkgICAgKG1hdGNoX29wZXJhdG9yOlNXSSA0 ICJpeDg2X2NhcnJ5X2ZsYWdfb3BlcmF0b3IiCisJICAgICBbKG1hdGNoX29w ZXJhbmQgMyAiZmxhZ3NfcmVnX29wZXJhbmQiKSAoY29uc3RfaW50IDApXSkK KwkgICAgKG1hdGNoX29wZXJhbmQ6U1dJIDEgIm5vbmltbWVkaWF0ZV9vcGVy YW5kIiAiJTAsMCIpKQorCSAgKG1hdGNoX29wZXJhbmQ6U1dJIDIgIjxnZW5l cmFsX29wZXJhbmQ+IiAiPHI+PGk+LDxyPm0iKSkpCiAgICAoY2xvYmJlciAo cmVnOkNDIEZMQUdTX1JFRykpXQogICAiaXg4Nl9iaW5hcnlfb3BlcmF0b3Jf b2sgKFBMVVMsIDxNT0RFPm1vZGUsIG9wZXJhbmRzKSIKLSAgIjxwbHVzbWlu dXNfY2FycnlfbW5lbW9uaWM+ezxpbW9kZXN1ZmZpeD59XHR7JTIsICUwfCUw LCAlMn0iCisgICJhZGN7PGltb2Rlc3VmZml4Pn1cdHslMiwgJTB8JTAsICUy fSIKICAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCiAgICAoc2V0X2F0dHIg InVzZV9jYXJyeSIgIjEiKQogICAgKHNldF9hdHRyICJwZW50X3BhaXIiICJw dSIpCkBAIC02NDYyLDEwICs2NDIyLDExIEBACiAoZGVmaW5lX2luc24gIiph ZGRzaTNfY2FycnlfemV4dCIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKIAkoemVyb19leHRlbmQ6REkK LQkgIChwbHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgIm5vbmltbWVkaWF0 ZV9vcGVyYW5kIiAiJTAiKQotCQkgICAocGx1czpTSSAobWF0Y2hfb3BlcmF0 b3IgMyAiaXg4Nl9jYXJyeV9mbGFnX29wZXJhdG9yIgotCQkJICAgICBbKHJl ZyBGTEFHU19SRUcpIChjb25zdF9pbnQgMCldKQotCQkJICAgIChtYXRjaF9v cGVyYW5kOlNJIDIgIng4Nl82NF9nZW5lcmFsX29wZXJhbmQiICJybWUiKSkp KSkKKwkgIChwbHVzOlNJCisJICAgIChwbHVzOlNJIChtYXRjaF9vcGVyYXRv cjpTSSAzICJpeDg2X2NhcnJ5X2ZsYWdfb3BlcmF0b3IiCisJCSAgICAgIFso cmVnIEZMQUdTX1JFRykgKGNvbnN0X2ludCAwKV0pCisJCSAgICAgKG1hdGNo X29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwIikpCisJICAg IChtYXRjaF9vcGVyYW5kOlNJIDIgIng4Nl82NF9nZW5lcmFsX29wZXJhbmQi ICJybWUiKSkpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFHU19SRUcpKV0K ICAgIlRBUkdFVF82NEJJVCAmJiBpeDg2X2JpbmFyeV9vcGVyYXRvcl9vayAo UExVUywgU0ltb2RlLCBvcGVyYW5kcykiCiAgICJhZGN7bH1cdHslMiwgJWsw fCVrMCwgJTJ9IgpAQCAtNjQ3NCw0NSArNjQzNSw5NiBAQAogICAgKHNldF9h dHRyICJwZW50X3BhaXIiICJwdSIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJT SSIpXSkKIAorOzsgVGhlcmUgaXMgbm8gcG9pbnQgdG8gZ2VuZXJhdGUgQURD WCBpbnN0cnVjdGlvbi4gQURDIGlzIHNob3J0ZXIgYW5kIGZhc3Rlci4KKwor KGRlZmluZV9pbnNuICJhZGRjYXJyeTxtb2RlPiIKKyAgWyhzZXQgKHJlZzpD Q0MgRkxBR1NfUkVHKQorCShjb21wYXJlOkNDQworCSAgKHBsdXM6U1dJNDgK KwkgICAgKHBsdXM6U1dJNDgKKwkgICAgICAobWF0Y2hfb3BlcmF0b3I6U1dJ NDggNCAiaXg4Nl9jYXJyeV9mbGFnX29wZXJhdG9yIgorCSAgICAgICBbKG1h dGNoX29wZXJhbmQgMyAiZmxhZ3NfcmVnX29wZXJhbmQiKSAoY29uc3RfaW50 IDApXSkKKwkgICAgICAobWF0Y2hfb3BlcmFuZDpTV0k0OCAxICJub25pbW1l ZGlhdGVfb3BlcmFuZCIgIiUwIikpCisJICAgIChtYXRjaF9vcGVyYW5kOlNX STQ4IDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAicm0iKSkKKwkgIChtYXRj aF9kdXAgMSkpKQorICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTV0k0OCAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShwbHVzOlNXSTQ4IChwbHVzOlNX STQ4IChtYXRjaF9vcF9kdXAgNAorCQkJCSBbKG1hdGNoX2R1cCAzKSAoY29u c3RfaW50IDApXSkKKwkJCQkobWF0Y2hfZHVwIDEpKQorCQkgICAgKG1hdGNo X2R1cCAyKSkpXQorICAiaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2sgKFBMVVMs IDxNT0RFPm1vZGUsIG9wZXJhbmRzKSIKKyAgImFkY3s8aW1vZGVzdWZmaXg+ fVx0eyUyLCAlMHwlMCwgJTJ9IgorICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1 IikKKyAgIChzZXRfYXR0ciAidXNlX2NhcnJ5IiAiMSIpCisgICAoc2V0X2F0 dHIgInBlbnRfcGFpciIgInB1IikKKyAgIChzZXRfYXR0ciAibW9kZSIgIjxN T0RFPiIpXSkKKworKGRlZmluZV9pbnNuICJzdWI8bW9kZT4zX2NhcnJ5Igor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTV0kgMCAibm9uaW1tZWRpYXRlX29w ZXJhbmQiICI9PHI+bSw8cj4iKQorCShtaW51czpTV0kKKwkgIChtaW51czpT V0kKKwkgICAgKG1hdGNoX29wZXJhbmQ6U1dJIDEgIm5vbmltbWVkaWF0ZV9v cGVyYW5kIiAiMCwwIikKKwkgICAgKG1hdGNoX29wZXJhdG9yOlNXSSA0ICJp eDg2X2NhcnJ5X2ZsYWdfb3BlcmF0b3IiCisJICAgICBbKG1hdGNoX29wZXJh bmQgMyAiZmxhZ3NfcmVnX29wZXJhbmQiKSAoY29uc3RfaW50IDApXSkpCisJ ICAobWF0Y2hfb3BlcmFuZDpTV0kgMiAiPGdlbmVyYWxfb3BlcmFuZD4iICI8 cj48aT4sPHI+bSIpKSkKKyAgIChjbG9iYmVyIChyZWc6Q0MgRkxBR1NfUkVH KSldCisgICJpeDg2X2JpbmFyeV9vcGVyYXRvcl9vayAoTUlOVVMsIDxNT0RF Pm1vZGUsIG9wZXJhbmRzKSIKKyAgInNiYns8aW1vZGVzdWZmaXg+fVx0eyUy LCAlMHwlMCwgJTJ9IgorICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IikKKyAg IChzZXRfYXR0ciAidXNlX2NhcnJ5IiAiMSIpCisgICAoc2V0X2F0dHIgInBl bnRfcGFpciIgInB1IikKKyAgIChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIp XSkKKwogKGRlZmluZV9pbnNuICIqc3Vic2kzX2NhcnJ5X3pleHQiCiAgIFso c2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 ciIpCiAJKHplcm9fZXh0ZW5kOkRJCi0JICAobWludXM6U0kgKG1hdGNoX29w ZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQotCQkgICAgKHBs dXM6U0kgKG1hdGNoX29wZXJhdG9yIDMgIml4ODZfY2FycnlfZmxhZ19vcGVy YXRvciIKLQkJCSAgICAgIFsocmVnIEZMQUdTX1JFRykgKGNvbnN0X2ludCAw KV0pCi0JCQkgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgIng4Nl82NF9nZW5l cmFsX29wZXJhbmQiICJybWUiKSkpKSkKKwkgIChtaW51czpTSQorCSAgICAo bWludXM6U0kKKwkgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiMCIpCisJICAgICAgKG1hdGNoX29wZXJhdG9yOlNJIDMg Iml4ODZfY2FycnlfZmxhZ19vcGVyYXRvciIKKwkgICAgICAgWyhyZWcgRkxB R1NfUkVHKSAoY29uc3RfaW50IDApXSkpCisJICAgIChtYXRjaF9vcGVyYW5k OlNJIDIgIng4Nl82NF9nZW5lcmFsX29wZXJhbmQiICJybWUiKSkpKQogICAg KGNsb2JiZXIgKHJlZzpDQyBGTEFHU19SRUcpKV0KICAgIlRBUkdFVF82NEJJ VCAmJiBpeDg2X2JpbmFyeV9vcGVyYXRvcl9vayAoTUlOVVMsIFNJbW9kZSwg b3BlcmFuZHMpIgogICAic2Jie2x9XHR7JTIsICVrMHwlazAsICUyfSIKICAg WyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCisgICAoc2V0X2F0dHIgInVzZV9j YXJyeSIgIjEiKQogICAgKHNldF9hdHRyICJwZW50X3BhaXIiICJwdSIpCiAg ICAoc2V0X2F0dHIgIm1vZGUiICJTSSIpXSkKLQwKLTs7IEFEQ1ggaW5zdHJ1 Y3Rpb24KIAotKGRlZmluZV9pbnNuICJhZGN4PG1vZGU+MyIKKyhkZWZpbmVf aW5zbiAic3ViYm9ycm93PG1vZGU+IgogICBbKHNldCAocmVnOkNDQyBGTEFH U19SRUcpCiAJKGNvbXBhcmU6Q0NDCisJICAobWF0Y2hfb3BlcmFuZDpTV0k0 OCAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIjAiKQogCSAgKHBsdXM6U1dJ NDgKLQkgICAgKG1hdGNoX29wZXJhbmQ6U1dJNDggMSAibm9uaW1tZWRpYXRl X29wZXJhbmQiICIlMCIpCi0JICAgIChwbHVzOlNXSTQ4Ci0JICAgICAgKG1h dGNoX29wZXJhdG9yIDQgIml4ODZfY2FycnlfZmxhZ19vcGVyYXRvciIKLQkg ICAgICAgWyhtYXRjaF9vcGVyYW5kIDMgImZsYWdzX3JlZ19vcGVyYW5kIikg KGNvbnN0X2ludCAwKV0pCi0JICAgICAgKG1hdGNoX29wZXJhbmQ6U1dJNDgg MiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJybSIpKSkKLQkgIChjb25zdF9p bnQgMCkpKQorCSAgICAobWF0Y2hfb3BlcmF0b3I6U1dJNDggNCAiaXg4Nl9j YXJyeV9mbGFnX29wZXJhdG9yIgorCSAgICAgWyhtYXRjaF9vcGVyYW5kIDMg ImZsYWdzX3JlZ19vcGVyYW5kIikgKGNvbnN0X2ludCAwKV0pCisJICAgICht YXRjaF9vcGVyYW5kOlNXSTQ4IDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAi cm0iKSkpKQogICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTV0k0OCAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPXIiKQotCShwbHVzOlNXSTQ4IChtYXRjaF9kdXAg MSkKLQkJICAgIChwbHVzOlNXSTQ4IChtYXRjaF9vcF9kdXAgNAotCQkJCSBb KG1hdGNoX2R1cCAzKSAoY29uc3RfaW50IDApXSkKLQkJCQkobWF0Y2hfZHVw IDIpKSkpXQotICAiVEFSR0VUX0FEWCAmJiBpeDg2X2JpbmFyeV9vcGVyYXRv cl9vayAoUExVUywgPE1PREU+bW9kZSwgb3BlcmFuZHMpIgotICAiYWRjeFx0 eyUyLCAlMHwlMCwgJTJ9IgorCShtaW51czpTV0k0OCAobWludXM6U1dJNDgg KG1hdGNoX2R1cCAxKQorCQkJCSAgKG1hdGNoX29wX2R1cCA0CisJCQkJICAg WyhtYXRjaF9kdXAgMykgKGNvbnN0X2ludCAwKV0pKQorCQkgICAgIChtYXRj aF9kdXAgMikpKV0KKyAgIml4ODZfYmluYXJ5X29wZXJhdG9yX29rIChNSU5V UywgPE1PREU+bW9kZSwgb3BlcmFuZHMpIgorICAic2JiezxpbW9kZXN1ZmZp eD59XHR7JTIsICUwfCUwLCAlMn0iCiAgIFsoc2V0X2F0dHIgInR5cGUiICJh bHUiKQogICAgKHNldF9hdHRyICJ1c2VfY2FycnkiICIxIikKKyAgIChzZXRf YXR0ciAicGVudF9wYWlyIiAicHUiKQogICAgKHNldF9hdHRyICJtb2RlIiAi PE1PREU+IildKQogDAogOzsgT3ZlcmZsb3cgc2V0dGluZyBhZGQgaW5zdHJ1 Y3Rpb25zCiAKKyhkZWZpbmVfZXhwYW5kICJhZGRxaTNfY2Nvbmx5X292ZXJm bG93IgorICBbKHBhcmFsbGVsCisgICAgIFsoc2V0IChyZWc6Q0NDIEZMQUdT X1JFRykKKwkgICAoY29tcGFyZTpDQ0MKKwkgICAgIChwbHVzOlFJCisJICAg ICAgIChtYXRjaF9vcGVyYW5kOlFJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IikKKwkgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMSAiZ2VuZXJhbF9vcGVy YW5kIikpCisJICAgICAobWF0Y2hfZHVwIDApKSkKKyAgICAgIChjbG9iYmVy IChtYXRjaF9zY3JhdGNoOlFJIDIpKV0pXQorICAiIShNRU1fUCAob3BlcmFu ZHNbMF0pICYmIE1FTV9QIChvcGVyYW5kc1sxXSkpIikKKwogKGRlZmluZV9p bnNuICIqYWRkPG1vZGU+M19jY29ubHlfb3ZlcmZsb3ciCiAgIFsoc2V0IChy ZWc6Q0NDIEZMQUdTX1JFRykKIAkoY29tcGFyZTpDQ0MKQEAgLTg4NDIsOSAr ODg1NCw5IEBACiAgICAgIChzZXQgKG1hdGNoX2R1cCAwKSAobmVnOkRXSUgg KG1hdGNoX2R1cCAxKSkpXSkKICAgIChwYXJhbGxlbAogICAgIFsoc2V0ICht YXRjaF9kdXAgMikKLQkgIChwbHVzOkRXSUggKG1hdGNoX2R1cCAzKQotCQkg ICAgIChwbHVzOkRXSUggKGx0dTpEV0lIIChyZWc6Q0MgRkxBR1NfUkVHKSAo Y29uc3RfaW50IDApKQotCQkJCShjb25zdF9pbnQgMCkpKSkKKwkgIChwbHVz OkRXSUggKHBsdXM6RFdJSCAobHR1OkRXSUggKHJlZzpDQyBGTEFHU19SRUcp IChjb25zdF9pbnQgMCkpCisJCQkJKG1hdGNoX2R1cCAzKSkKKwkJICAgICAo Y29uc3RfaW50IDApKSkKICAgICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFHU19S RUcpKV0pCiAgICAocGFyYWxsZWwKICAgICBbKHNldCAobWF0Y2hfZHVwIDIp CkluZGV4OiB0ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2FkeC1hZGRjYXJy eXgzMi0xLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9hZHgtYWRkY2Fycnl4MzItMS5jCShyZXZpc2lv biAyMjcyNjEpCisrKyB0ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2FkeC1h ZGRjYXJyeXgzMi0xLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA CiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwogLyogeyBkZy1vcHRpb25zICIt bWFkeCAtTzIiIH0gKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyAiYWRjeCIgMiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyAiYWRjXFt4bFxdIiAyIH0gfSAqLwogLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJzYmJsIiAxIH0gfSAq LwogCiAjaW5jbHVkZSA8eDg2aW50cmluLmg+CkluZGV4OiB0ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2FkeC1hZGRjYXJyeXg2NC0xLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9h ZHgtYWRkY2Fycnl4NjQtMS5jCShyZXZpc2lvbiAyMjcyNjEpCisrKyB0ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2FkeC1hZGRjYXJyeXg2NC0xLmMJKHdv cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKiB7IGRnLWRvIGNvbXBp bGUgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gKi8KIC8qIHsgZGctb3B0aW9u cyAiLW1hZHggLU8yIiB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItdGltZXMgImFkY3giIDIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgImFkY1xbeHFcXSIgMiB9IH0gKi8KIC8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAic2JicSIgMSB9 IH0gKi8KIAogI2luY2x1ZGUgPHg4NmludHJpbi5oPgpJbmRleDogdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY3MzE3LTEuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByNjcz MTctMS5jCShyZXZpc2lvbiAwKQorKysgdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjY3MzE3LTEuYwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4 IEBACisvKiBQUiB0YXJnZXQvNjczMTcgKi8KKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAqLworCit0eXBlZGVm IHVuc2lnbmVkIGludCB1MzI7CisKK3UzMiB0ZXN0Y2FycnlfdTMyICh1MzIg YSwgdTMyIGIsIHUzMiBjLCB1MzIgZCkKK3sKKyAgdTMyIHJlc3VsdDAsIHJl c3VsdDE7CisKKyAgX19idWlsdGluX2lhMzJfYWRkY2Fycnl4X3UzMgorICAg IChfX2J1aWx0aW5faWEzMl9hZGRjYXJyeXhfdTMyICgwLCBhLCBjLCAmcmVz dWx0MCksIGIsIGQsICZyZXN1bHQxKTsKKworICByZXR1cm4gcmVzdWx0MCBe IHJlc3VsdDE7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci1ub3QgImFkZGIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLW5vdCAic2V0bj9jIiB9IH0gKi8KSW5kZXg6IHRlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI2NzMxNy0yLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY3MzE3LTIu YwkocmV2aXNpb24gMCkKKysrIHRlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cHI2NzMxNy0yLmMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAor LyogUFIgdGFyZ2V0LzY3MzE3ICovCisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0 YXJnZXQgeyAhIGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8y IiB9ICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKKwor dTY0IHRlc3RjYXJyeV91NjQgKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBk KQoreworICB1NjQgcmVzdWx0MCwgcmVzdWx0MTsKKworICBfX2J1aWx0aW5f aWEzMl9hZGRjYXJyeXhfdTY0CisgICAgKF9fYnVpbHRpbl9pYTMyX2FkZGNh cnJ5eF91NjQgKDAsIGEsIGMsICZyZXN1bHQwKSwgYiwgZCwgJnJlc3VsdDEp OworCisgIHJldHVybiByZXN1bHQwIF4gcmVzdWx0MTsKK30KKworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiYWRkYiIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJzZXRuP2MiIH0g fSAqLwpJbmRleDogdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY3MzE3 LTMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByNjczMTctMy5jCShyZXZpc2lvbiAwKQorKysgdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY3MzE3LTMuYwkod29ya2luZyBj b3B5KQpAQCAtMCwwICsxLDE4IEBACisvKiBQUiB0YXJnZXQvNjczMTcgKi8K Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiIgfSAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3UzMiB0 ZXN0Y2FycnlfdTMyICh1MzIgYSwgdTMyIGIsIHUzMiBjLCB1MzIgZCkKK3sK KyAgdTMyIHJlc3VsdDAsIHJlc3VsdDE7CisKKyAgX19idWlsdGluX2lhMzJf c2JiX3UzMgorICAgIChfX2J1aWx0aW5faWEzMl9zYmJfdTMyICgwLCBhLCBj LCAmcmVzdWx0MCksIGIsIGQsICZyZXN1bHQxKTsKKworICByZXR1cm4gcmVz dWx0MCBeIHJlc3VsdDE7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci1ub3QgImFkZGIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLW5vdCAic2V0bj9jIiB9IH0gKi8KSW5kZXg6IHRlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2NzMxNy00LmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY3 MzE3LTQuYwkocmV2aXNpb24gMCkKKysrIHRlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvcHI2NzMxNy00LmMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx OCBAQAorLyogUFIgdGFyZ2V0LzY3MzE3ICovCisvKiB7IGRnLWRvIGNvbXBp bGUgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8yIiB9ICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2 NDsKKwordTY0IHRlc3RjYXJyeV91NjQgKHU2NCBhLCB1NjQgYiwgdTY0IGMs IHU2NCBkKQoreworICB1NjQgcmVzdWx0MCwgcmVzdWx0MTsKKworICBfX2J1 aWx0aW5faWEzMl9zYmJfdTY0CisgICAgKF9fYnVpbHRpbl9pYTMyX3NiYl91 NjQgKDAsIGEsIGMsICZyZXN1bHQwKSwgYiwgZCwgJnJlc3VsdDEpOworCisg IHJldHVybiByZXN1bHQwIF4gcmVzdWx0MTsKK30KKworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiYWRkYiIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJzZXRuP2MiIH0gfSAqLwo= --001a11c1a0e6e5e193051e4f746b--