/Users/eugenesiegel/btc/bitcoin/src/util/strencodings.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2009-2010 Satoshi Nakamoto |
2 | | // Copyright (c) 2009-present The Bitcoin Core developers |
3 | | // Distributed under the MIT software license, see the accompanying |
4 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
5 | | |
6 | | /** |
7 | | * Utilities for converting data from/to strings. |
8 | | */ |
9 | | #ifndef BITCOIN_UTIL_STRENCODINGS_H |
10 | | #define BITCOIN_UTIL_STRENCODINGS_H |
11 | | |
12 | | #include <crypto/hex_base.h> // IWYU pragma: export |
13 | | #include <span.h> |
14 | | #include <util/string.h> |
15 | | |
16 | | #include <array> |
17 | | #include <bit> |
18 | | #include <charconv> |
19 | | #include <cstddef> |
20 | | #include <cstdint> |
21 | | #include <limits> |
22 | | #include <optional> |
23 | | #include <string> // IWYU pragma: export |
24 | | #include <string_view> // IWYU pragma: export |
25 | | #include <system_error> |
26 | | #include <type_traits> |
27 | | #include <vector> |
28 | | |
29 | | /** Used by SanitizeString() */ |
30 | | enum SafeChars |
31 | | { |
32 | | SAFE_CHARS_DEFAULT, //!< The full set of allowed chars |
33 | | SAFE_CHARS_UA_COMMENT, //!< BIP-0014 subset |
34 | | SAFE_CHARS_FILENAME, //!< Chars allowed in filenames |
35 | | SAFE_CHARS_URI, //!< Chars allowed in URIs (RFC 3986) |
36 | | }; |
37 | | |
38 | | /** |
39 | | * Used by ParseByteUnits() |
40 | | * Lowercase base 1000 |
41 | | * Uppercase base 1024 |
42 | | */ |
43 | | enum class ByteUnit : uint64_t { |
44 | | NOOP = 1ULL, |
45 | | k = 1000ULL, |
46 | | K = 1024ULL, |
47 | | m = 1'000'000ULL, |
48 | | M = 1ULL << 20, |
49 | | g = 1'000'000'000ULL, |
50 | | G = 1ULL << 30, |
51 | | t = 1'000'000'000'000ULL, |
52 | | T = 1ULL << 40, |
53 | | }; |
54 | | |
55 | | /** |
56 | | * Remove unsafe chars. Safe chars chosen to allow simple messages/URLs/email |
57 | | * addresses, but avoid anything even possibly remotely dangerous like & or > |
58 | | * @param[in] str The string to sanitize |
59 | | * @param[in] rule The set of safe chars to choose (default: least restrictive) |
60 | | * @return A new string without unsafe chars |
61 | | */ |
62 | | std::string SanitizeString(std::string_view str, int rule = SAFE_CHARS_DEFAULT); |
63 | | /** Parse the hex string into bytes (uint8_t or std::byte). Ignores whitespace. Returns nullopt on invalid input. */ |
64 | | template <typename Byte = std::byte> |
65 | | std::optional<std::vector<Byte>> TryParseHex(std::string_view str); |
66 | | /** Like TryParseHex, but returns an empty vector on invalid input. */ |
67 | | template <typename Byte = uint8_t> |
68 | | std::vector<Byte> ParseHex(std::string_view hex_str) |
69 | 0 | { |
70 | 0 | return TryParseHex<Byte>(hex_str).value_or(std::vector<Byte>{}); |
71 | 0 | } Unexecuted instantiation: _Z8ParseHexIhENSt3__16vectorIT_NS0_9allocatorIS2_EEEENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE Unexecuted instantiation: _Z8ParseHexISt4byteENSt3__16vectorIT_NS1_9allocatorIS3_EEEENS1_17basic_string_viewIcNS1_11char_traitsIcEEEE |
72 | | /* Returns true if each character in str is a hex character, and has an even |
73 | | * number of hex digits.*/ |
74 | | bool IsHex(std::string_view str); |
75 | | std::optional<std::vector<unsigned char>> DecodeBase64(std::string_view str); |
76 | | std::string EncodeBase64(std::span<const unsigned char> input); |
77 | 0 | inline std::string EncodeBase64(std::span<const std::byte> input) { return EncodeBase64(MakeUCharSpan(input)); } |
78 | 0 | inline std::string EncodeBase64(std::string_view str) { return EncodeBase64(MakeUCharSpan(str)); } |
79 | | std::optional<std::vector<unsigned char>> DecodeBase32(std::string_view str); |
80 | | |
81 | | /** |
82 | | * Base32 encode. |
83 | | * If `pad` is true, then the output will be padded with '=' so that its length |
84 | | * is a multiple of 8. |
85 | | */ |
86 | | std::string EncodeBase32(std::span<const unsigned char> input, bool pad = true); |
87 | | |
88 | | /** |
89 | | * Base32 encode. |
90 | | * If `pad` is true, then the output will be padded with '=' so that its length |
91 | | * is a multiple of 8. |
92 | | */ |
93 | | std::string EncodeBase32(std::string_view str, bool pad = true); |
94 | | |
95 | | /** |
96 | | * Splits socket address string into host string and port value. |
97 | | * Validates port value. |
98 | | * |
99 | | * @param[in] in The socket address string to split. |
100 | | * @param[out] portOut Port-portion of the input, if found and parsable. |
101 | | * @param[out] hostOut Host-portion of the input, if found. |
102 | | * @return true if port-portion is absent or within its allowed range, otherwise false |
103 | | */ |
104 | | bool SplitHostPort(std::string_view in, uint16_t& portOut, std::string& hostOut); |
105 | | |
106 | | // LocaleIndependentAtoi is provided for backwards compatibility reasons. |
107 | | // |
108 | | // New code should use ToIntegral or the ParseInt* functions |
109 | | // which provide parse error feedback. |
110 | | // |
111 | | // The goal of LocaleIndependentAtoi is to replicate the defined behaviour of |
112 | | // std::atoi as it behaves under the "C" locale, and remove some undefined |
113 | | // behavior. If the parsed value is bigger than the integer type's maximum |
114 | | // value, or smaller than the integer type's minimum value, std::atoi has |
115 | | // undefined behavior, while this function returns the maximum or minimum |
116 | | // values, respectively. |
117 | | template <typename T> |
118 | | T LocaleIndependentAtoi(std::string_view str) |
119 | 49.9k | { |
120 | 49.9k | static_assert(std::is_integral_v<T>); |
121 | 49.9k | T result; |
122 | | // Emulate atoi(...) handling of white space and leading +/-. |
123 | 49.9k | std::string_view s = util::TrimStringView(str); |
124 | 49.9k | if (!s.empty() && s[0] == '+') { |
125 | 0 | if (s.length() >= 2 && s[1] == '-') { |
126 | 0 | return 0; |
127 | 0 | } |
128 | 0 | s = s.substr(1); |
129 | 0 | } |
130 | 49.9k | auto [_, error_condition] = std::from_chars(s.data(), s.data() + s.size(), result); |
131 | 49.9k | if (error_condition == std::errc::result_out_of_range) { |
132 | 0 | if (s.length() >= 1 && s[0] == '-') { |
133 | | // Saturate underflow, per strtoll's behavior. |
134 | 0 | return std::numeric_limits<T>::min(); |
135 | 0 | } else { |
136 | | // Saturate overflow, per strtoll's behavior. |
137 | 0 | return std::numeric_limits<T>::max(); |
138 | 0 | } |
139 | 49.9k | } else if (error_condition != std::errc{}) { |
140 | 0 | return 0; |
141 | 0 | } |
142 | 49.9k | return result; |
143 | 49.9k | } _Z21LocaleIndependentAtoiIiET_NSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE Line | Count | Source | 119 | 49.9k | { | 120 | 49.9k | static_assert(std::is_integral_v<T>); | 121 | 49.9k | T result; | 122 | | // Emulate atoi(...) handling of white space and leading +/-. | 123 | 49.9k | std::string_view s = util::TrimStringView(str); | 124 | 49.9k | if (!s.empty() && s[0] == '+') { | 125 | 0 | if (s.length() >= 2 && s[1] == '-') { | 126 | 0 | return 0; | 127 | 0 | } | 128 | 0 | s = s.substr(1); | 129 | 0 | } | 130 | 49.9k | auto [_, error_condition] = std::from_chars(s.data(), s.data() + s.size(), result); | 131 | 49.9k | if (error_condition == std::errc::result_out_of_range) { | 132 | 0 | if (s.length() >= 1 && s[0] == '-') { | 133 | | // Saturate underflow, per strtoll's behavior. | 134 | 0 | return std::numeric_limits<T>::min(); | 135 | 0 | } else { | 136 | | // Saturate overflow, per strtoll's behavior. | 137 | 0 | return std::numeric_limits<T>::max(); | 138 | 0 | } | 139 | 49.9k | } else if (error_condition != std::errc{}) { | 140 | 0 | return 0; | 141 | 0 | } | 142 | 49.9k | return result; | 143 | 49.9k | } |
Unexecuted instantiation: _Z21LocaleIndependentAtoiIxET_NSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE |
144 | | |
145 | | /** |
146 | | * Tests if the given character is a decimal digit. |
147 | | * @param[in] c character to test |
148 | | * @return true if the argument is a decimal digit; otherwise false. |
149 | | */ |
150 | | constexpr bool IsDigit(char c) |
151 | 2.54M | { |
152 | 2.54M | return c >= '0' && c <= '9'2.34M ; |
153 | 2.54M | } |
154 | | |
155 | | /** |
156 | | * Tests if the given character is a whitespace character. The whitespace characters |
157 | | * are: space, form-feed ('\f'), newline ('\n'), carriage return ('\r'), horizontal |
158 | | * tab ('\t'), and vertical tab ('\v'). |
159 | | * |
160 | | * This function is locale independent. Under the C locale this function gives the |
161 | | * same result as std::isspace. |
162 | | * |
163 | | * @param[in] c character to test |
164 | | * @return true if the argument is a whitespace character; otherwise false |
165 | | */ |
166 | 0 | constexpr inline bool IsSpace(char c) noexcept { |
167 | 0 | return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'; |
168 | 0 | } |
169 | | |
170 | | /** |
171 | | * Convert string to integral type T. Leading whitespace, a leading +, or any |
172 | | * trailing character fail the parsing. The required format expressed as regex |
173 | | * is `-?[0-9]+`. The minus sign is only permitted for signed integer types. |
174 | | * |
175 | | * @returns std::nullopt if the entire string could not be parsed, or if the |
176 | | * parsed value is not in the range representable by the type T. |
177 | | */ |
178 | | template <typename T> |
179 | | std::optional<T> ToIntegral(std::string_view str) |
180 | 12 | { |
181 | 12 | static_assert(std::is_integral_v<T>); |
182 | 12 | T result; |
183 | 12 | const auto [first_nonmatching, error_condition] = std::from_chars(str.data(), str.data() + str.size(), result); |
184 | 12 | if (first_nonmatching != str.data() + str.size() || error_condition != std::errc{}) { |
185 | 0 | return std::nullopt; |
186 | 0 | } |
187 | 12 | return result; |
188 | 12 | } Unexecuted instantiation: _Z10ToIntegralIxENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE Unexecuted instantiation: _Z10ToIntegralIjENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE Unexecuted instantiation: _Z10ToIntegralIiENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE _Z10ToIntegralIhENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE Line | Count | Source | 180 | 10 | { | 181 | 10 | static_assert(std::is_integral_v<T>); | 182 | 10 | T result; | 183 | 10 | const auto [first_nonmatching, error_condition] = std::from_chars(str.data(), str.data() + str.size(), result); | 184 | 10 | if (first_nonmatching != str.data() + str.size() || error_condition != std::errc{}) { | 185 | 0 | return std::nullopt; | 186 | 0 | } | 187 | 10 | return result; | 188 | 10 | } |
_Z10ToIntegralItENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE Line | Count | Source | 180 | 2 | { | 181 | 2 | static_assert(std::is_integral_v<T>); | 182 | 2 | T result; | 183 | 2 | const auto [first_nonmatching, error_condition] = std::from_chars(str.data(), str.data() + str.size(), result); | 184 | 2 | if (first_nonmatching != str.data() + str.size() || error_condition != std::errc{}) { | 185 | 0 | return std::nullopt; | 186 | 0 | } | 187 | 2 | return result; | 188 | 2 | } |
Unexecuted instantiation: _Z10ToIntegralIyENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE Unexecuted instantiation: _Z10ToIntegralImENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE |
189 | | |
190 | | /** |
191 | | * Convert string to signed 32-bit integer with strict parse error feedback. |
192 | | * @returns true if the entire string could be parsed as valid integer, |
193 | | * false if not the entire string could be parsed or when overflow or underflow occurred. |
194 | | */ |
195 | | [[nodiscard]] bool ParseInt32(std::string_view str, int32_t *out); |
196 | | |
197 | | /** |
198 | | * Convert string to signed 64-bit integer with strict parse error feedback. |
199 | | * @returns true if the entire string could be parsed as valid integer, |
200 | | * false if not the entire string could be parsed or when overflow or underflow occurred. |
201 | | */ |
202 | | [[nodiscard]] bool ParseInt64(std::string_view str, int64_t *out); |
203 | | |
204 | | /** |
205 | | * Convert decimal string to unsigned 8-bit integer with strict parse error feedback. |
206 | | * @returns true if the entire string could be parsed as valid integer, |
207 | | * false if not the entire string could be parsed or when overflow or underflow occurred. |
208 | | */ |
209 | | [[nodiscard]] bool ParseUInt8(std::string_view str, uint8_t *out); |
210 | | |
211 | | /** |
212 | | * Convert decimal string to unsigned 16-bit integer with strict parse error feedback. |
213 | | * @returns true if the entire string could be parsed as valid integer, |
214 | | * false if the entire string could not be parsed or if overflow or underflow occurred. |
215 | | */ |
216 | | [[nodiscard]] bool ParseUInt16(std::string_view str, uint16_t* out); |
217 | | |
218 | | /** |
219 | | * Convert decimal string to unsigned 32-bit integer with strict parse error feedback. |
220 | | * @returns true if the entire string could be parsed as valid integer, |
221 | | * false if not the entire string could be parsed or when overflow or underflow occurred. |
222 | | */ |
223 | | [[nodiscard]] bool ParseUInt32(std::string_view str, uint32_t *out); |
224 | | |
225 | | /** |
226 | | * Convert decimal string to unsigned 64-bit integer with strict parse error feedback. |
227 | | * @returns true if the entire string could be parsed as valid integer, |
228 | | * false if not the entire string could be parsed or when overflow or underflow occurred. |
229 | | */ |
230 | | [[nodiscard]] bool ParseUInt64(std::string_view str, uint64_t *out); |
231 | | |
232 | | /** |
233 | | * Format a paragraph of text to a fixed width, adding spaces for |
234 | | * indentation to any added line. |
235 | | */ |
236 | | std::string FormatParagraph(std::string_view in, size_t width = 79, size_t indent = 0); |
237 | | |
238 | | /** |
239 | | * Timing-attack-resistant comparison. |
240 | | * Takes time proportional to length |
241 | | * of first argument. |
242 | | */ |
243 | | template <typename T> |
244 | | bool TimingResistantEqual(const T& a, const T& b) |
245 | 0 | { |
246 | 0 | if (b.size() == 0) return a.size() == 0; |
247 | 0 | size_t accumulator = a.size() ^ b.size(); |
248 | 0 | for (size_t i = 0; i < a.size(); i++) |
249 | 0 | accumulator |= size_t(a[i] ^ b[i%b.size()]); |
250 | 0 | return accumulator == 0; |
251 | 0 | } |
252 | | |
253 | | /** Parse number as fixed point according to JSON number syntax. |
254 | | * @returns true on success, false on error. |
255 | | * @note The result must be in the range (-10^18,10^18), otherwise an overflow error will trigger. |
256 | | */ |
257 | | [[nodiscard]] bool ParseFixedPoint(std::string_view, int decimals, int64_t *amount_out); |
258 | | |
259 | | namespace { |
260 | | /** Helper class for the default infn argument to ConvertBits (just returns the input). */ |
261 | | struct IntIdentity |
262 | | { |
263 | 97.5k | [[maybe_unused]] int operator()(int x) const { return x; } Unexecuted instantiation: addition_overflow.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: addrman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: asmap.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: asmap_direct.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: autofile.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: banman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: base_encode_decode.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: bech32.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: bip324.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: bitdeque.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: bitset.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: block.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: block_header.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: block_index.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: blockfilter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: bloom_filter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: buffered_file.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: chain.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: checkqueue.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: cluster_linearize.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: cmpctblock.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: coins_view.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: coinscache_sim.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: connman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypto.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypto_aes256.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypto_aes256cbc.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypto_chacha20.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypto_chacha20poly1305.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypto_common.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypto_diff_fuzz_chacha20.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypto_hkdf_hmac_sha256_l32.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypto_poly1305.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: cuckoocache.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: decode_tx.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: descriptor_parse.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: deserialize.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: eval_script.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: feefrac.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: fee_rate.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: feeratediagram.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: fees.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: flatfile.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: float.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: golomb_rice.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: headerssync.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: hex.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: http_request.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: i2p.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: integer.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: key.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: key_io.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: kitchen_sink.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: load_external_block_file.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: locale.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: merkleblock.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: message.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: miniscript.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: minisketch.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: mini_miner.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: muhash.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: multiplication_overflow.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: net.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: net_permissions.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: netaddress.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: netbase_dns_lookup.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: node_eviction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: p2p_handshake.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: p2p_headers_presync.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: p2p_transport_serialization.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: pcp.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: package_eval.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: parse_hd_keypath.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: parse_numbers.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: parse_script.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: parse_univalue.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: partially_downloaded_block.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: policy_estimator.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: policy_estimator_io.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: poolresource.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: pow.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: primitives_transaction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: process_message.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: process_messages.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: protocol.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: psbt.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: random.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: rbf.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: rolling_bloom_filter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: rpc.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: script.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: script_assets_test_minimizer.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: script_descriptor_cache.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: script_flags.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: script_format.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: script_interpreter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: script_ops.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: script_sigcache.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: script_sign.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: scriptnum_ops.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: secp256k1_ec_seckey_import_export_der.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: secp256k1_ecdsa_signature_parse_der_lax.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: signature_checker.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: signet.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: socks5.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: span.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: string.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: strprintf.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: system.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: timeoffsets.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: torcontrol.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: transaction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txdownloadman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: tx_in.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: tx_out.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: tx_pool.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txgraph.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txorphan.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txrequest.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: utxo_snapshot.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: utxo_total_supply.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: validation_load_mempool.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: vecdeque.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: versionbits.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: coincontrol.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: coinselection.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: crypter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: notifications.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: scriptpubkeyman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: spend.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: wallet_bdb_parser.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: descriptor.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: mempool.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: fuzz.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: util.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: addresstype.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: base58.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: chainparams.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: coins.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: bloom.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: messages.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: netif.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: signmessage.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: compressor.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: core_read.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: core_write.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: deploymentinfo.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: external_signer.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: net_types.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: netbase.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: outputtype.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: policy.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: rawtransaction_util.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: request.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: sign.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: signingprovider.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: solver.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: bip32.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: bytevectorhash.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: hasher.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: moneystr.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi strencodings.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Line | Count | Source | 263 | 97.5k | [[maybe_unused]] int operator()(int x) const { return x; } |
Unexecuted instantiation: time.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: db.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: dump.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: external_signer_scriptpubkeyman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: feebumper.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: interfaces.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: load.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: receive.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: addresses.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: backup.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: encrypt.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: transactions.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: wallet.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: sqlite.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: walletdb.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: walletutil.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: mining.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: setup_common.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: transaction_utils.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txmempool.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: validation.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: addrdb.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: blockencodings.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: tx_verify.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: dbwrapper.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: httprpc.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: httpserver.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: base.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: blockfilterindex.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: coinstatsindex.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txindex.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: init.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: checks.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: coinstats.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: context.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: disconnected_transactions.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: mapport.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: net_processing.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: netgroup.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: blockmanager_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: blockstorage.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: caches.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: chainstate.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: chainstatemanager_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: coin.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: coins_view_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: eviction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: kernel_notifications.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: mempool_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: mempool_persist.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: mempool_persist_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: miner.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: peerman_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txdownloadman_impl.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txreconciliation.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: ephemeral_policy.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: packages.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: settings.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: truc_policy.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: rest.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: blockchain.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: node.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: output_script.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: rawtransaction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: server.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: server_util.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txoutproof.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: sigcache.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txdb.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: txorphanage.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: validationinterface.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: arith_uint256.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: merkle.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: tx_check.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: hash.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: pubkey.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: interpreter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: uint256.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi Unexecuted instantiation: siphash.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi |
264 | | }; |
265 | | |
266 | | } // namespace |
267 | | |
268 | | /** Convert from one power-of-2 number base to another. */ |
269 | | template<int frombits, int tobits, bool pad, typename O, typename It, typename I = IntIdentity> |
270 | 3.42k | bool ConvertBits(O outfn, It it, It end, I infn = {}) { |
271 | 3.42k | size_t acc = 0; |
272 | 3.42k | size_t bits = 0; |
273 | 3.42k | constexpr size_t maxv = (1 << tobits) - 1; |
274 | 3.42k | constexpr size_t max_acc = (1 << (frombits + tobits - 1)) - 1; |
275 | 100k | while (it != end) { |
276 | 97.5k | int v = infn(*it); |
277 | 97.5k | if (v < 0) return false0 ; |
278 | 97.5k | acc = ((acc << frombits) | v) & max_acc; |
279 | 97.5k | bits += frombits; |
280 | 253k | while (bits >= tobits) { |
281 | 155k | bits -= tobits; |
282 | 155k | outfn((acc >> bits) & maxv); |
283 | 155k | } |
284 | 97.5k | ++it; |
285 | 97.5k | } |
286 | 3.42k | if (pad) { |
287 | 3.42k | if (bits) outfn((acc << (tobits - bits)) & maxv)2.05k ; |
288 | 3.42k | } else if (0 bits >= frombits0 || ((acc << (tobits - bits)) & maxv)0 ) { |
289 | 0 | return false; |
290 | 0 | } |
291 | 3.42k | return true; |
292 | 3.42k | } Unexecuted instantiation: bech32.cpp:_Z11ConvertBitsILi8ELi5ELb1EZ28bech32_roundtrip_fuzz_targetNSt3__14spanIKhLm18446744073709551615EEEE3$_0NS0_11__wrap_iterIPhEEN12_GLOBAL__N_111IntIdentityEEbT2_T3_SB_T4_ Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi8ELi5ELb1EZNK12_GLOBAL__N_118DestinationEncoderclERK19WitnessV0ScriptHashEUlhE_PKhNS0_11IntIdentityEEbT2_T3_SA_T4_ Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi8ELi5ELb1EZNK12_GLOBAL__N_118DestinationEncoderclERK16WitnessV0KeyHashEUlhE_PKhNS0_11IntIdentityEEbT2_T3_SA_T4_ Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi8ELi5ELb1EZNK12_GLOBAL__N_118DestinationEncoderclERK16WitnessV1TaprootEUlhE_PKhNS0_11IntIdentityEEbT2_T3_SA_T4_ Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi8ELi5ELb1EZNK12_GLOBAL__N_118DestinationEncoderclERK14WitnessUnknownEUlhE_NSt3__111__wrap_iterIPKhEENS0_11IntIdentityEEbT2_T3_SD_T4_ Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi5ELi8ELb0EZN12_GLOBAL__N_117DecodeDestinationERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERK12CChainParamsRS7_PNS1_6vectorIiNS5_IiEEEEE3$_0NS1_11__wrap_iterIPKhEENS0_11IntIdentityEEbT2_T3_SP_T4_ Unexecuted instantiation: strencodings.cpp:_Z11ConvertBitsILi8ELi6ELb1EZ12EncodeBase64NSt3__14spanIKhLm18446744073709551615EEEE3$_0NS0_11__wrap_iterIPS2_EEN12_GLOBAL__N_111IntIdentityEEbT2_T3_SB_T4_ Unexecuted instantiation: strencodings.cpp:_Z11ConvertBitsILi6ELi8ELb0EZ12DecodeBase64NSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEE3$_0PKcZ12DecodeBase64S4_E3$_1EbT2_T3_SA_T4_ strencodings.cpp:_Z11ConvertBitsILi8ELi5ELb1EZ12EncodeBase32NSt3__14spanIKhLm18446744073709551615EEEbE3$_0NS0_11__wrap_iterIPS2_EEN12_GLOBAL__N_111IntIdentityEEbT2_T3_SB_T4_ Line | Count | Source | 270 | 3.42k | bool ConvertBits(O outfn, It it, It end, I infn = {}) { | 271 | 3.42k | size_t acc = 0; | 272 | 3.42k | size_t bits = 0; | 273 | 3.42k | constexpr size_t maxv = (1 << tobits) - 1; | 274 | 3.42k | constexpr size_t max_acc = (1 << (frombits + tobits - 1)) - 1; | 275 | 100k | while (it != end) { | 276 | 97.5k | int v = infn(*it); | 277 | 97.5k | if (v < 0) return false0 ; | 278 | 97.5k | acc = ((acc << frombits) | v) & max_acc; | 279 | 97.5k | bits += frombits; | 280 | 253k | while (bits >= tobits) { | 281 | 155k | bits -= tobits; | 282 | 155k | outfn((acc >> bits) & maxv); | 283 | 155k | } | 284 | 97.5k | ++it; | 285 | 97.5k | } | 286 | 3.42k | if (pad) { | 287 | 3.42k | if (bits) outfn((acc << (tobits - bits)) & maxv)2.05k ; | 288 | 3.42k | } else if (0 bits >= frombits0 || ((acc << (tobits - bits)) & maxv)0 ) { | 289 | 0 | return false; | 290 | 0 | } | 291 | 3.42k | return true; | 292 | 3.42k | } |
Unexecuted instantiation: strencodings.cpp:_Z11ConvertBitsILi5ELi8ELb0EZ12DecodeBase32NSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEE3$_0PKcZ12DecodeBase32S4_E3$_1EbT2_T3_SA_T4_ |
293 | | |
294 | | /** |
295 | | * Converts the given character to its lowercase equivalent. |
296 | | * This function is locale independent. It only converts uppercase |
297 | | * characters in the standard 7-bit ASCII range. |
298 | | * This is a feature, not a limitation. |
299 | | * |
300 | | * @param[in] c the character to convert to lowercase. |
301 | | * @return the lowercase equivalent of c; or the argument |
302 | | * if no conversion is possible. |
303 | | */ |
304 | | constexpr char ToLower(char c) |
305 | 0 | { |
306 | 0 | return (c >= 'A' && c <= 'Z' ? (c - 'A') + 'a' : c); |
307 | 0 | } |
308 | | |
309 | | /** |
310 | | * Returns the lowercase equivalent of the given string. |
311 | | * This function is locale independent. It only converts uppercase |
312 | | * characters in the standard 7-bit ASCII range. |
313 | | * This is a feature, not a limitation. |
314 | | * |
315 | | * @param[in] str the string to convert to lowercase. |
316 | | * @returns lowercased equivalent of str |
317 | | */ |
318 | | std::string ToLower(std::string_view str); |
319 | | |
320 | | /** |
321 | | * Converts the given character to its uppercase equivalent. |
322 | | * This function is locale independent. It only converts lowercase |
323 | | * characters in the standard 7-bit ASCII range. |
324 | | * This is a feature, not a limitation. |
325 | | * |
326 | | * @param[in] c the character to convert to uppercase. |
327 | | * @return the uppercase equivalent of c; or the argument |
328 | | * if no conversion is possible. |
329 | | */ |
330 | | constexpr char ToUpper(char c) |
331 | 0 | { |
332 | 0 | return (c >= 'a' && c <= 'z' ? (c - 'a') + 'A' : c); |
333 | 0 | } |
334 | | |
335 | | /** |
336 | | * Returns the uppercase equivalent of the given string. |
337 | | * This function is locale independent. It only converts lowercase |
338 | | * characters in the standard 7-bit ASCII range. |
339 | | * This is a feature, not a limitation. |
340 | | * |
341 | | * @param[in] str the string to convert to uppercase. |
342 | | * @returns UPPERCASED EQUIVALENT OF str |
343 | | */ |
344 | | std::string ToUpper(std::string_view str); |
345 | | |
346 | | /** |
347 | | * Capitalizes the first character of the given string. |
348 | | * This function is locale independent. It only converts lowercase |
349 | | * characters in the standard 7-bit ASCII range. |
350 | | * This is a feature, not a limitation. |
351 | | * |
352 | | * @param[in] str the string to capitalize. |
353 | | * @returns string with the first letter capitalized. |
354 | | */ |
355 | | std::string Capitalize(std::string str); |
356 | | |
357 | | /** |
358 | | * Parse a string with suffix unit [k|K|m|M|g|G|t|T]. |
359 | | * Must be a whole integer, fractions not allowed (0.5t), no whitespace or +- |
360 | | * Lowercase units are 1000 base. Uppercase units are 1024 base. |
361 | | * Examples: 2m,27M,19g,41T |
362 | | * |
363 | | * @param[in] str the string to convert into bytes |
364 | | * @param[in] default_multiplier if no unit is found in str use this unit |
365 | | * @returns optional uint64_t bytes from str or nullopt |
366 | | * if ToIntegral is false, str is empty, trailing whitespace or overflow |
367 | | */ |
368 | | std::optional<uint64_t> ParseByteUnits(std::string_view str, ByteUnit default_multiplier); |
369 | | |
370 | | namespace util { |
371 | | /** consteval version of HexDigit() without the lookup table. */ |
372 | | consteval uint8_t ConstevalHexDigit(const char c) |
373 | | { |
374 | | if (c >= '0' && c <= '9') return c - '0'; |
375 | | if (c >= 'a' && c <= 'f') return c - 'a' + 0xa; |
376 | | |
377 | | throw "Only lowercase hex digits are allowed, for consistency"; |
378 | | } |
379 | | |
380 | | namespace detail { |
381 | | template <size_t N> |
382 | | struct Hex { |
383 | | std::array<std::byte, N / 2> bytes{}; |
384 | | consteval Hex(const char (&hex_str)[N]) |
385 | | // 2 hex digits required per byte + implicit null terminator |
386 | | requires(N % 2 == 1) |
387 | | { |
388 | | if (hex_str[N - 1]) throw "null terminator required"; |
389 | | for (std::size_t i = 0; i < bytes.size(); ++i) { |
390 | | bytes[i] = static_cast<std::byte>( |
391 | | (ConstevalHexDigit(hex_str[2 * i]) << 4) | |
392 | | ConstevalHexDigit(hex_str[2 * i + 1])); |
393 | | } |
394 | | } |
395 | | }; |
396 | | } // namespace detail |
397 | | |
398 | | /** |
399 | | * ""_hex is a compile-time user-defined literal returning a |
400 | | * `std::array<std::byte>`, equivalent to ParseHex(). Variants provided: |
401 | | * |
402 | | * - ""_hex_v: Returns `std::vector<std::byte>`, useful for heap allocation or |
403 | | * variable-length serialization. |
404 | | * |
405 | | * - ""_hex_u8: Returns `std::array<uint8_t>`, for cases where `std::byte` is |
406 | | * incompatible. |
407 | | * |
408 | | * - ""_hex_v_u8: Returns `std::vector<uint8_t>`, combining heap allocation with |
409 | | * `uint8_t`. |
410 | | * |
411 | | * @warning It could be necessary to use vector instead of array variants when |
412 | | * serializing, or vice versa, because vectors are assumed to be variable- |
413 | | * length and serialized with a size prefix, while arrays are considered fixed |
414 | | * length and serialized with no prefix. |
415 | | * |
416 | | * @warning It may be preferable to use vector variants to save stack space when |
417 | | * declaring local variables if hex strings are large. Alternatively variables |
418 | | * could be declared constexpr to avoid using stack space. |
419 | | * |
420 | | * @warning Avoid `uint8_t` variants when not necessary, as the codebase |
421 | | * migrates to use `std::byte` instead of `unsigned char` and `uint8_t`. |
422 | | * |
423 | | * @note One reason ""_hex uses `std::array` instead of `std::vector` like |
424 | | * ParseHex() does is because heap-based containers cannot cross the compile- |
425 | | * time/runtime barrier. |
426 | | */ |
427 | | inline namespace hex_literals { |
428 | | |
429 | | template <util::detail::Hex str> |
430 | 299k | constexpr auto operator""_hex() { return str.bytes; } _ZN4util12hex_literalsli4_hexITnNS_6detail3HexEXtlNS3_ILm131EEEtlNSt3__15arrayISt4byteLm65EEEtlA65_S7_LS7_4ELS7_103ELS7_138ELS7_253ELS7_176ELS7_254ELS7_85ELS7_72ELS7_39ELS7_25ELS7_103ELS7_241ELS7_166ELS7_113ELS7_48ELS7_183ELS7_16ELS7_92ELS7_214ELS7_168ELS7_40ELS7_224ELS7_57ELS7_9ELS7_166ELS7_121ELS7_98ELS7_224ELS7_234ELS7_31ELS7_97ELS7_222ELS7_182ELS7_73ELS7_246ELS7_188ELS7_63ELS7_76ELS7_239ELS7_56ELS7_196ELS7_243ELS7_85ELS7_4ELS7_229ELS7_30ELS7_193ELS7_18ELS7_222ELS7_92ELS7_56ELS7_77ELS7_247ELS7_186ELS7_11ELS7_141ELS7_87ELS7_138ELS7_76ELS7_112ELS7_43ELS7_107ELS7_241ELS7_29ELS7_95EEEEEEEDav Line | Count | Source | 430 | 249k | constexpr auto operator""_hex() { return str.bytes; } |
_ZN4util12hex_literalsli4_hexITnNS_6detail3HexEXtlNS3_ILm67EEEEEEEDav Line | Count | Source | 430 | 49.9k | constexpr auto operator""_hex() { return str.bytes; } |
Unexecuted instantiation: _ZN4util12hex_literalsli4_hexITnNS_6detail3HexEXtlNS3_ILm6109EEEtlNSt3__15arrayISt4byteLm3054EEEtlA3054_S7_LS7_1ELS7_0ELS7_0ELS7_0ELS7_144ELS7_240ELS7_169ELS7_241ELS7_16ELS7_112ELS7_47ELS7_128ELS7_130ELS7_25ELS7_235ELS7_234ELS7_17ELS7_115ELS7_5ELS7_96ELS7_66ELS7_167ELS7_20ELS7_186ELS7_213ELS7_27ELS7_145ELS7_108ELS7_182ELS7_128ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_82ELS7_117ELS7_40ELS7_149ELS7_88ELS7_245ELS7_28ELS7_153ELS7_102ELS7_105ELS7_148ELS7_4ELS7_174ELS7_34ELS7_148ELS7_115ELS7_12ELS7_60ELS7_159ELS7_155ELS7_218ELS7_83ELS7_82ELS7_60ELS7_229ELS7_14ELS7_155ELS7_149ELS7_229ELS7_88ELS7_218ELS7_47ELS7_219ELS7_38ELS7_27ELS7_77ELS7_76ELS7_134ELS7_4ELS7_27ELS7_26ELS7_177ELS7_191ELS7_147ELS7_9ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_255ELS7_255ELS7_255ELS7_255ELS7_7ELS7_4ELS7_76ELS7_134ELS7_4ELS7_27ELS7_1ELS7_70ELS7_255ELS7_255ELS7_255ELS7_255ELS7_1ELS7_0ELS7_242ELS7_5ELS7_42ELS7_1ELS7_0ELS7_0ELS7_0ELS7_67ELS7_65ELS7_4ELS7_225ELS7_143ELS7_122ELS7_251ELS7_228ELS7_114ELS7_21ELS7_128ELS7_232ELS7_30ELS7_132ELS7_20ELS7_252ELS7_140ELS7_36ELS7_215ELS7_207ELS7_172ELS7_242ELS7_84ELS7_187ELS7_92ELS7_123ELS7_148ELS7_148ELS7_80ELS7_195ELS7_233ELS7_151ELS7_194ELS7_220ELS7_18ELS7_66ELS7_72ELS7_122ELS7_129ELS7_105ELS7_80ELS7_123ELS7_99ELS7_30ELS7_179ELS7_119ELS7_31ELS7_43ELS7_66ELS7_84ELS7_131ELS7_251ELS7_19ELS7_16ELS7_44ELS7_78ELS7_181ELS7_216ELS7_88ELS7_238ELS7_242ELS7_96ELS7_254ELS7_112ELS7_251ELS7_250ELS7_224ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_150ELS7_96ELS7_140ELS7_203ELS7_175ELS7_161ELS7_106ELS7_186ELS7_218ELS7_144ELS7_39ELS7_128ELS7_218ELS7_77ELS7_195ELS7_93ELS7_175ELS7_215ELS7_175ELS7_5ELS7_250ELS7_13ELS7_160ELS7_140ELS7_248ELS7_51ELS7_87ELS7_95ELS7_140ELS7_249ELS7_232ELS7_54ELS7_0ELS7_0ELS7_0ELS7_0ELS7_74ELS7_73ELS7_48ELS7_70ELS7_2ELS7_33ELS7_0ELS7_218ELS7_178ELS7_72ELS7_137ELS7_33ELS7_60ELS7_175ELS7_67ELS7_174ELS7_106ELS7_220ELS7_65ELS7_207ELS7_28ELS7_147ELS7_150ELS7_192ELS7_130ELS7_64ELS7_193ELS7_153ELS7_245ELS7_34ELS7_90ELS7_207ELS7_69ELS7_65ELS7_99ELS7_48ELS7_253ELS7_125ELS7_189ELS7_2ELS7_33ELS7_0ELS7_254ELS7_55ELS7_144ELS7_14ELS7_6ELS7_68ELS7_191ELS7_87ELS7_68ELS7_147ELS7_160ELS7_127ELS7_197ELS7_237ELS7_186ELS7_6ELS7_219ELS7_192ELS7_124ELS7_49ELS7_27ELS7_148ELS7_117ELS7_32ELS7_194ELS7_213ELS7_20ELS7_188ELS7_87ELS7_37ELS7_220ELS7_180ELS7_1ELS7_255ELS7_255ELS7_255ELS7_255ELS7_1ELS7_0ELS7_242ELS7_5ELS7_42ELS7_1ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_241ELS7_93ELS7_25ELS7_33ELS7_245ELS7_46ELS7_64ELS7_7ELS7_177ELS7_70ELS7_223ELS7_166ELS7_15ELS7_54ELS7_158ELS7_210ELS7_252ELS7_57ELS7_60ELS7_226ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_251ELS7_118ELS7_108ELS7_18ELS7_136ELS7_69ELS7_140ELS7_43ELS7_175ELS7_207ELS7_236ELS7_129ELS7_228ELS7_139ELS7_36ELS7_217ELS7_142ELS7_199ELS7_6ELS7_222ELS7_107ELS7_138ELS7_247ELS7_196ELS7_227ELS7_194ELS7_148ELS7_25ELS7_191ELS7_172ELS7_181ELS7_109ELS7_0ELS7_0ELS7_0ELS7_0ELS7_140ELS7_73ELS7_48ELS7_70ELS7_2ELS7_33ELS7_0ELS7_242ELS7_104ELS7_186ELS7_22ELS7_92ELS7_224ELS7_173ELS7_46ELS7_109ELS7_147ELS7_240ELS7_137ELS7_207ELS7_205ELS7_55ELS7_133ELS7_222ELS7_92ELS7_150ELS7_59ELS7_181ELS7_234ELS7_107ELS7_140ELS7_27ELS7_35ELS7_241ELS7_206ELS7_62ELS7_81ELS7_123ELS7_159ELS7_2ELS7_33ELS7_0ELS7_218ELS7_124ELS7_15ELS7_33ELS7_173ELS7_198ELS7_196ELS7_1ELS7_136ELS7_127ELS7_43ELS7_253ELS7_25ELS7_34ELS7_241ELS7_29ELS7_118ELS7_21ELS7_156ELS7_188ELS7_89ELS7_127ELS7_189ELS7_117ELS7_106ELS7_35ELS7_220ELS7_187ELS7_0ELS7_244ELS7_215ELS7_41ELS7_1ELS7_65ELS7_4ELS7_43ELS7_78ELS7_134ELS7_37ELS7_169ELS7_97ELS7_39ELS7_130ELS7_105ELS7_21ELS7_165ELS7_177ELS7_9ELS7_133ELS7_38ELS7_54ELS7_173ELS7_13ELS7_167ELS7_83ELS7_201ELS7_225ELS7_213ELS7_96ELS7_106ELS7_80ELS7_72ELS7_12ELS7_208ELS7_196ELS7_15ELS7_31ELS7_139ELS7_141ELS7_137ELS7_130ELS7_53ELS7_229ELS7_113ELS7_254ELS7_147ELS7_87ELS7_217ELS7_236ELS7_132ELS7_43ELS7_196ELS7_187ELS7_161ELS7_130ELS7_125ELS7_170ELS7_244ELS7_222ELS7_6ELS7_215ELS7_24ELS7_68ELS7_208ELS7_5ELS7_119ELS7_7ELS7_150ELS7_106ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_128ELS7_150ELS7_152ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_105ELS7_99ELS7_144ELS7_117ELS7_49ELS7_219ELS7_114ELS7_208ELS7_237ELS7_26ELS7_12ELS7_251ELS7_71ELS7_28ELS7_203ELS7_99ELS7_146ELS7_52ELS7_70ELS7_243ELS7_136ELS7_172ELS7_128ELS7_214ELS7_227ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_240ELS7_104ELS7_139ELS7_161ELS7_192ELS7_209ELS7_206ELS7_24ELS7_44ELS7_122ELS7_246ELS7_116ELS7_30ELS7_2ELS7_101ELS7_140ELS7_125ELS7_77ELS7_252ELS7_211ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_2ELS7_196ELS7_2ELS7_151ELS7_247ELS7_48ELS7_221ELS7_123ELS7_90ELS7_153ELS7_86ELS7_126ELS7_184ELS7_210ELS7_123ELS7_120ELS7_117ELS7_143ELS7_96ELS7_117ELS7_7ELS7_197ELS7_34ELS7_146ELS7_208ELS7_45ELS7_64ELS7_49ELS7_137ELS7_91ELS7_82ELS7_242ELS7_255ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_33ELS7_0ELS7_247ELS7_237ELS7_253ELS7_75ELS7_10ELS7_172ELS7_64ELS7_78ELS7_91ELS7_171ELS7_79ELS7_211ELS7_136ELS7_158ELS7_12ELS7_108ELS7_65ELS7_170ELS7_141ELS7_14ELS7_111ELS7_161ELS7_34ELS7_49ELS7_111ELS7_104ELS7_237ELS7_221ELS7_10ELS7_101ELS7_1ELS7_57ELS7_2ELS7_32ELS7_91ELS7_9ELS7_204ELS7_139ELS7_45ELS7_86ELS7_225ELS7_205ELS7_31ELS7_127ELS7_47ELS7_175ELS7_214ELS7_10ELS7_18ELS7_158ELS7_217ELS7_69ELS7_4ELS7_196ELS7_172ELS7_123ELS7_220ELS7_103ELS7_181ELS7_111ELS7_230ELS7_117ELS7_18ELS7_101ELS7_139ELS7_62ELS7_1ELS7_65ELS7_4ELS7_115ELS7_32ELS7_18ELS7_203ELS7_150ELS7_42ELS7_250ELS7_144ELS7_211ELS7_27ELS7_37ELS7_216ELS7_251ELS7_14ELS7_50ELS7_201ELS7_78ELS7_81ELS7_58ELS7_183ELS7_161ELS7_120ELS7_5ELS7_193ELS7_76ELS7_164ELS7_195ELS7_66ELS7_62ELS7_24ELS7_180ELS7_251ELS7_93ELS7_14ELS7_103ELS7_104ELS7_65ELS7_115ELS7_60ELS7_184ELS7_58ELS7_186ELS7_249ELS7_117ELS7_132ELS7_92ELS7_159ELS7_111ELS7_42ELS7_128ELS7_151ELS7_183ELS7_208ELS7_79ELS7_73ELS7_8ELS7_177ELS7_131ELS7_104ELS7_214ELS7_252ELS7_45ELS7_104ELS7_236ELS7_255ELS7_255ELS7_255ELS7_255ELS7_202ELS7_80ELS7_101ELS7_255ELS7_150ELS7_23ELS7_203ELS7_203ELS7_164ELS7_94ELS7_178ELS7_55ELS7_38ELS7_223ELS7_100ELS7_152ELS7_169ELS7_185ELS7_202ELS7_254ELS7_212ELS7_245ELS7_76ELS7_186ELS7_185ELS7_210ELS7_39ELS7_176ELS7_3ELS7_93ELS7_222ELS7_251ELS7_0ELS7_0ELS7_0ELS7_0ELS7_138ELS7_71ELS7_48ELS7_68ELS7_2ELS7_32ELS7_104ELS7_1ELS7_3ELS7_98ELS7_161ELS7_60ELS7_127ELS7_153ELS7_25ELS7_250ELS7_131ELS7_43ELS7_45ELS7_238ELS7_78ELS7_120ELS7_143ELS7_97ELS7_246ELS7_245ELS7_211ELS7_68ELS7_167ELS7_194ELS7_160ELS7_218ELS7_106ELS7_231ELS7_64ELS7_96ELS7_86ELS7_88ELS7_2ELS7_32ELS7_6ELS7_209ELS7_175ELS7_82ELS7_91ELS7_154ELS7_20ELS7_163ELS7_92ELS7_0ELS7_59ELS7_120ELS7_183ELS7_43ELS7_213ELS7_151ELS7_56ELS7_205ELS7_103ELS7_111ELS7_132ELS7_93ELS7_31ELS7_243ELS7_252ELS7_37ELS7_4ELS7_158ELS7_1ELS7_0ELS7_54ELS7_20ELS7_1ELS7_65ELS7_4ELS7_115ELS7_32ELS7_18ELS7_203ELS7_150ELS7_42ELS7_250ELS7_144ELS7_211ELS7_27ELS7_37ELS7_216ELS7_251ELS7_14ELS7_50ELS7_201ELS7_78ELS7_81ELS7_58ELS7_183ELS7_161ELS7_120ELS7_5ELS7_193ELS7_76ELS7_164ELS7_195ELS7_66ELS7_62ELS7_24ELS7_180ELS7_251ELS7_93ELS7_14ELS7_103ELS7_104ELS7_65ELS7_115ELS7_60ELS7_184ELS7_58ELS7_186ELS7_249ELS7_117ELS7_132ELS7_92ELS7_159ELS7_111ELS7_42ELS7_128ELS7_151ELS7_183ELS7_208ELS7_79ELS7_73ELS7_8ELS7_177ELS7_131ELS7_104ELS7_214ELS7_252ELS7_45ELS7_104ELS7_236ELS7_255ELS7_255ELS7_255ELS7_255ELS7_1ELS7_0ELS7_30ELS7_196ELS7_17ELS7_2ELS7_0ELS7_0ELS7_0ELS7_67ELS7_65ELS7_4ELS7_105ELS7_171ELS7_65ELS7_129ELS7_236ELS7_235ELS7_40ELS7_152ELS7_91ELS7_155ELS7_78ELS7_137ELS7_92ELS7_19ELS7_250ELS7_94ELS7_104ELS7_216ELS7_87ELS7_97ELS7_183ELS7_238ELS7_227ELS7_17ELS7_219ELS7_90ELS7_221ELS7_239ELS7_118ELS7_250ELS7_134ELS7_33ELS7_134ELS7_81ELS7_52ELS7_162ELS7_33ELS7_189ELS7_1ELS7_242ELS7_142ELS7_201ELS7_153ELS7_158ELS7_227ELS7_224ELS7_33ELS7_230ELS7_7ELS7_102ELS7_233ELS7_209ELS7_243ELS7_69ELS7_140ELS7_17ELS7_95ELS7_178ELS7_134ELS7_80ELS7_96ELS7_95ELS7_17ELS7_201ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_205ELS7_175ELS7_47ELS7_117ELS7_142ELS7_145ELS7_197ELS7_20ELS7_101ELS7_94ELS7_45ELS7_197ELS7_6ELS7_51ELS7_209ELS7_228ELS7_200ELS7_73ELS7_137ELS7_248ELS7_170ELS7_144ELS7_160ELS7_219ELS7_200ELS7_131ELS7_240ELS7_210ELS7_62ELS7_213ELS7_194ELS7_250ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_32ELS7_122ELS7_181ELS7_27ELS7_230ELS7_241ELS7_42ELS7_25ELS7_98ELS7_186ELS7_10ELS7_170ELS7_242ELS7_74ELS7_32ELS7_224ELS7_182ELS7_155ELS7_39ELS7_169ELS7_79ELS7_172ELS7_90ELS7_223ELS7_69ELS7_170ELS7_125ELS7_45ELS7_24ELS7_255ELS7_217ELS7_35ELS7_97ELS7_2ELS7_33ELS7_0ELS7_134ELS7_174ELS7_114ELS7_139ELS7_55ELS7_14ELS7_83ELS7_41ELS7_238ELS7_173ELS7_154ELS7_204ELS7_216ELS7_128ELS7_208ELS7_203ELS7_7ELS7_10ELS7_234ELS7_12ELS7_150ELS7_37ELS7_95ELS7_174ELS7_108ELS7_79ELS7_29ELS7_220ELS7_206ELS7_31ELS7_213ELS7_110ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_64ELS7_75ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_43ELS7_107ELS7_167ELS7_201ELS7_215ELS7_150ELS7_183ELS7_94ELS7_239ELS7_121ELS7_66ELS7_252ELS7_146ELS7_136ELS7_237ELS7_211ELS7_124ELS7_50ELS7_245ELS7_195ELS7_136ELS7_172ELS7_0ELS7_45ELS7_49ELS7_1ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_27ELS7_239ELS7_186ELS7_12ELS7_220ELS7_26ELS7_213ELS7_101ELS7_41ELS7_55ELS7_24ELS7_100ELS7_217ELS7_246ELS7_203ELS7_4ELS7_47ELS7_170ELS7_6ELS7_181ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_180ELS7_164ELS7_118ELS7_3ELS7_231ELS7_27ELS7_97ELS7_188ELS7_51ELS7_38ELS7_239ELS7_217ELS7_1ELS7_17ELS7_191ELS7_2ELS7_210ELS7_245ELS7_73ELS7_176ELS7_103ELS7_244ELS7_196ELS7_168ELS7_250ELS7_24ELS7_59ELS7_87ELS7_160ELS7_248ELS7_0ELS7_203ELS7_1ELS7_0ELS7_0ELS7_0ELS7_138ELS7_71ELS7_48ELS7_68ELS7_2ELS7_32ELS7_23ELS7_124ELS7_55ELS7_249ELS7_165ELS7_5ELS7_195ELS7_241ELS7_161ELS7_240ELS7_206ELS7_45ELS7_167ELS7_119ELS7_195ELS7_57ELS7_189ELS7_131ELS7_57ELS7_255ELS7_160ELS7_44ELS7_124ELS7_180ELS7_31ELS7_10ELS7_88ELS7_4ELS7_244ELS7_115ELS7_201ELS7_35ELS7_2ELS7_32ELS7_88ELS7_91ELS7_37ELS7_162ELS7_238ELS7_128ELS7_235ELS7_89ELS7_41ELS7_46ELS7_82ELS7_185ELS7_135ELS7_218ELS7_217ELS7_42ELS7_203ELS7_12ELS7_100ELS7_236ELS7_237ELS7_146ELS7_237ELS7_158ELS7_225ELS7_5ELS7_173ELS7_21ELS7_60ELS7_219ELS7_18ELS7_208ELS7_1ELS7_65ELS7_4ELS7_67ELS7_189ELS7_68ELS7_246ELS7_131ELS7_70ELS7_126ELS7_84ELS7_157ELS7_174ELS7_125ELS7_32ELS7_209ELS7_215ELS7_156ELS7_189ELS7_182ELS7_223ELS7_152ELS7_92ELS7_110ELS7_156ELS7_2ELS7_156ELS7_141ELS7_12ELS7_108ELS7_180ELS7_108ELS7_193ELS7_164ELS7_211ELS7_207ELS7_121ELS7_35ELS7_197ELS7_2ELS7_27ELS7_39ELS7_247ELS7_160ELS7_181ELS7_98ELS7_173ELS7_161ELS7_19ELS7_188ELS7_133ELS7_213ELS7_253ELS7_165ELS7_161ELS7_180ELS7_30ELS7_135ELS7_254ELS7_110ELS7_136ELS7_2ELS7_129ELS7_124ELS7_246ELS7_153ELS7_150ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_128ELS7_101ELS7_20ELS7_6ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_85ELS7_5ELS7_97ELS7_72ELS7_89ELS7_100ELS7_58ELS7_183ELS7_181ELS7_71ELS7_205ELS7_127ELS7_31ELS7_94ELS7_126ELS7_42ELS7_18ELS7_50ELS7_45ELS7_55ELS7_136ELS7_172ELS7_0ELS7_170ELS7_2ELS7_113ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_234ELS7_71ELS7_32ELS7_167ELS7_165ELS7_47ELS7_193ELS7_102ELS7_197ELS7_95ELS7_242ELS7_41ELS7_142ELS7_7ELS7_186ELS7_247ELS7_10ELS7_230ELS7_126ELS7_27ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_5ELS7_134ELS7_198ELS7_44ELS7_214ELS7_2ELS7_210ELS7_25ELS7_187ELS7_96ELS7_237ELS7_177ELS7_74ELS7_62ELS7_32ELS7_77ELS7_224ELS7_112ELS7_81ELS7_118ELS7_249ELS7_2ELS7_47ELS7_228ELS7_154ELS7_83ELS7_128ELS7_84ELS7_251ELS7_20ELS7_171ELS7_180ELS7_158ELS7_1ELS7_0ELS7_0ELS7_0ELS7_140ELS7_73ELS7_48ELS7_70ELS7_2ELS7_33ELS7_0ELS7_242ELS7_188ELS7_42ELS7_186ELS7_37ELS7_52ELS7_190ELS7_203ELS7_223ELS7_6ELS7_46ELS7_185ELS7_147ELS7_133ELS7_58ELS7_66ELS7_187ELS7_188ELS7_40ELS7_32ELS7_131ELS7_208ELS7_218ELS7_249ELS7_180ELS7_181ELS7_133ELS7_189ELS7_64ELS7_26ELS7_168ELS7_201ELS7_2ELS7_33ELS7_0ELS7_177ELS7_215ELS7_253ELS7_126ELS7_224ELS7_185ELS7_86ELS7_0ELS7_219ELS7_133ELS7_53ELS7_187ELS7_243ELS7_49ELS7_177ELS7_158ELS7_237ELS7_141ELS7_150ELS7_31ELS7_122ELS7_142ELS7_84ELS7_21ELS7_156ELS7_83ELS7_103ELS7_93ELS7_95ELS7_105ELS7_223ELS7_140ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_3ELS7_173ELS7_14ELS7_88ELS7_204ELS7_218ELS7_195ELS7_223ELS7_157ELS7_194ELS7_138ELS7_33ELS7_139ELS7_207ELS7_111ELS7_25ELS7_151ELS7_176ELS7_169ELS7_51ELS7_6ELS7_250ELS7_170ELS7_75ELS7_58ELS7_40ELS7_174ELS7_131ELS7_68ELS7_123ELS7_33ELS7_121ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_33ELS7_0ELS7_190ELS7_18ELS7_178ELS7_147ELS7_113ELS7_121ELS7_218ELS7_136ELS7_89ELS7_158ELS7_39ELS7_187ELS7_49ELS7_195ELS7_82ELS7_80ELS7_151ELS7_160ELS7_124ELS7_219ELS7_82ELS7_66ELS7_45ELS7_22ELS7_91ELS7_60ELS7_162ELS7_242ELS7_2ELS7_15ELS7_252ELS7_247ELS7_2ELS7_32ELS7_9ELS7_113ELS7_181ELS7_31ELS7_133ELS7_58ELS7_83ELS7_214ELS7_68ELS7_235ELS7_174ELS7_158ELS7_200ELS7_243ELS7_81ELS7_46ELS7_68ELS7_43ELS7_27ELS7_203ELS7_108ELS7_49ELS7_90ELS7_91ELS7_73ELS7_29ELS7_17ELS7_157ELS7_16ELS7_98ELS7_76ELS7_131ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_42ELS7_207ELS7_202ELS7_182ELS7_41ELS7_187ELS7_200ELS7_104ELS7_87ELS7_146ELS7_96ELS7_55ELS7_98ELS7_201ELS7_33ELS7_88ELS7_0ELS7_48ELS7_186ELS7_20ELS7_74ELS7_245ELS7_83ELS7_210ELS7_113ELS7_113ELS7_106ELS7_149ELS7_8ELS7_158ELS7_16ELS7_123ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_33ELS7_0ELS7_250ELS7_87ELS7_154ELS7_132ELS7_10ELS7_194ELS7_88ELS7_135ELS7_19ELS7_101ELS7_221ELS7_72ELS7_205ELS7_117ELS7_82ELS7_249ELS7_108ELS7_142ELS7_234ELS7_105ELS7_189ELS7_0ELS7_216ELS7_79ELS7_5ELS7_178ELS7_131ELS7_160ELS7_218ELS7_179ELS7_17ELS7_225ELS7_2ELS7_32ELS7_126ELS7_60ELS7_14ELS7_233ELS7_35ELS7_72ELS7_20ELS7_207ELS7_187ELS7_27ELS7_101ELS7_155ELS7_131ELS7_103ELS7_22ELS7_24ELS7_244ELS7_90ELS7_188ELS7_19ELS7_38ELS7_185ELS7_237ELS7_204ELS7_119ELS7_213ELS7_82ELS7_164ELS7_242ELS7_168ELS7_5ELS7_192ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_220ELS7_220ELS7_96ELS7_35ELS7_187ELS7_201ELS7_148ELS7_74ELS7_101ELS7_141ELS7_220ELS7_88ELS7_142ELS7_97ELS7_234ELS7_203ELS7_115ELS7_125ELS7_223ELS7_10ELS7_60ELS7_210ELS7_79ELS7_17ELS7_59ELS7_90ELS7_134ELS7_52ELS7_197ELS7_23ELS7_252ELS7_210ELS7_0ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_33ELS7_0ELS7_141ELS7_109ELS7_247ELS7_49ELS7_223ELS7_93ELS7_50ELS7_38ELS7_121ELS7_84ELS7_189ELS7_125ELS7_45ELS7_218ELS7_35ELS7_2ELS7_183ELS7_76ELS7_108ELS7_42ELS7_106ELS7_165ELS7_192ELS7_202ELS7_100ELS7_236ELS7_186ELS7_188ELS7_26ELS7_240ELS7_60ELS7_117ELS7_2ELS7_32ELS7_16ELS7_229ELS7_92ELS7_87ELS7_29ELS7_101ELS7_218ELS7_119ELS7_1ELS7_174ELS7_45ELS7_161ELS7_149ELS7_108ELS7_68ELS7_45ELS7_248ELS7_27ELS7_191ELS7_7ELS7_108ELS7_219ELS7_172ELS7_37ELS7_19ELS7_63ELS7_153ELS7_217ELS7_138ELS7_158ELS7_211ELS7_76ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_225ELS7_85ELS7_87ELS7_205ELS7_92ELS7_226ELS7_88ELS7_244ELS7_121ELS7_223ELS7_214ELS7_220ELS7_101ELS7_20ELS7_237ELS7_246ELS7_215ELS7_237ELS7_91ELS7_33ELS7_252ELS7_250ELS7_74ELS7_3ELS7_143ELS7_214ELS7_159ELS7_6ELS7_184ELS7_58ELS7_199ELS7_110ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_32ELS7_35ELS7_179ELS7_224ELS7_171ELS7_7ELS7_30ELS7_177ELS7_29ELS7_226ELS7_235ELS7_28ELS7_195ELS7_166ELS7_114ELS7_97ELS7_184ELS7_102ELS7_248ELS7_107ELS7_246ELS7_134ELS7_125ELS7_69ELS7_88ELS7_22ELS7_95ELS7_124ELS7_140ELS7_138ELS7_202ELS7_45ELS7_134ELS7_2ELS7_33ELS7_0ELS7_220ELS7_110ELS7_31ELS7_83ELS7_169ELS7_29ELS7_227ELS7_239ELS7_232ELS7_246ELS7_53ELS7_18ELS7_133ELS7_8ELS7_17ELS7_242ELS7_98ELS7_132ELS7_182ELS7_47ELS7_133ELS7_12ELS7_112ELS7_202ELS7_115ELS7_237ELS7_93ELS7_232ELS7_119ELS7_31ELS7_180ELS7_81ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_1ELS7_64ELS7_75ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_43ELS7_107ELS7_167ELS7_201ELS7_215ELS7_150ELS7_183ELS7_94ELS7_239ELS7_121ELS7_66ELS7_252ELS7_146ELS7_136ELS7_237ELS7_211ELS7_124ELS7_50ELS7_245ELS7_195ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_102ELS7_215ELS7_87ELS7_113ELS7_99ELS7_201ELS7_50ELS7_180ELS7_249ELS7_105ELS7_12ELS7_166ELS7_168ELS7_11ELS7_110ELS7_78ELS7_176ELS7_1ELS7_240ELS7_162ELS7_250ELS7_144ELS7_35ELS7_223ELS7_85ELS7_149ELS7_96ELS7_42ELS7_174ELS7_150ELS7_237ELS7_141ELS7_0ELS7_0ELS7_0ELS7_0ELS7_138ELS7_71ELS7_48ELS7_68ELS7_2ELS7_32ELS7_38ELS7_43ELS7_66ELS7_84ELS7_99ELS7_2ELS7_223ELS7_182ELS7_84ELS7_162ELS7_41ELS7_206ELS7_252ELS7_134ELS7_67ELS7_43ELS7_137ELS7_98ELS7_143ELS7_242ELS7_89ELS7_220ELS7_135ELS7_237ELS7_209ELS7_21ELS7_69ELS7_53ELS7_177ELS7_106ELS7_103ELS7_225ELS7_2ELS7_32ELS7_123ELS7_70ELS7_52ELS7_192ELS7_32ELS7_169ELS7_124ELS7_62ELS7_123ELS7_189ELS7_13ELS7_77ELS7_25ELS7_218ELS7_106ELS7_162ELS7_38ELS7_154ELS7_217ELS7_221ELS7_237ELS7_64ELS7_38ELS7_232ELS7_150ELS7_178ELS7_19ELS7_215ELS7_60ELS7_164ELS7_182ELS7_63ELS7_1ELS7_65ELS7_4ELS7_151ELS7_155ELS7_130ELS7_208ELS7_34ELS7_38ELS7_179ELS7_164ELS7_89ELS7_117ELS7_35ELS7_132ELS7_87ELS7_84ELS7_212ELS7_79ELS7_19ELS7_99ELS7_158ELS7_59ELS7_242ELS7_223ELS7_94ELS7_130ELS7_198ELS7_170ELS7_178ELS7_189ELS7_199ELS7_150ELS7_135ELS7_54ELS7_139ELS7_1ELS7_177ELS7_171ELS7_139ELS7_25ELS7_135ELS7_90ELS7_227ELS7_201ELS7_13ELS7_102ELS7_26ELS7_61ELS7_10ELS7_51ELS7_22ELS7_29ELS7_171ELS7_41ELS7_147ELS7_78ELS7_222ELS7_179ELS7_106ELS7_160ELS7_25ELS7_118ELS7_190ELS7_59ELS7_175ELS7_138ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_64ELS7_75ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_72ELS7_84ELS7_230ELS7_149ELS7_160ELS7_42ELS7_240ELS7_174ELS7_172ELS7_184ELS7_35ELS7_204ELS7_188ELS7_39ELS7_33ELS7_52ELS7_86ELS7_30ELS7_10ELS7_22ELS7_136ELS7_172ELS7_64ELS7_66ELS7_15ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_171ELS7_238ELS7_147ELS7_55ELS7_109ELS7_107ELS7_55ELS7_181ELS7_194ELS7_148ELS7_6ELS7_85ELS7_166ELS7_252ELS7_175ELS7_28ELS7_142ELS7_116ELS7_35ELS7_121ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_78ELS7_63ELS7_142ELS7_242ELS7_233ELS7_19ELS7_73ELS7_169ELS7_5ELS7_156ELS7_180ELS7_240ELS7_30ELS7_84ELS7_171ELS7_37ELS7_151ELS7_193ELS7_56ELS7_113ELS7_97ELS7_211ELS7_218ELS7_137ELS7_145ELS7_159ELS7_126ELS7_166ELS7_172ELS7_219ELS7_179ELS7_113ELS7_1ELS7_0ELS7_0ELS7_0ELS7_140ELS7_73ELS7_48ELS7_70ELS7_2ELS7_33ELS7_0ELS7_129ELS7_243ELS7_24ELS7_52ELS7_113ELS7_165ELS7_202ELS7_34ELS7_48ELS7_124ELS7_8ELS7_0ELS7_34ELS7_111ELS7_62ELS7_249ELS7_195ELS7_83ELS7_6ELS7_158ELS7_7ELS7_115ELS7_172ELS7_118ELS7_187ELS7_88ELS7_6ELS7_84ELS7_213ELS7_106ELS7_165ELS7_35ELS7_2ELS7_33ELS7_0ELS7_212ELS7_197ELS7_100ELS7_101ELS7_189ELS7_192ELS7_105ELS7_6ELS7_8ELS7_70ELS7_244ELS7_251ELS7_242ELS7_246ELS7_178ELS7_5ELS7_32ELS7_178ELS7_168ELS7_11ELS7_8ELS7_177ELS7_104ELS7_179ELS7_30ELS7_102ELS7_221ELS7_185ELS7_198ELS7_148ELS7_226ELS7_64ELS7_1ELS7_65ELS7_4ELS7_151ELS7_108ELS7_121ELS7_132ELS7_142ELS7_24ELS7_37ELS7_22ELS7_18ELS7_248ELS7_148ELS7_8ELS7_117ELS7_178ELS7_176ELS7_141ELS7_6ELS7_230ELS7_220ELS7_115ELS7_185ELS7_132ELS7_14ELS7_136ELS7_96ELS7_192ELS7_102ELS7_183ELS7_232ELS7_116ELS7_50ELS7_196ELS7_119ELS7_233ELS7_165ELS7_154ELS7_69ELS7_62ELS7_113ELS7_230ELS7_215ELS7_109ELS7_95ELS7_227ELS7_64ELS7_88ELS7_184ELS7_0ELS7_160ELS7_152ELS7_252ELS7_23ELS7_64ELS7_206ELS7_48ELS7_18ELS7_232ELS7_252ELS7_138ELS7_0ELS7_201ELS7_106ELS7_249ELS7_102ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_192ELS7_225ELS7_228ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_65ELS7_52ELS7_231ELS7_90ELS7_111ELS7_203ELS7_96ELS7_66ELS7_3ELS7_74ELS7_171ELS7_94ELS7_24ELS7_87ELS7_12ELS7_241ELS7_248ELS7_68ELS7_245ELS7_71ELS7_136ELS7_172ELS7_64ELS7_75ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_43ELS7_107ELS7_167ELS7_201ELS7_215ELS7_150ELS7_183ELS7_94ELS7_239ELS7_121ELS7_66ELS7_252ELS7_146ELS7_136ELS7_237ELS7_211ELS7_124ELS7_50ELS7_245ELS7_195ELS7_136ELS7_172EEEEEEEDav Unexecuted instantiation: _ZN4util12hex_literalsli4_hexITnNS_6detail3HexEXtlNS3_ILm337EEEtlNSt3__15arrayISt4byteLm168EEEtlA168_S7_LS7_96ELS7_1ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_255ELS7_255ELS7_255ELS7_127ELS7_0ELS7_0ELS7_0ELS7_0ELS7_255ELS7_255ELS7_255ELS7_127ELS7_254ELS7_255ELS7_255ELS7_127ELS7_1ELS7_255ELS7_255ELS7_255ELS7_127ELS7_0ELS7_0ELS7_0ELS7_0ELS7_255ELS7_255ELS7_255ELS7_127ELS7_0ELS7_255ELS7_255ELS7_255ELS7_127ELS7_0ELS7_47ELS7_85ELS7_82ELS7_71ELS7_69ELS7_78ELS7_84ELS7_58ELS7_32ELS7_65ELS7_108ELS7_101ELS7_114ELS7_116ELS7_32ELS7_107ELS7_101ELS7_121ELS7_32ELS7_99ELS7_111ELS7_109ELS7_112ELS7_114ELS7_111ELS7_109ELS7_105ELS7_115ELS7_101ELS7_100ELS7_44ELS7_32ELS7_117ELS7_112ELS7_103ELS7_114ELS7_97ELS7_100ELS7_101ELS7_32ELS7_114ELS7_101ELS7_113ELS7_117ELS7_105ELS7_114ELS7_101ELS7_100ELS7_0ELS7_70ELS7_48ELS7_68ELS7_2ELS7_32ELS7_101ELS7_63ELS7_235ELS7_214ELS7_65ELS7_15ELS7_71ELS7_15ELS7_107ELS7_174ELS7_17ELS7_202ELS7_209ELS7_156ELS7_72ELS7_65ELS7_59ELS7_236ELS7_177ELS7_172ELS7_44ELS7_23ELS7_249ELS7_8ELS7_253ELS7_15ELS7_213ELS7_59ELS7_220ELS7_58ELS7_189ELS7_82ELS7_2ELS7_32ELS7_109ELS7_14ELS7_156ELS7_150ELS7_254ELS7_136ELS7_212ELS7_160ELS7_240ELS7_30ELS7_217ELS7_222ELS7_218ELS7_226ELS7_182ELS7_249ELS7_224ELS7_13ELS7_169ELS7_76ELS7_173ELS7_15ELS7_236ELS7_170ELS7_230ELS7_110ELS7_207ELS7_104ELS7_155ELS7_247ELS7_27ELS7_80EEEEEEEDav |
431 | | |
432 | | template <util::detail::Hex str> |
433 | 0 | constexpr auto operator""_hex_u8() { return std::bit_cast<std::array<uint8_t, str.bytes.size()>>(str.bytes); } |
434 | | |
435 | | template <util::detail::Hex str> |
436 | | constexpr auto operator""_hex_v() { return std::vector<std::byte>{str.bytes.begin(), str.bytes.end()}; } |
437 | | |
438 | | template <util::detail::Hex str> |
439 | 49.9k | inline auto operator""_hex_v_u8() { return std::vector<uint8_t>{UCharCast(str.bytes.data()), UCharCast(str.bytes.data() + str.bytes.size())}; } |
440 | | |
441 | | } // inline namespace hex_literals |
442 | | } // namespace util |
443 | | |
444 | | #endif // BITCOIN_UTIL_STRENCODINGS_H |