From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by sourceware.org (Postfix) with ESMTPS id 5F39A3858D3C; Thu, 5 May 2022 17:37:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5F39A3858D3C Received: by mail-ej1-x62f.google.com with SMTP id l18so10067026ejc.7; Thu, 05 May 2022 10:37:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:from :subject:to:cc:references:content-language:in-reply-to; bh=95goaUmg4jTZxZgHPcThwh0Q/0K77LA5drPh/WfDDAU=; b=zmp8NhxL/i9LhgejoKXfQX3wNfffGOGIjswayJmOYnjAmsXYF8yqW8O55tIZFFGB4i NjmODHX88j5D6QY79HVoucL+shorrjCcMto3ADzOlcvTzNHBzRDgmMK4VA0Vwd0cqH/l dtbZbEGDKIb2OeS1LXcyg+EAq6U9zAdheVoJewXO2ZEVFnqK1Wdyc3Xb53q5RhdBsSyR fIylaLeKGtTFDnfSDGfLXK+U00OeLym2tHKHAzBCTaVHwi9PEPDaMtKFF/dcFHHStTZA ySsn1CF77CDDB/kCLngPZkyEGqm/1yvfN+Ri+nkVC99zv27V1kQc+mPPUCpNDm0DzmU3 I9Bw== X-Gm-Message-State: AOAM532BIC5/rZOF8Vey+ngiYrPURyTzxe6uDMH9fuSuale3Lj0DM8Hs +DuqyN0KSEAKv85hOhtdY+0DiKdI6Hk= X-Google-Smtp-Source: ABdhPJzW/XcM9/0/lOTjKsQX8yiaAQMp1z950vzeqskhBLj38C+lXT5IIeNbD4jkVOX7Fyv64fCeHg== X-Received: by 2002:a17:906:4fd5:b0:6f4:2704:1edf with SMTP id i21-20020a1709064fd500b006f427041edfmr25552633ejw.136.1651772228436; Thu, 05 May 2022 10:37:08 -0700 (PDT) Received: from [10.24.4.57] ([109.190.253.11]) by smtp.googlemail.com with ESMTPSA id w1-20020a1709064a0100b006f3ef214db4sm987691eju.26.2022.05.05.10.37.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 05 May 2022 10:37:07 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------u03dz0aqUIbp61HKN8Izq0Il" Message-ID: Date: Thu, 5 May 2022 19:37:03 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= Subject: [PATCH][_Hashtable] Fix insertion of range of type convertible to value_type PR 56112 To: "libstdc++@gcc.gnu.org" Cc: gcc-patches References: <2fe3937d-1b9a-a547-bb41-225d3d5426a2@gmail.com> Content-Language: en-US In-Reply-To: <2fe3937d-1b9a-a547-bb41-225d3d5426a2@gmail.com> X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 May 2022 17:37:12 -0000 This is a multi-part message in MIME format. --------------u03dz0aqUIbp61HKN8Izq0Il Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Renewing my patch to fix PR 56112 but for the insert methods, I totally change it, now works also with move-only key types. I let you Jonathan find a better name than _ValueTypeEnforcer as usual :-) libstdc++: [_Hashtable] Insert range of types convertible to value_type PR 56112 Fix insertion of range of types convertible to value_type. Fix also when this value_type has a move-only key_type which also allow converted values to be moved. libstdc++-v3/ChangeLog:         PR libstdc++/56112         * include/bits/hashtable_policy.h (_ValueTypeEnforcer): New.         * include/bits/hashtable.h (_Hashtable<>::_M_insert_unique_aux): New.         (_Hashtable<>::_M_insert(_Arg&&, const _NodeGenerator&, true_type)): Use latters.         (_Hashtable<>::_M_insert(_Arg&&, const _NodeGenerator&, false_type)): Likewise.         (_Hashtable(_InputIterator, _InputIterator, size_type, const _Hash&, const _Equal&,         const allocator_type&, true_type)): Use this.insert range.         (_Hashtable(_InputIterator, _InputIterator, size_type, const _Hash&, const _Equal&,         const allocator_type&, false_type)): Use _M_insert.         * testsuite/23_containers/unordered_map/cons/56112.cc: Check how many times conversion         is done.         (test02): New test case.         * testsuite/23_containers/unordered_set/cons/56112.cc: New test. Tested under Linux x86_64. Ok to commit ? François --------------u03dz0aqUIbp61HKN8Izq0Il Content-Type: text/x-patch; charset=UTF-8; name="pr56112.patch" Content-Disposition: attachment; filename="pr56112.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlLmggYi9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5oCmluZGV4IDVlMWE0MTdmN2Nk Li5jZDQyZDNjOWJhMCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9o YXNodGFibGUuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5o CkBAIC04OTgsMjEgKzg5OCwzMyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP TgogCiAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnLCB0eXBlbmFtZSBfTm9kZUdlbmVy YXRvcj4KIAlzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+Ci0JX01faW5zZXJ0KF9BcmcmJiBf X2FyZywgY29uc3QgX05vZGVHZW5lcmF0b3ImIF9fbm9kZV9nZW4sCi0JCSAgdHJ1ZV90eXBl IC8qIF9fdWtzICovKQorCV9NX2luc2VydF91bmlxdWVfYXV4KF9BcmcmJiBfX2FyZywgY29u c3QgX05vZGVHZW5lcmF0b3ImIF9fbm9kZV9nZW4pCiAJewogCSAgcmV0dXJuIF9NX2luc2Vy dF91bmlxdWUoCiAJICAgIF9TX2ZvcndhcmRfa2V5KF9FeHRyYWN0S2V5e30oc3RkOjpmb3J3 YXJkPF9Bcmc+KF9fYXJnKSkpLAogCSAgICBzdGQ6OmZvcndhcmQ8X0FyZz4oX19hcmcpLCBf X25vZGVfZ2VuKTsKIAl9CiAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BcmcsIHR5cGVu YW1lIF9Ob2RlR2VuZXJhdG9yPgorCXN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKwlfTV9p bnNlcnQoX0FyZyYmIF9fYXJnLCBjb25zdCBfTm9kZUdlbmVyYXRvciYgX19ub2RlX2dlbiwK KwkJICB0cnVlX3R5cGUgLyogX191a3MgKi8pCisJeworCSAgdXNpbmcgX190b192YWx1ZQor CSAgICA9IF9fZGV0YWlsOjpfVmFsdWVUeXBlRW5mb3JjZXI8X0V4dHJhY3RLZXksIHZhbHVl X3R5cGU+OworCSAgcmV0dXJuIF9NX2luc2VydF91bmlxdWVfYXV4KAorCSAgICBfX3RvX3Zh bHVle30oc3RkOjpmb3J3YXJkPF9Bcmc+KF9fYXJnKSksIF9fbm9kZV9nZW4pOworCX0KKwog ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZywgdHlwZW5hbWUgX05vZGVHZW5lcmF0b3I+ CiAJaXRlcmF0b3IKIAlfTV9pbnNlcnQoX0FyZyYmIF9fYXJnLCBjb25zdCBfTm9kZUdlbmVy YXRvciYgX19ub2RlX2dlbiwKIAkJICBmYWxzZV90eXBlIF9fdWtzKQogCXsKLQkgIHJldHVy biBfTV9pbnNlcnQoY2VuZCgpLCBzdGQ6OmZvcndhcmQ8X0FyZz4oX19hcmcpLCBfX25vZGVf Z2VuLAotCQkJICAgX191a3MpOworCSAgdXNpbmcgX190b192YWx1ZQorCSAgICA9IF9fZGV0 YWlsOjpfVmFsdWVUeXBlRW5mb3JjZXI8X0V4dHJhY3RLZXksIHZhbHVlX3R5cGU+OworCSAg cmV0dXJuIF9NX2luc2VydChjZW5kKCksCisJICAgIF9fdG9fdmFsdWV7fShzdGQ6OmZvcndh cmQ8X0FyZz4oX19hcmcpKSwgX19ub2RlX2dlbiwgX191a3MpOwogCX0KIAogICAgICAgLy8g SW5zZXJ0IHdpdGggaGludCwgbm90IHVzZWQgd2hlbiBrZXlzIGFyZSB1bmlxdWUuCkBAIC0x MTg0LDEwICsxMTk2LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkJ IGNvbnN0IF9IYXNoJiBfX2gsIGNvbnN0IF9FcXVhbCYgX19lcSwKIAkJIGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EsIHRydWVfdHlwZSAvKiBfX3VrcyAqLykKICAgICAgIDogX0hhc2h0 YWJsZShfX2JrdF9jb3VudF9oaW50LCBfX2gsIF9fZXEsIF9fYSkKLSAgICAgIHsKLQlmb3Ig KDsgX19mICE9IF9fbDsgKytfX2YpCi0JICB0aGlzLT5pbnNlcnQoKl9fZik7Ci0gICAgICB9 CisgICAgICB7IHRoaXMtPmluc2VydChfX2YsIF9fbCk7IH0KIAogICB0ZW1wbGF0ZTx0eXBl bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9BbGxvYywKIAkgICB0eXBl bmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLApAQCAtMTE5OSw3ICsxMjA4LDcg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9IYXNodGFibGUo X0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCiAJCSBzaXplX3R5cGUg X19ia3RfY291bnRfaGludCwKIAkJIGNvbnN0IF9IYXNoJiBfX2gsIGNvbnN0IF9FcXVhbCYg X19lcSwKLQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EsIGZhbHNlX3R5cGUgLyogX191 a3MgKi8pCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hLCBmYWxzZV90eXBlIF9fdWtz KQogICAgICAgOiBfSGFzaHRhYmxlKF9faCwgX19lcSwgX19hKQogICAgICAgewogCWF1dG8g X19uYl9lbGVtcyA9IF9fZGV0YWlsOjpfX2Rpc3RhbmNlX2Z3KF9fZiwgX19sKTsKQEAgLTEy MTQsOCArMTIyMyw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJICAg IF9NX2J1Y2tldF9jb3VudCA9IF9fYmt0X2NvdW50OwogCSAgfQogCisJX19hbGxvY19ub2Rl X2dlbl90IF9fbm9kZV9nZW4oKnRoaXMpOwogCWZvciAoOyBfX2YgIT0gX19sOyArK19fZikK LQkgIHRoaXMtPmluc2VydCgqX19mKTsKKwkgIF9NX2luc2VydCgqX19mLCBfX25vZGVfZ2Vu LCBfX3Vrcyk7CiAgICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5h bWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2MsCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv aW5jbHVkZS9iaXRzL2hhc2h0YWJsZV9wb2xpY3kuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRl L2JpdHMvaGFzaHRhYmxlX3BvbGljeS5oCmluZGV4IDBmMGIwZjllYTUxLi41MTUxODMxNmNi OCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9oYXNodGFibGVfcG9s aWN5LmgKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9oYXNodGFibGVfcG9saWN5 LmgKQEAgLTEwOSw2ICsxMDksNTggQEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAgICAgICB7IHJl dHVybiBzdGQ6OmZvcndhcmQ8X1RwPihfX3gpLmZpcnN0OyB9CiAgIH07CiAKKyAgdGVtcGxh dGU8dHlwZW5hbWUgX0V4S2V5LCB0eXBlbmFtZSBfVmFsdWU+CisgICAgc3RydWN0IF9WYWx1 ZVR5cGVFbmZvcmNlcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgc3Ry dWN0IF9WYWx1ZVR5cGVFbmZvcmNlcjxfSWRlbnRpdHksIF9WYWx1ZT4KKyAgICB7CisgICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS3Q+CisJY29uc3RleHByIF9LdCYmCisJb3BlcmF0b3Io KShfS3QmJiBfX2spIG5vZXhjZXB0CisJeyByZXR1cm4gc3RkOjpmb3J3YXJkPF9LdD4oX19r KTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgorICAgIHN0cnVj dCBfVmFsdWVUeXBlRW5mb3JjZXI8X1NlbGVjdDFzdCwgX1ZhbHVlPgorICAgIHsKKyAgICAg IGNvbnN0ZXhwciBfVmFsdWUmJgorICAgICAgb3BlcmF0b3IoKShfVmFsdWUmJiBfX3gpIG5v ZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Om1vdmUoX194KTsgfQorCisgICAgICBjb25z dGV4cHIgY29uc3QgX1ZhbHVlJgorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVmFsdWUmIF9f eCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorCisgICAgICB1c2luZyBfX2Zz dF90eXBlID0gdHlwZW5hbWUgX1ZhbHVlOjpmaXJzdF90eXBlOworCisgICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUGFpcj4KKwl1c2luZyBfX211dGFibGVfdmFsdWVfdCA9CisJICBzdGQ6 OnBhaXI8CisJICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PHR5cGVuYW1lIF9QYWly OjpmaXJzdF90eXBlPjo6dHlwZSwKKwkgICAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBl PjsKKworICAgICAgY29uc3RleHByIF9fZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdDxfX2Zz dF90eXBlPjo6dmFsdWUsCisJCQkgICAgICBfX211dGFibGVfdmFsdWVfdDxfVmFsdWU+JiY+ CisgICAgICBvcGVyYXRvcigpKF9fbXV0YWJsZV92YWx1ZV90PF9WYWx1ZT4mJiBfX3gpIG5v ZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Om1vdmUoX194KTsgfQorCisgICAgICBjb25z dGV4cHIgX19lbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0PF9fZnN0X3R5cGU+Ojp2YWx1ZSwK KwkJCSAgICAgIGNvbnN0IF9fbXV0YWJsZV92YWx1ZV90PF9WYWx1ZT4mPgorICAgICAgb3Bl cmF0b3IoKShjb25zdCBfX211dGFibGVfdmFsdWVfdDxfVmFsdWU+JiBfX3gpIG5vZXhjZXB0 CisgICAgICB7IHJldHVybiBfX3g7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0t0 LCB0eXBlbmFtZSBfVmFsPgorCWNvbnN0ZXhwciBzdGQ6OnBhaXI8X0t0LCBfVmFsPiYmCisJ b3BlcmF0b3IoKShzdGQ6OnBhaXI8X0t0LCBfVmFsPiYmIF9feCkgbm9leGNlcHQKKwl7IHJl dHVybiBzdGQ6Om1vdmUoX194KTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS3Qs IHR5cGVuYW1lIF9WYWw+CisJY29uc3RleHByIGNvbnN0IHN0ZDo6cGFpcjxfS3QsIF9WYWw+ JgorCW9wZXJhdG9yKCkoY29uc3Qgc3RkOjpwYWlyPF9LdCwgX1ZhbD4mIF9feCkgbm9leGNl cHQKKwl7IHJldHVybiBfX3g7IH0KKyAgICB9OworCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9F eEtleT4KICAgICBzdHJ1Y3QgX05vZGVCdWlsZGVyOwogCmRpZmYgLS1naXQgYS9saWJzdGRj KystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX21hcC9jb25zLzU2MTEy LmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJlZF9t YXAvY29ucy81NjExMi5jYwppbmRleCBjNGNkZWVlMjM0Yy4uNDQ3NjEwM2M5ODYgMTAwNjQ0 Ci0tLSBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRf bWFwL2NvbnMvNTYxMTIuY2MKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250 YWluZXJzL3Vub3JkZXJlZF9tYXAvY29ucy81NjExMi5jYwpAQCAtMjAsMzAgKzIwLDEwOCBA QAogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2lu Y2x1ZGUgPHRlc3RzdWl0ZV9ob29rcy5oPgorCiBzdHJ1Y3QgS2V5CiB7CiAgIGV4cGxpY2l0 IEtleShjb25zdCBpbnQqIHApIDogdmFsdWUocCkgeyB9CiAgIH5LZXkoKSB7IHZhbHVlID0g bnVsbHB0cjsgfQogCi0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkmIGspIGNvbnN0IHsg cmV0dXJuICp2YWx1ZSA9PSAqay52YWx1ZTsgfQorICBib29sIG9wZXJhdG9yPT0oY29uc3Qg S2V5JiBrKSBjb25zdAorICB7IHJldHVybiAqdmFsdWUgPT0gKmsudmFsdWU7IH0KIAogICBj b25zdCBpbnQqIHZhbHVlOwogfTsKIAogc3RydWN0IGhhc2gKIHsKLSAgc3RkOjpzaXplX3Qg b3BlcmF0b3IoKShjb25zdCBLZXkmIGspIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICprLnZh bHVlOyB9CisgIHN0ZDo6c2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgS2V5JiBrKSBjb25zdCBu b2V4Y2VwdAorICB7IHJldHVybiAqay52YWx1ZTsgfQogfTsKIAogc3RydWN0IFMKIHsKKyAg c3RhdGljIGludCBfY291bnQ7CisKICAgaW50IHZhbHVlOwotICBvcGVyYXRvciBzdGQ6OnBh aXI8Y29uc3QgS2V5LCBpbnQ+KCkgY29uc3QgeyByZXR1cm4ge0tleSgmdmFsdWUpLCB2YWx1 ZX07IH0KKyAgb3BlcmF0b3Igc3RkOjpwYWlyPGNvbnN0IEtleSwgaW50PigpIGNvbnN0Cisg IHsKKyAgICArK19jb3VudDsKKyAgICByZXR1cm4geyBLZXkoJnZhbHVlKSwgdmFsdWUgfTsK KyAgfQogfTsKIAotaW50IG1haW4oKQoraW50IFM6Ol9jb3VudCA9IDA7CisKK3ZvaWQgdGVz dDAxKCkKIHsKICAgICBTIHNbMV0gPSB7IHsyfSB9OwotICAgIHN0ZDo6dW5vcmRlcmVkX21h cDxLZXksIGludCwgaGFzaD4gbShzLCBzKzEpOwotICAgIHN0ZDo6dW5vcmRlcmVkX211bHRp bWFwPEtleSwgaW50LCBoYXNoPiBtbShzLCBzKzEpOworICAgIHN0ZDo6dW5vcmRlcmVkX21h cDxLZXksIGludCwgaGFzaD4gbShzLCBzICsgMSk7CisgICAgVkVSSUZZKCBTOjpfY291bnQg PT0gMSApOworCisgICAgc3RkOjp1bm9yZGVyZWRfbXVsdGltYXA8S2V5LCBpbnQsIGhhc2g+ IG1tKHMsIHMgKyAxKTsKKyAgICBWRVJJRlkoIFM6Ol9jb3VudCA9PSAyICk7CisKKyAgICBt Lmluc2VydChzLCBzICsgMSk7CisgICAgVkVSSUZZKCBTOjpfY291bnQgPT0gMyApOworCisg ICAgbW0uaW5zZXJ0KHMsIHMgKyAxKTsKKyAgICBWRVJJRlkoIFM6Ol9jb3VudCA9PSA0ICk7 Cit9CisKK3N0cnVjdCBNb3ZlT25seUtleQoreworICBleHBsaWNpdCBNb3ZlT25seUtleShj b25zdCBpbnQqIHApIDogdmFsdWUocCkgeyB9CisgIE1vdmVPbmx5S2V5KGNvbnN0IE1vdmVP bmx5S2V5JikgPSBkZWxldGU7CisgIE1vdmVPbmx5S2V5KE1vdmVPbmx5S2V5JiYgaykgOiB2 YWx1ZShrLnZhbHVlKQorICB7IGsudmFsdWUgPSBudWxscHRyOyAgfQorICB+TW92ZU9ubHlL ZXkoKSB7IHZhbHVlID0gbnVsbHB0cjsgfQorCisgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBN b3ZlT25seUtleSYgaykgY29uc3QKKyAgeyByZXR1cm4gKnZhbHVlID09ICprLnZhbHVlOyB9 CisKKyAgY29uc3QgaW50KiB2YWx1ZTsKK307CisKK3N0cnVjdCBNb3ZlT25seUtleUhhc2gK K3sKKyAgc3RkOjpzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBNb3ZlT25seUtleSYgaykgY29u c3Qgbm9leGNlcHQKKyAgeyByZXR1cm4gKmsudmFsdWU7IH0KK307CisKK3N0cnVjdCBTMgor eworICBzdGF0aWMgaW50IF9jb3VudDsKKworICBpbnQgdmFsdWU7CisgIG9wZXJhdG9yIHN0 ZDo6cGFpcjxNb3ZlT25seUtleSwgaW50PigpIGNvbnN0CisgIHsKKyAgICArK19jb3VudDsK KyAgICByZXR1cm4geyBNb3ZlT25seUtleSgmdmFsdWUpLCB2YWx1ZSB9OworICB9Cit9Owor CitpbnQgUzI6Ol9jb3VudCA9IDA7CisKK3ZvaWQgdGVzdDAyKCkKK3sKKyAgICBTMiBzWzFd ID0geyB7Mn0gfTsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8TW92ZU9ubHlLZXksIGludCwg TW92ZU9ubHlLZXlIYXNoPiBtKHMsIHMgKyAxKTsKKyAgICBWRVJJRlkoIFMyOjpfY291bnQg PT0gMSApOworCisgICAgc3RkOjp1bm9yZGVyZWRfbXVsdGltYXA8TW92ZU9ubHlLZXksIGlu dCwgTW92ZU9ubHlLZXlIYXNoPiBtbShzLCBzICsgMSk7CisgICAgVkVSSUZZKCBTMjo6X2Nv dW50ID09IDIgKTsKKworICAgIG0uaW5zZXJ0KHMsIHMgKyAxKTsKKyAgICBWRVJJRlkoIFMy OjpfY291bnQgPT0gMyApOworCisgICAgbW0uaW5zZXJ0KHMsIHMgKyAxKTsKKyAgICBWRVJJ RlkoIFMyOjpfY291bnQgPT0gNCApOworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3QwMSgp OworICB0ZXN0MDIoKTsKKyAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9saWJzdGRjKyst djMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX3NldC9jb25zLzU2MTEyLmNj IGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJlZF9zZXQv Y29ucy81NjExMi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YzU1OTY1YTJjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRl LzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX3NldC9jb25zLzU2MTEyLmNjCkBAIC0wLDAgKzEs NzAgQEAKKy8vIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGMrKzExIH0gfQorCisvLyBDb3B5cmln aHQgKEMpIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhp cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJh cnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkg bGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor Ly8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp bGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorI2luY2x1ZGUgPHV0aWxpdHk+ CisKKyNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KKworc3RydWN0IEtleQoreworICBl eHBsaWNpdCBLZXkoY29uc3QgaW50KiBwKSA6IHZhbHVlKHApIHsgfQorICB+S2V5KCkgeyB2 YWx1ZSA9IG51bGxwdHI7IH0KKworICBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5JiBrKSBj b25zdAorICB7IHJldHVybiAqdmFsdWUgPT0gKmsudmFsdWU7IH0KKworICBjb25zdCBpbnQq IHZhbHVlOworfTsKKworc3RydWN0IGhhc2gKK3sKKyAgc3RkOjpzaXplX3Qgb3BlcmF0b3Io KShjb25zdCBLZXkmIGspIGNvbnN0IG5vZXhjZXB0CisgIHsgcmV0dXJuICprLnZhbHVlOyB9 Cit9OworCitzdHJ1Y3QgUworeworICBzdGF0aWMgaW50IF9jb3VudDsKKworICBpbnQgdmFs dWU7CisgIG9wZXJhdG9yIEtleSgpIGNvbnN0CisgIHsKKyAgICArK19jb3VudDsKKyAgICBy ZXR1cm4gS2V5KCZ2YWx1ZSk7CisgIH0KK307CisKK2ludCBTOjpfY291bnQgPSAwOworCitp bnQgbWFpbigpCit7CisgICAgUyBzWzFdID0geyB7Mn0gfTsKKyAgICBzdGQ6OnVub3JkZXJl ZF9zZXQ8S2V5LCBoYXNoPiBtKHMsIHMgKyAxKTsKKyAgICBWRVJJRlkoIFM6Ol9jb3VudCA9 PSAxICk7CisKKyAgICBzdGQ6OnVub3JkZXJlZF9tdWx0aXNldDxLZXksIGhhc2g+IG1tKHMs IHMgKyAxKTsKKyAgICBWRVJJRlkoIFM6Ol9jb3VudCA9PSAyICk7CisKKyAgICBtLmluc2Vy dChzLCBzICsgMSk7CisgICAgVkVSSUZZKCBTOjpfY291bnQgPT0gMyApOworCisgICAgbW0u aW5zZXJ0KHMsIHMgKyAxKTsKKyAgICBWRVJJRlkoIFM6Ol9jb3VudCA9PSA0ICk7Cit9Cg== --------------u03dz0aqUIbp61HKN8Izq0Il--