From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-vs1-xe36.google.com (mail-vs1-xe36.google.com [IPv6:2607:f8b0:4864:20::e36]) by sourceware.org (Postfix) with ESMTPS id 19276385DC1A for ; Wed, 6 Jan 2021 03:31:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 19276385DC1A Received: by mail-vs1-xe36.google.com with SMTP id s2so1133407vsk.2 for ; Tue, 05 Jan 2021 19:31:57 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=H2nmlvY5lDUSZiSQLvzCjpxitsVh25Lzzhep54NVG/A=; b=coKI6zgInHzrXPUGfjwUu15DNElnRyD5PY3Yz9hpU/IEy9oV1uIX1Mv88q7HdUsxxm IIdmTf7qzGQP7Sfvy6kU0CjBGGWH80dyEZbMtpvVznSNm3kUxV78tGEpjO8JMt7G9QEx Fibu6kOCcOnf8eoFoV+TU4Ee/t0lrS8uUYvGnlsUD3HWvlGYg+kS54RgC52v2KSnSV74 Z2asVfgYkmxdmrg5F725bVbRvuncYUnnQ/P1LV/D48+1E7btMNOgAe/8l7CpYkzvOBtI 5NE1rZJo2IOODnyZ7I2fCuNRYiaEmwPrIzsCdxShfdThU1ndIWjWwsLP2k6eiS9OLRZR FvMQ== X-Gm-Message-State: AOAM533xaXW13V9q2XD6Mc3BdWkW+JRL7FkrvWHQ4pg0qq9o/0T9jgPZ Y1F5LzxVO+ieiWYUbwrOh9Hjgiu8RAtZXf0P8vg= X-Google-Smtp-Source: ABdhPJwVE3jKpiwk3FNnN9ABhe4ya4kaHCGP3Y9CDY+SVkPL5CaKoQStrfh8AJ5ryQV1b+AUaO427s7ePqP0ZIR92zE= X-Received: by 2002:a67:fa47:: with SMTP id j7mr1816724vsq.6.1609903916726; Tue, 05 Jan 2021 19:31:56 -0800 (PST) MIME-Version: 1.0 References: <43d01dc3-4d2e-2b94-d83b-aa6e9225b00f@redhat.com> <15b623ef-bed1-0f00-c8e6-eb976d5f20a8@redhat.com> In-Reply-To: <15b623ef-bed1-0f00-c8e6-eb976d5f20a8@redhat.com> From: Hongtao Liu Date: Wed, 6 Jan 2021 11:34:32 +0800 Message-ID: Subject: Re: [PATCH][AVX512]Lower AVX512 vector compare to AVX version when dest is vector To: Jeff Law Cc: GCC Patches Content-Type: multipart/mixed; boundary="00000000000014532205b832f77d" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Wed, 06 Jan 2021 03:31:59 -0000 --00000000000014532205b832f77d Content-Type: text/plain; charset="UTF-8" > >> > >> Note there's a data dependency between them. insn 7 feeds insn 9. When > >> there's a data dependency, combiner patterns are usually the better > >> choice than peepholes. I think you'd be looking to match something > >> likethis (from the . combine dump): > >> Using combiner patterns, details is discussed in PR98348 Boottrapped and regtested on x86_64-linux-gnu{-m32,} for both GCC10 and trunk. gcc/ChangeLog: PR target/96891 PR target/98348 * config/i386/sse.md (VI_128_256): New mode iterator. (*avx_cmp3_1, *avx_cmp3_2, *avx_cmp3_3, *avx_cmp3_4, *avx2_eq3, *avx2_pcmp3_1, *avx2_pcmp3_2, *avx2_gt3): New define_insn_and_split to lower avx512 vector comparison to avx version when dest is vector. (*_cmp3,*_cmp3,*_ucmp3): define_insn_and_split for negating the comparison result. * config/i386/predicates.md (float_vector_all_ones_operand): New predicate. * config/i386/i386-expand.c (ix86_expand_sse_movcc): Use general NOT operator without UNSPEC_MASKOP. gcc/testsuite/ChangeLog: PR target/96891 PR target/98348 * gcc.target/i386/avx512bw-pr96891-1.c: New test. * gcc.target/i386/avx512f-pr96891-1.c: New test. * gcc.target/i386/avx512f-pr96891-2.c: New test. * gcc.target/i386/avx512f-pr96891-3.c: New test. * g++.target/i386/avx512f-pr96891-1.C: New test. * gcc.target/i386/bitwise_mask_op-3.c: Adjust testcase. > > Jeff > -- BR, Hongtao --00000000000014532205b832f77d Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Lower-AVX512-vector-comparison-to-AVX-version-when-d.patch" Content-Disposition: attachment; filename="0001-Lower-AVX512-vector-comparison-to-AVX-version-when-d.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kjkvbacv0 RnJvbSAyNDBjODMwYjNkMzVmNzU3MWRhODc2YTIxYWE3MWUyNjNjM2FiZTgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBsaXVob25ndCA8aG9uZ3Rhby5saXVAaW50ZWwuY29tPgpEYXRl OiBGcmksIDE4IERlYyAyMDIwIDE1OjU2OjA2ICswODAwClN1YmplY3Q6IFtQQVRDSF0gTG93ZXIg QVZYNTEyIHZlY3RvciBjb21wYXJpc29uIHRvIEFWWCB2ZXJzaW9uIHdoZW4gZGVzdCBpcwogdmVj dG9yLgoKZ2NjL0NoYW5nZUxvZzoKCglQUiB0YXJnZXQvOTY4OTEKCVBSIHRhcmdldC85ODM0OAoJ KiBjb25maWcvaTM4Ni9zc2UubWQgKFZJXzEyOF8yNTYpOiBOZXcgbW9kZSBpdGVyYXRvci4KCSgq YXZ4X2NtcDxtb2RlPjNfMSwgKmF2eF9jbXA8bW9kZT4zXzIsICphdnhfY21wPG1vZGU+M18zLAoJ ICphdnhfY21wPG1vZGU+M180LCAqYXZ4Ml9lcTxtb2RlPjMsICphdngyX3BjbXA8bW9kZT4zXzEs CgkgKmF2eDJfcGNtcDxtb2RlPjNfMiwgKmF2eDJfZ3Q8bW9kZT4zKTogTmV3CglkZWZpbmVfaW5z bl9hbmRfc3BsaXQgdG8gbG93ZXIgYXZ4NTEyIHZlY3RvciBjb21wYXJpc29uIHRvIGF2eAoJdmVy c2lvbiB3aGVuIGRlc3QgaXMgdmVjdG9yLgoJKCo8YXZ4NTEyPl9jbXA8bW9kZT4zLCo8YXZ4NTEy Pl9jbXA8bW9kZT4zLCo8YXZ4NTEyPl91Y21wPG1vZGU+Myk6CglkZWZpbmVfaW5zbl9hbmRfc3Bs aXQgZm9yIG5lZ2F0aW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdC4KCSogY29uZmlnL2kzODYvcHJl ZGljYXRlcy5tZCAoZmxvYXRfdmVjdG9yX2FsbF9vbmVzX29wZXJhbmQpOgoJTmV3IHByZWRpY2F0 ZS4KCSogY29uZmlnL2kzODYvaTM4Ni1leHBhbmQuYyAoaXg4Nl9leHBhbmRfc3NlX21vdmNjKTog VXNlCglnZW5lcmFsIE5PVCBvcGVyYXRvciB3aXRob3V0IFVOU1BFQ19NQVNLT1AuCgpnY2MvdGVz dHN1aXRlL0NoYW5nZUxvZzoKCglQUiB0YXJnZXQvOTY4OTEKCVBSIHRhcmdldC85ODM0OAoJKiBn Y2MudGFyZ2V0L2kzODYvYXZ4NTEyYnctcHI5Njg5MS0xLmM6IE5ldyB0ZXN0LgoJKiBnY2MudGFy Z2V0L2kzODYvYXZ4NTEyZi1wcjk2ODkxLTEuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4 Ni9hdng1MTJmLXByOTY4OTEtMi5jOiBOZXcgdGVzdC4KCSogZ2NjLnRhcmdldC9pMzg2L2F2eDUx MmYtcHI5Njg5MS0zLmM6IE5ldyB0ZXN0LgoJKiBnKysudGFyZ2V0L2kzODYvYXZ4NTEyZi1wcjk2 ODkxLTEuQzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9iaXR3aXNlX21hc2tfb3AtMy5j OiBBZGp1c3QgdGVzdGNhc2UuCi0tLQogZ2NjL2NvbmZpZy9pMzg2L2kzODYtZXhwYW5kLmMgICAg ICAgICAgICAgICAgIHwgIDE0ICstCiBnY2MvY29uZmlnL2kzODYvcHJlZGljYXRlcy5tZCAgICAg ICAgICAgICAgICAgfCAgNDcgKysrKwogZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZCAgICAgICAgICAg ICAgICAgICAgICAgIHwgMjYxICsrKysrKysrKysrKysrKysrLQogLi4uL2crKy50YXJnZXQvaTM4 Ni9hdng1MTJmLXByOTY4OTEtMS5DICAgICAgIHwgIDM3ICsrKwogLi4uL2djYy50YXJnZXQvaTM4 Ni9hdng1MTJidy1wcjk2ODkxLTEuYyAgICAgIHwgIDc1ICsrKysrCiAuLi4vZ2NjLnRhcmdldC9p Mzg2L2F2eDUxMmYtcHI5Njg5MS0xLmMgICAgICAgfCAgNDAgKysrCiAuLi4vZ2NjLnRhcmdldC9p Mzg2L2F2eDUxMmYtcHI5Njg5MS0yLmMgICAgICAgfCAgMzAgKysKIC4uLi9nY2MudGFyZ2V0L2kz ODYvYXZ4NTEyZi1wcjk2ODkxLTMuYyAgICAgICB8ICAzOSArKysKIC4uLi9nY2MudGFyZ2V0L2kz ODYvYml0d2lzZV9tYXNrX29wLTMuYyAgICAgICB8ICAgMSAtCiA5IGZpbGVzIGNoYW5nZWQsIDUz MSBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2crKy50YXJnZXQvaTM4Ni9hdng1MTJmLXByOTY4OTEtMS5DCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyYnctcHI5Njg5MS0x LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1 MTJmLXByOTY4OTEtMS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvYXZ4NTEyZi1wcjk2ODkxLTIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtcHI5Njg5MS0zLmMKCmRpZmYgLS1naXQgYS9n Y2MvY29uZmlnL2kzODYvaTM4Ni1leHBhbmQuYyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFu ZC5jCmluZGV4IDZlMDhmZDMyNzI2Li5iNGY4YjI3NTcxOCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9pMzg2L2kzODYtZXhwYW5kLmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtZXhwYW5kLmMK QEAgLTM1NjgsMTcgKzM1NjgsMTEgQEAgaXg4Nl9leHBhbmRfc3NlX21vdmNjIChydHggZGVzdCwg cnR4IGNtcCwgcnR4IG9wX3RydWUsIHJ0eCBvcF9mYWxzZSkKIAkJICA/IGZvcmNlX3JlZyAobW9k ZSwgb3BfZmFsc2UpIDogb3BfZmFsc2UpOwogICAgICAgaWYgKG9wX3RydWUgPT0gQ09OU1QwX1JU WCAobW9kZSkpCiAJewotCSAgcnR4ICgqZ2VuX25vdCkgKHJ0eCwgcnR4KTsKLQkgIHN3aXRjaCAo Y21wbW9kZSkKLQkgICAgewotCSAgICBjYXNlIEVfUUltb2RlOiBnZW5fbm90ID0gZ2VuX2tub3Rx aTsgYnJlYWs7Ci0JICAgIGNhc2UgRV9ISW1vZGU6IGdlbl9ub3QgPSBnZW5fa25vdGhpOyBicmVh azsKLQkgICAgY2FzZSBFX1NJbW9kZTogZ2VuX25vdCA9IGdlbl9rbm90c2k7IGJyZWFrOwotCSAg ICBjYXNlIEVfREltb2RlOiBnZW5fbm90ID0gZ2VuX2tub3RkaTsgYnJlYWs7Ci0JICAgIGRlZmF1 bHQ6IGdjY191bnJlYWNoYWJsZSAoKTsKLQkgICAgfQogCSAgcnR4IG4gPSBnZW5fcmVnX3J0eCAo Y21wbW9kZSk7Ci0JICBlbWl0X2luc24gKGdlbl9ub3QgKG4sIGNtcCkpOworCSAgaWYgKGNtcG1v ZGUgPT0gRV9ESW1vZGUgJiYgIVRBUkdFVF82NEJJVCkKKwkgICAgZW1pdF9pbnNuIChnZW5fa25v dGRpIChuLCBjbXApKTsKKwkgIGVsc2UKKwkgICAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAobiwg Z2VuX3J0eF9mbXRfZSAoTk9ULCBjbXBtb2RlLCBjbXApKSk7CiAJICBjbXAgPSBuOwogCSAgLyog UmV2ZXJzZSBvcF90cnVlIG9wX2ZhbHNlLiAgKi8KIAkgIHN0ZDo6c3dhcCAob3BfdHJ1ZSwgb3Bf ZmFsc2UpOwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3ByZWRpY2F0ZXMubWQgYi9nY2Mv Y29uZmlnL2kzODYvcHJlZGljYXRlcy5tZAppbmRleCBiZTVhYWE0ZDc2Zi4uMGJiMDcyOWU5MzMg MTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9wcmVkaWNhdGVzLm1kCisrKyBiL2djYy9jb25m aWcvaTM4Ni9wcmVkaWNhdGVzLm1kCkBAIC0xMDY5LDYgKzEwNjksNTMgQEAgKGRlZmluZV9wcmVk aWNhdGUgInplcm9fZXh0ZW5kZWRfc2NhbGFyX2xvYWRfb3BlcmFuZCIKICAgcmV0dXJuIHRydWU7 CiB9KQogCisvKiBSZXR1cm4gdHJ1ZSBpZiBvcGVyYW5kIGlzIGEgZmxvYXQgdmVjdG9yIGNvbnN0 YW50IHRoYXQgaXMgYWxsIG9uZXMuICovCisoZGVmaW5lX3ByZWRpY2F0ZSAiZmxvYXRfdmVjdG9y X2FsbF9vbmVzX29wZXJhbmQiCisgIChtYXRjaF9jb2RlICJjb25zdF92ZWN0b3IsbWVtIikKK3sK KyAgbW9kZSA9IEdFVF9NT0RFIChvcCk7CisgIGlmICghRkxPQVRfTU9ERV9QIChtb2RlKQorICAg ICAgfHwgKE1FTV9QIChvcCkKKwkgICYmICghU1lNQk9MX1JFRl9QIChYRVhQIChvcCwgMCkpCisJ ICAgICAgfHwgIUNPTlNUQU5UX1BPT0xfQUREUkVTU19QIChYRVhQIChvcCwgMCkpKSkpCisgICAg cmV0dXJuIGZhbHNlOworCisgIGlmIChNRU1fUCAob3ApKQorICAgIHsKKyAgICAgIG9wID0gZ2V0 X3Bvb2xfY29uc3RhbnQgKFhFWFAgKG9wLCAwKSk7CisgICAgICBpZiAoR0VUX0NPREUgKG9wKSAh PSBDT05TVF9WRUNUT1IpCisJcmV0dXJuIGZhbHNlOworCisgICAgICBpZiAoR0VUX01PREUgKG9w KSAhPSBtb2RlCisJICYmIElOVEVHUkFMX01PREVfUCAoR0VUX01PREUgKG9wKSkKKwkgJiYgb3Ag PT0gQ09OU1RNMV9SVFggKEdFVF9NT0RFIChvcCkpKQorCXJldHVybiB0cnVlOworICAgIH0KKwor ICBydHggZmlyc3QgPSBYVkVDRVhQIChvcCwgMCwgMCk7CisgIGZvciAoaW50IGkgPSAxOyBpICE9 IEdFVF9NT0RFX05VTklUUyAoR0VUX01PREUgKG9wKSk7IGkrKykKKyAgICB7CisgICAgICBydHgg dG1wID0gWFZFQ0VYUCAob3AsIDAsIGkpOworICAgICAgaWYgKCFydHhfZXF1YWxfcCAodG1wLCBm aXJzdCkpCisJcmV0dXJuIGZhbHNlOworICAgIH0KKyAgaWYgKEdFVF9NT0RFIChmaXJzdCkgPT0g RV9TRm1vZGUpCisgICAgeworICAgICAgbG9uZyBsOworICAgICAgUkVBTF9WQUxVRV9UT19UQVJH RVRfU0lOR0xFICgqQ09OU1RfRE9VQkxFX1JFQUxfVkFMVUUgKGZpcnN0KSwgbCk7CisgICAgICBy ZXR1cm4gKGwgJiAweGZmZmZmZmZmKSA9PSAweGZmZmZmZmZmOworICAgIH0KKyAgZWxzZSBpZiAo R0VUX01PREUgKGZpcnN0KSA9PSBFX0RGbW9kZSkKKyAgICB7CisgICAgICBsb25nIGxbMl07Cisg ICAgICBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ET1VCTEUgKCpDT05TVF9ET1VCTEVfUkVBTF9WQUxV RSAoZmlyc3QpLCBsKTsKKyAgICAgIHJldHVybiAoKGxbMF0gJiAweGZmZmZmZmZmKSA9PSAweGZm ZmZmZmZmCisJICAgICAmJiAobFsxXSAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpOworICAg IH0KKyAgZWxzZQorICAgIHJldHVybiBmYWxzZTsKK30pCisKIC8qIFJldHVybiB0cnVlIGlmIG9w ZXJhbmQgaXMgYSB2ZWN0b3IgY29uc3RhbnQgdGhhdCBpcyBhbGwgb25lcy4gKi8KIChkZWZpbmVf cHJlZGljYXRlICJ2ZWN0b3JfYWxsX29uZXNfb3BlcmFuZCIKICAgKGFuZCAobWF0Y2hfY29kZSAi Y29uc3RfdmVjdG9yIikKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9zc2UubWQgYi9nY2Mv Y29uZmlnL2kzODYvc3NlLm1kCmluZGV4IGQ4NDEwMzgwN2ZmLi5hN2FjOGU4YWU1ZSAxMDA2NDQK LS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZAorKysgYi9nY2MvY29uZmlnL2kzODYvc3NlLm1k CkBAIC02NDgsNiArNjQ4LDkgQEAgKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZJXzEyOCBbVjE2UUkg VjhISSBWNFNJIFYyREldKQogOzsgQWxsIDI1NmJpdCB2ZWN0b3IgaW50ZWdlciBtb2RlcwogKGRl ZmluZV9tb2RlX2l0ZXJhdG9yIFZJXzI1NiBbVjMyUUkgVjE2SEkgVjhTSSBWNERJXSkKIAorOzsg QWxsIDEyOCBhbmQgMjU2Yml0IHZlY3RvciBpbnRlZ2VyIG1vZGVzCisoZGVmaW5lX21vZGVfaXRl cmF0b3IgVklfMTI4XzI1NiBbVjE2UUkgVjhISSBWNFNJIFYyREkgVjMyUUkgVjE2SEkgVjhTSSBW NERJXSkKKwogOzsgVmFyaW91cyAxMjhiaXQgdmVjdG9yIGludGVnZXIgbW9kZSBjb21iaW5hdGlv bnMKIChkZWZpbmVfbW9kZV9pdGVyYXRvciBWSTEyXzEyOCBbVjE2UUkgVjhISV0pCiAoZGVmaW5l X21vZGVfaXRlcmF0b3IgVkkxNF8xMjggW1YxNlFJIFY0U0ldKQpAQCAtMjk2NSw2ICsyOTY4LDEw MiBAQCAoZGVmaW5lX2luc24gImF2eF9jbXA8bW9kZT4zIgogICAgKHNldF9hdHRyICJwcmVmaXgi ICJ2ZXgiKQogICAgKHNldF9hdHRyICJtb2RlIiAiPE1PREU+IildKQogCisoZGVmaW5lX2luc25f YW5kX3NwbGl0ICIqYXZ4X2NtcDxtb2RlPjNfMSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6PHNz ZWludHZlY21vZGU+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCSh2ZWNfbWVyZ2U6PHNzZWludHZl Y21vZGU+CisJICAobWF0Y2hfb3BlcmFuZDo8c3NlaW50dmVjbW9kZT4gMSAidmVjdG9yX2FsbF9v bmVzX29wZXJhbmQiKQorCSAgKG1hdGNoX29wZXJhbmQ6PHNzZWludHZlY21vZGU+IDIgImNvbnN0 MF9vcGVyYW5kIikKKwkgICh1bnNwZWM6PGF2eDUxMmZtYXNrbW9kZT4KKwkgICAgWyhtYXRjaF9v cGVyYW5kOlZGXzEyOF8yNTYgMyAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgICAobWF0Y2hfb3Bl cmFuZDpWRl8xMjhfMjU2IDQgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkgICAgIChtYXRjaF9v cGVyYW5kOlNJIDUgImNvbnN0XzBfdG9fMzFfb3BlcmFuZCIpXQorCSAgICAgVU5TUEVDX1BDTVAp KSldCisgICJUQVJHRVRfQVZYNTEyVkwgJiYgaXg4Nl9wcmVfcmVsb2FkX3NwbGl0ICgpIgorICAi IyIKKyAgIiYmIDEiCisgIFsoc2V0IChtYXRjaF9kdXAgNikKKwkodW5zcGVjOlZGXzEyOF8yNTYK KwkgIFsobWF0Y2hfZHVwIDMpCisJICAgKG1hdGNoX2R1cCA0KQorCSAgIChtYXRjaF9kdXAgNSld CisJICBVTlNQRUNfUENNUCkpCisgICAoc2V0IChtYXRjaF9kdXAgMCkgKG1hdGNoX2R1cCA3KSld Cit7CisgIG9wZXJhbmRzWzZdID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUpOworICBvcGVyYW5k c1s3XQorICAgID0gbG93cGFydF9zdWJyZWcgKEdFVF9NT0RFIChvcGVyYW5kc1swXSksIG9wZXJh bmRzWzZdLCA8TU9ERT5tb2RlKTsKK30pCisKKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIiphdnhf Y21wPG1vZGU+M18yIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8c3NlaW50dmVjbW9kZT4gMCAi cmVnaXN0ZXJfb3BlcmFuZCIpCisJKHZlY19tZXJnZTo8c3NlaW50dmVjbW9kZT4KKwkgIChtYXRj aF9vcGVyYW5kOjxzc2VpbnR2ZWNtb2RlPiAxICJ2ZWN0b3JfYWxsX29uZXNfb3BlcmFuZCIpCisJ ICAobWF0Y2hfb3BlcmFuZDo8c3NlaW50dmVjbW9kZT4gMiAiY29uc3QwX29wZXJhbmQiKQorCSAg KG5vdDo8YXZ4NTEyZm1hc2ttb2RlPgorCSAgICAodW5zcGVjOjxhdng1MTJmbWFza21vZGU+CisJ ICAgICAgWyhtYXRjaF9vcGVyYW5kOlZGXzEyOF8yNTYgMyAicmVnaXN0ZXJfb3BlcmFuZCIpCisJ ICAgICAgIChtYXRjaF9vcGVyYW5kOlZGXzEyOF8yNTYgNCAibm9uaW1tZWRpYXRlX29wZXJhbmQi KQorCSAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSA1ICJjb25zdF8wX3RvXzMxX29wZXJhbmQiKV0K KwkgICAgICAgVU5TUEVDX1BDTVApKSkpXQorICAiVEFSR0VUX0FWWDUxMlZMICYmIGl4ODZfcHJl X3JlbG9hZF9zcGxpdCAoKSIKKyAgIiMiCisgICImJiAxIgorICBbKHNldCAobWF0Y2hfZHVwIDYp CisJKHVuc3BlYzpWRl8xMjhfMjU2CisJICBbKG1hdGNoX2R1cCAzKQorCSAgIChtYXRjaF9kdXAg NCkKKwkgICAobWF0Y2hfZHVwIDUpXQorCSAgVU5TUEVDX1BDTVApKQorICAgKHNldCAobWF0Y2hf ZHVwIDApIChtYXRjaF9kdXAgNykpXQoreworICBvcGVyYW5kc1s1XSA9IEdFTl9JTlQgKElOVFZB TCAob3BlcmFuZHNbNV0pIF4gNCk7CisgIG9wZXJhbmRzWzZdID0gZ2VuX3JlZ19ydHggKDxNT0RF Pm1vZGUpOworICBvcGVyYW5kc1s3XQorICAgID0gbG93cGFydF9zdWJyZWcgKEdFVF9NT0RFIChv cGVyYW5kc1swXSksIG9wZXJhbmRzWzZdLCA8TU9ERT5tb2RlKTsKK30pCisKKyhkZWZpbmVfaW5z bl9hbmRfc3BsaXQgIiphdnhfY21wPG1vZGU+M18zIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpW Rl8xMjhfMjU2IDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCSh2ZWNfbWVyZ2U6VkZfMTI4XzI1Ngor CSAgKG1hdGNoX29wZXJhbmQ6VkZfMTI4XzI1NiAxICJmbG9hdF92ZWN0b3JfYWxsX29uZXNfb3Bl cmFuZCIpCisJICAobWF0Y2hfb3BlcmFuZDpWRl8xMjhfMjU2IDIgImNvbnN0MF9vcGVyYW5kIikK KwkgICh1bnNwZWM6PGF2eDUxMmZtYXNrbW9kZT4KKwkgICAgWyhtYXRjaF9vcGVyYW5kOlZGXzEy OF8yNTYgMyAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgICAobWF0Y2hfb3BlcmFuZDpWRl8xMjhf MjU2IDQgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkgICAgIChtYXRjaF9vcGVyYW5kOlNJIDUg ImNvbnN0XzBfdG9fMzFfb3BlcmFuZCIpXQorCSAgICAgVU5TUEVDX1BDTVApKSldCisgICJUQVJH RVRfQVZYNTEyVkwgJiYgaXg4Nl9wcmVfcmVsb2FkX3NwbGl0ICgpIgorICAiIyIKKyAgIiYmIDEi CisgIFsoc2V0IChtYXRjaF9kdXAgMCkKKwkodW5zcGVjOlZGXzEyOF8yNTYKKwkgIFsobWF0Y2hf ZHVwIDMpCisJICAgKG1hdGNoX2R1cCA0KQorCSAgIChtYXRjaF9kdXAgNSldCisJICBVTlNQRUNf UENNUCkpXSkKKworKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmF2eF9jbXA8bW9kZT4zXzQiCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlZGXzEyOF8yNTYgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJ KHZlY19tZXJnZTpWRl8xMjhfMjU2CisJICAobWF0Y2hfb3BlcmFuZDpWRl8xMjhfMjU2IDEgImZs b2F0X3ZlY3Rvcl9hbGxfb25lc19vcGVyYW5kIikKKwkgIChtYXRjaF9vcGVyYW5kOlZGXzEyOF8y NTYgMiAiY29uc3QwX29wZXJhbmQiKQorCSAgKG5vdDo8YXZ4NTEyZm1hc2ttb2RlPgorCSAgICAo dW5zcGVjOjxhdng1MTJmbWFza21vZGU+CisJICAgICAgWyhtYXRjaF9vcGVyYW5kOlZGXzEyOF8y NTYgMyAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgICAgIChtYXRjaF9vcGVyYW5kOlZGXzEyOF8y NTYgNCAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQorCSAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSA1 ICJjb25zdF8wX3RvXzMxX29wZXJhbmQiKV0KKwkgICAgICAgVU5TUEVDX1BDTVApKSkpXQorICAi VEFSR0VUX0FWWDUxMlZMICYmIGl4ODZfcHJlX3JlbG9hZF9zcGxpdCAoKSIKKyAgIiMiCisgICIm JiAxIgorICBbKHNldCAobWF0Y2hfZHVwIDApCisJKHVuc3BlYzpWRl8xMjhfMjU2CisJICBbKG1h dGNoX2R1cCAzKQorCSAgIChtYXRjaF9kdXAgNCkKKwkgICAobWF0Y2hfZHVwIDUpXQorCSAgVU5T UEVDX1BDTVApKV0KKyAgIm9wZXJhbmRzWzVdID0gR0VOX0lOVCAoSU5UVkFMIChvcGVyYW5kc1s1 XSkgXiA0KTsiKQorCiAoZGVmaW5lX2luc24gImF2eF92bWNtcDxtb2RlPjMiCiAgIFsoc2V0ICht YXRjaF9vcGVyYW5kOlZGXzEyOCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXgiKQogCSh2ZWNfbWVy Z2U6VkZfMTI4CkBAIC0zMDU2LDYgKzMxNTUsMjUgQEAgKGRlZmluZV9pbnNuICI8YXZ4NTEyPl9j bXA8bW9kZT4zPG1hc2tfc2NhbGFyX21lcmdlX25hbWU+PHJvdW5kX3NhZW9ubHlfbmFtZT4iCiAg ICAoc2V0X2F0dHIgInByZWZpeCIgImV2ZXgiKQogICAgKHNldF9hdHRyICJtb2RlIiAiPHNzZWlu c25tb2RlPiIpXSkKIAorKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKjxhdng1MTI+X2NtcDxtb2Rl PjMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxhdng1MTJmbWFza21vZGU+IDAgInJlZ2lzdGVy X29wZXJhbmQiKQorCShub3Q6PGF2eDUxMmZtYXNrbW9kZT4KKwkgICh1bnNwZWM6PGF2eDUxMmZt YXNrbW9kZT4KKwkgICAgWyhtYXRjaF9vcGVyYW5kOlY0OF9BVlg1MTJWTCAxICJyZWdpc3Rlcl9v cGVyYW5kIikKKwkgICAgIChtYXRjaF9vcGVyYW5kOlY0OF9BVlg1MTJWTCAyICJub25pbW1lZGlh dGVfb3BlcmFuZCIpCisJICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICI8Y21wX2ltbV9wcmVkaWNh dGU+IiAibiIpXQorCSAgICBVTlNQRUNfUENNUCkpKV0KKyAgIlRBUkdFVF9BVlg1MTJGICYmIGl4 ODZfcHJlX3JlbG9hZF9zcGxpdCAoKSIKKyAgIiMiCisgICImJiAxIgorICBbKHNldCAobWF0Y2hf ZHVwIDApCisgIAkodW5zcGVjOjxhdng1MTJmbWFza21vZGU+CisJICBbKG1hdGNoX2R1cCAxKQor CSAgIChtYXRjaF9kdXAgMikKKwkgICAobWF0Y2hfZHVwIDQpXQorCSAgIFVOU1BFQ19QQ01QKSld CisgICJvcGVyYW5kc1s0XSA9IEdFTl9JTlQgKElOVFZBTCAob3BlcmFuZHNbM10pIF4gNCk7IikK KwogKGRlZmluZV9pbnNuICI8YXZ4NTEyPl9jbXA8bW9kZT4zPG1hc2tfc2NhbGFyX21lcmdlX25h bWU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8YXZ4NTEyZm1hc2ttb2RlPiAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPWsiKQogCSh1bnNwZWM6PGF2eDUxMmZtYXNrbW9kZT4KQEAgLTMwNzAsNiAr MzE4OCwyOCBAQCAoZGVmaW5lX2luc24gIjxhdng1MTI+X2NtcDxtb2RlPjM8bWFza19zY2FsYXJf bWVyZ2VfbmFtZT4iCiAgICAoc2V0X2F0dHIgInByZWZpeCIgImV2ZXgiKQogICAgKHNldF9hdHRy ICJtb2RlIiAiPHNzZWluc25tb2RlPiIpXSkKIAorKGRlZmluZV9pbnRfaXRlcmF0b3IgVU5TUEVD X1BDTVBfSVRFUgorICBbVU5TUEVDX1BDTVAgVU5TUEVDX1VOU0lHTkVEX1BDTVBdKQorCisoZGVm aW5lX2luc25fYW5kX3NwbGl0ICIqPGF2eDUxMj5fY21wPG1vZGU+MyIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6PGF2eDUxMmZtYXNrbW9kZT4gMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKG5vdDo8 YXZ4NTEyZm1hc2ttb2RlPgorCSAgKHVuc3BlYzo8YXZ4NTEyZm1hc2ttb2RlPgorCSAgICBbKG1h dGNoX29wZXJhbmQ6VkkxMl9BVlg1MTJWTCAxICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkgICAgICht YXRjaF9vcGVyYW5kOlZJMTJfQVZYNTEyVkwgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQorCSAg ICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiPGNtcF9pbW1fcHJlZGljYXRlPiIpXQorCSAgICBVTlNQ RUNfUENNUF9JVEVSKSkpXQorICAiVEFSR0VUX0FWWDUxMkJXICYmIGl4ODZfcHJlX3JlbG9hZF9z cGxpdCAoKSIKKyAgIiMiCisgICImJiAxIgorICBbKHNldCAobWF0Y2hfZHVwIDApCisJKHVuc3Bl Yzo8YXZ4NTEyZm1hc2ttb2RlPgorCSAgWyhtYXRjaF9kdXAgMSkKKwkgICAobWF0Y2hfZHVwIDIp CisJICAgKG1hdGNoX2R1cCA0KV0KKwkgICBVTlNQRUNfUENNUF9JVEVSKSldCisgICJvcGVyYW5k c1s0XSA9IEdFTl9JTlQgKElOVFZBTCAob3BlcmFuZHNbM10pIF4gNCk7IikKKwogKGRlZmluZV9p bnNuICI8YXZ4NTEyPl91Y21wPG1vZGU+MzxtYXNrX3NjYWxhcl9tZXJnZV9uYW1lPiIKICAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6PGF2eDUxMmZtYXNrbW9kZT4gMCAicmVnaXN0ZXJfb3BlcmFuZCIg Ij1rIikKIAkodW5zcGVjOjxhdng1MTJmbWFza21vZGU+CkBAIC0zMDk4LDggKzMyMzgsMjQgQEAg KGRlZmluZV9pbnNuICI8YXZ4NTEyPl91Y21wPG1vZGU+MzxtYXNrX3NjYWxhcl9tZXJnZV9uYW1l PiIKICAgIChzZXRfYXR0ciAicHJlZml4IiAiZXZleCIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICI8 c3NlaW5zbm1vZGU+IildKQogCi0oZGVmaW5lX2ludF9pdGVyYXRvciBVTlNQRUNfUENNUF9JVEVS Ci0gIFtVTlNQRUNfUENNUCBVTlNQRUNfVU5TSUdORURfUENNUF0pCisoZGVmaW5lX2luc25fYW5k X3NwbGl0ICIqPGF2eDUxMj5fdWNtcDxtb2RlPjMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxh dng1MTJmbWFza21vZGU+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCShub3Q6PGF2eDUxMmZtYXNr bW9kZT4KKwkgICh1bnNwZWM6PGF2eDUxMmZtYXNrbW9kZT4KKwkgICAgWyhtYXRjaF9vcGVyYW5k OlZJNDhfQVZYNTEyVkwgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgICAobWF0Y2hfb3BlcmFu ZDpWSTQ4X0FWWDUxMlZMIDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkgICAgIChtYXRjaF9v cGVyYW5kOlNJIDMgImNvbnN0XzBfdG9fN19vcGVyYW5kIildCisJICAgIFVOU1BFQ19VTlNJR05F RF9QQ01QKSkpXQorICAiVEFSR0VUX0FWWDUxMkYgJiYgaXg4Nl9wcmVfcmVsb2FkX3NwbGl0ICgp IgorICAiIyIKKyAgIiYmIDEiCisgIFsoc2V0IChtYXRjaF9kdXAgMCkKKwkodW5zcGVjOjxhdng1 MTJmbWFza21vZGU+CisJICBbKG1hdGNoX2R1cCAxKQorCSAgIChtYXRjaF9kdXAgMikKKwkgICAo bWF0Y2hfZHVwIDQpXQorCSAgIFVOU1BFQ19VTlNJR05FRF9QQ01QKSldCisgICJvcGVyYW5kc1s0 XSA9IEdFTl9JTlQgKElOVFZBTCAob3BlcmFuZHNbM10pIF4gNCk7IikKIAogKGRlZmluZV9pbnRf YXR0ciBwY21wX3NpZ25lZF9tYXNrCiAgIFsoVU5TUEVDX1BDTVAgIjMiKSAoVU5TUEVDX1VOU0lH TkVEX1BDTVAgIjEiKV0pCkBAIC0xMjY5OSw2ICsxMjg1NSw4OSBAQCAoZGVmaW5lX2luc24gIiph dngyX2VxPG1vZGU+MyIKICAgIChzZXRfYXR0ciAicHJlZml4IiAidmV4IikKICAgIChzZXRfYXR0 ciAibW9kZSIgIk9JIildKQogCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqYXZ4Ml9lcTxtb2Rl PjMiCisgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VklfMTI4XzI1NiAgMCAicmVnaXN0ZXJfb3BlcmFu ZCIpCisJKHZlY19tZXJnZTpWSV8xMjhfMjU2CisJICAobWF0Y2hfb3BlcmFuZDpWSV8xMjhfMjU2 IDEgInZlY3Rvcl9hbGxfb25lc19vcGVyYW5kIikKKwkgIChtYXRjaF9vcGVyYW5kOlZJXzEyOF8y NTYgMiAiY29uc3QwX29wZXJhbmQiKQorCSAgKHVuc3BlYzo8YXZ4NTEyZm1hc2ttb2RlPgorCSAg ICBbKG1hdGNoX29wZXJhbmQ6VklfMTI4XzI1NiAzICJub25pbW1lZGlhdGVfb3BlcmFuZCIpCisJ ICAgICAobWF0Y2hfb3BlcmFuZDpWSV8xMjhfMjU2IDQgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIild CisJICAgICBVTlNQRUNfTUFTS0VEX0VRKSkpXQorICAiVEFSR0VUX0FWWDUxMlZMICYmIGl4ODZf cHJlX3JlbG9hZF9zcGxpdCAoKQorICAmJiAhKE1FTV9QIChvcGVyYW5kc1szXSkgJiYgTUVNX1Ag KG9wZXJhbmRzWzRdKSkiCisgICIjIgorICAiJiYgMSIKKyAgWyhzZXQgKG1hdGNoX2R1cCAwKQor CShlcTpWSV8xMjhfMjU2CisJICAgKG1hdGNoX2R1cCAzKQorCSAgIChtYXRjaF9kdXAgNCkpKV0p CisKKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIiphdngyX3BjbXA8bW9kZT4zXzEiCisgWyhzZXQg KG1hdGNoX29wZXJhbmQ6VklfMTI4XzI1NiAgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKHZlY19t ZXJnZTpWSV8xMjhfMjU2CisJICAobWF0Y2hfb3BlcmFuZDpWSV8xMjhfMjU2IDEgInZlY3Rvcl9h bGxfb25lc19vcGVyYW5kIikKKwkgIChtYXRjaF9vcGVyYW5kOlZJXzEyOF8yNTYgMiAiY29uc3Qw X29wZXJhbmQiKQorCSAgKHVuc3BlYzo8YXZ4NTEyZm1hc2ttb2RlPgorCSAgICBbKG1hdGNoX29w ZXJhbmQ6VklfMTI4XzI1NiAzICJub25pbW1lZGlhdGVfb3BlcmFuZCIpCisJICAgICAobWF0Y2hf b3BlcmFuZDpWSV8xMjhfMjU2IDQgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkgICAgIChtYXRj aF9vcGVyYW5kOlNJIDUgImNvbnN0XzBfdG9fN19vcGVyYW5kIildCisJICAgICBVTlNQRUNfUENN UCkpKV0KKyAgIlRBUkdFVF9BVlg1MTJWTCAmJiBpeDg2X3ByZV9yZWxvYWRfc3BsaXQgKCkKKyAg LyogRVEgaXMgY29tbXV0YXRpdmUuICAqLworICAgJiYgKChJTlRWQUwgKG9wZXJhbmRzWzVdKSA9 PSAwCisJJiYgIShNRU1fUCAob3BlcmFuZHNbM10pICYmIE1FTV9QIChvcGVyYW5kc1s0XSkpKQor CSAgLyogTkxFIGFrYSBHVCwgMyBtdXN0IGJlIHJlZ2lzdGVyLiAgKi8KKyAgICAgICB8fCAoSU5U VkFMIChvcGVyYW5kc1s1XSkgPT0gNgorCSAgICYmICFNRU1fUCAob3BlcmFuZHNbM10pKQorCSAg LyogTFQsIDQgbXVzdCBiZSByZWdpc3RlciBhbmQgd2Ugc3dhcCBvcGVyYW5kcy4gICovCisgICAg ICAgfHwgKElOVFZBTCAob3BlcmFuZHNbNV0pID09IDEKKwkgICAmJiAhTUVNX1AgKG9wZXJhbmRz WzRdKSkpIgorICAiIyIKKyAgIiYmIDEiCisgIFsoY29uc3RfaW50IDApXQoreworICBpZiAoSU5U VkFMIChvcGVyYW5kc1s1XSkgPT0gMSkKKyAgICBzdGQ6OnN3YXAgKG9wZXJhbmRzWzNdLCBvcGVy YW5kc1s0XSk7CisgIGVudW0gcnR4X2NvZGUgY29kZSA9IElOVFZBTCAob3BlcmFuZHNbNV0pID8g R1QgOiBFUTsKKyAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCBnZW5fcnR4X2ZtdF9lZSAo Y29kZSwgPE1PREU+bW9kZSwKKwkJCQkJICAgICAgIG9wZXJhbmRzWzNdLCBvcGVyYW5kc1s0XSkp OworICBET05FOworfSkKKworKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmF2eDJfcGNtcDxtb2Rl PjNfMiIKKyBbKHNldCAobWF0Y2hfb3BlcmFuZDpWSV8xMjhfMjU2ICAwICJyZWdpc3Rlcl9vcGVy YW5kIikKKwkodmVjX21lcmdlOlZJXzEyOF8yNTYKKwkgIChtYXRjaF9vcGVyYW5kOlZJXzEyOF8y NTYgMSAidmVjdG9yX2FsbF9vbmVzX29wZXJhbmQiKQorCSAgKG1hdGNoX29wZXJhbmQ6VklfMTI4 XzI1NiAyICJjb25zdDBfb3BlcmFuZCIpCisJICAobm90Ojxhdng1MTJmbWFza21vZGU+CisJICAg ICh1bnNwZWM6PGF2eDUxMmZtYXNrbW9kZT4KKwkgICAgICBbKG1hdGNoX29wZXJhbmQ6VklfMTI4 XzI1NiAzICJub25pbW1lZGlhdGVfb3BlcmFuZCIpCisJICAgICAgIChtYXRjaF9vcGVyYW5kOlZJ XzEyOF8yNTYgNCAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQorCSAgICAgICAobWF0Y2hfb3BlcmFu ZDpTSSA1ICJjb25zdF8wX3RvXzdfb3BlcmFuZCIpXQorCSAgICAgICBVTlNQRUNfUENNUCkpKSld CisgICJUQVJHRVRfQVZYNTEyVkwgJiYgaXg4Nl9wcmVfcmVsb2FkX3NwbGl0ICgpCisgICAvKiBO RSBpcyBjb21tdXRhdGl2ZS4gICovCisgICAmJiAoKElOVFZBTCAob3BlcmFuZHNbNV0pID09IDQK KwkmJiAhKE1FTV9QIChvcGVyYW5kc1szXSkgJiYgTUVNX1AgKG9wZXJhbmRzWzRdKSkpCisJICAv KiBMRSwgMyBtdXN0IGJlIHJlZ2lzdGVyLiAgKi8KKyAgICAgICB8fCAoSU5UVkFMIChvcGVyYW5k c1s1XSkgPT0gMgorCSAgICYmICFNRU1fUCAob3BlcmFuZHNbM10pKQorCSAgLyogTkxUIGFrYSBH RSwgNCBtdXN0IGJlIHJlZ2lzdGVyIGFuZCB3ZSBzd2FwIG9wZXJhbmRzLiAgKi8KKyAgICAgICB8 fCAoSU5UVkFMIChvcGVyYW5kc1s1XSkgPT0gNQorCSAgICYmICFNRU1fUCAob3BlcmFuZHNbNF0p KSkiCisgICIjIgorICAiJiYgMSIKKyAgWyhjb25zdF9pbnQgMCldCit7CisgIGlmIChJTlRWQUwg KG9wZXJhbmRzWzVdKSA9PSA1KQorICAgIHN0ZDo6c3dhcCAob3BlcmFuZHNbM10sIG9wZXJhbmRz WzRdKTsKKyAgZW51bSBydHhfY29kZSBjb2RlID0gSU5UVkFMIChvcGVyYW5kc1s1XSkgIT0gNCA/ IEdUIDogRVE7CisgIGVtaXRfbW92ZV9pbnNuIChvcGVyYW5kc1swXSwgZ2VuX3J0eF9mbXRfZWUg KGNvZGUsIDxNT0RFPm1vZGUsCisJCQkJCSAgICAgICBvcGVyYW5kc1szXSwgb3BlcmFuZHNbNF0p KTsKKyAgRE9ORTsKK30pCisKIChkZWZpbmVfZXhwYW5kICI8YXZ4NTEyPl9lcTxtb2RlPjM8bWFz a19zY2FsYXJfbWVyZ2VfbmFtZT4iCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxhdng1MTJmbWFz a21vZGU+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQogCSh1bnNwZWM6PGF2eDUxMmZtYXNrbW9kZT4K QEAgLTEyODIzLDYgKzEzMDYyLDI0IEBAIChkZWZpbmVfaW5zbiAiYXZ4Ml9ndDxtb2RlPjMiCiAg ICAoc2V0X2F0dHIgInByZWZpeCIgInZleCIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJPSSIpXSkK IAorKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmF2eDJfZ3Q8bW9kZT4zIgorIFsoc2V0IChtYXRj aF9vcGVyYW5kOlZJXzEyOF8yNTYgIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCSh2ZWNfbWVyZ2U6 VklfMTI4XzI1NgorCSAgKG1hdGNoX29wZXJhbmQ6VklfMTI4XzI1NiAxICJ2ZWN0b3JfYWxsX29u ZXNfb3BlcmFuZCIpCisJICAobWF0Y2hfb3BlcmFuZDpWSV8xMjhfMjU2IDIgImNvbnN0MF9vcGVy YW5kIikKKwkgICh1bnNwZWM6PGF2eDUxMmZtYXNrbW9kZT4KKwkgICAgWyhtYXRjaF9vcGVyYW5k OlZJXzEyOF8yNTYgMyAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgICAobWF0Y2hfb3BlcmFuZDpW SV8xMjhfMjU2IDQgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIildCisJICAgICBVTlNQRUNfTUFTS0VE X0dUKSkpXQorICAiVEFSR0VUX0FWWDUxMlZMCisgICYmIGl4ODZfcHJlX3JlbG9hZF9zcGxpdCAo KSIKKyAgIiMiCisgICImJiAxIgorICBbKHNldCAobWF0Y2hfZHVwIDApCisJKGd0OlZJXzEyOF8y NTYKKwkgICAobWF0Y2hfZHVwIDMpCisJICAgKG1hdGNoX2R1cCA0KSkpXSkKKwogKGRlZmluZV9p bnNuICI8YXZ4NTEyPl9ndDxtb2RlPjM8bWFza19zY2FsYXJfbWVyZ2VfbmFtZT4iCiAgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOjxhdng1MTJmbWFza21vZGU+IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 ayIpCiAJKHVuc3BlYzo8YXZ4NTEyZm1hc2ttb2RlPgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nKysudGFyZ2V0L2kzODYvYXZ4NTEyZi1wcjk2ODkxLTEuQyBiL2djYy90ZXN0c3VpdGUvZysr LnRhcmdldC9pMzg2L2F2eDUxMmYtcHI5Njg5MS0xLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjk2OWEwODViOTAwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nKysudGFyZ2V0L2kzODYvYXZ4NTEyZi1wcjk2ODkxLTEuQwpAQCAtMCwwICsxLDM3IEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItbWF2eDUxMnZsIC1P MiIgfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiJWtcWzAtN1xdIiB9 IH0gKi8KKwordHlwZWRlZiBmbG9hdCB2NHNmIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAo MTYpKSk7Cit0eXBlZGVmIGZsb2F0IHY4c2YgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgz MikpKTsKK3R5cGVkZWYgZG91YmxlIHYyZGYgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgx NikpKTsKK3R5cGVkZWYgZG91YmxlIHY0ZGYgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgz MikpKTsKKworCit2NHNmCitmb29fdjRzZiAodjRzZiB4KQoreworICBjb25zdCB1bmlvbiBVIHsg dW5zaWduZWQgdTsgZmxvYXQgZjsgfSB1ID0geyAtMVUgfTsKKyAgcmV0dXJuIHggPiAwLjBmID8g dS5mIDogMC4wZjsKK30KKwordjhzZgorZm9vX3Y4c2YgKHY4c2YgeCkKK3sKKyAgY29uc3QgdW5p b24gVSB7IHVuc2lnbmVkIHU7IGZsb2F0IGY7IH0gdSA9IHsgLTFVIH07CisgIHJldHVybiB4ID4g MC4wZiA/IHUuZiA6IDAuMGY7Cit9CisKK3YyZGYKK2Zvb192MmRmICh2MmRmIHgpCit7CisgIGNv bnN0IHVuaW9uIFUgeyB1bnNpZ25lZCBsb25nIGxvbmcgdTsgZG91YmxlIGRmOyB9IHUgPSB7IC0x VUxMIH07CisgIHJldHVybiB4ID4gMC4wID8gdS5kZiA6IDAuMDsKK30KKwordjRkZgorZm9vX3Y0 ZGYgKHY0ZGYgeCkKK3sKKyAgY29uc3QgdW5pb24gVSB7IHVuc2lnbmVkIGxvbmcgbG9uZyB1OyBk b3VibGUgZGY7IH0gdSA9IHsgLTFVTEwgfTsKKyAgcmV0dXJuIHggPiAwLjAgPyB1LmRmIDogMC4w OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyYnct cHI5Njg5MS0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJidy1wcjk2 ODkxLTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDg5OWNlYmQw ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1 MTJidy1wcjk2ODkxLTEuYwpAQCAtMCwwICsxLDc1IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LworLyogeyBkZy1vcHRpb25zICItbWF2eDUxMmJ3IC1tYXZ4NTEydmwgLU8yIiB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIla1xbMC03XF0iIH0gfSAqLworCit0eXBl ZGVmIGNoYXIgdjE2cWkgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKTsKK3R5cGVk ZWYgY2hhciB2MzJxaSBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDMyKSkpOwordHlwZWRl ZiBzaG9ydCB2OGhpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7Cit0eXBlZGVm IHNob3J0IHYxNmhpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMzIpKSk7Cit0eXBlZGVm IGludCB2NHNpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7Cit0eXBlZGVmIGlu dCB2OHNpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMzIpKSk7Cit0eXBlZGVmIGxvbmcg bG9uZyB2MmRpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7Cit0eXBlZGVmIGxv bmcgbG9uZyB2NGRpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMzIpKSk7CisKKyNkZWZp bmUgRk9PKFZUWVBFLCBPUE5BTUUsIE9QKQkJCVwKKyAgVlRZUEUJCQkJCQlcCisgIGZvb18jI1ZU WVBFIyNfIyNPUE5BTUUgKFZUWVBFIGEsIFZUWVBFIGIpCVwKKyAgewkJCQkJCVwKKyAgICByZXR1 cm4gYSBPUCBiOwkJCQlcCisgIH0JCQkJCQlcCisKKyNkZWZpbmUgRk9PMShWVFlQRSwgT1BOQU1F LCBPUCkJCQlcCisgIFZUWVBFCQkJCQkJXAorICBmb28xXyMjVlRZUEUjI18jI09QTkFNRSAoVlRZ UEUgYSwgVlRZUEUgYikJXAorICB7CQkJCQkJXAorICAgIHJldHVybiB+KGEgT1AgYik7CQkJCVwK KyAgfQkJCQkJCVwKKworRk9PICh2MTZxaSwgZXEsID09KQorRk9PMSAodjE2cWksIG5lcSwgIT0p CitGT08gKHYxNnFpLCBndCwgPikKK0ZPTyAodjE2cWksIGx0LCA8KQorRk9PMSAodjE2cWksIGxl LCA8PSkKK0ZPTzEgKHYxNnFpLCBnZSwgPj0pCitGT08gKHYzMnFpLCBlcSwgPT0pCitGT08xICh2 MzJxaSwgbmVxLCAhPSkKK0ZPTyAodjMycWksIGd0LCA+KQorRk9PICh2MzJxaSwgbHQsIDwpCitG T08xICh2MzJxaSwgbGUsIDw9KQorRk9PMSAodjMycWksIGdlLCA+PSkKK0ZPTyAodjhoaSwgZXEs ID09KQorRk9PMSAodjhoaSwgbmVxLCAhPSkKK0ZPTyAodjhoaSwgZ3QsID4pCitGT08gKHY4aGks IGx0LCA8KQorRk9PMSAodjhoaSwgbGUsIDw9KQorRk9PMSAodjhoaSwgZ2UsID49KQorRk9PICh2 MTZoaSwgZXEsID09KQorRk9PMSAodjE2aGksIG5lcSwgIT0pCitGT08gKHYxNmhpLCBndCwgPikK K0ZPTyAodjE2aGksIGx0LCA8KQorRk9PMSAodjE2aGksIGxlLCA8PSkKK0ZPTzEgKHYxNmhpLCBn ZSwgPj0pCitGT08gKHY0c2ksIGVxLCA9PSkKK0ZPTzEgKHY0c2ksIG5lcSwgIT0pCitGT08gKHY0 c2ksIGd0LCA+KQorRk9PICh2NHNpLCBsdCwgPCkKK0ZPTzEgKHY0c2ksIGxlLCA8PSkKK0ZPTzEg KHY0c2ksIGdlLCA+PSkKK0ZPTyAodjhzaSwgZXEsID09KQorRk9PMSAodjhzaSwgbmVxLCAhPSkK K0ZPTyAodjhzaSwgZ3QsID4pCitGT08gKHY4c2ksIGx0LCA8KQorRk9PMSAodjhzaSwgbGUsIDw9 KQorRk9PMSAodjhzaSwgZ2UsID49KQorRk9PICh2MmRpLCBlcSwgPT0pCitGT08xICh2MmRpLCBu ZXEsICE9KQorRk9PICh2MmRpLCBndCwgPikKK0ZPTyAodjJkaSwgbHQsIDwpCitGT08xICh2MmRp LCBsZSwgPD0pCitGT08xICh2MmRpLCBnZSwgPj0pCitGT08gKHY0ZGksIGVxLCA9PSkKK0ZPTzEg KHY0ZGksIG5lcSwgIT0pCitGT08gKHY0ZGksIGd0LCA+KQorRk9PICh2NGRpLCBsdCwgPikKK0ZP TzEgKHY0ZGksIGxlLCA8PSkKK0ZPTzEgKHY0ZGksIGdlLCA+PSkKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtcHI5Njg5MS0xLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXByOTY4OTEtMS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OGJhOTQzZTE1MQotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtcHI5Njg5MS0xLmMKQEAgLTAsMCAr MSw0MCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hdng1 MTJ2bCAtTzIiIH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIiVrXFsw LTdcXSIgfSB9ICovCisKK3R5cGVkZWYgZmxvYXQgdjRzZiBfX2F0dHJpYnV0ZV9fICgodmVjdG9y X3NpemUgKDE2KSkpOwordHlwZWRlZiBmbG9hdCB2OHNmIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jf c2l6ZSAoMzIpKSk7Cit0eXBlZGVmIGRvdWJsZSB2MmRmIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jf c2l6ZSAoMTYpKSk7Cit0eXBlZGVmIGRvdWJsZSB2NGRmIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jf c2l6ZSAoMzIpKSk7CisKKyNkZWZpbmUgRk9PKFZUWVBFLCBPUE5BTUUsIE9QKQkJCVwKKyAgVlRZ UEUJCQkJCQlcCisgIGZvb18jI1ZUWVBFIyNfIyNPUE5BTUUgKFZUWVBFIGEsIFZUWVBFIGIpCVwK KyAgewkJCQkJCVwKKyAgICByZXR1cm4gYSBPUCBiOwkJCQlcCisgIH0JCQkJCQlcCisKK0ZPTyAo djRzZiwgZXEsID09KQorRk9PICh2NHNmLCBuZXEsICE9KQorRk9PICh2NHNmLCBndCwgPikKK0ZP TyAodjRzZiwgZ2UsID49KQorRk9PICh2NHNmLCBsdCwgPCkKK0ZPTyAodjRzZiwgbGUsIDw9KQor Rk9PICh2OHNmLCBlcSwgPT0pCitGT08gKHY4c2YsIG5lcSwgIT0pCitGT08gKHY4c2YsIGd0LCA+ KQorRk9PICh2OHNmLCBnZSwgPj0pCitGT08gKHY4c2YsIGx0LCA8KQorRk9PICh2OHNmLCBsZSwg PD0pCitGT08gKHYyZGYsIGVxLCA9PSkKK0ZPTyAodjJkZiwgbmVxLCAhPSkKK0ZPTyAodjJkZiwg Z3QsID4pCitGT08gKHYyZGYsIGdlLCA+PSkKK0ZPTyAodjJkZiwgbHQsIDwpCitGT08gKHYyZGYs IGxlLCA8PSkKK0ZPTyAodjRkZiwgZXEsID09KQorRk9PICh2NGRmLCBuZXEsICE9KQorRk9PICh2 NGRmLCBndCwgPikKK0ZPTyAodjRkZiwgZ2UsID49KQorRk9PICh2NGRmLCBsdCwgPCkKK0ZPTyAo djRkZiwgbGUsIDw9KQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv YXZ4NTEyZi1wcjk2ODkxLTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUx MmYtcHI5Njg5MS0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUx OTJhMDBlMGY0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvYXZ4NTEyZi1wcjk2ODkxLTIuYwpAQCAtMCwwICsxLDMwIEBACisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1vcHRpb25zICItbWF2eDUxMnZsIC1tYXZ4NTEyYncgLW1hdng1MTJk cSAtTzIiIH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIiVrXFswLTdc XSIgfSB9ICovCisKKyNpbmNsdWRlPGltbWludHJpbi5oPgorCisjZGVmaW5lIEZPTyhWVFlQRSxQ UkVGSVgsU1VGRklYLE9QTkFNRSxNQVNLLExFTikJCQlcCisgIFZUWVBFCQkJCQkJCQlcCisgIGZv b18jI0xFTiMjXyMjU1VGRklYIyNfIyNPUE5BTUUgKFZUWVBFIGEsIFZUWVBFIGIpCQlcCisgIHsJ CQkJCQkJCQlcCisgICAgTUFTSyBtID0gX21tIyNQUkVGSVgjI19jbXAjI09QTkFNRSMjXyMjU1VG RklYIyNfbWFzayAoYSwgYik7CVwKKyAgICByZXR1cm4gX21tIyNQUkVGSVgjI19tb3ZtXyMjU1VG RklYIChtKTsJCQkJXAorICB9CQkJCQkJCQkJXAorCitGT08gKF9fbTEyOGksLCBlcGk4LCBlcSwg X19tbWFzazE2LCAxMjgpOworRk9PIChfX20xMjhpLCwgZXBpMTYsIGVxLCBfX21tYXNrOCwgMTI4 KTsKK0ZPTyAoX19tMTI4aSwsIGVwaTMyLCBlcSwgX19tbWFzazgsIDEyOCk7CitGT08gKF9fbTEy OGksLCBlcGk2NCwgZXEsIF9fbW1hc2s4LCAxMjgpOworRk9PIChfX20xMjhpLCwgZXBpOCwgZ3Qs IF9fbW1hc2sxNiwgMTI4KTsKK0ZPTyAoX19tMTI4aSwsIGVwaTE2LCBndCwgX19tbWFzazgsIDEy OCk7CitGT08gKF9fbTEyOGksLCBlcGkzMiwgZ3QsIF9fbW1hc2s4LCAxMjgpOworRk9PIChfX20x MjhpLCwgZXBpNjQsIGd0LCBfX21tYXNrOCwgMTI4KTsKK0ZPTyAoX19tMjU2aSwgMjU2LCBlcGk4 LCBlcSwgX19tbWFzazMyLCAyNTYpOworRk9PIChfX20yNTZpLCAyNTYsIGVwaTE2LCBlcSwgX19t bWFzazE2LCAyNTYpOworRk9PIChfX20yNTZpLCAyNTYsIGVwaTMyLCBlcSwgX19tbWFzazgsIDI1 Nik7CitGT08gKF9fbTI1NmksIDI1NiwgZXBpNjQsIGVxLCBfX21tYXNrOCwgMjU2KTsKK0ZPTyAo X19tMjU2aSwgMjU2LCBlcGk4LCBndCwgX19tbWFzazMyLCAyNTYpOworRk9PIChfX20yNTZpLCAy NTYsIGVwaTE2LCBndCwgX19tbWFzazE2LCAyNTYpOworRk9PIChfX20yNTZpLCAyNTYsIGVwaTMy LCBndCwgX19tbWFzazgsIDI1Nik7CitGT08gKF9fbTI1NmksIDI1NiwgZXBpNjQsIGd0LCBfX21t YXNrOCwgMjU2KTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2 eDUxMmYtcHI5Njg5MS0zLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJm LXByOTY4OTEtMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xY2Yx OGYyNDA3YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F2eDUxMmYtcHI5Njg5MS0zLmMKQEAgLTAsMCArMSwzOSBAQAorLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hdng1MTJ2bCAtbWF2eDUxMmJ3IC1tYXZ4NTEyZHEg LU8yIC1tYXNtPWF0dCIgfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCB7 bm90W2J3bHFkXVxdfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyB7KD9uKXZwY21wW2J3ZHFdWyBcdF0qXCQ1fSA0fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgeyg/bil2cGNtcFtid2RxXVsgXHRdKlwkNn0gNH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHsoP24pdnBjbXBbYndkcV1bIFx0XSpc JDd9IDR9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7KD9uKXZj bXBwW3NkXVsgXHRdKlwkNX0gMn0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHsoP24pdmNtcHBbc2RdWyBcdF0qXCQ2fSAyfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgeyg/bil2Y21wcFtzZF1bIFx0XSpcJDd9IDJ9IH0gKi8KKwor I2luY2x1ZGU8aW1taW50cmluLmg+CisKKyNkZWZpbmUgRk9PKFZUWVBFLFBSRUZJWCxTVUZGSVgs TUFTSyxMRU4sQ01QSU1NKQkJCVwKKyAgTUFTSwkJCQkJCQkJXAorICBmb29fIyNMRU4jI18jI1NV RkZJWCMjXyMjQ01QSU1NIChWVFlQRSBhLCBWVFlQRSBiKQkJCQlcCisgIHsJCQkJCQkJCQlcCisg ICAgTUFTSyBtID0gX21tIyNQUkVGSVgjI19jbXBfIyNTVUZGSVgjI19tYXNrIChhLCBiLCBDTVBJ TU0pOwkJXAorICAgIHJldHVybiB+bTsJCQkJCQkJCVwKKyAgfQkJCQkJCQkJCVwKKworRk9PIChf X20xMjhpLCwgZXBpOCwgX19tbWFzazE2LCAxMjgsIDEpOworRk9PIChfX20xMjhpLCwgZXBpMTYs IF9fbW1hc2s4LCAxMjgsIDEpOworRk9PIChfX20xMjhpLCwgZXBpMzIsIF9fbW1hc2s4LCAxMjgs IDEpOworRk9PIChfX20xMjhpLCwgZXBpNjQsIF9fbW1hc2s4LCAxMjgsIDEpOworRk9PIChfX20y NTZpLCAyNTYsIGVwaTgsIF9fbW1hc2szMiwgMjU2LCAyKTsKK0ZPTyAoX19tMjU2aSwgMjU2LCBl cGkxNiwgX19tbWFzazE2LCAyNTYsIDIpOworRk9PIChfX20yNTZpLCAyNTYsIGVwaTMyLCBfX21t YXNrOCwgMjU2LCAyKTsKK0ZPTyAoX19tMjU2aSwgMjU2LCBlcGk2NCwgX19tbWFzazgsIDI1Niwg Mik7CitGT08gKF9fbTUxMmksIDUxMiwgZXBpOCwgX19tbWFzazY0LCA1MTIsIDMpOworRk9PIChf X201MTJpLCA1MTIsIGVwaTE2LCBfX21tYXNrMzIsIDUxMiwgMyk7CitGT08gKF9fbTUxMmksIDUx MiwgZXBpMzIsIF9fbW1hc2sxNiwgNTEyLCAzKTsKK0ZPTyAoX19tNTEyaSwgNTEyLCBlcGk2NCwg X19tbWFzazgsIDUxMiwgMyk7CisKK0ZPTyAoX19tMTI4LCwgcHMsIF9fbW1hc2s4LCAxMjgsIDEp OworRk9PIChfX20xMjhkLCwgcGQsIF9fbW1hc2s4LCAxMjgsIDEpOworRk9PIChfX20yNTYsIDI1 NiwgcHMsIF9fbW1hc2s4LCAyNTYsIDIpOworRk9PIChfX20yNTZkLCAyNTYsIHBkLCBfX21tYXNr OCwgMjU2LCAyKTsKK0ZPTyAoX19tNTEyLCA1MTIsIHBzLCBfX21tYXNrMTYsIDUxMiwgMyk7CitG T08gKF9fbTUxMmQsIDUxMiwgcGQsIF9fbW1hc2s4LCA1MTIsIDMpOwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYml0d2lzZV9tYXNrX29wLTMuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2JpdHdpc2VfbWFza19vcC0zLmMKaW5kZXggMThiZjRmMGQ3 NjguLjRhOTA3ODYxNWFhIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9iaXR3aXNlX21hc2tfb3AtMy5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2JpdHdpc2VfbWFza19vcC0zLmMKQEAgLTQwLDUgKzQwLDQgQEAgZm9vX2FuZG5iIChfX201MTJp IGEsIF9fbTUxMmkgYikKICAgZm9vID0gbTEgJiB+bTI7CiB9CiAKLS8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci10aW1lcyAia25vdGJcW1x0IFxdIiAiMSIgfSB9ICAqLwogLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJrbW92YlxbXHQgXF0iICI0In0gfSAgKi8KLS0g CjIuMTguMQoK --00000000000014532205b832f77d--