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..1c3b816b51ea1 100644 --- a/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md +++ b/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md @@ -20,10 +20,15 @@ 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. Type is also named IteratorPtr, so that Iterator is free to use later. +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) +- [Enum `IteratorPtr`](#0x1_big_ordered_map_IteratorPtr) - [Enum `BigOrderedMap`](#0x1_big_ordered_map_BigOrderedMap) - [Constants](#@Constants_0) - [Function `new`](#0x1_big_ordered_map_new) @@ -194,14 +199,16 @@ The metadata of a child of a node. - + -## Enum `Iterator` +## Enum `IteratorPtr` An iterator to iterate all keys in the BigOrderedMap. +TODO: Once fields can be (mutable) references, this class will be deprecated. + -
enum Iterator<K> has drop
+
enum IteratorPtr<K> has drop
 
@@ -242,7 +249,7 @@ An iterator to iterate all keys in the BigOrderedMap. The node index of the iterator pointing to.
-child_iter: ordered_map::Iterator +child_iter: ordered_map::IteratorPtr
Child iter it is pointing to @@ -366,7 +373,7 @@ Internal errors. -Trying to do an operation on an Iterator that would go out of bounds +Trying to do an operation on an IteratorPtr that would go out of bounds
const EITER_OUT_OF_BOUNDS: u64 = 3;
@@ -700,7 +707,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::IteratorPtr<K>
 
@@ -709,7 +716,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): IteratorPtr<K> {
     let leaf = self.find_leaf(key);
     if (leaf == NULL_INDEX) {
         return self.new_end_iter()
@@ -740,7 +747,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::IteratorPtr<K>
 
@@ -749,7 +756,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): IteratorPtr<K> {
     let lower_bound = self.lower_bound(key);
     if (lower_bound.iter_is_end(self)) {
         lower_bound
@@ -863,7 +870,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::IteratorPtr<K>
 
@@ -872,9 +879,9 @@ 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>): IteratorPtr<K> {
     if (self.is_empty()) {
-        return Iterator::End;
+        return IteratorPtr::End;
     };
 
     let node = self.borrow_node(self.min_leaf_index);
@@ -896,7 +903,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::IteratorPtr<K>
 
@@ -905,8 +912,8 @@ Return the end iterator. Implementation -
public fun new_end_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): Iterator<K> {
-    Iterator::End
+
public(friend) fun new_end_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): IteratorPtr<K> {
+    IteratorPtr::End
 }
 
@@ -920,7 +927,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::IteratorPtr<K>, map: &big_ordered_map::BigOrderedMap<K, V>): bool
 
@@ -929,8 +936,8 @@ Return the end iterator. Implementation -
public fun iter_is_begin<K: store, V: store>(self: &Iterator<K>, map: &BigOrderedMap<K, V>): bool {
-    if (self is Iterator::End<K>) {
+
public(friend) fun iter_is_begin<K: store, V: store>(self: &IteratorPtr<K>, map: &BigOrderedMap<K, V>): bool {
+    if (self is IteratorPtr::End<K>) {
         map.is_empty()
     } else {
         (self.node_index == map.min_leaf_index && self.child_iter.iter_is_begin_from_non_empty())
@@ -948,7 +955,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::IteratorPtr<K>, _map: &big_ordered_map::BigOrderedMap<K, V>): bool
 
@@ -957,8 +964,8 @@ Return the end iterator. Implementation -
public fun iter_is_end<K: store, V: store>(self: &Iterator<K>, _map: &BigOrderedMap<K, V>): bool {
-    self is Iterator::End<K>
+
public(friend) fun iter_is_end<K: store, V: store>(self: &IteratorPtr<K>, _map: &BigOrderedMap<K, V>): bool {
+    self is IteratorPtr::End<K>
 }
 
@@ -973,7 +980,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::IteratorPtr<K>): &K
 
@@ -982,8 +989,8 @@ Returns the key of the given iterator. Implementation -
public fun iter_get_key<K>(self: &Iterator<K>): &K {
-    assert!(!(self is Iterator::End<K>), error::invalid_argument(EITER_OUT_OF_BOUNDS));
+
public(friend) fun iter_get_key<K>(self: &IteratorPtr<K>): &K {
+    assert!(!(self is IteratorPtr::End<K>), error::invalid_argument(EITER_OUT_OF_BOUNDS));
     &self.key
 }
 
@@ -1000,7 +1007,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::IteratorPtr<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::IteratorPtr<K>
 
@@ -1009,8 +1016,8 @@ 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> {
-    assert!(!(self is Iterator::End<K>), error::invalid_argument(EITER_OUT_OF_BOUNDS));
+
public(friend) fun iter_next<K: drop + copy + store, V: store>(self: IteratorPtr<K>, map: &BigOrderedMap<K, V>): IteratorPtr<K> {
+    assert!(!(self is IteratorPtr::End<K>), error::invalid_argument(EITER_OUT_OF_BOUNDS));
 
     let node_index = self.node_index;
     let node = map.borrow_node(node_index);
@@ -1049,7 +1056,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::IteratorPtr<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::IteratorPtr<K>
 
@@ -1058,8 +1065,8 @@ 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> {
-    let prev_index = if (self is Iterator::End<K>) {
+
public(friend) fun iter_prev<K: drop + copy + store, V: store>(self: IteratorPtr<K>, map: &BigOrderedMap<K, V>): IteratorPtr<K> {
+    let prev_index = if (self is IteratorPtr::End<K>) {
         map.max_leaf_index
     } else {
         let node_index = self.node_index;
@@ -1472,7 +1479,7 @@ Borrow a node mutably, given an index. Works for both root (i.e. inline) node an
 
 
 
-
fun new_iter<K>(node_index: u64, child_iter: ordered_map::Iterator, key: K): big_ordered_map::Iterator<K>
+
fun new_iter<K>(node_index: u64, child_iter: ordered_map::IteratorPtr, key: K): big_ordered_map::IteratorPtr<K>
 
@@ -1481,8 +1488,8 @@ Borrow a node mutably, given an index. Works for both root (i.e. inline) node an Implementation -
fun new_iter<K>(node_index: u64, child_iter: ordered_map::Iterator, key: K): Iterator<K> {
-    Iterator::Some {
+
fun new_iter<K>(node_index: u64, child_iter: ordered_map::IteratorPtr, key: K): IteratorPtr<K> {
+    IteratorPtr::Some {
         node_index: node_index,
         child_iter: child_iter,
         key: key,
diff --git a/aptos-move/framework/aptos-stdlib/doc/storage_slots_allocator.md b/aptos-move/framework/aptos-stdlib/doc/storage_slots_allocator.md
index a604a9090ae2b..ae5650a96ea4d 100644
--- a/aptos-move/framework/aptos-stdlib/doc/storage_slots_allocator.md
+++ b/aptos-move/framework/aptos-stdlib/doc/storage_slots_allocator.md
@@ -815,7 +815,8 @@ Remove storage slot, but reserve it for later.
 
 
fun maybe_push_to_reuse_queue<T: store>(self: &mut StorageSlotsAllocator<T>, slot_index: u64) {
     if (self.should_reuse) {
-        self.add_link(slot_index, Link::Vacant { next: self.reuse_head_index });
+        let link = Link::Vacant { next: self.reuse_head_index };
+        self.add_link(slot_index, link);
         self.reuse_head_index = slot_index;
         self.reuse_spare_count = self.reuse_spare_count + 1;
     };
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..50fdfa025ab5a 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,11 @@
 ///   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. Type is also named IteratorPtr, so that Iterator is free to use later.
+/// 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;
@@ -29,7 +34,7 @@ module aptos_std::big_ordered_map {
     const EKEY_ALREADY_EXISTS: u64 = 1;
     /// Map key is not found
     const EKEY_NOT_FOUND: u64 = 2;
-    /// Trying to do an operation on an Iterator that would go out of bounds
+    /// Trying to do an operation on an IteratorPtr that would go out of bounds
     const EITER_OUT_OF_BOUNDS: u64 = 3;
     /// The provided configuration parameter is invalid.
     const EINVALID_CONFIG_PARAMETER: u64 = 4;
@@ -90,14 +95,16 @@ module aptos_std::big_ordered_map {
     }
 
     /// An iterator to iterate all keys in the BigOrderedMap.
-    enum Iterator has drop {
+    ///
+    /// TODO: Once fields can be (mutable) references, this class will be deprecated.
+    enum IteratorPtr has drop {
         End,
         Some {
             /// The node index of the iterator pointing to.
             node_index: u64,
 
             /// Child iter it is pointing to
-            child_iter: ordered_map::Iterator,
+            child_iter: ordered_map::IteratorPtr,
 
             /// `key` to which `(node_index, child_iter)` are pointing to
             /// cache to not require borrowing global resources to fetch again
@@ -218,7 +225,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): IteratorPtr {
         let leaf = self.find_leaf(key);
         if (leaf == NULL_INDEX) {
             return self.new_end_iter()
@@ -238,7 +245,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): IteratorPtr {
         let lower_bound = self.lower_bound(key);
         if (lower_bound.iter_is_end(self)) {
             lower_bound
@@ -280,12 +287,12 @@ module aptos_std::big_ordered_map {
         &mut iter.child_iter.iter_borrow_mut(children).value
     }
 
-    // ========================= Iterator functions ===========================
+    // ========================= IteratorPtr functions ===========================
 
     /// Return the begin iterator.
-    public fun new_begin_iter(self: &BigOrderedMap): Iterator {
+    public(friend) fun new_begin_iter(self: &BigOrderedMap): IteratorPtr {
         if (self.is_empty()) {
-            return Iterator::End;
+            return IteratorPtr::End;
         };
 
         let node = self.borrow_node(self.min_leaf_index);
@@ -296,13 +303,13 @@ module aptos_std::big_ordered_map {
     }
 
     /// Return the end iterator.
-    public fun new_end_iter(self: &BigOrderedMap): Iterator {
-        Iterator::End
+    public(friend) fun new_end_iter(self: &BigOrderedMap): IteratorPtr {
+        IteratorPtr::End
     }
 
     // Returns true iff the iterator is a begin iterator.
-    public fun iter_is_begin(self: &Iterator, map: &BigOrderedMap): bool {
-        if (self is Iterator::End) {
+    public(friend) fun iter_is_begin(self: &IteratorPtr, map: &BigOrderedMap): bool {
+        if (self is IteratorPtr::End) {
             map.is_empty()
         } else {
             (self.node_index == map.min_leaf_index && self.child_iter.iter_is_begin_from_non_empty())
@@ -310,20 +317,20 @@ 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 {
-        self is Iterator::End
+    public(friend) fun iter_is_end(self: &IteratorPtr, _map: &BigOrderedMap): bool {
+        self is IteratorPtr::End
     }
 
     /// Returns the key of the given iterator.
-    public fun iter_get_key(self: &Iterator): &K {
-        assert!(!(self is Iterator::End), error::invalid_argument(EITER_OUT_OF_BOUNDS));
+    public(friend) fun iter_get_key(self: &IteratorPtr): &K {
+        assert!(!(self is IteratorPtr::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 {
-        assert!(!(self is Iterator::End), error::invalid_argument(EITER_OUT_OF_BOUNDS));
+    public(friend) fun iter_next(self: IteratorPtr, map: &BigOrderedMap): IteratorPtr {
+        assert!(!(self is IteratorPtr::End), error::invalid_argument(EITER_OUT_OF_BOUNDS));
 
         let node_index = self.node_index;
         let node = map.borrow_node(node_index);
@@ -351,8 +358,8 @@ 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 {
-        let prev_index = if (self is Iterator::End) {
+    public(friend) fun iter_prev(self: IteratorPtr, map: &BigOrderedMap): IteratorPtr {
+        let prev_index = if (self is IteratorPtr::End) {
             map.max_leaf_index
         } else {
             let node_index = self.node_index;
@@ -516,8 +523,8 @@ module aptos_std::big_ordered_map {
         }
     }
 
-    fun new_iter(node_index: u64, child_iter: ordered_map::Iterator, key: K): Iterator {
-        Iterator::Some {
+    fun new_iter(node_index: u64, child_iter: ordered_map::IteratorPtr, key: K): IteratorPtr {
+        IteratorPtr::Some {
             node_index: node_index,
             child_iter: child_iter,
             key: key,
diff --git a/aptos-move/framework/aptos-stdlib/sources/data_structures/storage_slots_allocator.move b/aptos-move/framework/aptos-stdlib/sources/data_structures/storage_slots_allocator.move
index cd4d287552d57..446a2b9d9b6cd 100644
--- a/aptos-move/framework/aptos-stdlib/sources/data_structures/storage_slots_allocator.move
+++ b/aptos-move/framework/aptos-stdlib/sources/data_structures/storage_slots_allocator.move
@@ -212,7 +212,8 @@ module aptos_std::storage_slots_allocator {
 
     fun maybe_push_to_reuse_queue(self: &mut StorageSlotsAllocator, slot_index: u64) {
         if (self.should_reuse) {
-            self.add_link(slot_index, Link::Vacant { next: self.reuse_head_index });
+            let link = Link::Vacant { next: self.reuse_head_index };
+            self.add_link(slot_index, link);
             self.reuse_head_index = slot_index;
             self.reuse_spare_count = self.reuse_spare_count + 1;
         };
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,
 	]
 });