blob: 2e91973fbaa668f6e7ea0b375c2a3c61bd34afe7 [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0+
/*
* maple_tree.c: Userspace shim for maple tree test-suite
* Copyright (c) 2018 Liam R. Howlett <Liam.Howlett@Oracle.com>
*
* Any tests that require internal knowledge of the tree or threads and other
* difficult to handle in kernel tests.
*/
#define CONFIG_DEBUG_MAPLE_TREE
#define CONFIG_MAPLE_SEARCH
#define MAPLE_32BIT (MAPLE_NODE_SLOTS > 31)
#include "test.h"
#include <stdlib.h>
#include <time.h>
#define module_init(x)
#define module_exit(x)
#define MODULE_AUTHOR(x)
#define MODULE_LICENSE(x)
#define dump_stack() assert(0)
#include "../../../lib/maple_tree.c"
#undef CONFIG_DEBUG_MAPLE_TREE
#include "../../../lib/test_maple_tree.c"
#define RCU_RANGE_COUNT 1000
#define RCU_MT_BUG_ON(test, y) {if (y) { test->stop = true; } MT_BUG_ON(test->mt, y); }
struct rcu_test_struct2 {
struct maple_tree *mt;
bool start;
bool stop;
unsigned int thread_count;
unsigned int seen_toggle;
unsigned int seen_added;
unsigned int seen_modified;
unsigned int seen_deleted;
int pause;
unsigned long index[RCU_RANGE_COUNT];
unsigned long last[RCU_RANGE_COUNT];
};
struct rcu_reader_struct {
unsigned int id;
int mod;
int del;
int flip;
int add;
int next;
struct rcu_test_struct2 *test;
};
/*
* check_new_node() - Check the creation of new nodes and error path
* verification.
*/
static noinline void check_new_node(struct maple_tree *mt)
{
struct maple_node *mn, *mn2, *mn3;
struct maple_alloc *smn;
struct maple_node *nodes[100];
int i, j, total;
MA_STATE(mas, mt, 0, 0);
/* Try allocating 3 nodes */
mtree_lock(mt);
mt_set_non_kernel(0);
/* request 3 nodes to be allocated. */
mas_node_count(&mas, 3);
/* Allocation request of 3. */
MT_BUG_ON(mt, mas_alloc_req(&mas) != 3);
/* Allocate failed. */
MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM));
MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
MT_BUG_ON(mt, mas_allocated(&mas) != 3);
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, not_empty(mn));
MT_BUG_ON(mt, mn == NULL);
MT_BUG_ON(mt, mas.alloc == NULL);
MT_BUG_ON(mt, mas.alloc->slot[0] == NULL);
mas_push_node(&mas, mn);
mas_nomem(&mas, GFP_KERNEL); /* free */
mtree_unlock(mt);
/* Try allocating 1 node, then 2 more */
mtree_lock(mt);
/* Set allocation request to 1. */
mas_set_alloc_req(&mas, 1);
/* Check Allocation request of 1. */
MT_BUG_ON(mt, mas_alloc_req(&mas) != 1);
mas_set_err(&mas, -ENOMEM);
/* Validate allocation request. */
MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
/* Eat the requested node. */
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, not_empty(mn));
MT_BUG_ON(mt, mn == NULL);
MT_BUG_ON(mt, mn->slot[0] != NULL);
MT_BUG_ON(mt, mn->slot[1] != NULL);
MT_BUG_ON(mt, mas_allocated(&mas) != 0);
ma_free_rcu(mn);
mas.node = MAS_START;
mas_nomem(&mas, GFP_KERNEL);
/* Allocate 3 nodes, will fail. */
mas_node_count(&mas, 3);
/* Drop the lock and allocate 3 nodes. */
mas_nomem(&mas, GFP_KERNEL);
/* Ensure 3 are allocated. */
MT_BUG_ON(mt, mas_allocated(&mas) != 3);
/* Allocation request of 0. */
MT_BUG_ON(mt, mas_alloc_req(&mas) != 0);
MT_BUG_ON(mt, mas.alloc == NULL);
MT_BUG_ON(mt, mas.alloc->slot[0] == NULL);
MT_BUG_ON(mt, mas.alloc->slot[1] == NULL);
/* Ensure we counted 3. */
MT_BUG_ON(mt, mas_allocated(&mas) != 3);
/* Free. */
mas_nomem(&mas, GFP_KERNEL);
/* Set allocation request to 1. */
mas_set_alloc_req(&mas, 1);
MT_BUG_ON(mt, mas_alloc_req(&mas) != 1);
mas_set_err(&mas, -ENOMEM);
/* Validate allocation request. */
MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
MT_BUG_ON(mt, mas_allocated(&mas) != 1);
/* Check the node is only one node. */
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, not_empty(mn));
MT_BUG_ON(mt, mas_allocated(&mas) != 0);
MT_BUG_ON(mt, mn == NULL);
MT_BUG_ON(mt, mn->slot[0] != NULL);
MT_BUG_ON(mt, mn->slot[1] != NULL);
MT_BUG_ON(mt, mas_allocated(&mas) != 0);
mas_push_node(&mas, mn);
MT_BUG_ON(mt, mas_allocated(&mas) != 1);
MT_BUG_ON(mt, mas.alloc->node_count);
mas_set_alloc_req(&mas, 2); /* request 2 more. */
MT_BUG_ON(mt, mas_alloc_req(&mas) != 2);
mas_set_err(&mas, -ENOMEM);
MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
MT_BUG_ON(mt, mas_allocated(&mas) != 3);
MT_BUG_ON(mt, mas.alloc == NULL);
MT_BUG_ON(mt, mas.alloc->slot[0] == NULL);
MT_BUG_ON(mt, mas.alloc->slot[1] == NULL);
for (i = 2; i >= 0; i--) {
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, mas_allocated(&mas) != i);
MT_BUG_ON(mt, !mn);
MT_BUG_ON(mt, not_empty(mn));
ma_free_rcu(mn);
}
total = 64;
mas_set_alloc_req(&mas, total); /* request 2 more. */
MT_BUG_ON(mt, mas_alloc_req(&mas) != total);
mas_set_err(&mas, -ENOMEM);
MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
for (i = total; i > 0; i--) {
unsigned int e = 0; /* expected node_count */
if (!MAPLE_32BIT) {
if (i >= 35)
e = i - 35;
else if (i >= 5)
e = i - 5;
else if (i >= 2)
e = i - 2;
} else {
if (i >= 4)
e = i - 4;
else if (i == 3)
e = i - 2;
else
e = 0;
}
MT_BUG_ON(mt, mas.alloc->node_count != e);
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, not_empty(mn));
MT_BUG_ON(mt, mas_allocated(&mas) != i - 1);
MT_BUG_ON(mt, !mn);
ma_free_rcu(mn);
}
total = 100;
for (i = 1; i < total; i++) {
mas_set_alloc_req(&mas, i);
mas_set_err(&mas, -ENOMEM);
MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
for (j = i; j > 0; j--) {
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, mas_allocated(&mas) != j - 1);
MT_BUG_ON(mt, !mn);
MT_BUG_ON(mt, not_empty(mn));
mas_push_node(&mas, mn);
MT_BUG_ON(mt, mas_allocated(&mas) != j);
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, not_empty(mn));
MT_BUG_ON(mt, mas_allocated(&mas) != j - 1);
ma_free_rcu(mn);
}
MT_BUG_ON(mt, mas_allocated(&mas) != 0);
mas_set_alloc_req(&mas, i);
mas_set_err(&mas, -ENOMEM);
MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
for (j = 0; j <= i/2; j++) {
MT_BUG_ON(mt, mas_allocated(&mas) != i - j);
nodes[j] = mas_pop_node(&mas);
MT_BUG_ON(mt, mas_allocated(&mas) != i - j - 1);
}
while (j) {
j--;
mas_push_node(&mas, nodes[j]);
MT_BUG_ON(mt, mas_allocated(&mas) != i - j);
}
MT_BUG_ON(mt, mas_allocated(&mas) != i);
for (j = 0; j <= i/2; j++) {
MT_BUG_ON(mt, mas_allocated(&mas) != i - j);
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, not_empty(mn));
ma_free_rcu(mn);
MT_BUG_ON(mt, mas_allocated(&mas) != i - j - 1);
}
MT_BUG_ON(mt, mas_nomem(&mas, GFP_KERNEL));
}
/* Set allocation request. */
total = 500;
mas_node_count(&mas, total);
/* Drop the lock and allocate the nodes. */
mas_nomem(&mas, GFP_KERNEL);
MT_BUG_ON(mt, !mas.alloc);
i = 1;
smn = mas.alloc;
while (i < total) {
for (j = 0; j < MAPLE_ALLOC_SLOTS; j++) {
i++;
MT_BUG_ON(mt, !smn->slot[j]);
if (i == total)
break;
}
smn = smn->slot[0]; /* next. */
}
MT_BUG_ON(mt, mas_allocated(&mas) != total);
mas_nomem(&mas, GFP_KERNEL); /* Free. */
MT_BUG_ON(mt, mas_allocated(&mas) != 0);
for (i = 1; i < 128; i++) {
mas_node_count(&mas, i); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
MT_BUG_ON(mt, mas_allocated(&mas) != i); /* check request filled */
for (j = i; j > 0; j--) { /*Free the requests */
mn = mas_pop_node(&mas); /* get the next node. */
MT_BUG_ON(mt, mn == NULL);
MT_BUG_ON(mt, not_empty(mn));
ma_free_rcu(mn);
}
MT_BUG_ON(mt, mas_allocated(&mas) != 0);
}
for (i = 1; i < MAPLE_NODE_MASK + 1; i++) {
MA_STATE(mas2, mt, 0, 0);
mas_node_count(&mas, i); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
MT_BUG_ON(mt, mas_allocated(&mas) != i); /* check request filled */
for (j = 1; j <= i; j++) { /* Move the allocations to mas2 */
mn = mas_pop_node(&mas); /* get the next node. */
MT_BUG_ON(mt, mn == NULL);
MT_BUG_ON(mt, not_empty(mn));
mas_push_node(&mas2, mn);
MT_BUG_ON(mt, mas_allocated(&mas2) != j);
}
MT_BUG_ON(mt, mas_allocated(&mas) != 0);
MT_BUG_ON(mt, mas_allocated(&mas2) != i);
for (j = i; j > 0; j--) { /*Free the requests */
MT_BUG_ON(mt, mas_allocated(&mas2) != j);
mn = mas_pop_node(&mas2); /* get the next node. */
MT_BUG_ON(mt, mn == NULL);
MT_BUG_ON(mt, not_empty(mn));
ma_free_rcu(mn);
}
MT_BUG_ON(mt, mas_allocated(&mas2) != 0);
}
MT_BUG_ON(mt, mas_allocated(&mas) != 0);
mas_node_count(&mas, MAPLE_ALLOC_SLOTS + 1); /* Request */
MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM));
MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1);
MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1);
mn = mas_pop_node(&mas); /* get the next node. */
MT_BUG_ON(mt, mn == NULL);
MT_BUG_ON(mt, not_empty(mn));
MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS);
MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 2);
mas_push_node(&mas, mn);
MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1);
MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1);
/* Check the limit of pop/push/pop */
mas_node_count(&mas, MAPLE_ALLOC_SLOTS + 2); /* Request */
MT_BUG_ON(mt, mas_alloc_req(&mas) != 1);
MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM));
MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
MT_BUG_ON(mt, mas_alloc_req(&mas));
MT_BUG_ON(mt, mas.alloc->node_count);
MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 2);
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, not_empty(mn));
MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1);
MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1);
mas_push_node(&mas, mn);
MT_BUG_ON(mt, mas.alloc->node_count);
MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 2);
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, not_empty(mn));
ma_free_rcu(mn);
for (i = 1; i <= MAPLE_ALLOC_SLOTS + 1; i++) {
mn = mas_pop_node(&mas);
MT_BUG_ON(mt, not_empty(mn));
ma_free_rcu(mn);
}
MT_BUG_ON(mt, mas_allocated(&mas) != 0);
for (i = 3; i < MAPLE_NODE_MASK * 3; i++) {
mas.node = MA_ERROR(-ENOMEM);
mas_node_count(&mas, i); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
mn = mas_pop_node(&mas); /* get the next node. */
mas_push_node(&mas, mn); /* put it back */
mas_destroy(&mas);
mas.node = MA_ERROR(-ENOMEM);
mas_node_count(&mas, i); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
mn = mas_pop_node(&mas); /* get the next node. */
mn2 = mas_pop_node(&mas); /* get the next node. */
mas_push_node(&mas, mn); /* put them back */
mas_push_node(&mas, mn2);
mas_destroy(&mas);
mas.node = MA_ERROR(-ENOMEM);
mas_node_count(&mas, i); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
mn = mas_pop_node(&mas); /* get the next node. */
mn2 = mas_pop_node(&mas); /* get the next node. */
mn3 = mas_pop_node(&mas); /* get the next node. */
mas_push_node(&mas, mn); /* put them back */
mas_push_node(&mas, mn2);
mas_push_node(&mas, mn3);
mas_destroy(&mas);
mas.node = MA_ERROR(-ENOMEM);
mas_node_count(&mas, i); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
mn = mas_pop_node(&mas); /* get the next node. */
ma_free_rcu(mn);
mas_destroy(&mas);
mas.node = MA_ERROR(-ENOMEM);
mas_node_count(&mas, i); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
mn = mas_pop_node(&mas); /* get the next node. */
ma_free_rcu(mn);
mn = mas_pop_node(&mas); /* get the next node. */
ma_free_rcu(mn);
mn = mas_pop_node(&mas); /* get the next node. */
ma_free_rcu(mn);
mas_destroy(&mas);
}
mas.node = MA_ERROR(-ENOMEM);
mas_node_count(&mas, 5); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
MT_BUG_ON(mt, mas_allocated(&mas) != 5);
mas.node = MA_ERROR(-ENOMEM);
mas_node_count(&mas, 10); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
mas.node = MAS_START;
MT_BUG_ON(mt, mas_allocated(&mas) != 10);
mas_destroy(&mas);
mas.node = MA_ERROR(-ENOMEM);
mas_node_count(&mas, MAPLE_ALLOC_SLOTS - 1); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS - 1);
mas.node = MA_ERROR(-ENOMEM);
mas_node_count(&mas, 10 + MAPLE_ALLOC_SLOTS - 1); /* Request */
mas_nomem(&mas, GFP_KERNEL); /* Fill request */
mas.node = MAS_START;
MT_BUG_ON(mt, mas_allocated(&mas) != 10 + MAPLE_ALLOC_SLOTS - 1);
mas_destroy(&mas);
mtree_unlock(mt);
}
/*
* Check erasing including RCU.
*/
static noinline void check_erase(struct maple_tree *mt, unsigned long index,
void *ptr)
{
MT_BUG_ON(mt, mtree_test_erase(mt, index) != ptr);
}
#define erase_check_load(mt, i) check_load(mt, set[i], entry[i%2])
#define erase_check_insert(mt, i) check_insert(mt, set[i], entry[i%2])
#define erase_check_erase(mt, i) check_erase(mt, set[i], entry[i%2])
static noinline void check_erase_testset(struct maple_tree *mt)
{
unsigned long set[] = { 5015, 5014, 5017, 25, 1000,
1001, 1002, 1003, 1005, 0,
6003, 6002, 6008, 6012, 6015,
7003, 7002, 7008, 7012, 7015,
8003, 8002, 8008, 8012, 8015,
9003, 9002, 9008, 9012, 9015,
10003, 10002, 10008, 10012, 10015,
11003, 11002, 11008, 11012, 11015,
12003, 12002, 12008, 12012, 12015,
13003, 13002, 13008, 13012, 13015,
14003, 14002, 14008, 14012, 14015,
15003, 15002, 15008, 15012, 15015,
};
void *ptr = &set;
void *entry[2] = { ptr, mt };
void *root_node;
rcu_register_thread();
mt_set_in_rcu(mt);
for (int i = 0; i < 4; i++)
erase_check_insert(mt, i);
for (int i = 0; i < 4; i++)
erase_check_load(mt, i);
mt_set_non_kernel(2);
erase_check_erase(mt, 1);
erase_check_load(mt, 0);
check_load(mt, set[1], NULL);
for (int i = 2; i < 4; i++)
erase_check_load(mt, i);
erase_check_erase(mt, 2);
erase_check_load(mt, 0);
check_load(mt, set[1], NULL);
check_load(mt, set[2], NULL);
erase_check_insert(mt, 1);
erase_check_insert(mt, 2);
for (int i = 0; i < 4; i++)
erase_check_load(mt, i);
/* Check erase and load without an allocation. */
erase_check_load(mt, 3);
erase_check_erase(mt, 1);
erase_check_load(mt, 0);
check_load(mt, set[1], NULL);
for (int i = 2; i < 4; i++)
erase_check_load(mt, i);
/*
* Set the newly erased node. This will produce a different allocated
* node to avoid busy slots.
*/
root_node = mt->ma_root;
erase_check_insert(mt, 1);
erase_check_load(mt, 0);
check_load(mt, 5016, NULL);
erase_check_load(mt, 1);
check_load(mt, 5013, NULL);
erase_check_load(mt, 2);
check_load(mt, 5018, NULL);
erase_check_load(mt, 3);
erase_check_erase(mt, 2); /* erase 5017 to check append */
erase_check_load(mt, 0);
check_load(mt, 5016, NULL);
erase_check_load(mt, 1);
check_load(mt, 5013, NULL);
check_load(mt, set[2], NULL);
check_load(mt, 5018, NULL);
erase_check_load(mt, 3);
root_node = mt->ma_root;
erase_check_insert(mt, 2);
erase_check_load(mt, 0);
check_load(mt, 5016, NULL);
erase_check_load(mt, 1);
check_load(mt, 5013, NULL);
erase_check_load(mt, 2);
check_load(mt, 5018, NULL);
erase_check_load(mt, 3);
mt_set_non_kernel(1);
erase_check_erase(mt, 2); /* erase 5017 to check append */
erase_check_load(mt, 0);
check_load(mt, 5016, NULL);
check_load(mt, set[2], NULL);
erase_check_erase(mt, 0); /* erase 5015 to check append */
check_load(mt, set[0], NULL);
check_load(mt, 5016, NULL);
erase_check_insert(mt, 4); /* 1000 < Should not split. */
check_load(mt, set[0], NULL);
check_load(mt, 5016, NULL);
erase_check_load(mt, 1);
check_load(mt, 5013, NULL);
check_load(mt, set[2], NULL);
check_load(mt, 5018, NULL);
erase_check_load(mt, 4);
check_load(mt, 999, NULL);
check_load(mt, 1001, NULL);
erase_check_load(mt, 4);
if (mt_in_rcu(mt))
MT_BUG_ON(mt, root_node == mt->ma_root);
else
MT_BUG_ON(mt, root_node != mt->ma_root);
/* Should not have split. */
MT_BUG_ON(mt, !mte_is_leaf(mt->ma_root));
/* Coalesce testing */
erase_check_insert(mt, 0);
erase_check_insert(mt, 2);
for (int i = 5; i < 25; i++) {
erase_check_insert(mt, i);
for (int j = i; j >= 0; j--)
erase_check_load(mt, j);
}
erase_check_erase(mt, 14); /*6015 */
for (int i = 0; i < 25; i++) {
if (i == 14)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
erase_check_erase(mt, 16); /*7002 */
for (int i = 0; i < 25; i++) {
if (i == 16 || i == 14)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
mt_set_non_kernel(1);
erase_check_erase(mt, 13); /*6012 */
for (int i = 0; i < 25; i++) {
if (i == 16 || i == 14 || i == 13)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
erase_check_erase(mt, 15); /*7003 */
for (int i = 0; i < 25; i++) {
if (i <= 16 && i >= 13)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
mt_set_non_kernel(2);
erase_check_erase(mt, 17); /*7008 *should* cause coalesce. */
for (int i = 0; i < 25; i++) {
if (i <= 17 && i >= 13)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
erase_check_erase(mt, 18); /*7012 */
for (int i = 0; i < 25; i++) {
if (i <= 18 && i >= 13)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
mt_set_non_kernel(2);
erase_check_erase(mt, 19); /*7015 */
for (int i = 0; i < 25; i++) {
if (i <= 19 && i >= 13)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
erase_check_erase(mt, 20); /*8003 */
for (int i = 0; i < 25; i++) {
if (i <= 20 && i >= 13)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
erase_check_erase(mt, 21); /*8002 */
for (int i = 0; i < 25; i++) {
if (i <= 21 && i >= 13)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
mt_set_non_kernel(2);
erase_check_erase(mt, 22); /*8008 */
for (int i = 0; i < 25; i++) {
if (i <= 22 && i >= 13)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
for (int i = 23; i < 25; i++)
erase_check_erase(mt, i);
for (int i = 0; i < 25; i++) {
if (i <= 25 && i >= 13)
check_load(mt, set[i], NULL);
else
erase_check_load(mt, i);
}
/* Shrinking tree test. */
for (int i = 13; i < ARRAY_SIZE(set); i++)
erase_check_insert(mt, i);
mt_set_non_kernel(99);
for (int i = 18; i < ARRAY_SIZE(set); i++) {
erase_check_erase(mt, i);
for (int j = 0; j < ARRAY_SIZE(set); j++) {
if (j < 18 || j > i)
erase_check_load(mt, j);
else
check_load(mt, set[j], NULL);
}
}
mt_set_non_kernel(35);
for (int i = 0; i < 18; i++) {
erase_check_erase(mt, i);
for (int j = 0; j < ARRAY_SIZE(set); j++) {
if (j < 18 && j > i)
erase_check_load(mt, j);
else
check_load(mt, set[j], NULL);
}
}
erase_check_insert(mt, 8);
erase_check_insert(mt, 9);
erase_check_erase(mt, 8);
rcu_unregister_thread();
}
/* End of erase testing */
/* VM Generated Crashes - uses its own tree walk for verification */
#define erase_check_store_range(mt, a, i, ptr) mtree_test_store_range(mt, \
a[(i)], a[(i + 1)], ptr)
#define STORE 1
#define SNULL 2
#define ERASE 3
#define ec_type_str(x) \
(((x) == STORE) ? \
"STORE" : \
(((x) == SNULL) ? \
"SNULL" : "ERASE") \
)
#define check_erase2_debug 0
/* Calculate the overwritten entries. */
int mas_ce2_over_count(struct ma_state *mas_start, struct ma_state *mas_end,
void *s_entry, unsigned long s_min,
void *e_entry, unsigned long e_max,
unsigned long *set, int i, bool null_entry)
{
int count = 0, span = 0;
unsigned long retry = 0;
void *entry;
struct ma_state tmp;
/* count slots */
memcpy(&tmp, mas_start, sizeof(tmp));
entry = mas_next(&tmp, mas_end->last);
while (entry) {
BUG_ON(retry > 50); /* stop infinite retry on testing. */
if (xa_is_zero(s_entry)) {
retry++;
continue;
}
count++;
span++;
entry = mas_next(&tmp, mas_end->last);
}
if (null_entry) {
/* Check splitting end. */
if (e_entry && (e_max > mas_end->last))
count--;
/* check overwrite of entire start */
if (s_entry && (s_min == mas_start->index))
count++;
} else { /* !null_entry (store) */
bool esplit = e_max > mas_end->last;
bool ssplit = s_min != mas_start->index;
if (s_entry && e_entry) {
if (esplit && ssplit)
count--;
else if (ssplit)
count--;
else if (esplit) {
if (span)
count--;
}
} else if (s_entry && !e_entry) {
if (ssplit)
count--;
} else if (!s_entry && e_entry) {
if (esplit)
count--;
count--;
} else {
count--;
}
}
return count;
}
/*
* mas_node_walk() - Walk a maple node to offset of the index.
* @mas: The maple state
* @type: The maple node type
* @*range_min: Pointer to store the minimum range of the offset
* @*range_max: Pointer to store the maximum range of the offset
*
* The offset will be stored in the maple state.
*
*/
static inline void mas_node_walk(struct ma_state *mas, struct maple_node *node,
enum maple_type type, unsigned long *range_min,
unsigned long *range_max)
{
unsigned long *pivots;
unsigned char count;
unsigned long prev, max;
unsigned char offset;
unsigned long index;
if (unlikely(ma_is_dense(type))) {
(*range_max) = (*range_min) = mas->index;
if (unlikely(ma_dead_node(node)))
return;
mas->offset = mas->index = mas->min;
return;
}
pivots = ma_pivots(node, type);
max = pivots[0];
if (unlikely(ma_dead_node(node)))
return;
offset = 0;
prev = mas->min;
index = mas->index;
if (unlikely(index <= max))
goto offset_zero;
count = mt_pivots[type];
while (++offset < count) {
prev = max;
max = pivots[offset];
if (unlikely(ma_dead_node(node)))
return;
if (index <= max)
goto offset_found;
else if (unlikely(!max))
goto mas_max;
}
prev = max;
mas_max:
max = mas->max;
offset_found:
prev++;
offset_zero:
mas->offset = offset;
if (ma_is_leaf(type)) {
*range_max = max;
*range_min = prev;
} else {
mas->max = max;
mas->min = prev;
}
}
/*
* mas_descend_walk(): Locates a value and sets the mas->node and slot
* accordingly. range_min and range_max are set to the range which the entry is
* valid.
* @mas: The maple state
* @*range_min: A pointer to store the minimum of the range
* @*range_max: A pointer to store the maximum of the range
*
* Check mas->node is still valid on return of any value.
*
* Return: true if pointing to a valid node and offset. False otherwise.
*/
static inline bool mas_descend_walk(struct ma_state *mas,
unsigned long *range_min, unsigned long *range_max)
{
struct maple_enode *next;
struct maple_node *node;
enum maple_type type;
next = mas->node;
while (true) {
node = mte_to_node(next);
type = mte_node_type(next);
mas_node_walk(mas, node, type, range_min, range_max);
next = mas_slot(mas, ma_slots(node, type), mas->offset);
if (unlikely(ma_dead_node(node)))
return false;
if (unlikely(ma_is_leaf(type)))
return true;
/* Descend. */
mas->node = next;
}
return false;
}
/*
* mas_tree_walk() - Walk to @mas->index and set the range values.
* @mas: The maple state.
* @*range_min: The minimum range to be set.
* @*range_max: The maximum range to be set.
*
* Ranges are only valid if there is a valid entry at @mas->index.
*
* Return: True if a value exists, false otherwise.
*/
static inline bool mas_tree_walk(struct ma_state *mas, unsigned long *range_min,
unsigned long *range_max)
{
bool ret;
retry:
ret = false;
mas_start(mas);
if (mas_is_none(mas))
goto not_found;
if (mas_is_ptr(mas)) {
*range_min = *range_max = 0;
if (!mas->index)
return true;
goto not_found;
}
ret = mas_descend_walk(mas, range_min, range_max);
if (unlikely(mte_dead_node(mas->node))) {
mas->node = MAS_START;
goto retry;
}
return ret;
not_found:
mas->offset = MAPLE_NODE_SLOTS;
return false;
}
static inline void *mas_range_load(struct ma_state *mas,
unsigned long *range_min, unsigned long *range_max)
{
void *entry = NULL;
unsigned long index = mas->index;
if (mas_is_none(mas) || mas_is_paused(mas))
mas->node = MAS_START;
retry:
if (mas_tree_walk(mas, range_min, range_max))
if (unlikely(mas->node == MAS_ROOT))
return mas_root(mas);
if (likely(mas->offset != MAPLE_NODE_SLOTS))
entry = mas_get_slot(mas, mas->offset);
if (mas_dead_node(mas, index))
goto retry;
return entry;
}
#if defined(CONFIG_64BIT)
static noinline void check_erase2_testset(struct maple_tree *mt,
unsigned long *set, unsigned long size)
{
int entry_count = 0;
int check = 0;
void *foo;
unsigned long addr = 0;
void *s_entry = NULL, *e_entry = NULL;
MA_STATE(mas, mt, 0, 0);
for (int i = 0; i < size; i += 3) {
unsigned long s_min, s_max;
unsigned long e_min, e_max;
void *value = NULL;
MA_STATE(mas_start, mt, set[i+1], set[i+1]);
MA_STATE(mas_end, mt, set[i+2], set[i+2]);
mt_set_non_kernel(127);
#if check_erase2_debug
pr_err("%s: %d %s %lu - %lu\n", __func__, i,
ec_type_str(set[i]),
set[i+1], set[i+2]);
#endif
s_entry = mas_range_load(&mas_start, &s_min, &s_max);
e_entry = mas_range_load(&mas_end, &e_min, &e_max);
switch (set[i]) {
case SNULL:
if ((s_min == set[i+1]) && (s_max == set[i+2])) {
if (s_entry)
entry_count--;
} else if ((s_min != set[i+1]) && (s_max != set[i+2])) {
entry_count++;
} else if ((mas_start.node != mas_end.node) ||
(mas_start.offset != mas_end.offset)) {
entry_count -=
mas_ce2_over_count(&mas_start, &mas_end,
s_entry, s_min,
e_entry, e_max, set, i,
true);
}
erase_check_store_range(mt, set, i + 1, value);
break;
case STORE:
value = xa_mk_value(set[i + 1]);
if (mas_start.offset > mt_slot_count(mas_start.node)) {
entry_count++; /* appending an entry. */
} else if ((s_min == e_min) && (s_max == e_max)) {
if (!entry_count)
entry_count++;
else if (s_entry) {
if (e_max > mas_end.last)
entry_count++;
if (s_min < mas_start.index)
entry_count++;
} else {
entry_count++;
}
} else {
entry_count -=
mas_ce2_over_count(&mas_start, &mas_end,
s_entry, s_min,
e_entry, e_max, set, i,
false);
}
erase_check_store_range(mt, set, i + 1, value);
break;
case ERASE:
if (!s_entry)
break;
check_erase(mt, set[i+1], xa_mk_value(set[i+1]));
entry_count--;
break;
}
mt_validate(mt);
if (entry_count)
MT_BUG_ON(mt, !mt_height(mt));
#if check_erase2_debug > 1
mt_dump(mt);
#endif
#if check_erase2_debug
pr_err("Done\n");
#endif
check = 0;
addr = 0;
mt_for_each(mt, foo, addr, ULONG_MAX) {
check++;
#if check_erase2_debug > 2
pr_err("mt: %lu -> %p (%d)\n", addr+1, foo, check);
#endif
if (check > entry_count)
break;
}
#if check_erase2_debug > 2
pr_err("mt_for_each %d and count %d\n", check, entry_count);
#endif
MT_BUG_ON(mt, check != entry_count);
check = 0;
addr = 0;
mas_reset(&mas);
mas.index = 0;
rcu_read_lock();
mas_for_each(&mas, foo, ULONG_MAX) {
if (xa_is_zero(foo)) {
if (addr == mas.index) {
mt_dump(mas.tree);
pr_err("retry failed %lu - %lu\n",
mas.index, mas.last);
MT_BUG_ON(mt, 1);
}
addr = mas.index;
continue;
}
#if check_erase2_debug > 2
pr_err("mas: %lu -> %p\n", mas.index, foo);
#endif
check++;
if (check > entry_count)
break;
}
rcu_read_unlock();
#if check_erase2_debug > 2
pr_err("mas_for_each %d and count %d\n", check, entry_count);
mt_validate(mt);
#endif
MT_BUG_ON(mt, check != entry_count);
MT_BUG_ON(mt, mtree_load(mas.tree, 0) != NULL);
}
}
/* These tests were pulled from KVM tree modifications which failed. */
static noinline void check_erase2_sets(struct maple_tree *mt)
{
void *entry;
unsigned long start = 0;
unsigned long set[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140721266458624, 140737488351231,
ERASE, 140721266458624, 140737488351231,
STORE, 140721266458624, 140721266462719,
STORE, 94735788949504, 94735789121535,
ERASE, 94735788949504, 94735789121535,
STORE, 94735788949504, 94735788965887,
STORE, 94735788965888, 94735789121535,
ERASE, 94735788965888, 94735789121535,
STORE, 94735788965888, 94735789068287,
STORE, 94735789068288, 94735789109247,
STORE, 94735789109248, 94735789121535,
STORE, 140253902692352, 140253902864383,
ERASE, 140253902692352, 140253902864383,
STORE, 140253902692352, 140253902696447,
STORE, 140253902696448, 140253902864383,
};
unsigned long set2[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140735933583360, 140737488351231,
ERASE, 140735933583360, 140737488351231,
STORE, 140735933583360, 140735933587455,
STORE, 94811003260928, 94811003432959,
ERASE, 94811003260928, 94811003432959,
STORE, 94811003260928, 94811003277311,
STORE, 94811003277312, 94811003432959,
ERASE, 94811003277312, 94811003432959,
STORE, 94811003277312, 94811003379711,
STORE, 94811003379712, 94811003420671,
STORE, 94811003420672, 94811003432959,
STORE, 140277094653952, 140277094825983,
ERASE, 140277094653952, 140277094825983,
STORE, 140277094653952, 140277094658047,
STORE, 140277094658048, 140277094825983,
ERASE, 140277094658048, 140277094825983,
STORE, 140277094658048, 140277094780927,
STORE, 140277094780928, 140277094813695,
STORE, 140277094813696, 140277094821887,
STORE, 140277094821888, 140277094825983,
STORE, 140735933906944, 140735933911039,
};
unsigned long set3[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140735790264320, 140737488351231,
ERASE, 140735790264320, 140737488351231,
STORE, 140735790264320, 140735790268415,
STORE, 94016597282816, 94016597454847,
ERASE, 94016597282816, 94016597454847,
STORE, 94016597282816, 94016597299199,
STORE, 94016597299200, 94016597454847,
ERASE, 94016597299200, 94016597454847,
STORE, 94016597299200, 94016597401599,
STORE, 94016597401600, 94016597442559,
STORE, 94016597442560, 94016597454847,
STORE, 140496959283200, 140496959455231,
ERASE, 140496959283200, 140496959455231,
STORE, 140496959283200, 140496959287295,
STORE, 140496959287296, 140496959455231,
ERASE, 140496959287296, 140496959455231,
STORE, 140496959287296, 140496959410175,
STORE, 140496959410176, 140496959442943,
STORE, 140496959442944, 140496959451135,
STORE, 140496959451136, 140496959455231,
STORE, 140735791718400, 140735791722495,
STORE, 140735791706112, 140735791718399,
STORE, 47135835713536, 47135835721727,
STORE, 47135835721728, 47135835729919,
STORE, 47135835729920, 47135835893759,
ERASE, 47135835729920, 47135835893759,
STORE, 47135835729920, 47135835742207,
STORE, 47135835742208, 47135835893759,
STORE, 47135835840512, 47135835893759,
STORE, 47135835742208, 47135835840511,
ERASE, 47135835742208, 47135835840511,
STORE, 47135835742208, 47135835840511,
STORE, 47135835885568, 47135835893759,
STORE, 47135835840512, 47135835885567,
ERASE, 47135835840512, 47135835885567,
STORE, 47135835840512, 47135835893759,
ERASE, 47135835840512, 47135835893759,
STORE, 47135835840512, 47135835885567,
STORE, 47135835885568, 47135835893759,
};
unsigned long set4[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140728251703296, 140737488351231,
ERASE, 140728251703296, 140737488351231,
STORE, 140728251703296, 140728251707391,
STORE, 94668429205504, 94668429377535,
ERASE, 94668429205504, 94668429377535,
STORE, 94668429205504, 94668429221887,
STORE, 94668429221888, 94668429377535,
ERASE, 94668429221888, 94668429377535,
STORE, 94668429221888, 94668429324287,
STORE, 94668429324288, 94668429365247,
STORE, 94668429365248, 94668429377535,
STORE, 47646523273216, 47646523445247,
ERASE, 47646523273216, 47646523445247,
STORE, 47646523273216, 47646523277311,
STORE, 47646523277312, 47646523445247,
ERASE, 47646523277312, 47646523445247,
STORE, 47646523277312, 47646523400191,
};
unsigned long set5[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140726874062848, 140737488351231,
ERASE, 140726874062848, 140737488351231,
STORE, 140726874062848, 140726874066943,
STORE, 94248892870656, 94248893042687,
ERASE, 94248892870656, 94248893042687,
STORE, 94248892870656, 94248892887039,
STORE, 94248892887040, 94248893042687,
ERASE, 94248892887040, 94248893042687,
STORE, 94248892887040, 94248892989439,
STORE, 94248892989440, 94248893030399,
STORE, 94248893030400, 94248893042687,
STORE, 47884786266112, 47884786438143,
ERASE, 47884786266112, 47884786438143,
STORE, 47884786266112, 47884786270207,
STORE, 47884786270208, 47884786438143,
ERASE, 47884786270208, 47884786438143,
STORE, 47884786270208, 47884786393087,
STORE, 47884786393088, 47884786425855,
STORE, 47884786425856, 47884786434047,
STORE, 47884786434048, 47884786438143,
STORE, 140726874513408, 140726874517503,
STORE, 140726874501120, 140726874513407,
STORE, 47884786438144, 47884786446335,
STORE, 47884786446336, 47884786454527,
STORE, 47884786454528, 47884786618367,
ERASE, 47884786454528, 47884786618367,
STORE, 47884786454528, 47884786466815,
STORE, 47884786466816, 47884786618367,
STORE, 47884786565120, 47884786618367,
STORE, 47884786466816, 47884786565119,
ERASE, 47884786466816, 47884786565119,
STORE, 47884786466816, 47884786565119,
STORE, 47884786610176, 47884786618367,
STORE, 47884786565120, 47884786610175,
ERASE, 47884786565120, 47884786610175,
STORE, 47884786565120, 47884786618367,
ERASE, 47884786565120, 47884786618367,
STORE, 47884786565120, 47884786610175,
STORE, 47884786610176, 47884786618367,
ERASE, 47884786610176, 47884786618367,
STORE, 47884786610176, 47884786618367,
STORE, 47884786618368, 47884789669887,
STORE, 47884787163136, 47884789669887,
STORE, 47884786618368, 47884787163135,
ERASE, 47884787163136, 47884789669887,
STORE, 47884787163136, 47884789448703,
STORE, 47884789448704, 47884789669887,
STORE, 47884788858880, 47884789448703,
STORE, 47884787163136, 47884788858879,
ERASE, 47884787163136, 47884788858879,
STORE, 47884787163136, 47884788858879,
STORE, 47884789444608, 47884789448703,
STORE, 47884788858880, 47884789444607,
ERASE, 47884788858880, 47884789444607,
STORE, 47884788858880, 47884789444607,
STORE, 47884789653504, 47884789669887,
STORE, 47884789448704, 47884789653503,
ERASE, 47884789448704, 47884789653503,
STORE, 47884789448704, 47884789653503,
ERASE, 47884789653504, 47884789669887,
STORE, 47884789653504, 47884789669887,
STORE, 47884789669888, 47884791508991,
STORE, 47884789809152, 47884791508991,
STORE, 47884789669888, 47884789809151,
ERASE, 47884789809152, 47884791508991,
STORE, 47884789809152, 47884791468031,
STORE, 47884791468032, 47884791508991,
STORE, 47884791152640, 47884791468031,
STORE, 47884789809152, 47884791152639,
ERASE, 47884789809152, 47884791152639,
STORE, 47884789809152, 47884791152639,
STORE, 47884791463936, 47884791468031,
STORE, 47884791152640, 47884791463935,
ERASE, 47884791152640, 47884791463935,
STORE, 47884791152640, 47884791463935,
STORE, 47884791492608, 47884791508991,
STORE, 47884791468032, 47884791492607,
ERASE, 47884791468032, 47884791492607,
STORE, 47884791468032, 47884791492607,
ERASE, 47884791492608, 47884791508991,
STORE, 47884791492608, 47884791508991,
STORE, 47884791508992, 47884791644159,
ERASE, 47884791508992, 47884791644159,
STORE, 47884791508992, 47884791533567,
STORE, 47884791533568, 47884791644159,
STORE, 47884791595008, 47884791644159,
STORE, 47884791533568, 47884791595007,
ERASE, 47884791533568, 47884791595007,
STORE, 47884791533568, 47884791595007,
STORE, 47884791619584, 47884791644159,
STORE, 47884791595008, 47884791619583,
ERASE, 47884791595008, 47884791619583,
STORE, 47884791595008, 47884791644159,
ERASE, 47884791595008, 47884791644159,
STORE, 47884791595008, 47884791619583,
STORE, 47884791619584, 47884791644159,
STORE, 47884791627776, 47884791644159,
STORE, 47884791619584, 47884791627775,
ERASE, 47884791619584, 47884791627775,
STORE, 47884791619584, 47884791627775,
ERASE, 47884791627776, 47884791644159,
STORE, 47884791627776, 47884791644159,
STORE, 47884791644160, 47884791664639,
ERASE, 47884791644160, 47884791664639,
STORE, 47884791644160, 47884791648255,
STORE, 47884791648256, 47884791664639,
STORE, 47884791652352, 47884791664639,
STORE, 47884791648256, 47884791652351,
ERASE, 47884791648256, 47884791652351,
STORE, 47884791648256, 47884791652351,
STORE, 47884791656448, 47884791664639,
STORE, 47884791652352, 47884791656447,
ERASE, 47884791652352, 47884791656447,
STORE, 47884791652352, 47884791664639,
ERASE, 47884791652352, 47884791664639,
STORE, 47884791652352, 47884791656447,
STORE, 47884791656448, 47884791664639,
ERASE, 47884791656448, 47884791664639,
STORE, 47884791656448, 47884791664639,
STORE, 47884791664640, 47884791672831,
ERASE, 47884791468032, 47884791492607,
STORE, 47884791468032, 47884791484415,
STORE, 47884791484416, 47884791492607,
ERASE, 47884791656448, 47884791664639,
STORE, 47884791656448, 47884791660543,
STORE, 47884791660544, 47884791664639,
ERASE, 47884791619584, 47884791627775,
STORE, 47884791619584, 47884791623679,
STORE, 47884791623680, 47884791627775,
};
unsigned long set6[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140722999021568, 140737488351231,
ERASE, 140722999021568, 140737488351231,
STORE, 140722999021568, 140722999025663,
STORE, 94901500268544, 94901500440575,
ERASE, 94901500268544, 94901500440575,
STORE, 94901500268544, 94901500284927,
STORE, 94901500284928, 94901500440575,
ERASE, 94901500284928, 94901500440575,
STORE, 94901500284928, 94901500387327,
STORE, 94901500387328, 94901500428287,
STORE, 94901500428288, 94901500440575,
STORE, 47430426660864, 47430426832895,
ERASE, 47430426660864, 47430426832895,
STORE, 47430426660864, 47430426664959,
STORE, 47430426664960, 47430426832895,
ERASE, 47430426664960, 47430426832895,
STORE, 47430426664960, 47430426787839,
STORE, 47430426787840, 47430426820607,
STORE, 47430426820608, 47430426828799,
STORE, 47430426828800, 47430426832895,
STORE, 140722999115776, 140722999119871,
STORE, 140722999103488, 140722999115775,
STORE, 47430426832896, 47430426841087,
STORE, 47430426841088, 47430426849279,
STORE, 47430426849280, 47430427013119,
ERASE, 47430426849280, 47430427013119,
STORE, 47430426849280, 47430426861567,
STORE, 47430426861568, 47430427013119,
STORE, 47430426959872, 47430427013119,
STORE, 47430426861568, 47430426959871,
ERASE, 47430426861568, 47430426959871,
STORE, 47430426861568, 47430426959871,
STORE, 47430427004928, 47430427013119,
STORE, 47430426959872, 47430427004927,
ERASE, 47430426959872, 47430427004927,
STORE, 47430426959872, 47430427013119,
ERASE, 47430426959872, 47430427013119,
STORE, 47430426959872, 47430427004927,
STORE, 47430427004928, 47430427013119,
ERASE, 47430427004928, 47430427013119,
STORE, 47430427004928, 47430427013119,
STORE, 47430427013120, 47430430064639,
STORE, 47430427557888, 47430430064639,
STORE, 47430427013120, 47430427557887,
ERASE, 47430427557888, 47430430064639,
STORE, 47430427557888, 47430429843455,
STORE, 47430429843456, 47430430064639,
STORE, 47430429253632, 47430429843455,
STORE, 47430427557888, 47430429253631,
ERASE, 47430427557888, 47430429253631,
STORE, 47430427557888, 47430429253631,
STORE, 47430429839360, 47430429843455,
STORE, 47430429253632, 47430429839359,
ERASE, 47430429253632, 47430429839359,
STORE, 47430429253632, 47430429839359,
STORE, 47430430048256, 47430430064639,
STORE, 47430429843456, 47430430048255,
ERASE, 47430429843456, 47430430048255,
STORE, 47430429843456, 47430430048255,
ERASE, 47430430048256, 47430430064639,
STORE, 47430430048256, 47430430064639,
STORE, 47430430064640, 47430431903743,
STORE, 47430430203904, 47430431903743,
STORE, 47430430064640, 47430430203903,
ERASE, 47430430203904, 47430431903743,
STORE, 47430430203904, 47430431862783,
STORE, 47430431862784, 47430431903743,
STORE, 47430431547392, 47430431862783,
STORE, 47430430203904, 47430431547391,
ERASE, 47430430203904, 47430431547391,
STORE, 47430430203904, 47430431547391,
STORE, 47430431858688, 47430431862783,
STORE, 47430431547392, 47430431858687,
ERASE, 47430431547392, 47430431858687,
STORE, 47430431547392, 47430431858687,
STORE, 47430431887360, 47430431903743,
STORE, 47430431862784, 47430431887359,
ERASE, 47430431862784, 47430431887359,
STORE, 47430431862784, 47430431887359,
ERASE, 47430431887360, 47430431903743,
STORE, 47430431887360, 47430431903743,
STORE, 47430431903744, 47430432038911,
ERASE, 47430431903744, 47430432038911,
STORE, 47430431903744, 47430431928319,
STORE, 47430431928320, 47430432038911,
STORE, 47430431989760, 47430432038911,
STORE, 47430431928320, 47430431989759,
ERASE, 47430431928320, 47430431989759,
STORE, 47430431928320, 47430431989759,
STORE, 47430432014336, 47430432038911,
STORE, 47430431989760, 47430432014335,
ERASE, 47430431989760, 47430432014335,
STORE, 47430431989760, 47430432038911,
ERASE, 47430431989760, 47430432038911,
STORE, 47430431989760, 47430432014335,
STORE, 47430432014336, 47430432038911,
STORE, 47430432022528, 47430432038911,
STORE, 47430432014336, 47430432022527,
ERASE, 47430432014336, 47430432022527,
STORE, 47430432014336, 47430432022527,
ERASE, 47430432022528, 47430432038911,
STORE, 47430432022528, 47430432038911,
STORE, 47430432038912, 47430432059391,
ERASE, 47430432038912, 47430432059391,
STORE, 47430432038912, 47430432043007,
STORE, 47430432043008, 47430432059391,
STORE, 47430432047104, 47430432059391,
STORE, 47430432043008, 47430432047103,
ERASE, 47430432043008, 47430432047103,
STORE, 47430432043008, 47430432047103,
STORE, 47430432051200, 47430432059391,
STORE, 47430432047104, 47430432051199,
ERASE, 47430432047104, 47430432051199,
STORE, 47430432047104, 47430432059391,
ERASE, 47430432047104, 47430432059391,
STORE, 47430432047104, 47430432051199,
STORE, 47430432051200, 47430432059391,
ERASE, 47430432051200, 47430432059391,
STORE, 47430432051200, 47430432059391,
STORE, 47430432059392, 47430432067583,
ERASE, 47430431862784, 47430431887359,
STORE, 47430431862784, 47430431879167,
STORE, 47430431879168, 47430431887359,
ERASE, 47430432051200, 47430432059391,
STORE, 47430432051200, 47430432055295,
STORE, 47430432055296, 47430432059391,
ERASE, 47430432014336, 47430432022527,
STORE, 47430432014336, 47430432018431,
STORE, 47430432018432, 47430432022527,
};
unsigned long set7[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140729808330752, 140737488351231,
ERASE, 140729808330752, 140737488351231,
STORE, 140729808330752, 140729808334847,
STORE, 94629632020480, 94629632192511,
ERASE, 94629632020480, 94629632192511,
STORE, 94629632020480, 94629632036863,
STORE, 94629632036864, 94629632192511,
ERASE, 94629632036864, 94629632192511,
STORE, 94629632036864, 94629632139263,
STORE, 94629632139264, 94629632180223,
STORE, 94629632180224, 94629632192511,
STORE, 47439981776896, 47439981948927,
ERASE, 47439981776896, 47439981948927,
STORE, 47439981776896, 47439981780991,
STORE, 47439981780992, 47439981948927,
ERASE, 47439981780992, 47439981948927,
STORE, 47439981780992, 47439981903871,
STORE, 47439981903872, 47439981936639,
STORE, 47439981936640, 47439981944831,
STORE, 47439981944832, 47439981948927,
STORE, 140729808474112, 140729808478207,
STORE, 140729808461824, 140729808474111,
STORE, 47439981948928, 47439981957119,
STORE, 47439981957120, 47439981965311,
STORE, 47439981965312, 47439982129151,
ERASE, 47439981965312, 47439982129151,
STORE, 47439981965312, 47439981977599,
STORE, 47439981977600, 47439982129151,
STORE, 47439982075904, 47439982129151,
STORE, 47439981977600, 47439982075903,
ERASE, 47439981977600, 47439982075903,
STORE, 47439981977600, 47439982075903,
STORE, 47439982120960, 47439982129151,
STORE, 47439982075904, 47439982120959,
ERASE, 47439982075904, 47439982120959,
STORE, 47439982075904, 47439982129151,
ERASE, 47439982075904, 47439982129151,
STORE, 47439982075904, 47439982120959,
STORE, 47439982120960, 47439982129151,
ERASE, 47439982120960, 47439982129151,
STORE, 47439982120960, 47439982129151,
STORE, 47439982129152, 47439985180671,
STORE, 47439982673920, 47439985180671,
STORE, 47439982129152, 47439982673919,
ERASE, 47439982673920, 47439985180671,
STORE, 47439982673920, 47439984959487,
STORE, 47439984959488, 47439985180671,
STORE, 47439984369664, 47439984959487,
STORE, 47439982673920, 47439984369663,
ERASE, 47439982673920, 47439984369663,
STORE, 47439982673920, 47439984369663,
STORE, 47439984955392, 47439984959487,
STORE, 47439984369664, 47439984955391,
ERASE, 47439984369664, 47439984955391,
STORE, 47439984369664, 47439984955391,
STORE, 47439985164288, 47439985180671,
STORE, 47439984959488, 47439985164287,
ERASE, 47439984959488, 47439985164287,
STORE, 47439984959488, 47439985164287,
ERASE, 47439985164288, 47439985180671,
STORE, 47439985164288, 47439985180671,
STORE, 47439985180672, 47439987019775,
STORE, 47439985319936, 47439987019775,
STORE, 47439985180672, 47439985319935,
ERASE, 47439985319936, 47439987019775,
STORE, 47439985319936, 47439986978815,
STORE, 47439986978816, 47439987019775,
STORE, 47439986663424, 47439986978815,
STORE, 47439985319936, 47439986663423,
ERASE, 47439985319936, 47439986663423,
STORE, 47439985319936, 47439986663423,
STORE, 47439986974720, 47439986978815,
STORE, 47439986663424, 47439986974719,
ERASE, 47439986663424, 47439986974719,
STORE, 47439986663424, 47439986974719,
STORE, 47439987003392, 47439987019775,
STORE, 47439986978816, 47439987003391,
ERASE, 47439986978816, 47439987003391,
STORE, 47439986978816, 47439987003391,
ERASE, 47439987003392, 47439987019775,
STORE, 47439987003392, 47439987019775,
STORE, 47439987019776, 47439987154943,
ERASE, 47439987019776, 47439987154943,
STORE, 47439987019776, 47439987044351,
STORE, 47439987044352, 47439987154943,
STORE, 47439987105792, 47439987154943,
STORE, 47439987044352, 47439987105791,
ERASE, 47439987044352, 47439987105791,
STORE, 47439987044352, 47439987105791,
STORE, 47439987130368, 47439987154943,
STORE, 47439987105792, 47439987130367,
ERASE, 47439987105792, 47439987130367,
STORE, 47439987105792, 47439987154943,
ERASE, 47439987105792, 47439987154943,
STORE, 47439987105792, 47439987130367,
STORE, 47439987130368, 47439987154943,
STORE, 47439987138560, 47439987154943,
STORE, 47439987130368, 47439987138559,
ERASE, 47439987130368, 47439987138559,
STORE, 47439987130368, 47439987138559,
ERASE, 47439987138560, 47439987154943,
STORE, 47439987138560, 47439987154943,
STORE, 47439987154944, 47439987175423,
ERASE, 47439987154944, 47439987175423,
STORE, 47439987154944, 47439987159039,
STORE, 47439987159040, 47439987175423,
STORE, 47439987163136, 47439987175423,
STORE, 47439987159040, 47439987163135,
ERASE, 47439987159040, 47439987163135,
STORE, 47439987159040, 47439987163135,
STORE, 47439987167232, 47439987175423,
STORE, 47439987163136, 47439987167231,
ERASE, 47439987163136, 47439987167231,
STORE, 47439987163136, 47439987175423,
ERASE, 47439987163136, 47439987175423,
STORE, 47439987163136, 47439987167231,
STORE, 47439987167232, 47439987175423,
ERASE, 47439987167232, 47439987175423,
STORE, 47439987167232, 47439987175423,
STORE, 47439987175424, 47439987183615,
ERASE, 47439986978816, 47439987003391,
STORE, 47439986978816, 47439986995199,
STORE, 47439986995200, 47439987003391,
ERASE, 47439987167232, 47439987175423,
STORE, 47439987167232, 47439987171327,
STORE, 47439987171328, 47439987175423,
ERASE, 47439987130368, 47439987138559,
STORE, 47439987130368, 47439987134463,
STORE, 47439987134464, 47439987138559,
};
unsigned long set8[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140722482974720, 140737488351231,
ERASE, 140722482974720, 140737488351231,
STORE, 140722482974720, 140722482978815,
STORE, 94121505034240, 94121505206271,
ERASE, 94121505034240, 94121505206271,
STORE, 94121505034240, 94121505050623,
STORE, 94121505050624, 94121505206271,
ERASE, 94121505050624, 94121505206271,
STORE, 94121505050624, 94121505153023,
STORE, 94121505153024, 94121505193983,
STORE, 94121505193984, 94121505206271,
STORE, 47708483284992, 47708483457023,
ERASE, 47708483284992, 47708483457023,
STORE, 47708483284992, 47708483289087,
STORE, 47708483289088, 47708483457023,
ERASE, 47708483289088, 47708483457023,
STORE, 47708483289088, 47708483411967,
STORE, 47708483411968, 47708483444735,
STORE, 47708483444736, 47708483452927,
STORE, 47708483452928, 47708483457023,
STORE, 140722483142656, 140722483146751,
STORE, 140722483130368, 140722483142655,
STORE, 47708483457024, 47708483465215,
STORE, 47708483465216, 47708483473407,
STORE, 47708483473408, 47708483637247,
ERASE, 47708483473408, 47708483637247,
STORE, 47708483473408, 47708483485695,
STORE, 47708483485696, 47708483637247,
STORE, 47708483584000, 47708483637247,
STORE, 47708483485696, 47708483583999,
ERASE, 47708483485696, 47708483583999,
STORE, 47708483485696, 47708483583999,
STORE, 47708483629056, 47708483637247,
STORE, 47708483584000, 47708483629055,
ERASE, 47708483584000, 47708483629055,
STORE, 47708483584000, 47708483637247,
ERASE, 47708483584000, 47708483637247,
STORE, 47708483584000, 47708483629055,
STORE, 47708483629056, 47708483637247,
ERASE, 47708483629056, 47708483637247,
STORE, 47708483629056, 47708483637247,
STORE, 47708483637248, 47708486688767,
STORE, 47708484182016, 47708486688767,
STORE, 47708483637248, 47708484182015,
ERASE, 47708484182016, 47708486688767,
STORE, 47708484182016, 47708486467583,
STORE, 47708486467584, 47708486688767,
STORE, 47708485877760, 47708486467583,
STORE, 47708484182016, 47708485877759,
ERASE, 47708484182016, 47708485877759,
STORE, 47708484182016, 47708485877759,
STORE, 47708486463488, 47708486467583,
STORE, 47708485877760, 47708486463487,
ERASE, 47708485877760, 47708486463487,
STORE, 47708485877760, 47708486463487,
STORE, 47708486672384, 47708486688767,
STORE, 47708486467584, 47708486672383,
ERASE, 47708486467584, 47708486672383,
STORE, 47708486467584, 47708486672383,
ERASE, 47708486672384, 47708486688767,
STORE, 47708486672384, 47708486688767,
STORE, 47708486688768, 47708488527871,
STORE, 47708486828032, 47708488527871,
STORE, 47708486688768, 47708486828031,
ERASE, 47708486828032, 47708488527871,
STORE, 47708486828032, 47708488486911,
STORE, 47708488486912, 47708488527871,
STORE, 47708488171520, 47708488486911,
STORE, 47708486828032, 47708488171519,
ERASE, 47708486828032, 47708488171519,
STORE, 47708486828032, 47708488171519,
STORE, 47708488482816, 47708488486911,
STORE, 47708488171520, 47708488482815,
ERASE, 47708488171520, 47708488482815,
STORE, 47708488171520, 47708488482815,
STORE, 47708488511488, 47708488527871,
STORE, 47708488486912, 47708488511487,
ERASE, 47708488486912, 47708488511487,
STORE, 47708488486912, 47708488511487,
ERASE, 47708488511488, 47708488527871,
STORE, 47708488511488, 47708488527871,
STORE, 47708488527872, 47708488663039,
ERASE, 47708488527872, 47708488663039,
STORE, 47708488527872, 47708488552447,
STORE, 47708488552448, 47708488663039,
STORE, 47708488613888, 47708488663039,
STORE, 47708488552448, 47708488613887,
ERASE, 47708488552448, 47708488613887,
STORE, 47708488552448, 47708488613887,
STORE, 47708488638464, 47708488663039,
STORE, 47708488613888, 47708488638463,
ERASE, 47708488613888, 47708488638463,
STORE, 47708488613888, 47708488663039,
ERASE, 47708488613888, 47708488663039,
STORE, 47708488613888, 47708488638463,
STORE, 47708488638464, 47708488663039,
STORE, 47708488646656, 47708488663039,
STORE, 47708488638464, 47708488646655,
ERASE, 47708488638464, 47708488646655,
STORE, 47708488638464, 47708488646655,
ERASE, 47708488646656, 47708488663039,
STORE, 47708488646656, 47708488663039,
STORE, 47708488663040, 47708488683519,
ERASE, 47708488663040, 47708488683519,
STORE, 47708488663040, 47708488667135,
STORE, 47708488667136, 47708488683519,
STORE, 47708488671232, 47708488683519,
STORE, 47708488667136, 47708488671231,
ERASE, 47708488667136, 47708488671231,
STORE, 47708488667136, 47708488671231,
STORE, 47708488675328, 47708488683519,
STORE, 47708488671232, 47708488675327,
ERASE, 47708488671232, 47708488675327,
STORE, 47708488671232, 47708488683519,
ERASE, 47708488671232, 47708488683519,
STORE, 47708488671232, 47708488675327,
STORE, 47708488675328, 47708488683519,
ERASE, 47708488675328, 47708488683519,
STORE, 47708488675328, 47708488683519,
STORE, 47708488683520, 47708488691711,
ERASE, 47708488486912, 47708488511487,
STORE, 47708488486912, 47708488503295,
STORE, 47708488503296, 47708488511487,
ERASE, 47708488675328, 47708488683519,
STORE, 47708488675328, 47708488679423,
STORE, 47708488679424, 47708488683519,
ERASE, 47708488638464, 47708488646655,
STORE, 47708488638464, 47708488642559,
STORE, 47708488642560, 47708488646655,
};
unsigned long set9[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140736427839488, 140737488351231,
ERASE, 140736427839488, 140736427839488,
STORE, 140736427839488, 140736427843583,
STORE, 94071213395968, 94071213567999,
ERASE, 94071213395968, 94071213395968,
STORE, 94071213395968, 94071213412351,
STORE, 94071213412352, 94071213567999,
ERASE, 94071213412352, 94071213412352,
STORE, 94071213412352, 94071213514751,
STORE, 94071213514752, 94071213555711,
STORE, 94071213555712, 94071213567999,
STORE, 139968410644480, 139968410816511,
ERASE, 139968410644480, 139968410644480,
STORE, 139968410644480, 139968410648575,
STORE, 139968410648576, 139968410816511,
ERASE, 139968410648576, 139968410648576,
STORE, 139968410648576, 139968410771455,
STORE, 139968410771456, 139968410804223,
STORE, 139968410804224, 139968410812415,
STORE, 139968410812416, 139968410816511,
STORE, 140736429277184, 140736429281279,
STORE, 140736429264896, 140736429277183,
STORE, 47664384352256, 47664384360447,
STORE, 47664384360448, 47664384368639,
STORE, 47664384368640, 47664384532479,
ERASE, 47664384368640, 47664384368640,
STORE, 47664384368640, 47664384380927,
STORE, 47664384380928, 47664384532479,
STORE, 47664384479232, 47664384532479,
STORE, 47664384380928, 47664384479231,
ERASE, 47664384380928, 47664384380928,
STORE, 47664384380928, 47664384479231,
STORE, 47664384524288, 47664384532479,
STORE, 47664384479232, 47664384524287,
ERASE, 47664384479232, 47664384479232,
STORE, 47664384479232, 47664384532479,
ERASE, 47664384479232, 47664384479232,
STORE, 47664384479232, 47664384524287,
STORE, 47664384524288, 47664384532479,
ERASE, 47664384524288, 47664384524288,
STORE, 47664384524288, 47664384532479,
STORE, 47664384532480, 47664387583999,
STORE, 47664385077248, 47664387583999,
STORE, 47664384532480, 47664385077247,
ERASE, 47664385077248, 47664385077248,
STORE, 47664385077248, 47664387362815,
STORE, 47664387362816, 47664387583999,
STORE, 47664386772992, 47664387362815,
STORE, 47664385077248, 47664386772991,
ERASE, 47664385077248, 47664385077248,
STORE, 47664385077248, 47664386772991,
STORE, 47664387358720, 47664387362815,
STORE, 47664386772992, 47664387358719,
ERASE, 47664386772992, 47664386772992,
STORE, 47664386772992, 47664387358719,
STORE, 47664387567616, 47664387583999,
STORE, 47664387362816, 47664387567615,
ERASE, 47664387362816, 47664387362816,
STORE, 47664387362816, 47664387567615,
ERASE, 47664387567616, 47664387567616,
STORE, 47664387567616, 47664387583999,
STORE, 47664387584000, 47664389423103,
STORE, 47664387723264, 47664389423103,
STORE, 47664387584000, 47664387723263,
ERASE, 47664387723264, 47664387723264,
STORE, 47664387723264, 47664389382143,
STORE, 47664389382144, 47664389423103,
STORE, 47664389066752, 47664389382143,
STORE, 47664387723264, 47664389066751,
ERASE, 47664387723264, 47664387723264,
STORE, 47664387723264, 47664389066751,
STORE, 47664389378048, 47664389382143,
STORE, 47664389066752, 47664389378047,
ERASE, 47664389066752, 47664389066752,
STORE, 47664389066752, 47664389378047,
STORE, 47664389406720, 47664389423103,
STORE, 47664389382144, 47664389406719,
ERASE, 47664389382144, 47664389382144,
STORE, 47664389382144, 47664389406719,
ERASE, 47664389406720, 47664389406720,
STORE, 47664389406720, 47664389423103,
STORE, 47664389423104, 47664389558271,
ERASE, 47664389423104, 47664389423104,
STORE, 47664389423104, 47664389447679,
STORE, 47664389447680, 47664389558271,
STORE, 47664389509120, 47664389558271,
STORE, 47664389447680, 47664389509119,
ERASE, 47664389447680, 47664389447680,
STORE, 47664389447680, 47664389509119,
STORE, 47664389533696, 47664389558271,
STORE, 47664389509120, 47664389533695,
ERASE, 47664389509120, 47664389509120,
STORE, 47664389509120, 47664389558271,
ERASE, 47664389509120, 47664389509120,
STORE, 47664389509120, 47664389533695,
STORE, 47664389533696, 47664389558271,
STORE, 47664389541888, 47664389558271,
STORE, 47664389533696, 47664389541887,
ERASE, 47664389533696, 47664389533696,
STORE, 47664389533696, 47664389541887,
ERASE, 47664389541888, 47664389541888,
STORE, 47664389541888, 47664389558271,
STORE, 47664389558272, 47664389578751,
ERASE, 47664389558272, 47664389558272,
STORE, 47664389558272, 47664389562367,
STORE, 47664389562368, 47664389578751,
STORE, 47664389566464, 47664389578751,
STORE, 47664389562368, 47664389566463,
ERASE, 47664389562368, 47664389562368,
STORE, 47664389562368, 47664389566463,
STORE, 47664389570560, 47664389578751,
STORE, 47664389566464, 47664389570559,
ERASE, 47664389566464, 47664389566464,
STORE, 47664389566464, 47664389578751,
ERASE, 47664389566464, 47664389566464,
STORE, 47664389566464, 47664389570559,
STORE, 47664389570560, 47664389578751,
ERASE, 47664389570560, 47664389570560,
STORE, 47664389570560, 47664389578751,
STORE, 47664389578752, 47664389586943,
ERASE, 47664389382144, 47664389382144,
STORE, 47664389382144, 47664389398527,
STORE, 47664389398528, 47664389406719,
ERASE, 47664389570560, 47664389570560,
STORE, 47664389570560, 47664389574655,
STORE, 47664389574656, 47664389578751,
ERASE, 47664389533696, 47664389533696,
STORE, 47664389533696, 47664389537791,
STORE, 47664389537792, 47664389541887,
ERASE, 47664387362816, 47664387362816,
STORE, 47664387362816, 47664387559423,
STORE, 47664387559424, 47664387567615,
ERASE, 47664384524288, 47664384524288,
STORE, 47664384524288, 47664384528383,
STORE, 47664384528384, 47664384532479,
ERASE, 94071213555712, 94071213555712,
STORE, 94071213555712, 94071213563903,
STORE, 94071213563904, 94071213567999,
ERASE, 139968410804224, 139968410804224,
STORE, 139968410804224, 139968410808319,
STORE, 139968410808320, 139968410812415,
ERASE, 47664384352256, 47664384352256,
STORE, 94071244402688, 94071244537855,
STORE, 140737488347136, 140737488351231,
STORE, 140728271503360, 140737488351231,
ERASE, 140728271503360, 140728271503360,
STORE, 140728271503360, 140728271507455,
STORE, 94410361982976, 94410362155007,
ERASE, 94410361982976, 94410361982976,
STORE, 94410361982976, 94410361999359,
STORE, 94410361999360, 94410362155007,
ERASE, 94410361999360, 94410361999360,
STORE, 94410361999360, 94410362101759,
STORE, 94410362101760, 94410362142719,
STORE, 94410362142720, 94410362155007,
STORE, 140351953997824, 140351954169855,
ERASE, 140351953997824, 140351953997824,
STORE, 140351953997824, 140351954001919,
STORE, 140351954001920, 140351954169855,
ERASE, 140351954001920, 140351954001920,
STORE, 140351954001920, 140351954124799,
STORE, 140351954124800, 140351954157567,
STORE, 140351954157568, 140351954165759,
STORE, 140351954165760, 140351954169855,
STORE, 140728272429056, 140728272433151,
STORE, 140728272416768, 140728272429055,
STORE, 47280840998912, 47280841007103,
STORE, 47280841007104, 47280841015295,
STORE, 47280841015296, 47280841179135,
ERASE, 47280841015296, 47280841015296,
STORE, 47280841015296, 47280841027583,
STORE, 47280841027584, 47280841179135,
STORE, 47280841125888, 47280841179135,
STORE, 47280841027584, 47280841125887,
ERASE, 47280841027584, 47280841027584,
STORE, 47280841027584, 47280841125887,
STORE, 47280841170944, 47280841179135,
STORE, 47280841125888, 47280841170943,
ERASE, 47280841125888, 47280841125888,
STORE, 47280841125888, 47280841179135,
ERASE, 47280841125888, 47280841125888,
STORE, 47280841125888, 47280841170943,
STORE, 47280841170944, 47280841179135,
ERASE, 47280841170944, 47280841170944,
STORE, 47280841170944, 47280841179135,
STORE, 47280841179136, 47280844230655,
STORE, 47280841723904, 47280844230655,
STORE, 47280841179136, 47280841723903,
ERASE, 47280841723904, 47280841723904,
STORE, 47280841723904, 47280844009471,
STORE, 47280844009472, 47280844230655,
STORE, 47280843419648, 47280844009471,
STORE, 47280841723904, 47280843419647,
ERASE, 47280841723904, 47280841723904,
STORE, 47280841723904, 47280843419647,
STORE, 47280844005376, 47280844009471,
STORE, 47280843419648, 47280844005375,
ERASE, 47280843419648, 47280843419648,
STORE, 47280843419648, 47280844005375,
STORE, 47280844214272, 47280844230655,
STORE, 47280844009472, 47280844214271,
ERASE, 47280844009472, 47280844009472,
STORE, 47280844009472, 47280844214271,
ERASE, 47280844214272, 47280844214272,
STORE, 47280844214272, 47280844230655,
STORE, 47280844230656, 47280846069759,
STORE, 47280844369920, 47280846069759,
STORE, 47280844230656, 47280844369919,
ERASE, 47280844369920, 47280844369920,
STORE, 47280844369920, 47280846028799,
STORE, 47280846028800, 47280846069759,
STORE, 47280845713408, 47280846028799,
STORE, 47280844369920, 47280845713407,
ERASE, 47280844369920, 47280844369920,
STORE, 47280844369920, 47280845713407,
STORE, 47280846024704, 47280846028799,
STORE, 47280845713408, 47280846024703,
ERASE, 47280845713408, 47280845713408,
STORE, 47280845713408, 47280846024703,
STORE, 47280846053376, 47280846069759,
STORE, 47280846028800, 47280846053375,
ERASE, 47280846028800, 47280846028800,
STORE, 47280846028800, 47280846053375,
ERASE, 47280846053376, 47280846053376,
STORE, 47280846053376, 47280846069759,
STORE, 47280846069760, 47280846204927,
ERASE, 47280846069760, 47280846069760,
STORE, 47280846069760, 47280846094335,
STORE, 47280846094336, 47280846204927,
STORE, 47280846155776, 47280846204927,
STORE, 47280846094336, 47280846155775,
ERASE, 47280846094336, 47280846094336,
STORE, 47280846094336, 47280846155775,
STORE, 47280846180352, 47280846204927,
STORE, 47280846155776, 47280846180351,
ERASE, 47280846155776, 47280846155776,
STORE, 47280846155776, 47280846204927,
ERASE, 47280846155776, 47280846155776,
STORE, 47280846155776, 47280846180351,
STORE, 47280846180352, 47280846204927,
STORE, 47280846188544, 47280846204927,
STORE, 47280846180352, 47280846188543,
ERASE, 47280846180352, 47280846180352,
STORE, 47280846180352, 47280846188543,
ERASE, 47280846188544, 47280846188544,
STORE, 47280846188544, 47280846204927,
STORE, 47280846204928, 47280846225407,
ERASE, 47280846204928, 47280846204928,
STORE, 47280846204928, 47280846209023,
STORE, 47280846209024, 47280846225407,
STORE, 47280846213120, 47280846225407,
STORE, 47280846209024, 47280846213119,
ERASE, 47280846209024, 47280846209024,
STORE, 47280846209024, 47280846213119,
STORE, 47280846217216, 47280846225407,
STORE, 47280846213120, 47280846217215,
ERASE, 47280846213120, 47280846213120,
STORE, 47280846213120, 47280846225407,
ERASE, 47280846213120, 47280846213120,
STORE, 47280846213120, 47280846217215,
STORE, 47280846217216, 47280846225407,
ERASE, 47280846217216, 47280846217216,
STORE, 47280846217216, 47280846225407,
STORE, 47280846225408, 47280846233599,
ERASE, 47280846028800, 47280846028800,
STORE, 47280846028800, 47280846045183,
STORE, 47280846045184, 47280846053375,
ERASE, 47280846217216, 47280846217216,
STORE, 47280846217216, 47280846221311,
STORE, 47280846221312, 47280846225407,
ERASE, 47280846180352, 47280846180352,
STORE, 47280846180352, 47280846184447,
STORE, 47280846184448, 47280846188543,
ERASE, 47280844009472, 47280844009472,
STORE, 47280844009472, 47280844206079,
STORE, 47280844206080, 47280844214271,
ERASE, 47280841170944, 47280841170944,
STORE, 47280841170944, 47280841175039,
STORE, 47280841175040, 47280841179135,
ERASE, 94410362142720, 94410362142720,
STORE, 94410362142720, 94410362150911,
STORE, 94410362150912, 94410362155007,
ERASE, 140351954157568, 140351954157568,
STORE, 140351954157568, 140351954161663,
STORE, 140351954161664, 140351954165759,
ERASE, 47280840998912, 47280840998912,
STORE, 94410379456512, 94410379591679,
STORE, 140737488347136, 140737488351231,
STORE, 140732946362368, 140737488351231,
ERASE, 140732946362368, 140732946362368,
STORE, 140732946362368, 140732946366463,
STORE, 94352937934848, 94352938106879,
ERASE, 94352937934848, 94352937934848,
STORE, 94352937934848, 94352937951231,
STORE, 94352937951232, 94352938106879,
ERASE, 94352937951232, 94352937951232,
STORE, 94352937951232, 94352938053631,
STORE, 94352938053632, 94352938094591,
STORE, 94352938094592, 94352938106879,
STORE, 140595518742528, 140595518914559,
ERASE, 140595518742528, 140595518742528,
STORE, 140595518742528, 140595518746623,
STORE, 140595518746624, 140595518914559,
ERASE, 140595518746624, 140595518746624,
STORE, 140595518746624, 140595518869503,
STORE, 140595518869504, 140595518902271,
STORE, 140595518902272, 140595518910463,
STORE, 140595518910464, 140595518914559,
STORE, 140732947468288, 140732947472383,
STORE, 140732947456000, 140732947468287,
STORE, 47037276254208, 47037276262399,
STORE, 47037276262400, 47037276270591,
STORE, 47037276270592, 47037276434431,
ERASE, 47037276270592, 47037276270592,
STORE, 47037276270592, 47037276282879,
STORE, 47037276282880, 47037276434431,
STORE, 47037276381184, 47037276434431,
STORE, 47037276282880, 47037276381183,
ERASE, 47037276282880, 47037276282880,
STORE, 47037276282880, 47037276381183,
STORE, 47037276426240, 47037276434431,
STORE, 47037276381184, 47037276426239,
ERASE, 47037276381184, 47037276381184,
STORE, 47037276381184, 47037276434431,
ERASE, 47037276381184, 47037276381184,
STORE, 47037276381184, 47037276426239,
STORE, 47037276426240, 47037276434431,
ERASE, 47037276426240, 47037276426240,
STORE, 47037276426240, 47037276434431,
STORE, 47037276434432, 47037279485951,
STORE, 47037276979200, 47037279485951,
STORE, 47037276434432, 47037276979199,
ERASE, 47037276979200, 47037276979200,
STORE, 47037276979200, 47037279264767,
STORE, 47037279264768, 47037279485951,
STORE, 47037278674944, 47037279264767,
STORE, 47037276979200, 47037278674943,
ERASE, 47037276979200, 47037276979200,
STORE, 47037276979200, 47037278674943,
STORE, 47037279260672, 47037279264767,
STORE, 47037278674944, 47037279260671,
ERASE, 47037278674944, 47037278674944,
STORE, 47037278674944, 47037279260671,
STORE, 47037279469568, 47037279485951,
STORE, 47037279264768, 47037279469567,
ERASE, 47037279264768, 47037279264768,
STORE, 47037279264768, 47037279469567,
ERASE, 47037279469568, 47037279469568,
STORE, 47037279469568, 47037279485951,
STORE, 47037279485952, 47037281325055,
STORE, 47037279625216, 47037281325055,
STORE, 47037279485952, 47037279625215,
ERASE, 47037279625216, 47037279625216,
STORE, 47037279625216, 47037281284095,
STORE, 47037281284096, 47037281325055,
STORE, 47037280968704, 47037281284095,
STORE, 47037279625216, 47037280968703,
ERASE, 47037279625216, 47037279625216,
STORE, 47037279625216, 47037280968703,
STORE, 47037281280000, 47037281284095,
STORE, 47037280968704, 47037281279999,
ERASE, 47037280968704, 47037280968704,
STORE, 47037280968704, 47037281279999,
STORE, 47037281308672, 47037281325055,
STORE, 47037281284096, 47037281308671,
ERASE, 47037281284096, 47037281284096,
STORE, 47037281284096, 47037281308671,
ERASE, 47037281308672, 47037281308672,
STORE, 47037281308672, 47037281325055,
STORE, 47037281325056, 47037281460223,
ERASE, 47037281325056, 47037281325056,
STORE, 47037281325056, 47037281349631,
STORE, 47037281349632, 47037281460223,
STORE, 47037281411072, 47037281460223,
STORE, 47037281349632, 47037281411071,
ERASE, 47037281349632, 47037281349632,
STORE, 47037281349632, 47037281411071,
STORE, 47037281435648, 47037281460223,
STORE, 47037281411072, 47037281435647,
ERASE, 47037281411072, 47037281411072,
STORE, 47037281411072, 47037281460223,
ERASE, 47037281411072, 47037281411072,
STORE, 47037281411072, 47037281435647,
STORE, 47037281435648, 47037281460223,
STORE, 47037281443840, 47037281460223,
STORE, 47037281435648, 47037281443839,
ERASE, 47037281435648, 47037281435648,
STORE, 47037281435648, 47037281443839,
ERASE, 47037281443840, 47037281443840,
STORE, 47037281443840, 47037281460223,
STORE, 47037281460224, 47037281480703,
ERASE, 47037281460224, 47037281460224,
STORE, 47037281460224, 47037281464319,
STORE, 47037281464320, 47037281480703,
STORE, 47037281468416, 47037281480703,
STORE, 47037281464320, 47037281468415,
ERASE, 47037281464320, 47037281464320,
STORE, 47037281464320, 47037281468415,
STORE, 47037281472512, 47037281480703,
STORE, 47037281468416, 47037281472511,
ERASE, 47037281468416, 47037281468416,
STORE, 47037281468416, 47037281480703,
ERASE, 47037281468416, 47037281468416,
STORE, 47037281468416, 47037281472511,
STORE, 47037281472512, 47037281480703,
ERASE, 47037281472512, 47037281472512,
STORE, 47037281472512, 47037281480703,
STORE, 47037281480704, 47037281488895,
ERASE, 47037281284096, 47037281284096,
STORE, 47037281284096, 47037281300479,
STORE, 47037281300480, 47037281308671,
ERASE, 47037281472512, 47037281472512,
STORE, 47037281472512, 47037281476607,
STORE, 47037281476608, 47037281480703,
ERASE, 47037281435648, 47037281435648,
STORE, 47037281435648, 47037281439743,
STORE, 47037281439744, 47037281443839,
ERASE, 47037279264768, 47037279264768,
STORE, 47037279264768, 47037279461375,
STORE, 47037279461376, 47037279469567,
ERASE, 47037276426240, 47037276426240,
STORE, 47037276426240, 47037276430335,
STORE, 47037276430336, 47037276434431,
ERASE, 94352938094592, 94352938094592,
STORE, 94352938094592, 94352938102783,
STORE, 94352938102784, 94352938106879,
ERASE, 140595518902272, 140595518902272,
STORE, 140595518902272, 140595518906367,
STORE, 140595518906368, 140595518910463,
ERASE, 47037276254208, 47037276254208,
STORE, 94352938438656, 94352938573823,
STORE, 140737488347136, 140737488351231,
STORE, 140733506027520, 140737488351231,
ERASE, 140733506027520, 140733506027520,
STORE, 140733506027520, 140733506031615,
STORE, 94150123073536, 94150123245567,
ERASE, 94150123073536, 94150123073536,
STORE, 94150123073536, 94150123089919,
STORE, 94150123089920, 94150123245567,
ERASE, 94150123089920, 94150123089920,
STORE, 94150123089920, 94150123192319,
STORE, 94150123192320, 94150123233279,
STORE, 94150123233280, 94150123245567,
STORE, 140081290375168, 140081290547199,
ERASE, 140081290375168, 140081290375168,
STORE, 140081290375168, 140081290379263,
STORE, 140081290379264, 140081290547199,
ERASE, 140081290379264, 140081290379264,
STORE, 140081290379264, 140081290502143,
STORE, 140081290502144, 140081290534911,
STORE, 140081290534912, 140081290543103,
STORE, 140081290543104, 140081290547199,
STORE, 140733506707456, 140733506711551,
STORE, 140733506695168, 140733506707455,
STORE, 47551504621568, 47551504629759,
STORE, 47551504629760, 47551504637951,
STORE, 47551504637952, 47551504801791,
ERASE, 47551504637952, 47551504637952,
STORE, 47551504637952, 47551504650239,
STORE, 47551504650240, 47551504801791,
STORE, 47551504748544, 47551504801791,
STORE, 47551504650240, 47551504748543,
ERASE, 47551504650240, 47551504650240,
STORE, 47551504650240, 47551504748543,
STORE, 47551504793600, 47551504801791,
STORE, 47551504748544, 47551504793599,
ERASE, 47551504748544, 47551504748544,
STORE, 47551504748544, 47551504801791,
ERASE, 47551504748544, 47551504748544,
STORE, 47551504748544, 47551504793599,
STORE, 47551504793600, 47551504801791,
ERASE, 47551504793600, 47551504793600,
STORE, 47551504793600, 47551504801791,
STORE, 47551504801792, 47551507853311,
STORE, 47551505346560, 47551507853311,
STORE, 47551504801792, 47551505346559,
ERASE, 47551505346560, 47551505346560,
STORE, 47551505346560, 47551507632127,
STORE, 47551507632128, 47551507853311,
STORE, 47551507042304, 47551507632127,
STORE, 47551505346560, 47551507042303,
ERASE, 47551505346560, 47551505346560,
STORE, 47551505346560, 47551507042303,
STORE, 47551507628032, 47551507632127,
STORE, 47551507042304, 47551507628031,
ERASE, 47551507042304, 47551507042304,
STORE, 47551507042304, 47551507628031,
STORE, 47551507836928, 47551507853311,
STORE, 47551507632128, 47551507836927,
ERASE, 47551507632128, 47551507632128,
STORE, 47551507632128, 47551507836927,
ERASE, 47551507836928, 47551507836928,
STORE, 47551507836928, 47551507853311,
STORE, 47551507853312, 47551509692415,
STORE, 47551507992576, 47551509692415,
STORE, 47551507853312, 47551507992575,
ERASE, 47551507992576, 47551507992576,
STORE, 47551507992576, 47551509651455,
STORE, 47551509651456, 47551509692415,
STORE, 47551509336064, 47551509651455,
STORE, 47551507992576, 47551509336063,
ERASE, 47551507992576, 47551507992576,
STORE, 47551507992576, 47551509336063,
STORE, 47551509647360, 47551509651455,
STORE, 47551509336064, 47551509647359,
ERASE, 47551509336064, 47551509336064,
STORE, 47551509336064, 47551509647359,
STORE, 47551509676032, 47551509692415,
STORE, 47551509651456, 47551509676031,
ERASE, 47551509651456, 47551509651456,
STORE, 47551509651456, 47551509676031,
ERASE, 47551509676032, 47551509676032,
STORE, 47551509676032, 47551509692415,
STORE, 47551509692416, 47551509827583,
ERASE, 47551509692416, 47551509692416,
STORE, 47551509692416, 47551509716991,
STORE, 47551509716992, 47551509827583,
STORE, 47551509778432, 47551509827583,
STORE, 47551509716992, 47551509778431,
ERASE, 47551509716992, 47551509716992,
STORE, 47551509716992, 47551509778431,
STORE, 47551509803008, 47551509827583,
STORE, 47551509778432, 47551509803007,
ERASE, 47551509778432, 47551509778432,
STORE, 47551509778432, 47551509827583,
ERASE, 47551509778432, 47551509778432,
STORE, 47551509778432, 47551509803007,
STORE, 47551509803008, 47551509827583,
STORE, 47551509811200, 47551509827583,
STORE, 47551509803008, 47551509811199,
ERASE, 47551509803008, 47551509803008,
STORE, 47551509803008, 47551509811199,
ERASE, 47551509811200, 47551509811200,
STORE, 47551509811200, 47551509827583,
STORE, 47551509827584, 47551509848063,
ERASE, 47551509827584, 47551509827584,
STORE, 47551509827584, 47551509831679,
STORE, 47551509831680, 47551509848063,
STORE, 47551509835776, 47551509848063,
STORE, 47551509831680, 47551509835775,
ERASE, 47551509831680, 47551509831680,
STORE, 47551509831680, 47551509835775,
STORE, 47551509839872, 47551509848063,
STORE, 47551509835776, 47551509839871,
ERASE, 47551509835776, 47551509835776,
STORE, 47551509835776, 47551509848063,
ERASE, 47551509835776, 47551509835776,
STORE, 47551509835776, 47551509839871,
STORE, 47551509839872, 47551509848063,
ERASE, 47551509839872, 47551509839872,
STORE, 47551509839872, 47551509848063,
STORE, 47551509848064, 47551509856255,
ERASE, 47551509651456, 47551509651456,
STORE, 47551509651456, 47551509667839,
STORE, 47551509667840, 47551509676031,
ERASE, 47551509839872, 47551509839872,
STORE, 47551509839872, 47551509843967,
STORE, 47551509843968, 47551509848063,
ERASE, 47551509803008, 47551509803008,
STORE, 47551509803008, 47551509807103,
STORE, 47551509807104, 47551509811199,
ERASE, 47551507632128, 47551507632128,
STORE, 47551507632128, 47551507828735,
STORE, 47551507828736, 47551507836927,
ERASE, 47551504793600, 47551504793600,
STORE, 47551504793600, 47551504797695,
STORE, 47551504797696, 47551504801791,
ERASE, 94150123233280, 94150123233280,
STORE, 94150123233280, 94150123241471,
STORE, 94150123241472, 94150123245567,
ERASE, 140081290534912, 140081290534912,
STORE, 140081290534912, 140081290539007,
STORE, 140081290539008, 140081290543103,
ERASE, 47551504621568, 47551504621568,
STORE, 94150148112384, 94150148247551,
STORE, 140737488347136, 140737488351231,
STORE, 140734389334016, 140737488351231,
ERASE, 140734389334016, 140734389334016,
STORE, 140734389334016, 140734389338111,
STORE, 94844636606464, 94844636778495,
ERASE, 94844636606464, 94844636606464,
STORE, 94844636606464, 94844636622847,
STORE, 94844636622848, 94844636778495,
ERASE, 94844636622848, 94844636622848,
STORE, 94844636622848, 94844636725247,
STORE, 94844636725248, 94844636766207,
STORE, 94844636766208, 94844636778495,
STORE, 139922765217792, 139922765389823,
ERASE, 139922765217792, 139922765217792,
STORE, 139922765217792, 139922765221887,
STORE, 139922765221888, 139922765389823,
ERASE, 139922765221888, 139922765221888,
STORE, 139922765221888, 139922765344767,
STORE, 139922765344768, 139922765377535,
STORE, 139922765377536, 139922765385727,
STORE, 139922765385728, 139922765389823,
STORE, 140734389678080, 140734389682175,
STORE, 140734389665792, 140734389678079,
STORE, 47710029778944, 47710029787135,
STORE, 47710029787136, 47710029795327,
STORE, 47710029795328, 47710029959167,
ERASE, 47710029795328, 47710029795328,
STORE, 47710029795328, 47710029807615,
STORE, 47710029807616, 47710029959167,
STORE, 47710029905920, 47710029959167,
STORE, 47710029807616, 47710029905919,
ERASE, 47710029807616, 47710029807616,
STORE, 47710029807616, 47710029905919,
STORE, 47710029950976, 47710029959167,
STORE, 47710029905920, 47710029950975,
ERASE, 47710029905920, 47710029905920,
STORE, 47710029905920, 47710029959167,
ERASE, 47710029905920, 47710029905920,
STORE, 47710029905920, 47710029950975,
STORE, 47710029950976, 47710029959167,
ERASE, 47710029950976, 47710029950976,
STORE, 47710029950976, 47710029959167,
STORE, 47710029959168, 47710033010687,
STORE, 47710030503936, 47710033010687,
STORE, 47710029959168, 47710030503935,
ERASE, 47710030503936, 47710030503936,
STORE, 47710030503936, 47710032789503,
STORE, 47710032789504, 47710033010687,
STORE, 47710032199680, 47710032789503,
STORE, 47710030503936, 47710032199679,
ERASE, 47710030503936, 47710030503936,
STORE, 47710030503936, 47710032199679,
STORE, 47710032785408, 47710032789503,
STORE, 47710032199680, 47710032785407,
ERASE, 47710032199680, 47710032199680,
STORE, 47710032199680, 47710032785407,
STORE, 47710032994304, 47710033010687,
STORE, 47710032789504, 47710032994303,
ERASE, 47710032789504, 47710032789504,
STORE, 47710032789504, 47710032994303,
ERASE, 47710032994304, 47710032994304,
STORE, 47710032994304, 47710033010687,
STORE, 47710033010688, 47710034849791,
STORE, 47710033149952, 47710034849791,
STORE, 47710033010688, 47710033149951,
ERASE, 47710033149952, 47710033149952,
STORE, 47710033149952, 47710034808831,
STORE, 47710034808832, 47710034849791,
STORE, 47710034493440, 47710034808831,
STORE, 47710033149952, 47710034493439,
ERASE, 47710033149952, 47710033149952,
STORE, 47710033149952, 47710034493439,
STORE, 47710034804736, 47710034808831,
STORE, 47710034493440, 47710034804735,
ERASE, 47710034493440, 47710034493440,
STORE, 47710034493440, 47710034804735,
STORE, 47710034833408, 47710034849791,
STORE, 47710034808832, 47710034833407,
ERASE, 47710034808832, 47710034808832,
STORE, 47710034808832, 47710034833407,
ERASE, 47710034833408, 47710034833408,
STORE, 47710034833408, 47710034849791,
STORE, 47710034849792, 47710034984959,
ERASE, 47710034849792, 47710034849792,
STORE, 47710034849792, 47710034874367,
STORE, 47710034874368, 47710034984959,
STORE, 47710034935808, 47710034984959,
STORE, 47710034874368, 47710034935807,
ERASE, 47710034874368, 47710034874368,
STORE, 47710034874368, 47710034935807,
STORE, 47710034960384, 47710034984959,
STORE, 47710034935808, 47710034960383,
ERASE, 47710034935808, 47710034935808,
STORE, 47710034935808, 47710034984959,
ERASE, 47710034935808, 47710034935808,
STORE, 47710034935808, 47710034960383,
STORE, 47710034960384, 47710034984959,
STORE, 47710034968576, 47710034984959,
STORE, 47710034960384, 47710034968575,
ERASE, 47710034960384, 47710034960384,
STORE, 47710034960384, 47710034968575,
ERASE, 47710034968576, 47710034968576,
STORE, 47710034968576, 47710034984959,
STORE, 47710034984960, 47710035005439,
ERASE, 47710034984960, 47710034984960,
STORE, 47710034984960, 47710034989055,
STORE, 47710034989056, 47710035005439,
STORE, 47710034993152, 47710035005439,
STORE, 47710034989056, 47710034993151,
ERASE, 47710034989056, 47710034989056,
STORE, 47710034989056, 47710034993151,
STORE, 47710034997248, 47710035005439,
STORE, 47710034993152, 47710034997247,
ERASE, 47710034993152, 47710034993152,
STORE, 47710034993152, 47710035005439,
ERASE, 47710034993152, 47710034993152,
STORE, 47710034993152, 47710034997247,
STORE, 47710034997248, 47710035005439,
ERASE, 47710034997248, 47710034997248,
STORE, 47710034997248, 47710035005439,
STORE, 47710035005440, 47710035013631,
ERASE, 47710034808832, 47710034808832,
STORE, 47710034808832, 47710034825215,
STORE, 47710034825216, 47710034833407,
ERASE, 47710034997248, 47710034997248,
STORE, 47710034997248, 47710035001343,
STORE, 47710035001344, 47710035005439,
ERASE, 47710034960384, 47710034960384,
STORE, 47710034960384, 47710034964479,
STORE, 47710034964480, 47710034968575,
ERASE, 47710032789504, 47710032789504,
STORE, 47710032789504, 47710032986111,
STORE, 47710032986112, 47710032994303,
ERASE, 47710029950976, 47710029950976,
STORE, 47710029950976, 47710029955071,
STORE, 47710029955072, 47710029959167,
ERASE, 94844636766208, 94844636766208,
STORE, 94844636766208, 94844636774399,
STORE, 94844636774400, 94844636778495,
ERASE, 139922765377536, 139922765377536,
STORE, 139922765377536, 139922765381631,
STORE, 139922765381632, 139922765385727,
ERASE, 47710029778944, 47710029778944,
STORE, 94844641775616, 94844641910783,
STORE, 140737488347136, 140737488351231,
STORE, 140732213886976, 140737488351231,
ERASE, 140732213886976, 140732213886976,
STORE, 140732213886976, 140732213891071,
STORE, 94240508887040, 94240509059071,
ERASE, 94240508887040, 94240508887040,
STORE, 94240508887040, 94240508903423,
STORE, 94240508903424, 94240509059071,
ERASE, 94240508903424, 94240508903424,
STORE, 94240508903424, 94240509005823,
STORE, 94240509005824, 94240509046783,
STORE, 94240509046784, 94240509059071,
STORE, 140275106516992, 140275106689023,
ERASE, 140275106516992, 140275106516992,
STORE, 140275106516992, 140275106521087,
STORE, 140275106521088, 140275106689023,
ERASE, 140275106521088, 140275106521088,
STORE, 140275106521088, 140275106643967,
STORE, 140275106643968, 140275106676735,
STORE, 140275106676736, 140275106684927,
STORE, 140275106684928, 140275106689023,
STORE, 140732213977088, 140732213981183,
STORE, 140732213964800, 140732213977087,
STORE, 47357688479744, 47357688487935,
STORE, 47357688487936, 47357688496127,
STORE, 47357688496128, 47357688659967,
ERASE, 47357688496128, 47357688496128,
STORE, 47357688496128, 47357688508415,
STORE, 47357688508416, 47357688659967,
STORE, 47357688606720, 47357688659967,
STORE, 47357688508416, 47357688606719,
ERASE, 47357688508416, 47357688508416,
STORE, 47357688508416, 47357688606719,
STORE, 47357688651776, 47357688659967,
STORE, 47357688606720, 47357688651775,
ERASE, 47357688606720, 47357688606720,
STORE, 47357688606720, 47357688659967,
ERASE, 47357688606720, 47357688606720,
STORE, 47357688606720, 47357688651775,
STORE, 47357688651776, 47357688659967,
ERASE, 47357688651776, 47357688651776,
STORE, 47357688651776, 47357688659967,
STORE, 47357688659968, 47357691711487,
STORE, 47357689204736, 47357691711487,
STORE, 47357688659968, 47357689204735,
ERASE, 47357689204736, 47357689204736,
STORE, 47357689204736, 47357691490303,
STORE, 47357691490304, 47357691711487,
STORE, 47357690900480, 47357691490303,
STORE, 47357689204736, 47357690900479,
ERASE, 47357689204736, 47357689204736,
STORE, 47357689204736, 47357690900479,
STORE, 47357691486208, 47357691490303,
STORE, 47357690900480, 47357691486207,
ERASE, 47357690900480, 47357690900480,
STORE, 47357690900480, 47357691486207,
STORE, 47357691695104, 47357691711487,
STORE, 47357691490304, 47357691695103,
ERASE, 47357691490304, 47357691490304,
STORE, 47357691490304, 47357691695103,
ERASE, 47357691695104, 47357691695104,
STORE, 47357691695104, 47357691711487,
STORE, 47357691711488, 47357693550591,
STORE, 47357691850752, 47357693550591,
STORE, 47357691711488, 47357691850751,
ERASE, 47357691850752, 47357691850752,
STORE, 47357691850752, 47357693509631,
STORE, 47357693509632, 47357693550591,
STORE, 47357693194240, 47357693509631,
STORE, 47357691850752, 47357693194239,
ERASE, 47357691850752, 47357691850752,
STORE, 47357691850752, 47357693194239,
STORE, 47357693505536, 47357693509631,
STORE, 47357693194240, 47357693505535,
ERASE, 47357693194240, 47357693194240,
STORE, 47357693194240, 47357693505535,
STORE, 47357693534208, 47357693550591,
STORE, 47357693509632, 47357693534207,
ERASE, 47357693509632, 47357693509632,
STORE, 47357693509632, 47357693534207,
ERASE, 47357693534208, 47357693534208,
STORE, 47357693534208, 47357693550591,
STORE, 47357693550592, 47357693685759,
ERASE, 47357693550592, 47357693550592,
STORE, 47357693550592, 47357693575167,
STORE, 47357693575168, 47357693685759,
STORE, 47357693636608, 47357693685759,
STORE, 47357693575168, 47357693636607,
ERASE, 47357693575168, 47357693575168,
STORE, 47357693575168, 47357693636607,
STORE, 47357693661184, 47357693685759,
STORE, 47357693636608, 47357693661183,
ERASE, 47357693636608, 47357693636608,
STORE, 47357693636608, 47357693685759,
ERASE, 47357693636608, 47357693636608,
STORE, 47357693636608, 47357693661183,
STORE, 47357693661184, 47357693685759,
STORE, 47357693669376, 47357693685759,
STORE, 47357693661184, 47357693669375,
ERASE, 47357693661184, 47357693661184,
STORE, 47357693661184, 47357693669375,
ERASE, 47357693669376, 47357693669376,
STORE, 47357693669376, 47357693685759,
STORE, 47357693685760, 47357693706239,
ERASE, 47357693685760, 47357693685760,
STORE, 47357693685760, 47357693689855,
STORE, 47357693689856, 47357693706239,
STORE, 47357693693952, 47357693706239,
STORE, 47357693689856, 47357693693951,
ERASE, 47357693689856, 47357693689856,
STORE, 47357693689856, 47357693693951,
STORE, 47357693698048, 47357693706239,
STORE, 47357693693952, 47357693698047,
ERASE, 47357693693952, 47357693693952,
STORE, 47357693693952, 47357693706239,
ERASE, 47357693693952, 47357693693952,
STORE, 47357693693952, 47357693698047,
STORE, 47357693698048, 47357693706239,
ERASE, 47357693698048, 47357693698048,
STORE, 47357693698048, 47357693706239,
STORE, 47357693706240, 47357693714431,
ERASE, 47357693509632, 47357693509632,
STORE, 47357693509632, 47357693526015,
STORE, 47357693526016, 47357693534207,
ERASE, 47357693698048, 47357693698048,
STORE, 47357693698048, 47357693702143,
STORE, 47357693702144, 47357693706239,
ERASE, 47357693661184, 47357693661184,
STORE, 47357693661184, 47357693665279,
STORE, 47357693665280, 47357693669375,
ERASE, 47357691490304, 47357691490304,
STORE, 47357691490304, 47357691686911,
STORE, 47357691686912, 47357691695103,
ERASE, 47357688651776, 47357688651776,
STORE, 47357688651776, 47357688655871,
STORE, 47357688655872, 47357688659967,
ERASE, 94240509046784, 94240509046784,
STORE, 94240509046784, 94240509054975,
STORE, 94240509054976, 94240509059071,
ERASE, 140275106676736, 140275106676736,
STORE, 140275106676736, 140275106680831,
STORE, 140275106680832, 140275106684927,
ERASE, 47357688479744,