diff --git a/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md b/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md index 019e1f3ff3760..5475eeecea2a3 100644 --- a/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md +++ b/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md @@ -21,6 +21,12 @@ operation touch only few resources once it contains enough keys +TODO: all iterator functions are public(friend) for now, so that they can be modified in a +backward incompatible way. +They are waiting for Move improvement that will allow references to be part of the struct +Allowing cleaner iterator APIs + + - [Struct `Node`](#0x1_big_ordered_map_Node) - [Enum `Child`](#0x1_big_ordered_map_Child) - [Enum `Iterator`](#0x1_big_ordered_map_Iterator) @@ -345,51 +351,51 @@ The BigOrderedMap data structure. ## Constants - + -Internal errors. +Trying to do an operation on an Iterator that would go out of bounds -
const EINTERNAL_INVARIANT_BROKEN: u64 = 20;
+const EITER_OUT_OF_BOUNDS: u64 = 3;
-
+
+Map key already exists
-const NULL_INDEX: u64 = 0;
+const EKEY_ALREADY_EXISTS: u64 = 1;
-
+
-Trying to do an operation on an Iterator that would go out of bounds
+Map key is not found
-const EITER_OUT_OF_BOUNDS: u64 = 3;
+const EKEY_NOT_FOUND: u64 = 2;
-
+
-Map key already exists
+Internal errors.
-const EKEY_ALREADY_EXISTS: u64 = 1;
+const EINTERNAL_INVARIANT_BROKEN: u64 = 20;
-
+
-Map key is not found
-const EKEY_NOT_FOUND: u64 = 2;
+const NULL_INDEX: u64 = 0;
@@ -700,7 +706,7 @@ Returns an iterator pointing to the first element that is greater or equal to th
key, or an end iterator if such element doesn't exist.
-public fun lower_bound<K: copy, drop, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>, key: &K): big_ordered_map::Iterator<K>
+public(friend) fun lower_bound<K: copy, drop, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>, key: &K): big_ordered_map::Iterator<K>
@@ -709,7 +715,7 @@ key, or an end iterator if such element doesn't exist.
Implementation
-public fun lower_bound<K: drop + copy + store, V: store>(self: &BigOrderedMap<K, V>, key: &K): Iterator<K> {
+public(friend) fun lower_bound<K: drop + copy + store, V: store>(self: &BigOrderedMap<K, V>, key: &K): Iterator<K> {
let leaf = self.find_leaf(key);
if (leaf == NULL_INDEX) {
return self.new_end_iter()
@@ -740,7 +746,7 @@ Returns an iterator pointing to the element that equals to the provided key, or
iterator if the key is not found.
-public fun find<K: copy, drop, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>, key: &K): big_ordered_map::Iterator<K>
+public(friend) fun find<K: copy, drop, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>, key: &K): big_ordered_map::Iterator<K>
@@ -749,7 +755,7 @@ iterator if the key is not found.
Implementation
-public fun find<K: drop + copy + store, V: store>(self: &BigOrderedMap<K, V>, key: &K): Iterator<K> {
+public(friend) fun find<K: drop + copy + store, V: store>(self: &BigOrderedMap<K, V>, key: &K): Iterator<K> {
let lower_bound = self.lower_bound(key);
if (lower_bound.iter_is_end(self)) {
lower_bound
@@ -863,7 +869,7 @@ Returns a mutable reference to the element with its key at the given index, abor
Return the begin iterator.
-public fun new_begin_iter<K: copy, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
+public(friend) fun new_begin_iter<K: copy, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
@@ -872,7 +878,7 @@ Return the begin iterator.
Implementation
-public fun new_begin_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): Iterator<K> {
+public(friend) fun new_begin_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): Iterator<K> {
if (self.is_empty()) {
return Iterator::End;
};
@@ -896,7 +902,7 @@ Return the begin iterator.
Return the end iterator.
-public fun new_end_iter<K: copy, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
+public(friend) fun new_end_iter<K: copy, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
@@ -905,7 +911,7 @@ Return the end iterator.
Implementation
-public fun new_end_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): Iterator<K> {
+public(friend) fun new_end_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): Iterator<K> {
Iterator::End
}
@@ -920,7 +926,7 @@ Return the end iterator.
-public fun iter_is_begin<K: store, V: store>(self: &big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): bool
+public(friend) fun iter_is_begin<K: store, V: store>(self: &big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): bool
@@ -929,7 +935,7 @@ Return the end iterator.
Implementation
-public fun iter_is_begin<K: store, V: store>(self: &Iterator<K>, map: &BigOrderedMap<K, V>): bool {
+public(friend) fun iter_is_begin<K: store, V: store>(self: &Iterator<K>, map: &BigOrderedMap<K, V>): bool {
if (self is Iterator::End<K>) {
map.is_empty()
} else {
@@ -948,7 +954,7 @@ Return the end iterator.
-public fun iter_is_end<K: store, V: store>(self: &big_ordered_map::Iterator<K>, _map: &big_ordered_map::BigOrderedMap<K, V>): bool
+public(friend) fun iter_is_end<K: store, V: store>(self: &big_ordered_map::Iterator<K>, _map: &big_ordered_map::BigOrderedMap<K, V>): bool
@@ -957,7 +963,7 @@ Return the end iterator.
Implementation
-public fun iter_is_end<K: store, V: store>(self: &Iterator<K>, _map: &BigOrderedMap<K, V>): bool {
+public(friend) fun iter_is_end<K: store, V: store>(self: &Iterator<K>, _map: &BigOrderedMap<K, V>): bool {
self is Iterator::End<K>
}
@@ -973,7 +979,7 @@ Return the end iterator.
Returns the key of the given iterator.
-public fun iter_get_key<K>(self: &big_ordered_map::Iterator<K>): &K
+public(friend) fun iter_get_key<K>(self: &big_ordered_map::Iterator<K>): &K
@@ -982,7 +988,7 @@ Returns the key of the given iterator.
Implementation
-public fun iter_get_key<K>(self: &Iterator<K>): &K {
+public(friend) fun iter_get_key<K>(self: &Iterator<K>): &K {
assert!(!(self is Iterator::End<K>), error::invalid_argument(EITER_OUT_OF_BOUNDS));
&self.key
}
@@ -1000,7 +1006,7 @@ Returns the next iterator, or none if already at the end iterator.
Requires the map is not changed after the input iterator is generated.
-public fun iter_next<K: copy, drop, store, V: store>(self: big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
+public(friend) fun iter_next<K: copy, drop, store, V: store>(self: big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
@@ -1009,7 +1015,7 @@ Requires the map is not changed after the input iterator is generated.
Implementation
-public fun iter_next<K: drop + copy + store, V: store>(self: Iterator<K>, map: &BigOrderedMap<K, V>): Iterator<K> {
+public(friend) fun iter_next<K: drop + copy + store, V: store>(self: Iterator<K>, map: &BigOrderedMap<K, V>): Iterator<K> {
assert!(!(self is Iterator::End<K>), error::invalid_argument(EITER_OUT_OF_BOUNDS));
let node_index = self.node_index;
@@ -1049,7 +1055,7 @@ Returns the previous iterator, or none if already at the begin iterator.
Requires the map is not changed after the input iterator is generated.
-public fun iter_prev<K: copy, drop, store, V: store>(self: big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
+public(friend) fun iter_prev<K: copy, drop, store, V: store>(self: big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
@@ -1058,7 +1064,7 @@ Requires the map is not changed after the input iterator is generated.
Implementation
-public fun iter_prev<K: drop + copy + store, V: store>(self: Iterator<K>, map: &BigOrderedMap<K, V>): Iterator<K> {
+public(friend) fun iter_prev<K: drop + copy + store, V: store>(self: Iterator<K>, map: &BigOrderedMap<K, V>): Iterator<K> {
let prev_index = if (self is Iterator::End<K>) {
map.max_leaf_index
} else {
diff --git a/aptos-move/framework/aptos-stdlib/sources/data_structures/big_ordered_map.move b/aptos-move/framework/aptos-stdlib/sources/data_structures/big_ordered_map.move
index 8daab94747b72..c406edeb109a1 100644
--- a/aptos-move/framework/aptos-stdlib/sources/data_structures/big_ordered_map.move
+++ b/aptos-move/framework/aptos-stdlib/sources/data_structures/big_ordered_map.move
@@ -14,6 +14,12 @@
/// operation touch only few resources
/// * it allows for parallelism for keys that are not close to each other,
/// once it contains enough keys
+///
+///
+/// TODO: all iterator functions are public(friend) for now, so that they can be modified in a
+/// backward incompatible way.
+/// They are waiting for Move improvement that will allow references to be part of the struct
+/// Allowing cleaner iterator APIs
module aptos_std::big_ordered_map {
use std::error;
use std::vector;
@@ -218,7 +224,7 @@ module aptos_std::big_ordered_map {
/// Returns an iterator pointing to the first element that is greater or equal to the provided
/// key, or an end iterator if such element doesn't exist.
- public fun lower_bound(self: &BigOrderedMap, key: &K): Iterator {
+ public(friend) fun lower_bound(self: &BigOrderedMap, key: &K): Iterator {
let leaf = self.find_leaf(key);
if (leaf == NULL_INDEX) {
return self.new_end_iter()
@@ -238,7 +244,7 @@ module aptos_std::big_ordered_map {
/// Returns an iterator pointing to the element that equals to the provided key, or an end
/// iterator if the key is not found.
- public fun find(self: &BigOrderedMap, key: &K): Iterator {
+ public(friend) fun find(self: &BigOrderedMap, key: &K): Iterator {
let lower_bound = self.lower_bound(key);
if (lower_bound.iter_is_end(self)) {
lower_bound
@@ -283,7 +289,7 @@ module aptos_std::big_ordered_map {
// ========================= Iterator functions ===========================
/// Return the begin iterator.
- public fun new_begin_iter(self: &BigOrderedMap): Iterator {
+ public(friend) fun new_begin_iter(self: &BigOrderedMap): Iterator {
if (self.is_empty()) {
return Iterator::End;
};
@@ -296,12 +302,12 @@ module aptos_std::big_ordered_map {
}
/// Return the end iterator.
- public fun new_end_iter(self: &BigOrderedMap): Iterator {
+ public(friend) fun new_end_iter(self: &BigOrderedMap): Iterator {
Iterator::End
}
// Returns true iff the iterator is a begin iterator.
- public fun iter_is_begin(self: &Iterator, map: &BigOrderedMap): bool {
+ public(friend) fun iter_is_begin(self: &Iterator, map: &BigOrderedMap): bool {
if (self is Iterator::End) {
map.is_empty()
} else {
@@ -310,19 +316,19 @@ module aptos_std::big_ordered_map {
}
// Returns true iff the iterator is an end iterator.
- public fun iter_is_end(self: &Iterator, _map: &BigOrderedMap): bool {
+ public(friend) fun iter_is_end(self: &Iterator, _map: &BigOrderedMap): bool {
self is Iterator::End
}
/// Returns the key of the given iterator.
- public fun iter_get_key(self: &Iterator): &K {
+ public(friend) fun iter_get_key(self: &Iterator): &K {
assert!(!(self is Iterator::End), error::invalid_argument(EITER_OUT_OF_BOUNDS));
&self.key
}
/// Returns the next iterator, or none if already at the end iterator.
/// Requires the map is not changed after the input iterator is generated.
- public fun iter_next(self: Iterator, map: &BigOrderedMap): Iterator {
+ public(friend) fun iter_next(self: Iterator, map: &BigOrderedMap): Iterator {
assert!(!(self is Iterator::End), error::invalid_argument(EITER_OUT_OF_BOUNDS));
let node_index = self.node_index;
@@ -351,7 +357,7 @@ module aptos_std::big_ordered_map {
/// Returns the previous iterator, or none if already at the begin iterator.
/// Requires the map is not changed after the input iterator is generated.
- public fun iter_prev(self: Iterator, map: &BigOrderedMap): Iterator {
+ public(friend) fun iter_prev(self: Iterator, map: &BigOrderedMap): Iterator {
let prev_index = if (self is Iterator::End) {
map.max_leaf_index
} else {
diff --git a/aptos-move/framework/aptos-stdlib/sources/data_structures/ordered_map.move b/aptos-move/framework/aptos-stdlib/sources/data_structures/ordered_map.move
index c5fde5cce61a6..2aa56f6bb5d1c 100644
--- a/aptos-move/framework/aptos-stdlib/sources/data_structures/ordered_map.move
+++ b/aptos-move/framework/aptos-stdlib/sources/data_structures/ordered_map.move
@@ -177,7 +177,7 @@ module aptos_std::ordered_map {
/// Add multiple key/value pairs to the map, overwrites values if they exist already,
/// or if duplicate keys are passed in.s
- public fun upsert_all(self: &mut OrderedMap, keys: vector, values: vector) {
+ public fun upsert_all(self: &mut OrderedMap, keys: vector, values: vector) {
// TODO: Can be optimized, by sorting keys and values, and then creating map.
vector::zip(keys, values, |key, value| {
upsert(self, key, value);
@@ -235,6 +235,7 @@ module aptos_std::ordered_map {
};
};
+ other_entries.destroy_empty();
self.entries.reverse_append(reverse_result);
}
diff --git a/crates/transaction-generator-lib/src/publishing/raw_module_data.rs b/crates/transaction-generator-lib/src/publishing/raw_module_data.rs
index 150fac67e0d74..1ab5a36273c70 100644
--- a/crates/transaction-generator-lib/src/publishing/raw_module_data.rs
+++ b/crates/transaction-generator-lib/src/publishing/raw_module_data.rs
@@ -1000,11 +1000,11 @@ pub static MODULES_SIMPLE: Lazy>> = Lazy::new(|| { vec![
pub static PACKAGE_FRAMEWORK_USECASES_METADATA: Lazy> = Lazy::new(|| {
vec![
17, 70, 114, 97, 109, 101, 119, 111, 114, 107, 85, 115, 101, 99, 97, 115, 101, 115,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 49, 50, 65, 65, 52, 57, 48, 67,
- 57, 53, 51, 70, 49, 50, 52, 51, 52, 67, 54, 49, 54, 48, 66, 66, 54, 55,
- 57, 53, 52, 53, 55, 54, 48, 66, 68, 57, 56, 49, 54, 51, 70, 68, 48, 57,
- 65, 70, 55, 49, 57, 69, 54, 48, 70, 49, 49, 53, 57, 48, 65, 68, 54, 51,
- 54, 54, 215, 1, 31, 139, 8, 0, 0, 0, 0, 0, 2, 255, 165, 144, 187, 142,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 51, 68, 54, 69, 51, 48, 54, 53,
+ 54, 52, 67, 68, 68, 69, 68, 69, 57, 50, 53, 68, 69, 52, 55, 52, 52, 57,
+ 69, 67, 51, 66, 66, 53, 48, 67, 67, 67, 49, 56, 69, 70, 70, 66, 55, 56,
+ 53, 66, 49, 69, 57, 70, 52, 68, 49, 55, 56, 66, 50, 68, 68, 66, 65, 57,
+ 56, 51, 215, 1, 31, 139, 8, 0, 0, 0, 0, 0, 2, 255, 165, 144, 187, 142,
194, 64, 12, 69, 251, 249, 10, 107, 182, 38, 236, 15, 108, 193, 238, 138, 150, 6,
170, 8, 33, 51, 49, 33, 100, 176, 163, 241, 240, 144, 16, 255, 78, 44, 30, 130,
22, 100, 23, 215, 246, 189, 167, 112, 217, 97, 104, 177, 166, 185, 99, 220, 18, 252,
@@ -1243,48 +1243,104 @@ pub static MODULE_FRAMEWORK_USECASES_FUNGIBLE_ASSET_EXAMPLE: Lazy> = Laz
#[rustfmt::skip]
pub static MODULE_FRAMEWORK_USECASES_MAPS_EXAMPLE: Lazy> = Lazy::new(|| {
vec![
- 161, 28, 235, 11, 7, 0, 0, 10, 9, 1, 0, 6, 2, 6, 16, 3, 22, 54,
- 4, 76, 12, 5, 88, 102, 7, 190, 1, 88, 8, 150, 2, 64, 16, 214, 2, 31,
- 12, 245, 2, 208, 2, 0, 0, 1, 2, 1, 5, 1, 4, 7, 2, 0, 0, 0,
- 0, 2, 6, 7, 2, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 3, 1,
- 3, 2, 4, 4, 1, 2, 3, 1, 4, 2, 0, 0, 1, 1, 7, 5, 1, 2,
- 4, 4, 1, 2, 7, 6, 1, 2, 0, 0, 1, 1, 8, 7, 8, 2, 4, 4,
- 1, 2, 8, 9, 10, 2, 2, 0, 1, 1, 2, 2, 2, 3, 2, 4, 2, 5,
- 2, 6, 2, 3, 3, 3, 1, 0, 2, 3, 3, 1, 11, 0, 2, 9, 0, 9,
- 1, 1, 11, 1, 2, 9, 0, 9, 1, 3, 7, 11, 0, 2, 9, 0, 9, 1,
- 9, 0, 9, 1, 3, 7, 11, 1, 2, 9, 0, 9, 1, 9, 0, 9, 1, 2,
- 7, 11, 0, 2, 9, 0, 9, 1, 6, 9, 0, 2, 9, 0, 9, 1, 2, 7,
- 11, 1, 2, 9, 0, 9, 1, 6, 9, 0, 1, 9, 1, 11, 3, 3, 11, 0,
- 2, 3, 3, 11, 1, 2, 3, 3, 3, 1, 3, 1, 3, 3, 3, 12, 109, 97,
- 112, 115, 95, 101, 120, 97, 109, 112, 108, 101, 15, 116, 101, 115, 116, 95, 97, 100,
- 100, 95, 114, 101, 109, 111, 118, 101, 10, 115, 105, 109, 112, 108, 101, 95, 109, 97,
- 112, 3, 110, 101, 119, 9, 83, 105, 109, 112, 108, 101, 77, 97, 112, 11, 111, 114,
- 100, 101, 114, 101, 100, 95, 109, 97, 112, 10, 79, 114, 100, 101, 114, 101, 100, 77,
- 97, 112, 3, 97, 100, 100, 6, 114, 101, 109, 111, 118, 101, 0, 0, 0, 0, 0,
+ 161, 28, 235, 11, 7, 0, 0, 10, 10, 1, 0, 8, 2, 8, 36, 3, 44, 90,
+ 4, 134, 1, 18, 5, 152, 1, 183, 1, 7, 207, 2, 142, 2, 8, 221, 4, 64,
+ 16, 157, 5, 31, 10, 188, 5, 27, 12, 215, 5, 203, 7, 0, 0, 1, 4, 1,
+ 7, 1, 10, 0, 1, 8, 0, 1, 3, 4, 2, 4, 0, 4, 0, 0, 5, 8,
+ 0, 2, 6, 7, 2, 0, 0, 0, 0, 0, 8, 8, 0, 3, 9, 7, 2, 0,
+ 0, 0, 0, 0, 11, 0, 1, 0, 1, 1, 12, 3, 4, 2, 4, 4, 1, 1,
+ 13, 5, 1, 2, 7, 4, 1, 1, 14, 6, 7, 2, 7, 4, 1, 0, 15, 9,
+ 1, 0, 1, 2, 16, 1, 10, 2, 0, 0, 1, 2, 13, 11, 1, 2, 0, 0,
+ 1, 2, 14, 12, 7, 2, 2, 0, 1, 0, 17, 9, 1, 0, 1, 3, 16, 1,
+ 14, 2, 4, 4, 1, 3, 13, 15, 1, 2, 4, 4, 1, 3, 14, 16, 17, 2,
+ 4, 4, 1, 1, 2, 2, 2, 3, 2, 5, 2, 6, 2, 7, 2, 9, 2, 10,
+ 2, 11, 2, 5, 6, 12, 3, 3, 13, 13, 0, 2, 3, 3, 4, 13, 13, 1,
+ 14, 1, 11, 1, 2, 9, 0, 9, 1, 3, 7, 11, 1, 2, 9, 0, 9, 1,
+ 9, 0, 9, 1, 2, 7, 11, 1, 2, 9, 0, 9, 1, 6, 9, 0, 1, 9,
+ 1, 13, 14, 1, 11, 1, 2, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3,
+ 8, 0, 3, 6, 12, 3, 3, 1, 11, 3, 2, 9, 0, 9, 1, 3, 7, 11,
+ 3, 2, 9, 0, 9, 1, 9, 0, 9, 1, 2, 7, 11, 3, 2, 9, 0, 9,
+ 1, 6, 9, 0, 12, 11, 3, 2, 3, 3, 3, 3, 3, 1, 3, 1, 3, 3,
+ 3, 3, 8, 2, 1, 11, 5, 2, 9, 0, 9, 1, 3, 7, 11, 5, 2, 9,
+ 0, 9, 1, 9, 0, 9, 1, 2, 7, 11, 5, 2, 9, 0, 9, 1, 6, 9,
+ 0, 2, 9, 0, 9, 1, 12, 11, 5, 2, 3, 3, 3, 3, 3, 1, 3, 1,
+ 3, 3, 3, 3, 8, 4, 12, 109, 97, 112, 115, 95, 101, 120, 97, 109, 112, 108,
+ 101, 21, 66, 105, 103, 79, 114, 100, 101, 114, 101, 100, 77, 97, 112, 82, 101, 115,
+ 111, 117, 114, 99, 101, 5, 118, 97, 108, 117, 101, 13, 66, 105, 103, 79, 114, 100,
+ 101, 114, 101, 100, 77, 97, 112, 15, 98, 105, 103, 95, 111, 114, 100, 101, 114, 101,
+ 100, 95, 109, 97, 112, 18, 79, 114, 100, 101, 114, 101, 100, 77, 97, 112, 82, 101,
+ 115, 111, 117, 114, 99, 101, 10, 79, 114, 100, 101, 114, 101, 100, 77, 97, 112, 11,
+ 111, 114, 100, 101, 114, 101, 100, 95, 109, 97, 112, 17, 83, 105, 109, 112, 108, 101,
+ 77, 97, 112, 82, 101, 115, 111, 117, 114, 99, 101, 9, 83, 105, 109, 112, 108, 101,
+ 77, 97, 112, 10, 115, 105, 109, 112, 108, 101, 95, 109, 97, 112, 31, 116, 101, 115,
+ 116, 95, 97, 100, 100, 95, 114, 101, 109, 111, 118, 101, 95, 98, 105, 103, 95, 111,
+ 114, 100, 101, 114, 101, 100, 95, 109, 97, 112, 15, 110, 101, 119, 95, 119, 105, 116,
+ 104, 95, 99, 111, 110, 102, 105, 103, 3, 97, 100, 100, 6, 114, 101, 109, 111, 118,
+ 101, 27, 116, 101, 115, 116, 95, 97, 100, 100, 95, 114, 101, 109, 111, 118, 101, 95,
+ 111, 114, 100, 101, 114, 101, 100, 95, 109, 97, 112, 3, 110, 101, 119, 26, 116, 101,
+ 115, 116, 95, 97, 100, 100, 95, 114, 101, 109, 111, 118, 101, 95, 115, 105, 109, 112,
+ 108, 101, 95, 109, 97, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 171, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 20, 99, 111, 109, 112, 105, 108, 97, 116, 105, 111, 110, 95,
- 109, 101, 116, 97, 100, 97, 116, 97, 9, 0, 3, 50, 46, 48, 3, 50, 46, 49,
- 0, 1, 4, 0, 11, 123, 6, 210, 4, 0, 0, 0, 0, 0, 0, 12, 3, 6,
- 210, 4, 0, 0, 0, 0, 0, 0, 12, 4, 56, 0, 12, 5, 56, 1, 12, 6,
- 6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 9, 12, 8, 5, 14, 5, 50,
- 10, 8, 4, 120, 11, 7, 6, 1, 0, 0, 0, 0, 0, 0, 0, 22, 12, 7,
- 10, 7, 10, 0, 35, 3, 25, 5, 50, 10, 2, 4, 45, 13, 5, 10, 3, 10,
- 3, 56, 2, 11, 3, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 3, 10,
- 3, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 40, 5, 12, 11, 3, 6,
- 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 3, 5, 12, 13, 6, 10, 3, 10,
- 3, 56, 3, 5, 31, 6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 9, 9, 12,
- 10, 11, 1, 12, 11, 5, 58, 5, 116, 10, 10, 4, 117, 11, 9, 6, 1, 0,
- 0, 0, 0, 0, 0, 0, 22, 12, 9, 10, 9, 10, 11, 35, 3, 69, 5, 116,
- 10, 2, 4, 107, 13, 5, 10, 3, 10, 3, 56, 2, 13, 5, 14, 4, 56, 4,
- 1, 1, 11, 3, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 3, 10, 3,
- 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 89, 5, 93, 11, 3, 6, 64,
- 66, 15, 0, 0, 0, 0, 0, 23, 12, 3, 11, 4, 6, 177, 30, 4, 0, 0,
- 0, 0, 0, 22, 12, 4, 10, 4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36,
- 3, 102, 5, 56, 11, 4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 4,
- 5, 56, 13, 6, 10, 3, 10, 3, 56, 3, 13, 6, 14, 4, 56, 5, 1, 5,
- 80, 2, 8, 12, 10, 5, 64, 8, 12, 8, 5, 20, 0,
+ 171, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 99,
+ 111, 109, 112, 105, 108, 97, 116, 105, 111, 110, 95, 109, 101, 116, 97, 100, 97, 116,
+ 97, 9, 0, 3, 50, 46, 48, 3, 50, 46, 49, 0, 2, 1, 2, 11, 1, 2,
+ 3, 3, 2, 2, 1, 2, 11, 3, 2, 3, 3, 4, 2, 1, 2, 11, 5, 2,
+ 3, 3, 0, 1, 4, 0, 8, 118, 11, 3, 11, 4, 9, 73, 0, 0, 0, 0,
+ 56, 0, 12, 7, 6, 210, 4, 0, 0, 0, 0, 0, 0, 12, 8, 6, 210, 4,
+ 0, 0, 0, 0, 0, 0, 12, 9, 6, 0, 0, 0, 0, 0, 0, 0, 0, 12,
+ 10, 9, 12, 6, 5, 16, 5, 47, 10, 6, 4, 115, 11, 10, 6, 1, 0, 0,
+ 0, 0, 0, 0, 0, 22, 12, 10, 10, 10, 10, 1, 35, 3, 27, 5, 47, 10,
+ 8, 12, 11, 13, 7, 10, 11, 11, 11, 56, 1, 11, 8, 6, 177, 30, 4, 0,
+ 0, 0, 0, 0, 22, 12, 8, 10, 8, 6, 64, 66, 15, 0, 0, 0, 0, 0,
+ 36, 3, 42, 5, 14, 11, 8, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12,
+ 8, 5, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 11, 9, 12, 12, 11,
+ 2, 12, 13, 5, 55, 5, 105, 10, 12, 4, 112, 11, 11, 6, 1, 0, 0, 0,
+ 0, 0, 0, 0, 22, 12, 11, 10, 11, 10, 13, 35, 3, 66, 5, 105, 10, 8,
+ 12, 14, 13, 7, 10, 14, 11, 14, 56, 1, 10, 9, 12, 15, 13, 7, 14, 15,
+ 56, 2, 1, 11, 8, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 8, 10,
+ 8, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 87, 5, 91, 11, 8, 6,
+ 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 8, 11, 9, 6, 177, 30, 4, 0,
+ 0, 0, 0, 0, 22, 12, 9, 10, 9, 6, 64, 66, 15, 0, 0, 0, 0, 0,
+ 36, 3, 100, 5, 53, 11, 9, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12,
+ 9, 5, 53, 11, 7, 18, 0, 12, 17, 11, 0, 11, 17, 45, 0, 2, 8, 12,
+ 12, 5, 61, 8, 12, 6, 5, 22, 4, 1, 4, 0, 13, 114, 56, 3, 12, 3,
+ 6, 210, 4, 0, 0, 0, 0, 0, 0, 12, 4, 6, 210, 4, 0, 0, 0, 0,
+ 0, 0, 12, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 9, 12, 7,
+ 5, 12, 5, 43, 10, 7, 4, 111, 11, 6, 6, 1, 0, 0, 0, 0, 0, 0,
+ 0, 22, 12, 6, 10, 6, 10, 1, 35, 3, 23, 5, 43, 10, 4, 12, 8, 13,
+ 3, 10, 8, 11, 8, 56, 4, 11, 4, 6, 177, 30, 4, 0, 0, 0, 0, 0,
+ 22, 12, 4, 10, 4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 38, 5,
+ 10, 11, 4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 4, 5, 10, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 12, 8, 9, 12, 9, 11, 2, 12, 10, 5,
+ 51, 5, 101, 10, 9, 4, 108, 11, 8, 6, 1, 0, 0, 0, 0, 0, 0, 0,
+ 22, 12, 8, 10, 8, 10, 10, 35, 3, 62, 5, 101, 10, 4, 12, 11, 13, 3,
+ 10, 11, 11, 11, 56, 4, 10, 5, 12, 12, 13, 3, 14, 12, 56, 5, 1, 11,
+ 4, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 4, 10, 4, 6, 64, 66,
+ 15, 0, 0, 0, 0, 0, 36, 3, 83, 5, 87, 11, 4, 6, 64, 66, 15, 0,
+ 0, 0, 0, 0, 23, 12, 4, 11, 5, 6, 177, 30, 4, 0, 0, 0, 0, 0,
+ 22, 12, 5, 10, 5, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 96, 5,
+ 49, 11, 5, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 5, 5, 49, 11,
+ 3, 18, 1, 12, 14, 11, 0, 11, 14, 45, 1, 2, 8, 12, 9, 5, 57, 8,
+ 12, 7, 5, 18, 8, 1, 4, 0, 18, 115, 56, 6, 12, 3, 6, 210, 4, 0,
+ 0, 0, 0, 0, 0, 12, 4, 6, 210, 4, 0, 0, 0, 0, 0, 0, 12, 5,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 9, 12, 7, 5, 12, 5, 43,
+ 10, 7, 4, 112, 11, 6, 6, 1, 0, 0, 0, 0, 0, 0, 0, 22, 12, 6,
+ 10, 6, 10, 1, 35, 3, 23, 5, 43, 10, 4, 12, 8, 13, 3, 10, 8, 11,
+ 8, 56, 7, 11, 4, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 4, 10,
+ 4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 38, 5, 10, 11, 4, 6,
+ 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 4, 5, 10, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 12, 8, 9, 12, 9, 11, 2, 12, 10, 5, 51, 5, 102, 10,
+ 9, 4, 109, 11, 8, 6, 1, 0, 0, 0, 0, 0, 0, 0, 22, 12, 8, 10,
+ 8, 10, 10, 35, 3, 62, 5, 102, 10, 4, 12, 11, 13, 3, 10, 11, 11, 11,
+ 56, 7, 10, 5, 12, 12, 13, 3, 14, 12, 56, 8, 1, 1, 11, 4, 6, 177,
+ 30, 4, 0, 0, 0, 0, 0, 22, 12, 4, 10, 4, 6, 64, 66, 15, 0, 0,
+ 0, 0, 0, 36, 3, 84, 5, 88, 11, 4, 6, 64, 66, 15, 0, 0, 0, 0,
+ 0, 23, 12, 4, 11, 5, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 5,
+ 10, 5, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 97, 5, 49, 11, 5,
+ 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 5, 5, 49, 11, 3, 18, 2,
+ 12, 14, 11, 0, 11, 14, 45, 2, 2, 8, 12, 9, 5, 57, 8, 12, 7, 5,
+ 18, 0,
]
});