From f5c75ba6f6d1ea8cd173d037be5d99c44abe66d8 Mon Sep 17 00:00:00 2001 From: Salma Elsoly Date: Wed, 6 Nov 2024 15:00:50 +0200 Subject: [PATCH 01/10] feat: add testFile to read fixtures Co-authored-by: nabil.salah203@gmail.com --- grid-proxy/internal/explorer/db/db_test.go | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 grid-proxy/internal/explorer/db/db_test.go diff --git a/grid-proxy/internal/explorer/db/db_test.go b/grid-proxy/internal/explorer/db/db_test.go new file mode 100644 index 000000000..97e881167 --- /dev/null +++ b/grid-proxy/internal/explorer/db/db_test.go @@ -0,0 +1,36 @@ +package db + +import ( + "log" + "testing" + + "database/sql" + + "github.com/tanimutomo/sqlfile" + +) + + +var db PostgresDatabase + +func TestMain(m *testing.T){ + + testDb, err := sql.Open("postgres","host=localhost user=postgres port=5432 password=mypassword dbname=testDB sslmode=disable") + + if err != nil{ + log.Fatalf("could not fill db fixtures: %v", err) + } + + s := sqlfile.New() + + err = s.Files("testdata.sql") + + if err!= nil{ + log.Fatalf("could not load sql file: %v",err) + } + _, err = s.Exec(testDb) + + if err !=nil{ + log.Fatalf("could not fill the db: %v", err) + } +} From 431101bc9dade2784e89182af7992b4d26f2e845 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Wed, 6 Nov 2024 19:31:04 +0200 Subject: [PATCH 02/10] feat: fixture testing for the db Signed-off-by: nabil salah --- grid-proxy/internal/explorer/db/db_test.go | 136 ++++++++++++++++-- .../explorer/db/fixtures/testdata.sql | 43 ++++++ 2 files changed, 167 insertions(+), 12 deletions(-) create mode 100644 grid-proxy/internal/explorer/db/fixtures/testdata.sql diff --git a/grid-proxy/internal/explorer/db/db_test.go b/grid-proxy/internal/explorer/db/db_test.go index 97e881167..d435dc1a5 100644 --- a/grid-proxy/internal/explorer/db/db_test.go +++ b/grid-proxy/internal/explorer/db/db_test.go @@ -1,36 +1,148 @@ package db import ( + "context" "log" + "os" "testing" + "time" "database/sql" - "github.com/tanimutomo/sqlfile" - + "github.com/stretchr/testify/assert" + "gorm.io/gorm/logger" ) -var db PostgresDatabase -func TestMain(m *testing.T){ +func TestMain(m *testing.M){ - testDb, err := sql.Open("postgres","host=localhost user=postgres port=5432 password=mypassword dbname=testDB sslmode=disable") + testDb, err := sql.Open("postgres","host=localhost user=postgres port=5432 password=mypassword dbname=testdb sslmode=disable") if err != nil{ log.Fatalf("could not fill db fixtures: %v", err) } + defer testDb.Close() - s := sqlfile.New() + // Load and execute schema + schema, err := os.ReadFile("../../../tools/db/schema.sql") + if err != nil { + log.Fatalf("could not load schema sql file: %v", err) + } + _, err = testDb.Exec(string(schema)) + if err != nil { + log.Fatalf("could not apply schema: %v", err) + } - err = s.Files("testdata.sql") + // + // Load and execute schema + setup, err := os.ReadFile("../../../tools/db/setup.sql") + if err != nil { + log.Fatalf("could not load setup sql file: %v", err) + } + _, err = testDb.Exec(string(setup)) + if err != nil { + log.Fatalf("could not apply setup: %v", err) + } - if err!= nil{ - log.Fatalf("could not load sql file: %v",err) + // it looks like a useless block but everything breaks when it's removed + _, err = testDb.Query("SELECT current_database();") + if err != nil { + panic(err) } - _, err = s.Exec(testDb) - if err !=nil{ - log.Fatalf("could not fill the db: %v", err) + // Load and execute fixture data + queries, err := os.ReadFile("./fixtures/testdata.sql") + if err != nil { + log.Fatalf("could not load query sql file: %v", err) } + _, err = testDb.Exec(string(queries)) + if err != nil { + log.Fatalf("could not populate db: %v", err) + } + time.Sleep(5* time.Second) + code := m.Run() + // Drop the database after tests + defer testDb.Exec( + ` + DROP TABLE IF EXISTS account CASCADE; + DROP TABLE IF EXISTS burn_transaction CASCADE; + DROP TABLE IF EXISTS city CASCADE; + DROP TABLE IF EXISTS contract_bill_report CASCADE; + DROP TABLE IF EXISTS contract_resources CASCADE; + DROP TABLE IF EXISTS country CASCADE; + DROP TABLE IF EXISTS entity CASCADE; + DROP TABLE IF EXISTS entity_proof CASCADE; + DROP TABLE IF EXISTS farm CASCADE; + DROP TABLE IF EXISTS farming_policy CASCADE; + DROP TABLE IF EXISTS historical_balance CASCADE; + DROP TABLE IF EXISTS interfaces CASCADE; + DROP TABLE IF EXISTS location CASCADE; + DROP TABLE IF EXISTS migrations CASCADE; + DROP TABLE IF EXISTS mint_transaction CASCADE; + DROP TABLE IF EXISTS name_contract CASCADE; + DROP TABLE IF EXISTS node CASCADE; + DROP TABLE IF EXISTS node_contract CASCADE; + DROP TABLE IF EXISTS node_resources_free CASCADE; + DROP TABLE IF EXISTS node_resources_total CASCADE; + DROP TABLE IF EXISTS node_resources_used CASCADE; + DROP TABLE IF EXISTS nru_consumption CASCADE; + DROP TABLE IF EXISTS pricing_policy CASCADE; + DROP TABLE IF EXISTS public_config CASCADE; + DROP TABLE IF EXISTS public_ip CASCADE; + DROP TABLE IF EXISTS refund_transaction CASCADE; + DROP TABLE IF EXISTS rent_contract CASCADE; + DROP TABLE IF EXISTS transfer CASCADE; + DROP TABLE IF EXISTS twin CASCADE; + DROP TABLE IF EXISTS typeorm_metadata CASCADE; + DROP TABLE IF EXISTS uptime_event CASCADE; + DROP SCHEMA IF EXISTS substrate_threefold_status CASCADE; + DROP TABLE IF EXISTS node_gpu CASCADE; + + `) + + os.Exit(code) + } + +// TestPostgresDatabase_GetNode tests the GetNode function. +func TestPostgresDatabase_GetNode(t *testing.T) { + + db, err := NewPostgresDatabase("localhost", 5432,"postgres","mypassword","testdb", 80, logger.Error) + + if err != nil { + t.Skipf("Can't connect to testdb %e", err) + } + ctx := context.Background() + + // Test case 1: Node exists + t.Run("Node exists", func(t *testing.T) { + nodeID := uint32(118) // Node ID from the fixture data + + node, err := db.GetNode(ctx, nodeID) + + // Assert no error + assert.NoError(t, err) + // Assert the node data matches fixture values + assert.Equal(t, "node-118", node.ID) + assert.Equal(t, int64(118), node.NodeID) + assert.Equal(t, int64(52), node.FarmID) + assert.Equal(t, "United States", node.Country) + assert.Equal(t, "Los Angeles", node.City) + assert.Equal(t, int64(1000), node.Uptime) + assert.Equal(t, int64(1730904704), node.Created) + assert.Equal(t, "Diy", node.Certification) + }) + + // Test case 2: Node does not exist + t.Run("Node does not exist", func(t *testing.T) { + nonExistentNodeID := uint32(99999) // Node ID that doesn’t exist + + node, err := db.GetNode(ctx, nonExistentNodeID) + + // Assert error is ErrNodeNotFound + assert.ErrorIs(t, err, ErrNodeNotFound) + // Assert returned node is empty + assert.Equal(t, Node{}, node) + }) +} \ No newline at end of file diff --git a/grid-proxy/internal/explorer/db/fixtures/testdata.sql b/grid-proxy/internal/explorer/db/fixtures/testdata.sql new file mode 100644 index 000000000..ff9d8b1c8 --- /dev/null +++ b/grid-proxy/internal/explorer/db/fixtures/testdata.sql @@ -0,0 +1,43 @@ +INSERT INTO twin (id, grid_version, twin_id, account_id, relay, public_key) VALUES ('twin-1', 3, 1, 'account-id-1', 'relay-1', 'public-key-1'),('twin-2', 3, 2, 'account-id-2', 'relay-2', 'public-key-2'),('twin-3', 3, 3, 'account-id-3', 'relay-3', 'public-key-3'),('twin-4', 3, 4, 'account-id-4', 'relay-4', 'public-key-4'),('twin-5', 3, 5, 'account-id-5', 'relay-5', 'public-key-5'),('twin-6', 3, 6, 'account-id-6', 'relay-6', 'public-key-6'),('twin-7', 3, 7, 'account-id-7', 'relay-7', 'public-key-7'),('twin-8', 3, 8, 'account-id-8', 'relay-8', 'public-key-8'),('twin-9', 3, 9, 'account-id-9', 'relay-9', 'public-key-9'),('twin-10', 3, 10, 'account-id-10', 'relay-10', 'public-key-10'),('twin-11', 3, 11, 'account-id-11', 'relay-11', 'public-key-11'),('twin-12', 3, 12, 'account-id-12', 'relay-12', 'public-key-12'),('twin-13', 3, 13, 'account-id-13', 'relay-13', 'public-key-13'),('twin-14', 3, 14, 'account-id-14', 'relay-14', 'public-key-14'),('twin-15', 3, 15, 'account-id-15', 'relay-15', 'public-key-15'),('twin-16', 3, 16, 'account-id-16', 'relay-16', 'public-key-16'),('twin-17', 3, 17, 'account-id-17', 'relay-17', 'public-key-17'),('twin-18', 3, 18, 'account-id-18', 'relay-18', 'public-key-18'),('twin-19', 3, 19, 'account-id-19', 'relay-19', 'public-key-19'),('twin-20', 3, 20, 'account-id-20', 'relay-20', 'public-key-20'),('twin-21', 3, 21, 'account-id-21', 'relay-21', 'public-key-21'),('twin-22', 3, 22, 'account-id-22', 'relay-22', 'public-key-22'),('twin-23', 3, 23, 'account-id-23', 'relay-23', 'public-key-23'),('twin-24', 3, 24, 'account-id-24', 'relay-24', 'public-key-24'),('twin-25', 3, 25, 'account-id-25', 'relay-25', 'public-key-25'),('twin-26', 3, 26, 'account-id-26', 'relay-26', 'public-key-26'),('twin-27', 3, 27, 'account-id-27', 'relay-27', 'public-key-27'),('twin-28', 3, 28, 'account-id-28', 'relay-28', 'public-key-28'),('twin-29', 3, 29, 'account-id-29', 'relay-29', 'public-key-29'),('twin-30', 3, 30, 'account-id-30', 'relay-30', 'public-key-30'),('twin-31', 3, 31, 'account-id-31', 'relay-31', 'public-key-31'),('twin-32', 3, 32, 'account-id-32', 'relay-32', 'public-key-32'),('twin-33', 3, 33, 'account-id-33', 'relay-33', 'public-key-33'),('twin-34', 3, 34, 'account-id-34', 'relay-34', 'public-key-34'),('twin-35', 3, 35, 'account-id-35', 'relay-35', 'public-key-35'),('twin-36', 3, 36, 'account-id-36', 'relay-36', 'public-key-36'),('twin-37', 3, 37, 'account-id-37', 'relay-37', 'public-key-37'),('twin-38', 3, 38, 'account-id-38', 'relay-38', 'public-key-38'),('twin-39', 3, 39, 'account-id-39', 'relay-39', 'public-key-39'),('twin-40', 3, 40, 'account-id-40', 'relay-40', 'public-key-40'),('twin-41', 3, 41, 'account-id-41', 'relay-41', 'public-key-41'),('twin-42', 3, 42, 'account-id-42', 'relay-42', 'public-key-42'),('twin-43', 3, 43, 'account-id-43', 'relay-43', 'public-key-43'),('twin-44', 3, 44, 'account-id-44', 'relay-44', 'public-key-44'),('twin-45', 3, 45, 'account-id-45', 'relay-45', 'public-key-45'),('twin-46', 3, 46, 'account-id-46', 'relay-46', 'public-key-46'),('twin-47', 3, 47, 'account-id-47', 'relay-47', 'public-key-47'),('twin-48', 3, 48, 'account-id-48', 'relay-48', 'public-key-48'),('twin-49', 3, 49, 'account-id-49', 'relay-49', 'public-key-49'),('twin-50', 3, 50, 'account-id-50', 'relay-50', 'public-key-50'),('twin-51', 3, 51, 'account-id-51', 'relay-51', 'public-key-51'),('twin-52', 3, 52, 'account-id-52', 'relay-52', 'public-key-52'),('twin-53', 3, 53, 'account-id-53', 'relay-53', 'public-key-53'),('twin-54', 3, 54, 'account-id-54', 'relay-54', 'public-key-54'),('twin-55', 3, 55, 'account-id-55', 'relay-55', 'public-key-55'),('twin-56', 3, 56, 'account-id-56', 'relay-56', 'public-key-56'),('twin-57', 3, 57, 'account-id-57', 'relay-57', 'public-key-57'),('twin-58', 3, 58, 'account-id-58', 'relay-58', 'public-key-58'),('twin-59', 3, 59, 'account-id-59', 'relay-59', 'public-key-59'),('twin-60', 3, 60, 'account-id-60', 'relay-60', 'public-key-60'),('twin-61', 3, 61, 'account-id-61', 'relay-61', 'public-key-61'),('twin-62', 3, 62, 'account-id-62', 'relay-62', 'public-key-62'),('twin-63', 3, 63, 'account-id-63', 'relay-63', 'public-key-63'),('twin-64', 3, 64, 'account-id-64', 'relay-64', 'public-key-64'),('twin-65', 3, 65, 'account-id-65', 'relay-65', 'public-key-65'),('twin-66', 3, 66, 'account-id-66', 'relay-66', 'public-key-66'),('twin-67', 3, 67, 'account-id-67', 'relay-67', 'public-key-67'),('twin-68', 3, 68, 'account-id-68', 'relay-68', 'public-key-68'),('twin-69', 3, 69, 'account-id-69', 'relay-69', 'public-key-69'),('twin-70', 3, 70, 'account-id-70', 'relay-70', 'public-key-70'),('twin-71', 3, 71, 'account-id-71', 'relay-71', 'public-key-71'),('twin-72', 3, 72, 'account-id-72', 'relay-72', 'public-key-72'),('twin-73', 3, 73, 'account-id-73', 'relay-73', 'public-key-73'),('twin-74', 3, 74, 'account-id-74', 'relay-74', 'public-key-74'),('twin-75', 3, 75, 'account-id-75', 'relay-75', 'public-key-75'),('twin-76', 3, 76, 'account-id-76', 'relay-76', 'public-key-76'),('twin-77', 3, 77, 'account-id-77', 'relay-77', 'public-key-77'),('twin-78', 3, 78, 'account-id-78', 'relay-78', 'public-key-78'),('twin-79', 3, 79, 'account-id-79', 'relay-79', 'public-key-79'),('twin-80', 3, 80, 'account-id-80', 'relay-80', 'public-key-80'),('twin-81', 3, 81, 'account-id-81', 'relay-81', 'public-key-81'),('twin-82', 3, 82, 'account-id-82', 'relay-82', 'public-key-82'),('twin-83', 3, 83, 'account-id-83', 'relay-83', 'public-key-83'),('twin-84', 3, 84, 'account-id-84', 'relay-84', 'public-key-84'),('twin-85', 3, 85, 'account-id-85', 'relay-85', 'public-key-85'),('twin-86', 3, 86, 'account-id-86', 'relay-86', 'public-key-86'),('twin-87', 3, 87, 'account-id-87', 'relay-87', 'public-key-87'),('twin-88', 3, 88, 'account-id-88', 'relay-88', 'public-key-88'),('twin-89', 3, 89, 'account-id-89', 'relay-89', 'public-key-89'),('twin-90', 3, 90, 'account-id-90', 'relay-90', 'public-key-90'),('twin-91', 3, 91, 'account-id-91', 'relay-91', 'public-key-91'),('twin-92', 3, 92, 'account-id-92', 'relay-92', 'public-key-92'),('twin-93', 3, 93, 'account-id-93', 'relay-93', 'public-key-93'),('twin-94', 3, 94, 'account-id-94', 'relay-94', 'public-key-94'),('twin-95', 3, 95, 'account-id-95', 'relay-95', 'public-key-95'),('twin-96', 3, 96, 'account-id-96', 'relay-96', 'public-key-96'),('twin-97', 3, 97, 'account-id-97', 'relay-97', 'public-key-97'),('twin-98', 3, 98, 'account-id-98', 'relay-98', 'public-key-98'),('twin-99', 3, 99, 'account-id-99', 'relay-99', 'public-key-99'),('twin-100', 3, 100, 'account-id-100', 'relay-100', 'public-key-100'),('twin-101', 3, 101, 'account-id-101', 'relay-101', 'public-key-101'),('twin-102', 3, 102, 'account-id-102', 'relay-102', 'public-key-102'),('twin-103', 3, 103, 'account-id-103', 'relay-103', 'public-key-103'),('twin-104', 3, 104, 'account-id-104', 'relay-104', 'public-key-104'),('twin-105', 3, 105, 'account-id-105', 'relay-105', 'public-key-105'),('twin-106', 3, 106, 'account-id-106', 'relay-106', 'public-key-106'),('twin-107', 3, 107, 'account-id-107', 'relay-107', 'public-key-107'),('twin-108', 3, 108, 'account-id-108', 'relay-108', 'public-key-108'),('twin-109', 3, 109, 'account-id-109', 'relay-109', 'public-key-109'),('twin-110', 3, 110, 'account-id-110', 'relay-110', 'public-key-110'),('twin-111', 3, 111, 'account-id-111', 'relay-111', 'public-key-111'),('twin-112', 3, 112, 'account-id-112', 'relay-112', 'public-key-112'),('twin-113', 3, 113, 'account-id-113', 'relay-113', 'public-key-113'),('twin-114', 3, 114, 'account-id-114', 'relay-114', 'public-key-114'),('twin-115', 3, 115, 'account-id-115', 'relay-115', 'public-key-115'),('twin-116', 3, 116, 'account-id-116', 'relay-116', 'public-key-116'),('twin-117', 3, 117, 'account-id-117', 'relay-117', 'public-key-117'),('twin-118', 3, 118, 'account-id-118', 'relay-118', 'public-key-118'),('twin-119', 3, 119, 'account-id-119', 'relay-119', 'public-key-119'),('twin-120', 3, 120, 'account-id-120', 'relay-120', 'public-key-120'),('twin-121', 3, 121, 'account-id-121', 'relay-121', 'public-key-121'),('twin-122', 3, 122, 'account-id-122', 'relay-122', 'public-key-122'),('twin-123', 3, 123, 'account-id-123', 'relay-123', 'public-key-123'),('twin-124', 3, 124, 'account-id-124', 'relay-124', 'public-key-124'),('twin-125', 3, 125, 'account-id-125', 'relay-125', 'public-key-125'),('twin-126', 3, 126, 'account-id-126', 'relay-126', 'public-key-126'),('twin-127', 3, 127, 'account-id-127', 'relay-127', 'public-key-127'),('twin-128', 3, 128, 'account-id-128', 'relay-128', 'public-key-128'),('twin-129', 3, 129, 'account-id-129', 'relay-129', 'public-key-129'),('twin-130', 3, 130, 'account-id-130', 'relay-130', 'public-key-130'),('twin-131', 3, 131, 'account-id-131', 'relay-131', 'public-key-131'),('twin-132', 3, 132, 'account-id-132', 'relay-132', 'public-key-132'),('twin-133', 3, 133, 'account-id-133', 'relay-133', 'public-key-133'),('twin-134', 3, 134, 'account-id-134', 'relay-134', 'public-key-134'),('twin-135', 3, 135, 'account-id-135', 'relay-135', 'public-key-135'),('twin-136', 3, 136, 'account-id-136', 'relay-136', 'public-key-136'),('twin-137', 3, 137, 'account-id-137', 'relay-137', 'public-key-137'),('twin-138', 3, 138, 'account-id-138', 'relay-138', 'public-key-138'),('twin-139', 3, 139, 'account-id-139', 'relay-139', 'public-key-139'),('twin-140', 3, 140, 'account-id-140', 'relay-140', 'public-key-140'),('twin-141', 3, 141, 'account-id-141', 'relay-141', 'public-key-141'),('twin-142', 3, 142, 'account-id-142', 'relay-142', 'public-key-142'),('twin-143', 3, 143, 'account-id-143', 'relay-143', 'public-key-143'),('twin-144', 3, 144, 'account-id-144', 'relay-144', 'public-key-144'),('twin-145', 3, 145, 'account-id-145', 'relay-145', 'public-key-145'),('twin-146', 3, 146, 'account-id-146', 'relay-146', 'public-key-146'),('twin-147', 3, 147, 'account-id-147', 'relay-147', 'public-key-147'),('twin-148', 3, 148, 'account-id-148', 'relay-148', 'public-key-148'),('twin-149', 3, 149, 'account-id-149', 'relay-149', 'public-key-149'),('twin-150', 3, 150, 'account-id-150', 'relay-150', 'public-key-150'),('twin-151', 3, 151, 'account-id-151', 'relay-151', 'public-key-151'),('twin-152', 3, 152, 'account-id-152', 'relay-152', 'public-key-152'),('twin-153', 3, 153, 'account-id-153', 'relay-153', 'public-key-153'),('twin-154', 3, 154, 'account-id-154', 'relay-154', 'public-key-154'),('twin-155', 3, 155, 'account-id-155', 'relay-155', 'public-key-155'),('twin-156', 3, 156, 'account-id-156', 'relay-156', 'public-key-156'),('twin-157', 3, 157, 'account-id-157', 'relay-157', 'public-key-157'),('twin-158', 3, 158, 'account-id-158', 'relay-158', 'public-key-158'),('twin-159', 3, 159, 'account-id-159', 'relay-159', 'public-key-159'),('twin-160', 3, 160, 'account-id-160', 'relay-160', 'public-key-160'),('twin-161', 3, 161, 'account-id-161', 'relay-161', 'public-key-161'),('twin-162', 3, 162, 'account-id-162', 'relay-162', 'public-key-162'),('twin-163', 3, 163, 'account-id-163', 'relay-163', 'public-key-163'),('twin-164', 3, 164, 'account-id-164', 'relay-164', 'public-key-164'),('twin-165', 3, 165, 'account-id-165', 'relay-165', 'public-key-165'),('twin-166', 3, 166, 'account-id-166', 'relay-166', 'public-key-166'),('twin-167', 3, 167, 'account-id-167', 'relay-167', 'public-key-167'),('twin-168', 3, 168, 'account-id-168', 'relay-168', 'public-key-168'),('twin-169', 3, 169, 'account-id-169', 'relay-169', 'public-key-169'),('twin-170', 3, 170, 'account-id-170', 'relay-170', 'public-key-170'),('twin-171', 3, 171, 'account-id-171', 'relay-171', 'public-key-171'),('twin-172', 3, 172, 'account-id-172', 'relay-172', 'public-key-172'),('twin-173', 3, 173, 'account-id-173', 'relay-173', 'public-key-173'),('twin-174', 3, 174, 'account-id-174', 'relay-174', 'public-key-174'),('twin-175', 3, 175, 'account-id-175', 'relay-175', 'public-key-175'),('twin-176', 3, 176, 'account-id-176', 'relay-176', 'public-key-176'),('twin-177', 3, 177, 'account-id-177', 'relay-177', 'public-key-177'),('twin-178', 3, 178, 'account-id-178', 'relay-178', 'public-key-178'),('twin-179', 3, 179, 'account-id-179', 'relay-179', 'public-key-179'),('twin-180', 3, 180, 'account-id-180', 'relay-180', 'public-key-180'),('twin-181', 3, 181, 'account-id-181', 'relay-181', 'public-key-181'),('twin-182', 3, 182, 'account-id-182', 'relay-182', 'public-key-182'),('twin-183', 3, 183, 'account-id-183', 'relay-183', 'public-key-183'),('twin-184', 3, 184, 'account-id-184', 'relay-184', 'public-key-184'),('twin-185', 3, 185, 'account-id-185', 'relay-185', 'public-key-185'),('twin-186', 3, 186, 'account-id-186', 'relay-186', 'public-key-186'),('twin-187', 3, 187, 'account-id-187', 'relay-187', 'public-key-187'),('twin-188', 3, 188, 'account-id-188', 'relay-188', 'public-key-188'),('twin-189', 3, 189, 'account-id-189', 'relay-189', 'public-key-189'),('twin-190', 3, 190, 'account-id-190', 'relay-190', 'public-key-190'),('twin-191', 3, 191, 'account-id-191', 'relay-191', 'public-key-191'),('twin-192', 3, 192, 'account-id-192', 'relay-192', 'public-key-192'),('twin-193', 3, 193, 'account-id-193', 'relay-193', 'public-key-193'),('twin-194', 3, 194, 'account-id-194', 'relay-194', 'public-key-194'),('twin-195', 3, 195, 'account-id-195', 'relay-195', 'public-key-195'),('twin-196', 3, 196, 'account-id-196', 'relay-196', 'public-key-196'),('twin-197', 3, 197, 'account-id-197', 'relay-197', 'public-key-197'),('twin-198', 3, 198, 'account-id-198', 'relay-198', 'public-key-198'),('twin-199', 3, 199, 'account-id-199', 'relay-199', 'public-key-199'),('twin-200', 3, 200, 'account-id-200', 'relay-200', 'public-key-200'),('twin-201', 3, 201, 'account-id-201', 'relay-201', 'public-key-201'),('twin-202', 3, 202, 'account-id-202', 'relay-202', 'public-key-202'),('twin-203', 3, 203, 'account-id-203', 'relay-203', 'public-key-203'),('twin-204', 3, 204, 'account-id-204', 'relay-204', 'public-key-204'),('twin-205', 3, 205, 'account-id-205', 'relay-205', 'public-key-205'),('twin-206', 3, 206, 'account-id-206', 'relay-206', 'public-key-206'),('twin-207', 3, 207, 'account-id-207', 'relay-207', 'public-key-207'),('twin-208', 3, 208, 'account-id-208', 'relay-208', 'public-key-208'),('twin-209', 3, 209, 'account-id-209', 'relay-209', 'public-key-209'),('twin-210', 3, 210, 'account-id-210', 'relay-210', 'public-key-210'),('twin-211', 3, 211, 'account-id-211', 'relay-211', 'public-key-211'),('twin-212', 3, 212, 'account-id-212', 'relay-212', 'public-key-212'),('twin-213', 3, 213, 'account-id-213', 'relay-213', 'public-key-213'),('twin-214', 3, 214, 'account-id-214', 'relay-214', 'public-key-214'),('twin-215', 3, 215, 'account-id-215', 'relay-215', 'public-key-215'),('twin-216', 3, 216, 'account-id-216', 'relay-216', 'public-key-216'),('twin-217', 3, 217, 'account-id-217', 'relay-217', 'public-key-217'),('twin-218', 3, 218, 'account-id-218', 'relay-218', 'public-key-218'),('twin-219', 3, 219, 'account-id-219', 'relay-219', 'public-key-219'),('twin-220', 3, 220, 'account-id-220', 'relay-220', 'public-key-220'),('twin-221', 3, 221, 'account-id-221', 'relay-221', 'public-key-221'),('twin-222', 3, 222, 'account-id-222', 'relay-222', 'public-key-222'),('twin-223', 3, 223, 'account-id-223', 'relay-223', 'public-key-223'),('twin-224', 3, 224, 'account-id-224', 'relay-224', 'public-key-224'),('twin-225', 3, 225, 'account-id-225', 'relay-225', 'public-key-225'),('twin-226', 3, 226, 'account-id-226', 'relay-226', 'public-key-226'),('twin-227', 3, 227, 'account-id-227', 'relay-227', 'public-key-227'),('twin-228', 3, 228, 'account-id-228', 'relay-228', 'public-key-228'),('twin-229', 3, 229, 'account-id-229', 'relay-229', 'public-key-229'),('twin-230', 3, 230, 'account-id-230', 'relay-230', 'public-key-230'),('twin-231', 3, 231, 'account-id-231', 'relay-231', 'public-key-231'),('twin-232', 3, 232, 'account-id-232', 'relay-232', 'public-key-232'),('twin-233', 3, 233, 'account-id-233', 'relay-233', 'public-key-233'),('twin-234', 3, 234, 'account-id-234', 'relay-234', 'public-key-234'),('twin-235', 3, 235, 'account-id-235', 'relay-235', 'public-key-235'),('twin-236', 3, 236, 'account-id-236', 'relay-236', 'public-key-236'),('twin-237', 3, 237, 'account-id-237', 'relay-237', 'public-key-237'),('twin-238', 3, 238, 'account-id-238', 'relay-238', 'public-key-238'),('twin-239', 3, 239, 'account-id-239', 'relay-239', 'public-key-239'),('twin-240', 3, 240, 'account-id-240', 'relay-240', 'public-key-240'),('twin-241', 3, 241, 'account-id-241', 'relay-241', 'public-key-241'),('twin-242', 3, 242, 'account-id-242', 'relay-242', 'public-key-242'),('twin-243', 3, 243, 'account-id-243', 'relay-243', 'public-key-243'),('twin-244', 3, 244, 'account-id-244', 'relay-244', 'public-key-244'),('twin-245', 3, 245, 'account-id-245', 'relay-245', 'public-key-245'),('twin-246', 3, 246, 'account-id-246', 'relay-246', 'public-key-246'),('twin-247', 3, 247, 'account-id-247', 'relay-247', 'public-key-247'),('twin-248', 3, 248, 'account-id-248', 'relay-248', 'public-key-248'),('twin-249', 3, 249, 'account-id-249', 'relay-249', 'public-key-249'),('twin-250', 3, 250, 'account-id-250', 'relay-250', 'public-key-250'),('twin-251', 3, 251, 'account-id-251', 'relay-251', 'public-key-251'),('twin-252', 3, 252, 'account-id-252', 'relay-252', 'public-key-252'),('twin-253', 3, 253, 'account-id-253', 'relay-253', 'public-key-253'),('twin-254', 3, 254, 'account-id-254', 'relay-254', 'public-key-254'),('twin-255', 3, 255, 'account-id-255', 'relay-255', 'public-key-255'),('twin-256', 3, 256, 'account-id-256', 'relay-256', 'public-key-256'),('twin-257', 3, 257, 'account-id-257', 'relay-257', 'public-key-257'),('twin-258', 3, 258, 'account-id-258', 'relay-258', 'public-key-258'),('twin-259', 3, 259, 'account-id-259', 'relay-259', 'public-key-259'),('twin-260', 3, 260, 'account-id-260', 'relay-260', 'public-key-260'),('twin-261', 3, 261, 'account-id-261', 'relay-261', 'public-key-261'),('twin-262', 3, 262, 'account-id-262', 'relay-262', 'public-key-262'),('twin-263', 3, 263, 'account-id-263', 'relay-263', 'public-key-263'),('twin-264', 3, 264, 'account-id-264', 'relay-264', 'public-key-264'),('twin-265', 3, 265, 'account-id-265', 'relay-265', 'public-key-265'),('twin-266', 3, 266, 'account-id-266', 'relay-266', 'public-key-266'),('twin-267', 3, 267, 'account-id-267', 'relay-267', 'public-key-267'),('twin-268', 3, 268, 'account-id-268', 'relay-268', 'public-key-268'),('twin-269', 3, 269, 'account-id-269', 'relay-269', 'public-key-269'),('twin-270', 3, 270, 'account-id-270', 'relay-270', 'public-key-270'),('twin-271', 3, 271, 'account-id-271', 'relay-271', 'public-key-271'),('twin-272', 3, 272, 'account-id-272', 'relay-272', 'public-key-272'),('twin-273', 3, 273, 'account-id-273', 'relay-273', 'public-key-273'),('twin-274', 3, 274, 'account-id-274', 'relay-274', 'public-key-274'),('twin-275', 3, 275, 'account-id-275', 'relay-275', 'public-key-275'),('twin-276', 3, 276, 'account-id-276', 'relay-276', 'public-key-276'),('twin-277', 3, 277, 'account-id-277', 'relay-277', 'public-key-277'),('twin-278', 3, 278, 'account-id-278', 'relay-278', 'public-key-278'),('twin-279', 3, 279, 'account-id-279', 'relay-279', 'public-key-279'),('twin-280', 3, 280, 'account-id-280', 'relay-280', 'public-key-280'),('twin-281', 3, 281, 'account-id-281', 'relay-281', 'public-key-281'),('twin-282', 3, 282, 'account-id-282', 'relay-282', 'public-key-282'),('twin-283', 3, 283, 'account-id-283', 'relay-283', 'public-key-283'),('twin-284', 3, 284, 'account-id-284', 'relay-284', 'public-key-284'),('twin-285', 3, 285, 'account-id-285', 'relay-285', 'public-key-285'),('twin-286', 3, 286, 'account-id-286', 'relay-286', 'public-key-286'),('twin-287', 3, 287, 'account-id-287', 'relay-287', 'public-key-287'),('twin-288', 3, 288, 'account-id-288', 'relay-288', 'public-key-288'),('twin-289', 3, 289, 'account-id-289', 'relay-289', 'public-key-289'),('twin-290', 3, 290, 'account-id-290', 'relay-290', 'public-key-290'),('twin-291', 3, 291, 'account-id-291', 'relay-291', 'public-key-291'),('twin-292', 3, 292, 'account-id-292', 'relay-292', 'public-key-292'),('twin-293', 3, 293, 'account-id-293', 'relay-293', 'public-key-293'),('twin-294', 3, 294, 'account-id-294', 'relay-294', 'public-key-294'),('twin-295', 3, 295, 'account-id-295', 'relay-295', 'public-key-295'),('twin-296', 3, 296, 'account-id-296', 'relay-296', 'public-key-296'),('twin-297', 3, 297, 'account-id-297', 'relay-297', 'public-key-297'),('twin-298', 3, 298, 'account-id-298', 'relay-298', 'public-key-298'),('twin-299', 3, 299, 'account-id-299', 'relay-299', 'public-key-299'),('twin-300', 3, 300, 'account-id-300', 'relay-300', 'public-key-300'),('twin-301', 3, 301, 'account-id-301', 'relay-301', 'public-key-301'),('twin-302', 3, 302, 'account-id-302', 'relay-302', 'public-key-302'),('twin-303', 3, 303, 'account-id-303', 'relay-303', 'public-key-303'),('twin-304', 3, 304, 'account-id-304', 'relay-304', 'public-key-304'),('twin-305', 3, 305, 'account-id-305', 'relay-305', 'public-key-305'),('twin-306', 3, 306, 'account-id-306', 'relay-306', 'public-key-306'),('twin-307', 3, 307, 'account-id-307', 'relay-307', 'public-key-307'),('twin-308', 3, 308, 'account-id-308', 'relay-308', 'public-key-308'),('twin-309', 3, 309, 'account-id-309', 'relay-309', 'public-key-309'),('twin-310', 3, 310, 'account-id-310', 'relay-310', 'public-key-310'),('twin-311', 3, 311, 'account-id-311', 'relay-311', 'public-key-311'),('twin-312', 3, 312, 'account-id-312', 'relay-312', 'public-key-312'),('twin-313', 3, 313, 'account-id-313', 'relay-313', 'public-key-313'),('twin-314', 3, 314, 'account-id-314', 'relay-314', 'public-key-314'),('twin-315', 3, 315, 'account-id-315', 'relay-315', 'public-key-315'),('twin-316', 3, 316, 'account-id-316', 'relay-316', 'public-key-316'),('twin-317', 3, 317, 'account-id-317', 'relay-317', 'public-key-317'),('twin-318', 3, 318, 'account-id-318', 'relay-318', 'public-key-318'),('twin-319', 3, 319, 'account-id-319', 'relay-319', 'public-key-319'),('twin-320', 3, 320, 'account-id-320', 'relay-320', 'public-key-320'),('twin-321', 3, 321, 'account-id-321', 'relay-321', 'public-key-321'),('twin-322', 3, 322, 'account-id-322', 'relay-322', 'public-key-322'),('twin-323', 3, 323, 'account-id-323', 'relay-323', 'public-key-323'),('twin-324', 3, 324, 'account-id-324', 'relay-324', 'public-key-324'),('twin-325', 3, 325, 'account-id-325', 'relay-325', 'public-key-325'),('twin-326', 3, 326, 'account-id-326', 'relay-326', 'public-key-326'),('twin-327', 3, 327, 'account-id-327', 'relay-327', 'public-key-327'),('twin-328', 3, 328, 'account-id-328', 'relay-328', 'public-key-328'),('twin-329', 3, 329, 'account-id-329', 'relay-329', 'public-key-329'),('twin-330', 3, 330, 'account-id-330', 'relay-330', 'public-key-330'),('twin-331', 3, 331, 'account-id-331', 'relay-331', 'public-key-331'),('twin-332', 3, 332, 'account-id-332', 'relay-332', 'public-key-332'),('twin-333', 3, 333, 'account-id-333', 'relay-333', 'public-key-333'),('twin-334', 3, 334, 'account-id-334', 'relay-334', 'public-key-334'),('twin-335', 3, 335, 'account-id-335', 'relay-335', 'public-key-335'),('twin-336', 3, 336, 'account-id-336', 'relay-336', 'public-key-336'),('twin-337', 3, 337, 'account-id-337', 'relay-337', 'public-key-337'),('twin-338', 3, 338, 'account-id-338', 'relay-338', 'public-key-338'),('twin-339', 3, 339, 'account-id-339', 'relay-339', 'public-key-339'),('twin-340', 3, 340, 'account-id-340', 'relay-340', 'public-key-340'),('twin-341', 3, 341, 'account-id-341', 'relay-341', 'public-key-341'),('twin-342', 3, 342, 'account-id-342', 'relay-342', 'public-key-342'),('twin-343', 3, 343, 'account-id-343', 'relay-343', 'public-key-343'),('twin-344', 3, 344, 'account-id-344', 'relay-344', 'public-key-344'),('twin-345', 3, 345, 'account-id-345', 'relay-345', 'public-key-345'),('twin-346', 3, 346, 'account-id-346', 'relay-346', 'public-key-346'),('twin-347', 3, 347, 'account-id-347', 'relay-347', 'public-key-347'),('twin-348', 3, 348, 'account-id-348', 'relay-348', 'public-key-348'),('twin-349', 3, 349, 'account-id-349', 'relay-349', 'public-key-349'),('twin-350', 3, 350, 'account-id-350', 'relay-350', 'public-key-350'),('twin-351', 3, 351, 'account-id-351', 'relay-351', 'public-key-351'),('twin-352', 3, 352, 'account-id-352', 'relay-352', 'public-key-352'),('twin-353', 3, 353, 'account-id-353', 'relay-353', 'public-key-353'),('twin-354', 3, 354, 'account-id-354', 'relay-354', 'public-key-354'),('twin-355', 3, 355, 'account-id-355', 'relay-355', 'public-key-355'),('twin-356', 3, 356, 'account-id-356', 'relay-356', 'public-key-356'),('twin-357', 3, 357, 'account-id-357', 'relay-357', 'public-key-357'),('twin-358', 3, 358, 'account-id-358', 'relay-358', 'public-key-358'),('twin-359', 3, 359, 'account-id-359', 'relay-359', 'public-key-359'),('twin-360', 3, 360, 'account-id-360', 'relay-360', 'public-key-360'),('twin-361', 3, 361, 'account-id-361', 'relay-361', 'public-key-361'),('twin-362', 3, 362, 'account-id-362', 'relay-362', 'public-key-362'),('twin-363', 3, 363, 'account-id-363', 'relay-363', 'public-key-363'),('twin-364', 3, 364, 'account-id-364', 'relay-364', 'public-key-364'),('twin-365', 3, 365, 'account-id-365', 'relay-365', 'public-key-365'),('twin-366', 3, 366, 'account-id-366', 'relay-366', 'public-key-366'),('twin-367', 3, 367, 'account-id-367', 'relay-367', 'public-key-367'),('twin-368', 3, 368, 'account-id-368', 'relay-368', 'public-key-368'),('twin-369', 3, 369, 'account-id-369', 'relay-369', 'public-key-369'),('twin-370', 3, 370, 'account-id-370', 'relay-370', 'public-key-370'),('twin-371', 3, 371, 'account-id-371', 'relay-371', 'public-key-371'),('twin-372', 3, 372, 'account-id-372', 'relay-372', 'public-key-372'),('twin-373', 3, 373, 'account-id-373', 'relay-373', 'public-key-373'),('twin-374', 3, 374, 'account-id-374', 'relay-374', 'public-key-374'),('twin-375', 3, 375, 'account-id-375', 'relay-375', 'public-key-375'),('twin-376', 3, 376, 'account-id-376', 'relay-376', 'public-key-376'),('twin-377', 3, 377, 'account-id-377', 'relay-377', 'public-key-377'),('twin-378', 3, 378, 'account-id-378', 'relay-378', 'public-key-378'),('twin-379', 3, 379, 'account-id-379', 'relay-379', 'public-key-379'),('twin-380', 3, 380, 'account-id-380', 'relay-380', 'public-key-380'),('twin-381', 3, 381, 'account-id-381', 'relay-381', 'public-key-381'),('twin-382', 3, 382, 'account-id-382', 'relay-382', 'public-key-382'),('twin-383', 3, 383, 'account-id-383', 'relay-383', 'public-key-383'),('twin-384', 3, 384, 'account-id-384', 'relay-384', 'public-key-384'),('twin-385', 3, 385, 'account-id-385', 'relay-385', 'public-key-385'),('twin-386', 3, 386, 'account-id-386', 'relay-386', 'public-key-386'),('twin-387', 3, 387, 'account-id-387', 'relay-387', 'public-key-387'),('twin-388', 3, 388, 'account-id-388', 'relay-388', 'public-key-388'),('twin-389', 3, 389, 'account-id-389', 'relay-389', 'public-key-389'),('twin-390', 3, 390, 'account-id-390', 'relay-390', 'public-key-390'),('twin-391', 3, 391, 'account-id-391', 'relay-391', 'public-key-391'),('twin-392', 3, 392, 'account-id-392', 'relay-392', 'public-key-392'),('twin-393', 3, 393, 'account-id-393', 'relay-393', 'public-key-393'),('twin-394', 3, 394, 'account-id-394', 'relay-394', 'public-key-394'),('twin-395', 3, 395, 'account-id-395', 'relay-395', 'public-key-395'),('twin-396', 3, 396, 'account-id-396', 'relay-396', 'public-key-396'),('twin-397', 3, 397, 'account-id-397', 'relay-397', 'public-key-397'),('twin-398', 3, 398, 'account-id-398', 'relay-398', 'public-key-398'),('twin-399', 3, 399, 'account-id-399', 'relay-399', 'public-key-399'),('twin-400', 3, 400, 'account-id-400', 'relay-400', 'public-key-400'),('twin-401', 3, 401, 'account-id-401', 'relay-401', 'public-key-401'),('twin-402', 3, 402, 'account-id-402', 'relay-402', 'public-key-402'),('twin-403', 3, 403, 'account-id-403', 'relay-403', 'public-key-403'),('twin-404', 3, 404, 'account-id-404', 'relay-404', 'public-key-404'),('twin-405', 3, 405, 'account-id-405', 'relay-405', 'public-key-405'),('twin-406', 3, 406, 'account-id-406', 'relay-406', 'public-key-406'),('twin-407', 3, 407, 'account-id-407', 'relay-407', 'public-key-407'),('twin-408', 3, 408, 'account-id-408', 'relay-408', 'public-key-408'),('twin-409', 3, 409, 'account-id-409', 'relay-409', 'public-key-409'),('twin-410', 3, 410, 'account-id-410', 'relay-410', 'public-key-410'),('twin-411', 3, 411, 'account-id-411', 'relay-411', 'public-key-411'),('twin-412', 3, 412, 'account-id-412', 'relay-412', 'public-key-412'),('twin-413', 3, 413, 'account-id-413', 'relay-413', 'public-key-413'),('twin-414', 3, 414, 'account-id-414', 'relay-414', 'public-key-414'),('twin-415', 3, 415, 'account-id-415', 'relay-415', 'public-key-415'),('twin-416', 3, 416, 'account-id-416', 'relay-416', 'public-key-416'),('twin-417', 3, 417, 'account-id-417', 'relay-417', 'public-key-417'),('twin-418', 3, 418, 'account-id-418', 'relay-418', 'public-key-418'),('twin-419', 3, 419, 'account-id-419', 'relay-419', 'public-key-419'),('twin-420', 3, 420, 'account-id-420', 'relay-420', 'public-key-420'),('twin-421', 3, 421, 'account-id-421', 'relay-421', 'public-key-421'),('twin-422', 3, 422, 'account-id-422', 'relay-422', 'public-key-422'),('twin-423', 3, 423, 'account-id-423', 'relay-423', 'public-key-423'),('twin-424', 3, 424, 'account-id-424', 'relay-424', 'public-key-424'),('twin-425', 3, 425, 'account-id-425', 'relay-425', 'public-key-425'),('twin-426', 3, 426, 'account-id-426', 'relay-426', 'public-key-426'),('twin-427', 3, 427, 'account-id-427', 'relay-427', 'public-key-427'),('twin-428', 3, 428, 'account-id-428', 'relay-428', 'public-key-428'),('twin-429', 3, 429, 'account-id-429', 'relay-429', 'public-key-429'),('twin-430', 3, 430, 'account-id-430', 'relay-430', 'public-key-430'),('twin-431', 3, 431, 'account-id-431', 'relay-431', 'public-key-431'),('twin-432', 3, 432, 'account-id-432', 'relay-432', 'public-key-432'),('twin-433', 3, 433, 'account-id-433', 'relay-433', 'public-key-433'),('twin-434', 3, 434, 'account-id-434', 'relay-434', 'public-key-434'),('twin-435', 3, 435, 'account-id-435', 'relay-435', 'public-key-435'),('twin-436', 3, 436, 'account-id-436', 'relay-436', 'public-key-436'),('twin-437', 3, 437, 'account-id-437', 'relay-437', 'public-key-437'),('twin-438', 3, 438, 'account-id-438', 'relay-438', 'public-key-438'),('twin-439', 3, 439, 'account-id-439', 'relay-439', 'public-key-439'),('twin-440', 3, 440, 'account-id-440', 'relay-440', 'public-key-440'),('twin-441', 3, 441, 'account-id-441', 'relay-441', 'public-key-441'),('twin-442', 3, 442, 'account-id-442', 'relay-442', 'public-key-442'),('twin-443', 3, 443, 'account-id-443', 'relay-443', 'public-key-443'),('twin-444', 3, 444, 'account-id-444', 'relay-444', 'public-key-444'),('twin-445', 3, 445, 'account-id-445', 'relay-445', 'public-key-445'),('twin-446', 3, 446, 'account-id-446', 'relay-446', 'public-key-446'),('twin-447', 3, 447, 'account-id-447', 'relay-447', 'public-key-447'),('twin-448', 3, 448, 'account-id-448', 'relay-448', 'public-key-448'),('twin-449', 3, 449, 'account-id-449', 'relay-449', 'public-key-449'),('twin-450', 3, 450, 'account-id-450', 'relay-450', 'public-key-450'),('twin-451', 3, 451, 'account-id-451', 'relay-451', 'public-key-451'),('twin-452', 3, 452, 'account-id-452', 'relay-452', 'public-key-452'),('twin-453', 3, 453, 'account-id-453', 'relay-453', 'public-key-453'),('twin-454', 3, 454, 'account-id-454', 'relay-454', 'public-key-454'),('twin-455', 3, 455, 'account-id-455', 'relay-455', 'public-key-455'),('twin-456', 3, 456, 'account-id-456', 'relay-456', 'public-key-456'),('twin-457', 3, 457, 'account-id-457', 'relay-457', 'public-key-457'),('twin-458', 3, 458, 'account-id-458', 'relay-458', 'public-key-458'),('twin-459', 3, 459, 'account-id-459', 'relay-459', 'public-key-459'),('twin-460', 3, 460, 'account-id-460', 'relay-460', 'public-key-460'),('twin-461', 3, 461, 'account-id-461', 'relay-461', 'public-key-461'),('twin-462', 3, 462, 'account-id-462', 'relay-462', 'public-key-462'),('twin-463', 3, 463, 'account-id-463', 'relay-463', 'public-key-463'),('twin-464', 3, 464, 'account-id-464', 'relay-464', 'public-key-464'),('twin-465', 3, 465, 'account-id-465', 'relay-465', 'public-key-465'),('twin-466', 3, 466, 'account-id-466', 'relay-466', 'public-key-466'),('twin-467', 3, 467, 'account-id-467', 'relay-467', 'public-key-467'),('twin-468', 3, 468, 'account-id-468', 'relay-468', 'public-key-468'),('twin-469', 3, 469, 'account-id-469', 'relay-469', 'public-key-469'),('twin-470', 3, 470, 'account-id-470', 'relay-470', 'public-key-470'),('twin-471', 3, 471, 'account-id-471', 'relay-471', 'public-key-471'),('twin-472', 3, 472, 'account-id-472', 'relay-472', 'public-key-472'),('twin-473', 3, 473, 'account-id-473', 'relay-473', 'public-key-473'),('twin-474', 3, 474, 'account-id-474', 'relay-474', 'public-key-474'),('twin-475', 3, 475, 'account-id-475', 'relay-475', 'public-key-475'),('twin-476', 3, 476, 'account-id-476', 'relay-476', 'public-key-476'),('twin-477', 3, 477, 'account-id-477', 'relay-477', 'public-key-477'),('twin-478', 3, 478, 'account-id-478', 'relay-478', 'public-key-478'),('twin-479', 3, 479, 'account-id-479', 'relay-479', 'public-key-479'),('twin-480', 3, 480, 'account-id-480', 'relay-480', 'public-key-480'),('twin-481', 3, 481, 'account-id-481', 'relay-481', 'public-key-481'),('twin-482', 3, 482, 'account-id-482', 'relay-482', 'public-key-482'),('twin-483', 3, 483, 'account-id-483', 'relay-483', 'public-key-483'),('twin-484', 3, 484, 'account-id-484', 'relay-484', 'public-key-484'),('twin-485', 3, 485, 'account-id-485', 'relay-485', 'public-key-485'),('twin-486', 3, 486, 'account-id-486', 'relay-486', 'public-key-486'),('twin-487', 3, 487, 'account-id-487', 'relay-487', 'public-key-487'),('twin-488', 3, 488, 'account-id-488', 'relay-488', 'public-key-488'),('twin-489', 3, 489, 'account-id-489', 'relay-489', 'public-key-489'),('twin-490', 3, 490, 'account-id-490', 'relay-490', 'public-key-490'),('twin-491', 3, 491, 'account-id-491', 'relay-491', 'public-key-491'),('twin-492', 3, 492, 'account-id-492', 'relay-492', 'public-key-492'),('twin-493', 3, 493, 'account-id-493', 'relay-493', 'public-key-493'),('twin-494', 3, 494, 'account-id-494', 'relay-494', 'public-key-494'),('twin-495', 3, 495, 'account-id-495', 'relay-495', 'public-key-495'),('twin-496', 3, 496, 'account-id-496', 'relay-496', 'public-key-496'),('twin-497', 3, 497, 'account-id-497', 'relay-497', 'public-key-497'),('twin-498', 3, 498, 'account-id-498', 'relay-498', 'public-key-498'),('twin-499', 3, 499, 'account-id-499', 'relay-499', 'public-key-499'),('twin-500', 3, 500, 'account-id-500', 'relay-500', 'public-key-500'),('twin-501', 3, 501, 'account-id-501', 'relay-501', 'public-key-501'),('twin-502', 3, 502, 'account-id-502', 'relay-502', 'public-key-502'),('twin-503', 3, 503, 'account-id-503', 'relay-503', 'public-key-503'),('twin-504', 3, 504, 'account-id-504', 'relay-504', 'public-key-504'),('twin-505', 3, 505, 'account-id-505', 'relay-505', 'public-key-505'),('twin-506', 3, 506, 'account-id-506', 'relay-506', 'public-key-506'),('twin-507', 3, 507, 'account-id-507', 'relay-507', 'public-key-507'),('twin-508', 3, 508, 'account-id-508', 'relay-508', 'public-key-508'),('twin-509', 3, 509, 'account-id-509', 'relay-509', 'public-key-509'),('twin-510', 3, 510, 'account-id-510', 'relay-510', 'public-key-510'),('twin-511', 3, 511, 'account-id-511', 'relay-511', 'public-key-511'),('twin-512', 3, 512, 'account-id-512', 'relay-512', 'public-key-512'),('twin-513', 3, 513, 'account-id-513', 'relay-513', 'public-key-513'),('twin-514', 3, 514, 'account-id-514', 'relay-514', 'public-key-514'),('twin-515', 3, 515, 'account-id-515', 'relay-515', 'public-key-515'),('twin-516', 3, 516, 'account-id-516', 'relay-516', 'public-key-516'),('twin-517', 3, 517, 'account-id-517', 'relay-517', 'public-key-517'),('twin-518', 3, 518, 'account-id-518', 'relay-518', 'public-key-518'),('twin-519', 3, 519, 'account-id-519', 'relay-519', 'public-key-519'),('twin-520', 3, 520, 'account-id-520', 'relay-520', 'public-key-520'),('twin-521', 3, 521, 'account-id-521', 'relay-521', 'public-key-521'),('twin-522', 3, 522, 'account-id-522', 'relay-522', 'public-key-522'),('twin-523', 3, 523, 'account-id-523', 'relay-523', 'public-key-523'),('twin-524', 3, 524, 'account-id-524', 'relay-524', 'public-key-524'),('twin-525', 3, 525, 'account-id-525', 'relay-525', 'public-key-525'),('twin-526', 3, 526, 'account-id-526', 'relay-526', 'public-key-526'),('twin-527', 3, 527, 'account-id-527', 'relay-527', 'public-key-527'),('twin-528', 3, 528, 'account-id-528', 'relay-528', 'public-key-528'),('twin-529', 3, 529, 'account-id-529', 'relay-529', 'public-key-529'),('twin-530', 3, 530, 'account-id-530', 'relay-530', 'public-key-530'),('twin-531', 3, 531, 'account-id-531', 'relay-531', 'public-key-531'),('twin-532', 3, 532, 'account-id-532', 'relay-532', 'public-key-532'),('twin-533', 3, 533, 'account-id-533', 'relay-533', 'public-key-533'),('twin-534', 3, 534, 'account-id-534', 'relay-534', 'public-key-534'),('twin-535', 3, 535, 'account-id-535', 'relay-535', 'public-key-535'),('twin-536', 3, 536, 'account-id-536', 'relay-536', 'public-key-536'),('twin-537', 3, 537, 'account-id-537', 'relay-537', 'public-key-537'),('twin-538', 3, 538, 'account-id-538', 'relay-538', 'public-key-538'),('twin-539', 3, 539, 'account-id-539', 'relay-539', 'public-key-539'),('twin-540', 3, 540, 'account-id-540', 'relay-540', 'public-key-540'),('twin-541', 3, 541, 'account-id-541', 'relay-541', 'public-key-541'),('twin-542', 3, 542, 'account-id-542', 'relay-542', 'public-key-542'),('twin-543', 3, 543, 'account-id-543', 'relay-543', 'public-key-543'),('twin-544', 3, 544, 'account-id-544', 'relay-544', 'public-key-544'),('twin-545', 3, 545, 'account-id-545', 'relay-545', 'public-key-545'),('twin-546', 3, 546, 'account-id-546', 'relay-546', 'public-key-546'),('twin-547', 3, 547, 'account-id-547', 'relay-547', 'public-key-547'),('twin-548', 3, 548, 'account-id-548', 'relay-548', 'public-key-548'),('twin-549', 3, 549, 'account-id-549', 'relay-549', 'public-key-549'),('twin-550', 3, 550, 'account-id-550', 'relay-550', 'public-key-550'),('twin-551', 3, 551, 'account-id-551', 'relay-551', 'public-key-551'),('twin-552', 3, 552, 'account-id-552', 'relay-552', 'public-key-552'),('twin-553', 3, 553, 'account-id-553', 'relay-553', 'public-key-553'),('twin-554', 3, 554, 'account-id-554', 'relay-554', 'public-key-554'),('twin-555', 3, 555, 'account-id-555', 'relay-555', 'public-key-555'),('twin-556', 3, 556, 'account-id-556', 'relay-556', 'public-key-556'),('twin-557', 3, 557, 'account-id-557', 'relay-557', 'public-key-557'),('twin-558', 3, 558, 'account-id-558', 'relay-558', 'public-key-558'),('twin-559', 3, 559, 'account-id-559', 'relay-559', 'public-key-559'),('twin-560', 3, 560, 'account-id-560', 'relay-560', 'public-key-560'),('twin-561', 3, 561, 'account-id-561', 'relay-561', 'public-key-561'),('twin-562', 3, 562, 'account-id-562', 'relay-562', 'public-key-562'),('twin-563', 3, 563, 'account-id-563', 'relay-563', 'public-key-563'),('twin-564', 3, 564, 'account-id-564', 'relay-564', 'public-key-564'),('twin-565', 3, 565, 'account-id-565', 'relay-565', 'public-key-565'),('twin-566', 3, 566, 'account-id-566', 'relay-566', 'public-key-566'),('twin-567', 3, 567, 'account-id-567', 'relay-567', 'public-key-567'),('twin-568', 3, 568, 'account-id-568', 'relay-568', 'public-key-568'),('twin-569', 3, 569, 'account-id-569', 'relay-569', 'public-key-569'),('twin-570', 3, 570, 'account-id-570', 'relay-570', 'public-key-570'),('twin-571', 3, 571, 'account-id-571', 'relay-571', 'public-key-571'),('twin-572', 3, 572, 'account-id-572', 'relay-572', 'public-key-572'),('twin-573', 3, 573, 'account-id-573', 'relay-573', 'public-key-573'),('twin-574', 3, 574, 'account-id-574', 'relay-574', 'public-key-574'),('twin-575', 3, 575, 'account-id-575', 'relay-575', 'public-key-575'),('twin-576', 3, 576, 'account-id-576', 'relay-576', 'public-key-576'),('twin-577', 3, 577, 'account-id-577', 'relay-577', 'public-key-577'),('twin-578', 3, 578, 'account-id-578', 'relay-578', 'public-key-578'),('twin-579', 3, 579, 'account-id-579', 'relay-579', 'public-key-579'),('twin-580', 3, 580, 'account-id-580', 'relay-580', 'public-key-580'),('twin-581', 3, 581, 'account-id-581', 'relay-581', 'public-key-581'),('twin-582', 3, 582, 'account-id-582', 'relay-582', 'public-key-582'),('twin-583', 3, 583, 'account-id-583', 'relay-583', 'public-key-583'),('twin-584', 3, 584, 'account-id-584', 'relay-584', 'public-key-584'),('twin-585', 3, 585, 'account-id-585', 'relay-585', 'public-key-585'),('twin-586', 3, 586, 'account-id-586', 'relay-586', 'public-key-586'),('twin-587', 3, 587, 'account-id-587', 'relay-587', 'public-key-587'),('twin-588', 3, 588, 'account-id-588', 'relay-588', 'public-key-588'),('twin-589', 3, 589, 'account-id-589', 'relay-589', 'public-key-589'),('twin-590', 3, 590, 'account-id-590', 'relay-590', 'public-key-590'),('twin-591', 3, 591, 'account-id-591', 'relay-591', 'public-key-591'),('twin-592', 3, 592, 'account-id-592', 'relay-592', 'public-key-592'),('twin-593', 3, 593, 'account-id-593', 'relay-593', 'public-key-593'),('twin-594', 3, 594, 'account-id-594', 'relay-594', 'public-key-594'),('twin-595', 3, 595, 'account-id-595', 'relay-595', 'public-key-595'),('twin-596', 3, 596, 'account-id-596', 'relay-596', 'public-key-596'),('twin-597', 3, 597, 'account-id-597', 'relay-597', 'public-key-597'),('twin-598', 3, 598, 'account-id-598', 'relay-598', 'public-key-598'),('twin-599', 3, 599, 'account-id-599', 'relay-599', 'public-key-599'),('twin-600', 3, 600, 'account-id-600', 'relay-600', 'public-key-600'),('twin-601', 3, 601, 'account-id-601', 'relay-601', 'public-key-601'),('twin-602', 3, 602, 'account-id-602', 'relay-602', 'public-key-602'),('twin-603', 3, 603, 'account-id-603', 'relay-603', 'public-key-603'),('twin-604', 3, 604, 'account-id-604', 'relay-604', 'public-key-604'),('twin-605', 3, 605, 'account-id-605', 'relay-605', 'public-key-605'),('twin-606', 3, 606, 'account-id-606', 'relay-606', 'public-key-606'),('twin-607', 3, 607, 'account-id-607', 'relay-607', 'public-key-607'),('twin-608', 3, 608, 'account-id-608', 'relay-608', 'public-key-608'),('twin-609', 3, 609, 'account-id-609', 'relay-609', 'public-key-609'),('twin-610', 3, 610, 'account-id-610', 'relay-610', 'public-key-610'),('twin-611', 3, 611, 'account-id-611', 'relay-611', 'public-key-611'),('twin-612', 3, 612, 'account-id-612', 'relay-612', 'public-key-612'),('twin-613', 3, 613, 'account-id-613', 'relay-613', 'public-key-613'),('twin-614', 3, 614, 'account-id-614', 'relay-614', 'public-key-614'),('twin-615', 3, 615, 'account-id-615', 'relay-615', 'public-key-615'),('twin-616', 3, 616, 'account-id-616', 'relay-616', 'public-key-616'),('twin-617', 3, 617, 'account-id-617', 'relay-617', 'public-key-617'),('twin-618', 3, 618, 'account-id-618', 'relay-618', 'public-key-618'),('twin-619', 3, 619, 'account-id-619', 'relay-619', 'public-key-619'),('twin-620', 3, 620, 'account-id-620', 'relay-620', 'public-key-620'),('twin-621', 3, 621, 'account-id-621', 'relay-621', 'public-key-621'),('twin-622', 3, 622, 'account-id-622', 'relay-622', 'public-key-622'),('twin-623', 3, 623, 'account-id-623', 'relay-623', 'public-key-623'),('twin-624', 3, 624, 'account-id-624', 'relay-624', 'public-key-624'),('twin-625', 3, 625, 'account-id-625', 'relay-625', 'public-key-625'),('twin-626', 3, 626, 'account-id-626', 'relay-626', 'public-key-626'),('twin-627', 3, 627, 'account-id-627', 'relay-627', 'public-key-627'),('twin-628', 3, 628, 'account-id-628', 'relay-628', 'public-key-628'),('twin-629', 3, 629, 'account-id-629', 'relay-629', 'public-key-629'),('twin-630', 3, 630, 'account-id-630', 'relay-630', 'public-key-630'),('twin-631', 3, 631, 'account-id-631', 'relay-631', 'public-key-631'),('twin-632', 3, 632, 'account-id-632', 'relay-632', 'public-key-632'),('twin-633', 3, 633, 'account-id-633', 'relay-633', 'public-key-633'),('twin-634', 3, 634, 'account-id-634', 'relay-634', 'public-key-634'),('twin-635', 3, 635, 'account-id-635', 'relay-635', 'public-key-635'),('twin-636', 3, 636, 'account-id-636', 'relay-636', 'public-key-636'),('twin-637', 3, 637, 'account-id-637', 'relay-637', 'public-key-637'),('twin-638', 3, 638, 'account-id-638', 'relay-638', 'public-key-638'),('twin-639', 3, 639, 'account-id-639', 'relay-639', 'public-key-639'),('twin-640', 3, 640, 'account-id-640', 'relay-640', 'public-key-640'),('twin-641', 3, 641, 'account-id-641', 'relay-641', 'public-key-641'),('twin-642', 3, 642, 'account-id-642', 'relay-642', 'public-key-642'),('twin-643', 3, 643, 'account-id-643', 'relay-643', 'public-key-643'),('twin-644', 3, 644, 'account-id-644', 'relay-644', 'public-key-644'),('twin-645', 3, 645, 'account-id-645', 'relay-645', 'public-key-645'),('twin-646', 3, 646, 'account-id-646', 'relay-646', 'public-key-646'),('twin-647', 3, 647, 'account-id-647', 'relay-647', 'public-key-647'),('twin-648', 3, 648, 'account-id-648', 'relay-648', 'public-key-648'),('twin-649', 3, 649, 'account-id-649', 'relay-649', 'public-key-649'),('twin-650', 3, 650, 'account-id-650', 'relay-650', 'public-key-650'),('twin-651', 3, 651, 'account-id-651', 'relay-651', 'public-key-651'),('twin-652', 3, 652, 'account-id-652', 'relay-652', 'public-key-652'),('twin-653', 3, 653, 'account-id-653', 'relay-653', 'public-key-653'),('twin-654', 3, 654, 'account-id-654', 'relay-654', 'public-key-654'),('twin-655', 3, 655, 'account-id-655', 'relay-655', 'public-key-655'),('twin-656', 3, 656, 'account-id-656', 'relay-656', 'public-key-656'),('twin-657', 3, 657, 'account-id-657', 'relay-657', 'public-key-657'),('twin-658', 3, 658, 'account-id-658', 'relay-658', 'public-key-658'),('twin-659', 3, 659, 'account-id-659', 'relay-659', 'public-key-659'),('twin-660', 3, 660, 'account-id-660', 'relay-660', 'public-key-660'),('twin-661', 3, 661, 'account-id-661', 'relay-661', 'public-key-661'),('twin-662', 3, 662, 'account-id-662', 'relay-662', 'public-key-662'),('twin-663', 3, 663, 'account-id-663', 'relay-663', 'public-key-663'),('twin-664', 3, 664, 'account-id-664', 'relay-664', 'public-key-664'),('twin-665', 3, 665, 'account-id-665', 'relay-665', 'public-key-665'),('twin-666', 3, 666, 'account-id-666', 'relay-666', 'public-key-666'),('twin-667', 3, 667, 'account-id-667', 'relay-667', 'public-key-667'),('twin-668', 3, 668, 'account-id-668', 'relay-668', 'public-key-668'),('twin-669', 3, 669, 'account-id-669', 'relay-669', 'public-key-669'),('twin-670', 3, 670, 'account-id-670', 'relay-670', 'public-key-670'),('twin-671', 3, 671, 'account-id-671', 'relay-671', 'public-key-671'),('twin-672', 3, 672, 'account-id-672', 'relay-672', 'public-key-672'),('twin-673', 3, 673, 'account-id-673', 'relay-673', 'public-key-673'),('twin-674', 3, 674, 'account-id-674', 'relay-674', 'public-key-674'),('twin-675', 3, 675, 'account-id-675', 'relay-675', 'public-key-675'),('twin-676', 3, 676, 'account-id-676', 'relay-676', 'public-key-676'),('twin-677', 3, 677, 'account-id-677', 'relay-677', 'public-key-677'),('twin-678', 3, 678, 'account-id-678', 'relay-678', 'public-key-678'),('twin-679', 3, 679, 'account-id-679', 'relay-679', 'public-key-679'),('twin-680', 3, 680, 'account-id-680', 'relay-680', 'public-key-680'),('twin-681', 3, 681, 'account-id-681', 'relay-681', 'public-key-681'),('twin-682', 3, 682, 'account-id-682', 'relay-682', 'public-key-682'),('twin-683', 3, 683, 'account-id-683', 'relay-683', 'public-key-683'),('twin-684', 3, 684, 'account-id-684', 'relay-684', 'public-key-684'),('twin-685', 3, 685, 'account-id-685', 'relay-685', 'public-key-685'),('twin-686', 3, 686, 'account-id-686', 'relay-686', 'public-key-686'),('twin-687', 3, 687, 'account-id-687', 'relay-687', 'public-key-687'),('twin-688', 3, 688, 'account-id-688', 'relay-688', 'public-key-688'),('twin-689', 3, 689, 'account-id-689', 'relay-689', 'public-key-689'),('twin-690', 3, 690, 'account-id-690', 'relay-690', 'public-key-690'),('twin-691', 3, 691, 'account-id-691', 'relay-691', 'public-key-691'),('twin-692', 3, 692, 'account-id-692', 'relay-692', 'public-key-692'),('twin-693', 3, 693, 'account-id-693', 'relay-693', 'public-key-693'),('twin-694', 3, 694, 'account-id-694', 'relay-694', 'public-key-694'),('twin-695', 3, 695, 'account-id-695', 'relay-695', 'public-key-695'),('twin-696', 3, 696, 'account-id-696', 'relay-696', 'public-key-696'),('twin-697', 3, 697, 'account-id-697', 'relay-697', 'public-key-697'),('twin-698', 3, 698, 'account-id-698', 'relay-698', 'public-key-698'),('twin-699', 3, 699, 'account-id-699', 'relay-699', 'public-key-699'),('twin-700', 3, 700, 'account-id-700', 'relay-700', 'public-key-700'),('twin-701', 3, 701, 'account-id-701', 'relay-701', 'public-key-701'),('twin-702', 3, 702, 'account-id-702', 'relay-702', 'public-key-702'),('twin-703', 3, 703, 'account-id-703', 'relay-703', 'public-key-703'),('twin-704', 3, 704, 'account-id-704', 'relay-704', 'public-key-704'),('twin-705', 3, 705, 'account-id-705', 'relay-705', 'public-key-705'),('twin-706', 3, 706, 'account-id-706', 'relay-706', 'public-key-706'),('twin-707', 3, 707, 'account-id-707', 'relay-707', 'public-key-707'),('twin-708', 3, 708, 'account-id-708', 'relay-708', 'public-key-708'),('twin-709', 3, 709, 'account-id-709', 'relay-709', 'public-key-709'),('twin-710', 3, 710, 'account-id-710', 'relay-710', 'public-key-710'),('twin-711', 3, 711, 'account-id-711', 'relay-711', 'public-key-711'),('twin-712', 3, 712, 'account-id-712', 'relay-712', 'public-key-712'),('twin-713', 3, 713, 'account-id-713', 'relay-713', 'public-key-713'),('twin-714', 3, 714, 'account-id-714', 'relay-714', 'public-key-714'),('twin-715', 3, 715, 'account-id-715', 'relay-715', 'public-key-715'),('twin-716', 3, 716, 'account-id-716', 'relay-716', 'public-key-716'),('twin-717', 3, 717, 'account-id-717', 'relay-717', 'public-key-717'),('twin-718', 3, 718, 'account-id-718', 'relay-718', 'public-key-718'),('twin-719', 3, 719, 'account-id-719', 'relay-719', 'public-key-719'),('twin-720', 3, 720, 'account-id-720', 'relay-720', 'public-key-720'),('twin-721', 3, 721, 'account-id-721', 'relay-721', 'public-key-721'),('twin-722', 3, 722, 'account-id-722', 'relay-722', 'public-key-722'),('twin-723', 3, 723, 'account-id-723', 'relay-723', 'public-key-723'),('twin-724', 3, 724, 'account-id-724', 'relay-724', 'public-key-724'),('twin-725', 3, 725, 'account-id-725', 'relay-725', 'public-key-725'),('twin-726', 3, 726, 'account-id-726', 'relay-726', 'public-key-726'),('twin-727', 3, 727, 'account-id-727', 'relay-727', 'public-key-727'),('twin-728', 3, 728, 'account-id-728', 'relay-728', 'public-key-728'),('twin-729', 3, 729, 'account-id-729', 'relay-729', 'public-key-729'),('twin-730', 3, 730, 'account-id-730', 'relay-730', 'public-key-730'),('twin-731', 3, 731, 'account-id-731', 'relay-731', 'public-key-731'),('twin-732', 3, 732, 'account-id-732', 'relay-732', 'public-key-732'),('twin-733', 3, 733, 'account-id-733', 'relay-733', 'public-key-733'),('twin-734', 3, 734, 'account-id-734', 'relay-734', 'public-key-734'),('twin-735', 3, 735, 'account-id-735', 'relay-735', 'public-key-735'),('twin-736', 3, 736, 'account-id-736', 'relay-736', 'public-key-736'),('twin-737', 3, 737, 'account-id-737', 'relay-737', 'public-key-737'),('twin-738', 3, 738, 'account-id-738', 'relay-738', 'public-key-738'),('twin-739', 3, 739, 'account-id-739', 'relay-739', 'public-key-739'),('twin-740', 3, 740, 'account-id-740', 'relay-740', 'public-key-740'),('twin-741', 3, 741, 'account-id-741', 'relay-741', 'public-key-741'),('twin-742', 3, 742, 'account-id-742', 'relay-742', 'public-key-742'),('twin-743', 3, 743, 'account-id-743', 'relay-743', 'public-key-743'),('twin-744', 3, 744, 'account-id-744', 'relay-744', 'public-key-744'),('twin-745', 3, 745, 'account-id-745', 'relay-745', 'public-key-745'),('twin-746', 3, 746, 'account-id-746', 'relay-746', 'public-key-746'),('twin-747', 3, 747, 'account-id-747', 'relay-747', 'public-key-747'),('twin-748', 3, 748, 'account-id-748', 'relay-748', 'public-key-748'),('twin-749', 3, 749, 'account-id-749', 'relay-749', 'public-key-749'),('twin-750', 3, 750, 'account-id-750', 'relay-750', 'public-key-750'),('twin-751', 3, 751, 'account-id-751', 'relay-751', 'public-key-751'),('twin-752', 3, 752, 'account-id-752', 'relay-752', 'public-key-752'),('twin-753', 3, 753, 'account-id-753', 'relay-753', 'public-key-753'),('twin-754', 3, 754, 'account-id-754', 'relay-754', 'public-key-754'),('twin-755', 3, 755, 'account-id-755', 'relay-755', 'public-key-755'),('twin-756', 3, 756, 'account-id-756', 'relay-756', 'public-key-756'),('twin-757', 3, 757, 'account-id-757', 'relay-757', 'public-key-757'),('twin-758', 3, 758, 'account-id-758', 'relay-758', 'public-key-758'),('twin-759', 3, 759, 'account-id-759', 'relay-759', 'public-key-759'),('twin-760', 3, 760, 'account-id-760', 'relay-760', 'public-key-760'),('twin-761', 3, 761, 'account-id-761', 'relay-761', 'public-key-761'),('twin-762', 3, 762, 'account-id-762', 'relay-762', 'public-key-762'),('twin-763', 3, 763, 'account-id-763', 'relay-763', 'public-key-763'),('twin-764', 3, 764, 'account-id-764', 'relay-764', 'public-key-764'),('twin-765', 3, 765, 'account-id-765', 'relay-765', 'public-key-765'),('twin-766', 3, 766, 'account-id-766', 'relay-766', 'public-key-766'),('twin-767', 3, 767, 'account-id-767', 'relay-767', 'public-key-767'),('twin-768', 3, 768, 'account-id-768', 'relay-768', 'public-key-768'),('twin-769', 3, 769, 'account-id-769', 'relay-769', 'public-key-769'),('twin-770', 3, 770, 'account-id-770', 'relay-770', 'public-key-770'),('twin-771', 3, 771, 'account-id-771', 'relay-771', 'public-key-771'),('twin-772', 3, 772, 'account-id-772', 'relay-772', 'public-key-772'),('twin-773', 3, 773, 'account-id-773', 'relay-773', 'public-key-773'),('twin-774', 3, 774, 'account-id-774', 'relay-774', 'public-key-774'),('twin-775', 3, 775, 'account-id-775', 'relay-775', 'public-key-775'),('twin-776', 3, 776, 'account-id-776', 'relay-776', 'public-key-776'),('twin-777', 3, 777, 'account-id-777', 'relay-777', 'public-key-777'),('twin-778', 3, 778, 'account-id-778', 'relay-778', 'public-key-778'),('twin-779', 3, 779, 'account-id-779', 'relay-779', 'public-key-779'),('twin-780', 3, 780, 'account-id-780', 'relay-780', 'public-key-780'),('twin-781', 3, 781, 'account-id-781', 'relay-781', 'public-key-781'),('twin-782', 3, 782, 'account-id-782', 'relay-782', 'public-key-782'),('twin-783', 3, 783, 'account-id-783', 'relay-783', 'public-key-783'),('twin-784', 3, 784, 'account-id-784', 'relay-784', 'public-key-784'),('twin-785', 3, 785, 'account-id-785', 'relay-785', 'public-key-785'),('twin-786', 3, 786, 'account-id-786', 'relay-786', 'public-key-786'),('twin-787', 3, 787, 'account-id-787', 'relay-787', 'public-key-787'),('twin-788', 3, 788, 'account-id-788', 'relay-788', 'public-key-788'),('twin-789', 3, 789, 'account-id-789', 'relay-789', 'public-key-789'),('twin-790', 3, 790, 'account-id-790', 'relay-790', 'public-key-790'),('twin-791', 3, 791, 'account-id-791', 'relay-791', 'public-key-791'),('twin-792', 3, 792, 'account-id-792', 'relay-792', 'public-key-792'),('twin-793', 3, 793, 'account-id-793', 'relay-793', 'public-key-793'),('twin-794', 3, 794, 'account-id-794', 'relay-794', 'public-key-794'),('twin-795', 3, 795, 'account-id-795', 'relay-795', 'public-key-795'),('twin-796', 3, 796, 'account-id-796', 'relay-796', 'public-key-796'),('twin-797', 3, 797, 'account-id-797', 'relay-797', 'public-key-797'),('twin-798', 3, 798, 'account-id-798', 'relay-798', 'public-key-798'),('twin-799', 3, 799, 'account-id-799', 'relay-799', 'public-key-799'),('twin-800', 3, 800, 'account-id-800', 'relay-800', 'public-key-800'),('twin-801', 3, 801, 'account-id-801', 'relay-801', 'public-key-801'),('twin-802', 3, 802, 'account-id-802', 'relay-802', 'public-key-802'),('twin-803', 3, 803, 'account-id-803', 'relay-803', 'public-key-803'),('twin-804', 3, 804, 'account-id-804', 'relay-804', 'public-key-804'),('twin-805', 3, 805, 'account-id-805', 'relay-805', 'public-key-805'),('twin-806', 3, 806, 'account-id-806', 'relay-806', 'public-key-806'),('twin-807', 3, 807, 'account-id-807', 'relay-807', 'public-key-807'),('twin-808', 3, 808, 'account-id-808', 'relay-808', 'public-key-808'),('twin-809', 3, 809, 'account-id-809', 'relay-809', 'public-key-809'),('twin-810', 3, 810, 'account-id-810', 'relay-810', 'public-key-810'),('twin-811', 3, 811, 'account-id-811', 'relay-811', 'public-key-811'),('twin-812', 3, 812, 'account-id-812', 'relay-812', 'public-key-812'),('twin-813', 3, 813, 'account-id-813', 'relay-813', 'public-key-813'),('twin-814', 3, 814, 'account-id-814', 'relay-814', 'public-key-814'),('twin-815', 3, 815, 'account-id-815', 'relay-815', 'public-key-815'),('twin-816', 3, 816, 'account-id-816', 'relay-816', 'public-key-816'),('twin-817', 3, 817, 'account-id-817', 'relay-817', 'public-key-817'),('twin-818', 3, 818, 'account-id-818', 'relay-818', 'public-key-818'),('twin-819', 3, 819, 'account-id-819', 'relay-819', 'public-key-819'),('twin-820', 3, 820, 'account-id-820', 'relay-820', 'public-key-820'),('twin-821', 3, 821, 'account-id-821', 'relay-821', 'public-key-821'),('twin-822', 3, 822, 'account-id-822', 'relay-822', 'public-key-822'),('twin-823', 3, 823, 'account-id-823', 'relay-823', 'public-key-823'),('twin-824', 3, 824, 'account-id-824', 'relay-824', 'public-key-824'),('twin-825', 3, 825, 'account-id-825', 'relay-825', 'public-key-825'),('twin-826', 3, 826, 'account-id-826', 'relay-826', 'public-key-826'),('twin-827', 3, 827, 'account-id-827', 'relay-827', 'public-key-827'),('twin-828', 3, 828, 'account-id-828', 'relay-828', 'public-key-828'),('twin-829', 3, 829, 'account-id-829', 'relay-829', 'public-key-829'),('twin-830', 3, 830, 'account-id-830', 'relay-830', 'public-key-830'),('twin-831', 3, 831, 'account-id-831', 'relay-831', 'public-key-831'),('twin-832', 3, 832, 'account-id-832', 'relay-832', 'public-key-832'),('twin-833', 3, 833, 'account-id-833', 'relay-833', 'public-key-833'),('twin-834', 3, 834, 'account-id-834', 'relay-834', 'public-key-834'),('twin-835', 3, 835, 'account-id-835', 'relay-835', 'public-key-835'),('twin-836', 3, 836, 'account-id-836', 'relay-836', 'public-key-836'),('twin-837', 3, 837, 'account-id-837', 'relay-837', 'public-key-837'),('twin-838', 3, 838, 'account-id-838', 'relay-838', 'public-key-838'),('twin-839', 3, 839, 'account-id-839', 'relay-839', 'public-key-839'),('twin-840', 3, 840, 'account-id-840', 'relay-840', 'public-key-840'),('twin-841', 3, 841, 'account-id-841', 'relay-841', 'public-key-841'),('twin-842', 3, 842, 'account-id-842', 'relay-842', 'public-key-842'),('twin-843', 3, 843, 'account-id-843', 'relay-843', 'public-key-843'),('twin-844', 3, 844, 'account-id-844', 'relay-844', 'public-key-844'),('twin-845', 3, 845, 'account-id-845', 'relay-845', 'public-key-845'),('twin-846', 3, 846, 'account-id-846', 'relay-846', 'public-key-846'),('twin-847', 3, 847, 'account-id-847', 'relay-847', 'public-key-847'),('twin-848', 3, 848, 'account-id-848', 'relay-848', 'public-key-848'),('twin-849', 3, 849, 'account-id-849', 'relay-849', 'public-key-849'),('twin-850', 3, 850, 'account-id-850', 'relay-850', 'public-key-850'),('twin-851', 3, 851, 'account-id-851', 'relay-851', 'public-key-851'),('twin-852', 3, 852, 'account-id-852', 'relay-852', 'public-key-852'),('twin-853', 3, 853, 'account-id-853', 'relay-853', 'public-key-853'),('twin-854', 3, 854, 'account-id-854', 'relay-854', 'public-key-854'),('twin-855', 3, 855, 'account-id-855', 'relay-855', 'public-key-855'),('twin-856', 3, 856, 'account-id-856', 'relay-856', 'public-key-856'),('twin-857', 3, 857, 'account-id-857', 'relay-857', 'public-key-857'),('twin-858', 3, 858, 'account-id-858', 'relay-858', 'public-key-858'),('twin-859', 3, 859, 'account-id-859', 'relay-859', 'public-key-859'),('twin-860', 3, 860, 'account-id-860', 'relay-860', 'public-key-860'),('twin-861', 3, 861, 'account-id-861', 'relay-861', 'public-key-861'),('twin-862', 3, 862, 'account-id-862', 'relay-862', 'public-key-862'),('twin-863', 3, 863, 'account-id-863', 'relay-863', 'public-key-863'),('twin-864', 3, 864, 'account-id-864', 'relay-864', 'public-key-864'),('twin-865', 3, 865, 'account-id-865', 'relay-865', 'public-key-865'),('twin-866', 3, 866, 'account-id-866', 'relay-866', 'public-key-866'),('twin-867', 3, 867, 'account-id-867', 'relay-867', 'public-key-867'),('twin-868', 3, 868, 'account-id-868', 'relay-868', 'public-key-868'),('twin-869', 3, 869, 'account-id-869', 'relay-869', 'public-key-869'),('twin-870', 3, 870, 'account-id-870', 'relay-870', 'public-key-870'),('twin-871', 3, 871, 'account-id-871', 'relay-871', 'public-key-871'),('twin-872', 3, 872, 'account-id-872', 'relay-872', 'public-key-872'),('twin-873', 3, 873, 'account-id-873', 'relay-873', 'public-key-873'),('twin-874', 3, 874, 'account-id-874', 'relay-874', 'public-key-874'),('twin-875', 3, 875, 'account-id-875', 'relay-875', 'public-key-875'),('twin-876', 3, 876, 'account-id-876', 'relay-876', 'public-key-876'),('twin-877', 3, 877, 'account-id-877', 'relay-877', 'public-key-877'),('twin-878', 3, 878, 'account-id-878', 'relay-878', 'public-key-878'),('twin-879', 3, 879, 'account-id-879', 'relay-879', 'public-key-879'),('twin-880', 3, 880, 'account-id-880', 'relay-880', 'public-key-880'),('twin-881', 3, 881, 'account-id-881', 'relay-881', 'public-key-881'),('twin-882', 3, 882, 'account-id-882', 'relay-882', 'public-key-882'),('twin-883', 3, 883, 'account-id-883', 'relay-883', 'public-key-883'),('twin-884', 3, 884, 'account-id-884', 'relay-884', 'public-key-884'),('twin-885', 3, 885, 'account-id-885', 'relay-885', 'public-key-885'),('twin-886', 3, 886, 'account-id-886', 'relay-886', 'public-key-886'),('twin-887', 3, 887, 'account-id-887', 'relay-887', 'public-key-887'),('twin-888', 3, 888, 'account-id-888', 'relay-888', 'public-key-888'),('twin-889', 3, 889, 'account-id-889', 'relay-889', 'public-key-889'),('twin-890', 3, 890, 'account-id-890', 'relay-890', 'public-key-890'),('twin-891', 3, 891, 'account-id-891', 'relay-891', 'public-key-891'),('twin-892', 3, 892, 'account-id-892', 'relay-892', 'public-key-892'),('twin-893', 3, 893, 'account-id-893', 'relay-893', 'public-key-893'),('twin-894', 3, 894, 'account-id-894', 'relay-894', 'public-key-894'),('twin-895', 3, 895, 'account-id-895', 'relay-895', 'public-key-895'),('twin-896', 3, 896, 'account-id-896', 'relay-896', 'public-key-896'),('twin-897', 3, 897, 'account-id-897', 'relay-897', 'public-key-897'),('twin-898', 3, 898, 'account-id-898', 'relay-898', 'public-key-898'),('twin-899', 3, 899, 'account-id-899', 'relay-899', 'public-key-899'),('twin-900', 3, 900, 'account-id-900', 'relay-900', 'public-key-900'),('twin-901', 3, 901, 'account-id-901', 'relay-901', 'public-key-901'),('twin-902', 3, 902, 'account-id-902', 'relay-902', 'public-key-902'),('twin-903', 3, 903, 'account-id-903', 'relay-903', 'public-key-903'),('twin-904', 3, 904, 'account-id-904', 'relay-904', 'public-key-904'),('twin-905', 3, 905, 'account-id-905', 'relay-905', 'public-key-905'),('twin-906', 3, 906, 'account-id-906', 'relay-906', 'public-key-906'),('twin-907', 3, 907, 'account-id-907', 'relay-907', 'public-key-907'),('twin-908', 3, 908, 'account-id-908', 'relay-908', 'public-key-908'),('twin-909', 3, 909, 'account-id-909', 'relay-909', 'public-key-909'),('twin-910', 3, 910, 'account-id-910', 'relay-910', 'public-key-910'),('twin-911', 3, 911, 'account-id-911', 'relay-911', 'public-key-911'),('twin-912', 3, 912, 'account-id-912', 'relay-912', 'public-key-912'),('twin-913', 3, 913, 'account-id-913', 'relay-913', 'public-key-913'),('twin-914', 3, 914, 'account-id-914', 'relay-914', 'public-key-914'),('twin-915', 3, 915, 'account-id-915', 'relay-915', 'public-key-915'),('twin-916', 3, 916, 'account-id-916', 'relay-916', 'public-key-916'),('twin-917', 3, 917, 'account-id-917', 'relay-917', 'public-key-917'),('twin-918', 3, 918, 'account-id-918', 'relay-918', 'public-key-918'),('twin-919', 3, 919, 'account-id-919', 'relay-919', 'public-key-919'),('twin-920', 3, 920, 'account-id-920', 'relay-920', 'public-key-920'),('twin-921', 3, 921, 'account-id-921', 'relay-921', 'public-key-921'),('twin-922', 3, 922, 'account-id-922', 'relay-922', 'public-key-922'),('twin-923', 3, 923, 'account-id-923', 'relay-923', 'public-key-923'),('twin-924', 3, 924, 'account-id-924', 'relay-924', 'public-key-924'),('twin-925', 3, 925, 'account-id-925', 'relay-925', 'public-key-925'),('twin-926', 3, 926, 'account-id-926', 'relay-926', 'public-key-926'),('twin-927', 3, 927, 'account-id-927', 'relay-927', 'public-key-927'),('twin-928', 3, 928, 'account-id-928', 'relay-928', 'public-key-928'),('twin-929', 3, 929, 'account-id-929', 'relay-929', 'public-key-929'),('twin-930', 3, 930, 'account-id-930', 'relay-930', 'public-key-930'),('twin-931', 3, 931, 'account-id-931', 'relay-931', 'public-key-931'),('twin-932', 3, 932, 'account-id-932', 'relay-932', 'public-key-932'),('twin-933', 3, 933, 'account-id-933', 'relay-933', 'public-key-933'),('twin-934', 3, 934, 'account-id-934', 'relay-934', 'public-key-934'),('twin-935', 3, 935, 'account-id-935', 'relay-935', 'public-key-935'),('twin-936', 3, 936, 'account-id-936', 'relay-936', 'public-key-936'),('twin-937', 3, 937, 'account-id-937', 'relay-937', 'public-key-937'),('twin-938', 3, 938, 'account-id-938', 'relay-938', 'public-key-938'),('twin-939', 3, 939, 'account-id-939', 'relay-939', 'public-key-939'),('twin-940', 3, 940, 'account-id-940', 'relay-940', 'public-key-940'),('twin-941', 3, 941, 'account-id-941', 'relay-941', 'public-key-941'),('twin-942', 3, 942, 'account-id-942', 'relay-942', 'public-key-942'),('twin-943', 3, 943, 'account-id-943', 'relay-943', 'public-key-943'),('twin-944', 3, 944, 'account-id-944', 'relay-944', 'public-key-944'),('twin-945', 3, 945, 'account-id-945', 'relay-945', 'public-key-945'),('twin-946', 3, 946, 'account-id-946', 'relay-946', 'public-key-946'),('twin-947', 3, 947, 'account-id-947', 'relay-947', 'public-key-947'),('twin-948', 3, 948, 'account-id-948', 'relay-948', 'public-key-948'),('twin-949', 3, 949, 'account-id-949', 'relay-949', 'public-key-949'),('twin-950', 3, 950, 'account-id-950', 'relay-950', 'public-key-950'),('twin-951', 3, 951, 'account-id-951', 'relay-951', 'public-key-951'),('twin-952', 3, 952, 'account-id-952', 'relay-952', 'public-key-952'),('twin-953', 3, 953, 'account-id-953', 'relay-953', 'public-key-953'),('twin-954', 3, 954, 'account-id-954', 'relay-954', 'public-key-954'),('twin-955', 3, 955, 'account-id-955', 'relay-955', 'public-key-955'),('twin-956', 3, 956, 'account-id-956', 'relay-956', 'public-key-956'),('twin-957', 3, 957, 'account-id-957', 'relay-957', 'public-key-957'),('twin-958', 3, 958, 'account-id-958', 'relay-958', 'public-key-958'),('twin-959', 3, 959, 'account-id-959', 'relay-959', 'public-key-959'),('twin-960', 3, 960, 'account-id-960', 'relay-960', 'public-key-960'),('twin-961', 3, 961, 'account-id-961', 'relay-961', 'public-key-961'),('twin-962', 3, 962, 'account-id-962', 'relay-962', 'public-key-962'),('twin-963', 3, 963, 'account-id-963', 'relay-963', 'public-key-963'),('twin-964', 3, 964, 'account-id-964', 'relay-964', 'public-key-964'),('twin-965', 3, 965, 'account-id-965', 'relay-965', 'public-key-965'),('twin-966', 3, 966, 'account-id-966', 'relay-966', 'public-key-966'),('twin-967', 3, 967, 'account-id-967', 'relay-967', 'public-key-967'),('twin-968', 3, 968, 'account-id-968', 'relay-968', 'public-key-968'),('twin-969', 3, 969, 'account-id-969', 'relay-969', 'public-key-969'),('twin-970', 3, 970, 'account-id-970', 'relay-970', 'public-key-970'),('twin-971', 3, 971, 'account-id-971', 'relay-971', 'public-key-971'),('twin-972', 3, 972, 'account-id-972', 'relay-972', 'public-key-972'),('twin-973', 3, 973, 'account-id-973', 'relay-973', 'public-key-973'),('twin-974', 3, 974, 'account-id-974', 'relay-974', 'public-key-974'),('twin-975', 3, 975, 'account-id-975', 'relay-975', 'public-key-975'),('twin-976', 3, 976, 'account-id-976', 'relay-976', 'public-key-976'),('twin-977', 3, 977, 'account-id-977', 'relay-977', 'public-key-977'),('twin-978', 3, 978, 'account-id-978', 'relay-978', 'public-key-978'),('twin-979', 3, 979, 'account-id-979', 'relay-979', 'public-key-979'),('twin-980', 3, 980, 'account-id-980', 'relay-980', 'public-key-980'),('twin-981', 3, 981, 'account-id-981', 'relay-981', 'public-key-981'),('twin-982', 3, 982, 'account-id-982', 'relay-982', 'public-key-982'),('twin-983', 3, 983, 'account-id-983', 'relay-983', 'public-key-983'),('twin-984', 3, 984, 'account-id-984', 'relay-984', 'public-key-984'),('twin-985', 3, 985, 'account-id-985', 'relay-985', 'public-key-985'),('twin-986', 3, 986, 'account-id-986', 'relay-986', 'public-key-986'),('twin-987', 3, 987, 'account-id-987', 'relay-987', 'public-key-987'),('twin-988', 3, 988, 'account-id-988', 'relay-988', 'public-key-988'),('twin-989', 3, 989, 'account-id-989', 'relay-989', 'public-key-989'),('twin-990', 3, 990, 'account-id-990', 'relay-990', 'public-key-990'),('twin-991', 3, 991, 'account-id-991', 'relay-991', 'public-key-991'),('twin-992', 3, 992, 'account-id-992', 'relay-992', 'public-key-992'),('twin-993', 3, 993, 'account-id-993', 'relay-993', 'public-key-993'),('twin-994', 3, 994, 'account-id-994', 'relay-994', 'public-key-994'),('twin-995', 3, 995, 'account-id-995', 'relay-995', 'public-key-995'),('twin-996', 3, 996, 'account-id-996', 'relay-996', 'public-key-996'),('twin-997', 3, 997, 'account-id-997', 'relay-997', 'public-key-997'),('twin-998', 3, 998, 'account-id-998', 'relay-998', 'public-key-998'),('twin-999', 3, 999, 'account-id-999', 'relay-999', 'public-key-999'),('twin-1000', 3, 1000, 'account-id-1000', 'relay-1000', 'public-key-1000'),('twin-1001', 3, 1001, 'account-id-1001', 'relay-1001', 'public-key-1001'),('twin-1002', 3, 1002, 'account-id-1002', 'relay-1002', 'public-key-1002'),('twin-1003', 3, 1003, 'account-id-1003', 'relay-1003', 'public-key-1003'),('twin-1004', 3, 1004, 'account-id-1004', 'relay-1004', 'public-key-1004'),('twin-1005', 3, 1005, 'account-id-1005', 'relay-1005', 'public-key-1005'),('twin-1006', 3, 1006, 'account-id-1006', 'relay-1006', 'public-key-1006'),('twin-1007', 3, 1007, 'account-id-1007', 'relay-1007', 'public-key-1007'),('twin-1008', 3, 1008, 'account-id-1008', 'relay-1008', 'public-key-1008'),('twin-1009', 3, 1009, 'account-id-1009', 'relay-1009', 'public-key-1009'),('twin-1010', 3, 1010, 'account-id-1010', 'relay-1010', 'public-key-1010'),('twin-1011', 3, 1011, 'account-id-1011', 'relay-1011', 'public-key-1011'),('twin-1012', 3, 1012, 'account-id-1012', 'relay-1012', 'public-key-1012'),('twin-1013', 3, 1013, 'account-id-1013', 'relay-1013', 'public-key-1013'),('twin-1014', 3, 1014, 'account-id-1014', 'relay-1014', 'public-key-1014'),('twin-1015', 3, 1015, 'account-id-1015', 'relay-1015', 'public-key-1015'),('twin-1016', 3, 1016, 'account-id-1016', 'relay-1016', 'public-key-1016'),('twin-1017', 3, 1017, 'account-id-1017', 'relay-1017', 'public-key-1017'),('twin-1018', 3, 1018, 'account-id-1018', 'relay-1018', 'public-key-1018'),('twin-1019', 3, 1019, 'account-id-1019', 'relay-1019', 'public-key-1019'),('twin-1020', 3, 1020, 'account-id-1020', 'relay-1020', 'public-key-1020'),('twin-1021', 3, 1021, 'account-id-1021', 'relay-1021', 'public-key-1021'),('twin-1022', 3, 1022, 'account-id-1022', 'relay-1022', 'public-key-1022'),('twin-1023', 3, 1023, 'account-id-1023', 'relay-1023', 'public-key-1023'),('twin-1024', 3, 1024, 'account-id-1024', 'relay-1024', 'public-key-1024'),('twin-1025', 3, 1025, 'account-id-1025', 'relay-1025', 'public-key-1025'),('twin-1026', 3, 1026, 'account-id-1026', 'relay-1026', 'public-key-1026'),('twin-1027', 3, 1027, 'account-id-1027', 'relay-1027', 'public-key-1027'),('twin-1028', 3, 1028, 'account-id-1028', 'relay-1028', 'public-key-1028'),('twin-1029', 3, 1029, 'account-id-1029', 'relay-1029', 'public-key-1029'),('twin-1030', 3, 1030, 'account-id-1030', 'relay-1030', 'public-key-1030'),('twin-1031', 3, 1031, 'account-id-1031', 'relay-1031', 'public-key-1031'),('twin-1032', 3, 1032, 'account-id-1032', 'relay-1032', 'public-key-1032'),('twin-1033', 3, 1033, 'account-id-1033', 'relay-1033', 'public-key-1033'),('twin-1034', 3, 1034, 'account-id-1034', 'relay-1034', 'public-key-1034'),('twin-1035', 3, 1035, 'account-id-1035', 'relay-1035', 'public-key-1035'),('twin-1036', 3, 1036, 'account-id-1036', 'relay-1036', 'public-key-1036'),('twin-1037', 3, 1037, 'account-id-1037', 'relay-1037', 'public-key-1037'),('twin-1038', 3, 1038, 'account-id-1038', 'relay-1038', 'public-key-1038'),('twin-1039', 3, 1039, 'account-id-1039', 'relay-1039', 'public-key-1039'),('twin-1040', 3, 1040, 'account-id-1040', 'relay-1040', 'public-key-1040'),('twin-1041', 3, 1041, 'account-id-1041', 'relay-1041', 'public-key-1041'),('twin-1042', 3, 1042, 'account-id-1042', 'relay-1042', 'public-key-1042'),('twin-1043', 3, 1043, 'account-id-1043', 'relay-1043', 'public-key-1043'),('twin-1044', 3, 1044, 'account-id-1044', 'relay-1044', 'public-key-1044'),('twin-1045', 3, 1045, 'account-id-1045', 'relay-1045', 'public-key-1045'),('twin-1046', 3, 1046, 'account-id-1046', 'relay-1046', 'public-key-1046'),('twin-1047', 3, 1047, 'account-id-1047', 'relay-1047', 'public-key-1047'),('twin-1048', 3, 1048, 'account-id-1048', 'relay-1048', 'public-key-1048'),('twin-1049', 3, 1049, 'account-id-1049', 'relay-1049', 'public-key-1049'),('twin-1050', 3, 1050, 'account-id-1050', 'relay-1050', 'public-key-1050'),('twin-1051', 3, 1051, 'account-id-1051', 'relay-1051', 'public-key-1051'),('twin-1052', 3, 1052, 'account-id-1052', 'relay-1052', 'public-key-1052'),('twin-1053', 3, 1053, 'account-id-1053', 'relay-1053', 'public-key-1053'),('twin-1054', 3, 1054, 'account-id-1054', 'relay-1054', 'public-key-1054'),('twin-1055', 3, 1055, 'account-id-1055', 'relay-1055', 'public-key-1055'),('twin-1056', 3, 1056, 'account-id-1056', 'relay-1056', 'public-key-1056'),('twin-1057', 3, 1057, 'account-id-1057', 'relay-1057', 'public-key-1057'),('twin-1058', 3, 1058, 'account-id-1058', 'relay-1058', 'public-key-1058'),('twin-1059', 3, 1059, 'account-id-1059', 'relay-1059', 'public-key-1059'),('twin-1060', 3, 1060, 'account-id-1060', 'relay-1060', 'public-key-1060'),('twin-1061', 3, 1061, 'account-id-1061', 'relay-1061', 'public-key-1061'),('twin-1062', 3, 1062, 'account-id-1062', 'relay-1062', 'public-key-1062'),('twin-1063', 3, 1063, 'account-id-1063', 'relay-1063', 'public-key-1063'),('twin-1064', 3, 1064, 'account-id-1064', 'relay-1064', 'public-key-1064'),('twin-1065', 3, 1065, 'account-id-1065', 'relay-1065', 'public-key-1065'),('twin-1066', 3, 1066, 'account-id-1066', 'relay-1066', 'public-key-1066'),('twin-1067', 3, 1067, 'account-id-1067', 'relay-1067', 'public-key-1067'),('twin-1068', 3, 1068, 'account-id-1068', 'relay-1068', 'public-key-1068'),('twin-1069', 3, 1069, 'account-id-1069', 'relay-1069', 'public-key-1069'),('twin-1070', 3, 1070, 'account-id-1070', 'relay-1070', 'public-key-1070'),('twin-1071', 3, 1071, 'account-id-1071', 'relay-1071', 'public-key-1071'),('twin-1072', 3, 1072, 'account-id-1072', 'relay-1072', 'public-key-1072'),('twin-1073', 3, 1073, 'account-id-1073', 'relay-1073', 'public-key-1073'),('twin-1074', 3, 1074, 'account-id-1074', 'relay-1074', 'public-key-1074'),('twin-1075', 3, 1075, 'account-id-1075', 'relay-1075', 'public-key-1075'),('twin-1076', 3, 1076, 'account-id-1076', 'relay-1076', 'public-key-1076'),('twin-1077', 3, 1077, 'account-id-1077', 'relay-1077', 'public-key-1077'),('twin-1078', 3, 1078, 'account-id-1078', 'relay-1078', 'public-key-1078'),('twin-1079', 3, 1079, 'account-id-1079', 'relay-1079', 'public-key-1079'),('twin-1080', 3, 1080, 'account-id-1080', 'relay-1080', 'public-key-1080'),('twin-1081', 3, 1081, 'account-id-1081', 'relay-1081', 'public-key-1081'),('twin-1082', 3, 1082, 'account-id-1082', 'relay-1082', 'public-key-1082'),('twin-1083', 3, 1083, 'account-id-1083', 'relay-1083', 'public-key-1083'),('twin-1084', 3, 1084, 'account-id-1084', 'relay-1084', 'public-key-1084'),('twin-1085', 3, 1085, 'account-id-1085', 'relay-1085', 'public-key-1085'),('twin-1086', 3, 1086, 'account-id-1086', 'relay-1086', 'public-key-1086'),('twin-1087', 3, 1087, 'account-id-1087', 'relay-1087', 'public-key-1087'),('twin-1088', 3, 1088, 'account-id-1088', 'relay-1088', 'public-key-1088'),('twin-1089', 3, 1089, 'account-id-1089', 'relay-1089', 'public-key-1089'),('twin-1090', 3, 1090, 'account-id-1090', 'relay-1090', 'public-key-1090'),('twin-1091', 3, 1091, 'account-id-1091', 'relay-1091', 'public-key-1091'),('twin-1092', 3, 1092, 'account-id-1092', 'relay-1092', 'public-key-1092'),('twin-1093', 3, 1093, 'account-id-1093', 'relay-1093', 'public-key-1093'),('twin-1094', 3, 1094, 'account-id-1094', 'relay-1094', 'public-key-1094'),('twin-1095', 3, 1095, 'account-id-1095', 'relay-1095', 'public-key-1095'),('twin-1096', 3, 1096, 'account-id-1096', 'relay-1096', 'public-key-1096'),('twin-1097', 3, 1097, 'account-id-1097', 'relay-1097', 'public-key-1097'),('twin-1098', 3, 1098, 'account-id-1098', 'relay-1098', 'public-key-1098'),('twin-1099', 3, 1099, 'account-id-1099', 'relay-1099', 'public-key-1099'),('twin-1100', 3, 1100, 'account-id-1100', 'relay-1100', 'public-key-1100'),('twin-1101', 3, 1101, 'account-id-1101', 'relay-1101', 'public-key-1101'),('twin-1102', 3, 1102, 'account-id-1102', 'relay-1102', 'public-key-1102'),('twin-1103', 3, 1103, 'account-id-1103', 'relay-1103', 'public-key-1103'),('twin-1104', 3, 1104, 'account-id-1104', 'relay-1104', 'public-key-1104'),('twin-1105', 3, 1105, 'account-id-1105', 'relay-1105', 'public-key-1105'),('twin-1106', 3, 1106, 'account-id-1106', 'relay-1106', 'public-key-1106'),('twin-1107', 3, 1107, 'account-id-1107', 'relay-1107', 'public-key-1107'),('twin-1108', 3, 1108, 'account-id-1108', 'relay-1108', 'public-key-1108'),('twin-1109', 3, 1109, 'account-id-1109', 'relay-1109', 'public-key-1109'),('twin-1110', 3, 1110, 'account-id-1110', 'relay-1110', 'public-key-1110'),('twin-1111', 3, 1111, 'account-id-1111', 'relay-1111', 'public-key-1111'),('twin-1112', 3, 1112, 'account-id-1112', 'relay-1112', 'public-key-1112'),('twin-1113', 3, 1113, 'account-id-1113', 'relay-1113', 'public-key-1113'),('twin-1114', 3, 1114, 'account-id-1114', 'relay-1114', 'public-key-1114'),('twin-1115', 3, 1115, 'account-id-1115', 'relay-1115', 'public-key-1115'),('twin-1116', 3, 1116, 'account-id-1116', 'relay-1116', 'public-key-1116'),('twin-1117', 3, 1117, 'account-id-1117', 'relay-1117', 'public-key-1117'),('twin-1118', 3, 1118, 'account-id-1118', 'relay-1118', 'public-key-1118'),('twin-1119', 3, 1119, 'account-id-1119', 'relay-1119', 'public-key-1119'),('twin-1120', 3, 1120, 'account-id-1120', 'relay-1120', 'public-key-1120'),('twin-1121', 3, 1121, 'account-id-1121', 'relay-1121', 'public-key-1121'),('twin-1122', 3, 1122, 'account-id-1122', 'relay-1122', 'public-key-1122'),('twin-1123', 3, 1123, 'account-id-1123', 'relay-1123', 'public-key-1123'),('twin-1124', 3, 1124, 'account-id-1124', 'relay-1124', 'public-key-1124'),('twin-1125', 3, 1125, 'account-id-1125', 'relay-1125', 'public-key-1125'),('twin-1126', 3, 1126, 'account-id-1126', 'relay-1126', 'public-key-1126'),('twin-1127', 3, 1127, 'account-id-1127', 'relay-1127', 'public-key-1127'),('twin-1128', 3, 1128, 'account-id-1128', 'relay-1128', 'public-key-1128'),('twin-1129', 3, 1129, 'account-id-1129', 'relay-1129', 'public-key-1129'),('twin-1130', 3, 1130, 'account-id-1130', 'relay-1130', 'public-key-1130'),('twin-1131', 3, 1131, 'account-id-1131', 'relay-1131', 'public-key-1131'),('twin-1132', 3, 1132, 'account-id-1132', 'relay-1132', 'public-key-1132'),('twin-1133', 3, 1133, 'account-id-1133', 'relay-1133', 'public-key-1133'),('twin-1134', 3, 1134, 'account-id-1134', 'relay-1134', 'public-key-1134'),('twin-1135', 3, 1135, 'account-id-1135', 'relay-1135', 'public-key-1135'),('twin-1136', 3, 1136, 'account-id-1136', 'relay-1136', 'public-key-1136'),('twin-1137', 3, 1137, 'account-id-1137', 'relay-1137', 'public-key-1137'),('twin-1138', 3, 1138, 'account-id-1138', 'relay-1138', 'public-key-1138'),('twin-1139', 3, 1139, 'account-id-1139', 'relay-1139', 'public-key-1139'),('twin-1140', 3, 1140, 'account-id-1140', 'relay-1140', 'public-key-1140'),('twin-1141', 3, 1141, 'account-id-1141', 'relay-1141', 'public-key-1141'),('twin-1142', 3, 1142, 'account-id-1142', 'relay-1142', 'public-key-1142'),('twin-1143', 3, 1143, 'account-id-1143', 'relay-1143', 'public-key-1143'),('twin-1144', 3, 1144, 'account-id-1144', 'relay-1144', 'public-key-1144'),('twin-1145', 3, 1145, 'account-id-1145', 'relay-1145', 'public-key-1145'),('twin-1146', 3, 1146, 'account-id-1146', 'relay-1146', 'public-key-1146'),('twin-1147', 3, 1147, 'account-id-1147', 'relay-1147', 'public-key-1147'),('twin-1148', 3, 1148, 'account-id-1148', 'relay-1148', 'public-key-1148'),('twin-1149', 3, 1149, 'account-id-1149', 'relay-1149', 'public-key-1149'),('twin-1150', 3, 1150, 'account-id-1150', 'relay-1150', 'public-key-1150'),('twin-1151', 3, 1151, 'account-id-1151', 'relay-1151', 'public-key-1151'),('twin-1152', 3, 1152, 'account-id-1152', 'relay-1152', 'public-key-1152'),('twin-1153', 3, 1153, 'account-id-1153', 'relay-1153', 'public-key-1153'),('twin-1154', 3, 1154, 'account-id-1154', 'relay-1154', 'public-key-1154'),('twin-1155', 3, 1155, 'account-id-1155', 'relay-1155', 'public-key-1155'),('twin-1156', 3, 1156, 'account-id-1156', 'relay-1156', 'public-key-1156'),('twin-1157', 3, 1157, 'account-id-1157', 'relay-1157', 'public-key-1157'),('twin-1158', 3, 1158, 'account-id-1158', 'relay-1158', 'public-key-1158'),('twin-1159', 3, 1159, 'account-id-1159', 'relay-1159', 'public-key-1159'),('twin-1160', 3, 1160, 'account-id-1160', 'relay-1160', 'public-key-1160'),('twin-1161', 3, 1161, 'account-id-1161', 'relay-1161', 'public-key-1161'),('twin-1162', 3, 1162, 'account-id-1162', 'relay-1162', 'public-key-1162'),('twin-1163', 3, 1163, 'account-id-1163', 'relay-1163', 'public-key-1163'),('twin-1164', 3, 1164, 'account-id-1164', 'relay-1164', 'public-key-1164'),('twin-1165', 3, 1165, 'account-id-1165', 'relay-1165', 'public-key-1165'),('twin-1166', 3, 1166, 'account-id-1166', 'relay-1166', 'public-key-1166'),('twin-1167', 3, 1167, 'account-id-1167', 'relay-1167', 'public-key-1167'),('twin-1168', 3, 1168, 'account-id-1168', 'relay-1168', 'public-key-1168'),('twin-1169', 3, 1169, 'account-id-1169', 'relay-1169', 'public-key-1169'),('twin-1170', 3, 1170, 'account-id-1170', 'relay-1170', 'public-key-1170'),('twin-1171', 3, 1171, 'account-id-1171', 'relay-1171', 'public-key-1171'),('twin-1172', 3, 1172, 'account-id-1172', 'relay-1172', 'public-key-1172'),('twin-1173', 3, 1173, 'account-id-1173', 'relay-1173', 'public-key-1173'),('twin-1174', 3, 1174, 'account-id-1174', 'relay-1174', 'public-key-1174'),('twin-1175', 3, 1175, 'account-id-1175', 'relay-1175', 'public-key-1175'),('twin-1176', 3, 1176, 'account-id-1176', 'relay-1176', 'public-key-1176'),('twin-1177', 3, 1177, 'account-id-1177', 'relay-1177', 'public-key-1177'),('twin-1178', 3, 1178, 'account-id-1178', 'relay-1178', 'public-key-1178'),('twin-1179', 3, 1179, 'account-id-1179', 'relay-1179', 'public-key-1179'),('twin-1180', 3, 1180, 'account-id-1180', 'relay-1180', 'public-key-1180'),('twin-1181', 3, 1181, 'account-id-1181', 'relay-1181', 'public-key-1181'),('twin-1182', 3, 1182, 'account-id-1182', 'relay-1182', 'public-key-1182'),('twin-1183', 3, 1183, 'account-id-1183', 'relay-1183', 'public-key-1183'),('twin-1184', 3, 1184, 'account-id-1184', 'relay-1184', 'public-key-1184'),('twin-1185', 3, 1185, 'account-id-1185', 'relay-1185', 'public-key-1185'),('twin-1186', 3, 1186, 'account-id-1186', 'relay-1186', 'public-key-1186'),('twin-1187', 3, 1187, 'account-id-1187', 'relay-1187', 'public-key-1187'),('twin-1188', 3, 1188, 'account-id-1188', 'relay-1188', 'public-key-1188'),('twin-1189', 3, 1189, 'account-id-1189', 'relay-1189', 'public-key-1189'),('twin-1190', 3, 1190, 'account-id-1190', 'relay-1190', 'public-key-1190'),('twin-1191', 3, 1191, 'account-id-1191', 'relay-1191', 'public-key-1191'),('twin-1192', 3, 1192, 'account-id-1192', 'relay-1192', 'public-key-1192'),('twin-1193', 3, 1193, 'account-id-1193', 'relay-1193', 'public-key-1193'),('twin-1194', 3, 1194, 'account-id-1194', 'relay-1194', 'public-key-1194'),('twin-1195', 3, 1195, 'account-id-1195', 'relay-1195', 'public-key-1195'),('twin-1196', 3, 1196, 'account-id-1196', 'relay-1196', 'public-key-1196'),('twin-1197', 3, 1197, 'account-id-1197', 'relay-1197', 'public-key-1197'),('twin-1198', 3, 1198, 'account-id-1198', 'relay-1198', 'public-key-1198'),('twin-1199', 3, 1199, 'account-id-1199', 'relay-1199', 'public-key-1199'),('twin-1200', 3, 1200, 'account-id-1200', 'relay-1200', 'public-key-1200'),('twin-1201', 3, 1201, 'account-id-1201', 'relay-1201', 'public-key-1201'),('twin-1202', 3, 1202, 'account-id-1202', 'relay-1202', 'public-key-1202'),('twin-1203', 3, 1203, 'account-id-1203', 'relay-1203', 'public-key-1203'),('twin-1204', 3, 1204, 'account-id-1204', 'relay-1204', 'public-key-1204'),('twin-1205', 3, 1205, 'account-id-1205', 'relay-1205', 'public-key-1205'),('twin-1206', 3, 1206, 'account-id-1206', 'relay-1206', 'public-key-1206'),('twin-1207', 3, 1207, 'account-id-1207', 'relay-1207', 'public-key-1207'),('twin-1208', 3, 1208, 'account-id-1208', 'relay-1208', 'public-key-1208'),('twin-1209', 3, 1209, 'account-id-1209', 'relay-1209', 'public-key-1209'),('twin-1210', 3, 1210, 'account-id-1210', 'relay-1210', 'public-key-1210'),('twin-1211', 3, 1211, 'account-id-1211', 'relay-1211', 'public-key-1211'),('twin-1212', 3, 1212, 'account-id-1212', 'relay-1212', 'public-key-1212'),('twin-1213', 3, 1213, 'account-id-1213', 'relay-1213', 'public-key-1213'),('twin-1214', 3, 1214, 'account-id-1214', 'relay-1214', 'public-key-1214'),('twin-1215', 3, 1215, 'account-id-1215', 'relay-1215', 'public-key-1215'),('twin-1216', 3, 1216, 'account-id-1216', 'relay-1216', 'public-key-1216'),('twin-1217', 3, 1217, 'account-id-1217', 'relay-1217', 'public-key-1217'),('twin-1218', 3, 1218, 'account-id-1218', 'relay-1218', 'public-key-1218'),('twin-1219', 3, 1219, 'account-id-1219', 'relay-1219', 'public-key-1219'),('twin-1220', 3, 1220, 'account-id-1220', 'relay-1220', 'public-key-1220'),('twin-1221', 3, 1221, 'account-id-1221', 'relay-1221', 'public-key-1221'),('twin-1222', 3, 1222, 'account-id-1222', 'relay-1222', 'public-key-1222'),('twin-1223', 3, 1223, 'account-id-1223', 'relay-1223', 'public-key-1223'),('twin-1224', 3, 1224, 'account-id-1224', 'relay-1224', 'public-key-1224'),('twin-1225', 3, 1225, 'account-id-1225', 'relay-1225', 'public-key-1225'),('twin-1226', 3, 1226, 'account-id-1226', 'relay-1226', 'public-key-1226'),('twin-1227', 3, 1227, 'account-id-1227', 'relay-1227', 'public-key-1227'),('twin-1228', 3, 1228, 'account-id-1228', 'relay-1228', 'public-key-1228'),('twin-1229', 3, 1229, 'account-id-1229', 'relay-1229', 'public-key-1229'),('twin-1230', 3, 1230, 'account-id-1230', 'relay-1230', 'public-key-1230'),('twin-1231', 3, 1231, 'account-id-1231', 'relay-1231', 'public-key-1231'),('twin-1232', 3, 1232, 'account-id-1232', 'relay-1232', 'public-key-1232'),('twin-1233', 3, 1233, 'account-id-1233', 'relay-1233', 'public-key-1233'),('twin-1234', 3, 1234, 'account-id-1234', 'relay-1234', 'public-key-1234'),('twin-1235', 3, 1235, 'account-id-1235', 'relay-1235', 'public-key-1235'),('twin-1236', 3, 1236, 'account-id-1236', 'relay-1236', 'public-key-1236'),('twin-1237', 3, 1237, 'account-id-1237', 'relay-1237', 'public-key-1237'),('twin-1238', 3, 1238, 'account-id-1238', 'relay-1238', 'public-key-1238'),('twin-1239', 3, 1239, 'account-id-1239', 'relay-1239', 'public-key-1239'),('twin-1240', 3, 1240, 'account-id-1240', 'relay-1240', 'public-key-1240'),('twin-1241', 3, 1241, 'account-id-1241', 'relay-1241', 'public-key-1241'),('twin-1242', 3, 1242, 'account-id-1242', 'relay-1242', 'public-key-1242'),('twin-1243', 3, 1243, 'account-id-1243', 'relay-1243', 'public-key-1243'),('twin-1244', 3, 1244, 'account-id-1244', 'relay-1244', 'public-key-1244'),('twin-1245', 3, 1245, 'account-id-1245', 'relay-1245', 'public-key-1245'),('twin-1246', 3, 1246, 'account-id-1246', 'relay-1246', 'public-key-1246'),('twin-1247', 3, 1247, 'account-id-1247', 'relay-1247', 'public-key-1247'),('twin-1248', 3, 1248, 'account-id-1248', 'relay-1248', 'public-key-1248'),('twin-1249', 3, 1249, 'account-id-1249', 'relay-1249', 'public-key-1249'),('twin-1250', 3, 1250, 'account-id-1250', 'relay-1250', 'public-key-1250'),('twin-1251', 3, 1251, 'account-id-1251', 'relay-1251', 'public-key-1251'),('twin-1252', 3, 1252, 'account-id-1252', 'relay-1252', 'public-key-1252'),('twin-1253', 3, 1253, 'account-id-1253', 'relay-1253', 'public-key-1253'),('twin-1254', 3, 1254, 'account-id-1254', 'relay-1254', 'public-key-1254'),('twin-1255', 3, 1255, 'account-id-1255', 'relay-1255', 'public-key-1255'),('twin-1256', 3, 1256, 'account-id-1256', 'relay-1256', 'public-key-1256'),('twin-1257', 3, 1257, 'account-id-1257', 'relay-1257', 'public-key-1257'),('twin-1258', 3, 1258, 'account-id-1258', 'relay-1258', 'public-key-1258'),('twin-1259', 3, 1259, 'account-id-1259', 'relay-1259', 'public-key-1259'),('twin-1260', 3, 1260, 'account-id-1260', 'relay-1260', 'public-key-1260'),('twin-1261', 3, 1261, 'account-id-1261', 'relay-1261', 'public-key-1261'),('twin-1262', 3, 1262, 'account-id-1262', 'relay-1262', 'public-key-1262'),('twin-1263', 3, 1263, 'account-id-1263', 'relay-1263', 'public-key-1263'),('twin-1264', 3, 1264, 'account-id-1264', 'relay-1264', 'public-key-1264'),('twin-1265', 3, 1265, 'account-id-1265', 'relay-1265', 'public-key-1265'),('twin-1266', 3, 1266, 'account-id-1266', 'relay-1266', 'public-key-1266'),('twin-1267', 3, 1267, 'account-id-1267', 'relay-1267', 'public-key-1267'),('twin-1268', 3, 1268, 'account-id-1268', 'relay-1268', 'public-key-1268'),('twin-1269', 3, 1269, 'account-id-1269', 'relay-1269', 'public-key-1269'),('twin-1270', 3, 1270, 'account-id-1270', 'relay-1270', 'public-key-1270'),('twin-1271', 3, 1271, 'account-id-1271', 'relay-1271', 'public-key-1271'),('twin-1272', 3, 1272, 'account-id-1272', 'relay-1272', 'public-key-1272'),('twin-1273', 3, 1273, 'account-id-1273', 'relay-1273', 'public-key-1273'),('twin-1274', 3, 1274, 'account-id-1274', 'relay-1274', 'public-key-1274'),('twin-1275', 3, 1275, 'account-id-1275', 'relay-1275', 'public-key-1275'),('twin-1276', 3, 1276, 'account-id-1276', 'relay-1276', 'public-key-1276'),('twin-1277', 3, 1277, 'account-id-1277', 'relay-1277', 'public-key-1277'),('twin-1278', 3, 1278, 'account-id-1278', 'relay-1278', 'public-key-1278'),('twin-1279', 3, 1279, 'account-id-1279', 'relay-1279', 'public-key-1279'),('twin-1280', 3, 1280, 'account-id-1280', 'relay-1280', 'public-key-1280'),('twin-1281', 3, 1281, 'account-id-1281', 'relay-1281', 'public-key-1281'),('twin-1282', 3, 1282, 'account-id-1282', 'relay-1282', 'public-key-1282'),('twin-1283', 3, 1283, 'account-id-1283', 'relay-1283', 'public-key-1283'),('twin-1284', 3, 1284, 'account-id-1284', 'relay-1284', 'public-key-1284'),('twin-1285', 3, 1285, 'account-id-1285', 'relay-1285', 'public-key-1285'),('twin-1286', 3, 1286, 'account-id-1286', 'relay-1286', 'public-key-1286'),('twin-1287', 3, 1287, 'account-id-1287', 'relay-1287', 'public-key-1287'),('twin-1288', 3, 1288, 'account-id-1288', 'relay-1288', 'public-key-1288'),('twin-1289', 3, 1289, 'account-id-1289', 'relay-1289', 'public-key-1289'),('twin-1290', 3, 1290, 'account-id-1290', 'relay-1290', 'public-key-1290'),('twin-1291', 3, 1291, 'account-id-1291', 'relay-1291', 'public-key-1291'),('twin-1292', 3, 1292, 'account-id-1292', 'relay-1292', 'public-key-1292'),('twin-1293', 3, 1293, 'account-id-1293', 'relay-1293', 'public-key-1293'),('twin-1294', 3, 1294, 'account-id-1294', 'relay-1294', 'public-key-1294'),('twin-1295', 3, 1295, 'account-id-1295', 'relay-1295', 'public-key-1295'),('twin-1296', 3, 1296, 'account-id-1296', 'relay-1296', 'public-key-1296'),('twin-1297', 3, 1297, 'account-id-1297', 'relay-1297', 'public-key-1297'),('twin-1298', 3, 1298, 'account-id-1298', 'relay-1298', 'public-key-1298'),('twin-1299', 3, 1299, 'account-id-1299', 'relay-1299', 'public-key-1299'),('twin-1300', 3, 1300, 'account-id-1300', 'relay-1300', 'public-key-1300');; +INSERT INTO farm (id, grid_version, farm_id, name, twin_id, pricing_policy_id, certification, stellar_address, dedicated_farm) VALUES ('farm-1', 3, 1, 'farm-name-1', 3, 1, 'Diy', NULL, false),('farm-2', 3, 2, 'farm-name-2', 4, 1, 'Diy', NULL, false),('farm-3', 3, 3, 'farm-name-3', 5, 1, 'Diy', NULL, true),('farm-4', 3, 4, 'farm-name-4', 6, 1, 'Diy', NULL, false),('farm-5', 3, 5, 'farm-name-5', 7, 1, 'Diy', NULL, false),('farm-6', 3, 6, 'farm-name-6', 8, 1, 'Diy', NULL, false),('farm-7', 3, 7, 'farm-name-7', 9, 1, 'Diy', NULL, false),('farm-8', 3, 8, 'farm-name-8', 10, 1, 'Diy', NULL, false),('farm-9', 3, 9, 'farm-name-9', 11, 1, 'Diy', NULL, false),('farm-10', 3, 10, 'farm-name-10', 12, 1, 'Diy', NULL, false),('farm-11', 3, 11, 'farm-name-11', 13, 1, 'Diy', NULL, false),('farm-12', 3, 12, 'farm-name-12', 14, 1, 'Diy', NULL, false),('farm-13', 3, 13, 'farm-name-13', 15, 1, 'Diy', NULL, false),('farm-14', 3, 14, 'farm-name-14', 16, 1, 'Diy', NULL, false),('farm-15', 3, 15, 'farm-name-15', 17, 1, 'Diy', NULL, false),('farm-16', 3, 16, 'farm-name-16', 18, 1, 'Diy', NULL, false),('farm-17', 3, 17, 'farm-name-17', 19, 1, 'Diy', NULL, false),('farm-18', 3, 18, 'farm-name-18', 20, 1, 'Diy', NULL, false),('farm-19', 3, 19, 'farm-name-19', 21, 1, 'Diy', NULL, false),('farm-20', 3, 20, 'farm-name-20', 22, 1, 'Diy', NULL, true),('farm-21', 3, 21, 'farm-name-21', 23, 1, 'Diy', NULL, false),('farm-22', 3, 22, 'farm-name-22', 24, 1, 'Diy', NULL, false),('farm-23', 3, 23, 'farm-name-23', 25, 1, 'Diy', NULL, true),('farm-24', 3, 24, 'farm-name-24', 26, 1, 'Diy', NULL, false),('farm-25', 3, 25, 'farm-name-25', 27, 1, 'Diy', NULL, false),('farm-26', 3, 26, 'farm-name-26', 28, 1, 'Diy', NULL, false),('farm-27', 3, 27, 'farm-name-27', 29, 1, 'Diy', NULL, false),('farm-28', 3, 28, 'farm-name-28', 30, 1, 'Diy', NULL, false),('farm-29', 3, 29, 'farm-name-29', 31, 1, 'Diy', NULL, false),('farm-30', 3, 30, 'farm-name-30', 32, 1, 'Diy', NULL, false),('farm-31', 3, 31, 'farm-name-31', 33, 1, 'Diy', NULL, false),('farm-32', 3, 32, 'farm-name-32', 34, 1, 'Diy', NULL, false),('farm-33', 3, 33, 'farm-name-33', 35, 1, 'Diy', NULL, false),('farm-34', 3, 34, 'farm-name-34', 36, 1, 'Diy', NULL, false),('farm-35', 3, 35, 'farm-name-35', 37, 1, 'Diy', NULL, false),('farm-36', 3, 36, 'farm-name-36', 38, 1, 'Diy', NULL, false),('farm-37', 3, 37, 'farm-name-37', 39, 1, 'Diy', NULL, true),('farm-38', 3, 38, 'farm-name-38', 40, 1, 'Diy', NULL, false),('farm-39', 3, 39, 'farm-name-39', 41, 1, 'Diy', NULL, false),('farm-40', 3, 40, 'farm-name-40', 42, 1, 'Diy', NULL, false),('farm-41', 3, 41, 'farm-name-41', 43, 1, 'Diy', NULL, false),('farm-42', 3, 42, 'farm-name-42', 44, 1, 'Diy', NULL, false),('farm-43', 3, 43, 'farm-name-43', 45, 1, 'Diy', NULL, true),('farm-44', 3, 44, 'farm-name-44', 46, 1, 'Diy', NULL, false),('farm-45', 3, 45, 'farm-name-45', 47, 1, 'Diy', NULL, false),('farm-46', 3, 46, 'farm-name-46', 48, 1, 'Diy', NULL, false),('farm-47', 3, 47, 'farm-name-47', 49, 1, 'Diy', NULL, false),('farm-48', 3, 48, 'farm-name-48', 50, 1, 'Diy', NULL, false),('farm-49', 3, 49, 'farm-name-49', 51, 1, 'Diy', NULL, true),('farm-50', 3, 50, 'farm-name-50', 52, 1, 'Diy', NULL, false),('farm-51', 3, 51, 'farm-name-51', 53, 1, 'Diy', NULL, false),('farm-52', 3, 52, 'farm-name-52', 54, 1, 'Diy', NULL, false),('farm-53', 3, 53, 'farm-name-53', 55, 1, 'Diy', NULL, false),('farm-54', 3, 54, 'farm-name-54', 56, 1, 'Diy', NULL, false),('farm-55', 3, 55, 'farm-name-55', 57, 1, 'Diy', NULL, false),('farm-56', 3, 56, 'farm-name-56', 58, 1, 'Diy', NULL, false),('farm-57', 3, 57, 'farm-name-57', 59, 1, 'Diy', NULL, false),('farm-58', 3, 58, 'farm-name-58', 60, 1, 'Diy', NULL, false),('farm-59', 3, 59, 'farm-name-59', 61, 1, 'Diy', NULL, false),('farm-60', 3, 60, 'farm-name-60', 62, 1, 'Diy', NULL, false),('farm-61', 3, 61, 'farm-name-61', 63, 1, 'Diy', NULL, true),('farm-62', 3, 62, 'farm-name-62', 64, 1, 'Diy', NULL, false),('farm-63', 3, 63, 'farm-name-63', 65, 1, 'Diy', NULL, false),('farm-64', 3, 64, 'farm-name-64', 66, 1, 'Diy', NULL, false),('farm-65', 3, 65, 'farm-name-65', 67, 1, 'Diy', NULL, false),('farm-66', 3, 66, 'farm-name-66', 68, 1, 'Diy', NULL, false),('farm-67', 3, 67, 'farm-name-67', 69, 1, 'Diy', NULL, true),('farm-68', 3, 68, 'farm-name-68', 70, 1, 'Diy', NULL, false),('farm-69', 3, 69, 'farm-name-69', 71, 1, 'Diy', NULL, false),('farm-70', 3, 70, 'farm-name-70', 72, 1, 'Diy', NULL, false),('farm-71', 3, 71, 'farm-name-71', 73, 1, 'Diy', NULL, false),('farm-72', 3, 72, 'farm-name-72', 74, 1, 'Diy', NULL, false),('farm-73', 3, 73, 'farm-name-73', 75, 1, 'Diy', NULL, false),('farm-74', 3, 74, 'farm-name-74', 76, 1, 'Diy', NULL, false),('farm-75', 3, 75, 'farm-name-75', 77, 1, 'Diy', NULL, true),('farm-76', 3, 76, 'farm-name-76', 78, 1, 'Diy', NULL, false),('farm-77', 3, 77, 'farm-name-77', 79, 1, 'Diy', NULL, false),('farm-78', 3, 78, 'farm-name-78', 80, 1, 'Diy', NULL, true),('farm-79', 3, 79, 'farm-name-79', 81, 1, 'Diy', NULL, false),('farm-80', 3, 80, 'farm-name-80', 82, 1, 'Diy', NULL, false),('farm-81', 3, 81, 'farm-name-81', 83, 1, 'Diy', NULL, true),('farm-82', 3, 82, 'farm-name-82', 84, 1, 'Diy', NULL, false),('farm-83', 3, 83, 'farm-name-83', 85, 1, 'Diy', NULL, false),('farm-84', 3, 84, 'farm-name-84', 86, 1, 'Diy', NULL, true),('farm-85', 3, 85, 'farm-name-85', 87, 1, 'Diy', NULL, false),('farm-86', 3, 86, 'farm-name-86', 88, 1, 'Diy', NULL, false),('farm-87', 3, 87, 'farm-name-87', 89, 1, 'Diy', NULL, false),('farm-88', 3, 88, 'farm-name-88', 90, 1, 'Diy', NULL, false),('farm-89', 3, 89, 'farm-name-89', 91, 1, 'Diy', NULL, false),('farm-90', 3, 90, 'farm-name-90', 92, 1, 'Diy', NULL, false),('farm-91', 3, 91, 'farm-name-91', 93, 1, 'Diy', NULL, false),('farm-92', 3, 92, 'farm-name-92', 94, 1, 'Diy', NULL, false),('farm-93', 3, 93, 'farm-name-93', 95, 1, 'Diy', NULL, false),('farm-94', 3, 94, 'farm-name-94', 96, 1, 'Diy', NULL, false),('farm-95', 3, 95, 'farm-name-95', 97, 1, 'Diy', NULL, false),('farm-96', 3, 96, 'farm-name-96', 98, 1, 'Diy', NULL, false),('farm-97', 3, 97, 'farm-name-97', 99, 1, 'Diy', NULL, false),('farm-98', 3, 98, 'farm-name-98', 100, 1, 'Diy', NULL, false),('farm-99', 3, 99, 'farm-name-99', 101, 1, 'Diy', NULL, true),('farm-100', 3, 100, 'farm-name-100', 102, 1, 'Diy', NULL, false);; +INSERT INTO location (id, longitude, latitude) VALUES ('location-2', '1', '1'),('location-3', '2', '2'),('location-4', '3', '3'),('location-5', '4', '4'),('location-6', '5', '5'),('location-7', '6', '6'),('location-8', '7', '7'),('location-9', '8', '8'),('location-10', '9', '9'),('location-11', '10', '10'),('location-12', '11', '11'),('location-13', '12', '12'),('location-14', '13', '13'),('location-15', '14', '14'),('location-16', '15', '15'),('location-17', '16', '16'),('location-18', '17', '17'),('location-19', '18', '18'),('location-20', '19', '19'),('location-21', '20', '20'),('location-22', '21', '21'),('location-23', '22', '22'),('location-24', '23', '23'),('location-25', '24', '24'),('location-26', '25', '25'),('location-27', '26', '26'),('location-28', '27', '27'),('location-29', '28', '28'),('location-30', '29', '29'),('location-31', '30', '30'),('location-32', '31', '31'),('location-33', '32', '32'),('location-34', '33', '33'),('location-35', '34', '34'),('location-36', '35', '35'),('location-37', '36', '36'),('location-38', '37', '37'),('location-39', '38', '38'),('location-40', '39', '39'),('location-41', '40', '40'),('location-42', '41', '41'),('location-43', '42', '42'),('location-44', '43', '43'),('location-45', '44', '44'),('location-46', '45', '45'),('location-47', '46', '46'),('location-48', '47', '47'),('location-49', '48', '48'),('location-50', '49', '49'),('location-51', '50', '50'),('location-52', '51', '51'),('location-53', '52', '52'),('location-54', '53', '53'),('location-55', '54', '54'),('location-56', '55', '55'),('location-57', '56', '56'),('location-58', '57', '57'),('location-59', '58', '58'),('location-60', '59', '59'),('location-61', '60', '60'),('location-62', '61', '61'),('location-63', '62', '62'),('location-64', '63', '63'),('location-65', '64', '64'),('location-66', '65', '65'),('location-67', '66', '66'),('location-68', '67', '67'),('location-69', '68', '68'),('location-70', '69', '69'),('location-71', '70', '70'),('location-72', '71', '71'),('location-73', '72', '72'),('location-74', '73', '73'),('location-75', '74', '74'),('location-76', '75', '75'),('location-77', '76', '76'),('location-78', '77', '77'),('location-79', '78', '78'),('location-80', '79', '79'),('location-81', '80', '80'),('location-82', '81', '81'),('location-83', '82', '82'),('location-84', '83', '83'),('location-85', '84', '84'),('location-86', '85', '85'),('location-87', '86', '86'),('location-88', '87', '87'),('location-89', '88', '88'),('location-90', '89', '89'),('location-91', '90', '90'),('location-92', '91', '91'),('location-93', '92', '92'),('location-94', '93', '93'),('location-95', '94', '94'),('location-96', '95', '95'),('location-97', '96', '96'),('location-98', '97', '97'),('location-99', '98', '98'),('location-100', '99', '99'),('location-101', '100', '100'),('location-102', '101', '101'),('location-103', '102', '102'),('location-104', '103', '103'),('location-105', '104', '104'),('location-106', '105', '105'),('location-107', '106', '106'),('location-108', '107', '107'),('location-109', '108', '108'),('location-110', '109', '109'),('location-111', '110', '110'),('location-112', '111', '111'),('location-113', '112', '112'),('location-114', '113', '113'),('location-115', '114', '114'),('location-116', '115', '115'),('location-117', '116', '116'),('location-118', '117', '117'),('location-119', '118', '118'),('location-120', '119', '119'),('location-121', '120', '120'),('location-122', '121', '121'),('location-123', '122', '122'),('location-124', '123', '123'),('location-125', '124', '124'),('location-126', '125', '125'),('location-127', '126', '126'),('location-128', '127', '127'),('location-129', '128', '128'),('location-130', '129', '129'),('location-131', '130', '130'),('location-132', '131', '131'),('location-133', '132', '132'),('location-134', '133', '133'),('location-135', '134', '134'),('location-136', '135', '135'),('location-137', '136', '136'),('location-138', '137', '137'),('location-139', '138', '138'),('location-140', '139', '139'),('location-141', '140', '140'),('location-142', '141', '141'),('location-143', '142', '142'),('location-144', '143', '143'),('location-145', '144', '144'),('location-146', '145', '145'),('location-147', '146', '146'),('location-148', '147', '147'),('location-149', '148', '148'),('location-150', '149', '149'),('location-151', '150', '150'),('location-152', '151', '151'),('location-153', '152', '152'),('location-154', '153', '153'),('location-155', '154', '154'),('location-156', '155', '155'),('location-157', '156', '156'),('location-158', '157', '157'),('location-159', '158', '158'),('location-160', '159', '159'),('location-161', '160', '160'),('location-162', '161', '161'),('location-163', '162', '162'),('location-164', '163', '163'),('location-165', '164', '164'),('location-166', '165', '165'),('location-167', '166', '166'),('location-168', '167', '167'),('location-169', '168', '168'),('location-170', '169', '169'),('location-171', '170', '170'),('location-172', '171', '171'),('location-173', '172', '172'),('location-174', '173', '173'),('location-175', '174', '174'),('location-176', '175', '175'),('location-177', '176', '176'),('location-178', '177', '177'),('location-179', '178', '178'),('location-180', '179', '179'),('location-181', '180', '180'),('location-182', '181', '181'),('location-183', '182', '182'),('location-184', '183', '183'),('location-185', '184', '184'),('location-186', '185', '185'),('location-187', '186', '186'),('location-188', '187', '187'),('location-189', '188', '188'),('location-190', '189', '189'),('location-191', '190', '190'),('location-192', '191', '191'),('location-193', '192', '192'),('location-194', '193', '193'),('location-195', '194', '194'),('location-196', '195', '195'),('location-197', '196', '196'),('location-198', '197', '197'),('location-199', '198', '198'),('location-200', '199', '199'),('location-201', '200', '200'),('location-202', '201', '201'),('location-203', '202', '202'),('location-204', '203', '203'),('location-205', '204', '204'),('location-206', '205', '205'),('location-207', '206', '206'),('location-208', '207', '207'),('location-209', '208', '208'),('location-210', '209', '209'),('location-211', '210', '210'),('location-212', '211', '211'),('location-213', '212', '212'),('location-214', '213', '213'),('location-215', '214', '214'),('location-216', '215', '215'),('location-217', '216', '216'),('location-218', '217', '217'),('location-219', '218', '218'),('location-220', '219', '219'),('location-221', '220', '220'),('location-222', '221', '221'),('location-223', '222', '222'),('location-224', '223', '223'),('location-225', '224', '224'),('location-226', '225', '225'),('location-227', '226', '226'),('location-228', '227', '227'),('location-229', '228', '228'),('location-230', '229', '229'),('location-231', '230', '230'),('location-232', '231', '231'),('location-233', '232', '232'),('location-234', '233', '233'),('location-235', '234', '234'),('location-236', '235', '235'),('location-237', '236', '236'),('location-238', '237', '237'),('location-239', '238', '238'),('location-240', '239', '239'),('location-241', '240', '240'),('location-242', '241', '241'),('location-243', '242', '242'),('location-244', '243', '243'),('location-245', '244', '244'),('location-246', '245', '245'),('location-247', '246', '246'),('location-248', '247', '247'),('location-249', '248', '248'),('location-250', '249', '249'),('location-251', '250', '250'),('location-252', '251', '251'),('location-253', '252', '252'),('location-254', '253', '253'),('location-255', '254', '254'),('location-256', '255', '255'),('location-257', '256', '256'),('location-258', '257', '257'),('location-259', '258', '258'),('location-260', '259', '259'),('location-261', '260', '260'),('location-262', '261', '261'),('location-263', '262', '262'),('location-264', '263', '263'),('location-265', '264', '264'),('location-266', '265', '265'),('location-267', '266', '266'),('location-268', '267', '267'),('location-269', '268', '268'),('location-270', '269', '269'),('location-271', '270', '270'),('location-272', '271', '271'),('location-273', '272', '272'),('location-274', '273', '273'),('location-275', '274', '274'),('location-276', '275', '275'),('location-277', '276', '276'),('location-278', '277', '277'),('location-279', '278', '278'),('location-280', '279', '279'),('location-281', '280', '280'),('location-282', '281', '281'),('location-283', '282', '282'),('location-284', '283', '283'),('location-285', '284', '284'),('location-286', '285', '285'),('location-287', '286', '286'),('location-288', '287', '287'),('location-289', '288', '288'),('location-290', '289', '289'),('location-291', '290', '290'),('location-292', '291', '291'),('location-293', '292', '292'),('location-294', '293', '293'),('location-295', '294', '294'),('location-296', '295', '295'),('location-297', '296', '296'),('location-298', '297', '297'),('location-299', '298', '298'),('location-300', '299', '299'),('location-301', '300', '300'),('location-302', '301', '301'),('location-303', '302', '302'),('location-304', '303', '303'),('location-305', '304', '304'),('location-306', '305', '305'),('location-307', '306', '306'),('location-308', '307', '307'),('location-309', '308', '308'),('location-310', '309', '309'),('location-311', '310', '310'),('location-312', '311', '311'),('location-313', '312', '312'),('location-314', '313', '313'),('location-315', '314', '314'),('location-316', '315', '315'),('location-317', '316', '316'),('location-318', '317', '317'),('location-319', '318', '318'),('location-320', '319', '319'),('location-321', '320', '320'),('location-322', '321', '321'),('location-323', '322', '322'),('location-324', '323', '323'),('location-325', '324', '324'),('location-326', '325', '325'),('location-327', '326', '326'),('location-328', '327', '327'),('location-329', '328', '328'),('location-330', '329', '329'),('location-331', '330', '330'),('location-332', '331', '331'),('location-333', '332', '332'),('location-334', '333', '333'),('location-335', '334', '334'),('location-336', '335', '335'),('location-337', '336', '336'),('location-338', '337', '337'),('location-339', '338', '338'),('location-340', '339', '339'),('location-341', '340', '340'),('location-342', '341', '341'),('location-343', '342', '342'),('location-344', '343', '343'),('location-345', '344', '344'),('location-346', '345', '345'),('location-347', '346', '346'),('location-348', '347', '347'),('location-349', '348', '348'),('location-350', '349', '349'),('location-351', '350', '350'),('location-352', '351', '351'),('location-353', '352', '352'),('location-354', '353', '353'),('location-355', '354', '354'),('location-356', '355', '355'),('location-357', '356', '356'),('location-358', '357', '357'),('location-359', '358', '358'),('location-360', '359', '359'),('location-361', '360', '360'),('location-362', '361', '361'),('location-363', '362', '362'),('location-364', '363', '363'),('location-365', '364', '364'),('location-366', '365', '365'),('location-367', '366', '366'),('location-368', '367', '367'),('location-369', '368', '368'),('location-370', '369', '369'),('location-371', '370', '370'),('location-372', '371', '371'),('location-373', '372', '372'),('location-374', '373', '373'),('location-375', '374', '374'),('location-376', '375', '375'),('location-377', '376', '376'),('location-378', '377', '377'),('location-379', '378', '378'),('location-380', '379', '379'),('location-381', '380', '380'),('location-382', '381', '381'),('location-383', '382', '382'),('location-384', '383', '383'),('location-385', '384', '384'),('location-386', '385', '385'),('location-387', '386', '386'),('location-388', '387', '387'),('location-389', '388', '388'),('location-390', '389', '389'),('location-391', '390', '390'),('location-392', '391', '391'),('location-393', '392', '392'),('location-394', '393', '393'),('location-395', '394', '394'),('location-396', '395', '395'),('location-397', '396', '396'),('location-398', '397', '397'),('location-399', '398', '398'),('location-400', '399', '399'),('location-401', '400', '400'),('location-402', '401', '401'),('location-403', '402', '402'),('location-404', '403', '403'),('location-405', '404', '404'),('location-406', '405', '405'),('location-407', '406', '406'),('location-408', '407', '407'),('location-409', '408', '408'),('location-410', '409', '409'),('location-411', '410', '410'),('location-412', '411', '411'),('location-413', '412', '412'),('location-414', '413', '413'),('location-415', '414', '414'),('location-416', '415', '415'),('location-417', '416', '416'),('location-418', '417', '417'),('location-419', '418', '418'),('location-420', '419', '419'),('location-421', '420', '420'),('location-422', '421', '421'),('location-423', '422', '422'),('location-424', '423', '423'),('location-425', '424', '424'),('location-426', '425', '425'),('location-427', '426', '426'),('location-428', '427', '427'),('location-429', '428', '428'),('location-430', '429', '429'),('location-431', '430', '430'),('location-432', '431', '431'),('location-433', '432', '432'),('location-434', '433', '433'),('location-435', '434', '434'),('location-436', '435', '435'),('location-437', '436', '436'),('location-438', '437', '437'),('location-439', '438', '438'),('location-440', '439', '439'),('location-441', '440', '440'),('location-442', '441', '441'),('location-443', '442', '442'),('location-444', '443', '443'),('location-445', '444', '444'),('location-446', '445', '445'),('location-447', '446', '446'),('location-448', '447', '447'),('location-449', '448', '448'),('location-450', '449', '449'),('location-451', '450', '450'),('location-452', '451', '451'),('location-453', '452', '452'),('location-454', '453', '453'),('location-455', '454', '454'),('location-456', '455', '455'),('location-457', '456', '456'),('location-458', '457', '457'),('location-459', '458', '458'),('location-460', '459', '459'),('location-461', '460', '460'),('location-462', '461', '461'),('location-463', '462', '462'),('location-464', '463', '463'),('location-465', '464', '464'),('location-466', '465', '465'),('location-467', '466', '466'),('location-468', '467', '467'),('location-469', '468', '468'),('location-470', '469', '469'),('location-471', '470', '470'),('location-472', '471', '471'),('location-473', '472', '472'),('location-474', '473', '473'),('location-475', '474', '474'),('location-476', '475', '475'),('location-477', '476', '476'),('location-478', '477', '477'),('location-479', '478', '478'),('location-480', '479', '479'),('location-481', '480', '480'),('location-482', '481', '481'),('location-483', '482', '482'),('location-484', '483', '483'),('location-485', '484', '484'),('location-486', '485', '485'),('location-487', '486', '486'),('location-488', '487', '487'),('location-489', '488', '488'),('location-490', '489', '489'),('location-491', '490', '490'),('location-492', '491', '491'),('location-493', '492', '492'),('location-494', '493', '493'),('location-495', '494', '494'),('location-496', '495', '495'),('location-497', '496', '496'),('location-498', '497', '497'),('location-499', '498', '498'),('location-500', '499', '499'),('location-501', '500', '500'),('location-502', '501', '501'),('location-503', '502', '502'),('location-504', '503', '503'),('location-505', '504', '504'),('location-506', '505', '505'),('location-507', '506', '506'),('location-508', '507', '507'),('location-509', '508', '508'),('location-510', '509', '509'),('location-511', '510', '510'),('location-512', '511', '511'),('location-513', '512', '512'),('location-514', '513', '513'),('location-515', '514', '514'),('location-516', '515', '515'),('location-517', '516', '516'),('location-518', '517', '517'),('location-519', '518', '518'),('location-520', '519', '519'),('location-521', '520', '520'),('location-522', '521', '521'),('location-523', '522', '522'),('location-524', '523', '523'),('location-525', '524', '524'),('location-526', '525', '525'),('location-527', '526', '526'),('location-528', '527', '527'),('location-529', '528', '528'),('location-530', '529', '529'),('location-531', '530', '530'),('location-532', '531', '531'),('location-533', '532', '532'),('location-534', '533', '533'),('location-535', '534', '534'),('location-536', '535', '535'),('location-537', '536', '536'),('location-538', '537', '537'),('location-539', '538', '538'),('location-540', '539', '539'),('location-541', '540', '540'),('location-542', '541', '541'),('location-543', '542', '542'),('location-544', '543', '543'),('location-545', '544', '544'),('location-546', '545', '545'),('location-547', '546', '546'),('location-548', '547', '547'),('location-549', '548', '548'),('location-550', '549', '549'),('location-551', '550', '550'),('location-552', '551', '551'),('location-553', '552', '552'),('location-554', '553', '553'),('location-555', '554', '554'),('location-556', '555', '555'),('location-557', '556', '556'),('location-558', '557', '557'),('location-559', '558', '558'),('location-560', '559', '559'),('location-561', '560', '560'),('location-562', '561', '561'),('location-563', '562', '562'),('location-564', '563', '563'),('location-565', '564', '564'),('location-566', '565', '565'),('location-567', '566', '566'),('location-568', '567', '567'),('location-569', '568', '568'),('location-570', '569', '569'),('location-571', '570', '570'),('location-572', '571', '571'),('location-573', '572', '572'),('location-574', '573', '573'),('location-575', '574', '574'),('location-576', '575', '575'),('location-577', '576', '576'),('location-578', '577', '577'),('location-579', '578', '578'),('location-580', '579', '579'),('location-581', '580', '580'),('location-582', '581', '581'),('location-583', '582', '582'),('location-584', '583', '583'),('location-585', '584', '584'),('location-586', '585', '585'),('location-587', '586', '586'),('location-588', '587', '587'),('location-589', '588', '588'),('location-590', '589', '589'),('location-591', '590', '590'),('location-592', '591', '591'),('location-593', '592', '592'),('location-594', '593', '593'),('location-595', '594', '594'),('location-596', '595', '595'),('location-597', '596', '596'),('location-598', '597', '597'),('location-599', '598', '598'),('location-600', '599', '599'),('location-601', '600', '600');; +INSERT INTO node (id, grid_version, node_id, farm_id, twin_id, country, city, uptime, created, farming_policy_id, certification, secure, virtualized, serial_number, created_at, updated_at, location_id, power, extra_fee, dedicated) VALUES ('node-1', 3, 1, 64, 103, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902941, 'location-2', NULL, 0, false),('node-2', 3, 2, 15, 104, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903684, 'location-3', NULL, 0, false),('node-3', 3, 3, 3, 105, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711241008, 'location-4', NULL, 0, false),('node-4', 3, 4, 33, 106, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903044, 'location-5', NULL, 0, false),('node-5', 3, 5, 74, 107, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1709157980, 'location-6', NULL, 0, false),('node-6', 3, 6, 72, 108, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1712106351, 'location-7', '{"state":"Down","target":"Up"}', 0, false),('node-7', 3, 7, 55, 109, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903040, 'location-8', '{"state":"Down","target":"Up"}', 0, false),('node-8', 3, 8, 46, 110, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1715007267, 'location-9', NULL, 0, false),('node-9', 3, 9, 67, 111, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705891352, 'location-10', NULL, 0, false),('node-10', 3, 10, 77, 112, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722327910, 'location-11', NULL, 0, false),('node-11', 3, 11, 22, 113, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719559188, 'location-12', NULL, 0, false),('node-12', 3, 12, 53, 114, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1713143229, 'location-13', NULL, 0, false),('node-13', 3, 13, 99, 115, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904493, 'location-14', '{"state":"Up","target":"Down"}', 0, false),('node-14', 3, 14, 60, 116, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727723591, 'location-15', NULL, 0, false),('node-15', 3, 15, 70, 117, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729982814, 'location-16', NULL, 0, false),('node-16', 3, 16, 63, 118, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904279, 'location-17', '{"state":"Up","target":"Down"}', 0, false),('node-17', 3, 17, 12, 119, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722557833, 'location-18', NULL, 0, false),('node-18', 3, 18, 35, 120, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703535961, 'location-19', NULL, 0, false),('node-19', 3, 19, 1, 121, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1725577117, 'location-20', '{"state":"Up","target":"Down"}', 0, false),('node-20', 3, 20, 6, 122, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902371, 'location-21', NULL, 0, false),('node-21', 3, 21, 87, 123, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1702169333, 'location-22', '{"state":"Up","target":"Up"}', 0, false),('node-22', 3, 22, 67, 124, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708627616, 'location-23', '{"state":"Down","target":"Down"}', 0, false),('node-23', 3, 23, 12, 125, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902365, 'location-24', '{"state":"Down","target":"Up"}', 0, false),('node-24', 3, 24, 10, 126, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722581844, 'location-25', NULL, 0, false),('node-25', 3, 25, 86, 127, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1707767491, 'location-26', NULL, 0, false),('node-26', 3, 26, 27, 128, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903676, 'location-27', NULL, 0, false),('node-27', 3, 27, 83, 129, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727336804, 'location-28', '{"state":"Up","target":"Up"}', 0, false),('node-28', 3, 28, 99, 130, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902873, 'location-29', '{"state":"Up","target":"Down"}', 0, false),('node-29', 3, 29, 20, 131, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729426221, 'location-30', NULL, 0, false),('node-30', 3, 30, 37, 132, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1701414620, 'location-31', NULL, 0, false),('node-31', 3, 31, 86, 133, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1713524724, 'location-32', NULL, 0, false),('node-32', 3, 32, 30, 134, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903537, 'location-33', NULL, 0, false),('node-33', 3, 33, 31, 135, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904415, 'location-34', NULL, 0, false),('node-34', 3, 34, 89, 136, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903603, 'location-35', NULL, 0, false),('node-35', 3, 35, 32, 137, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721672749, 'location-36', '{"state":"Up","target":"Up"}', 0, false),('node-36', 3, 36, 25, 138, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1724819376, 'location-37', NULL, 0, false),('node-37', 3, 37, 82, 139, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1728794656, 'location-38', NULL, 0, false),('node-38', 3, 38, 63, 140, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1724975655, 'location-39', NULL, 0, false),('node-39', 3, 39, 23, 141, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1713604498, 'location-40', NULL, 0, false),('node-40', 3, 40, 8, 142, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902313, 'location-41', NULL, 0, false),('node-41', 3, 41, 33, 143, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1720957279, 'location-42', '{"state":"Up","target":"Down"}', 0, false),('node-42', 3, 42, 78, 144, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710449666, 'location-43', '{"state":"Up","target":"Down"}', 0, false),('node-43', 3, 43, 7, 145, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1724220704, 'location-44', '{"state":"Up","target":"Down"}', 0, false),('node-44', 3, 44, 14, 146, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729212501, 'location-45', NULL, 0, false),('node-45', 3, 45, 94, 147, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703323333, 'location-46', '{"state":"Up","target":"Down"}', 0, false),('node-46', 3, 46, 13, 148, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902423, 'location-47', NULL, 0, false),('node-47', 3, 47, 67, 149, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729307454, 'location-48', NULL, 0, false),('node-48', 3, 48, 14, 150, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711927788, 'location-49', NULL, 0, false),('node-49', 3, 49, 21, 151, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721621548, 'location-50', NULL, 0, false),('node-50', 3, 50, 49, 152, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904476, 'location-51', '{"state":"Down","target":"Up"}', 0, false),('node-51', 3, 51, 78, 153, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1718779575, 'location-52', NULL, 0, false),('node-52', 3, 52, 56, 154, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1716928068, 'location-53', '{"state":"Up","target":"Down"}', 0, false),('node-53', 3, 53, 84, 155, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904095, 'location-54', '{"state":"Down","target":"Up"}', 0, false),('node-54', 3, 54, 28, 156, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726455833, 'location-55', NULL, 0, false),('node-55', 3, 55, 83, 157, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904486, 'location-56', NULL, 0, false),('node-56', 3, 56, 16, 158, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903678, 'location-57', '{"state":"Up","target":"Up"}', 0, false),('node-57', 3, 57, 91, 159, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727181876, 'location-58', NULL, 0, false),('node-58', 3, 58, 18, 160, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726287313, 'location-59', NULL, 0, false),('node-59', 3, 59, 39, 161, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903834, 'location-60', NULL, 0, false),('node-60', 3, 60, 80, 162, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714530819, 'location-61', '{"state":"Up","target":"Up"}', 0, false),('node-61', 3, 61, 78, 163, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1713636666, 'location-62', NULL, 0, false),('node-62', 3, 62, 31, 164, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729097959, 'location-63', NULL, 0, false),('node-63', 3, 63, 3, 165, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904084, 'location-64', '{"state":"Up","target":"Down"}', 0, false),('node-64', 3, 64, 61, 166, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903707, 'location-65', NULL, 0, false),('node-65', 3, 65, 75, 167, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1724833667, 'location-66', NULL, 0, false),('node-66', 3, 66, 53, 168, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1715721450, 'location-67', NULL, 0, false),('node-67', 3, 67, 46, 169, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708477944, 'location-68', NULL, 0, false),('node-68', 3, 68, 80, 170, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1728810297, 'location-69', '{"state":"Up","target":"Down"}', 0, false),('node-69', 3, 69, 15, 171, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904371, 'location-70', NULL, 0, false),('node-70', 3, 70, 28, 172, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903407, 'location-71', NULL, 0, false),('node-71', 3, 71, 56, 173, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902640, 'location-72', NULL, 0, false),('node-72', 3, 72, 47, 174, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903424, 'location-73', NULL, 0, false),('node-73', 3, 73, 61, 175, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703038264, 'location-74', NULL, 0, false),('node-74', 3, 74, 49, 176, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904009, 'location-75', NULL, 0, false),('node-75', 3, 75, 42, 177, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1720306010, 'location-76', NULL, 0, false),('node-76', 3, 76, 70, 178, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1704063285, 'location-77', '{"state":"Down","target":"Up"}', 0, false),('node-77', 3, 77, 73, 179, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1700111352, 'location-78', NULL, 0, false),('node-78', 3, 78, 98, 180, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705908522, 'location-79', NULL, 0, false),('node-79', 3, 79, 16, 181, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902816, 'location-80', NULL, 0, false),('node-80', 3, 80, 80, 182, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714494000, 'location-81', NULL, 0, false),('node-81', 3, 81, 1, 183, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903069, 'location-82', '{"state":"Down","target":"Up"}', 0, false),('node-82', 3, 82, 62, 184, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903177, 'location-83', NULL, 0, false),('node-83', 3, 83, 97, 185, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902597, 'location-84', NULL, 0, false),('node-84', 3, 84, 62, 186, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1701195831, 'location-85', '{"state":"Down","target":"Up"}', 0, false),('node-85', 3, 85, 86, 187, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903988, 'location-86', NULL, 0, false),('node-86', 3, 86, 81, 188, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903027, 'location-87', NULL, 0, false),('node-87', 3, 87, 50, 189, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706769822, 'location-88', NULL, 0, false),('node-88', 3, 88, 94, 190, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727930458, 'location-89', NULL, 0, false),('node-89', 3, 89, 91, 191, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1707948679, 'location-90', NULL, 0, false),('node-90', 3, 90, 39, 192, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719661768, 'location-91', '{"state":"Up","target":"Down"}', 0, false),('node-91', 3, 91, 2, 193, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727575484, 'location-92', NULL, 0, false),('node-92', 3, 92, 34, 194, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708929998, 'location-93', NULL, 0, false),('node-93', 3, 93, 58, 195, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723220551, 'location-94', '{"state":"Up","target":"Down"}', 0, false),('node-94', 3, 94, 95, 196, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1716568227, 'location-95', '{"state":"Down","target":"Up"}', 0, false),('node-95', 3, 95, 49, 197, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903940, 'location-96', NULL, 0, false),('node-96', 3, 96, 91, 198, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710341505, 'location-97', '{"state":"Down","target":"Up"}', 0, false),('node-97', 3, 97, 39, 199, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710596978, 'location-98', '{"state":"Up","target":"Up"}', 0, false),('node-98', 3, 98, 71, 200, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904523, 'location-99', NULL, 0, false),('node-99', 3, 99, 99, 201, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706570188, 'location-100', '{"state":"Down","target":"Down"}', 0, false),('node-100', 3, 100, 79, 202, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903387, 'location-101', NULL, 0, false),('node-101', 3, 101, 82, 203, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714845306, 'location-102', NULL, 0, false),('node-102', 3, 102, 85, 204, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903894, 'location-103', NULL, 0, false),('node-103', 3, 103, 29, 205, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904142, 'location-104', NULL, 0, false),('node-104', 3, 104, 72, 206, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1701625988, 'location-105', NULL, 0, false),('node-105', 3, 105, 17, 207, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1728871554, 'location-106', NULL, 0, false),('node-106', 3, 106, 36, 208, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904600, 'location-107', NULL, 0, false),('node-107', 3, 107, 7, 209, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904124, 'location-108', NULL, 0, false),('node-108', 3, 108, 95, 210, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1701913605, 'location-109', NULL, 0, false),('node-109', 3, 109, 10, 211, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730430208, 'location-110', '{"state":"Up","target":"Up"}', 0, false),('node-110', 3, 110, 83, 212, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904481, 'location-111', NULL, 0, false),('node-111', 3, 111, 29, 213, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1701656803, 'location-112', NULL, 0, false),('node-112', 3, 112, 86, 214, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1720621124, 'location-113', '{"state":"Down","target":"Down"}', 0, false),('node-113', 3, 113, 50, 215, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903774, 'location-114', '{"state":"Up","target":"Down"}', 0, false),('node-114', 3, 114, 38, 216, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1712655566, 'location-115', NULL, 0, false),('node-115', 3, 115, 20, 217, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903425, 'location-116', NULL, 0, false),('node-116', 3, 116, 55, 218, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708969234, 'location-117', NULL, 0, false),('node-117', 3, 117, 78, 219, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708920713, 'location-118', NULL, 0, false),('node-118', 3, 118, 52, 220, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903826, 'location-119', '{"state":"Up","target":"Up"}', 0, false),('node-119', 3, 119, 14, 221, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706180055, 'location-120', NULL, 0, false),('node-120', 3, 120, 78, 222, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719112054, 'location-121', NULL, 0, false),('node-121', 3, 121, 51, 223, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904624, 'location-122', '{"state":"Down","target":"Down"}', 0, false),('node-122', 3, 122, 88, 224, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904530, 'location-123', NULL, 0, false),('node-123', 3, 123, 14, 225, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903686, 'location-124', NULL, 0, false),('node-124', 3, 124, 19, 226, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904648, 'location-125', NULL, 0, false),('node-125', 3, 125, 59, 227, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904184, 'location-126', '{"state":"Down","target":"Down"}', 0, false),('node-126', 3, 126, 70, 228, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903589, 'location-127', NULL, 0, false),('node-127', 3, 127, 82, 229, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904358, 'location-128', '{"state":"Down","target":"Down"}', 0, false),('node-128', 3, 128, 52, 230, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1717797175, 'location-129', NULL, 0, false),('node-129', 3, 129, 66, 231, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903453, 'location-130', '{"state":"Up","target":"Down"}', 0, false),('node-130', 3, 130, 64, 232, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904263, 'location-131', NULL, 0, false),('node-131', 3, 131, 83, 233, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903204, 'location-132', NULL, 0, false),('node-132', 3, 132, 71, 234, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727831798, 'location-133', NULL, 0, false),('node-133', 3, 133, 65, 235, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904496, 'location-134', NULL, 0, false),('node-134', 3, 134, 87, 236, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903708, 'location-135', NULL, 0, false),('node-135', 3, 135, 17, 237, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705615192, 'location-136', NULL, 0, false),('node-136', 3, 136, 55, 238, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903656, 'location-137', '{"state":"Up","target":"Up"}', 0, false),('node-137', 3, 137, 24, 239, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727269825, 'location-138', NULL, 0, false),('node-138', 3, 138, 3, 240, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1713301032, 'location-139', '{"state":"Down","target":"Up"}', 0, false),('node-139', 3, 139, 30, 241, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903777, 'location-140', '{"state":"Down","target":"Up"}', 0, false),('node-140', 3, 140, 39, 242, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903844, 'location-141', NULL, 0, false),('node-141', 3, 141, 31, 243, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1720877793, 'location-142', '{"state":"Up","target":"Up"}', 0, false),('node-142', 3, 142, 53, 244, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711750670, 'location-143', NULL, 0, false),('node-143', 3, 143, 2, 245, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904325, 'location-144', NULL, 0, false),('node-144', 3, 144, 12, 246, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1725810849, 'location-145', '{"state":"Up","target":"Up"}', 0, false),('node-145', 3, 145, 58, 247, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904043, 'location-146', NULL, 0, false),('node-146', 3, 146, 33, 248, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722722384, 'location-147', NULL, 0, false),('node-147', 3, 147, 44, 249, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711107812, 'location-148', '{"state":"Down","target":"Down"}', 0, false),('node-148', 3, 148, 95, 250, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729906998, 'location-149', NULL, 0, false),('node-149', 3, 149, 78, 251, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706907157, 'location-150', NULL, 0, false),('node-150', 3, 150, 93, 252, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723057929, 'location-151', NULL, 0, false),('node-151', 3, 151, 12, 253, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903822, 'location-152', NULL, 0, false),('node-152', 3, 152, 100, 254, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904211, 'location-153', NULL, 0, false),('node-153', 3, 153, 61, 255, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903493, 'location-154', NULL, 0, false),('node-154', 3, 154, 66, 256, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1716461039, 'location-155', NULL, 0, false),('node-155', 3, 155, 54, 257, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904658, 'location-156', NULL, 0, false),('node-156', 3, 156, 26, 258, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903692, 'location-157', '{"state":"Up","target":"Up"}', 0, false),('node-157', 3, 157, 89, 259, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904640, 'location-158', NULL, 0, false),('node-158', 3, 158, 64, 260, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902741, 'location-159', '{"state":"Down","target":"Down"}', 0, false),('node-159', 3, 159, 82, 261, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708294767, 'location-160', '{"state":"Down","target":"Down"}', 0, false),('node-160', 3, 160, 76, 262, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902822, 'location-161', '{"state":"Up","target":"Up"}', 0, false),('node-161', 3, 161, 55, 263, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904634, 'location-162', NULL, 0, false),('node-162', 3, 162, 85, 264, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902507, 'location-163', NULL, 0, false),('node-163', 3, 163, 10, 265, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726865615, 'location-164', NULL, 0, false),('node-164', 3, 164, 58, 266, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903702, 'location-165', NULL, 0, false),('node-165', 3, 165, 31, 267, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903041, 'location-166', NULL, 0, false),('node-166', 3, 166, 90, 268, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904215, 'location-167', NULL, 0, false),('node-167', 3, 167, 81, 269, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711536769, 'location-168', '{"state":"Up","target":"Up"}', 0, false),('node-168', 3, 168, 7, 270, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710491933, 'location-169', NULL, 0, false),('node-169', 3, 169, 46, 271, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723301433, 'location-170', NULL, 0, false),('node-170', 3, 170, 41, 272, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711507109, 'location-171', NULL, 0, false),('node-171', 3, 171, 88, 273, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1712902102, 'location-172', NULL, 0, false),('node-172', 3, 172, 19, 274, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902980, 'location-173', NULL, 0, false),('node-173', 3, 173, 14, 275, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903232, 'location-174', NULL, 0, false),('node-174', 3, 174, 10, 276, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904274, 'location-175', '{"state":"Up","target":"Up"}', 0, false),('node-175', 3, 175, 61, 277, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903770, 'location-176', '{"state":"Down","target":"Up"}', 0, false),('node-176', 3, 176, 92, 278, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904490, 'location-177', NULL, 0, false),('node-177', 3, 177, 40, 279, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903968, 'location-178', NULL, 0, false),('node-178', 3, 178, 67, 280, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904006, 'location-179', NULL, 0, false),('node-179', 3, 179, 47, 281, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903601, 'location-180', NULL, 0, false),('node-180', 3, 180, 48, 282, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904556, 'location-181', '{"state":"Up","target":"Up"}', 0, false),('node-181', 3, 181, 81, 283, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903218, 'location-182', '{"state":"Up","target":"Down"}', 0, false),('node-182', 3, 182, 77, 284, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1713928970, 'location-183', NULL, 0, false),('node-183', 3, 183, 12, 285, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903904, 'location-184', NULL, 0, false),('node-184', 3, 184, 90, 286, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904304, 'location-185', NULL, 0, false),('node-185', 3, 185, 86, 287, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903207, 'location-186', NULL, 0, false),('node-186', 3, 186, 10, 288, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1704136450, 'location-187', '{"state":"Down","target":"Down"}', 0, false),('node-187', 3, 187, 73, 289, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903819, 'location-188', NULL, 0, false),('node-188', 3, 188, 71, 290, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714658273, 'location-189', NULL, 0, false),('node-189', 3, 189, 75, 291, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729247648, 'location-190', NULL, 0, false),('node-190', 3, 190, 81, 292, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705073120, 'location-191', NULL, 0, false),('node-191', 3, 191, 9, 293, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710397530, 'location-192', NULL, 0, false),('node-192', 3, 192, 30, 294, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902885, 'location-193', '{"state":"Up","target":"Down"}', 0, false),('node-193', 3, 193, 57, 295, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904364, 'location-194', '{"state":"Down","target":"Up"}', 0, false),('node-194', 3, 194, 78, 296, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902432, 'location-195', NULL, 0, false),('node-195', 3, 195, 75, 297, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719050834, 'location-196', NULL, 0, false),('node-196', 3, 196, 2, 298, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902909, 'location-197', '{"state":"Up","target":"Up"}', 0, false),('node-197', 3, 197, 48, 299, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904135, 'location-198', NULL, 0, false),('node-198', 3, 198, 13, 300, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902638, 'location-199', '{"state":"Down","target":"Down"}', 0, false),('node-199', 3, 199, 52, 301, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1724902581, 'location-200', '{"state":"Down","target":"Down"}', 0, false),('node-200', 3, 200, 55, 302, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1718282152, 'location-201', NULL, 0, false),('node-201', 3, 201, 68, 303, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1704945537, 'location-202', NULL, 0, false),('node-202', 3, 202, 38, 304, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904574, 'location-203', NULL, 0, false),('node-203', 3, 203, 18, 305, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904607, 'location-204', '{"state":"Down","target":"Up"}', 0, false),('node-204', 3, 204, 39, 306, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904417, 'location-205', NULL, 0, false),('node-205', 3, 205, 85, 307, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902641, 'location-206', '{"state":"Down","target":"Up"}', 0, false),('node-206', 3, 206, 14, 308, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706670089, 'location-207', NULL, 0, false),('node-207', 3, 207, 3, 309, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904230, 'location-208', '{"state":"Down","target":"Up"}', 0, false),('node-208', 3, 208, 54, 310, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904185, 'location-209', NULL, 0, false),('node-209', 3, 209, 30, 311, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903888, 'location-210', NULL, 0, false),('node-210', 3, 210, 53, 312, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903878, 'location-211', NULL, 0, false),('node-211', 3, 211, 3, 313, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902442, 'location-212', NULL, 0, false),('node-212', 3, 212, 90, 314, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1716928866, 'location-213', NULL, 0, false),('node-213', 3, 213, 23, 315, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903956, 'location-214', NULL, 0, false),('node-214', 3, 214, 52, 316, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1702331126, 'location-215', NULL, 0, false),('node-215', 3, 215, 76, 317, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903100, 'location-216', '{"state":"Up","target":"Up"}', 0, false),('node-216', 3, 216, 7, 318, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1717483638, 'location-217', NULL, 0, false),('node-217', 3, 217, 67, 319, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902724, 'location-218', '{"state":"Down","target":"Up"}', 0, false),('node-218', 3, 218, 56, 320, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729868400, 'location-219', NULL, 0, false),('node-219', 3, 219, 72, 321, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903025, 'location-220', NULL, 0, false),('node-220', 3, 220, 37, 322, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1716914338, 'location-221', NULL, 0, false),('node-221', 3, 221, 63, 323, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904141, 'location-222', NULL, 0, false),('node-222', 3, 222, 86, 324, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722400687, 'location-223', '{"state":"Up","target":"Up"}', 0, false),('node-223', 3, 223, 6, 325, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722547430, 'location-224', NULL, 0, false),('node-224', 3, 224, 45, 326, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705300686, 'location-225', NULL, 0, false),('node-225', 3, 225, 35, 327, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902948, 'location-226', NULL, 0, false),('node-226', 3, 226, 28, 328, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708550394, 'location-227', NULL, 0, false),('node-227', 3, 227, 63, 329, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1702006703, 'location-228', '{"state":"Up","target":"Down"}', 0, false),('node-228', 3, 228, 22, 330, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703940459, 'location-229', '{"state":"Down","target":"Down"}', 0, false),('node-229', 3, 229, 1, 331, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729296519, 'location-230', NULL, 0, false),('node-230', 3, 230, 79, 332, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703530351, 'location-231', NULL, 0, false),('node-231', 3, 231, 81, 333, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903795, 'location-232', NULL, 0, false),('node-232', 3, 232, 90, 334, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903122, 'location-233', NULL, 0, false),('node-233', 3, 233, 30, 335, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710221186, 'location-234', NULL, 0, false),('node-234', 3, 234, 97, 336, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711632924, 'location-235', NULL, 0, false),('node-235', 3, 235, 36, 337, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1709220160, 'location-236', NULL, 0, false),('node-236', 3, 236, 40, 338, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902423, 'location-237', NULL, 0, false),('node-237', 3, 237, 37, 339, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729628375, 'location-238', NULL, 0, false),('node-238', 3, 238, 9, 340, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1715660315, 'location-239', '{"state":"Up","target":"Up"}', 0, false),('node-239', 3, 239, 49, 341, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902915, 'location-240', NULL, 0, false),('node-240', 3, 240, 75, 342, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903448, 'location-241', NULL, 0, false),('node-241', 3, 241, 38, 343, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719179218, 'location-242', NULL, 0, false),('node-242', 3, 242, 49, 344, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727014896, 'location-243', NULL, 0, false),('node-243', 3, 243, 31, 345, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903184, 'location-244', NULL, 0, false),('node-244', 3, 244, 29, 346, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1700950683, 'location-245', NULL, 0, false),('node-245', 3, 245, 71, 347, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1725866345, 'location-246', NULL, 0, false),('node-246', 3, 246, 98, 348, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1718325963, 'location-247', NULL, 0, false),('node-247', 3, 247, 49, 349, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721123559, 'location-248', NULL, 0, false),('node-248', 3, 248, 98, 350, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721418173, 'location-249', '{"state":"Up","target":"Down"}', 0, false),('node-249', 3, 249, 61, 351, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723210339, 'location-250', NULL, 0, false),('node-250', 3, 250, 62, 352, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903315, 'location-251', NULL, 0, false),('node-251', 3, 251, 97, 353, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1725245477, 'location-252', '{"state":"Up","target":"Down"}', 0, false),('node-252', 3, 252, 44, 354, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1707387926, 'location-253', NULL, 0, false),('node-253', 3, 253, 44, 355, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703828611, 'location-254', NULL, 0, false),('node-254', 3, 254, 99, 356, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1728514176, 'location-255', '{"state":"Down","target":"Up"}', 0, false),('node-255', 3, 255, 58, 357, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1702730104, 'location-256', '{"state":"Down","target":"Up"}', 0, false),('node-256', 3, 256, 9, 358, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903559, 'location-257', NULL, 0, false),('node-257', 3, 257, 56, 359, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904407, 'location-258', NULL, 0, false),('node-258', 3, 258, 7, 360, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1716314586, 'location-259', '{"state":"Up","target":"Down"}', 0, false),('node-259', 3, 259, 66, 361, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1701844580, 'location-260', NULL, 0, false),('node-260', 3, 260, 72, 362, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708234242, 'location-261', NULL, 0, false),('node-261', 3, 261, 96, 363, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1717812350, 'location-262', NULL, 0, false),('node-262', 3, 262, 69, 364, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902669, 'location-263', NULL, 0, false),('node-263', 3, 263, 53, 365, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903719, 'location-264', NULL, 0, false),('node-264', 3, 264, 81, 366, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727176286, 'location-265', NULL, 0, false),('node-265', 3, 265, 73, 367, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729411114, 'location-266', NULL, 0, false),('node-266', 3, 266, 72, 368, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904133, 'location-267', '{"state":"Down","target":"Up"}', 0, false),('node-267', 3, 267, 11, 369, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1717659365, 'location-268', '{"state":"Up","target":"Up"}', 0, false),('node-268', 3, 268, 74, 370, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903845, 'location-269', '{"state":"Down","target":"Up"}', 0, false),('node-269', 3, 269, 64, 371, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902600, 'location-270', NULL, 0, false),('node-270', 3, 270, 69, 372, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719407017, 'location-271', NULL, 0, false),('node-271', 3, 271, 41, 373, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903554, 'location-272', NULL, 0, false),('node-272', 3, 272, 61, 374, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1713404772, 'location-273', NULL, 0, false),('node-273', 3, 273, 76, 375, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903914, 'location-274', NULL, 0, false),('node-274', 3, 274, 57, 376, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903280, 'location-275', '{"state":"Down","target":"Down"}', 0, false),('node-275', 3, 275, 18, 377, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902815, 'location-276', NULL, 0, false),('node-276', 3, 276, 77, 378, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904055, 'location-277', '{"state":"Down","target":"Up"}', 0, false),('node-277', 3, 277, 23, 379, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904055, 'location-278', NULL, 0, false),('node-278', 3, 278, 90, 380, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904166, 'location-279', NULL, 0, false),('node-279', 3, 279, 69, 381, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902983, 'location-280', NULL, 0, false),('node-280', 3, 280, 93, 382, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1713826820, 'location-281', NULL, 0, false),('node-281', 3, 281, 6, 383, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722204705, 'location-282', NULL, 0, false),('node-282', 3, 282, 48, 384, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723330371, 'location-283', NULL, 0, false),('node-283', 3, 283, 40, 385, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711630183, 'location-284', NULL, 0, false),('node-284', 3, 284, 86, 386, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902891, 'location-285', '{"state":"Down","target":"Up"}', 0, false),('node-285', 3, 285, 8, 387, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719464696, 'location-286', NULL, 0, false),('node-286', 3, 286, 66, 388, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1725318053, 'location-287', '{"state":"Up","target":"Up"}', 0, false),('node-287', 3, 287, 17, 389, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1699871110, 'location-288', NULL, 0, false),('node-288', 3, 288, 63, 390, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1718620594, 'location-289', NULL, 0, false),('node-289', 3, 289, 98, 391, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1717884763, 'location-290', NULL, 0, false),('node-290', 3, 290, 46, 392, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902306, 'location-291', NULL, 0, false),('node-291', 3, 291, 47, 393, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706261006, 'location-292', NULL, 0, false),('node-292', 3, 292, 67, 394, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1717783888, 'location-293', NULL, 0, false),('node-293', 3, 293, 14, 395, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902754, 'location-294', NULL, 0, false),('node-294', 3, 294, 59, 396, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1707340068, 'location-295', '{"state":"Down","target":"Up"}', 0, false),('node-295', 3, 295, 16, 397, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710484064, 'location-296', NULL, 0, false),('node-296', 3, 296, 46, 398, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902663, 'location-297', '{"state":"Up","target":"Down"}', 0, false),('node-297', 3, 297, 56, 399, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1724118973, 'location-298', NULL, 0, false),('node-298', 3, 298, 77, 400, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1725096803, 'location-299', '{"state":"Down","target":"Down"}', 0, false),('node-299', 3, 299, 35, 401, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726143773, 'location-300', NULL, 0, false),('node-300', 3, 300, 82, 402, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1700083938, 'location-301', '{"state":"Down","target":"Up"}', 0, false),('node-301', 3, 301, 72, 403, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726979225, 'location-302', '{"state":"Up","target":"Up"}', 0, false),('node-302', 3, 302, 43, 404, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1701515683, 'location-303', NULL, 0, false),('node-303', 3, 303, 40, 405, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903390, 'location-304', NULL, 0, false),('node-304', 3, 304, 78, 406, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903361, 'location-305', NULL, 0, false),('node-305', 3, 305, 83, 407, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903724, 'location-306', NULL, 0, false),('node-306', 3, 306, 92, 408, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711792625, 'location-307', NULL, 0, false),('node-307', 3, 307, 38, 409, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902356, 'location-308', NULL, 0, false),('node-308', 3, 308, 1, 410, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722914801, 'location-309', NULL, 0, false),('node-309', 3, 309, 65, 411, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904623, 'location-310', NULL, 0, false),('node-310', 3, 310, 46, 412, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903097, 'location-311', NULL, 0, false),('node-311', 3, 311, 75, 413, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902886, 'location-312', NULL, 0, false),('node-312', 3, 312, 15, 414, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729187783, 'location-313', NULL, 0, false),('node-313', 3, 313, 77, 415, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710217762, 'location-314', '{"state":"Down","target":"Up"}', 0, false),('node-314', 3, 314, 47, 416, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1700291660, 'location-315', NULL, 0, false),('node-315', 3, 315, 62, 417, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723732708, 'location-316', NULL, 0, false),('node-316', 3, 316, 94, 418, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1716412331, 'location-317', NULL, 0, false),('node-317', 3, 317, 51, 419, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711900553, 'location-318', NULL, 0, false),('node-318', 3, 318, 87, 420, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902545, 'location-319', NULL, 0, false),('node-319', 3, 319, 8, 421, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902842, 'location-320', NULL, 0, false),('node-320', 3, 320, 50, 422, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1725602347, 'location-321', NULL, 0, false),('node-321', 3, 321, 12, 423, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904209, 'location-322', '{"state":"Up","target":"Down"}', 0, false),('node-322', 3, 322, 40, 424, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903368, 'location-323', NULL, 0, false),('node-323', 3, 323, 16, 425, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902827, 'location-324', NULL, 0, false),('node-324', 3, 324, 7, 426, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903557, 'location-325', NULL, 0, false),('node-325', 3, 325, 62, 427, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1700205563, 'location-326', '{"state":"Up","target":"Down"}', 0, false),('node-326', 3, 326, 65, 428, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726329567, 'location-327', NULL, 0, false),('node-327', 3, 327, 32, 429, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903821, 'location-328', '{"state":"Down","target":"Up"}', 0, false),('node-328', 3, 328, 36, 430, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903390, 'location-329', '{"state":"Down","target":"Down"}', 0, false),('node-329', 3, 329, 95, 431, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1725274179, 'location-330', NULL, 0, false),('node-330', 3, 330, 24, 432, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721952489, 'location-331', NULL, 0, false),('node-331', 3, 331, 46, 433, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726741175, 'location-332', NULL, 0, false),('node-332', 3, 332, 77, 434, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903361, 'location-333', NULL, 0, false),('node-333', 3, 333, 76, 435, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904589, 'location-334', NULL, 0, false),('node-334', 3, 334, 53, 436, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904230, 'location-335', NULL, 0, false),('node-335', 3, 335, 79, 437, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1720319377, 'location-336', '{"state":"Up","target":"Up"}', 0, false),('node-336', 3, 336, 17, 438, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902845, 'location-337', NULL, 0, false),('node-337', 3, 337, 48, 439, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903502, 'location-338', NULL, 0, false),('node-338', 3, 338, 100, 440, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711729464, 'location-339', '{"state":"Down","target":"Up"}', 0, false),('node-339', 3, 339, 30, 441, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904528, 'location-340', '{"state":"Down","target":"Up"}', 0, false),('node-340', 3, 340, 32, 442, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903711, 'location-341', NULL, 0, false),('node-341', 3, 341, 59, 443, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1707455610, 'location-342', NULL, 0, false),('node-342', 3, 342, 85, 444, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904438, 'location-343', '{"state":"Up","target":"Up"}', 0, false),('node-343', 3, 343, 15, 445, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703099904, 'location-344', NULL, 0, false),('node-344', 3, 344, 95, 446, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727804794, 'location-345', NULL, 0, false),('node-345', 3, 345, 62, 447, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903159, 'location-346', NULL, 0, false),('node-346', 3, 346, 49, 448, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902694, 'location-347', '{"state":"Up","target":"Up"}', 0, false),('node-347', 3, 347, 89, 449, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706091256, 'location-348', NULL, 0, false),('node-348', 3, 348, 91, 450, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722044170, 'location-349', '{"state":"Down","target":"Up"}', 0, false),('node-349', 3, 349, 63, 451, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726236533, 'location-350', NULL, 0, false),('node-350', 3, 350, 57, 452, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903392, 'location-351', '{"state":"Up","target":"Down"}', 0, false),('node-351', 3, 351, 79, 453, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904113, 'location-352', NULL, 0, false),('node-352', 3, 352, 78, 454, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1720441060, 'location-353', NULL, 0, false),('node-353', 3, 353, 18, 455, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904147, 'location-354', NULL, 0, false),('node-354', 3, 354, 75, 456, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729495227, 'location-355', '{"state":"Down","target":"Down"}', 0, false),('node-355', 3, 355, 66, 457, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1720633921, 'location-356', NULL, 0, false),('node-356', 3, 356, 18, 458, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705556563, 'location-357', '{"state":"Up","target":"Down"}', 0, false),('node-357', 3, 357, 24, 459, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719690495, 'location-358', NULL, 0, false),('node-358', 3, 358, 71, 460, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902824, 'location-359', NULL, 0, false),('node-359', 3, 359, 15, 461, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902410, 'location-360', '{"state":"Up","target":"Up"}', 0, false),('node-360', 3, 360, 56, 462, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902715, 'location-361', NULL, 0, false),('node-361', 3, 361, 23, 463, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904662, 'location-362', NULL, 0, false),('node-362', 3, 362, 33, 464, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719449987, 'location-363', NULL, 0, false),('node-363', 3, 363, 29, 465, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904338, 'location-364', NULL, 0, false),('node-364', 3, 364, 78, 466, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903456, 'location-365', NULL, 0, false),('node-365', 3, 365, 48, 467, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903773, 'location-366', NULL, 0, false),('node-366', 3, 366, 28, 468, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903307, 'location-367', NULL, 0, false),('node-367', 3, 367, 49, 469, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722593877, 'location-368', NULL, 0, false),('node-368', 3, 368, 61, 470, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721116448, 'location-369', NULL, 0, false),('node-369', 3, 369, 64, 471, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903868, 'location-370', NULL, 0, false),('node-370', 3, 370, 93, 472, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714562662, 'location-371', '{"state":"Up","target":"Up"}', 0, false),('node-371', 3, 371, 58, 473, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705227285, 'location-372', '{"state":"Down","target":"Down"}', 0, false),('node-372', 3, 372, 5, 474, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1709300545, 'location-373', NULL, 0, false),('node-373', 3, 373, 23, 475, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1725105292, 'location-374', NULL, 0, false),('node-374', 3, 374, 89, 476, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708275301, 'location-375', '{"state":"Up","target":"Up"}', 0, false),('node-375', 3, 375, 92, 477, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1715572749, 'location-376', NULL, 0, false),('node-376', 3, 376, 75, 478, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902913, 'location-377', NULL, 0, false),('node-377', 3, 377, 38, 479, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1700926472, 'location-378', NULL, 0, false),('node-378', 3, 378, 64, 480, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710518682, 'location-379', NULL, 0, false),('node-379', 3, 379, 20, 481, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1715461646, 'location-380', NULL, 0, false),('node-380', 3, 380, 87, 482, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708503973, 'location-381', '{"state":"Down","target":"Up"}', 0, false),('node-381', 3, 381, 60, 483, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904572, 'location-382', NULL, 0, false),('node-382', 3, 382, 3, 484, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1704222568, 'location-383', NULL, 0, false),('node-383', 3, 383, 28, 485, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902616, 'location-384', NULL, 0, false),('node-384', 3, 384, 60, 486, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726183783, 'location-385', NULL, 0, false),('node-385', 3, 385, 83, 487, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729718074, 'location-386', '{"state":"Down","target":"Up"}', 0, false),('node-386', 3, 386, 40, 488, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710794993, 'location-387', NULL, 0, false),('node-387', 3, 387, 96, 489, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902544, 'location-388', '{"state":"Up","target":"Down"}', 0, false),('node-388', 3, 388, 48, 490, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902902, 'location-389', NULL, 0, false),('node-389', 3, 389, 68, 491, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726882506, 'location-390', '{"state":"Down","target":"Down"}', 0, false),('node-390', 3, 390, 56, 492, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711035480, 'location-391', NULL, 0, false),('node-391', 3, 391, 13, 493, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902306, 'location-392', NULL, 0, false),('node-392', 3, 392, 92, 494, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904374, 'location-393', '{"state":"Down","target":"Down"}', 0, false),('node-393', 3, 393, 9, 495, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904055, 'location-394', NULL, 0, false),('node-394', 3, 394, 90, 496, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903966, 'location-395', NULL, 0, false),('node-395', 3, 395, 65, 497, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708150163, 'location-396', '{"state":"Down","target":"Up"}', 0, false),('node-396', 3, 396, 77, 498, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903205, 'location-397', NULL, 0, false),('node-397', 3, 397, 36, 499, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708465898, 'location-398', NULL, 0, false),('node-398', 3, 398, 63, 500, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703469236, 'location-399', '{"state":"Up","target":"Down"}', 0, false),('node-399', 3, 399, 2, 501, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714846902, 'location-400', '{"state":"Down","target":"Down"}', 0, false),('node-400', 3, 400, 87, 502, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714881934, 'location-401', NULL, 0, false),('node-401', 3, 401, 27, 503, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902665, 'location-402', NULL, 0, false),('node-402', 3, 402, 72, 504, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1718496748, 'location-403', NULL, 0, false),('node-403', 3, 403, 52, 505, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903947, 'location-404', NULL, 0, false),('node-404', 3, 404, 87, 506, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714899700, 'location-405', '{"state":"Down","target":"Up"}', 0, false),('node-405', 3, 405, 30, 507, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904275, 'location-406', NULL, 0, false),('node-406', 3, 406, 78, 508, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903523, 'location-407', '{"state":"Up","target":"Up"}', 0, false),('node-407', 3, 407, 46, 509, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902378, 'location-408', NULL, 0, false),('node-408', 3, 408, 20, 510, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904155, 'location-409', NULL, 0, false),('node-409', 3, 409, 64, 511, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729251779, 'location-410', NULL, 0, false),('node-410', 3, 410, 75, 512, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904165, 'location-411', NULL, 0, false),('node-411', 3, 411, 96, 513, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902331, 'location-412', '{"state":"Up","target":"Up"}', 0, false),('node-412', 3, 412, 85, 514, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727597555, 'location-413', '{"state":"Down","target":"Up"}', 0, false),('node-413', 3, 413, 64, 515, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904687, 'location-414', NULL, 0, false),('node-414', 3, 414, 83, 516, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1704398701, 'location-415', NULL, 0, false),('node-415', 3, 415, 53, 517, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904396, 'location-416', NULL, 0, false),('node-416', 3, 416, 3, 518, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721627507, 'location-417', NULL, 0, false),('node-417', 3, 417, 63, 519, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902964, 'location-418', NULL, 0, false),('node-418', 3, 418, 11, 520, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714483880, 'location-419', '{"state":"Up","target":"Up"}', 0, false),('node-419', 3, 419, 13, 521, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904034, 'location-420', NULL, 0, false),('node-420', 3, 420, 57, 522, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1707994670, 'location-421', '{"state":"Up","target":"Up"}', 0, false),('node-421', 3, 421, 7, 523, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703693589, 'location-422', '{"state":"Down","target":"Down"}', 0, false),('node-422', 3, 422, 93, 524, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903145, 'location-423', '{"state":"Up","target":"Down"}', 0, false),('node-423', 3, 423, 51, 525, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903414, 'location-424', NULL, 0, false),('node-424', 3, 424, 77, 526, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903311, 'location-425', '{"state":"Down","target":"Up"}', 0, false),('node-425', 3, 425, 40, 527, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903177, 'location-426', NULL, 0, false),('node-426', 3, 426, 56, 528, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1700005470, 'location-427', '{"state":"Down","target":"Up"}', 0, false),('node-427', 3, 427, 1, 529, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903062, 'location-428', NULL, 0, false),('node-428', 3, 428, 51, 530, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727547986, 'location-429', NULL, 0, false),('node-429', 3, 429, 51, 531, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902347, 'location-430', NULL, 0, false),('node-430', 3, 430, 45, 532, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903001, 'location-431', NULL, 0, false),('node-431', 3, 431, 77, 533, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727061728, 'location-432', NULL, 0, false),('node-432', 3, 432, 29, 534, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904127, 'location-433', '{"state":"Down","target":"Up"}', 0, false),('node-433', 3, 433, 15, 535, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723701563, 'location-434', NULL, 0, false),('node-434', 3, 434, 96, 536, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902962, 'location-435', NULL, 0, false),('node-435', 3, 435, 34, 537, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904593, 'location-436', NULL, 0, false),('node-436', 3, 436, 85, 538, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1715188972, 'location-437', NULL, 0, false),('node-437', 3, 437, 65, 539, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903894, 'location-438', NULL, 0, false),('node-438', 3, 438, 46, 540, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904426, 'location-439', NULL, 0, false),('node-439', 3, 439, 20, 541, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902546, 'location-440', NULL, 0, false),('node-440', 3, 440, 36, 542, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1709759448, 'location-441', '{"state":"Up","target":"Down"}', 0, false),('node-441', 3, 441, 91, 543, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1712879079, 'location-442', '{"state":"Up","target":"Up"}', 0, false),('node-442', 3, 442, 96, 544, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902914, 'location-443', NULL, 0, false),('node-443', 3, 443, 77, 545, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721998947, 'location-444', NULL, 0, false),('node-444', 3, 444, 50, 546, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705570431, 'location-445', NULL, 0, false),('node-445', 3, 445, 63, 547, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902716, 'location-446', NULL, 0, false),('node-446', 3, 446, 98, 548, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902544, 'location-447', NULL, 0, false),('node-447', 3, 447, 53, 549, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903493, 'location-448', NULL, 0, false),('node-448', 3, 448, 12, 550, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1729809598, 'location-449', NULL, 0, false),('node-449', 3, 449, 84, 551, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903977, 'location-450', '{"state":"Up","target":"Down"}', 0, false),('node-450', 3, 450, 61, 552, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902742, 'location-451', '{"state":"Down","target":"Down"}', 0, false),('node-451', 3, 451, 57, 553, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1700454297, 'location-452', NULL, 0, false),('node-452', 3, 452, 36, 554, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903219, 'location-453', NULL, 0, false),('node-453', 3, 453, 34, 555, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1717929582, 'location-454', '{"state":"Up","target":"Down"}', 0, false),('node-454', 3, 454, 46, 556, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1717882380, 'location-455', '{"state":"Up","target":"Up"}', 0, false),('node-455', 3, 455, 44, 557, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904250, 'location-456', NULL, 0, false),('node-456', 3, 456, 44, 558, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706300086, 'location-457', '{"state":"Up","target":"Down"}', 0, false),('node-457', 3, 457, 67, 559, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903672, 'location-458', NULL, 0, false),('node-458', 3, 458, 81, 560, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903803, 'location-459', '{"state":"Up","target":"Up"}', 0, false),('node-459', 3, 459, 13, 561, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703109038, 'location-460', NULL, 0, false),('node-460', 3, 460, 4, 562, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902361, 'location-461', NULL, 0, false),('node-461', 3, 461, 53, 563, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902396, 'location-462', NULL, 0, false),('node-462', 3, 462, 81, 564, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904545, 'location-463', NULL, 0, false),('node-463', 3, 463, 77, 565, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1718199581, 'location-464', NULL, 0, false),('node-464', 3, 464, 70, 566, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903308, 'location-465', NULL, 0, false),('node-465', 3, 465, 59, 567, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904058, 'location-466', NULL, 0, false),('node-466', 3, 466, 2, 568, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714329398, 'location-467', NULL, 0, false),('node-467', 3, 467, 44, 569, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711517306, 'location-468', '{"state":"Up","target":"Up"}', 0, false),('node-468', 3, 468, 82, 570, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1728608922, 'location-469', NULL, 0, false),('node-469', 3, 469, 7, 571, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705574199, 'location-470', '{"state":"Up","target":"Down"}', 0, false),('node-470', 3, 470, 51, 572, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904622, 'location-471', '{"state":"Up","target":"Down"}', 0, false),('node-471', 3, 471, 99, 573, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1708278170, 'location-472', NULL, 0, false),('node-472', 3, 472, 26, 574, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723915870, 'location-473', NULL, 0, false),('node-473', 3, 473, 68, 575, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705136598, 'location-474', NULL, 0, false),('node-474', 3, 474, 82, 576, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714694152, 'location-475', '{"state":"Down","target":"Down"}', 0, false),('node-475', 3, 475, 78, 577, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721743016, 'location-476', NULL, 0, false),('node-476', 3, 476, 77, 578, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904023, 'location-477', '{"state":"Down","target":"Down"}', 0, false),('node-477', 3, 477, 15, 579, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904073, 'location-478', NULL, 0, false),('node-478', 3, 478, 84, 580, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1712583520, 'location-479', NULL, 0, false),('node-479', 3, 479, 92, 581, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903560, 'location-480', NULL, 0, false),('node-480', 3, 480, 65, 582, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1724055089, 'location-481', '{"state":"Up","target":"Down"}', 0, false),('node-481', 3, 481, 74, 583, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903499, 'location-482', NULL, 0, false),('node-482', 3, 482, 5, 584, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1718245241, 'location-483', NULL, 0, false),('node-483', 3, 483, 37, 585, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904352, 'location-484', NULL, 0, false),('node-484', 3, 484, 21, 586, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903815, 'location-485', '{"state":"Up","target":"Up"}', 0, false),('node-485', 3, 485, 51, 587, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904507, 'location-486', NULL, 0, false),('node-486', 3, 486, 64, 588, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903369, 'location-487', NULL, 0, false),('node-487', 3, 487, 4, 589, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904395, 'location-488', NULL, 0, false),('node-488', 3, 488, 80, 590, 'Belgium', 'Ghent', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904025, 'location-489', NULL, 0, false),('node-489', 3, 489, 79, 591, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1704965769, 'location-490', '{"state":"Down","target":"Up"}', 0, false),('node-490', 3, 490, 74, 592, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903715, 'location-491', NULL, 0, false),('node-491', 3, 491, 22, 593, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714000206, 'location-492', '{"state":"Down","target":"Up"}', 0, false),('node-492', 3, 492, 85, 594, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1707984622, 'location-493', NULL, 0, false),('node-493', 3, 493, 80, 595, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1711965941, 'location-494', '{"state":"Up","target":"Up"}', 0, false),('node-494', 3, 494, 94, 596, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719823213, 'location-495', NULL, 0, false),('node-495', 3, 495, 5, 597, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903759, 'location-496', '{"state":"Up","target":"Up"}', 0, false),('node-496', 3, 496, 47, 598, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722819583, 'location-497', NULL, 0, false),('node-497', 3, 497, 66, 599, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903971, 'location-498', NULL, 0, false),('node-498', 3, 498, 45, 600, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902758, 'location-499', '{"state":"Down","target":"Down"}', 0, false),('node-499', 3, 499, 88, 601, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719975544, 'location-500', '{"state":"Up","target":"Up"}', 0, false),('node-500', 3, 500, 67, 602, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903671, 'location-501', NULL, 0, false),('node-501', 3, 501, 7, 603, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1717291219, 'location-502', NULL, 0, false),('node-502', 3, 502, 77, 604, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903068, 'location-503', NULL, 0, false),('node-503', 3, 503, 81, 605, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903606, 'location-504', '{"state":"Up","target":"Down"}', 0, false),('node-504', 3, 504, 9, 606, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1701085211, 'location-505', NULL, 0, false),('node-505', 3, 505, 35, 607, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706188782, 'location-506', NULL, 0, false),('node-506', 3, 506, 93, 608, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904401, 'location-507', '{"state":"Down","target":"Up"}', 0, false),('node-507', 3, 507, 4, 609, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903458, 'location-508', NULL, 0, false),('node-508', 3, 508, 71, 610, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902329, 'location-509', '{"state":"Up","target":"Up"}', 0, false),('node-509', 3, 509, 6, 611, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902521, 'location-510', NULL, 0, false),('node-510', 3, 510, 65, 612, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903983, 'location-511', NULL, 0, false),('node-511', 3, 511, 90, 613, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903133, 'location-512', '{"state":"Down","target":"Down"}', 0, false),('node-512', 3, 512, 55, 614, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904509, 'location-513', NULL, 0, false),('node-513', 3, 513, 76, 615, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710153351, 'location-514', NULL, 0, false),('node-514', 3, 514, 15, 616, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730523423, 'location-515', NULL, 0, false),('node-515', 3, 515, 72, 617, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903670, 'location-516', NULL, 0, false),('node-516', 3, 516, 96, 618, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706343815, 'location-517', '{"state":"Up","target":"Down"}', 0, false),('node-517', 3, 517, 38, 619, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727288107, 'location-518', NULL, 0, false),('node-518', 3, 518, 49, 620, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727737358, 'location-519', NULL, 0, false),('node-519', 3, 519, 1, 621, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903388, 'location-520', NULL, 0, false),('node-520', 3, 520, 42, 622, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714826376, 'location-521', NULL, 0, false),('node-521', 3, 521, 7, 623, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903048, 'location-522', NULL, 0, false),('node-522', 3, 522, 49, 624, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1715023739, 'location-523', NULL, 0, false),('node-523', 3, 523, 92, 625, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902762, 'location-524', '{"state":"Down","target":"Down"}', 0, false),('node-524', 3, 524, 87, 626, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714054895, 'location-525', NULL, 0, false),('node-525', 3, 525, 12, 627, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1716952843, 'location-526', '{"state":"Up","target":"Down"}', 0, false),('node-526', 3, 526, 3, 628, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904585, 'location-527', NULL, 0, false),('node-527', 3, 527, 9, 629, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1728844495, 'location-528', NULL, 0, false),('node-528', 3, 528, 56, 630, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903009, 'location-529', '{"state":"Up","target":"Down"}', 0, false),('node-529', 3, 529, 55, 631, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903211, 'location-530', NULL, 0, false),('node-530', 3, 530, 100, 632, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730805224, 'location-531', '{"state":"Up","target":"Down"}', 0, false),('node-531', 3, 531, 94, 633, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1709425698, 'location-532', NULL, 0, false),('node-532', 3, 532, 91, 634, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1701691836, 'location-533', NULL, 0, false),('node-533', 3, 533, 91, 635, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723964593, 'location-534', '{"state":"Down","target":"Down"}', 0, false),('node-534', 3, 534, 15, 636, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1716617194, 'location-535', NULL, 0, false),('node-535', 3, 535, 6, 637, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904312, 'location-536', NULL, 0, false),('node-536', 3, 536, 62, 638, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1728226219, 'location-537', NULL, 0, false),('node-537', 3, 537, 32, 639, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714290013, 'location-538', NULL, 0, false),('node-538', 3, 538, 42, 640, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705970545, 'location-539', '{"state":"Down","target":"Down"}', 0, false),('node-539', 3, 539, 31, 641, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904338, 'location-540', '{"state":"Down","target":"Up"}', 0, false),('node-540', 3, 540, 16, 642, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1707673192, 'location-541', '{"state":"Up","target":"Down"}', 0, false),('node-541', 3, 541, 56, 643, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904566, 'location-542', NULL, 0, false),('node-542', 3, 542, 17, 644, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904462, 'location-543', '{"state":"Down","target":"Down"}', 0, false),('node-543', 3, 543, 66, 645, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730372273, 'location-544', NULL, 0, false),('node-544', 3, 544, 28, 646, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1714528018, 'location-545', '{"state":"Up","target":"Up"}', 0, false),('node-545', 3, 545, 61, 647, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903240, 'location-546', '{"state":"Up","target":"Down"}', 0, false),('node-546', 3, 546, 32, 648, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902952, 'location-547', '{"state":"Up","target":"Down"}', 0, false),('node-547', 3, 547, 62, 649, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1705194390, 'location-548', NULL, 0, false),('node-548', 3, 548, 49, 650, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1702899947, 'location-549', '{"state":"Down","target":"Down"}', 0, false),('node-549', 3, 549, 32, 651, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902305, 'location-550', '{"state":"Up","target":"Down"}', 0, false),('node-550', 3, 550, 95, 652, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710223725, 'location-551', NULL, 0, false),('node-551', 3, 551, 25, 653, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903000, 'location-552', NULL, 0, false),('node-552', 3, 552, 17, 654, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1702958854, 'location-553', NULL, 0, false),('node-553', 3, 553, 82, 655, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903637, 'location-554', NULL, 0, false),('node-554', 3, 554, 17, 656, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904341, 'location-555', NULL, 0, false),('node-555', 3, 555, 60, 657, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904589, 'location-556', NULL, 0, false),('node-556', 3, 556, 39, 658, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1728051702, 'location-557', '{"state":"Up","target":"Up"}', 0, false),('node-557', 3, 557, 34, 659, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903460, 'location-558', '{"state":"Up","target":"Down"}', 0, false),('node-558', 3, 558, 89, 660, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904656, 'location-559', NULL, 0, false),('node-559', 3, 559, 21, 661, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903738, 'location-560', '{"state":"Up","target":"Up"}', 0, false),('node-560', 3, 560, 85, 662, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1712893985, 'location-561', NULL, 0, false),('node-561', 3, 561, 13, 663, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904099, 'location-562', '{"state":"Up","target":"Down"}', 0, false),('node-562', 3, 562, 25, 664, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902671, 'location-563', NULL, 0, false),('node-563', 3, 563, 99, 665, 'Egypt', 'Cairo', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903464, 'location-564', NULL, 0, false),('node-564', 3, 564, 18, 666, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904653, 'location-565', NULL, 0, false),('node-565', 3, 565, 54, 667, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903304, 'location-566', NULL, 0, false),('node-566', 3, 566, 90, 668, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703782869, 'location-567', NULL, 0, false),('node-567', 3, 567, 61, 669, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902452, 'location-568', NULL, 0, false),('node-568', 3, 568, 92, 670, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722834879, 'location-569', NULL, 0, false),('node-569', 3, 569, 9, 671, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710583542, 'location-570', NULL, 0, false),('node-570', 3, 570, 3, 672, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1704983262, 'location-571', NULL, 0, false),('node-571', 3, 571, 94, 673, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902653, 'location-572', NULL, 0, false),('node-572', 3, 572, 55, 674, 'Belgium', 'Antwerp', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1723540185, 'location-573', NULL, 0, false),('node-573', 3, 573, 7, 675, 'Egypt', 'Giza', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902805, 'location-574', NULL, 0, false),('node-574', 3, 574, 43, 676, 'United Kingdom', 'London', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1718068435, 'location-575', '{"state":"Up","target":"Up"}', 0, false),('node-575', 3, 575, 97, 677, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1706571338, 'location-576', '{"state":"Down","target":"Down"}', 0, false),('node-576', 3, 576, 84, 678, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903508, 'location-577', NULL, 0, false),('node-577', 3, 577, 25, 679, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727745430, 'location-578', NULL, 0, false),('node-578', 3, 578, 12, 680, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902908, 'location-579', NULL, 0, false),('node-579', 3, 579, 87, 681, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903522, 'location-580', NULL, 0, false),('node-580', 3, 580, 3, 682, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1722202403, 'location-581', '{"state":"Up","target":"Down"}', 0, false),('node-581', 3, 581, 79, 683, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1726275725, 'location-582', NULL, 0, false),('node-582', 3, 582, 18, 684, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902609, 'location-583', NULL, 0, false),('node-583', 3, 583, 13, 685, 'Egypt', 'Nasr City', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902937, 'location-584', NULL, 0, false),('node-584', 3, 584, 41, 686, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730350088, 'location-585', NULL, 0, false),('node-585', 3, 585, 97, 687, 'United States', 'Chicago', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1703791857, 'location-586', NULL, 0, false),('node-586', 3, 586, 60, 688, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1710219440, 'location-587', '{"state":"Down","target":"Up"}', 0, false),('node-587', 3, 587, 38, 689, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719486765, 'location-588', '{"state":"Up","target":"Up"}', 0, false),('node-588', 3, 588, 10, 690, 'Belgium', 'Charleroi', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730904635, 'location-589', NULL, 0, false),('node-589', 3, 589, 39, 691, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1719727881, 'location-590', NULL, 0, false),('node-590', 3, 590, 44, 692, 'United Kingdom', 'Cambridge', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903659, 'location-591', NULL, 0, false),('node-591', 3, 591, 99, 693, 'Egypt', 'October', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903882, 'location-592', NULL, 0, false),('node-592', 3, 592, 1, 694, 'United Kingdom', 'Liverpool', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1724600113, 'location-593', NULL, 0, false),('node-593', 3, 593, 25, 695, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1721175810, 'location-594', NULL, 0, false),('node-594', 3, 594, 12, 696, 'United Kingdom', 'Manchester', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903799, 'location-595', NULL, 0, false),('node-595', 3, 595, 46, 697, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1727793373, 'location-596', NULL, 0, false),('node-596', 3, 596, 72, 698, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730902953, 'location-597', '{"state":"Down","target":"Down"}', 0, false),('node-597', 3, 597, 24, 699, 'United States', 'San Francisco', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903126, 'location-598', NULL, 0, false),('node-598', 3, 598, 30, 700, 'United States', 'Los Angeles', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1730903935, 'location-599', '{"state":"Down","target":"Up"}', 0, false),('node-599', 3, 599, 50, 701, 'Belgium', 'Brussels', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1707484870, 'location-600', '{"state":"Down","target":"Down"}', 0, false),('node-600', 3, 600, 41, 702, 'United States', 'New York', 1000, 1730904704, 1, 'Diy', false, false, NULL, 1730904704, 1720554567, 'location-601', '{"state":"Down","target":"Down"}', 0, false);; +INSERT INTO node_resources_total (id, hru, sru, cru, mru, node_id) VALUES ('total-resources-1', 16917876178944, 24128052527104, 50, 83751862272, 'node-1'),('total-resources-2', 27105538605056, 17823040536576, 61, 30064771072, 'node-2'),('total-resources-3', 7292854468608, 18382460026880, 49, 59055800320, 'node-3'),('total-resources-4', 30237643505664, 8725226061824, 109, 199715979264, 'node-4'),('total-resources-5', 30033632559104, 30528627539968, 111, 183609851904, 'node-5'),('total-resources-6', 30795989254144, 2676838367232, 51, 90194313216, 'node-6'),('total-resources-7', 28707561406464, 14070312861696, 61, 173946175488, 'node-7'),('total-resources-8', 13174812180480, 8500814020608, 11, 237296943104, 'node-8'),('total-resources-9', 28565827485696, 7539815088128, 120, 205084688384, 'node-9'),('total-resources-10', 16336981852160, 10341207506944, 27, 216895848448, 'node-10'),('total-resources-11', 20799452872704, 18729278636032, 114, 19327352832, 'node-11'),('total-resources-12', 16488379449344, 30612379402240, 52, 216895848448, 'node-12'),('total-resources-13', 3058016714752, 30150670417920, 39, 79456894976, 'node-13'),('total-resources-14', 15518790582272, 30437359484928, 109, 245886877696, 'node-14'),('total-resources-15', 26549340340224, 19538879971328, 91, 234075717632, 'node-15'),('total-resources-16', 7332582916096, 20592220700672, 111, 117037858816, 'node-16'),('total-resources-17', 18444737052672, 26187489345536, 30, 10737418240, 'node-17'),('total-resources-18', 11650098790400, 31593779429376, 124, 226559524864, 'node-18'),('total-resources-19', 32301375291392, 1891933093888, 99, 60129542144, 'node-19'),('total-resources-20', 110595407872, 2985002270720, 76, 211527139328, 'node-20'),('total-resources-21', 2670395916288, 16502338093056, 27, 208305913856, 'node-21'),('total-resources-22', 2879775571968, 23745800437760, 68, 88046829568, 'node-22'),('total-resources-23', 19902878449664, 8806830440448, 60, 77309411328, 'node-23'),('total-resources-24', 11253888057344, 7937099563008, 86, 155692564480, 'node-24'),('total-resources-25', 15465103491072, 5056250249216, 23, 138512695296, 'node-25'),('total-resources-26', 22104049188864, 32788854079488, 123, 151397597184, 'node-26'),('total-resources-27', 751619276800, 3094523936768, 66, 37580963840, 'node-27'),('total-resources-28', 3885871661056, 32319628902400, 106, 252329328640, 'node-28'),('total-resources-29', 30061549846528, 6620692086784, 49, 267361714176, 'node-29'),('total-resources-30', 32712618409984, 9654012739584, 90, 64424509440, 'node-30'),('total-resources-31', 9178345111552, 9512278818816, 86, 105226698752, 'node-31'),('total-resources-32', 18198850174976, 7758858420224, 58, 141733920768, 'node-32'),('total-resources-33', 23402203054080, 7757784678400, 90, 119185342464, 'node-33'),('total-resources-34', 10951092862976, 18635863097344, 25, 28991029248, 'node-34'),('total-resources-35', 13943611326464, 21594021822464, 121, 214748364800, 'node-35'),('total-resources-36', 1011464798208, 27553288945664, 62, 184683593728, 'node-36'),('total-resources-37', 5415953760256, 24968792375296, 118, 103079215104, 'node-37'),('total-resources-38', 10077067018240, 11607149117440, 102, 100931731456, 'node-38'),('total-resources-39', 1070520598528, 19636590477312, 6, 125627793408, 'node-39'),('total-resources-40', 3227667922944, 10566693289984, 56, 37580963840, 'node-40'),('total-resources-41', 28948079575040, 19440095723520, 87, 248034361344, 'node-41'),('total-resources-42', 11568494411776, 2320356081664, 73, 206158430208, 'node-42'),('total-resources-43', 7604239597568, 23701777022976, 68, 226559524864, 'node-43'),('total-resources-44', 14481555980288, 2017560887296, 9, 84825604096, 'node-44'),('total-resources-45', 12447888965632, 29473139326976, 63, 172872433664, 'node-45'),('total-resources-46', 12298638852096, 23001697353728, 119, 110595407872, 'node-46'),('total-resources-47', 3997540810752, 23261542875136, 35, 50465865728, 'node-47'),('total-resources-48', 14602888806400, 27783069696000, 61, 261993005056, 'node-48'),('total-resources-49', 22705344610304, 9788230467584, 125, 253403070464, 'node-49'),('total-resources-50', 2736967909376, 27941983485952, 83, 245886877696, 'node-50'),('total-resources-51', 4908073877504, 29229399932928, 64, 142807662592, 'node-51'),('total-resources-52', 3519725699072, 23469848788992, 54, 172872433664, 'node-52'),('total-resources-53', 15105399980032, 5178656817152, 107, 217969590272, 'node-53'),('total-resources-54', 7588133470208, 25578677731328, 59, 107374182400, 'node-54'),('total-resources-55', 3531536859136, 28006407995392, 99, 221190815744, 'node-55'),('total-resources-56', 28052578893824, 17354889101312, 127, 76235669504, 'node-56'),('total-resources-57', 22231824465920, 236223201280, 84, 252329328640, 'node-57'),('total-resources-58', 17028471586816, 18462990663680, 59, 68719476736, 'node-58'),('total-resources-59', 25781614936064, 15385646596096, 128, 111669149696, 'node-59'),('total-resources-60', 2547989348352, 3841848246272, 77, 233001975808, 'node-60'),('total-resources-61', 9592809455616, 26273388691456, 43, 153545080832, 'node-61'),('total-resources-62', 8613556912128, 30975304138752, 26, 188978561024, 'node-62'),('total-resources-63', 27231166398464, 26512833118208, 47, 234075717632, 'node-63'),('total-resources-64', 9407052120064, 13889924235264, 70, 6442450944, 'node-64'),('total-resources-65', 5775657271296, 14907831484416, 40, 148176371712, 'node-65'),('total-resources-66', 5252745003008, 28749437337600, 62, 157840048128, 'node-66'),('total-resources-67', 20593294442496, 14347338252288, 13, 176093659136, 'node-67'),('total-resources-68', 23997056024576, 16372415332352, 24, 75161927680, 'node-68'),('total-resources-69', 6947109601280, 22283364073472, 91, 211527139328, 'node-69'),('total-resources-70', 9656160223232, 28780575850496, 11, 99857989632, 'node-70'),('total-resources-71', 13559211753472, 29743722266624, 107, 96636764160, 'node-71'),('total-resources-72', 24049669373952, 18715319992320, 101, 198642237440, 'node-72'),('total-resources-73', 27343909289984, 15853798031360, 75, 112742891520, 'node-73'),('total-resources-74', 31454192992256, 28235115003904, 117, 229780750336, 'node-74'),('total-resources-75', 25810605965312, 11099269234688, 98, 208305913856, 'node-75'),('total-resources-76', 21202106056704, 19967302959104, 117, 38654705664, 'node-76'),('total-resources-77', 5394478923776, 11277510377472, 77, 67645734912, 'node-77'),('total-resources-78', 19497004040192, 1333587345408, 115, 88046829568, 'node-78'),('total-resources-79', 23476291239936, 25378961752064, 29, 5368709120, 'node-79'),('total-resources-80', 16404627587072, 19736448466944, 26, 182536110080, 'node-80'),('total-resources-81', 4435627474944, 9266391941120, 5, 214748364800, 'node-81'),('total-resources-82', 28368258990080, 16752519938048, 120, 99857989632, 'node-82'),('total-resources-83', 12140798803968, 10242423259136, 80, 139586437120, 'node-83'),('total-resources-84', 9598178164736, 1232655613952, 100, 134217728000, 'node-84'),('total-resources-85', 193273528320, 27474905792512, 110, 37580963840, 'node-85'),('total-resources-86', 6397353787392, 2123861327872, 24, 186831077376, 'node-86'),('total-resources-87', 24337432182784, 32739461955584, 102, 49392123904, 'node-87'),('total-resources-88', 24311662379008, 12582106693632, 49, 74088185856, 'node-88'),('total-resources-89', 1356135923712, 24626268733440, 78, 261993005056, 'node-89'),('total-resources-90', 19246822195200, 17885317562368, 45, 146028888064, 'node-90'),('total-resources-91', 6885906317312, 13436805185536, 82, 179314884608, 'node-91'),('total-resources-92', 21578989436928, 15539191676928, 38, 11811160064, 'node-92'),('total-resources-93', 4869419171840, 24744380334080, 32, 153545080832, 'node-93'),('total-resources-94', 13693429481472, 6295348314112, 46, 42949672960, 'node-94'),('total-resources-95', 17577153658880, 6305011990528, 20, 117037858816, 'node-95'),('total-resources-96', 21985937588224, 2716566814720, 41, 180388626432, 'node-96'),('total-resources-97', 28255516098560, 3358664425472, 93, 209379655680, 'node-97'),('total-resources-98', 4565550235648, 12735651774464, 57, 23622320128, 'node-98'),('total-resources-99', 6125697105920, 4772782407680, 92, 188978561024, 'node-99'),('total-resources-100', 5869072809984, 11314017599488, 30, 164282499072, 'node-100'),('total-resources-101', 10873783451648, 14141179822080, 53, 117037858816, 'node-101'),('total-resources-102', 8874476175360, 26648124588032, 57, 147102629888, 'node-102'),('total-resources-103', 23656679866368, 8332236554240, 27, 150323855360, 'node-103'),('total-resources-104', 17809081892864, 8145405476864, 14, 266287972352, 'node-104'),('total-resources-105', 14639396028416, 5217311522816, 117, 214748364800, 'node-105'),('total-resources-106', 6512244162560, 20768314359808, 15, 33285996544, 'node-106'),('total-resources-107', 32340029997056, 14552422940672, 72, 156766306304, 'node-107'),('total-resources-108', 18062484963328, 1919850381312, 24, 152471339008, 'node-108'),('total-resources-109', 9676561317888, 23026393415680, 88, 114890375168, 'node-109'),('total-resources-110', 22238266916864, 24758338977792, 74, 115964116992, 'node-110'),('total-resources-111', 11362335981568, 3687229423616, 105, 227633266688, 'node-111'),('total-resources-112', 5714453987328, 10296110350336, 39, 265214230528, 'node-112'),('total-resources-113', 31714038513664, 32627792805888, 60, 216895848448, 'node-113'),('total-resources-114', 16899622567936, 15175193198592, 32, 75161927680, 'node-114'),('total-resources-115', 22129818992640, 8268885786624, 58, 220117073920, 'node-115'),('total-resources-116', 31706522320896, 8093865869312, 105, 59055800320, 'node-116'),('total-resources-117', 25513179480064, 24968792375296, 120, 64424509440, 'node-117'),('total-resources-118', 21314848948224, 6800006971392, 110, 10737418240, 'node-118'),('total-resources-119', 16850230444032, 26261577531392, 97, 224412041216, 'node-119'),('total-resources-120', 3987877134336, 8675833937920, 12, 143881404416, 'node-120'),('total-resources-121', 32422708117504, 631360192512, 108, 169651208192, 'node-121'),('total-resources-122', 4667555708928, 12665858555904, 104, 195421011968, 'node-122'),('total-resources-123', 21865678503936, 27205396594688, 7, 180388626432, 'node-123'),('total-resources-124', 1861868322816, 21935471722496, 122, 30064771072, 'node-124'),('total-resources-125', 30394409811968, 3748432707584, 56, 254476812288, 'node-125'),('total-resources-126', 25276956278784, 580894326784, 77, 13958643712, 'node-126'),('total-resources-127', 19450833141760, 1655709892608, 37, 183609851904, 'node-127'),('total-resources-128', 18371722608640, 16491600674816, 29, 31138512896, 'node-128'),('total-resources-129', 6249177415680, 20949776728064, 117, 202937204736, 'node-129'),('total-resources-130', 28431609757696, 9856949944320, 102, 222264557568, 'node-130'),('total-resources-131', 15772193652736, 15180561907712, 47, 11811160064, 'node-131'),('total-resources-132', 8362301325312, 12452183932928, 35, 106300440576, 'node-132'),('total-resources-133', 30893699760128, 30407294713856, 49, 155692564480, 'node-133'),('total-resources-134', 10162966364160, 15721727787008, 51, 230854492160, 'node-134'),('total-resources-135', 32961726513152, 15898895187968, 90, 85899345920, 'node-135'),('total-resources-136', 26485989572608, 22281216589824, 29, 139586437120, 'node-136'),('total-resources-137', 19427210821632, 31843961274368, 109, 224412041216, 'node-137'),('total-resources-138', 9186935046144, 23340999770112, 111, 249108103168, 'node-138'),('total-resources-139', 8123930640384, 20068234690560, 65, 52613349376, 'node-139'),('total-resources-140', 21563957051392, 21475910221824, 97, 41875931136, 'node-140'),('total-resources-141', 3196529410048, 29363617660928, 94, 243739394048, 'node-141'),('total-resources-142', 16606491049984, 31839666307072, 49, 177167400960, 'node-142'),('total-resources-143', 15901042671616, 27922656133120, 17, 241591910400, 'node-143'),('total-resources-144', 22391811997696, 8205535019008, 110, 46170898432, 'node-144'),('total-resources-145', 22181358600192, 16022375497728, 118, 225485783040, 'node-145'),('total-resources-146', 6029060341760, 4155380858880, 33, 229780750336, 'node-146'),('total-resources-147', 15880641576960, 30397631037440, 37, 206158430208, 'node-147'),('total-resources-148', 3628173623296, 14877766713344, 12, 254476812288, 'node-148'),('total-resources-149', 16916802437120, 9427453214720, 33, 126701535232, 'node-149'),('total-resources-150', 29604135829504, 11468636422144, 32, 28991029248, 'node-150'),('total-resources-151', 10114647982080, 12694849585152, 22, 171798691840, 'node-151'),('total-resources-152', 5208721588224, 31113816834048, 42, 68719476736, 'node-152'),('total-resources-153', 12177306025984, 18515604013056, 63, 204010946560, 'node-153'),('total-resources-154', 11630771437568, 5950677188608, 96, 103079215104, 'node-154'),('total-resources-155', 10214505971712, 7901666082816, 14, 259845521408, 'node-155'),('total-resources-156', 20115479330816, 11560978219008, 96, 241591910400, 'node-156'),('total-resources-157', 5802500816896, 4823248273408, 77, 68719476736, 'node-157'),('total-resources-158', 13050258128896, 979252543488, 49, 7516192768, 'node-158'),('total-resources-159', 30692910039040, 21028159881216, 45, 106300440576, 'node-159'),('total-resources-160', 26299158495232, 15994458210304, 99, 120259084288, 'node-160'),('total-resources-161', 12962211299328, 19937238188032, 82, 186831077376, 'node-161'),('total-resources-162', 4860829237248, 2823940997120, 100, 28991029248, 'node-162'),('total-resources-163', 14724221632512, 27821724401664, 92, 206158430208, 'node-163'),('total-resources-164', 26530012987392, 26098368774144, 37, 204010946560, 'node-164'),('total-resources-165', 32613834162176, 30939870658560, 10, 260919263232, 'node-165'),('total-resources-166', 18015240323072, 2136746229760, 86, 209379655680, 'node-166'),('total-resources-167', 2758442745856, 11593190473728, 58, 196494753792, 'node-167'),('total-resources-168', 7662221656064, 10063108374528, 79, 153545080832, 'node-168'),('total-resources-169', 9087077056512, 6657199308800, 54, 227633266688, 'node-169'),('total-resources-170', 24450175074304, 28023587864576, 118, 207232172032, 'node-170'),('total-resources-171', 28435904724992, 270582939648, 24, 249108103168, 'node-171'),('total-resources-172', 27026081710080, 11803643871232, 22, 190052302848, 'node-172'),('total-resources-173', 4042637967360, 17584669851648, 89, 216895848448, 'node-173'),('total-resources-174', 22824529952768, 16534550347776, 21, 197568495616, 'node-174'),('total-resources-175', 20156281520128, 4190814339072, 37, 237296943104, 'node-175'),('total-resources-176', 16142634582016, 12270721564672, 60, 54760833024, 'node-176'),('total-resources-177', 5390183956480, 13888850493440, 88, 243739394048, 'node-177'),('total-resources-178', 10382009696256, 16086800007168, 95, 156766306304, 'node-178'),('total-resources-179', 6101001043968, 1242319290368, 4, 59055800320, 'node-179'),('total-resources-180', 11081015623680, 22499186180096, 28, 193273528320, 'node-180'),('total-resources-181', 24731495432192, 19527068811264, 19, 10737418240, 'node-181'),('total-resources-182', 13663364710400, 9893457166336, 111, 147102629888, 'node-182'),('total-resources-183', 21434034290688, 31846108758016, 34, 79456894976, 'node-183'),('total-resources-184', 17525614051328, 21662741299200, 12, 48318382080, 'node-184'),('total-resources-185', 23854248361984, 18734647345152, 117, 271656681472, 'node-185'),('total-resources-186', 19862076260352, 26152055865344, 99, 162135015424, 'node-186'),('total-resources-187', 24845312065536, 8818641600512, 77, 220117073920, 'node-187'),('total-resources-188', 16902843793408, 24237574193152, 120, 4294967296, 'node-188'),('total-resources-189', 8499740278784, 20968030339072, 66, 227633266688, 'node-189'),('total-resources-190', 16522739187712, 5466419625984, 68, 55834574848, 'node-190'),('total-resources-191', 12205223313408, 31211527340032, 70, 268435456000, 'node-191'),('total-resources-192', 1534377066496, 22567905656832, 49, 225485783040, 'node-192'),('total-resources-193', 27391153930240, 13110387671040, 112, 59055800320, 'node-193'),('total-resources-194', 32396938313728, 3693671874560, 122, 51539607552, 'node-194'),('total-resources-195', 2342904659968, 18012019097600, 10, 181462368256, 'node-195'),('total-resources-196', 12130061385728, 15329812021248, 68, 225485783040, 'node-196'),('total-resources-197', 30033632559104, 2224793059328, 110, 31138512896, 'node-197'),('total-resources-198', 1096290402304, 24537148162048, 100, 40802189312, 'node-198'),('total-resources-199', 896574423040, 4889820266496, 29, 32212254720, 'node-199'),('total-resources-200', 27692875382784, 6038724018176, 79, 201863462912, 'node-200'),('total-resources-201', 24932285153280, 18037788901376, 10, 259845521408, 'node-201'),('total-resources-202', 32853278588928, 7653631721472, 93, 104152956928, 'node-202'),('total-resources-203', 18245021073408, 11209864642560, 119, 136365211648, 'node-203'),('total-resources-204', 1025423441920, 28296318287872, 90, 34359738368, 'node-204'),('total-resources-205', 5077725085696, 24160264781824, 57, 170724950016, 'node-205'),('total-resources-206', 14381697990656, 20548197285888, 116, 251255586816, 'node-206'),('total-resources-207', 23899345518592, 340376158208, 38, 204010946560, 'node-207'),('total-resources-208', 16244640055296, 26925149978624, 108, 259845521408, 'node-208'),('total-resources-209', 2521145802752, 30580167147520, 49, 55834574848, 'node-209'),('total-resources-210', 10219874680832, 24870008127488, 57, 100931731456, 'node-210'),('total-resources-211', 23961622544384, 2508260900864, 100, 49392123904, 'node-211'),('total-resources-212', 21804475219968, 28756953530368, 85, 250181844992, 'node-212'),('total-resources-213', 6038724018176, 21940840431616, 113, 172872433664, 'node-213'),('total-resources-214', 13195213275136, 3572339048448, 123, 165356240896, 'node-214'),('total-resources-215', 8481486667776, 2956011241472, 59, 60129542144, 'node-215'),('total-resources-216', 11462193971200, 7056631267328, 115, 210453397504, 'node-216'),('total-resources-217', 22553947013120, 18270790877184, 18, 33285996544, 'node-217'),('total-resources-218', 9308267872256, 6830071742464, 50, 256624295936, 'node-218'),('total-resources-219', 10054518439936, 21860309794816, 77, 78383153152, 'node-219'),('total-resources-220', 8607114461184, 20390357237760, 95, 70866960384, 'node-220'),('total-resources-221', 31738734575616, 9375913607168, 38, 38654705664, 'node-221'),('total-resources-222', 2163589775360, 30637075464192, 96, 178241142784, 'node-222'),('total-resources-223', 3736621547520, 10791105331200, 56, 217969590272, 'node-223'),('total-resources-224', 9400609669120, 3103113871360, 78, 198642237440, 'node-224'),('total-resources-225', 20572893347840, 3573412790272, 46, 156766306304, 'node-225'),('total-resources-226', 10962904023040, 4730906476544, 118, 39728447488, 'node-226'),('total-resources-227', 27822798143488, 15265387511808, 34, 100931731456, 'node-227'),('total-resources-228', 21493090091008, 3152505995264, 94, 129922760704, 'node-228'),('total-resources-229', 28527172780032, 31671088840704, 98, 142807662592, 'node-229'),('total-resources-230', 10060960890880, 5453534724096, 39, 83751862272, 'node-230'),('total-resources-231', 9197672464384, 21284784177152, 128, 63350767616, 'node-231'),('total-resources-232', 32394790830080, 32632087773184, 5, 271656681472, 'node-232'),('total-resources-233', 21572546985984, 644245094400, 109, 187904819200, 'node-233'),('total-resources-234', 5757403660288, 30349312655360, 108, 117037858816, 'node-234'),('total-resources-235', 8291434364928, 3391950422016, 103, 182536110080, 'node-235'),('total-resources-236', 2145336164352, 17257178595328, 117, 171798691840, 'node-236'),('total-resources-237', 1622423896064, 18956911902720, 101, 244813135872, 'node-237'),('total-resources-238', 18182744047616, 22973780066304, 5, 165356240896, 'node-238'),('total-resources-239', 31460635443200, 19651622862848, 7, 211527139328, 'node-239'),('total-resources-240', 26099442515968, 7628935659520, 55, 115964116992, 'node-240'),('total-resources-241', 25283398729728, 20743618297856, 117, 109521666048, 'node-241'),('total-resources-242', 24760486461440, 30632780496896, 39, 259845521408, 'node-242'),('total-resources-243', 10524817358848, 10130754109440, 118, 5368709120, 'node-243'),('total-resources-244', 20219632287744, 29671781564416, 11, 257698037760, 'node-244'),('total-resources-245', 20013473857536, 27452357214208, 123, 226559524864, 'node-245'),('total-resources-246', 24696061952000, 16490526932992, 21, 233001975808, 'node-246'),('total-resources-247', 20275466862592, 12479027478528, 8, 207232172032, 'node-247'),('total-resources-248', 3865470566400, 30253749633024, 95, 95563022336, 'node-248'),('total-resources-249', 19768660721664, 7578469793792, 91, 237296943104, 'node-249'),('total-resources-250', 8175470247936, 21431886807040, 85, 99857989632, 'node-250'),('total-resources-251', 1225139421184, 2552284315648, 31, 81604378624, 'node-251'),('total-resources-252', 32527934816256, 14583561453568, 128, 252329328640, 'node-252'),('total-resources-253', 1221918195712, 21713207164928, 42, 258771779584, 'node-253'),('total-resources-254', 28181427912704, 9073118412800, 20, 17179869184, 'node-254'),('total-resources-255', 14626511126528, 9951439224832, 126, 97710505984, 'node-255'),('total-resources-256', 12757126610944, 10263898095616, 66, 251255586816, 'node-256'),('total-resources-257', 5274219839488, 3872986759168, 36, 188978561024, 'node-257'),('total-resources-258', 23225035653120, 7082401071104, 128, 89120571392, 'node-258'),('total-resources-259', 3006477107200, 9908489551872, 116, 92341796864, 'node-259'),('total-resources-260', 12925704077312, 24294482509824, 18, 66571993088, 'node-260'),('total-resources-261', 7613903273984, 7599944630272, 16, 59055800320, 'node-261'),('total-resources-262', 32745904406528, 2938831372288, 107, 103079215104, 'node-262'),('total-resources-263', 22214644596736, 7707318812672, 46, 260919263232, 'node-263'),('total-resources-264', 28152436883456, 11680163561472, 72, 117037858816, 'node-264'),('total-resources-265', 19851338842112, 7423850971136, 50, 175019917312, 'node-265'),('total-resources-266', 24130200010752, 4240206462976, 112, 263066746880, 'node-266'),('total-resources-267', 32299227807744, 19321984122880, 108, 106300440576, 'node-267'),('total-resources-268', 6621765828608, 456340275200, 123, 48318382080, 'node-268'),('total-resources-269', 9012988870656, 15819438292992, 10, 24696061952, 'node-269'),('total-resources-270', 231928233984, 12250320470016, 50, 11811160064, 'node-270'),('total-resources-271', 28683939086336, 22849226014720, 81, 267361714176, 'node-271'),('total-resources-272', 5800353333248, 883689521152, 91, 11811160064, 'node-272'),('total-resources-273', 6635724472320, 366145961984, 52, 61203283968, 'node-273'),('total-resources-274', 7827577896960, 30078729715712, 46, 230854492160, 'node-274'),('total-resources-275', 14408541536256, 27311697035264, 18, 253403070464, 'node-275'),('total-resources-276', 16551730216960, 22058952032256, 123, 175019917312, 'node-276'),('total-resources-277', 32201517301760, 3681860714496, 98, 243739394048, 'node-277'),('total-resources-278', 10867341000704, 21547850924032, 83, 52613349376, 'node-278'),('total-resources-279', 6736656203776, 444529115136, 47, 209379655680, 'node-279'),('total-resources-280', 32334661287936, 9868761104384, 71, 46170898432, 'node-280'),('total-resources-281', 10104984305664, 3780644962304, 99, 40802189312, 'node-281'),('total-resources-282', 19374597472256, 24035710730240, 97, 194347270144, 'node-282'),('total-resources-283', 29318520504320, 32205812269056, 53, 132070244352, 'node-283'),('total-resources-284', 32593433067520, 1113470271488, 88, 104152956928, 'node-284'),('total-resources-285', 26521423052800, 20855287447552, 75, 56908316672, 'node-285'),('total-resources-286', 19286550642688, 31179315085312, 68, 128849018880, 'node-286'),('total-resources-287', 11364483465216, 32704028475392, 19, 67645734912, 'node-287'),('total-resources-288', 31700079869952, 23816667398144, 70, 215822106624, 'node-288'),('total-resources-289', 18547816267776, 1273457803264, 15, 11811160064, 'node-289'),('total-resources-290', 18655190450176, 31704374837248, 20, 155692564480, 'node-290'),('total-resources-291', 29698625110016, 19847043874816, 72, 21474836480, 'node-291'),('total-resources-292', 7792144416768, 14683419443200, 121, 91268055040, 'node-292'),('total-resources-293', 4187593113600, 23460185112576, 92, 227633266688, 'node-293'),('total-resources-294', 30317100400640, 30573724696576, 59, 209379655680, 'node-294'),('total-resources-295', 11741366845440, 26204669214720, 66, 128849018880, 'node-295'),('total-resources-296', 17732846223360, 5900211322880, 7, 112742891520, 'node-296'),('total-resources-297', 32564442038272, 2945273823232, 105, 234075717632, 'node-297'),('total-resources-298', 29074781110272, 8638252974080, 38, 135291469824, 'node-298'),('total-resources-299', 6005438021632, 9175123886080, 99, 24696061952, 'node-299'),('total-resources-300', 26767309930496, 4825395757056, 95, 19327352832, 'node-300'),('total-resources-301', 15491947036672, 12020539719680, 26, 178241142784, 'node-301'),('total-resources-302', 17854179049472, 25589415149568, 56, 17179869184, 'node-302'),('total-resources-303', 25402584072192, 12284680208384, 94, 195421011968, 'node-303'),('total-resources-304', 31872952303616, 32141387759616, 52, 221190815744, 'node-304'),('total-resources-305', 3479997251584, 23564338069504, 82, 148176371712, 'node-305'),('total-resources-306', 23851027136512, 31918049460224, 5, 52613349376, 'node-306'),('total-resources-307', 26036091748352, 31760209412096, 118, 219043332096, 'node-307'),('total-resources-308', 23159537401856, 20694226173952, 69, 168577466368, 'node-308'),('total-resources-309', 12306155044864, 455266533376, 87, 195421011968, 'node-309'),('total-resources-310', 23909009195008, 5551245230080, 85, 178241142784, 'node-310'),('total-resources-311', 12604655271936, 27596238618624, 32, 152471339008, 'node-311'),('total-resources-312', 22267257946112, 24000277250048, 18, 80530636800, 'node-312'),('total-resources-313', 10300405317632, 2173253451776, 16, 156766306304, 'node-313'),('total-resources-314', 26935887396864, 17383880130560, 14, 164282499072, 'node-314'),('total-resources-315', 1036160860160, 27884001427456, 102, 97710505984, 'node-315'),('total-resources-316', 13200581984256, 19533511262208, 124, 256624295936, 'node-316'),('total-resources-317', 29033978920960, 20054276046848, 67, 178241142784, 'node-317'),('total-resources-318', 2599528955904, 11025181048832, 116, 79456894976, 'node-318'),('total-resources-319', 8135741800448, 5808943267840, 59, 134217728000, 'node-319'),('total-resources-320', 25447681228800, 4969277161472, 76, 256624295936, 'node-320'),('total-resources-321', 2288143826944, 797790175232, 42, 270582939648, 'node-321'),('total-resources-322', 17818745569280, 28101971017728, 21, 151397597184, 'node-322'),('total-resources-323', 16778289741824, 3856880631808, 10, 88046829568, 'node-323'),('total-resources-324', 24611236347904, 3815004700672, 106, 137438953472, 'node-324'),('total-resources-325', 10746008174592, 3954591137792, 118, 95563022336, 'node-325'),('total-resources-326', 18367427641344, 13234941722624, 44, 54760833024, 'node-326'),('total-resources-327', 5647881994240, 8193723858944, 91, 258771779584, 'node-327'),('total-resources-328', 6046240210944, 30879741116416, 100, 264140488704, 'node-328'),('total-resources-329', 27462020890624, 8439610736640, 17, 8589934592, 'node-329'),('total-resources-330', 21721797099520, 29437705846784, 57, 214748364800, 'node-330'),('total-resources-331', 8036957552640, 15805479649280, 91, 56908316672, 'node-331'),('total-resources-332', 28906203643904, 31847182499840, 61, 39728447488, 'node-332'),('total-resources-333', 2091649073152, 7748121001984, 117, 158913789952, 'node-333'),('total-resources-334', 23637352513536, 4391604060160, 19, 19327352832, 'node-334'),('total-resources-335', 16450798485504, 29311004311552, 54, 42949672960, 'node-335'),('total-resources-336', 32391569604608, 12844099698688, 57, 129922760704, 'node-336'),('total-resources-337', 25745107714048, 19327352832000, 23, 127775277056, 'node-337'),('total-resources-338', 28600187224064, 10325101379584, 68, 15032385536, 'node-338'),('total-resources-339', 6614249635840, 21743271936000, 106, 172872433664, 'node-339'),('total-resources-340', 24411520368640, 13868449398784, 73, 233001975808, 'node-340'),('total-resources-341', 24143084912640, 28673201668096, 87, 252329328640, 'node-341'),('total-resources-342', 22517439791104, 24698209435648, 23, 115964116992, 'node-342'),('total-resources-343', 27644557000704, 24300924960768, 39, 22548578304, 'node-343'),('total-resources-344', 28618440835072, 9351217545216, 90, 192199786496, 'node-344'),('total-resources-345', 31105226899456, 10913511899136, 92, 237296943104, 'node-345'),('total-resources-346', 18103287152640, 32371168509952, 4, 10737418240, 'node-346'),('total-resources-347', 6212670193664, 18059263737856, 6, 235149459456, 'node-347'),('total-resources-348', 16898548826112, 31477815312384, 53, 130996502528, 'node-348'),('total-resources-349', 18703508832256, 9695888670720, 62, 249108103168, 'node-349'),('total-resources-350', 25688199397376, 14001593384960, 6, 198642237440, 'node-350'),('total-resources-351', 3980360941568, 28176059203584, 100, 76235669504, 'node-351'),('total-resources-352', 16585016213504, 26269093724160, 126, 92341796864, 'node-352'),('total-resources-353', 9538048622592, 25769803776000, 18, 168577466368, 'node-353'),('total-resources-354', 21350282428416, 19475529203712, 24, 103079215104, 'node-354'),('total-resources-355', 31403727126528, 3925600108544, 90, 60129542144, 'node-355'),('total-resources-356', 31996432613376, 27972048257024, 59, 6442450944, 'node-356'),('total-resources-357', 16840566767616, 31648540262400, 94, 38654705664, 'node-357'),('total-resources-358', 3365106876416, 21565030793216, 53, 127775277056, 'node-358'),('total-resources-359', 1604170285056, 5263482421248, 62, 71940702208, 'node-359'),('total-resources-360', 31091268255744, 3219077988352, 120, 17179869184, 'node-360'),('total-resources-361', 29109140848640, 3380139261952, 71, 93415538688, 'node-361'),('total-resources-362', 7991860396032, 16939351015424, 62, 30064771072, 'node-362'),('total-resources-363', 9345848836096, 23279796486144, 120, 140660178944, 'node-363'),('total-resources-364', 28315645640704, 19573239709696, 44, 80530636800, 'node-364'),('total-resources-365', 13116830121984, 23066121863168, 35, 250181844992, 'node-365'),('total-resources-366', 17775795896320, 16110422327296, 128, 241591910400, 'node-366'),('total-resources-367', 16728897617920, 15731391463424, 64, 119185342464, 'node-367'),('total-resources-368', 3354369458176, 5746666242048, 80, 166429982720, 'node-368'),('total-resources-369', 14697378086912, 22405770641408, 82, 134217728000, 'node-369'),('total-resources-370', 11733850652672, 12474732511232, 4, 88046829568, 'node-370'),('total-resources-371', 22312355102720, 13271448944640, 48, 4294967296, 'node-371'),('total-resources-372', 2677912109056, 8548058660864, 50, 30064771072, 'node-372'),('total-resources-373', 17028471586816, 23655606124544, 47, 96636764160, 'node-373'),('total-resources-374', 14754286403584, 27254788718592, 71, 207232172032, 'node-374'),('total-resources-375', 14280766259200, 26018911879168, 12, 237296943104, 'node-375'),('total-resources-376', 3792456122368, 9183713820672, 102, 199715979264, 'node-376'),('total-resources-377', 25875030474752, 29913373474816, 81, 162135015424, 'node-377'),('total-resources-378', 7398081167360, 3237331599360, 124, 119185342464, 'node-378'),('total-resources-379', 23809151205376, 9710921056256, 25, 54760833024, 'node-379'),('total-resources-380', 11098195492864, 2388001816576, 27, 9663676416, 'node-380'),('total-resources-381', 10567767031808, 29827474128896, 41, 166429982720, 'node-381'),('total-resources-382', 9360881221632, 12033424621568, 10, 50465865728, 'node-382'),('total-resources-383', 3096671420416, 20038169919488, 7, 37580963840, 'node-383'),('total-resources-384', 26820997021696, 3372623069184, 11, 190052302848, 'node-384'),('total-resources-385', 29779155746816, 9250285813760, 47, 192199786496, 'node-385'),('total-resources-386', 13859859464192, 20107963138048, 91, 248034361344, 'node-386'),('total-resources-387', 6369436499968, 29265907154944, 58, 115964116992, 'node-387'),('total-resources-388', 8152921669632, 21038897299456, 119, 130996502528, 'node-388'),('total-resources-389', 5686536699904, 1479616233472, 61, 64424509440, 'node-389'),('total-resources-390', 16561393893376, 24472723652608, 33, 168577466368, 'node-390'),('total-resources-391', 24985972244480, 20295867957248, 68, 143881404416, 'node-391'),('total-resources-392', 2886218022912, 394063249408, 69, 186831077376, 'node-392'),('total-resources-393', 9506910109696, 7077032361984, 8, 153545080832, 'node-393'),('total-resources-394', 16819091931136, 18826989142016, 58, 138512695296, 'node-394'),('total-resources-395', 28706487664640, 25085830234112, 15, 18253611008, 'node-395'),('total-resources-396', 12039867072512, 9124658020352, 118, 151397597184, 'node-396'),('total-resources-397', 15772193652736, 25686051913728, 114, 57982058496, 'node-397'),('total-resources-398', 8938900684800, 27225797689344, 97, 127775277056, 'node-398'),('total-resources-399', 3627099881472, 23702850764800, 99, 268435456000, 'node-399'),('total-resources-400', 15141907202048, 11679089819648, 105, 170724950016, 'node-400'),('total-resources-401', 29170344132608, 2885144281088, 55, 127775277056, 'node-401'),('total-resources-402', 28727962501120, 27324581937152, 47, 161061273600, 'node-402'),('total-resources-403', 27498528112640, 28649579347968, 63, 221190815744, 'node-403'),('total-resources-404', 688268509184, 10661182570496, 68, 268435456000, 'node-404'),('total-resources-405', 10550587162624, 15348065632256, 21, 9663676416, 'node-405'),('total-resources-406', 16143708323840, 20437601878016, 82, 257698037760, 'node-406'),('total-resources-407', 18475875565568, 6096706076672, 101, 147102629888, 'node-407'),('total-resources-408', 30806726672384, 7788923191296, 128, 272730423296, 'node-408'),('total-resources-409', 21860309794816, 30872224923648, 97, 265214230528, 'node-409'),('total-resources-410', 31587336978432, 19064286085120, 42, 192199786496, 'node-410'),('total-resources-411', 6747393622016, 28589449805824, 73, 153545080832, 'node-411'),('total-resources-412', 20931523117056, 29263759671296, 36, 5368709120, 'node-412'),('total-resources-413', 23216445718528, 5908801257472, 108, 137438953472, 'node-413'),('total-resources-414', 19165217816576, 2301028728832, 44, 188978561024, 'node-414'),('total-resources-415', 26191784312832, 20085414559744, 27, 119185342464, 'node-415'),('total-resources-416', 28052578893824, 20796231647232, 117, 225485783040, 'node-416'),('total-resources-417', 19785840590848, 30208652476416, 66, 79456894976, 'node-417'),('total-resources-418', 31551903498240, 6818260582400, 44, 27917287424, 'node-418'),('total-resources-419', 13699871932416, 2448131358720, 4, 267361714176, 'node-419'),('total-resources-420', 28200755265536, 17690970292224, 93, 86973087744, 'node-420'),('total-resources-421', 7368016396288, 2322503565312, 120, 226559524864, 'node-421'),('total-resources-422', 11737071878144, 25975962206208, 85, 125627793408, 'node-422'),('total-resources-423', 12153683705856, 26767309930496, 42, 98784247808, 'node-423'),('total-resources-424', 20310900342784, 32259499360256, 63, 28991029248, 'node-424'),('total-resources-425', 6106369753088, 26449482350592, 123, 194347270144, 'node-425'),('total-resources-426', 24157043556352, 7820061704192, 52, 184683593728, 'node-426'),('total-resources-427', 20226074738688, 9774271823872, 84, 273804165120, 'node-427'),('total-resources-428', 7490422964224, 29074781110272, 8, 17179869184, 'node-428'),('total-resources-429', 2779917582336, 2829309706240, 62, 34359738368, 'node-429'),('total-resources-430', 6667936727040, 20134806683648, 113, 40802189312, 'node-430'),('total-resources-431', 9383429799936, 20651276500992, 51, 35433480192, 'node-431'),('total-resources-432', 9542343589888, 26079041421312, 30, 132070244352, 'node-432'),('total-resources-433', 28431609757696, 7357278978048, 122, 129922760704, 'node-433'),('total-resources-434', 11699490914304, 10917806866432, 31, 253403070464, 'node-434'),('total-resources-435', 19228568584192, 14365591863296, 77, 30064771072, 'node-435'),('total-resources-436', 3781718704128, 23058605670400, 103, 274877906944, 'node-436'),('total-resources-437', 23984171122688, 11987253723136, 29, 167503724544, 'node-437'),('total-resources-438', 30078729715712, 20397873430528, 30, 162135015424, 'node-438'),('total-resources-439', 21800180252672, 6075231240192, 101, 164282499072, 'node-439'),('total-resources-440', 29591250927616, 18287970746368, 63, 153545080832, 'node-440'),('total-resources-441', 18283675779072, 31061203484672, 27, 127775277056, 'node-441'),('total-resources-442', 18150531792896, 22196390985728, 5, 210453397504, 'node-442'),('total-resources-443', 5468567109632, 16025596723200, 127, 23622320128, 'node-443'),('total-resources-444', 1775968976896, 32671816220672, 4, 21474836480, 'node-444'),('total-resources-445', 17871358918656, 27240830074880, 128, 168577466368, 'node-445'),('total-resources-446', 28627030769664, 13874891849728, 52, 265214230528, 'node-446'),('total-resources-447', 14727442857984, 30541512441856, 43, 77309411328, 'node-447'),('total-resources-448', 23290533904384, 12843025956864, 25, 270582939648, 'node-448'),('total-resources-449', 8978629132288, 19206020005888, 52, 224412041216, 'node-449'),('total-resources-450', 12281458982912, 6900938702848, 101, 245886877696, 'node-450'),('total-resources-451', 30233348538368, 6260988575744, 46, 158913789952, 'node-451'),('total-resources-452', 30410515939328, 6345814179840, 122, 196494753792, 'node-452'),('total-resources-453', 5225901457408, 30004641529856, 77, 220117073920, 'node-453'),('total-resources-454', 3460669898752, 26189636829184, 26, 169651208192, 'node-454'),('total-resources-455', 9688372477952, 30725122293760, 48, 53687091200, 'node-455'),('total-resources-456', 22923314200576, 6103148527616, 15, 100931731456, 'node-456'),('total-resources-457', 21744345677824, 21173115027456, 38, 17179869184, 'node-457'),('total-resources-458', 26999238164480, 26603027431424, 4, 150323855360, 'node-458'),('total-resources-459', 31689342451712, 20165945196544, 53, 235149459456, 'node-459'),('total-resources-460', 11433202941952, 21271899275264, 78, 136365211648, 'node-460'),('total-resources-461', 23891829325824, 24211804389376, 30, 263066746880, 'node-461'),('total-resources-462', 537944653824, 16302622113792, 6, 208305913856, 'node-462'),('total-resources-463', 3186865733632, 8234526048256, 105, 180388626432, 'node-463'),('total-resources-464', 24535000678400, 24337432182784, 80, 48318382080, 'node-464'),('total-resources-465', 13382044352512, 24429773979648, 15, 47244640256, 'node-465'),('total-resources-466', 22368189677568, 8577049690112, 61, 41875931136, 'node-466'),('total-resources-467', 18271864619008, 25070797848576, 55, 238370684928, 'node-467'),('total-resources-468', 16647293239296, 23843510943744, 9, 254476812288, 'node-468'),('total-resources-469', 3485365960704, 16027744206848, 26, 74088185856, 'node-469'),('total-resources-470', 15246060158976, 28247999905792, 115, 110595407872, 'node-470'),('total-resources-471', 18379238801408, 27358941675520, 22, 183609851904, 'node-471'),('total-resources-472', 32045824737280, 10553808388096, 76, 173946175488, 'node-472'),('total-resources-473', 29480655519744, 19830937747456, 72, 265214230528, 'node-473'),('total-resources-474', 6873021415424, 10460392849408, 100, 268435456000, 'node-474'),('total-resources-475', 20411832074240, 2953863757824, 33, 62277025792, 'node-475'),('total-resources-476', 28791313268736, 28787018301440, 34, 161061273600, 'node-476'),('total-resources-477', 30720827326464, 15161234554880, 25, 24696061952, 'node-477'),('total-resources-478', 3565896597504, 30827127767040, 51, 47244640256, 'node-478'),('total-resources-479', 22008486166528, 5924907384832, 109, 41875931136, 'node-479'),('total-resources-480', 16037407883264, 31907312041984, 79, 34359738368, 'node-480'),('total-resources-481', 10453950398464, 1766305300480, 51, 129922760704, 'node-481'),('total-resources-482', 19572165967872, 2399812976640, 41, 204010946560, 'node-482'),('total-resources-483', 17976585617408, 606664130560, 109, 55834574848, 'node-483'),('total-resources-484', 32076963250176, 17603997204480, 64, 188978561024, 'node-484'),('total-resources-485', 20751134490624, 23189602172928, 69, 113816633344, 'node-485'),('total-resources-486', 13756780249088, 14201309364224, 22, 188978561024, 'node-486'),('total-resources-487', 18035641417728, 23846732169216, 109, 37580963840, 'node-487'),('total-resources-488', 11384884559872, 20580409540608, 31, 67645734912, 'node-488'),('total-resources-489', 2281701376000, 5005784383488, 104, 175019917312, 'node-489'),('total-resources-490', 4281008652288, 20569672122368, 72, 224412041216, 'node-490'),('total-resources-491', 26245471404032, 20464445423616, 23, 252329328640, 'node-491'),('total-resources-492', 30358976331776, 15461882265600, 71, 11811160064, 'node-492'),('total-resources-493', 27733677572096, 4529043013632, 19, 179314884608, 'node-493'),('total-resources-494', 3237331599360, 8423504609280, 8, 157840048128, 'node-494'),('total-resources-495', 20463371681792, 24924768960512, 14, 28991029248, 'node-495'),('total-resources-496', 6471441973248, 17974438133760, 39, 125627793408, 'node-496'),('total-resources-497', 5024037994496, 10706279727104, 32, 183609851904, 'node-497'),('total-resources-498', 21973052686336, 27124865957888, 47, 136365211648, 'node-498'),('total-resources-499', 17307644461056, 5157181980672, 116, 146028888064, 'node-499'),('total-resources-500', 30691836297216, 5519032975360, 70, 177167400960, 'node-500'),('total-resources-501', 29933774569472, 20816632741888, 77, 96636764160, 'node-501'),('total-resources-502', 17252883628032, 13315472359424, 60, 164282499072, 'node-502'),('total-resources-503', 2100239007744, 25580825214976, 95, 157840048128, 'node-503'),('total-resources-504', 3142842318848, 15925738733568, 32, 266287972352, 'node-504'),('total-resources-505', 8596377042944, 17853105307648, 88, 93415538688, 'node-505'),('total-resources-506', 3271691337728, 19746112143360, 45, 63350767616, 'node-506'),('total-resources-507', 11937861599232, 5855114166272, 15, 159987531776, 'node-507'),('total-resources-508', 7064147460096, 22778359054336, 69, 171798691840, 'node-508'),('total-resources-509', 13645111099392, 30421253357568, 120, 152471339008, 'node-509'),('total-resources-510', 30603789467648, 12647604944896, 16, 238370684928, 'node-510'),('total-resources-511', 17182016667648, 3269543854080, 71, 270582939648, 'node-511'),('total-resources-512', 19692425052160, 4890894008320, 111, 71940702208, 'node-512'),('total-resources-513', 21159156383744, 25948044918784, 67, 28991029248, 'node-513'),('total-resources-514', 32903744454656, 22779432796160, 81, 162135015424, 'node-514'),('total-resources-515', 11712375816192, 15335180730368, 99, 33285996544, 'node-515'),('total-resources-516', 26033944264704, 4213362917376, 82, 126701535232, 'node-516'),('total-resources-517', 11654393757696, 2854005768192, 93, 66571993088, 'node-517'),('total-resources-518', 11519102287872, 26048976650240, 21, 117037858816, 'node-518'),('total-resources-519', 23275501518848, 10269266804736, 85, 113816633344, 'node-519'),('total-resources-520', 25610889986048, 20242180866048, 126, 40802189312, 'node-520'),('total-resources-521', 14044543057920, 9103183183872, 16, 205084688384, 'node-521'),('total-resources-522', 31667867615232, 29641716793344, 68, 191126044672, 'node-522'),('total-resources-523', 5206574104576, 21473762738176, 60, 136365211648, 'node-523'),('total-resources-524', 21565030793216, 5327906930688, 89, 23622320128, 'node-524'),('total-resources-525', 28780575850496, 29300266893312, 98, 128849018880, 'node-525'),('total-resources-526', 1788853878784, 6753836072960, 65, 136365211648, 'node-526'),('total-resources-527', 23882165649408, 12140798803968, 101, 48318382080, 'node-527'),('total-resources-528', 7123203260416, 3972844748800, 89, 241591910400, 'node-528'),('total-resources-529', 17826261762048, 9283571810304, 101, 273804165120, 'node-529'),('total-resources-530', 19226421100544, 18073222381568, 73, 124554051584, 'node-530'),('total-resources-531', 17253957369856, 3001108398080, 72, 235149459456, 'node-531'),('total-resources-532', 26407606419456, 6201932775424, 120, 135291469824, 'node-532'),('total-resources-533', 19457275592704, 16836271800320, 127, 104152956928, 'node-533'),('total-resources-534', 6364067790848, 16830903091200, 85, 22548578304, 'node-534'),('total-resources-535', 32855426072576, 27865747816448, 60, 181462368256, 'node-535'),('total-resources-536', 27327803162624, 7162931707904, 94, 213674622976, 'node-536'),('total-resources-537', 24965571149824, 20540681093120, 67, 170724950016, 'node-537'),('total-resources-538', 8279623204864, 14089640214528, 73, 126701535232, 'node-538'),('total-resources-539', 16494821900288, 20440823103488, 44, 243739394048, 'node-539'),('total-resources-540', 21489868865536, 18044231352320, 70, 147102629888, 'node-540'),('total-resources-541', 11886321991680, 21852793602048, 25, 96636764160, 'node-541'),('total-resources-542', 29687887691776, 11799348903936, 54, 184683593728, 'node-542'),('total-resources-543', 3834332053504, 12497281089536, 59, 104152956928, 'node-543'),('total-resources-544', 16143708323840, 21690658586624, 71, 115964116992, 'node-544'),('total-resources-545', 9910637035520, 27252641234944, 94, 146028888064, 'node-545'),('total-resources-546', 13014824648704, 30476014190592, 18, 188978561024, 'node-546'),('total-resources-547', 4648228356096, 10737418240000, 69, 107374182400, 'node-547'),('total-resources-548', 579820584960, 3212635537408, 49, 242665652224, 'node-548'),('total-resources-549', 15722801528832, 11597485441024, 67, 159987531776, 'node-549'),('total-resources-550', 13870596882432, 9072044670976, 13, 113816633344, 'node-550'),('total-resources-551', 19925427027968, 32382979670016, 127, 237296943104, 'node-551'),('total-resources-552', 27332098129920, 11638287630336, 37, 269509197824, 'node-552'),('total-resources-553', 21961241526272, 14174465818624, 80, 11811160064, 'node-553'),('total-resources-554', 29537563836416, 22197464727552, 9, 59055800320, 'node-554'),('total-resources-555', 10353018667008, 29947733213184, 68, 161061273600, 'node-555'),('total-resources-556', 24314883604480, 18548890009600, 69, 230854492160, 'node-556'),('total-resources-557', 16896401342464, 4456028569600, 11, 274877906944, 'node-557'),('total-resources-558', 254476812288, 4541927915520, 21, 177167400960, 'node-558'),('total-resources-559', 14542759264256, 14598593839104, 91, 213674622976, 'node-559'),('total-resources-560', 17143361961984, 28378996408320, 19, 273804165120, 'node-560'),('total-resources-561', 24465207459840, 14937896255488, 28, 208305913856, 'node-561'),('total-resources-562', 2657511014400, 31997506355200, 99, 123480309760, 'node-562'),('total-resources-563', 588410519552, 19053548666880, 74, 155692564480, 'node-563'),('total-resources-564', 23781233917952, 28877212614656, 93, 222264557568, 'node-564'),('total-resources-565', 30391188586496, 26809185861632, 120, 228707008512, 'node-565'),('total-resources-566', 15344844406784, 25958782337024, 18, 136365211648, 'node-566'),('total-resources-567', 696858443776, 30460981805056, 41, 90194313216, 'node-567'),('total-resources-568', 6282463412224, 3839700762624, 16, 156766306304, 'node-568'),('total-resources-569', 25702158041088, 23336704802816, 118, 224412041216, 'node-569'),('total-resources-570', 32829656268800, 4529043013632, 111, 173946175488, 'node-570'),('total-resources-571', 16857746636800, 12199854604288, 7, 54760833024, 'node-571'),('total-resources-572', 16084652523520, 13401371705344, 51, 113816633344, 'node-572'),('total-resources-573', 20233590931456, 21656298848256, 124, 176093659136, 'node-573'),('total-resources-574', 20438675619840, 15751792558080, 124, 166429982720, 'node-574'),('total-resources-575', 18799071854592, 7204807639040, 71, 136365211648, 'node-575'),('total-resources-576', 7729867390976, 15219216613376, 82, 134217728000, 'node-576'),('total-resources-577', 5066987667456, 24653112279040, 100, 54760833024, 'node-577'),('total-resources-578', 19517405134848, 4194035564544, 98, 4294967296, 'node-578'),('total-resources-579', 22537840885760, 20141249134592, 38, 270582939648, 'node-579'),('total-resources-580', 4787814793216, 2774548873216, 64, 33285996544, 'node-580'),('total-resources-581', 15406047690752, 9667971383296, 122, 100931731456, 'node-581'),('total-resources-582', 22825603694592, 27832461819904, 123, 266287972352, 'node-582'),('total-resources-583', 23536420782080, 1729798078464, 63, 149250113536, 'node-583'),('total-resources-584', 12488691154944, 12927851560960, 128, 63350767616, 'node-584'),('total-resources-585', 722628247552, 6503654227968, 14, 144955146240, 'node-585'),('total-resources-586', 18851685203968, 23012434771968, 77, 197568495616, 'node-586'),('total-resources-587', 32668594995200, 12226698149888, 26, 86973087744, 'node-587'),('total-resources-588', 31265214431232, 12222403182592, 79, 230854492160, 'node-588'),('total-resources-589', 22971632582656, 19711752404992, 111, 137438953472, 'node-589'),('total-resources-590', 1063004405760, 3343632039936, 69, 227633266688, 'node-590'),('total-resources-591', 23398981828608, 21595095564288, 76, 175019917312, 'node-591'),('total-resources-592', 22403623157760, 19479824171008, 52, 133143986176, 'node-592'),('total-resources-593', 31636729102336, 23812372430848, 38, 109521666048, 'node-593'),('total-resources-594', 21846351151104, 493921239040, 48, 200789721088, 'node-594'),('total-resources-595', 10785736622080, 29339995340800, 74, 22548578304, 'node-595'),('total-resources-596', 26891863982080, 16050292785152, 81, 210453397504, 'node-596'),('total-resources-597', 3214783021056, 28855737778176, 90, 106300440576, 'node-597'),('total-resources-598', 11246371864576, 13613972586496, 39, 91268055040, 'node-598'),('total-resources-599', 16585016213504, 23397908086784, 11, 42949672960, 'node-599'),('total-resources-600', 11286100312064, 9355512512512, 43, 20401094656, 'node-600');; +INSERT INTO public_config (id, ipv4, ipv6, gw4, gw6, domain, node_id) VALUES ('public-config-10', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-10'),('public-config-30', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-30'),('public-config-36', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-36'),('public-config-38', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-38'),('public-config-54', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-54'),('public-config-76', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-76'),('public-config-92', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-92'),('public-config-102', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-102'),('public-config-105', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-105'),('public-config-108', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-108'),('public-config-110', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-110'),('public-config-118', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-118'),('public-config-124', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-124'),('public-config-127', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-127'),('public-config-146', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-146'),('public-config-147', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-147'),('public-config-150', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-150'),('public-config-154', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-154'),('public-config-160', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-160'),('public-config-163', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-163'),('public-config-168', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-168'),('public-config-174', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-174'),('public-config-189', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-189'),('public-config-196', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-196'),('public-config-200', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-200'),('public-config-202', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-202'),('public-config-212', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-212'),('public-config-223', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-223'),('public-config-229', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-229'),('public-config-231', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-231'),('public-config-233', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-233'),('public-config-242', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-242'),('public-config-250', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-250'),('public-config-265', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-265'),('public-config-266', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-266'),('public-config-299', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-299'),('public-config-306', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-306'),('public-config-316', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-316'),('public-config-317', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-317'),('public-config-341', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-341'),('public-config-350', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-350'),('public-config-355', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-355'),('public-config-371', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-371'),('public-config-372', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-372'),('public-config-375', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-375'),('public-config-382', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-382'),('public-config-387', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-387'),('public-config-400', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-400'),('public-config-402', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-402'),('public-config-409', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-409'),('public-config-417', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-417'),('public-config-424', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-424'),('public-config-429', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-429'),('public-config-431', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-431'),('public-config-436', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-436'),('public-config-443', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-443'),('public-config-463', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-463'),('public-config-464', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-464'),('public-config-465', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-465'),('public-config-468', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-468'),('public-config-473', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-473'),('public-config-480', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-480'),('public-config-497', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-497'),('public-config-513', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-513'),('public-config-514', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-514'),('public-config-524', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-524'),('public-config-534', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-534'),('public-config-545', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-545'),('public-config-546', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-546'),('public-config-560', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-560'),('public-config-571', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-571'),('public-config-580', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-580'),('public-config-593', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-593'),('public-config-597', '185.16.5.2/24', '::1/64', '185.16.5.2', '::1', 'hamada.com', 'node-597');; +INSERT INTO rent_contract (id, grid_version, contract_id, twin_id, node_id, state, created_at) VALUES ('rent-contract-1', 3, 1, 1972, 475, 'Created', 1730904704);; +UPDATE rent_contract SET state = 'Deleted' WHERE contract_id IN (1); +INSERT INTO node_contract (id, grid_version, contract_id, twin_id, node_id, deployment_data, deployment_hash, number_of_public_i_ps, state, created_at, resources_used_id) VALUES ('node-contract-2', 3, 2, 1118, 54, 'deployment-data-2', 'deployment-hash-2', 0, 'Created', 1730904704, NULL),('node-contract-3', 3, 3, 2146, 180, 'deployment-data-3', 'deployment-hash-3', 0, 'Created', 1730904704, NULL),('node-contract-4', 3, 4, 1825, 225, 'deployment-data-4', 'deployment-hash-4', 0, 'Created', 1730904704, NULL),('node-contract-5', 3, 5, 2691, 68, 'deployment-data-5', 'deployment-hash-5', 0, 'Created', 1730904704, NULL),('node-contract-6', 3, 6, 2838, 197, 'deployment-data-6', 'deployment-hash-6', 0, 'Created', 1730904704, NULL),('node-contract-7', 3, 7, 1318, 45, 'deployment-data-7', 'deployment-hash-7', 0, 'Created', 1730904704, NULL),('node-contract-8', 3, 8, 2092, 174, 'deployment-data-8', 'deployment-hash-8', 0, 'Created', 1730904704, NULL),('node-contract-9', 3, 9, 1559, 85, 'deployment-data-9', 'deployment-hash-9', 0, 'Created', 1730904704, NULL),('node-contract-10', 3, 10, 1576, 134, 'deployment-data-10', 'deployment-hash-10', 0, 'Created', 1730904704, NULL),('node-contract-11', 3, 11, 2395, 223, 'deployment-data-11', 'deployment-hash-11', 0, 'Created', 1730904704, NULL),('node-contract-12', 3, 12, 2581, 271, 'deployment-data-12', 'deployment-hash-12', 0, 'Created', 1730904704, NULL),('node-contract-13', 3, 13, 2293, 233, 'deployment-data-13', 'deployment-hash-13', 0, 'Created', 1730904704, NULL),('node-contract-14', 3, 14, 2435, 409, 'deployment-data-14', 'deployment-hash-14', 0, 'Created', 1730904704, NULL),('node-contract-15', 3, 15, 1368, 251, 'deployment-data-15', 'deployment-hash-15', 0, 'Created', 1730904704, NULL),('node-contract-16', 3, 16, 2018, 268, 'deployment-data-16', 'deployment-hash-16', 0, 'Created', 1730904704, NULL),('node-contract-17', 3, 17, 1687, 128, 'deployment-data-17', 'deployment-hash-17', 0, 'Created', 1730904704, NULL),('node-contract-18', 3, 18, 1772, 434, 'deployment-data-18', 'deployment-hash-18', 0, 'Created', 1730904704, NULL),('node-contract-19', 3, 19, 2377, 464, 'deployment-data-19', 'deployment-hash-19', 0, 'Created', 1730904704, NULL),('node-contract-20', 3, 20, 1627, 377, 'deployment-data-20', 'deployment-hash-20', 0, 'Created', 1730904704, NULL),('node-contract-21', 3, 21, 1618, 319, 'deployment-data-21', 'deployment-hash-21', 0, 'Created', 1730904704, NULL),('node-contract-22', 3, 22, 2041, 165, 'deployment-data-22', 'deployment-hash-22', 0, 'Created', 1730904704, NULL),('node-contract-23', 3, 23, 2006, 300, 'deployment-data-23', 'deployment-hash-23', 0, 'Created', 1730904704, NULL),('node-contract-24', 3, 24, 2159, 58, 'deployment-data-24', 'deployment-hash-24', 0, 'Created', 1730904704, NULL),('node-contract-25', 3, 25, 2603, 359, 'deployment-data-25', 'deployment-hash-25', 0, 'Created', 1730904704, NULL),('node-contract-26', 3, 26, 1124, 481, 'deployment-data-26', 'deployment-hash-26', 0, 'Created', 1730904704, NULL),('node-contract-27', 3, 27, 1191, 187, 'deployment-data-27', 'deployment-hash-27', 0, 'Created', 1730904704, NULL),('node-contract-28', 3, 28, 2410, 381, 'deployment-data-28', 'deployment-hash-28', 0, 'Created', 1730904704, NULL),('node-contract-29', 3, 29, 2769, 114, 'deployment-data-29', 'deployment-hash-29', 0, 'Created', 1730904704, NULL),('node-contract-30', 3, 30, 1852, 494, 'deployment-data-30', 'deployment-hash-30', 0, 'Created', 1730904704, NULL),('node-contract-31', 3, 31, 2442, 488, 'deployment-data-31', 'deployment-hash-31', 0, 'Created', 1730904704, NULL),('node-contract-32', 3, 32, 3004, 476, 'deployment-data-32', 'deployment-hash-32', 0, 'Created', 1730904704, NULL),('node-contract-33', 3, 33, 2670, 331, 'deployment-data-33', 'deployment-hash-33', 0, 'Created', 1730904704, NULL),('node-contract-34', 3, 34, 1519, 512, 'deployment-data-34', 'deployment-hash-34', 0, 'Created', 1730904704, NULL),('node-contract-35', 3, 35, 2940, 405, 'deployment-data-35', 'deployment-hash-35', 0, 'Created', 1730904704, NULL),('node-contract-36', 3, 36, 2494, 446, 'deployment-data-36', 'deployment-hash-36', 0, 'Created', 1730904704, NULL),('node-contract-37', 3, 37, 2477, 303, 'deployment-data-37', 'deployment-hash-37', 0, 'Created', 1730904704, NULL),('node-contract-38', 3, 38, 2150, 365, 'deployment-data-38', 'deployment-hash-38', 0, 'Created', 1730904704, NULL),('node-contract-39', 3, 39, 2258, 238, 'deployment-data-39', 'deployment-hash-39', 0, 'Created', 1730904704, NULL),('node-contract-40', 3, 40, 1830, 296, 'deployment-data-40', 'deployment-hash-40', 0, 'Created', 1730904704, NULL),('node-contract-41', 3, 41, 2776, 283, 'deployment-data-41', 'deployment-hash-41', 0, 'Created', 1730904704, NULL),('node-contract-42', 3, 42, 2156, 544, 'deployment-data-42', 'deployment-hash-42', 0, 'Created', 1730904704, NULL),('node-contract-43', 3, 43, 2266, 38, 'deployment-data-43', 'deployment-hash-43', 0, 'Created', 1730904704, NULL),('node-contract-44', 3, 44, 2875, 398, 'deployment-data-44', 'deployment-hash-44', 0, 'Created', 1730904704, NULL),('node-contract-45', 3, 45, 1544, 409, 'deployment-data-45', 'deployment-hash-45', 0, 'Created', 1730904704, NULL),('node-contract-46', 3, 46, 3096, 587, 'deployment-data-46', 'deployment-hash-46', 0, 'Created', 1730904704, NULL),('node-contract-47', 3, 47, 2715, 508, 'deployment-data-47', 'deployment-hash-47', 0, 'Created', 1730904704, NULL),('node-contract-48', 3, 48, 1603, 492, 'deployment-data-48', 'deployment-hash-48', 0, 'Created', 1730904704, NULL),('node-contract-49', 3, 49, 2580, 360, 'deployment-data-49', 'deployment-hash-49', 0, 'Created', 1730904704, NULL),('node-contract-50', 3, 50, 1813, 244, 'deployment-data-50', 'deployment-hash-50', 0, 'Created', 1730904704, NULL),('node-contract-51', 3, 51, 1798, 205, 'deployment-data-51', 'deployment-hash-51', 0, 'Created', 1730904704, NULL);; +INSERT INTO contract_resources (id, hru, sru, cru, mru, contract_id) VALUES ('contract-resources-2', 299424440424, 66999984510, 5, 8484663160, 'node-contract-2'),('contract-resources-3', 25474439272, 142702712957, 9, 2450845097, 'node-contract-3'),('contract-resources-4', 142685066101, 205767932510, 6, 6721672064, 'node-contract-4'),('contract-resources-5', 187715849255, 145433222811, 16, 12115985397, 'node-contract-5'),('contract-resources-6', 170981944637, 114090118444, 4, 10770305653, 'node-contract-6'),('contract-resources-7', 249938629581, 41163080598, 11, 1627557514, 'node-contract-7'),('contract-resources-8', 160045620021, 215156169367, 6, 2935101592, 'node-contract-8'),('contract-resources-9', 72978091338, 11355043145, 12, 16854679323, 'node-contract-9'),('contract-resources-10', 260101489624, 255965680831, 10, 17148924632, 'node-contract-10'),('contract-resources-11', 191287323844, 158161730321, 13, 4395518365, 'node-contract-11'),('contract-resources-12', 67746382005, 118408145529, 11, 6370945998, 'node-contract-12'),('contract-resources-13', 138901756021, 263303933326, 15, 8741397764, 'node-contract-13'),('contract-resources-14', 262723723727, 6404945240, 12, 11457599412, 'node-contract-14'),('contract-resources-15', 165691946341, 275185703066, 8, 8183733725, 'node-contract-15'),('contract-resources-16', 39625023343, 141146977395, 7, 3428867392, 'node-contract-16'),('contract-resources-17', 296306478930, 162334015945, 8, 13031711904, 'node-contract-17'),('contract-resources-18', 168375762125, 130189086408, 10, 11033346790, 'node-contract-18'),('contract-resources-19', 262597193321, 298451269672, 2, 10427025628, 'node-contract-19'),('contract-resources-20', 321383841591, 177768116328, 14, 1720952557, 'node-contract-20'),('contract-resources-21', 26820513731, 247469294418, 16, 12218829792, 'node-contract-21'),('contract-resources-22', 253246080146, 69968279534, 9, 2293204457, 'node-contract-22'),('contract-resources-23', 130975555494, 315439423465, 8, 2969215668, 'node-contract-23'),('contract-resources-24', 12951996073, 149744909427, 7, 8381591731, 'node-contract-24'),('contract-resources-25', 115747546323, 214775236754, 9, 15920288380, 'node-contract-25'),('contract-resources-26', 222320852991, 70219879220, 15, 3679561756, 'node-contract-26'),('contract-resources-27', 289806308907, 222279217270, 16, 3012480836, 'node-contract-27'),('contract-resources-28', 179843748714, 260920518218, 2, 10550428440, 'node-contract-28'),('contract-resources-29', 111253617614, 145868107783, 10, 10929814203, 'node-contract-29'),('contract-resources-30', 146462180946, 98996279348, 3, 601424136, 'node-contract-30'),('contract-resources-31', 304133366134, 79423506791, 15, 6951866597, 'node-contract-31'),('contract-resources-32', 209188474521, 24006268771, 10, 14044258063, 'node-contract-32'),('contract-resources-33', 123908605645, 48024927995, 13, 16452663450, 'node-contract-33'),('contract-resources-34', 188919521390, 270999045533, 6, 12918270123, 'node-contract-34'),('contract-resources-35', 189047081131, 3357169061, 1, 6508308223, 'node-contract-35'),('contract-resources-36', 288585799270, 193572241819, 4, 10748483135, 'node-contract-36'),('contract-resources-37', 108450761922, 145851172919, 15, 746203061, 'node-contract-37'),('contract-resources-38', 10498208349, 306521078765, 14, 16980898547, 'node-contract-38'),('contract-resources-39', 51466501605, 92581321541, 16, 2013338817, 'node-contract-39'),('contract-resources-40', 58126061908, 318939337097, 15, 9583086688, 'node-contract-40'),('contract-resources-41', 152659609851, 170158350289, 10, 5392515234, 'node-contract-41'),('contract-resources-42', 3822861182, 91266602433, 8, 13615218917, 'node-contract-42'),('contract-resources-43', 215565991700, 255274331822, 6, 4330122325, 'node-contract-43'),('contract-resources-44', 172522998336, 146806581493, 2, 10634502934, 'node-contract-44'),('contract-resources-45', 127497086883, 107201277843, 5, 8260179867, 'node-contract-45'),('contract-resources-46', 139766892388, 166111345786, 8, 15021534360, 'node-contract-46'),('contract-resources-47', 99061712748, 104774831393, 4, 4103801639, 'node-contract-47'),('contract-resources-48', 186008163906, 33371199215, 13, 8528977696, 'node-contract-48'),('contract-resources-49', 255595103230, 306087554151, 15, 11096975469, 'node-contract-49'),('contract-resources-50', 291101581591, 307068641724, 16, 6537259416, 'node-contract-50'),('contract-resources-51', 236766777870, 95750431653, 14, 5596730050, 'node-contract-51');; +UPDATE node_contract SET resources_used_id = 'contract-resources-41' WHERE contract_id = 41;UPDATE node_contract SET resources_used_id = 'contract-resources-6' WHERE contract_id = 6;UPDATE node_contract SET resources_used_id = 'contract-resources-22' WHERE contract_id = 22;UPDATE node_contract SET resources_used_id = 'contract-resources-30' WHERE contract_id = 30;UPDATE node_contract SET resources_used_id = 'contract-resources-20' WHERE contract_id = 20;UPDATE node_contract SET resources_used_id = 'contract-resources-2' WHERE contract_id = 2;UPDATE node_contract SET resources_used_id = 'contract-resources-8' WHERE contract_id = 8;UPDATE node_contract SET resources_used_id = 'contract-resources-10' WHERE contract_id = 10;UPDATE node_contract SET resources_used_id = 'contract-resources-43' WHERE contract_id = 43;UPDATE node_contract SET resources_used_id = 'contract-resources-45' WHERE contract_id = 45;UPDATE node_contract SET resources_used_id = 'contract-resources-48' WHERE contract_id = 48;UPDATE node_contract SET resources_used_id = 'contract-resources-7' WHERE contract_id = 7;UPDATE node_contract SET resources_used_id = 'contract-resources-17' WHERE contract_id = 17;UPDATE node_contract SET resources_used_id = 'contract-resources-21' WHERE contract_id = 21;UPDATE node_contract SET resources_used_id = 'contract-resources-29' WHERE contract_id = 29;UPDATE node_contract SET resources_used_id = 'contract-resources-38' WHERE contract_id = 38;UPDATE node_contract SET resources_used_id = 'contract-resources-40' WHERE contract_id = 40;UPDATE node_contract SET resources_used_id = 'contract-resources-47' WHERE contract_id = 47;UPDATE node_contract SET resources_used_id = 'contract-resources-49' WHERE contract_id = 49;UPDATE node_contract SET resources_used_id = 'contract-resources-12' WHERE contract_id = 12;UPDATE node_contract SET resources_used_id = 'contract-resources-18' WHERE contract_id = 18;UPDATE node_contract SET resources_used_id = 'contract-resources-27' WHERE contract_id = 27;UPDATE node_contract SET resources_used_id = 'contract-resources-51' WHERE contract_id = 51;UPDATE node_contract SET resources_used_id = 'contract-resources-15' WHERE contract_id = 15;UPDATE node_contract SET resources_used_id = 'contract-resources-31' WHERE contract_id = 31;UPDATE node_contract SET resources_used_id = 'contract-resources-32' WHERE contract_id = 32;UPDATE node_contract SET resources_used_id = 'contract-resources-37' WHERE contract_id = 37;UPDATE node_contract SET resources_used_id = 'contract-resources-46' WHERE contract_id = 46;UPDATE node_contract SET resources_used_id = 'contract-resources-3' WHERE contract_id = 3;UPDATE node_contract SET resources_used_id = 'contract-resources-5' WHERE contract_id = 5;UPDATE node_contract SET resources_used_id = 'contract-resources-9' WHERE contract_id = 9;UPDATE node_contract SET resources_used_id = 'contract-resources-50' WHERE contract_id = 50;UPDATE node_contract SET resources_used_id = 'contract-resources-36' WHERE contract_id = 36;UPDATE node_contract SET resources_used_id = 'contract-resources-42' WHERE contract_id = 42;UPDATE node_contract SET resources_used_id = 'contract-resources-11' WHERE contract_id = 11;UPDATE node_contract SET resources_used_id = 'contract-resources-14' WHERE contract_id = 14;UPDATE node_contract SET resources_used_id = 'contract-resources-28' WHERE contract_id = 28;UPDATE node_contract SET resources_used_id = 'contract-resources-33' WHERE contract_id = 33;UPDATE node_contract SET resources_used_id = 'contract-resources-34' WHERE contract_id = 34;UPDATE node_contract SET resources_used_id = 'contract-resources-44' WHERE contract_id = 44;UPDATE node_contract SET resources_used_id = 'contract-resources-19' WHERE contract_id = 19;UPDATE node_contract SET resources_used_id = 'contract-resources-24' WHERE contract_id = 24;UPDATE node_contract SET resources_used_id = 'contract-resources-25' WHERE contract_id = 25;UPDATE node_contract SET resources_used_id = 'contract-resources-23' WHERE contract_id = 23;UPDATE node_contract SET resources_used_id = 'contract-resources-26' WHERE contract_id = 26;UPDATE node_contract SET resources_used_id = 'contract-resources-35' WHERE contract_id = 35;UPDATE node_contract SET resources_used_id = 'contract-resources-39' WHERE contract_id = 39;UPDATE node_contract SET resources_used_id = 'contract-resources-4' WHERE contract_id = 4;UPDATE node_contract SET resources_used_id = 'contract-resources-13' WHERE contract_id = 13;UPDATE node_contract SET resources_used_id = 'contract-resources-16' WHERE contract_id = 16;; +UPDATE node_contract SET state = 'Deleted' WHERE contract_id IN (2, 5, 7, 10, 11, 13, 14, 15, 17, 20, 23, 24, 29, 30, 33, 39, 39, 41, 42, 43, 44, 45, 46, 48, 50); +UPDATE node_contract SET state = 'GracePeriod' WHERE contract_id IN (38); +INSERT INTO name_contract (id, grid_version, contract_id, twin_id, name, state, created_at) VALUES ('name-contract-52', 3, 52, 2705, '401c4f28-4a84-47ff-9a91-50426305db00', 'Created', 1730904704),('name-contract-53', 3, 53, 1803, 'f719eb56-a6f9-43bd-8430-d5cc185d0d7c', 'Deleted', 1730904704),('name-contract-54', 3, 54, 2468, 'c1e44fbb-94ac-430f-800f-666b3a406478', 'Created', 1730904704),('name-contract-55', 3, 55, 1862, '8dcab0f8-7d42-4c5f-946c-95a8685b53d5', 'Deleted', 1730904704),('name-contract-56', 3, 56, 1229, '336dd88e-91b5-4f7c-9dc5-66580c053b51', 'Created', 1730904704),('name-contract-57', 3, 57, 1706, '5b5abbc5-9434-4d77-83bf-6e9e73b57728', 'Deleted', 1730904704),('name-contract-58', 3, 58, 3100, 'e047851c-d735-4d8e-af53-c78a42ff54f3', 'Created', 1730904704),('name-contract-59', 3, 59, 2678, '92dbd570-0b15-4da9-8ac2-e50ee66682ac', 'Deleted', 1730904704),('name-contract-60', 3, 60, 2891, 'cab312f3-8876-4044-b3de-6bb9e5edfa78', 'Deleted', 1730904704),('name-contract-61', 3, 61, 1333, '4a2c69ea-de18-42f3-af62-f4b3c07eb4bf', 'Deleted', 1730904704);; +UPDATE rent_contract SET state = 'Deleted' WHERE contract_id IN (52, 53, 55, 55, 57, 59, 60, 61); +INSERT INTO contract_bill_report (id, contract_id, discount_received, amount_billed, timestamp) VALUES ('contract-bill-report-1', 1, 'Default', 35378, 1730904704079088485),('contract-bill-report-2', 1, 'Default', 35378, 1730904704079091389),('contract-bill-report-3', 1, 'Default', 35378, 1730904704079093248),('contract-bill-report-4', 1, 'Default', 35378, 1730904704079095080),('contract-bill-report-5', 1, 'Default', 35378, 1730904704079096898),('contract-bill-report-6', 2, 'Default', 34883, 1730904704083975805),('contract-bill-report-7', 2, 'Default', 34883, 1730904704083977956),('contract-bill-report-8', 3, 'Default', 79409, 1730904704083987734),('contract-bill-report-9', 3, 'Default', 79409, 1730904704083989541),('contract-bill-report-10', 3, 'Default', 79409, 1730904704083991265),('contract-bill-report-11', 3, 'Default', 79409, 1730904704083993002),('contract-bill-report-12', 3, 'Default', 79409, 1730904704083994692),('contract-bill-report-13', 3, 'Default', 79409, 1730904704083996392),('contract-bill-report-14', 3, 'Default', 79409, 1730904704083998074),('contract-bill-report-15', 3, 'Default', 79409, 1730904704084000216),('contract-bill-report-16', 3, 'Default', 79409, 1730904704084001925),('contract-bill-report-17', 4, 'Default', 32663, 1730904704084010041),('contract-bill-report-18', 4, 'Default', 32663, 1730904704084011756),('contract-bill-report-19', 4, 'Default', 32663, 1730904704084013464),('contract-bill-report-20', 4, 'Default', 32663, 1730904704084015240),('contract-bill-report-21', 4, 'Default', 32663, 1730904704084016886),('contract-bill-report-22', 4, 'Default', 32663, 1730904704084018588),('contract-bill-report-23', 4, 'Default', 32663, 1730904704084020658),('contract-bill-report-24', 4, 'Default', 32663, 1730904704084022484),('contract-bill-report-25', 4, 'Default', 32663, 1730904704084024234),('contract-bill-report-26', 4, 'Default', 32663, 1730904704084025898),('contract-bill-report-27', 5, 'Default', 39688, 1730904704084034669),('contract-bill-report-28', 5, 'Default', 39688, 1730904704084036376),('contract-bill-report-29', 5, 'Default', 39688, 1730904704084038076),('contract-bill-report-30', 5, 'Default', 39688, 1730904704084039788),('contract-bill-report-31', 5, 'Default', 39688, 1730904704084041475),('contract-bill-report-32', 5, 'Default', 39688, 1730904704084043138),('contract-bill-report-33', 5, 'Default', 39688, 1730904704084044845),('contract-bill-report-34', 5, 'Default', 39688, 1730904704084046492),('contract-bill-report-35', 6, 'Default', 3938, 1730904704084054712),('contract-bill-report-36', 6, 'Default', 3938, 1730904704084056389),('contract-bill-report-37', 6, 'Default', 3938, 1730904704084058064),('contract-bill-report-38', 6, 'Default', 3938, 1730904704084059744),('contract-bill-report-39', 7, 'Default', 55011, 1730904704084068674),('contract-bill-report-40', 7, 'Default', 55011, 1730904704084070340),('contract-bill-report-41', 7, 'Default', 55011, 1730904704084071952),('contract-bill-report-42', 7, 'Default', 55011, 1730904704084073612),('contract-bill-report-43', 7, 'Default', 55011, 1730904704084075337),('contract-bill-report-44', 7, 'Default', 55011, 1730904704084077015),('contract-bill-report-45', 7, 'Default', 55011, 1730904704084078640),('contract-bill-report-46', 7, 'Default', 55011, 1730904704084080274),('contract-bill-report-47', 7, 'Default', 55011, 1730904704084082327),('contract-bill-report-48', 7, 'Default', 55011, 1730904704084084082),('contract-bill-report-49', 8, 'Default', 77676, 1730904704084092090),('contract-bill-report-50', 8, 'Default', 77676, 1730904704084093762),('contract-bill-report-51', 8, 'Default', 77676, 1730904704084095459),('contract-bill-report-52', 8, 'Default', 77676, 1730904704084097145),('contract-bill-report-53', 8, 'Default', 77676, 1730904704084098880),('contract-bill-report-54', 8, 'Default', 77676, 1730904704084100824),('contract-bill-report-55', 8, 'Default', 77676, 1730904704084102544),('contract-bill-report-56', 9, 'Default', 92465, 1730904704084110756),('contract-bill-report-57', 9, 'Default', 92465, 1730904704084112405),('contract-bill-report-58', 9, 'Default', 92465, 1730904704084114084),('contract-bill-report-59', 9, 'Default', 92465, 1730904704084115742),('contract-bill-report-60', 9, 'Default', 92465, 1730904704084117413),('contract-bill-report-61', 9, 'Default', 92465, 1730904704084119117),('contract-bill-report-62', 10, 'Default', 54909, 1730904704084129200),('contract-bill-report-63', 10, 'Default', 54909, 1730904704084130896),('contract-bill-report-64', 10, 'Default', 54909, 1730904704084132578),('contract-bill-report-65', 10, 'Default', 54909, 1730904704084134557),('contract-bill-report-66', 10, 'Default', 54909, 1730904704084136440),('contract-bill-report-67', 10, 'Default', 54909, 1730904704084138137),('contract-bill-report-68', 10, 'Default', 54909, 1730904704084139827),('contract-bill-report-69', 10, 'Default', 54909, 1730904704084141520),('contract-bill-report-70', 10, 'Default', 54909, 1730904704084143178),('contract-bill-report-71', 11, 'Default', 12109, 1730904704084151083),('contract-bill-report-72', 11, 'Default', 12109, 1730904704084152723),('contract-bill-report-73', 11, 'Default', 12109, 1730904704084154815),('contract-bill-report-74', 12, 'Default', 77581, 1730904704084163166),('contract-bill-report-75', 12, 'Default', 77581, 1730904704084164879),('contract-bill-report-76', 12, 'Default', 77581, 1730904704084166542),('contract-bill-report-77', 12, 'Default', 77581, 1730904704084168212),('contract-bill-report-78', 12, 'Default', 77581, 1730904704084170156),('contract-bill-report-79', 12, 'Default', 77581, 1730904704084171816),('contract-bill-report-80', 12, 'Default', 77581, 1730904704084173470),('contract-bill-report-81', 12, 'Default', 77581, 1730904704084175150),('contract-bill-report-82', 13, 'Default', 91910, 1730904704084183761),('contract-bill-report-83', 13, 'Default', 91910, 1730904704084185638),('contract-bill-report-84', 13, 'Default', 91910, 1730904704084187299),('contract-bill-report-85', 13, 'Default', 91910, 1730904704084189344),('contract-bill-report-86', 13, 'Default', 91910, 1730904704084190981),('contract-bill-report-87', 13, 'Default', 91910, 1730904704084192719),('contract-bill-report-88', 13, 'Default', 91910, 1730904704084194527),('contract-bill-report-89', 14, 'Default', 93211, 1730904704084202471),('contract-bill-report-90', 14, 'Default', 93211, 1730904704084204427),('contract-bill-report-91', 14, 'Default', 93211, 1730904704084206046),('contract-bill-report-92', 14, 'Default', 93211, 1730904704084207731),('contract-bill-report-93', 14, 'Default', 93211, 1730904704084209387),('contract-bill-report-94', 14, 'Default', 93211, 1730904704084211048),('contract-bill-report-95', 14, 'Default', 93211, 1730904704084212672),('contract-bill-report-96', 14, 'Default', 93211, 1730904704084214340),('contract-bill-report-97', 14, 'Default', 93211, 1730904704084215988),('contract-bill-report-98', 15, 'Default', 94591, 1730904704084224598),('contract-bill-report-99', 15, 'Default', 94591, 1730904704084226273),('contract-bill-report-100', 15, 'Default', 94591, 1730904704084227930),('contract-bill-report-101', 15, 'Default', 94591, 1730904704084229625),('contract-bill-report-102', 16, 'Default', 26762, 1730904704084237475),('contract-bill-report-103', 16, 'Default', 26762, 1730904704084239169),('contract-bill-report-104', 16, 'Default', 26762, 1730904704084240856),('contract-bill-report-105', 16, 'Default', 26762, 1730904704084242485),('contract-bill-report-106', 16, 'Default', 26762, 1730904704084244145),('contract-bill-report-107', 16, 'Default', 26762, 1730904704084245858),('contract-bill-report-108', 16, 'Default', 26762, 1730904704084247718),('contract-bill-report-109', 16, 'Default', 26762, 1730904704084249357),('contract-bill-report-110', 16, 'Default', 26762, 1730904704084251005),('contract-bill-report-111', 17, 'Default', 18839, 1730904704084260005),('contract-bill-report-112', 17, 'Default', 18839, 1730904704084261702),('contract-bill-report-113', 17, 'Default', 18839, 1730904704084263370),('contract-bill-report-114', 18, 'Default', 61886, 1730904704084271527),('contract-bill-report-115', 18, 'Default', 61886, 1730904704084273406),('contract-bill-report-116', 18, 'Default', 61886, 1730904704084275011),('contract-bill-report-117', 18, 'Default', 61886, 1730904704084276663),('contract-bill-report-118', 19, 'Default', 51851, 1730904704084284686),('contract-bill-report-119', 19, 'Default', 51851, 1730904704084286312),('contract-bill-report-120', 19, 'Default', 51851, 1730904704084287928),('contract-bill-report-121', 20, 'Default', 85185, 1730904704084295966),('contract-bill-report-122', 20, 'Default', 85185, 1730904704084297615),('contract-bill-report-123', 20, 'Default', 85185, 1730904704084299292),('contract-bill-report-124', 20, 'Default', 85185, 1730904704084300909),('contract-bill-report-125', 20, 'Default', 85185, 1730904704084302526),('contract-bill-report-126', 20, 'Default', 85185, 1730904704084304356),('contract-bill-report-127', 20, 'Default', 85185, 1730904704084305971),('contract-bill-report-128', 20, 'Default', 85185, 1730904704084307601),('contract-bill-report-129', 20, 'Default', 85185, 1730904704084309278),('contract-bill-report-130', 20, 'Default', 85185, 1730904704084310916),('contract-bill-report-131', 21, 'Default', 61709, 1730904704084318906),('contract-bill-report-132', 21, 'Default', 61709, 1730904704084320797),('contract-bill-report-133', 21, 'Default', 61709, 1730904704084322478),('contract-bill-report-134', 21, 'Default', 61709, 1730904704084324136),('contract-bill-report-135', 21, 'Default', 61709, 1730904704084325777),('contract-bill-report-136', 21, 'Default', 61709, 1730904704084327446),('contract-bill-report-137', 22, 'Default', 94232, 1730904704084335145),('contract-bill-report-138', 22, 'Default', 94232, 1730904704084336765),('contract-bill-report-139', 22, 'Default', 94232, 1730904704084338402),('contract-bill-report-140', 22, 'Default', 94232, 1730904704084340281),('contract-bill-report-141', 22, 'Default', 94232, 1730904704084341919),('contract-bill-report-142', 22, 'Default', 94232, 1730904704084343599),('contract-bill-report-143', 22, 'Default', 94232, 1730904704084345224),('contract-bill-report-144', 23, 'Default', 89675, 1730904704084352922),('contract-bill-report-145', 23, 'Default', 89675, 1730904704084354785),('contract-bill-report-146', 23, 'Default', 89675, 1730904704084356426),('contract-bill-report-147', 23, 'Default', 89675, 1730904704084358116),('contract-bill-report-148', 23, 'Default', 89675, 1730904704084359849),('contract-bill-report-149', 23, 'Default', 89675, 1730904704084361525),('contract-bill-report-150', 24, 'Default', 92568, 1730904704084369861),('contract-bill-report-151', 24, 'Default', 92568, 1730904704084371552),('contract-bill-report-152', 24, 'Default', 92568, 1730904704084373224),('contract-bill-report-153', 24, 'Default', 92568, 1730904704084374871),('contract-bill-report-154', 24, 'Default', 92568, 1730904704084376530),('contract-bill-report-155', 24, 'Default', 92568, 1730904704084378200),('contract-bill-report-156', 25, 'Default', 80254, 1730904704084385822),('contract-bill-report-157', 25, 'Default', 80254, 1730904704084387506),('contract-bill-report-158', 25, 'Default', 80254, 1730904704084389188),('contract-bill-report-159', 25, 'Default', 80254, 1730904704084390850),('contract-bill-report-160', 25, 'Default', 80254, 1730904704084392467),('contract-bill-report-161', 26, 'Default', 16115, 1730904704084400258),('contract-bill-report-162', 26, 'Default', 16115, 1730904704084401906),('contract-bill-report-163', 26, 'Default', 16115, 1730904704084403563),('contract-bill-report-164', 26, 'Default', 16115, 1730904704084405199),('contract-bill-report-165', 26, 'Default', 16115, 1730904704084406841),('contract-bill-report-166', 26, 'Default', 16115, 1730904704084408756),('contract-bill-report-167', 26, 'Default', 16115, 1730904704084410465),('contract-bill-report-168', 26, 'Default', 16115, 1730904704084412191),('contract-bill-report-169', 26, 'Default', 16115, 1730904704084413887),('contract-bill-report-170', 26, 'Default', 16115, 1730904704084415515),('contract-bill-report-171', 27, 'Default', 83687, 1730904704084423524),('contract-bill-report-172', 27, 'Default', 83687, 1730904704084425167),('contract-bill-report-173', 27, 'Default', 83687, 1730904704084426796),('contract-bill-report-174', 28, 'Default', 51362, 1730904704084439988),('contract-bill-report-175', 28, 'Default', 51362, 1730904704084441675),('contract-bill-report-176', 28, 'Default', 51362, 1730904704084443309),('contract-bill-report-177', 29, 'Default', 51598, 1730904704084451602),('contract-bill-report-178', 30, 'Default', 58666, 1730904704084464464),('contract-bill-report-179', 31, 'Default', 60172, 1730904704084472468),('contract-bill-report-180', 31, 'Default', 60172, 1730904704084474107),('contract-bill-report-181', 31, 'Default', 60172, 1730904704084475788),('contract-bill-report-182', 32, 'Default', 41008, 1730904704084483610),('contract-bill-report-183', 32, 'Default', 41008, 1730904704084485242),('contract-bill-report-184', 32, 'Default', 41008, 1730904704084486889),('contract-bill-report-185', 33, 'Default', 69087, 1730904704084495181),('contract-bill-report-186', 33, 'Default', 69087, 1730904704084496833),('contract-bill-report-187', 33, 'Default', 69087, 1730904704084498666),('contract-bill-report-188', 33, 'Default', 69087, 1730904704084500272),('contract-bill-report-189', 33, 'Default', 69087, 1730904704084501917),('contract-bill-report-190', 35, 'Default', 64855, 1730904704084515798),('contract-bill-report-191', 35, 'Default', 64855, 1730904704084517468),('contract-bill-report-192', 35, 'Default', 64855, 1730904704084519162),('contract-bill-report-193', 35, 'Default', 64855, 1730904704084520819),('contract-bill-report-194', 35, 'Default', 64855, 1730904704084522413),('contract-bill-report-195', 35, 'Default', 64855, 1730904704084524116),('contract-bill-report-196', 36, 'Default', 3732, 1730904704084531706),('contract-bill-report-197', 36, 'Default', 3732, 1730904704084533413),('contract-bill-report-198', 36, 'Default', 3732, 1730904704084535074),('contract-bill-report-199', 36, 'Default', 3732, 1730904704084536720),('contract-bill-report-200', 36, 'Default', 3732, 1730904704084538332),('contract-bill-report-201', 37, 'Default', 91743, 1730904704084546098),('contract-bill-report-202', 37, 'Default', 91743, 1730904704084547948),('contract-bill-report-203', 37, 'Default', 91743, 1730904704084549637),('contract-bill-report-204', 37, 'Default', 91743, 1730904704084551256),('contract-bill-report-205', 37, 'Default', 91743, 1730904704084552876),('contract-bill-report-206', 37, 'Default', 91743, 1730904704084554516),('contract-bill-report-207', 37, 'Default', 91743, 1730904704084556135),('contract-bill-report-208', 37, 'Default', 91743, 1730904704084558086),('contract-bill-report-209', 37, 'Default', 91743, 1730904704084559674),('contract-bill-report-210', 38, 'Default', 45175, 1730904704084567911),('contract-bill-report-211', 38, 'Default', 45175, 1730904704084569563),('contract-bill-report-212', 38, 'Default', 45175, 1730904704084571185),('contract-bill-report-213', 38, 'Default', 45175, 1730904704084572803),('contract-bill-report-214', 38, 'Default', 45175, 1730904704084574450),('contract-bill-report-215', 38, 'Default', 45175, 1730904704084576095),('contract-bill-report-216', 38, 'Default', 45175, 1730904704084577717),('contract-bill-report-217', 39, 'Default', 86268, 1730904704084586010),('contract-bill-report-218', 39, 'Default', 86268, 1730904704084587638),('contract-bill-report-219', 39, 'Default', 86268, 1730904704084589295),('contract-bill-report-220', 39, 'Default', 86268, 1730904704084590932),('contract-bill-report-221', 41, 'Default', 42513, 1730904704084604603),('contract-bill-report-222', 42, 'Default', 51826, 1730904704084612694),('contract-bill-report-223', 42, 'Default', 51826, 1730904704084614378),('contract-bill-report-224', 42, 'Default', 51826, 1730904704084616103),('contract-bill-report-225', 42, 'Default', 51826, 1730904704084617721),('contract-bill-report-226', 42, 'Default', 51826, 1730904704084619408),('contract-bill-report-227', 42, 'Default', 51826, 1730904704084621031),('contract-bill-report-228', 42, 'Default', 51826, 1730904704084622669),('contract-bill-report-229', 42, 'Default', 51826, 1730904704084624252),('contract-bill-report-230', 42, 'Default', 51826, 1730904704084625856),('contract-bill-report-231', 43, 'Default', 52801, 1730904704084634022),('contract-bill-report-232', 43, 'Default', 52801, 1730904704084635781),('contract-bill-report-233', 43, 'Default', 52801, 1730904704084637668),('contract-bill-report-234', 43, 'Default', 52801, 1730904704084639298),('contract-bill-report-235', 43, 'Default', 52801, 1730904704084640930),('contract-bill-report-236', 43, 'Default', 52801, 1730904704084642532),('contract-bill-report-237', 43, 'Default', 52801, 1730904704084644208),('contract-bill-report-238', 43, 'Default', 52801, 1730904704084645803),('contract-bill-report-239', 44, 'Default', 35065, 1730904704084653760),('contract-bill-report-240', 44, 'Default', 35065, 1730904704084655413),('contract-bill-report-241', 44, 'Default', 35065, 1730904704084657068),('contract-bill-report-242', 44, 'Default', 35065, 1730904704084658741),('contract-bill-report-243', 44, 'Default', 35065, 1730904704084660344),('contract-bill-report-244', 44, 'Default', 35065, 1730904704084662073),('contract-bill-report-245', 44, 'Default', 35065, 1730904704084663910),('contract-bill-report-246', 44, 'Default', 35065, 1730904704084665558),('contract-bill-report-247', 44, 'Default', 35065, 1730904704084667188),('contract-bill-report-248', 45, 'Default', 87955, 1730904704084674748),('contract-bill-report-249', 45, 'Default', 87955, 1730904704084676443),('contract-bill-report-250', 45, 'Default', 87955, 1730904704084678151),('contract-bill-report-251', 45, 'Default', 87955, 1730904704084679786),('contract-bill-report-252', 45, 'Default', 87955, 1730904704084681407),('contract-bill-report-253', 45, 'Default', 87955, 1730904704084683055),('contract-bill-report-254', 45, 'Default', 87955, 1730904704084684664),('contract-bill-report-255', 45, 'Default', 87955, 1730904704084686419),('contract-bill-report-256', 45, 'Default', 87955, 1730904704084688072),('contract-bill-report-257', 45, 'Default', 87955, 1730904704084689776),('contract-bill-report-258', 46, 'Default', 1338, 1730904704084698022),('contract-bill-report-259', 46, 'Default', 1338, 1730904704084699701),('contract-bill-report-260', 46, 'Default', 1338, 1730904704084701436),('contract-bill-report-261', 46, 'Default', 1338, 1730904704084703410),('contract-bill-report-262', 46, 'Default', 1338, 1730904704084705080),('contract-bill-report-263', 46, 'Default', 1338, 1730904704084706753),('contract-bill-report-264', 46, 'Default', 1338, 1730904704084708467),('contract-bill-report-265', 46, 'Default', 1338, 1730904704084710150),('contract-bill-report-266', 47, 'Default', 78549, 1730904704084717660),('contract-bill-report-267', 47, 'Default', 78549, 1730904704084719554),('contract-bill-report-268', 48, 'Default', 42100, 1730904704084727336),('contract-bill-report-269', 48, 'Default', 42100, 1730904704084729010),('contract-bill-report-270', 48, 'Default', 42100, 1730904704084730797),('contract-bill-report-271', 48, 'Default', 42100, 1730904704084732448),('contract-bill-report-272', 49, 'Default', 26522, 1730904704084740059),('contract-bill-report-273', 49, 'Default', 26522, 1730904704084741669),('contract-bill-report-274', 49, 'Default', 26522, 1730904704084743277),('contract-bill-report-275', 49, 'Default', 26522, 1730904704084744924),('contract-bill-report-276', 49, 'Default', 26522, 1730904704084746598),('contract-bill-report-277', 49, 'Default', 26522, 1730904704084748243),('contract-bill-report-278', 50, 'Default', 91155, 1730904704084756111),('contract-bill-report-279', 50, 'Default', 91155, 1730904704084757738),('contract-bill-report-280', 50, 'Default', 91155, 1730904704084759449),('contract-bill-report-281', 50, 'Default', 91155, 1730904704084761104),('contract-bill-report-282', 50, 'Default', 91155, 1730904704084762991),('contract-bill-report-283', 50, 'Default', 91155, 1730904704084764646),('contract-bill-report-284', 51, 'Default', 27710, 1730904704084772452),('contract-bill-report-285', 52, 'Default', 60188, 1730904704099044309),('contract-bill-report-286', 52, 'Default', 60188, 1730904704099047642),('contract-bill-report-287', 52, 'Default', 60188, 1730904704099051495),('contract-bill-report-288', 52, 'Default', 60188, 1730904704099053774),('contract-bill-report-289', 52, 'Default', 60188, 1730904704099056481),('contract-bill-report-290', 52, 'Default', 60188, 1730904704099058546),('contract-bill-report-291', 52, 'Default', 60188, 1730904704099060371),('contract-bill-report-292', 53, 'Default', 15248, 1730904704099066339),('contract-bill-report-293', 53, 'Default', 15248, 1730904704099068201),('contract-bill-report-294', 53, 'Default', 15248, 1730904704099070520),('contract-bill-report-295', 53, 'Default', 15248, 1730904704099074019),('contract-bill-report-296', 53, 'Default', 15248, 1730904704099075963),('contract-bill-report-297', 53, 'Default', 15248, 1730904704099077758),('contract-bill-report-298', 53, 'Default', 15248, 1730904704099079745),('contract-bill-report-299', 54, 'Default', 34382, 1730904704099085718),('contract-bill-report-300', 54, 'Default', 34382, 1730904704099087527),('contract-bill-report-301', 54, 'Default', 34382, 1730904704099089348),('contract-bill-report-302', 54, 'Default', 34382, 1730904704099093626),('contract-bill-report-303', 54, 'Default', 34382, 1730904704099095565),('contract-bill-report-304', 54, 'Default', 34382, 1730904704099097317),('contract-bill-report-305', 54, 'Default', 34382, 1730904704099099670),('contract-bill-report-306', 54, 'Default', 34382, 1730904704099101540),('contract-bill-report-307', 54, 'Default', 34382, 1730904704099103333),('contract-bill-report-308', 55, 'Default', 19652, 1730904704099109136),('contract-bill-report-309', 55, 'Default', 19652, 1730904704099110997),('contract-bill-report-310', 55, 'Default', 19652, 1730904704099113442),('contract-bill-report-311', 55, 'Default', 19652, 1730904704099115323),('contract-bill-report-312', 56, 'Default', 65413, 1730904704099120519),('contract-bill-report-313', 56, 'Default', 65413, 1730904704099122353),('contract-bill-report-314', 56, 'Default', 65413, 1730904704099124147),('contract-bill-report-315', 56, 'Default', 65413, 1730904704099125978),('contract-bill-report-316', 56, 'Default', 65413, 1730904704099127757),('contract-bill-report-317', 56, 'Default', 65413, 1730904704099129573),('contract-bill-report-318', 56, 'Default', 65413, 1730904704099131727),('contract-bill-report-319', 56, 'Default', 65413, 1730904704099133513),('contract-bill-report-320', 56, 'Default', 65413, 1730904704099135343),('contract-bill-report-321', 57, 'Default', 5640, 1730904704099141353),('contract-bill-report-322', 57, 'Default', 5640, 1730904704099143323),('contract-bill-report-323', 57, 'Default', 5640, 1730904704099145146),('contract-bill-report-324', 57, 'Default', 5640, 1730904704099146943),('contract-bill-report-325', 57, 'Default', 5640, 1730904704099148676),('contract-bill-report-326', 57, 'Default', 5640, 1730904704099150464),('contract-bill-report-327', 57, 'Default', 5640, 1730904704099152256),('contract-bill-report-328', 59, 'Default', 20062, 1730904704099160811),('contract-bill-report-329', 59, 'Default', 20062, 1730904704099162612),('contract-bill-report-330', 59, 'Default', 20062, 1730904704099164415),('contract-bill-report-331', 59, 'Default', 20062, 1730904704099166207),('contract-bill-report-332', 59, 'Default', 20062, 1730904704099167951),('contract-bill-report-333', 59, 'Default', 20062, 1730904704099169793),('contract-bill-report-334', 59, 'Default', 20062, 1730904704099171543),('contract-bill-report-335', 59, 'Default', 20062, 1730904704099173286),('contract-bill-report-336', 59, 'Default', 20062, 1730904704099175123),('contract-bill-report-337', 59, 'Default', 20062, 1730904704099177883),('contract-bill-report-338', 60, 'Default', 94627, 1730904704099183283),('contract-bill-report-339', 60, 'Default', 94627, 1730904704099185060),('contract-bill-report-340', 60, 'Default', 94627, 1730904704099186865),('contract-bill-report-341', 60, 'Default', 94627, 1730904704099188643),('contract-bill-report-342', 60, 'Default', 94627, 1730904704099190432),('contract-bill-report-343', 60, 'Default', 94627, 1730904704099192727),('contract-bill-report-344', 61, 'Default', 77963, 1730904704099197806),('contract-bill-report-345', 61, 'Default', 77963, 1730904704099199608),('contract-bill-report-346', 61, 'Default', 77963, 1730904704099201392),('contract-bill-report-347', 61, 'Default', 77963, 1730904704099203184),('contract-bill-report-348', 61, 'Default', 77963, 1730904704099204951),('contract-bill-report-349', 61, 'Default', 77963, 1730904704099206782),('contract-bill-report-350', 61, 'Default', 77963, 1730904704099208567),('contract-bill-report-351', 61, 'Default', 77963, 1730904704099210338);; +INSERT INTO public_ip (id, gateway, ip, contract_id, farm_id) VALUES ('public-ip-1', '181.66.234.17', '181.66.234.17/24', 0, 'farm-93'),('public-ip-2', '71.110.181.15', '71.110.181.15/24', 0, 'farm-17'),('public-ip-3', '214.151.29.65', '214.151.29.65/24', 0, 'farm-93'),('public-ip-4', '41.186.77.236', '41.186.77.236/24', 0, 'farm-11'),('public-ip-5', '189.42.117.229', '189.42.117.229/24', 0, 'farm-70'),('public-ip-6', '110.47.228.227', '110.47.228.227/24', 0, 'farm-53'),('public-ip-7', '152.116.123.213', '152.116.123.213/24', 0, 'farm-98'),('public-ip-8', '121.240.201.53', '121.240.201.53/24', 0, 'farm-54'),('public-ip-9', '21.73.143.53', '21.73.143.53/24', 0, 'farm-70'),('public-ip-10', '216.180.100.60', '216.180.100.60/24', 0, 'farm-37');; +UPDATE node_contract set number_of_public_i_ps = number_of_public_i_ps + 1 WHERE contract_id IN (16,32,6,37,8,34,21,0,9,27);; +UPDATE public_ip SET contract_id = 8 WHERE id = 'public-ip-5'; +UPDATE public_ip SET contract_id = 34 WHERE id = 'public-ip-6'; +UPDATE public_ip SET contract_id = 21 WHERE id = 'public-ip-7'; +UPDATE public_ip SET contract_id = 9 WHERE id = 'public-ip-9'; +UPDATE public_ip SET contract_id = 27 WHERE id = 'public-ip-10'; +UPDATE public_ip SET contract_id = 32 WHERE id = 'public-ip-2'; +UPDATE public_ip SET contract_id = 6 WHERE id = 'public-ip-3'; +UPDATE public_ip SET contract_id = 16 WHERE id = 'public-ip-1'; +UPDATE public_ip SET contract_id = 37 WHERE id = 'public-ip-4'; +INSERT INTO node_gpu (node_twin_id, id, vendor, device, contract) VALUES (103, 'node-gpu-103-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(103, 'node-gpu-103-1', 'AMD', 'Radeon RX 6800 XT', 1),(103, 'node-gpu-103-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(104, 'node-gpu-104-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(104, 'node-gpu-104-1', 'AMD', 'Radeon RX 6800 XT', 0),(104, 'node-gpu-104-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0),(105, 'node-gpu-105-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(105, 'node-gpu-105-1', 'AMD', 'Radeon RX 6800 XT', 1),(105, 'node-gpu-105-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(106, 'node-gpu-106-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(106, 'node-gpu-106-1', 'AMD', 'Radeon RX 6800 XT', 0),(106, 'node-gpu-106-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0),(107, 'node-gpu-107-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(107, 'node-gpu-107-1', 'AMD', 'Radeon RX 6800 XT', 1),(107, 'node-gpu-107-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(108, 'node-gpu-108-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(108, 'node-gpu-108-1', 'AMD', 'Radeon RX 6800 XT', 0),(108, 'node-gpu-108-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0),(109, 'node-gpu-109-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(109, 'node-gpu-109-1', 'AMD', 'Radeon RX 6800 XT', 1),(109, 'node-gpu-109-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(110, 'node-gpu-110-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(110, 'node-gpu-110-1', 'AMD', 'Radeon RX 6800 XT', 0),(110, 'node-gpu-110-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0),(111, 'node-gpu-111-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(111, 'node-gpu-111-1', 'AMD', 'Radeon RX 6800 XT', 1),(111, 'node-gpu-111-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(112, 'node-gpu-112-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(112, 'node-gpu-112-1', 'AMD', 'Radeon RX 6800 XT', 0),(112, 'node-gpu-112-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0);; +INSERT INTO country (id, country_id, code, name, region, subregion, lat, long) VALUES ('country-2', 2, 'BG', 'Belgium', 'Europe', 'unknown', '0', '0'),('country-3', 3, 'US', 'United States', 'Americas', 'unknown', '0', '0'),('country-4', 4, 'EG', 'Egypt', 'Africa', 'unknown', '0', '0'),('country-5', 5, 'UK', 'United Kingdom', 'Europe', 'unknown', '0', '0');; + + INSERT INTO public.pricing_policy ( + id, grid_version, pricing_policy_id, name, su, cu, nu, ipu, + foundation_account, certified_sales_account, dedicated_node_discount + ) VALUES ( + '1', 2, 1, 'threefold_default_pricing_policy', + '{"value": 50000, "unit": "Gigabytes"}', + '{"value": 100000, "unit": "Gigabytes"}', + '{"value": 15000, "unit": "Gigabytes"}', + '{"value": 40000, "unit": "Gigabytes"}', + '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', + '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', + 50 + );; From c5e87d5e6caeb93d52c28f3e21e823ee6945a4ba Mon Sep 17 00:00:00 2001 From: nabil salah Date: Thu, 7 Nov 2024 14:06:31 +0200 Subject: [PATCH 03/10] feat: getfarm testing and fix database to clean and generate with every test Signed-off-by: nabil salah --- grid-proxy/internal/explorer/db/db_test.go | 148 ------------------ .../explorer/db/tests/db_getters_test.go | 100 ++++++++++++ .../internal/explorer/db/tests/db_test.go | 80 ++++++++++ .../db/{ => tests}/fixtures/testdata.sql | 0 4 files changed, 180 insertions(+), 148 deletions(-) delete mode 100644 grid-proxy/internal/explorer/db/db_test.go create mode 100644 grid-proxy/internal/explorer/db/tests/db_getters_test.go create mode 100644 grid-proxy/internal/explorer/db/tests/db_test.go rename grid-proxy/internal/explorer/db/{ => tests}/fixtures/testdata.sql (100%) diff --git a/grid-proxy/internal/explorer/db/db_test.go b/grid-proxy/internal/explorer/db/db_test.go deleted file mode 100644 index d435dc1a5..000000000 --- a/grid-proxy/internal/explorer/db/db_test.go +++ /dev/null @@ -1,148 +0,0 @@ -package db - -import ( - "context" - "log" - "os" - "testing" - "time" - - "database/sql" - - "github.com/stretchr/testify/assert" - "gorm.io/gorm/logger" -) - - - -func TestMain(m *testing.M){ - - testDb, err := sql.Open("postgres","host=localhost user=postgres port=5432 password=mypassword dbname=testdb sslmode=disable") - - if err != nil{ - log.Fatalf("could not fill db fixtures: %v", err) - } - defer testDb.Close() - - // Load and execute schema - schema, err := os.ReadFile("../../../tools/db/schema.sql") - if err != nil { - log.Fatalf("could not load schema sql file: %v", err) - } - _, err = testDb.Exec(string(schema)) - if err != nil { - log.Fatalf("could not apply schema: %v", err) - } - - // - // Load and execute schema - setup, err := os.ReadFile("../../../tools/db/setup.sql") - if err != nil { - log.Fatalf("could not load setup sql file: %v", err) - } - _, err = testDb.Exec(string(setup)) - if err != nil { - log.Fatalf("could not apply setup: %v", err) - } - - // it looks like a useless block but everything breaks when it's removed - _, err = testDb.Query("SELECT current_database();") - if err != nil { - panic(err) - } - - // Load and execute fixture data - queries, err := os.ReadFile("./fixtures/testdata.sql") - if err != nil { - log.Fatalf("could not load query sql file: %v", err) - } - _, err = testDb.Exec(string(queries)) - if err != nil { - log.Fatalf("could not populate db: %v", err) - } - time.Sleep(5* time.Second) - code := m.Run() - // Drop the database after tests - defer testDb.Exec( - ` - DROP TABLE IF EXISTS account CASCADE; - DROP TABLE IF EXISTS burn_transaction CASCADE; - DROP TABLE IF EXISTS city CASCADE; - DROP TABLE IF EXISTS contract_bill_report CASCADE; - DROP TABLE IF EXISTS contract_resources CASCADE; - DROP TABLE IF EXISTS country CASCADE; - DROP TABLE IF EXISTS entity CASCADE; - DROP TABLE IF EXISTS entity_proof CASCADE; - DROP TABLE IF EXISTS farm CASCADE; - DROP TABLE IF EXISTS farming_policy CASCADE; - DROP TABLE IF EXISTS historical_balance CASCADE; - DROP TABLE IF EXISTS interfaces CASCADE; - DROP TABLE IF EXISTS location CASCADE; - DROP TABLE IF EXISTS migrations CASCADE; - DROP TABLE IF EXISTS mint_transaction CASCADE; - DROP TABLE IF EXISTS name_contract CASCADE; - DROP TABLE IF EXISTS node CASCADE; - DROP TABLE IF EXISTS node_contract CASCADE; - DROP TABLE IF EXISTS node_resources_free CASCADE; - DROP TABLE IF EXISTS node_resources_total CASCADE; - DROP TABLE IF EXISTS node_resources_used CASCADE; - DROP TABLE IF EXISTS nru_consumption CASCADE; - DROP TABLE IF EXISTS pricing_policy CASCADE; - DROP TABLE IF EXISTS public_config CASCADE; - DROP TABLE IF EXISTS public_ip CASCADE; - DROP TABLE IF EXISTS refund_transaction CASCADE; - DROP TABLE IF EXISTS rent_contract CASCADE; - DROP TABLE IF EXISTS transfer CASCADE; - DROP TABLE IF EXISTS twin CASCADE; - DROP TABLE IF EXISTS typeorm_metadata CASCADE; - DROP TABLE IF EXISTS uptime_event CASCADE; - DROP SCHEMA IF EXISTS substrate_threefold_status CASCADE; - DROP TABLE IF EXISTS node_gpu CASCADE; - - `) - - os.Exit(code) - -} - -// TestPostgresDatabase_GetNode tests the GetNode function. -func TestPostgresDatabase_GetNode(t *testing.T) { - - db, err := NewPostgresDatabase("localhost", 5432,"postgres","mypassword","testdb", 80, logger.Error) - - if err != nil { - t.Skipf("Can't connect to testdb %e", err) - } - ctx := context.Background() - - // Test case 1: Node exists - t.Run("Node exists", func(t *testing.T) { - nodeID := uint32(118) // Node ID from the fixture data - - node, err := db.GetNode(ctx, nodeID) - - // Assert no error - assert.NoError(t, err) - // Assert the node data matches fixture values - assert.Equal(t, "node-118", node.ID) - assert.Equal(t, int64(118), node.NodeID) - assert.Equal(t, int64(52), node.FarmID) - assert.Equal(t, "United States", node.Country) - assert.Equal(t, "Los Angeles", node.City) - assert.Equal(t, int64(1000), node.Uptime) - assert.Equal(t, int64(1730904704), node.Created) - assert.Equal(t, "Diy", node.Certification) - }) - - // Test case 2: Node does not exist - t.Run("Node does not exist", func(t *testing.T) { - nonExistentNodeID := uint32(99999) // Node ID that doesn’t exist - - node, err := db.GetNode(ctx, nonExistentNodeID) - - // Assert error is ErrNodeNotFound - assert.ErrorIs(t, err, ErrNodeNotFound) - // Assert returned node is empty - assert.Equal(t, Node{}, node) - }) -} \ No newline at end of file diff --git a/grid-proxy/internal/explorer/db/tests/db_getters_test.go b/grid-proxy/internal/explorer/db/tests/db_getters_test.go new file mode 100644 index 000000000..5b9167813 --- /dev/null +++ b/grid-proxy/internal/explorer/db/tests/db_getters_test.go @@ -0,0 +1,100 @@ +package db + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/internal/explorer/db" + "gorm.io/gorm/logger" +) + +// TestPostgresDatabase_GetNode tests the GetNode function. +func TestPostgresDatabase_GetNode(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432,"postgres","mypassword","testdb", 80, logger.Error) + + if err != nil { + t.Skipf("Can't connect to testdb %e", err) + } + ctx := context.Background() + + // Test case 1: Node exists + t.Run("Node exists", func(t *testing.T) { + nodeID := uint32(118) // Node ID from the fixture data + + node, err := dbTest.GetNode(ctx, nodeID) + + // Assert no error + assert.NoError(t, err) + // Assert the node data matches fixture values + assert.Equal(t, "node-118", node.ID) + assert.Equal(t, int64(118), node.NodeID) + assert.Equal(t, int64(52), node.FarmID) + assert.Equal(t, "United States", node.Country) + assert.Equal(t, "Los Angeles", node.City) + assert.Equal(t, int64(1000), node.Uptime) + assert.Equal(t, int64(1730904704), node.Created) + assert.Equal(t, "Diy", node.Certification) + }) + + // Test case 2: Node does not exist + t.Run("Node does not exist", func(t *testing.T) { + nonExistentNodeID := uint32(99999) // Node ID that doesn’t exist + + node, err := dbTest.GetNode(ctx, nonExistentNodeID) + + assert.ErrorIs(t, err, db.ErrNodeNotFound) + assert.Equal(t, db.Node{}, node) + }) +} + +// TestPostgresDatabase_GetFarm tests the GetFarm function. +func TestPostgresDatabase_GetFarm(t *testing.T) { + // Connect to the test database + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + // Test case 1: Farm exists + t.Run("Farm exists Dedicated", func(t *testing.T) { + farmID := uint32(3) // Farm ID from the fixture data + + farm, err := dbTest.GetFarm(ctx, farmID) + + assert.NoError(t, err) + assert.Equal(t, int(3), farm.FarmID) + assert.Equal(t, "farm-name-3", farm.Name) + assert.Equal(t, int(5), farm.TwinID) + assert.Equal(t, int(1), farm.PricingPolicyID) + //assert.True(t, farm.Dedicated) + assert.Equal(t, "Diy", farm.Certification) + }) + + // Test case 2: Farm exists + t.Run("Farm exists not Dedicated", func(t *testing.T) { + farmID := uint32(4) // Farm ID from the fixture data + + farm, err := dbTest.GetFarm(ctx, farmID) + + assert.NoError(t, err) + assert.Equal(t, int(4), farm.FarmID) + assert.Equal(t, "farm-name-4", farm.Name) + assert.Equal(t, int(6), farm.TwinID) + assert.Equal(t, int(1), farm.PricingPolicyID) + //assert.False(t, farm.Dedicated) + assert.Equal(t, "Diy", farm.Certification) + }) + + // Test case 3: Farm does not exist + t.Run("Farm does not exist", func(t *testing.T) { + nonExistentFarmID := uint32(999) // Farm ID that doesn’t exist + + farm, _ := dbTest.GetFarm(ctx, nonExistentFarmID) + + //assert.ErrorIs(t, err, db.ErrFarmNotFound) + assert.Equal(t, db.Farm{}, farm) + }) +} \ No newline at end of file diff --git a/grid-proxy/internal/explorer/db/tests/db_test.go b/grid-proxy/internal/explorer/db/tests/db_test.go new file mode 100644 index 000000000..8436e3791 --- /dev/null +++ b/grid-proxy/internal/explorer/db/tests/db_test.go @@ -0,0 +1,80 @@ +package db + +import ( + "log" + "os" + "testing" + + "database/sql" +) + + + +func TestMain(m *testing.M){ + + // Connect to the default `postgres` database to create `testdb` + initialDb, err := sql.Open("postgres", "host=localhost user=postgres port=5432 password=mypassword sslmode=disable") + if err != nil { + log.Fatalf("could not connect to default database: %v", err) + } + defer initialDb.Close() + + // drop the `testdb` database + _, err = initialDb.Exec(`DROP DATABASE IF EXISTS testdb;`) + if err != nil { + log.Fatalf("could not create testdb database: %v", err) + } + + // Create the `testdb` database + _, err = initialDb.Exec(`CREATE DATABASE testdb;`) + if err != nil { + log.Fatalf("could not create testdb database: %v", err) + } + + // Connect to `testdb` + testDb, err := sql.Open("postgres", "host=localhost user=postgres dbname=testdb port=5432 password=mypassword sslmode=disable") + if err != nil { + log.Fatalf("could not connect to testdb: %v", err) + } + defer testDb.Close() + + // Load and execute schema + schema, err := os.ReadFile("../../../../tools/db/schema.sql") + if err != nil { + log.Fatalf("could not load schema sql file: %v", err) + } + _, err = testDb.Exec(string(schema)) + if err != nil { + log.Fatalf("could not apply schema: %v", err) + } + + // it looks like a useless block but everything breaks when it's removed + _, err = testDb.Query("SELECT current_database();") + if err != nil { + log.Fatalf("%e", err) + } + + // Load and execute schema + setup, err := os.ReadFile("../setup.sql") + if err != nil { + log.Fatalf("could not load setup sql file: %v", err) + } + _, err = testDb.Exec(string(setup)) + if err != nil { + log.Fatalf("could not apply setup: %v", err) + } + + // Load and execute fixture data + queries, err := os.ReadFile("./fixtures/testdata.sql") + if err != nil { + log.Fatalf("could not load query sql file: %v", err) + } + _, err = testDb.Exec(string(queries)) + if err != nil { + log.Fatalf("could not populate db: %v", err) + } + code := m.Run() + os.Exit(code) + +} + diff --git a/grid-proxy/internal/explorer/db/fixtures/testdata.sql b/grid-proxy/internal/explorer/db/tests/fixtures/testdata.sql similarity index 100% rename from grid-proxy/internal/explorer/db/fixtures/testdata.sql rename to grid-proxy/internal/explorer/db/tests/fixtures/testdata.sql From 8bed167a135080baedbaee9cd305dbcde47c851d Mon Sep 17 00:00:00 2001 From: nabil salah Date: Tue, 12 Nov 2024 15:23:03 +0200 Subject: [PATCH 04/10] feat: add tests to all the getter methods in the database Signed-off-by: nabil salah --- .../explorer/db/tests/db_getters_test.go | 451 +++++++++++++++++- 1 file changed, 441 insertions(+), 10 deletions(-) diff --git a/grid-proxy/internal/explorer/db/tests/db_getters_test.go b/grid-proxy/internal/explorer/db/tests/db_getters_test.go index 5b9167813..1c70583da 100644 --- a/grid-proxy/internal/explorer/db/tests/db_getters_test.go +++ b/grid-proxy/internal/explorer/db/tests/db_getters_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/internal/explorer/db" + "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" "gorm.io/gorm/logger" ) @@ -19,15 +20,12 @@ func TestPostgresDatabase_GetNode(t *testing.T) { } ctx := context.Background() - // Test case 1: Node exists t.Run("Node exists", func(t *testing.T) { nodeID := uint32(118) // Node ID from the fixture data node, err := dbTest.GetNode(ctx, nodeID) - // Assert no error assert.NoError(t, err) - // Assert the node data matches fixture values assert.Equal(t, "node-118", node.ID) assert.Equal(t, int64(118), node.NodeID) assert.Equal(t, int64(52), node.FarmID) @@ -38,9 +36,8 @@ func TestPostgresDatabase_GetNode(t *testing.T) { assert.Equal(t, "Diy", node.Certification) }) - // Test case 2: Node does not exist t.Run("Node does not exist", func(t *testing.T) { - nonExistentNodeID := uint32(99999) // Node ID that doesn’t exist + nonExistentNodeID := uint32(99999) // Node ID that doesn’t exist in the fixture data node, err := dbTest.GetNode(ctx, nonExistentNodeID) @@ -51,14 +48,13 @@ func TestPostgresDatabase_GetNode(t *testing.T) { // TestPostgresDatabase_GetFarm tests the GetFarm function. func TestPostgresDatabase_GetFarm(t *testing.T) { - // Connect to the test database + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } ctx := context.Background() - // Test case 1: Farm exists t.Run("Farm exists Dedicated", func(t *testing.T) { farmID := uint32(3) // Farm ID from the fixture data @@ -73,7 +69,6 @@ func TestPostgresDatabase_GetFarm(t *testing.T) { assert.Equal(t, "Diy", farm.Certification) }) - // Test case 2: Farm exists t.Run("Farm exists not Dedicated", func(t *testing.T) { farmID := uint32(4) // Farm ID from the fixture data @@ -88,13 +83,449 @@ func TestPostgresDatabase_GetFarm(t *testing.T) { assert.Equal(t, "Diy", farm.Certification) }) - // Test case 3: Farm does not exist t.Run("Farm does not exist", func(t *testing.T) { - nonExistentFarmID := uint32(999) // Farm ID that doesn’t exist + nonExistentFarmID := uint32(999) // Farm ID that doesn’t exist in the fixture data farm, _ := dbTest.GetFarm(ctx, nonExistentFarmID) //assert.ErrorIs(t, err, db.ErrFarmNotFound) assert.Equal(t, db.Farm{}, farm) }) +} + + +// TestPostgresDatabase_GetNodes tests the GetNodes function. +func TestPostgresDatabase_GetNodes(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Retrieve all nodes", func(t *testing.T) { + filter := types.NodeFilter{} + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + nodes, count, err := dbTest.GetNodes(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(600), count) + assert.NotEmpty(t, nodes) + }) + + t.Run("Filter by farm id", func(t *testing.T) { + farmId := []uint64{100} + filter := types.NodeFilter{ + FarmIDs: farmId, + } + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + _, count, err := dbTest.GetNodes(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(3), count ) + }) + + t.Run("Filter by farm id and add limit to 2 nodes", func(t *testing.T) { + farmId := []uint64{100} + filter := types.NodeFilter{ + FarmIDs: farmId, + } + limit := types.Limit{ + Size: 2, + Page: 1, + } + + nodes, _, err := dbTest.GetNodes(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, 2, len(nodes)) + }) + + t.Run("Filter by country presence", func(t *testing.T) { + country := "Egypt" + filter := types.NodeFilter{ + Country: &country, + } + limit := types.Limit{ + Size: 999999999999, + Page: 1, + } + + nodes, _, err := dbTest.GetNodes(ctx, filter, limit) + + assert.NoError(t, err) + for _, node := range nodes { + assert.Equal(t, country, node.Country) + } + }) +} + + +// TestPostgresDatabase_GetNodes tests the GetFarms function. +func TestPostgresDatabase_GetFarms(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Retrieve all farms", func(t *testing.T) { + filter := types.FarmFilter{} + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + nodes, count, err := dbTest.GetFarms(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(100), count ) + assert.NotEmpty(t, nodes) + }) + +} + +// TestPostgresDatabase_GetTwins tests the GetTwins function. +func TestPostgresDatabase_GetTwins(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Retrieve all twins", func(t *testing.T) { + filter := types.TwinFilter{} + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + _, count, err := dbTest.GetTwins(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(1300), count ) + }) + + t.Run("Retrieve twin with twin id", func(t *testing.T) { + twinId := uint64(1) + filter := types.TwinFilter{ + TwinID: &twinId, + } + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + twin, count, err := dbTest.GetTwins(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(1), count) + assert.Equal(t, twinId, twinId, twin[0].TwinID) + assert.Equal(t, "account-id-1", twin[0].AccountID) + assert.Equal(t, "relay-1", twin[0].Relay) + assert.Equal(t, "public-key-1", twin[0].PublicKey) + }) +} + + +// TestPostgresDatabase_GetContracts tests the GetContracts function. +func TestPostgresDatabase_GetContracts(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Retrieve all contracts", func(t *testing.T) { + filter := types.ContractFilter{} + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + _, count, err := dbTest.GetContracts(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(61), count ) + }) + + t.Run("Retrieve contract with id", func(t *testing.T) { + id := uint64(37) + filter := types.ContractFilter{ + ContractID: &id, + } + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + contract, count, err := dbTest.GetContracts(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(1), count ) + assert.Equal(t, uint(37), contract[0].ContractID) + assert.Equal(t, uint(303), contract[0].NodeID) + assert.Equal(t, uint(1), contract[0].NumberOfPublicIps) + }) + + t.Run("Retrieve contract with id", func(t *testing.T) { + id := uint64(52) + filter := types.ContractFilter{ + ContractID: &id, + } + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + contract, count, err := dbTest.GetContracts(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(1), count ) + assert.Equal(t, uint(52), contract[0].ContractID) + assert.Equal(t, "401c4f28-4a84-47ff-9a91-50426305db00", contract[0].Name) + }) + + t.Run("Retrieve contract with twin id", func(t *testing.T) { + id := uint64(2705) + filter := types.ContractFilter{ + TwinID: &id, + } + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + contract, count, err := dbTest.GetContracts(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(1), count ) + assert.Equal(t, uint(52), contract[0].ContractID) + assert.Equal(t, "401c4f28-4a84-47ff-9a91-50426305db00", contract[0].Name) + }) + + t.Run("Retrieve contract with type Created", func(t *testing.T) { + contractType := []string{"Created"} + filter := types.ContractFilter{ + State: contractType, + } + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + + contracts, count, err := dbTest.GetContracts(ctx, filter, limit) + + assert.NoError(t, err) + //name contracts + node contracts + assert.Equal(t, uint(29), count) + for _, contract := range contracts { + assert.Equal(t, contractType[0] ,contract.State) + } + }) + +} + + +// TestPostgresDatabase_GetContract tests the GetContract function. +func TestPostgresDatabase_GetContract(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Retrieve contract with id", func(t *testing.T) { + id := uint32(37) + contract, err := dbTest.GetContract(ctx, id) + + assert.NoError(t, err) + assert.NotNil(t, contract) + assert.Equal(t, uint(37), contract.ContractID) + assert.Equal(t, uint(303), contract.NodeID) + assert.Equal(t, uint(1), contract.NumberOfPublicIps) + }) + + + t.Run("Retrieve contract with id", func(t *testing.T) { + id := uint32(52) + contract, err := dbTest.GetContract(ctx, id) + + assert.NoError(t, err) + assert.NotNil(t, contract) + assert.Equal(t, uint(52), contract.ContractID) + assert.Equal(t, "401c4f28-4a84-47ff-9a91-50426305db00", contract.Name) + }) + + t.Run("Retrieve contract with id not found", func(t *testing.T) { + id := uint32(999) + contract, err := dbTest.GetContract(ctx, id) + + assert.ErrorIs(t, err, db.ErrContractNotFound) + assert.Equal(t, db.DBContract{}, contract) + + }) + +} + + +// TestPostgresDatabase_GetContractBills tests the GetContractBills function. +func TestPostgresDatabase_GetContractBills(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Retrieve contract bills with id", func(t *testing.T) { + id := uint32(37) + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + contractBills, count, err := dbTest.GetContractBills(ctx, id,limit) + + assert.NoError(t, err) + assert.NotNil(t, contractBills) + assert.Equal(t, uint(9), count) + //assert.Equal(t, uint64(37), contractBills[0].ContractId) + }) + + t.Run("Retrieve contract bills with id not found", func(t *testing.T) { + id := uint32(999) + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + _, count, err := dbTest.GetContractBills(ctx, id,limit) + + assert.NoError(t, err) + assert.Equal(t, uint(0), count) + }) + +} + +// TestPostgresDatabase_GetContractsLatestBillReports tests the GetContractsLatestBillReports function. +func TestPostgresDatabase_GetContractsLatestBillReports(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Retrieve contract bills with id", func(t *testing.T) { + id := []uint32{37} + contractBills, err := dbTest.GetContractsLatestBillReports(ctx, id, 2) + + assert.NoError(t, err) + assert.NotNil(t, contractBills) + assert.Equal(t, 2, len(contractBills)) + //assert.Equal(t, uint64(37), contractBills[0].ContractId) + }) + +} + +// TestPostgresDatabase_GetContractsTotalBilledAmount tests the GetContractsTotalBilledAmount function. +func TestPostgresDatabase_GetContractsTotalBilledAmount(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Retrieve contract bills with one id", func(t *testing.T) { + id := []uint32{37} + totalBills, err := dbTest.GetContractsTotalBilledAmount(ctx, id) + + assert.NoError(t, err) + assert.Equal(t, uint64(825687),totalBills) + //assert.Equal(t, uint64(37), contractBills[0].ContractId) + }) + + t.Run("Retrieve contract bills with multiple ids", func(t *testing.T) { + id := []uint32{1, 37} + totalBills, err := dbTest.GetContractsTotalBilledAmount(ctx, id) + + assert.NoError(t, err) + assert.Equal(t, uint64(176890 + 825687),totalBills) + }) + +} + +// TestPostgresDatabase_GetPublicIps tests the GetPublicIps function. +func TestPostgresDatabase_GetPublicIps(t *testing.T) { + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Retrieve Public Ips with Ip address", func(t *testing.T) { + ip := "181.66.234.17/24" + filter := types.PublicIpFilter{ + Ip: &ip, + } + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + } + publicIp, count, err := dbTest.GetPublicIps(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(1), count) + assert.Equal(t, uint64(93), publicIp[0].FarmID) + assert.Equal(t, uint64(16), publicIp[0].ContractID) + }) + + t.Run("Retrieve Public Ips with farm id", func(t *testing.T) { + farmIds := []uint64{93} + filter := types.PublicIpFilter{ + FarmIDs: farmIds, + } + limit := types.Limit{ + Size: 999999999999, + Page: 1, + RetCount: true, + SortBy: "contract_id", + SortOrder: types.SortOrderAsc, + } + publicIp, count, err := dbTest.GetPublicIps(ctx, filter, limit) + + assert.NoError(t, err) + assert.Equal(t, uint(2), count) + assert.Equal(t, uint64(93), publicIp[0].FarmID) + assert.Equal(t, uint64(93), publicIp[1].FarmID) + assert.Equal(t, uint64(6), publicIp[0].ContractID) + assert.Equal(t, uint64(16), publicIp[1].ContractID) + }) + } \ No newline at end of file From ecd3db1fe292874d51f47e1265b0e21ffd3f6810 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Wed, 13 Nov 2024 12:29:36 +0200 Subject: [PATCH 05/10] feat: implement all the remaining tests for indexers and fixed: fixture db to include dates Signed-off-by: nabil salah --- .../db/tests/db_indexer_upserters_test.go | 217 ++++++++++++++++++ .../db/tests/db_indexer_utils_test.go | 93 ++++++++ .../explorer/db/tests/fixtures/testdata.sql | 43 +++- 3 files changed, 352 insertions(+), 1 deletion(-) create mode 100644 grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go create mode 100644 grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go diff --git a/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go b/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go new file mode 100644 index 000000000..cbba1d236 --- /dev/null +++ b/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go @@ -0,0 +1,217 @@ +package db + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/internal/explorer/db" + "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" + "gorm.io/gorm/logger" +) + +// TestPostgresDatabase_UpsertNodesGPU tests the UpsertNodesGPU function. +func TestPostgresDatabase_UpsertNodesGPU(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Nodes GPU", func(t *testing.T) { + //take care not to interfere with other tests like (TestPostgresDatabase_DeleteOldGpus) + gpus := []types.NodeGPU{ + {ID: "node-gpu-104-3", NodeTwinID: 104, Vendor: "NVIDIA", Device: "RTX 3090", Contract: 1, UpdatedAt: time.Now().Unix()}, + {ID: "node-gpu-102-0", NodeTwinID: 102, Vendor: "AMD", Device: "RX 6800", Contract: 1, UpdatedAt: time.Now().Unix()}, + } + err := dbTest.UpsertNodesGPU(ctx, gpus) + assert.NoError(t, err) + // TODO check number of gpus for the nodes after finnish (currently node gpu doesn't map right) + // res, err := dbTest.GetNode(ctx, uint32(104)) + // assert.NoError(t, err) + // assert.Equal(t, len(res.Gpus), 3) + + // res, err = dbTest.GetNode(ctx, uint32(102)) + // assert.NoError(t, err) + // assert.Equal(t, len(res.Gpus), 1) + + }) +} + +// TestPostgresDatabase_UpsertNodeHealth tests the UpsertNodeHealth function. +func TestPostgresDatabase_UpsertNodeHealth(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node Health", func(t *testing.T) { + healthReports := []types.HealthReport{ + //two ids that aren't in the health table + {NodeTwinId: 115, Healthy: true, UpdatedAt: time.Now().Unix()}, + {NodeTwinId: 114, Healthy: false, UpdatedAt: time.Now().Unix()}, + } + + countOfHealthyNodeIds, err := dbTest.GetHealthyNodeTwinIds(ctx) + assert.NoError(t,err) + err = dbTest.UpsertNodeHealth(ctx, healthReports) + assert.NoError(t, err) + + currCountOfHealthyNodeIds, err := dbTest.GetHealthyNodeTwinIds(ctx) + assert.NoError(t,err) + + assert.Equal(t, len(countOfHealthyNodeIds)+1, len(currCountOfHealthyNodeIds)) + }) +} + +// TestPostgresDatabase_UpsertNodeDmi tests the UpsertNodeDmi function. +func TestPostgresDatabase_UpsertNodeDmi(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node DMI", func(t *testing.T) { + dmis := []types.Dmi{ + { + NodeTwinId: 105, + BIOS: types.BIOS{ + Vendor: "American Megatrends", + Version: "v1.0", + }, + Baseboard: types.Baseboard{ + Manufacturer: "ASUS", + ProductName: "Prime Z390-A", + }, + Processor: []types.Processor{ + { + Version: "Intel Core i7-9700K", + ThreadCount: "8", + }, + }, + Memory: []types.Memory{ + { + Manufacturer: "Kingston", + Type: "DDR4 16GB", + }, + }, + UpdatedAt: time.Now().Unix(), + }, + { + NodeTwinId: 106, + BIOS: types.BIOS{ + Vendor: "Phoenix Technologies", + Version: "v2.0", + }, + Baseboard: types.Baseboard{ + Manufacturer: "Gigabyte", + ProductName: "B450 AORUS PRO WIFI", + }, + Processor: []types.Processor{ + { + Version: "AMD Ryzen 7 3700X", + ThreadCount: "16", + }, + }, + Memory: []types.Memory{ + { + Manufacturer: "Corsair", + Type: "DDR4 32GB", + }, + }, + UpdatedAt: time.Now().Unix(), + }, + } + + err := dbTest.UpsertNodeDmi(ctx, dmis) + assert.NoError(t, err) + //todo verify whether these Dmi's are really upserted right or not + + }) +} + +// TestPostgresDatabase_UpsertNetworkSpeed tests the UpsertNetworkSpeed function. +func TestPostgresDatabase_UpsertNetworkSpeed(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Network Speed", func(t *testing.T) { + speeds := []types.Speed{ + {NodeTwinId: 104, Download: 100.5, Upload: 50.2, UpdatedAt: time.Now().Unix()}, + {NodeTwinId: 105, Download: 150.8, Upload: 75.1, UpdatedAt: time.Now().Unix()}, + } + + err := dbTest.UpsertNetworkSpeed(ctx, speeds) + assert.NoError(t, err) + //todo verify whether these speed's are really upserted right or not + }) +} + +// TestPostgresDatabase_UpsertNodeIpv6Report tests the UpsertNodeIpv6Report function. +func TestPostgresDatabase_UpsertNodeIpv6Report(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node IPv6 Report", func(t *testing.T) { + ips := []types.HasIpv6{ + {NodeTwinId: 104, HasIpv6: true, UpdatedAt: time.Now().Unix()}, + {NodeTwinId: 105, HasIpv6: false, UpdatedAt: time.Now().Unix()}, + } + + err := dbTest.UpsertNodeIpv6Report(ctx, ips) + assert.NoError(t, err) + //todo verify whether these HasIpv6's are really upserted right or not + }) +} + +// TestPostgresDatabase_UpsertNodeWorkloads tests the UpsertNodeWorkloads function. +func TestPostgresDatabase_UpsertNodeWorkloads(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node Workloads", func(t *testing.T) { + workloads := []types.NodesWorkloads{ + {NodeTwinId: 101, WorkloadsNumber: 5, UpdatedAt: time.Now().Unix()}, + {NodeTwinId: 102, WorkloadsNumber: 3, UpdatedAt: time.Now().Unix()}, + } + + err := dbTest.UpsertNodeWorkloads(ctx, workloads) + assert.NoError(t, err) + //todo verify whether these NodesWorkloads's are really upserted right or not + }) +} + + +// TestPostgresDatabase_GetLastUpsertsTimestamp tests the GetLastUpsertsTimestamp function. +func TestPostgresDatabase_GetLastUpsertsTimestamp(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node Workloads", func(t *testing.T) { + currTime := time.Now().Unix() + workloads := []types.NodesWorkloads{ + {NodeTwinId: 104, WorkloadsNumber: 5, UpdatedAt: currTime}, + } + err := dbTest.UpsertNodeWorkloads(ctx, workloads) + assert.NoError(t, err) + + state, err := dbTest.GetLastUpsertsTimestamp() + assert.NoError(t, err) + assert.Equal(t, currTime, state.Workloads.UpdatedAt) + }) +} \ No newline at end of file diff --git a/grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go b/grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go new file mode 100644 index 000000000..ce1d174d5 --- /dev/null +++ b/grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go @@ -0,0 +1,93 @@ +package db + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/internal/explorer/db" + "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" + "gorm.io/gorm/logger" +) + +// TestPostgresDatabase_DeleteOldGpus tests the DeleteOldGpus function. +func TestPostgresDatabase_DeleteOldGpus(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Delete GPUs older than expiration", func(t *testing.T) { + nodeTwinIDs := []uint32{103} + expiration := int64(1731429101) + + err := dbTest.DeleteOldGpus(ctx, nodeTwinIDs, expiration) + assert.NoError(t, err) + //todo verify whether these gpus are really deleted or not + + }) +} + +// TestPostgresDatabase_GetLastNodeTwinID tests the GetLastNodeTwinID function. +func TestPostgresDatabase_GetLastNodeTwinID(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Get last node twin ID", func(t *testing.T) { + lastTwinID, err := dbTest.GetLastNodeTwinID(ctx) + + assert.NoError(t, err) + assert.Equal(t, uint32(702), lastTwinID) + }) +} + +// TestPostgresDatabase_GetNodeTwinIDsAfter tests the GetNodeTwinIDsAfter function. +func TestPostgresDatabase_GetNodeTwinIDsAfter(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Get node twin IDs after a certain twin ID", func(t *testing.T) { + startTwinID := uint32(700) + + nodeTwinIDs, err := dbTest.GetNodeTwinIDsAfter(ctx, startTwinID) + assert.NoError(t, err) + + for _, id := range nodeTwinIDs { + assert.Greater(t, id, startTwinID) + } + }) +} + + +// TestPostgresDatabase_GetHealthyNodeTwinIds tests the GetHealthyNodeTwinIds function. +func TestPostgresDatabase_GetHealthyNodeTwinIds(t *testing.T) { + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Get node twin IDs after a certain twin ID", func(t *testing.T) { + + healthReports := []types.HealthReport{ + {NodeTwinId: 112, Healthy: true, UpdatedAt: time.Now().Unix()}, + {NodeTwinId: 113, Healthy: true, UpdatedAt: time.Now().Unix()}, + } + err := dbTest.UpsertNodeHealth(ctx, healthReports) + assert.NoError(t, err) + + nodeTwinIDs, err := dbTest.GetHealthyNodeTwinIds(ctx) + assert.NoError(t, err) + // it depend on whether run first or not + assert.Contains(t, nodeTwinIDs, uint32(112)) + assert.Contains(t, nodeTwinIDs, uint32(113)) + }) +} \ No newline at end of file diff --git a/grid-proxy/internal/explorer/db/tests/fixtures/testdata.sql b/grid-proxy/internal/explorer/db/tests/fixtures/testdata.sql index ff9d8b1c8..afe25094b 100644 --- a/grid-proxy/internal/explorer/db/tests/fixtures/testdata.sql +++ b/grid-proxy/internal/explorer/db/tests/fixtures/testdata.sql @@ -1,3 +1,14 @@ + +ALTER TABLE node_gpu ADD CONSTRAINT unique_node_gpu_id_node_twin_id UNIQUE (id, node_twin_id); +ALTER TABLE health_report ADD CONSTRAINT unique_health_report_node_twin_id UNIQUE (node_twin_id); +ALTER TABLE dmi ADD CONSTRAINT unique_dmi_node_twin_id UNIQUE (node_twin_id); +ALTER TABLE speed ADD CONSTRAINT unique_speed_node_twin_id UNIQUE (node_twin_id); +ALTER TABLE node_ipv6 ADD CONSTRAINT unique_node_ipv6_node_twin_id UNIQUE (node_twin_id); +ALTER TABLE node_workloads ADD CONSTRAINT unique_node_workloads_node_twin_id UNIQUE (node_twin_id); + + + + INSERT INTO twin (id, grid_version, twin_id, account_id, relay, public_key) VALUES ('twin-1', 3, 1, 'account-id-1', 'relay-1', 'public-key-1'),('twin-2', 3, 2, 'account-id-2', 'relay-2', 'public-key-2'),('twin-3', 3, 3, 'account-id-3', 'relay-3', 'public-key-3'),('twin-4', 3, 4, 'account-id-4', 'relay-4', 'public-key-4'),('twin-5', 3, 5, 'account-id-5', 'relay-5', 'public-key-5'),('twin-6', 3, 6, 'account-id-6', 'relay-6', 'public-key-6'),('twin-7', 3, 7, 'account-id-7', 'relay-7', 'public-key-7'),('twin-8', 3, 8, 'account-id-8', 'relay-8', 'public-key-8'),('twin-9', 3, 9, 'account-id-9', 'relay-9', 'public-key-9'),('twin-10', 3, 10, 'account-id-10', 'relay-10', 'public-key-10'),('twin-11', 3, 11, 'account-id-11', 'relay-11', 'public-key-11'),('twin-12', 3, 12, 'account-id-12', 'relay-12', 'public-key-12'),('twin-13', 3, 13, 'account-id-13', 'relay-13', 'public-key-13'),('twin-14', 3, 14, 'account-id-14', 'relay-14', 'public-key-14'),('twin-15', 3, 15, 'account-id-15', 'relay-15', 'public-key-15'),('twin-16', 3, 16, 'account-id-16', 'relay-16', 'public-key-16'),('twin-17', 3, 17, 'account-id-17', 'relay-17', 'public-key-17'),('twin-18', 3, 18, 'account-id-18', 'relay-18', 'public-key-18'),('twin-19', 3, 19, 'account-id-19', 'relay-19', 'public-key-19'),('twin-20', 3, 20, 'account-id-20', 'relay-20', 'public-key-20'),('twin-21', 3, 21, 'account-id-21', 'relay-21', 'public-key-21'),('twin-22', 3, 22, 'account-id-22', 'relay-22', 'public-key-22'),('twin-23', 3, 23, 'account-id-23', 'relay-23', 'public-key-23'),('twin-24', 3, 24, 'account-id-24', 'relay-24', 'public-key-24'),('twin-25', 3, 25, 'account-id-25', 'relay-25', 'public-key-25'),('twin-26', 3, 26, 'account-id-26', 'relay-26', 'public-key-26'),('twin-27', 3, 27, 'account-id-27', 'relay-27', 'public-key-27'),('twin-28', 3, 28, 'account-id-28', 'relay-28', 'public-key-28'),('twin-29', 3, 29, 'account-id-29', 'relay-29', 'public-key-29'),('twin-30', 3, 30, 'account-id-30', 'relay-30', 'public-key-30'),('twin-31', 3, 31, 'account-id-31', 'relay-31', 'public-key-31'),('twin-32', 3, 32, 'account-id-32', 'relay-32', 'public-key-32'),('twin-33', 3, 33, 'account-id-33', 'relay-33', 'public-key-33'),('twin-34', 3, 34, 'account-id-34', 'relay-34', 'public-key-34'),('twin-35', 3, 35, 'account-id-35', 'relay-35', 'public-key-35'),('twin-36', 3, 36, 'account-id-36', 'relay-36', 'public-key-36'),('twin-37', 3, 37, 'account-id-37', 'relay-37', 'public-key-37'),('twin-38', 3, 38, 'account-id-38', 'relay-38', 'public-key-38'),('twin-39', 3, 39, 'account-id-39', 'relay-39', 'public-key-39'),('twin-40', 3, 40, 'account-id-40', 'relay-40', 'public-key-40'),('twin-41', 3, 41, 'account-id-41', 'relay-41', 'public-key-41'),('twin-42', 3, 42, 'account-id-42', 'relay-42', 'public-key-42'),('twin-43', 3, 43, 'account-id-43', 'relay-43', 'public-key-43'),('twin-44', 3, 44, 'account-id-44', 'relay-44', 'public-key-44'),('twin-45', 3, 45, 'account-id-45', 'relay-45', 'public-key-45'),('twin-46', 3, 46, 'account-id-46', 'relay-46', 'public-key-46'),('twin-47', 3, 47, 'account-id-47', 'relay-47', 'public-key-47'),('twin-48', 3, 48, 'account-id-48', 'relay-48', 'public-key-48'),('twin-49', 3, 49, 'account-id-49', 'relay-49', 'public-key-49'),('twin-50', 3, 50, 'account-id-50', 'relay-50', 'public-key-50'),('twin-51', 3, 51, 'account-id-51', 'relay-51', 'public-key-51'),('twin-52', 3, 52, 'account-id-52', 'relay-52', 'public-key-52'),('twin-53', 3, 53, 'account-id-53', 'relay-53', 'public-key-53'),('twin-54', 3, 54, 'account-id-54', 'relay-54', 'public-key-54'),('twin-55', 3, 55, 'account-id-55', 'relay-55', 'public-key-55'),('twin-56', 3, 56, 'account-id-56', 'relay-56', 'public-key-56'),('twin-57', 3, 57, 'account-id-57', 'relay-57', 'public-key-57'),('twin-58', 3, 58, 'account-id-58', 'relay-58', 'public-key-58'),('twin-59', 3, 59, 'account-id-59', 'relay-59', 'public-key-59'),('twin-60', 3, 60, 'account-id-60', 'relay-60', 'public-key-60'),('twin-61', 3, 61, 'account-id-61', 'relay-61', 'public-key-61'),('twin-62', 3, 62, 'account-id-62', 'relay-62', 'public-key-62'),('twin-63', 3, 63, 'account-id-63', 'relay-63', 'public-key-63'),('twin-64', 3, 64, 'account-id-64', 'relay-64', 'public-key-64'),('twin-65', 3, 65, 'account-id-65', 'relay-65', 'public-key-65'),('twin-66', 3, 66, 'account-id-66', 'relay-66', 'public-key-66'),('twin-67', 3, 67, 'account-id-67', 'relay-67', 'public-key-67'),('twin-68', 3, 68, 'account-id-68', 'relay-68', 'public-key-68'),('twin-69', 3, 69, 'account-id-69', 'relay-69', 'public-key-69'),('twin-70', 3, 70, 'account-id-70', 'relay-70', 'public-key-70'),('twin-71', 3, 71, 'account-id-71', 'relay-71', 'public-key-71'),('twin-72', 3, 72, 'account-id-72', 'relay-72', 'public-key-72'),('twin-73', 3, 73, 'account-id-73', 'relay-73', 'public-key-73'),('twin-74', 3, 74, 'account-id-74', 'relay-74', 'public-key-74'),('twin-75', 3, 75, 'account-id-75', 'relay-75', 'public-key-75'),('twin-76', 3, 76, 'account-id-76', 'relay-76', 'public-key-76'),('twin-77', 3, 77, 'account-id-77', 'relay-77', 'public-key-77'),('twin-78', 3, 78, 'account-id-78', 'relay-78', 'public-key-78'),('twin-79', 3, 79, 'account-id-79', 'relay-79', 'public-key-79'),('twin-80', 3, 80, 'account-id-80', 'relay-80', 'public-key-80'),('twin-81', 3, 81, 'account-id-81', 'relay-81', 'public-key-81'),('twin-82', 3, 82, 'account-id-82', 'relay-82', 'public-key-82'),('twin-83', 3, 83, 'account-id-83', 'relay-83', 'public-key-83'),('twin-84', 3, 84, 'account-id-84', 'relay-84', 'public-key-84'),('twin-85', 3, 85, 'account-id-85', 'relay-85', 'public-key-85'),('twin-86', 3, 86, 'account-id-86', 'relay-86', 'public-key-86'),('twin-87', 3, 87, 'account-id-87', 'relay-87', 'public-key-87'),('twin-88', 3, 88, 'account-id-88', 'relay-88', 'public-key-88'),('twin-89', 3, 89, 'account-id-89', 'relay-89', 'public-key-89'),('twin-90', 3, 90, 'account-id-90', 'relay-90', 'public-key-90'),('twin-91', 3, 91, 'account-id-91', 'relay-91', 'public-key-91'),('twin-92', 3, 92, 'account-id-92', 'relay-92', 'public-key-92'),('twin-93', 3, 93, 'account-id-93', 'relay-93', 'public-key-93'),('twin-94', 3, 94, 'account-id-94', 'relay-94', 'public-key-94'),('twin-95', 3, 95, 'account-id-95', 'relay-95', 'public-key-95'),('twin-96', 3, 96, 'account-id-96', 'relay-96', 'public-key-96'),('twin-97', 3, 97, 'account-id-97', 'relay-97', 'public-key-97'),('twin-98', 3, 98, 'account-id-98', 'relay-98', 'public-key-98'),('twin-99', 3, 99, 'account-id-99', 'relay-99', 'public-key-99'),('twin-100', 3, 100, 'account-id-100', 'relay-100', 'public-key-100'),('twin-101', 3, 101, 'account-id-101', 'relay-101', 'public-key-101'),('twin-102', 3, 102, 'account-id-102', 'relay-102', 'public-key-102'),('twin-103', 3, 103, 'account-id-103', 'relay-103', 'public-key-103'),('twin-104', 3, 104, 'account-id-104', 'relay-104', 'public-key-104'),('twin-105', 3, 105, 'account-id-105', 'relay-105', 'public-key-105'),('twin-106', 3, 106, 'account-id-106', 'relay-106', 'public-key-106'),('twin-107', 3, 107, 'account-id-107', 'relay-107', 'public-key-107'),('twin-108', 3, 108, 'account-id-108', 'relay-108', 'public-key-108'),('twin-109', 3, 109, 'account-id-109', 'relay-109', 'public-key-109'),('twin-110', 3, 110, 'account-id-110', 'relay-110', 'public-key-110'),('twin-111', 3, 111, 'account-id-111', 'relay-111', 'public-key-111'),('twin-112', 3, 112, 'account-id-112', 'relay-112', 'public-key-112'),('twin-113', 3, 113, 'account-id-113', 'relay-113', 'public-key-113'),('twin-114', 3, 114, 'account-id-114', 'relay-114', 'public-key-114'),('twin-115', 3, 115, 'account-id-115', 'relay-115', 'public-key-115'),('twin-116', 3, 116, 'account-id-116', 'relay-116', 'public-key-116'),('twin-117', 3, 117, 'account-id-117', 'relay-117', 'public-key-117'),('twin-118', 3, 118, 'account-id-118', 'relay-118', 'public-key-118'),('twin-119', 3, 119, 'account-id-119', 'relay-119', 'public-key-119'),('twin-120', 3, 120, 'account-id-120', 'relay-120', 'public-key-120'),('twin-121', 3, 121, 'account-id-121', 'relay-121', 'public-key-121'),('twin-122', 3, 122, 'account-id-122', 'relay-122', 'public-key-122'),('twin-123', 3, 123, 'account-id-123', 'relay-123', 'public-key-123'),('twin-124', 3, 124, 'account-id-124', 'relay-124', 'public-key-124'),('twin-125', 3, 125, 'account-id-125', 'relay-125', 'public-key-125'),('twin-126', 3, 126, 'account-id-126', 'relay-126', 'public-key-126'),('twin-127', 3, 127, 'account-id-127', 'relay-127', 'public-key-127'),('twin-128', 3, 128, 'account-id-128', 'relay-128', 'public-key-128'),('twin-129', 3, 129, 'account-id-129', 'relay-129', 'public-key-129'),('twin-130', 3, 130, 'account-id-130', 'relay-130', 'public-key-130'),('twin-131', 3, 131, 'account-id-131', 'relay-131', 'public-key-131'),('twin-132', 3, 132, 'account-id-132', 'relay-132', 'public-key-132'),('twin-133', 3, 133, 'account-id-133', 'relay-133', 'public-key-133'),('twin-134', 3, 134, 'account-id-134', 'relay-134', 'public-key-134'),('twin-135', 3, 135, 'account-id-135', 'relay-135', 'public-key-135'),('twin-136', 3, 136, 'account-id-136', 'relay-136', 'public-key-136'),('twin-137', 3, 137, 'account-id-137', 'relay-137', 'public-key-137'),('twin-138', 3, 138, 'account-id-138', 'relay-138', 'public-key-138'),('twin-139', 3, 139, 'account-id-139', 'relay-139', 'public-key-139'),('twin-140', 3, 140, 'account-id-140', 'relay-140', 'public-key-140'),('twin-141', 3, 141, 'account-id-141', 'relay-141', 'public-key-141'),('twin-142', 3, 142, 'account-id-142', 'relay-142', 'public-key-142'),('twin-143', 3, 143, 'account-id-143', 'relay-143', 'public-key-143'),('twin-144', 3, 144, 'account-id-144', 'relay-144', 'public-key-144'),('twin-145', 3, 145, 'account-id-145', 'relay-145', 'public-key-145'),('twin-146', 3, 146, 'account-id-146', 'relay-146', 'public-key-146'),('twin-147', 3, 147, 'account-id-147', 'relay-147', 'public-key-147'),('twin-148', 3, 148, 'account-id-148', 'relay-148', 'public-key-148'),('twin-149', 3, 149, 'account-id-149', 'relay-149', 'public-key-149'),('twin-150', 3, 150, 'account-id-150', 'relay-150', 'public-key-150'),('twin-151', 3, 151, 'account-id-151', 'relay-151', 'public-key-151'),('twin-152', 3, 152, 'account-id-152', 'relay-152', 'public-key-152'),('twin-153', 3, 153, 'account-id-153', 'relay-153', 'public-key-153'),('twin-154', 3, 154, 'account-id-154', 'relay-154', 'public-key-154'),('twin-155', 3, 155, 'account-id-155', 'relay-155', 'public-key-155'),('twin-156', 3, 156, 'account-id-156', 'relay-156', 'public-key-156'),('twin-157', 3, 157, 'account-id-157', 'relay-157', 'public-key-157'),('twin-158', 3, 158, 'account-id-158', 'relay-158', 'public-key-158'),('twin-159', 3, 159, 'account-id-159', 'relay-159', 'public-key-159'),('twin-160', 3, 160, 'account-id-160', 'relay-160', 'public-key-160'),('twin-161', 3, 161, 'account-id-161', 'relay-161', 'public-key-161'),('twin-162', 3, 162, 'account-id-162', 'relay-162', 'public-key-162'),('twin-163', 3, 163, 'account-id-163', 'relay-163', 'public-key-163'),('twin-164', 3, 164, 'account-id-164', 'relay-164', 'public-key-164'),('twin-165', 3, 165, 'account-id-165', 'relay-165', 'public-key-165'),('twin-166', 3, 166, 'account-id-166', 'relay-166', 'public-key-166'),('twin-167', 3, 167, 'account-id-167', 'relay-167', 'public-key-167'),('twin-168', 3, 168, 'account-id-168', 'relay-168', 'public-key-168'),('twin-169', 3, 169, 'account-id-169', 'relay-169', 'public-key-169'),('twin-170', 3, 170, 'account-id-170', 'relay-170', 'public-key-170'),('twin-171', 3, 171, 'account-id-171', 'relay-171', 'public-key-171'),('twin-172', 3, 172, 'account-id-172', 'relay-172', 'public-key-172'),('twin-173', 3, 173, 'account-id-173', 'relay-173', 'public-key-173'),('twin-174', 3, 174, 'account-id-174', 'relay-174', 'public-key-174'),('twin-175', 3, 175, 'account-id-175', 'relay-175', 'public-key-175'),('twin-176', 3, 176, 'account-id-176', 'relay-176', 'public-key-176'),('twin-177', 3, 177, 'account-id-177', 'relay-177', 'public-key-177'),('twin-178', 3, 178, 'account-id-178', 'relay-178', 'public-key-178'),('twin-179', 3, 179, 'account-id-179', 'relay-179', 'public-key-179'),('twin-180', 3, 180, 'account-id-180', 'relay-180', 'public-key-180'),('twin-181', 3, 181, 'account-id-181', 'relay-181', 'public-key-181'),('twin-182', 3, 182, 'account-id-182', 'relay-182', 'public-key-182'),('twin-183', 3, 183, 'account-id-183', 'relay-183', 'public-key-183'),('twin-184', 3, 184, 'account-id-184', 'relay-184', 'public-key-184'),('twin-185', 3, 185, 'account-id-185', 'relay-185', 'public-key-185'),('twin-186', 3, 186, 'account-id-186', 'relay-186', 'public-key-186'),('twin-187', 3, 187, 'account-id-187', 'relay-187', 'public-key-187'),('twin-188', 3, 188, 'account-id-188', 'relay-188', 'public-key-188'),('twin-189', 3, 189, 'account-id-189', 'relay-189', 'public-key-189'),('twin-190', 3, 190, 'account-id-190', 'relay-190', 'public-key-190'),('twin-191', 3, 191, 'account-id-191', 'relay-191', 'public-key-191'),('twin-192', 3, 192, 'account-id-192', 'relay-192', 'public-key-192'),('twin-193', 3, 193, 'account-id-193', 'relay-193', 'public-key-193'),('twin-194', 3, 194, 'account-id-194', 'relay-194', 'public-key-194'),('twin-195', 3, 195, 'account-id-195', 'relay-195', 'public-key-195'),('twin-196', 3, 196, 'account-id-196', 'relay-196', 'public-key-196'),('twin-197', 3, 197, 'account-id-197', 'relay-197', 'public-key-197'),('twin-198', 3, 198, 'account-id-198', 'relay-198', 'public-key-198'),('twin-199', 3, 199, 'account-id-199', 'relay-199', 'public-key-199'),('twin-200', 3, 200, 'account-id-200', 'relay-200', 'public-key-200'),('twin-201', 3, 201, 'account-id-201', 'relay-201', 'public-key-201'),('twin-202', 3, 202, 'account-id-202', 'relay-202', 'public-key-202'),('twin-203', 3, 203, 'account-id-203', 'relay-203', 'public-key-203'),('twin-204', 3, 204, 'account-id-204', 'relay-204', 'public-key-204'),('twin-205', 3, 205, 'account-id-205', 'relay-205', 'public-key-205'),('twin-206', 3, 206, 'account-id-206', 'relay-206', 'public-key-206'),('twin-207', 3, 207, 'account-id-207', 'relay-207', 'public-key-207'),('twin-208', 3, 208, 'account-id-208', 'relay-208', 'public-key-208'),('twin-209', 3, 209, 'account-id-209', 'relay-209', 'public-key-209'),('twin-210', 3, 210, 'account-id-210', 'relay-210', 'public-key-210'),('twin-211', 3, 211, 'account-id-211', 'relay-211', 'public-key-211'),('twin-212', 3, 212, 'account-id-212', 'relay-212', 'public-key-212'),('twin-213', 3, 213, 'account-id-213', 'relay-213', 'public-key-213'),('twin-214', 3, 214, 'account-id-214', 'relay-214', 'public-key-214'),('twin-215', 3, 215, 'account-id-215', 'relay-215', 'public-key-215'),('twin-216', 3, 216, 'account-id-216', 'relay-216', 'public-key-216'),('twin-217', 3, 217, 'account-id-217', 'relay-217', 'public-key-217'),('twin-218', 3, 218, 'account-id-218', 'relay-218', 'public-key-218'),('twin-219', 3, 219, 'account-id-219', 'relay-219', 'public-key-219'),('twin-220', 3, 220, 'account-id-220', 'relay-220', 'public-key-220'),('twin-221', 3, 221, 'account-id-221', 'relay-221', 'public-key-221'),('twin-222', 3, 222, 'account-id-222', 'relay-222', 'public-key-222'),('twin-223', 3, 223, 'account-id-223', 'relay-223', 'public-key-223'),('twin-224', 3, 224, 'account-id-224', 'relay-224', 'public-key-224'),('twin-225', 3, 225, 'account-id-225', 'relay-225', 'public-key-225'),('twin-226', 3, 226, 'account-id-226', 'relay-226', 'public-key-226'),('twin-227', 3, 227, 'account-id-227', 'relay-227', 'public-key-227'),('twin-228', 3, 228, 'account-id-228', 'relay-228', 'public-key-228'),('twin-229', 3, 229, 'account-id-229', 'relay-229', 'public-key-229'),('twin-230', 3, 230, 'account-id-230', 'relay-230', 'public-key-230'),('twin-231', 3, 231, 'account-id-231', 'relay-231', 'public-key-231'),('twin-232', 3, 232, 'account-id-232', 'relay-232', 'public-key-232'),('twin-233', 3, 233, 'account-id-233', 'relay-233', 'public-key-233'),('twin-234', 3, 234, 'account-id-234', 'relay-234', 'public-key-234'),('twin-235', 3, 235, 'account-id-235', 'relay-235', 'public-key-235'),('twin-236', 3, 236, 'account-id-236', 'relay-236', 'public-key-236'),('twin-237', 3, 237, 'account-id-237', 'relay-237', 'public-key-237'),('twin-238', 3, 238, 'account-id-238', 'relay-238', 'public-key-238'),('twin-239', 3, 239, 'account-id-239', 'relay-239', 'public-key-239'),('twin-240', 3, 240, 'account-id-240', 'relay-240', 'public-key-240'),('twin-241', 3, 241, 'account-id-241', 'relay-241', 'public-key-241'),('twin-242', 3, 242, 'account-id-242', 'relay-242', 'public-key-242'),('twin-243', 3, 243, 'account-id-243', 'relay-243', 'public-key-243'),('twin-244', 3, 244, 'account-id-244', 'relay-244', 'public-key-244'),('twin-245', 3, 245, 'account-id-245', 'relay-245', 'public-key-245'),('twin-246', 3, 246, 'account-id-246', 'relay-246', 'public-key-246'),('twin-247', 3, 247, 'account-id-247', 'relay-247', 'public-key-247'),('twin-248', 3, 248, 'account-id-248', 'relay-248', 'public-key-248'),('twin-249', 3, 249, 'account-id-249', 'relay-249', 'public-key-249'),('twin-250', 3, 250, 'account-id-250', 'relay-250', 'public-key-250'),('twin-251', 3, 251, 'account-id-251', 'relay-251', 'public-key-251'),('twin-252', 3, 252, 'account-id-252', 'relay-252', 'public-key-252'),('twin-253', 3, 253, 'account-id-253', 'relay-253', 'public-key-253'),('twin-254', 3, 254, 'account-id-254', 'relay-254', 'public-key-254'),('twin-255', 3, 255, 'account-id-255', 'relay-255', 'public-key-255'),('twin-256', 3, 256, 'account-id-256', 'relay-256', 'public-key-256'),('twin-257', 3, 257, 'account-id-257', 'relay-257', 'public-key-257'),('twin-258', 3, 258, 'account-id-258', 'relay-258', 'public-key-258'),('twin-259', 3, 259, 'account-id-259', 'relay-259', 'public-key-259'),('twin-260', 3, 260, 'account-id-260', 'relay-260', 'public-key-260'),('twin-261', 3, 261, 'account-id-261', 'relay-261', 'public-key-261'),('twin-262', 3, 262, 'account-id-262', 'relay-262', 'public-key-262'),('twin-263', 3, 263, 'account-id-263', 'relay-263', 'public-key-263'),('twin-264', 3, 264, 'account-id-264', 'relay-264', 'public-key-264'),('twin-265', 3, 265, 'account-id-265', 'relay-265', 'public-key-265'),('twin-266', 3, 266, 'account-id-266', 'relay-266', 'public-key-266'),('twin-267', 3, 267, 'account-id-267', 'relay-267', 'public-key-267'),('twin-268', 3, 268, 'account-id-268', 'relay-268', 'public-key-268'),('twin-269', 3, 269, 'account-id-269', 'relay-269', 'public-key-269'),('twin-270', 3, 270, 'account-id-270', 'relay-270', 'public-key-270'),('twin-271', 3, 271, 'account-id-271', 'relay-271', 'public-key-271'),('twin-272', 3, 272, 'account-id-272', 'relay-272', 'public-key-272'),('twin-273', 3, 273, 'account-id-273', 'relay-273', 'public-key-273'),('twin-274', 3, 274, 'account-id-274', 'relay-274', 'public-key-274'),('twin-275', 3, 275, 'account-id-275', 'relay-275', 'public-key-275'),('twin-276', 3, 276, 'account-id-276', 'relay-276', 'public-key-276'),('twin-277', 3, 277, 'account-id-277', 'relay-277', 'public-key-277'),('twin-278', 3, 278, 'account-id-278', 'relay-278', 'public-key-278'),('twin-279', 3, 279, 'account-id-279', 'relay-279', 'public-key-279'),('twin-280', 3, 280, 'account-id-280', 'relay-280', 'public-key-280'),('twin-281', 3, 281, 'account-id-281', 'relay-281', 'public-key-281'),('twin-282', 3, 282, 'account-id-282', 'relay-282', 'public-key-282'),('twin-283', 3, 283, 'account-id-283', 'relay-283', 'public-key-283'),('twin-284', 3, 284, 'account-id-284', 'relay-284', 'public-key-284'),('twin-285', 3, 285, 'account-id-285', 'relay-285', 'public-key-285'),('twin-286', 3, 286, 'account-id-286', 'relay-286', 'public-key-286'),('twin-287', 3, 287, 'account-id-287', 'relay-287', 'public-key-287'),('twin-288', 3, 288, 'account-id-288', 'relay-288', 'public-key-288'),('twin-289', 3, 289, 'account-id-289', 'relay-289', 'public-key-289'),('twin-290', 3, 290, 'account-id-290', 'relay-290', 'public-key-290'),('twin-291', 3, 291, 'account-id-291', 'relay-291', 'public-key-291'),('twin-292', 3, 292, 'account-id-292', 'relay-292', 'public-key-292'),('twin-293', 3, 293, 'account-id-293', 'relay-293', 'public-key-293'),('twin-294', 3, 294, 'account-id-294', 'relay-294', 'public-key-294'),('twin-295', 3, 295, 'account-id-295', 'relay-295', 'public-key-295'),('twin-296', 3, 296, 'account-id-296', 'relay-296', 'public-key-296'),('twin-297', 3, 297, 'account-id-297', 'relay-297', 'public-key-297'),('twin-298', 3, 298, 'account-id-298', 'relay-298', 'public-key-298'),('twin-299', 3, 299, 'account-id-299', 'relay-299', 'public-key-299'),('twin-300', 3, 300, 'account-id-300', 'relay-300', 'public-key-300'),('twin-301', 3, 301, 'account-id-301', 'relay-301', 'public-key-301'),('twin-302', 3, 302, 'account-id-302', 'relay-302', 'public-key-302'),('twin-303', 3, 303, 'account-id-303', 'relay-303', 'public-key-303'),('twin-304', 3, 304, 'account-id-304', 'relay-304', 'public-key-304'),('twin-305', 3, 305, 'account-id-305', 'relay-305', 'public-key-305'),('twin-306', 3, 306, 'account-id-306', 'relay-306', 'public-key-306'),('twin-307', 3, 307, 'account-id-307', 'relay-307', 'public-key-307'),('twin-308', 3, 308, 'account-id-308', 'relay-308', 'public-key-308'),('twin-309', 3, 309, 'account-id-309', 'relay-309', 'public-key-309'),('twin-310', 3, 310, 'account-id-310', 'relay-310', 'public-key-310'),('twin-311', 3, 311, 'account-id-311', 'relay-311', 'public-key-311'),('twin-312', 3, 312, 'account-id-312', 'relay-312', 'public-key-312'),('twin-313', 3, 313, 'account-id-313', 'relay-313', 'public-key-313'),('twin-314', 3, 314, 'account-id-314', 'relay-314', 'public-key-314'),('twin-315', 3, 315, 'account-id-315', 'relay-315', 'public-key-315'),('twin-316', 3, 316, 'account-id-316', 'relay-316', 'public-key-316'),('twin-317', 3, 317, 'account-id-317', 'relay-317', 'public-key-317'),('twin-318', 3, 318, 'account-id-318', 'relay-318', 'public-key-318'),('twin-319', 3, 319, 'account-id-319', 'relay-319', 'public-key-319'),('twin-320', 3, 320, 'account-id-320', 'relay-320', 'public-key-320'),('twin-321', 3, 321, 'account-id-321', 'relay-321', 'public-key-321'),('twin-322', 3, 322, 'account-id-322', 'relay-322', 'public-key-322'),('twin-323', 3, 323, 'account-id-323', 'relay-323', 'public-key-323'),('twin-324', 3, 324, 'account-id-324', 'relay-324', 'public-key-324'),('twin-325', 3, 325, 'account-id-325', 'relay-325', 'public-key-325'),('twin-326', 3, 326, 'account-id-326', 'relay-326', 'public-key-326'),('twin-327', 3, 327, 'account-id-327', 'relay-327', 'public-key-327'),('twin-328', 3, 328, 'account-id-328', 'relay-328', 'public-key-328'),('twin-329', 3, 329, 'account-id-329', 'relay-329', 'public-key-329'),('twin-330', 3, 330, 'account-id-330', 'relay-330', 'public-key-330'),('twin-331', 3, 331, 'account-id-331', 'relay-331', 'public-key-331'),('twin-332', 3, 332, 'account-id-332', 'relay-332', 'public-key-332'),('twin-333', 3, 333, 'account-id-333', 'relay-333', 'public-key-333'),('twin-334', 3, 334, 'account-id-334', 'relay-334', 'public-key-334'),('twin-335', 3, 335, 'account-id-335', 'relay-335', 'public-key-335'),('twin-336', 3, 336, 'account-id-336', 'relay-336', 'public-key-336'),('twin-337', 3, 337, 'account-id-337', 'relay-337', 'public-key-337'),('twin-338', 3, 338, 'account-id-338', 'relay-338', 'public-key-338'),('twin-339', 3, 339, 'account-id-339', 'relay-339', 'public-key-339'),('twin-340', 3, 340, 'account-id-340', 'relay-340', 'public-key-340'),('twin-341', 3, 341, 'account-id-341', 'relay-341', 'public-key-341'),('twin-342', 3, 342, 'account-id-342', 'relay-342', 'public-key-342'),('twin-343', 3, 343, 'account-id-343', 'relay-343', 'public-key-343'),('twin-344', 3, 344, 'account-id-344', 'relay-344', 'public-key-344'),('twin-345', 3, 345, 'account-id-345', 'relay-345', 'public-key-345'),('twin-346', 3, 346, 'account-id-346', 'relay-346', 'public-key-346'),('twin-347', 3, 347, 'account-id-347', 'relay-347', 'public-key-347'),('twin-348', 3, 348, 'account-id-348', 'relay-348', 'public-key-348'),('twin-349', 3, 349, 'account-id-349', 'relay-349', 'public-key-349'),('twin-350', 3, 350, 'account-id-350', 'relay-350', 'public-key-350'),('twin-351', 3, 351, 'account-id-351', 'relay-351', 'public-key-351'),('twin-352', 3, 352, 'account-id-352', 'relay-352', 'public-key-352'),('twin-353', 3, 353, 'account-id-353', 'relay-353', 'public-key-353'),('twin-354', 3, 354, 'account-id-354', 'relay-354', 'public-key-354'),('twin-355', 3, 355, 'account-id-355', 'relay-355', 'public-key-355'),('twin-356', 3, 356, 'account-id-356', 'relay-356', 'public-key-356'),('twin-357', 3, 357, 'account-id-357', 'relay-357', 'public-key-357'),('twin-358', 3, 358, 'account-id-358', 'relay-358', 'public-key-358'),('twin-359', 3, 359, 'account-id-359', 'relay-359', 'public-key-359'),('twin-360', 3, 360, 'account-id-360', 'relay-360', 'public-key-360'),('twin-361', 3, 361, 'account-id-361', 'relay-361', 'public-key-361'),('twin-362', 3, 362, 'account-id-362', 'relay-362', 'public-key-362'),('twin-363', 3, 363, 'account-id-363', 'relay-363', 'public-key-363'),('twin-364', 3, 364, 'account-id-364', 'relay-364', 'public-key-364'),('twin-365', 3, 365, 'account-id-365', 'relay-365', 'public-key-365'),('twin-366', 3, 366, 'account-id-366', 'relay-366', 'public-key-366'),('twin-367', 3, 367, 'account-id-367', 'relay-367', 'public-key-367'),('twin-368', 3, 368, 'account-id-368', 'relay-368', 'public-key-368'),('twin-369', 3, 369, 'account-id-369', 'relay-369', 'public-key-369'),('twin-370', 3, 370, 'account-id-370', 'relay-370', 'public-key-370'),('twin-371', 3, 371, 'account-id-371', 'relay-371', 'public-key-371'),('twin-372', 3, 372, 'account-id-372', 'relay-372', 'public-key-372'),('twin-373', 3, 373, 'account-id-373', 'relay-373', 'public-key-373'),('twin-374', 3, 374, 'account-id-374', 'relay-374', 'public-key-374'),('twin-375', 3, 375, 'account-id-375', 'relay-375', 'public-key-375'),('twin-376', 3, 376, 'account-id-376', 'relay-376', 'public-key-376'),('twin-377', 3, 377, 'account-id-377', 'relay-377', 'public-key-377'),('twin-378', 3, 378, 'account-id-378', 'relay-378', 'public-key-378'),('twin-379', 3, 379, 'account-id-379', 'relay-379', 'public-key-379'),('twin-380', 3, 380, 'account-id-380', 'relay-380', 'public-key-380'),('twin-381', 3, 381, 'account-id-381', 'relay-381', 'public-key-381'),('twin-382', 3, 382, 'account-id-382', 'relay-382', 'public-key-382'),('twin-383', 3, 383, 'account-id-383', 'relay-383', 'public-key-383'),('twin-384', 3, 384, 'account-id-384', 'relay-384', 'public-key-384'),('twin-385', 3, 385, 'account-id-385', 'relay-385', 'public-key-385'),('twin-386', 3, 386, 'account-id-386', 'relay-386', 'public-key-386'),('twin-387', 3, 387, 'account-id-387', 'relay-387', 'public-key-387'),('twin-388', 3, 388, 'account-id-388', 'relay-388', 'public-key-388'),('twin-389', 3, 389, 'account-id-389', 'relay-389', 'public-key-389'),('twin-390', 3, 390, 'account-id-390', 'relay-390', 'public-key-390'),('twin-391', 3, 391, 'account-id-391', 'relay-391', 'public-key-391'),('twin-392', 3, 392, 'account-id-392', 'relay-392', 'public-key-392'),('twin-393', 3, 393, 'account-id-393', 'relay-393', 'public-key-393'),('twin-394', 3, 394, 'account-id-394', 'relay-394', 'public-key-394'),('twin-395', 3, 395, 'account-id-395', 'relay-395', 'public-key-395'),('twin-396', 3, 396, 'account-id-396', 'relay-396', 'public-key-396'),('twin-397', 3, 397, 'account-id-397', 'relay-397', 'public-key-397'),('twin-398', 3, 398, 'account-id-398', 'relay-398', 'public-key-398'),('twin-399', 3, 399, 'account-id-399', 'relay-399', 'public-key-399'),('twin-400', 3, 400, 'account-id-400', 'relay-400', 'public-key-400'),('twin-401', 3, 401, 'account-id-401', 'relay-401', 'public-key-401'),('twin-402', 3, 402, 'account-id-402', 'relay-402', 'public-key-402'),('twin-403', 3, 403, 'account-id-403', 'relay-403', 'public-key-403'),('twin-404', 3, 404, 'account-id-404', 'relay-404', 'public-key-404'),('twin-405', 3, 405, 'account-id-405', 'relay-405', 'public-key-405'),('twin-406', 3, 406, 'account-id-406', 'relay-406', 'public-key-406'),('twin-407', 3, 407, 'account-id-407', 'relay-407', 'public-key-407'),('twin-408', 3, 408, 'account-id-408', 'relay-408', 'public-key-408'),('twin-409', 3, 409, 'account-id-409', 'relay-409', 'public-key-409'),('twin-410', 3, 410, 'account-id-410', 'relay-410', 'public-key-410'),('twin-411', 3, 411, 'account-id-411', 'relay-411', 'public-key-411'),('twin-412', 3, 412, 'account-id-412', 'relay-412', 'public-key-412'),('twin-413', 3, 413, 'account-id-413', 'relay-413', 'public-key-413'),('twin-414', 3, 414, 'account-id-414', 'relay-414', 'public-key-414'),('twin-415', 3, 415, 'account-id-415', 'relay-415', 'public-key-415'),('twin-416', 3, 416, 'account-id-416', 'relay-416', 'public-key-416'),('twin-417', 3, 417, 'account-id-417', 'relay-417', 'public-key-417'),('twin-418', 3, 418, 'account-id-418', 'relay-418', 'public-key-418'),('twin-419', 3, 419, 'account-id-419', 'relay-419', 'public-key-419'),('twin-420', 3, 420, 'account-id-420', 'relay-420', 'public-key-420'),('twin-421', 3, 421, 'account-id-421', 'relay-421', 'public-key-421'),('twin-422', 3, 422, 'account-id-422', 'relay-422', 'public-key-422'),('twin-423', 3, 423, 'account-id-423', 'relay-423', 'public-key-423'),('twin-424', 3, 424, 'account-id-424', 'relay-424', 'public-key-424'),('twin-425', 3, 425, 'account-id-425', 'relay-425', 'public-key-425'),('twin-426', 3, 426, 'account-id-426', 'relay-426', 'public-key-426'),('twin-427', 3, 427, 'account-id-427', 'relay-427', 'public-key-427'),('twin-428', 3, 428, 'account-id-428', 'relay-428', 'public-key-428'),('twin-429', 3, 429, 'account-id-429', 'relay-429', 'public-key-429'),('twin-430', 3, 430, 'account-id-430', 'relay-430', 'public-key-430'),('twin-431', 3, 431, 'account-id-431', 'relay-431', 'public-key-431'),('twin-432', 3, 432, 'account-id-432', 'relay-432', 'public-key-432'),('twin-433', 3, 433, 'account-id-433', 'relay-433', 'public-key-433'),('twin-434', 3, 434, 'account-id-434', 'relay-434', 'public-key-434'),('twin-435', 3, 435, 'account-id-435', 'relay-435', 'public-key-435'),('twin-436', 3, 436, 'account-id-436', 'relay-436', 'public-key-436'),('twin-437', 3, 437, 'account-id-437', 'relay-437', 'public-key-437'),('twin-438', 3, 438, 'account-id-438', 'relay-438', 'public-key-438'),('twin-439', 3, 439, 'account-id-439', 'relay-439', 'public-key-439'),('twin-440', 3, 440, 'account-id-440', 'relay-440', 'public-key-440'),('twin-441', 3, 441, 'account-id-441', 'relay-441', 'public-key-441'),('twin-442', 3, 442, 'account-id-442', 'relay-442', 'public-key-442'),('twin-443', 3, 443, 'account-id-443', 'relay-443', 'public-key-443'),('twin-444', 3, 444, 'account-id-444', 'relay-444', 'public-key-444'),('twin-445', 3, 445, 'account-id-445', 'relay-445', 'public-key-445'),('twin-446', 3, 446, 'account-id-446', 'relay-446', 'public-key-446'),('twin-447', 3, 447, 'account-id-447', 'relay-447', 'public-key-447'),('twin-448', 3, 448, 'account-id-448', 'relay-448', 'public-key-448'),('twin-449', 3, 449, 'account-id-449', 'relay-449', 'public-key-449'),('twin-450', 3, 450, 'account-id-450', 'relay-450', 'public-key-450'),('twin-451', 3, 451, 'account-id-451', 'relay-451', 'public-key-451'),('twin-452', 3, 452, 'account-id-452', 'relay-452', 'public-key-452'),('twin-453', 3, 453, 'account-id-453', 'relay-453', 'public-key-453'),('twin-454', 3, 454, 'account-id-454', 'relay-454', 'public-key-454'),('twin-455', 3, 455, 'account-id-455', 'relay-455', 'public-key-455'),('twin-456', 3, 456, 'account-id-456', 'relay-456', 'public-key-456'),('twin-457', 3, 457, 'account-id-457', 'relay-457', 'public-key-457'),('twin-458', 3, 458, 'account-id-458', 'relay-458', 'public-key-458'),('twin-459', 3, 459, 'account-id-459', 'relay-459', 'public-key-459'),('twin-460', 3, 460, 'account-id-460', 'relay-460', 'public-key-460'),('twin-461', 3, 461, 'account-id-461', 'relay-461', 'public-key-461'),('twin-462', 3, 462, 'account-id-462', 'relay-462', 'public-key-462'),('twin-463', 3, 463, 'account-id-463', 'relay-463', 'public-key-463'),('twin-464', 3, 464, 'account-id-464', 'relay-464', 'public-key-464'),('twin-465', 3, 465, 'account-id-465', 'relay-465', 'public-key-465'),('twin-466', 3, 466, 'account-id-466', 'relay-466', 'public-key-466'),('twin-467', 3, 467, 'account-id-467', 'relay-467', 'public-key-467'),('twin-468', 3, 468, 'account-id-468', 'relay-468', 'public-key-468'),('twin-469', 3, 469, 'account-id-469', 'relay-469', 'public-key-469'),('twin-470', 3, 470, 'account-id-470', 'relay-470', 'public-key-470'),('twin-471', 3, 471, 'account-id-471', 'relay-471', 'public-key-471'),('twin-472', 3, 472, 'account-id-472', 'relay-472', 'public-key-472'),('twin-473', 3, 473, 'account-id-473', 'relay-473', 'public-key-473'),('twin-474', 3, 474, 'account-id-474', 'relay-474', 'public-key-474'),('twin-475', 3, 475, 'account-id-475', 'relay-475', 'public-key-475'),('twin-476', 3, 476, 'account-id-476', 'relay-476', 'public-key-476'),('twin-477', 3, 477, 'account-id-477', 'relay-477', 'public-key-477'),('twin-478', 3, 478, 'account-id-478', 'relay-478', 'public-key-478'),('twin-479', 3, 479, 'account-id-479', 'relay-479', 'public-key-479'),('twin-480', 3, 480, 'account-id-480', 'relay-480', 'public-key-480'),('twin-481', 3, 481, 'account-id-481', 'relay-481', 'public-key-481'),('twin-482', 3, 482, 'account-id-482', 'relay-482', 'public-key-482'),('twin-483', 3, 483, 'account-id-483', 'relay-483', 'public-key-483'),('twin-484', 3, 484, 'account-id-484', 'relay-484', 'public-key-484'),('twin-485', 3, 485, 'account-id-485', 'relay-485', 'public-key-485'),('twin-486', 3, 486, 'account-id-486', 'relay-486', 'public-key-486'),('twin-487', 3, 487, 'account-id-487', 'relay-487', 'public-key-487'),('twin-488', 3, 488, 'account-id-488', 'relay-488', 'public-key-488'),('twin-489', 3, 489, 'account-id-489', 'relay-489', 'public-key-489'),('twin-490', 3, 490, 'account-id-490', 'relay-490', 'public-key-490'),('twin-491', 3, 491, 'account-id-491', 'relay-491', 'public-key-491'),('twin-492', 3, 492, 'account-id-492', 'relay-492', 'public-key-492'),('twin-493', 3, 493, 'account-id-493', 'relay-493', 'public-key-493'),('twin-494', 3, 494, 'account-id-494', 'relay-494', 'public-key-494'),('twin-495', 3, 495, 'account-id-495', 'relay-495', 'public-key-495'),('twin-496', 3, 496, 'account-id-496', 'relay-496', 'public-key-496'),('twin-497', 3, 497, 'account-id-497', 'relay-497', 'public-key-497'),('twin-498', 3, 498, 'account-id-498', 'relay-498', 'public-key-498'),('twin-499', 3, 499, 'account-id-499', 'relay-499', 'public-key-499'),('twin-500', 3, 500, 'account-id-500', 'relay-500', 'public-key-500'),('twin-501', 3, 501, 'account-id-501', 'relay-501', 'public-key-501'),('twin-502', 3, 502, 'account-id-502', 'relay-502', 'public-key-502'),('twin-503', 3, 503, 'account-id-503', 'relay-503', 'public-key-503'),('twin-504', 3, 504, 'account-id-504', 'relay-504', 'public-key-504'),('twin-505', 3, 505, 'account-id-505', 'relay-505', 'public-key-505'),('twin-506', 3, 506, 'account-id-506', 'relay-506', 'public-key-506'),('twin-507', 3, 507, 'account-id-507', 'relay-507', 'public-key-507'),('twin-508', 3, 508, 'account-id-508', 'relay-508', 'public-key-508'),('twin-509', 3, 509, 'account-id-509', 'relay-509', 'public-key-509'),('twin-510', 3, 510, 'account-id-510', 'relay-510', 'public-key-510'),('twin-511', 3, 511, 'account-id-511', 'relay-511', 'public-key-511'),('twin-512', 3, 512, 'account-id-512', 'relay-512', 'public-key-512'),('twin-513', 3, 513, 'account-id-513', 'relay-513', 'public-key-513'),('twin-514', 3, 514, 'account-id-514', 'relay-514', 'public-key-514'),('twin-515', 3, 515, 'account-id-515', 'relay-515', 'public-key-515'),('twin-516', 3, 516, 'account-id-516', 'relay-516', 'public-key-516'),('twin-517', 3, 517, 'account-id-517', 'relay-517', 'public-key-517'),('twin-518', 3, 518, 'account-id-518', 'relay-518', 'public-key-518'),('twin-519', 3, 519, 'account-id-519', 'relay-519', 'public-key-519'),('twin-520', 3, 520, 'account-id-520', 'relay-520', 'public-key-520'),('twin-521', 3, 521, 'account-id-521', 'relay-521', 'public-key-521'),('twin-522', 3, 522, 'account-id-522', 'relay-522', 'public-key-522'),('twin-523', 3, 523, 'account-id-523', 'relay-523', 'public-key-523'),('twin-524', 3, 524, 'account-id-524', 'relay-524', 'public-key-524'),('twin-525', 3, 525, 'account-id-525', 'relay-525', 'public-key-525'),('twin-526', 3, 526, 'account-id-526', 'relay-526', 'public-key-526'),('twin-527', 3, 527, 'account-id-527', 'relay-527', 'public-key-527'),('twin-528', 3, 528, 'account-id-528', 'relay-528', 'public-key-528'),('twin-529', 3, 529, 'account-id-529', 'relay-529', 'public-key-529'),('twin-530', 3, 530, 'account-id-530', 'relay-530', 'public-key-530'),('twin-531', 3, 531, 'account-id-531', 'relay-531', 'public-key-531'),('twin-532', 3, 532, 'account-id-532', 'relay-532', 'public-key-532'),('twin-533', 3, 533, 'account-id-533', 'relay-533', 'public-key-533'),('twin-534', 3, 534, 'account-id-534', 'relay-534', 'public-key-534'),('twin-535', 3, 535, 'account-id-535', 'relay-535', 'public-key-535'),('twin-536', 3, 536, 'account-id-536', 'relay-536', 'public-key-536'),('twin-537', 3, 537, 'account-id-537', 'relay-537', 'public-key-537'),('twin-538', 3, 538, 'account-id-538', 'relay-538', 'public-key-538'),('twin-539', 3, 539, 'account-id-539', 'relay-539', 'public-key-539'),('twin-540', 3, 540, 'account-id-540', 'relay-540', 'public-key-540'),('twin-541', 3, 541, 'account-id-541', 'relay-541', 'public-key-541'),('twin-542', 3, 542, 'account-id-542', 'relay-542', 'public-key-542'),('twin-543', 3, 543, 'account-id-543', 'relay-543', 'public-key-543'),('twin-544', 3, 544, 'account-id-544', 'relay-544', 'public-key-544'),('twin-545', 3, 545, 'account-id-545', 'relay-545', 'public-key-545'),('twin-546', 3, 546, 'account-id-546', 'relay-546', 'public-key-546'),('twin-547', 3, 547, 'account-id-547', 'relay-547', 'public-key-547'),('twin-548', 3, 548, 'account-id-548', 'relay-548', 'public-key-548'),('twin-549', 3, 549, 'account-id-549', 'relay-549', 'public-key-549'),('twin-550', 3, 550, 'account-id-550', 'relay-550', 'public-key-550'),('twin-551', 3, 551, 'account-id-551', 'relay-551', 'public-key-551'),('twin-552', 3, 552, 'account-id-552', 'relay-552', 'public-key-552'),('twin-553', 3, 553, 'account-id-553', 'relay-553', 'public-key-553'),('twin-554', 3, 554, 'account-id-554', 'relay-554', 'public-key-554'),('twin-555', 3, 555, 'account-id-555', 'relay-555', 'public-key-555'),('twin-556', 3, 556, 'account-id-556', 'relay-556', 'public-key-556'),('twin-557', 3, 557, 'account-id-557', 'relay-557', 'public-key-557'),('twin-558', 3, 558, 'account-id-558', 'relay-558', 'public-key-558'),('twin-559', 3, 559, 'account-id-559', 'relay-559', 'public-key-559'),('twin-560', 3, 560, 'account-id-560', 'relay-560', 'public-key-560'),('twin-561', 3, 561, 'account-id-561', 'relay-561', 'public-key-561'),('twin-562', 3, 562, 'account-id-562', 'relay-562', 'public-key-562'),('twin-563', 3, 563, 'account-id-563', 'relay-563', 'public-key-563'),('twin-564', 3, 564, 'account-id-564', 'relay-564', 'public-key-564'),('twin-565', 3, 565, 'account-id-565', 'relay-565', 'public-key-565'),('twin-566', 3, 566, 'account-id-566', 'relay-566', 'public-key-566'),('twin-567', 3, 567, 'account-id-567', 'relay-567', 'public-key-567'),('twin-568', 3, 568, 'account-id-568', 'relay-568', 'public-key-568'),('twin-569', 3, 569, 'account-id-569', 'relay-569', 'public-key-569'),('twin-570', 3, 570, 'account-id-570', 'relay-570', 'public-key-570'),('twin-571', 3, 571, 'account-id-571', 'relay-571', 'public-key-571'),('twin-572', 3, 572, 'account-id-572', 'relay-572', 'public-key-572'),('twin-573', 3, 573, 'account-id-573', 'relay-573', 'public-key-573'),('twin-574', 3, 574, 'account-id-574', 'relay-574', 'public-key-574'),('twin-575', 3, 575, 'account-id-575', 'relay-575', 'public-key-575'),('twin-576', 3, 576, 'account-id-576', 'relay-576', 'public-key-576'),('twin-577', 3, 577, 'account-id-577', 'relay-577', 'public-key-577'),('twin-578', 3, 578, 'account-id-578', 'relay-578', 'public-key-578'),('twin-579', 3, 579, 'account-id-579', 'relay-579', 'public-key-579'),('twin-580', 3, 580, 'account-id-580', 'relay-580', 'public-key-580'),('twin-581', 3, 581, 'account-id-581', 'relay-581', 'public-key-581'),('twin-582', 3, 582, 'account-id-582', 'relay-582', 'public-key-582'),('twin-583', 3, 583, 'account-id-583', 'relay-583', 'public-key-583'),('twin-584', 3, 584, 'account-id-584', 'relay-584', 'public-key-584'),('twin-585', 3, 585, 'account-id-585', 'relay-585', 'public-key-585'),('twin-586', 3, 586, 'account-id-586', 'relay-586', 'public-key-586'),('twin-587', 3, 587, 'account-id-587', 'relay-587', 'public-key-587'),('twin-588', 3, 588, 'account-id-588', 'relay-588', 'public-key-588'),('twin-589', 3, 589, 'account-id-589', 'relay-589', 'public-key-589'),('twin-590', 3, 590, 'account-id-590', 'relay-590', 'public-key-590'),('twin-591', 3, 591, 'account-id-591', 'relay-591', 'public-key-591'),('twin-592', 3, 592, 'account-id-592', 'relay-592', 'public-key-592'),('twin-593', 3, 593, 'account-id-593', 'relay-593', 'public-key-593'),('twin-594', 3, 594, 'account-id-594', 'relay-594', 'public-key-594'),('twin-595', 3, 595, 'account-id-595', 'relay-595', 'public-key-595'),('twin-596', 3, 596, 'account-id-596', 'relay-596', 'public-key-596'),('twin-597', 3, 597, 'account-id-597', 'relay-597', 'public-key-597'),('twin-598', 3, 598, 'account-id-598', 'relay-598', 'public-key-598'),('twin-599', 3, 599, 'account-id-599', 'relay-599', 'public-key-599'),('twin-600', 3, 600, 'account-id-600', 'relay-600', 'public-key-600'),('twin-601', 3, 601, 'account-id-601', 'relay-601', 'public-key-601'),('twin-602', 3, 602, 'account-id-602', 'relay-602', 'public-key-602'),('twin-603', 3, 603, 'account-id-603', 'relay-603', 'public-key-603'),('twin-604', 3, 604, 'account-id-604', 'relay-604', 'public-key-604'),('twin-605', 3, 605, 'account-id-605', 'relay-605', 'public-key-605'),('twin-606', 3, 606, 'account-id-606', 'relay-606', 'public-key-606'),('twin-607', 3, 607, 'account-id-607', 'relay-607', 'public-key-607'),('twin-608', 3, 608, 'account-id-608', 'relay-608', 'public-key-608'),('twin-609', 3, 609, 'account-id-609', 'relay-609', 'public-key-609'),('twin-610', 3, 610, 'account-id-610', 'relay-610', 'public-key-610'),('twin-611', 3, 611, 'account-id-611', 'relay-611', 'public-key-611'),('twin-612', 3, 612, 'account-id-612', 'relay-612', 'public-key-612'),('twin-613', 3, 613, 'account-id-613', 'relay-613', 'public-key-613'),('twin-614', 3, 614, 'account-id-614', 'relay-614', 'public-key-614'),('twin-615', 3, 615, 'account-id-615', 'relay-615', 'public-key-615'),('twin-616', 3, 616, 'account-id-616', 'relay-616', 'public-key-616'),('twin-617', 3, 617, 'account-id-617', 'relay-617', 'public-key-617'),('twin-618', 3, 618, 'account-id-618', 'relay-618', 'public-key-618'),('twin-619', 3, 619, 'account-id-619', 'relay-619', 'public-key-619'),('twin-620', 3, 620, 'account-id-620', 'relay-620', 'public-key-620'),('twin-621', 3, 621, 'account-id-621', 'relay-621', 'public-key-621'),('twin-622', 3, 622, 'account-id-622', 'relay-622', 'public-key-622'),('twin-623', 3, 623, 'account-id-623', 'relay-623', 'public-key-623'),('twin-624', 3, 624, 'account-id-624', 'relay-624', 'public-key-624'),('twin-625', 3, 625, 'account-id-625', 'relay-625', 'public-key-625'),('twin-626', 3, 626, 'account-id-626', 'relay-626', 'public-key-626'),('twin-627', 3, 627, 'account-id-627', 'relay-627', 'public-key-627'),('twin-628', 3, 628, 'account-id-628', 'relay-628', 'public-key-628'),('twin-629', 3, 629, 'account-id-629', 'relay-629', 'public-key-629'),('twin-630', 3, 630, 'account-id-630', 'relay-630', 'public-key-630'),('twin-631', 3, 631, 'account-id-631', 'relay-631', 'public-key-631'),('twin-632', 3, 632, 'account-id-632', 'relay-632', 'public-key-632'),('twin-633', 3, 633, 'account-id-633', 'relay-633', 'public-key-633'),('twin-634', 3, 634, 'account-id-634', 'relay-634', 'public-key-634'),('twin-635', 3, 635, 'account-id-635', 'relay-635', 'public-key-635'),('twin-636', 3, 636, 'account-id-636', 'relay-636', 'public-key-636'),('twin-637', 3, 637, 'account-id-637', 'relay-637', 'public-key-637'),('twin-638', 3, 638, 'account-id-638', 'relay-638', 'public-key-638'),('twin-639', 3, 639, 'account-id-639', 'relay-639', 'public-key-639'),('twin-640', 3, 640, 'account-id-640', 'relay-640', 'public-key-640'),('twin-641', 3, 641, 'account-id-641', 'relay-641', 'public-key-641'),('twin-642', 3, 642, 'account-id-642', 'relay-642', 'public-key-642'),('twin-643', 3, 643, 'account-id-643', 'relay-643', 'public-key-643'),('twin-644', 3, 644, 'account-id-644', 'relay-644', 'public-key-644'),('twin-645', 3, 645, 'account-id-645', 'relay-645', 'public-key-645'),('twin-646', 3, 646, 'account-id-646', 'relay-646', 'public-key-646'),('twin-647', 3, 647, 'account-id-647', 'relay-647', 'public-key-647'),('twin-648', 3, 648, 'account-id-648', 'relay-648', 'public-key-648'),('twin-649', 3, 649, 'account-id-649', 'relay-649', 'public-key-649'),('twin-650', 3, 650, 'account-id-650', 'relay-650', 'public-key-650'),('twin-651', 3, 651, 'account-id-651', 'relay-651', 'public-key-651'),('twin-652', 3, 652, 'account-id-652', 'relay-652', 'public-key-652'),('twin-653', 3, 653, 'account-id-653', 'relay-653', 'public-key-653'),('twin-654', 3, 654, 'account-id-654', 'relay-654', 'public-key-654'),('twin-655', 3, 655, 'account-id-655', 'relay-655', 'public-key-655'),('twin-656', 3, 656, 'account-id-656', 'relay-656', 'public-key-656'),('twin-657', 3, 657, 'account-id-657', 'relay-657', 'public-key-657'),('twin-658', 3, 658, 'account-id-658', 'relay-658', 'public-key-658'),('twin-659', 3, 659, 'account-id-659', 'relay-659', 'public-key-659'),('twin-660', 3, 660, 'account-id-660', 'relay-660', 'public-key-660'),('twin-661', 3, 661, 'account-id-661', 'relay-661', 'public-key-661'),('twin-662', 3, 662, 'account-id-662', 'relay-662', 'public-key-662'),('twin-663', 3, 663, 'account-id-663', 'relay-663', 'public-key-663'),('twin-664', 3, 664, 'account-id-664', 'relay-664', 'public-key-664'),('twin-665', 3, 665, 'account-id-665', 'relay-665', 'public-key-665'),('twin-666', 3, 666, 'account-id-666', 'relay-666', 'public-key-666'),('twin-667', 3, 667, 'account-id-667', 'relay-667', 'public-key-667'),('twin-668', 3, 668, 'account-id-668', 'relay-668', 'public-key-668'),('twin-669', 3, 669, 'account-id-669', 'relay-669', 'public-key-669'),('twin-670', 3, 670, 'account-id-670', 'relay-670', 'public-key-670'),('twin-671', 3, 671, 'account-id-671', 'relay-671', 'public-key-671'),('twin-672', 3, 672, 'account-id-672', 'relay-672', 'public-key-672'),('twin-673', 3, 673, 'account-id-673', 'relay-673', 'public-key-673'),('twin-674', 3, 674, 'account-id-674', 'relay-674', 'public-key-674'),('twin-675', 3, 675, 'account-id-675', 'relay-675', 'public-key-675'),('twin-676', 3, 676, 'account-id-676', 'relay-676', 'public-key-676'),('twin-677', 3, 677, 'account-id-677', 'relay-677', 'public-key-677'),('twin-678', 3, 678, 'account-id-678', 'relay-678', 'public-key-678'),('twin-679', 3, 679, 'account-id-679', 'relay-679', 'public-key-679'),('twin-680', 3, 680, 'account-id-680', 'relay-680', 'public-key-680'),('twin-681', 3, 681, 'account-id-681', 'relay-681', 'public-key-681'),('twin-682', 3, 682, 'account-id-682', 'relay-682', 'public-key-682'),('twin-683', 3, 683, 'account-id-683', 'relay-683', 'public-key-683'),('twin-684', 3, 684, 'account-id-684', 'relay-684', 'public-key-684'),('twin-685', 3, 685, 'account-id-685', 'relay-685', 'public-key-685'),('twin-686', 3, 686, 'account-id-686', 'relay-686', 'public-key-686'),('twin-687', 3, 687, 'account-id-687', 'relay-687', 'public-key-687'),('twin-688', 3, 688, 'account-id-688', 'relay-688', 'public-key-688'),('twin-689', 3, 689, 'account-id-689', 'relay-689', 'public-key-689'),('twin-690', 3, 690, 'account-id-690', 'relay-690', 'public-key-690'),('twin-691', 3, 691, 'account-id-691', 'relay-691', 'public-key-691'),('twin-692', 3, 692, 'account-id-692', 'relay-692', 'public-key-692'),('twin-693', 3, 693, 'account-id-693', 'relay-693', 'public-key-693'),('twin-694', 3, 694, 'account-id-694', 'relay-694', 'public-key-694'),('twin-695', 3, 695, 'account-id-695', 'relay-695', 'public-key-695'),('twin-696', 3, 696, 'account-id-696', 'relay-696', 'public-key-696'),('twin-697', 3, 697, 'account-id-697', 'relay-697', 'public-key-697'),('twin-698', 3, 698, 'account-id-698', 'relay-698', 'public-key-698'),('twin-699', 3, 699, 'account-id-699', 'relay-699', 'public-key-699'),('twin-700', 3, 700, 'account-id-700', 'relay-700', 'public-key-700'),('twin-701', 3, 701, 'account-id-701', 'relay-701', 'public-key-701'),('twin-702', 3, 702, 'account-id-702', 'relay-702', 'public-key-702'),('twin-703', 3, 703, 'account-id-703', 'relay-703', 'public-key-703'),('twin-704', 3, 704, 'account-id-704', 'relay-704', 'public-key-704'),('twin-705', 3, 705, 'account-id-705', 'relay-705', 'public-key-705'),('twin-706', 3, 706, 'account-id-706', 'relay-706', 'public-key-706'),('twin-707', 3, 707, 'account-id-707', 'relay-707', 'public-key-707'),('twin-708', 3, 708, 'account-id-708', 'relay-708', 'public-key-708'),('twin-709', 3, 709, 'account-id-709', 'relay-709', 'public-key-709'),('twin-710', 3, 710, 'account-id-710', 'relay-710', 'public-key-710'),('twin-711', 3, 711, 'account-id-711', 'relay-711', 'public-key-711'),('twin-712', 3, 712, 'account-id-712', 'relay-712', 'public-key-712'),('twin-713', 3, 713, 'account-id-713', 'relay-713', 'public-key-713'),('twin-714', 3, 714, 'account-id-714', 'relay-714', 'public-key-714'),('twin-715', 3, 715, 'account-id-715', 'relay-715', 'public-key-715'),('twin-716', 3, 716, 'account-id-716', 'relay-716', 'public-key-716'),('twin-717', 3, 717, 'account-id-717', 'relay-717', 'public-key-717'),('twin-718', 3, 718, 'account-id-718', 'relay-718', 'public-key-718'),('twin-719', 3, 719, 'account-id-719', 'relay-719', 'public-key-719'),('twin-720', 3, 720, 'account-id-720', 'relay-720', 'public-key-720'),('twin-721', 3, 721, 'account-id-721', 'relay-721', 'public-key-721'),('twin-722', 3, 722, 'account-id-722', 'relay-722', 'public-key-722'),('twin-723', 3, 723, 'account-id-723', 'relay-723', 'public-key-723'),('twin-724', 3, 724, 'account-id-724', 'relay-724', 'public-key-724'),('twin-725', 3, 725, 'account-id-725', 'relay-725', 'public-key-725'),('twin-726', 3, 726, 'account-id-726', 'relay-726', 'public-key-726'),('twin-727', 3, 727, 'account-id-727', 'relay-727', 'public-key-727'),('twin-728', 3, 728, 'account-id-728', 'relay-728', 'public-key-728'),('twin-729', 3, 729, 'account-id-729', 'relay-729', 'public-key-729'),('twin-730', 3, 730, 'account-id-730', 'relay-730', 'public-key-730'),('twin-731', 3, 731, 'account-id-731', 'relay-731', 'public-key-731'),('twin-732', 3, 732, 'account-id-732', 'relay-732', 'public-key-732'),('twin-733', 3, 733, 'account-id-733', 'relay-733', 'public-key-733'),('twin-734', 3, 734, 'account-id-734', 'relay-734', 'public-key-734'),('twin-735', 3, 735, 'account-id-735', 'relay-735', 'public-key-735'),('twin-736', 3, 736, 'account-id-736', 'relay-736', 'public-key-736'),('twin-737', 3, 737, 'account-id-737', 'relay-737', 'public-key-737'),('twin-738', 3, 738, 'account-id-738', 'relay-738', 'public-key-738'),('twin-739', 3, 739, 'account-id-739', 'relay-739', 'public-key-739'),('twin-740', 3, 740, 'account-id-740', 'relay-740', 'public-key-740'),('twin-741', 3, 741, 'account-id-741', 'relay-741', 'public-key-741'),('twin-742', 3, 742, 'account-id-742', 'relay-742', 'public-key-742'),('twin-743', 3, 743, 'account-id-743', 'relay-743', 'public-key-743'),('twin-744', 3, 744, 'account-id-744', 'relay-744', 'public-key-744'),('twin-745', 3, 745, 'account-id-745', 'relay-745', 'public-key-745'),('twin-746', 3, 746, 'account-id-746', 'relay-746', 'public-key-746'),('twin-747', 3, 747, 'account-id-747', 'relay-747', 'public-key-747'),('twin-748', 3, 748, 'account-id-748', 'relay-748', 'public-key-748'),('twin-749', 3, 749, 'account-id-749', 'relay-749', 'public-key-749'),('twin-750', 3, 750, 'account-id-750', 'relay-750', 'public-key-750'),('twin-751', 3, 751, 'account-id-751', 'relay-751', 'public-key-751'),('twin-752', 3, 752, 'account-id-752', 'relay-752', 'public-key-752'),('twin-753', 3, 753, 'account-id-753', 'relay-753', 'public-key-753'),('twin-754', 3, 754, 'account-id-754', 'relay-754', 'public-key-754'),('twin-755', 3, 755, 'account-id-755', 'relay-755', 'public-key-755'),('twin-756', 3, 756, 'account-id-756', 'relay-756', 'public-key-756'),('twin-757', 3, 757, 'account-id-757', 'relay-757', 'public-key-757'),('twin-758', 3, 758, 'account-id-758', 'relay-758', 'public-key-758'),('twin-759', 3, 759, 'account-id-759', 'relay-759', 'public-key-759'),('twin-760', 3, 760, 'account-id-760', 'relay-760', 'public-key-760'),('twin-761', 3, 761, 'account-id-761', 'relay-761', 'public-key-761'),('twin-762', 3, 762, 'account-id-762', 'relay-762', 'public-key-762'),('twin-763', 3, 763, 'account-id-763', 'relay-763', 'public-key-763'),('twin-764', 3, 764, 'account-id-764', 'relay-764', 'public-key-764'),('twin-765', 3, 765, 'account-id-765', 'relay-765', 'public-key-765'),('twin-766', 3, 766, 'account-id-766', 'relay-766', 'public-key-766'),('twin-767', 3, 767, 'account-id-767', 'relay-767', 'public-key-767'),('twin-768', 3, 768, 'account-id-768', 'relay-768', 'public-key-768'),('twin-769', 3, 769, 'account-id-769', 'relay-769', 'public-key-769'),('twin-770', 3, 770, 'account-id-770', 'relay-770', 'public-key-770'),('twin-771', 3, 771, 'account-id-771', 'relay-771', 'public-key-771'),('twin-772', 3, 772, 'account-id-772', 'relay-772', 'public-key-772'),('twin-773', 3, 773, 'account-id-773', 'relay-773', 'public-key-773'),('twin-774', 3, 774, 'account-id-774', 'relay-774', 'public-key-774'),('twin-775', 3, 775, 'account-id-775', 'relay-775', 'public-key-775'),('twin-776', 3, 776, 'account-id-776', 'relay-776', 'public-key-776'),('twin-777', 3, 777, 'account-id-777', 'relay-777', 'public-key-777'),('twin-778', 3, 778, 'account-id-778', 'relay-778', 'public-key-778'),('twin-779', 3, 779, 'account-id-779', 'relay-779', 'public-key-779'),('twin-780', 3, 780, 'account-id-780', 'relay-780', 'public-key-780'),('twin-781', 3, 781, 'account-id-781', 'relay-781', 'public-key-781'),('twin-782', 3, 782, 'account-id-782', 'relay-782', 'public-key-782'),('twin-783', 3, 783, 'account-id-783', 'relay-783', 'public-key-783'),('twin-784', 3, 784, 'account-id-784', 'relay-784', 'public-key-784'),('twin-785', 3, 785, 'account-id-785', 'relay-785', 'public-key-785'),('twin-786', 3, 786, 'account-id-786', 'relay-786', 'public-key-786'),('twin-787', 3, 787, 'account-id-787', 'relay-787', 'public-key-787'),('twin-788', 3, 788, 'account-id-788', 'relay-788', 'public-key-788'),('twin-789', 3, 789, 'account-id-789', 'relay-789', 'public-key-789'),('twin-790', 3, 790, 'account-id-790', 'relay-790', 'public-key-790'),('twin-791', 3, 791, 'account-id-791', 'relay-791', 'public-key-791'),('twin-792', 3, 792, 'account-id-792', 'relay-792', 'public-key-792'),('twin-793', 3, 793, 'account-id-793', 'relay-793', 'public-key-793'),('twin-794', 3, 794, 'account-id-794', 'relay-794', 'public-key-794'),('twin-795', 3, 795, 'account-id-795', 'relay-795', 'public-key-795'),('twin-796', 3, 796, 'account-id-796', 'relay-796', 'public-key-796'),('twin-797', 3, 797, 'account-id-797', 'relay-797', 'public-key-797'),('twin-798', 3, 798, 'account-id-798', 'relay-798', 'public-key-798'),('twin-799', 3, 799, 'account-id-799', 'relay-799', 'public-key-799'),('twin-800', 3, 800, 'account-id-800', 'relay-800', 'public-key-800'),('twin-801', 3, 801, 'account-id-801', 'relay-801', 'public-key-801'),('twin-802', 3, 802, 'account-id-802', 'relay-802', 'public-key-802'),('twin-803', 3, 803, 'account-id-803', 'relay-803', 'public-key-803'),('twin-804', 3, 804, 'account-id-804', 'relay-804', 'public-key-804'),('twin-805', 3, 805, 'account-id-805', 'relay-805', 'public-key-805'),('twin-806', 3, 806, 'account-id-806', 'relay-806', 'public-key-806'),('twin-807', 3, 807, 'account-id-807', 'relay-807', 'public-key-807'),('twin-808', 3, 808, 'account-id-808', 'relay-808', 'public-key-808'),('twin-809', 3, 809, 'account-id-809', 'relay-809', 'public-key-809'),('twin-810', 3, 810, 'account-id-810', 'relay-810', 'public-key-810'),('twin-811', 3, 811, 'account-id-811', 'relay-811', 'public-key-811'),('twin-812', 3, 812, 'account-id-812', 'relay-812', 'public-key-812'),('twin-813', 3, 813, 'account-id-813', 'relay-813', 'public-key-813'),('twin-814', 3, 814, 'account-id-814', 'relay-814', 'public-key-814'),('twin-815', 3, 815, 'account-id-815', 'relay-815', 'public-key-815'),('twin-816', 3, 816, 'account-id-816', 'relay-816', 'public-key-816'),('twin-817', 3, 817, 'account-id-817', 'relay-817', 'public-key-817'),('twin-818', 3, 818, 'account-id-818', 'relay-818', 'public-key-818'),('twin-819', 3, 819, 'account-id-819', 'relay-819', 'public-key-819'),('twin-820', 3, 820, 'account-id-820', 'relay-820', 'public-key-820'),('twin-821', 3, 821, 'account-id-821', 'relay-821', 'public-key-821'),('twin-822', 3, 822, 'account-id-822', 'relay-822', 'public-key-822'),('twin-823', 3, 823, 'account-id-823', 'relay-823', 'public-key-823'),('twin-824', 3, 824, 'account-id-824', 'relay-824', 'public-key-824'),('twin-825', 3, 825, 'account-id-825', 'relay-825', 'public-key-825'),('twin-826', 3, 826, 'account-id-826', 'relay-826', 'public-key-826'),('twin-827', 3, 827, 'account-id-827', 'relay-827', 'public-key-827'),('twin-828', 3, 828, 'account-id-828', 'relay-828', 'public-key-828'),('twin-829', 3, 829, 'account-id-829', 'relay-829', 'public-key-829'),('twin-830', 3, 830, 'account-id-830', 'relay-830', 'public-key-830'),('twin-831', 3, 831, 'account-id-831', 'relay-831', 'public-key-831'),('twin-832', 3, 832, 'account-id-832', 'relay-832', 'public-key-832'),('twin-833', 3, 833, 'account-id-833', 'relay-833', 'public-key-833'),('twin-834', 3, 834, 'account-id-834', 'relay-834', 'public-key-834'),('twin-835', 3, 835, 'account-id-835', 'relay-835', 'public-key-835'),('twin-836', 3, 836, 'account-id-836', 'relay-836', 'public-key-836'),('twin-837', 3, 837, 'account-id-837', 'relay-837', 'public-key-837'),('twin-838', 3, 838, 'account-id-838', 'relay-838', 'public-key-838'),('twin-839', 3, 839, 'account-id-839', 'relay-839', 'public-key-839'),('twin-840', 3, 840, 'account-id-840', 'relay-840', 'public-key-840'),('twin-841', 3, 841, 'account-id-841', 'relay-841', 'public-key-841'),('twin-842', 3, 842, 'account-id-842', 'relay-842', 'public-key-842'),('twin-843', 3, 843, 'account-id-843', 'relay-843', 'public-key-843'),('twin-844', 3, 844, 'account-id-844', 'relay-844', 'public-key-844'),('twin-845', 3, 845, 'account-id-845', 'relay-845', 'public-key-845'),('twin-846', 3, 846, 'account-id-846', 'relay-846', 'public-key-846'),('twin-847', 3, 847, 'account-id-847', 'relay-847', 'public-key-847'),('twin-848', 3, 848, 'account-id-848', 'relay-848', 'public-key-848'),('twin-849', 3, 849, 'account-id-849', 'relay-849', 'public-key-849'),('twin-850', 3, 850, 'account-id-850', 'relay-850', 'public-key-850'),('twin-851', 3, 851, 'account-id-851', 'relay-851', 'public-key-851'),('twin-852', 3, 852, 'account-id-852', 'relay-852', 'public-key-852'),('twin-853', 3, 853, 'account-id-853', 'relay-853', 'public-key-853'),('twin-854', 3, 854, 'account-id-854', 'relay-854', 'public-key-854'),('twin-855', 3, 855, 'account-id-855', 'relay-855', 'public-key-855'),('twin-856', 3, 856, 'account-id-856', 'relay-856', 'public-key-856'),('twin-857', 3, 857, 'account-id-857', 'relay-857', 'public-key-857'),('twin-858', 3, 858, 'account-id-858', 'relay-858', 'public-key-858'),('twin-859', 3, 859, 'account-id-859', 'relay-859', 'public-key-859'),('twin-860', 3, 860, 'account-id-860', 'relay-860', 'public-key-860'),('twin-861', 3, 861, 'account-id-861', 'relay-861', 'public-key-861'),('twin-862', 3, 862, 'account-id-862', 'relay-862', 'public-key-862'),('twin-863', 3, 863, 'account-id-863', 'relay-863', 'public-key-863'),('twin-864', 3, 864, 'account-id-864', 'relay-864', 'public-key-864'),('twin-865', 3, 865, 'account-id-865', 'relay-865', 'public-key-865'),('twin-866', 3, 866, 'account-id-866', 'relay-866', 'public-key-866'),('twin-867', 3, 867, 'account-id-867', 'relay-867', 'public-key-867'),('twin-868', 3, 868, 'account-id-868', 'relay-868', 'public-key-868'),('twin-869', 3, 869, 'account-id-869', 'relay-869', 'public-key-869'),('twin-870', 3, 870, 'account-id-870', 'relay-870', 'public-key-870'),('twin-871', 3, 871, 'account-id-871', 'relay-871', 'public-key-871'),('twin-872', 3, 872, 'account-id-872', 'relay-872', 'public-key-872'),('twin-873', 3, 873, 'account-id-873', 'relay-873', 'public-key-873'),('twin-874', 3, 874, 'account-id-874', 'relay-874', 'public-key-874'),('twin-875', 3, 875, 'account-id-875', 'relay-875', 'public-key-875'),('twin-876', 3, 876, 'account-id-876', 'relay-876', 'public-key-876'),('twin-877', 3, 877, 'account-id-877', 'relay-877', 'public-key-877'),('twin-878', 3, 878, 'account-id-878', 'relay-878', 'public-key-878'),('twin-879', 3, 879, 'account-id-879', 'relay-879', 'public-key-879'),('twin-880', 3, 880, 'account-id-880', 'relay-880', 'public-key-880'),('twin-881', 3, 881, 'account-id-881', 'relay-881', 'public-key-881'),('twin-882', 3, 882, 'account-id-882', 'relay-882', 'public-key-882'),('twin-883', 3, 883, 'account-id-883', 'relay-883', 'public-key-883'),('twin-884', 3, 884, 'account-id-884', 'relay-884', 'public-key-884'),('twin-885', 3, 885, 'account-id-885', 'relay-885', 'public-key-885'),('twin-886', 3, 886, 'account-id-886', 'relay-886', 'public-key-886'),('twin-887', 3, 887, 'account-id-887', 'relay-887', 'public-key-887'),('twin-888', 3, 888, 'account-id-888', 'relay-888', 'public-key-888'),('twin-889', 3, 889, 'account-id-889', 'relay-889', 'public-key-889'),('twin-890', 3, 890, 'account-id-890', 'relay-890', 'public-key-890'),('twin-891', 3, 891, 'account-id-891', 'relay-891', 'public-key-891'),('twin-892', 3, 892, 'account-id-892', 'relay-892', 'public-key-892'),('twin-893', 3, 893, 'account-id-893', 'relay-893', 'public-key-893'),('twin-894', 3, 894, 'account-id-894', 'relay-894', 'public-key-894'),('twin-895', 3, 895, 'account-id-895', 'relay-895', 'public-key-895'),('twin-896', 3, 896, 'account-id-896', 'relay-896', 'public-key-896'),('twin-897', 3, 897, 'account-id-897', 'relay-897', 'public-key-897'),('twin-898', 3, 898, 'account-id-898', 'relay-898', 'public-key-898'),('twin-899', 3, 899, 'account-id-899', 'relay-899', 'public-key-899'),('twin-900', 3, 900, 'account-id-900', 'relay-900', 'public-key-900'),('twin-901', 3, 901, 'account-id-901', 'relay-901', 'public-key-901'),('twin-902', 3, 902, 'account-id-902', 'relay-902', 'public-key-902'),('twin-903', 3, 903, 'account-id-903', 'relay-903', 'public-key-903'),('twin-904', 3, 904, 'account-id-904', 'relay-904', 'public-key-904'),('twin-905', 3, 905, 'account-id-905', 'relay-905', 'public-key-905'),('twin-906', 3, 906, 'account-id-906', 'relay-906', 'public-key-906'),('twin-907', 3, 907, 'account-id-907', 'relay-907', 'public-key-907'),('twin-908', 3, 908, 'account-id-908', 'relay-908', 'public-key-908'),('twin-909', 3, 909, 'account-id-909', 'relay-909', 'public-key-909'),('twin-910', 3, 910, 'account-id-910', 'relay-910', 'public-key-910'),('twin-911', 3, 911, 'account-id-911', 'relay-911', 'public-key-911'),('twin-912', 3, 912, 'account-id-912', 'relay-912', 'public-key-912'),('twin-913', 3, 913, 'account-id-913', 'relay-913', 'public-key-913'),('twin-914', 3, 914, 'account-id-914', 'relay-914', 'public-key-914'),('twin-915', 3, 915, 'account-id-915', 'relay-915', 'public-key-915'),('twin-916', 3, 916, 'account-id-916', 'relay-916', 'public-key-916'),('twin-917', 3, 917, 'account-id-917', 'relay-917', 'public-key-917'),('twin-918', 3, 918, 'account-id-918', 'relay-918', 'public-key-918'),('twin-919', 3, 919, 'account-id-919', 'relay-919', 'public-key-919'),('twin-920', 3, 920, 'account-id-920', 'relay-920', 'public-key-920'),('twin-921', 3, 921, 'account-id-921', 'relay-921', 'public-key-921'),('twin-922', 3, 922, 'account-id-922', 'relay-922', 'public-key-922'),('twin-923', 3, 923, 'account-id-923', 'relay-923', 'public-key-923'),('twin-924', 3, 924, 'account-id-924', 'relay-924', 'public-key-924'),('twin-925', 3, 925, 'account-id-925', 'relay-925', 'public-key-925'),('twin-926', 3, 926, 'account-id-926', 'relay-926', 'public-key-926'),('twin-927', 3, 927, 'account-id-927', 'relay-927', 'public-key-927'),('twin-928', 3, 928, 'account-id-928', 'relay-928', 'public-key-928'),('twin-929', 3, 929, 'account-id-929', 'relay-929', 'public-key-929'),('twin-930', 3, 930, 'account-id-930', 'relay-930', 'public-key-930'),('twin-931', 3, 931, 'account-id-931', 'relay-931', 'public-key-931'),('twin-932', 3, 932, 'account-id-932', 'relay-932', 'public-key-932'),('twin-933', 3, 933, 'account-id-933', 'relay-933', 'public-key-933'),('twin-934', 3, 934, 'account-id-934', 'relay-934', 'public-key-934'),('twin-935', 3, 935, 'account-id-935', 'relay-935', 'public-key-935'),('twin-936', 3, 936, 'account-id-936', 'relay-936', 'public-key-936'),('twin-937', 3, 937, 'account-id-937', 'relay-937', 'public-key-937'),('twin-938', 3, 938, 'account-id-938', 'relay-938', 'public-key-938'),('twin-939', 3, 939, 'account-id-939', 'relay-939', 'public-key-939'),('twin-940', 3, 940, 'account-id-940', 'relay-940', 'public-key-940'),('twin-941', 3, 941, 'account-id-941', 'relay-941', 'public-key-941'),('twin-942', 3, 942, 'account-id-942', 'relay-942', 'public-key-942'),('twin-943', 3, 943, 'account-id-943', 'relay-943', 'public-key-943'),('twin-944', 3, 944, 'account-id-944', 'relay-944', 'public-key-944'),('twin-945', 3, 945, 'account-id-945', 'relay-945', 'public-key-945'),('twin-946', 3, 946, 'account-id-946', 'relay-946', 'public-key-946'),('twin-947', 3, 947, 'account-id-947', 'relay-947', 'public-key-947'),('twin-948', 3, 948, 'account-id-948', 'relay-948', 'public-key-948'),('twin-949', 3, 949, 'account-id-949', 'relay-949', 'public-key-949'),('twin-950', 3, 950, 'account-id-950', 'relay-950', 'public-key-950'),('twin-951', 3, 951, 'account-id-951', 'relay-951', 'public-key-951'),('twin-952', 3, 952, 'account-id-952', 'relay-952', 'public-key-952'),('twin-953', 3, 953, 'account-id-953', 'relay-953', 'public-key-953'),('twin-954', 3, 954, 'account-id-954', 'relay-954', 'public-key-954'),('twin-955', 3, 955, 'account-id-955', 'relay-955', 'public-key-955'),('twin-956', 3, 956, 'account-id-956', 'relay-956', 'public-key-956'),('twin-957', 3, 957, 'account-id-957', 'relay-957', 'public-key-957'),('twin-958', 3, 958, 'account-id-958', 'relay-958', 'public-key-958'),('twin-959', 3, 959, 'account-id-959', 'relay-959', 'public-key-959'),('twin-960', 3, 960, 'account-id-960', 'relay-960', 'public-key-960'),('twin-961', 3, 961, 'account-id-961', 'relay-961', 'public-key-961'),('twin-962', 3, 962, 'account-id-962', 'relay-962', 'public-key-962'),('twin-963', 3, 963, 'account-id-963', 'relay-963', 'public-key-963'),('twin-964', 3, 964, 'account-id-964', 'relay-964', 'public-key-964'),('twin-965', 3, 965, 'account-id-965', 'relay-965', 'public-key-965'),('twin-966', 3, 966, 'account-id-966', 'relay-966', 'public-key-966'),('twin-967', 3, 967, 'account-id-967', 'relay-967', 'public-key-967'),('twin-968', 3, 968, 'account-id-968', 'relay-968', 'public-key-968'),('twin-969', 3, 969, 'account-id-969', 'relay-969', 'public-key-969'),('twin-970', 3, 970, 'account-id-970', 'relay-970', 'public-key-970'),('twin-971', 3, 971, 'account-id-971', 'relay-971', 'public-key-971'),('twin-972', 3, 972, 'account-id-972', 'relay-972', 'public-key-972'),('twin-973', 3, 973, 'account-id-973', 'relay-973', 'public-key-973'),('twin-974', 3, 974, 'account-id-974', 'relay-974', 'public-key-974'),('twin-975', 3, 975, 'account-id-975', 'relay-975', 'public-key-975'),('twin-976', 3, 976, 'account-id-976', 'relay-976', 'public-key-976'),('twin-977', 3, 977, 'account-id-977', 'relay-977', 'public-key-977'),('twin-978', 3, 978, 'account-id-978', 'relay-978', 'public-key-978'),('twin-979', 3, 979, 'account-id-979', 'relay-979', 'public-key-979'),('twin-980', 3, 980, 'account-id-980', 'relay-980', 'public-key-980'),('twin-981', 3, 981, 'account-id-981', 'relay-981', 'public-key-981'),('twin-982', 3, 982, 'account-id-982', 'relay-982', 'public-key-982'),('twin-983', 3, 983, 'account-id-983', 'relay-983', 'public-key-983'),('twin-984', 3, 984, 'account-id-984', 'relay-984', 'public-key-984'),('twin-985', 3, 985, 'account-id-985', 'relay-985', 'public-key-985'),('twin-986', 3, 986, 'account-id-986', 'relay-986', 'public-key-986'),('twin-987', 3, 987, 'account-id-987', 'relay-987', 'public-key-987'),('twin-988', 3, 988, 'account-id-988', 'relay-988', 'public-key-988'),('twin-989', 3, 989, 'account-id-989', 'relay-989', 'public-key-989'),('twin-990', 3, 990, 'account-id-990', 'relay-990', 'public-key-990'),('twin-991', 3, 991, 'account-id-991', 'relay-991', 'public-key-991'),('twin-992', 3, 992, 'account-id-992', 'relay-992', 'public-key-992'),('twin-993', 3, 993, 'account-id-993', 'relay-993', 'public-key-993'),('twin-994', 3, 994, 'account-id-994', 'relay-994', 'public-key-994'),('twin-995', 3, 995, 'account-id-995', 'relay-995', 'public-key-995'),('twin-996', 3, 996, 'account-id-996', 'relay-996', 'public-key-996'),('twin-997', 3, 997, 'account-id-997', 'relay-997', 'public-key-997'),('twin-998', 3, 998, 'account-id-998', 'relay-998', 'public-key-998'),('twin-999', 3, 999, 'account-id-999', 'relay-999', 'public-key-999'),('twin-1000', 3, 1000, 'account-id-1000', 'relay-1000', 'public-key-1000'),('twin-1001', 3, 1001, 'account-id-1001', 'relay-1001', 'public-key-1001'),('twin-1002', 3, 1002, 'account-id-1002', 'relay-1002', 'public-key-1002'),('twin-1003', 3, 1003, 'account-id-1003', 'relay-1003', 'public-key-1003'),('twin-1004', 3, 1004, 'account-id-1004', 'relay-1004', 'public-key-1004'),('twin-1005', 3, 1005, 'account-id-1005', 'relay-1005', 'public-key-1005'),('twin-1006', 3, 1006, 'account-id-1006', 'relay-1006', 'public-key-1006'),('twin-1007', 3, 1007, 'account-id-1007', 'relay-1007', 'public-key-1007'),('twin-1008', 3, 1008, 'account-id-1008', 'relay-1008', 'public-key-1008'),('twin-1009', 3, 1009, 'account-id-1009', 'relay-1009', 'public-key-1009'),('twin-1010', 3, 1010, 'account-id-1010', 'relay-1010', 'public-key-1010'),('twin-1011', 3, 1011, 'account-id-1011', 'relay-1011', 'public-key-1011'),('twin-1012', 3, 1012, 'account-id-1012', 'relay-1012', 'public-key-1012'),('twin-1013', 3, 1013, 'account-id-1013', 'relay-1013', 'public-key-1013'),('twin-1014', 3, 1014, 'account-id-1014', 'relay-1014', 'public-key-1014'),('twin-1015', 3, 1015, 'account-id-1015', 'relay-1015', 'public-key-1015'),('twin-1016', 3, 1016, 'account-id-1016', 'relay-1016', 'public-key-1016'),('twin-1017', 3, 1017, 'account-id-1017', 'relay-1017', 'public-key-1017'),('twin-1018', 3, 1018, 'account-id-1018', 'relay-1018', 'public-key-1018'),('twin-1019', 3, 1019, 'account-id-1019', 'relay-1019', 'public-key-1019'),('twin-1020', 3, 1020, 'account-id-1020', 'relay-1020', 'public-key-1020'),('twin-1021', 3, 1021, 'account-id-1021', 'relay-1021', 'public-key-1021'),('twin-1022', 3, 1022, 'account-id-1022', 'relay-1022', 'public-key-1022'),('twin-1023', 3, 1023, 'account-id-1023', 'relay-1023', 'public-key-1023'),('twin-1024', 3, 1024, 'account-id-1024', 'relay-1024', 'public-key-1024'),('twin-1025', 3, 1025, 'account-id-1025', 'relay-1025', 'public-key-1025'),('twin-1026', 3, 1026, 'account-id-1026', 'relay-1026', 'public-key-1026'),('twin-1027', 3, 1027, 'account-id-1027', 'relay-1027', 'public-key-1027'),('twin-1028', 3, 1028, 'account-id-1028', 'relay-1028', 'public-key-1028'),('twin-1029', 3, 1029, 'account-id-1029', 'relay-1029', 'public-key-1029'),('twin-1030', 3, 1030, 'account-id-1030', 'relay-1030', 'public-key-1030'),('twin-1031', 3, 1031, 'account-id-1031', 'relay-1031', 'public-key-1031'),('twin-1032', 3, 1032, 'account-id-1032', 'relay-1032', 'public-key-1032'),('twin-1033', 3, 1033, 'account-id-1033', 'relay-1033', 'public-key-1033'),('twin-1034', 3, 1034, 'account-id-1034', 'relay-1034', 'public-key-1034'),('twin-1035', 3, 1035, 'account-id-1035', 'relay-1035', 'public-key-1035'),('twin-1036', 3, 1036, 'account-id-1036', 'relay-1036', 'public-key-1036'),('twin-1037', 3, 1037, 'account-id-1037', 'relay-1037', 'public-key-1037'),('twin-1038', 3, 1038, 'account-id-1038', 'relay-1038', 'public-key-1038'),('twin-1039', 3, 1039, 'account-id-1039', 'relay-1039', 'public-key-1039'),('twin-1040', 3, 1040, 'account-id-1040', 'relay-1040', 'public-key-1040'),('twin-1041', 3, 1041, 'account-id-1041', 'relay-1041', 'public-key-1041'),('twin-1042', 3, 1042, 'account-id-1042', 'relay-1042', 'public-key-1042'),('twin-1043', 3, 1043, 'account-id-1043', 'relay-1043', 'public-key-1043'),('twin-1044', 3, 1044, 'account-id-1044', 'relay-1044', 'public-key-1044'),('twin-1045', 3, 1045, 'account-id-1045', 'relay-1045', 'public-key-1045'),('twin-1046', 3, 1046, 'account-id-1046', 'relay-1046', 'public-key-1046'),('twin-1047', 3, 1047, 'account-id-1047', 'relay-1047', 'public-key-1047'),('twin-1048', 3, 1048, 'account-id-1048', 'relay-1048', 'public-key-1048'),('twin-1049', 3, 1049, 'account-id-1049', 'relay-1049', 'public-key-1049'),('twin-1050', 3, 1050, 'account-id-1050', 'relay-1050', 'public-key-1050'),('twin-1051', 3, 1051, 'account-id-1051', 'relay-1051', 'public-key-1051'),('twin-1052', 3, 1052, 'account-id-1052', 'relay-1052', 'public-key-1052'),('twin-1053', 3, 1053, 'account-id-1053', 'relay-1053', 'public-key-1053'),('twin-1054', 3, 1054, 'account-id-1054', 'relay-1054', 'public-key-1054'),('twin-1055', 3, 1055, 'account-id-1055', 'relay-1055', 'public-key-1055'),('twin-1056', 3, 1056, 'account-id-1056', 'relay-1056', 'public-key-1056'),('twin-1057', 3, 1057, 'account-id-1057', 'relay-1057', 'public-key-1057'),('twin-1058', 3, 1058, 'account-id-1058', 'relay-1058', 'public-key-1058'),('twin-1059', 3, 1059, 'account-id-1059', 'relay-1059', 'public-key-1059'),('twin-1060', 3, 1060, 'account-id-1060', 'relay-1060', 'public-key-1060'),('twin-1061', 3, 1061, 'account-id-1061', 'relay-1061', 'public-key-1061'),('twin-1062', 3, 1062, 'account-id-1062', 'relay-1062', 'public-key-1062'),('twin-1063', 3, 1063, 'account-id-1063', 'relay-1063', 'public-key-1063'),('twin-1064', 3, 1064, 'account-id-1064', 'relay-1064', 'public-key-1064'),('twin-1065', 3, 1065, 'account-id-1065', 'relay-1065', 'public-key-1065'),('twin-1066', 3, 1066, 'account-id-1066', 'relay-1066', 'public-key-1066'),('twin-1067', 3, 1067, 'account-id-1067', 'relay-1067', 'public-key-1067'),('twin-1068', 3, 1068, 'account-id-1068', 'relay-1068', 'public-key-1068'),('twin-1069', 3, 1069, 'account-id-1069', 'relay-1069', 'public-key-1069'),('twin-1070', 3, 1070, 'account-id-1070', 'relay-1070', 'public-key-1070'),('twin-1071', 3, 1071, 'account-id-1071', 'relay-1071', 'public-key-1071'),('twin-1072', 3, 1072, 'account-id-1072', 'relay-1072', 'public-key-1072'),('twin-1073', 3, 1073, 'account-id-1073', 'relay-1073', 'public-key-1073'),('twin-1074', 3, 1074, 'account-id-1074', 'relay-1074', 'public-key-1074'),('twin-1075', 3, 1075, 'account-id-1075', 'relay-1075', 'public-key-1075'),('twin-1076', 3, 1076, 'account-id-1076', 'relay-1076', 'public-key-1076'),('twin-1077', 3, 1077, 'account-id-1077', 'relay-1077', 'public-key-1077'),('twin-1078', 3, 1078, 'account-id-1078', 'relay-1078', 'public-key-1078'),('twin-1079', 3, 1079, 'account-id-1079', 'relay-1079', 'public-key-1079'),('twin-1080', 3, 1080, 'account-id-1080', 'relay-1080', 'public-key-1080'),('twin-1081', 3, 1081, 'account-id-1081', 'relay-1081', 'public-key-1081'),('twin-1082', 3, 1082, 'account-id-1082', 'relay-1082', 'public-key-1082'),('twin-1083', 3, 1083, 'account-id-1083', 'relay-1083', 'public-key-1083'),('twin-1084', 3, 1084, 'account-id-1084', 'relay-1084', 'public-key-1084'),('twin-1085', 3, 1085, 'account-id-1085', 'relay-1085', 'public-key-1085'),('twin-1086', 3, 1086, 'account-id-1086', 'relay-1086', 'public-key-1086'),('twin-1087', 3, 1087, 'account-id-1087', 'relay-1087', 'public-key-1087'),('twin-1088', 3, 1088, 'account-id-1088', 'relay-1088', 'public-key-1088'),('twin-1089', 3, 1089, 'account-id-1089', 'relay-1089', 'public-key-1089'),('twin-1090', 3, 1090, 'account-id-1090', 'relay-1090', 'public-key-1090'),('twin-1091', 3, 1091, 'account-id-1091', 'relay-1091', 'public-key-1091'),('twin-1092', 3, 1092, 'account-id-1092', 'relay-1092', 'public-key-1092'),('twin-1093', 3, 1093, 'account-id-1093', 'relay-1093', 'public-key-1093'),('twin-1094', 3, 1094, 'account-id-1094', 'relay-1094', 'public-key-1094'),('twin-1095', 3, 1095, 'account-id-1095', 'relay-1095', 'public-key-1095'),('twin-1096', 3, 1096, 'account-id-1096', 'relay-1096', 'public-key-1096'),('twin-1097', 3, 1097, 'account-id-1097', 'relay-1097', 'public-key-1097'),('twin-1098', 3, 1098, 'account-id-1098', 'relay-1098', 'public-key-1098'),('twin-1099', 3, 1099, 'account-id-1099', 'relay-1099', 'public-key-1099'),('twin-1100', 3, 1100, 'account-id-1100', 'relay-1100', 'public-key-1100'),('twin-1101', 3, 1101, 'account-id-1101', 'relay-1101', 'public-key-1101'),('twin-1102', 3, 1102, 'account-id-1102', 'relay-1102', 'public-key-1102'),('twin-1103', 3, 1103, 'account-id-1103', 'relay-1103', 'public-key-1103'),('twin-1104', 3, 1104, 'account-id-1104', 'relay-1104', 'public-key-1104'),('twin-1105', 3, 1105, 'account-id-1105', 'relay-1105', 'public-key-1105'),('twin-1106', 3, 1106, 'account-id-1106', 'relay-1106', 'public-key-1106'),('twin-1107', 3, 1107, 'account-id-1107', 'relay-1107', 'public-key-1107'),('twin-1108', 3, 1108, 'account-id-1108', 'relay-1108', 'public-key-1108'),('twin-1109', 3, 1109, 'account-id-1109', 'relay-1109', 'public-key-1109'),('twin-1110', 3, 1110, 'account-id-1110', 'relay-1110', 'public-key-1110'),('twin-1111', 3, 1111, 'account-id-1111', 'relay-1111', 'public-key-1111'),('twin-1112', 3, 1112, 'account-id-1112', 'relay-1112', 'public-key-1112'),('twin-1113', 3, 1113, 'account-id-1113', 'relay-1113', 'public-key-1113'),('twin-1114', 3, 1114, 'account-id-1114', 'relay-1114', 'public-key-1114'),('twin-1115', 3, 1115, 'account-id-1115', 'relay-1115', 'public-key-1115'),('twin-1116', 3, 1116, 'account-id-1116', 'relay-1116', 'public-key-1116'),('twin-1117', 3, 1117, 'account-id-1117', 'relay-1117', 'public-key-1117'),('twin-1118', 3, 1118, 'account-id-1118', 'relay-1118', 'public-key-1118'),('twin-1119', 3, 1119, 'account-id-1119', 'relay-1119', 'public-key-1119'),('twin-1120', 3, 1120, 'account-id-1120', 'relay-1120', 'public-key-1120'),('twin-1121', 3, 1121, 'account-id-1121', 'relay-1121', 'public-key-1121'),('twin-1122', 3, 1122, 'account-id-1122', 'relay-1122', 'public-key-1122'),('twin-1123', 3, 1123, 'account-id-1123', 'relay-1123', 'public-key-1123'),('twin-1124', 3, 1124, 'account-id-1124', 'relay-1124', 'public-key-1124'),('twin-1125', 3, 1125, 'account-id-1125', 'relay-1125', 'public-key-1125'),('twin-1126', 3, 1126, 'account-id-1126', 'relay-1126', 'public-key-1126'),('twin-1127', 3, 1127, 'account-id-1127', 'relay-1127', 'public-key-1127'),('twin-1128', 3, 1128, 'account-id-1128', 'relay-1128', 'public-key-1128'),('twin-1129', 3, 1129, 'account-id-1129', 'relay-1129', 'public-key-1129'),('twin-1130', 3, 1130, 'account-id-1130', 'relay-1130', 'public-key-1130'),('twin-1131', 3, 1131, 'account-id-1131', 'relay-1131', 'public-key-1131'),('twin-1132', 3, 1132, 'account-id-1132', 'relay-1132', 'public-key-1132'),('twin-1133', 3, 1133, 'account-id-1133', 'relay-1133', 'public-key-1133'),('twin-1134', 3, 1134, 'account-id-1134', 'relay-1134', 'public-key-1134'),('twin-1135', 3, 1135, 'account-id-1135', 'relay-1135', 'public-key-1135'),('twin-1136', 3, 1136, 'account-id-1136', 'relay-1136', 'public-key-1136'),('twin-1137', 3, 1137, 'account-id-1137', 'relay-1137', 'public-key-1137'),('twin-1138', 3, 1138, 'account-id-1138', 'relay-1138', 'public-key-1138'),('twin-1139', 3, 1139, 'account-id-1139', 'relay-1139', 'public-key-1139'),('twin-1140', 3, 1140, 'account-id-1140', 'relay-1140', 'public-key-1140'),('twin-1141', 3, 1141, 'account-id-1141', 'relay-1141', 'public-key-1141'),('twin-1142', 3, 1142, 'account-id-1142', 'relay-1142', 'public-key-1142'),('twin-1143', 3, 1143, 'account-id-1143', 'relay-1143', 'public-key-1143'),('twin-1144', 3, 1144, 'account-id-1144', 'relay-1144', 'public-key-1144'),('twin-1145', 3, 1145, 'account-id-1145', 'relay-1145', 'public-key-1145'),('twin-1146', 3, 1146, 'account-id-1146', 'relay-1146', 'public-key-1146'),('twin-1147', 3, 1147, 'account-id-1147', 'relay-1147', 'public-key-1147'),('twin-1148', 3, 1148, 'account-id-1148', 'relay-1148', 'public-key-1148'),('twin-1149', 3, 1149, 'account-id-1149', 'relay-1149', 'public-key-1149'),('twin-1150', 3, 1150, 'account-id-1150', 'relay-1150', 'public-key-1150'),('twin-1151', 3, 1151, 'account-id-1151', 'relay-1151', 'public-key-1151'),('twin-1152', 3, 1152, 'account-id-1152', 'relay-1152', 'public-key-1152'),('twin-1153', 3, 1153, 'account-id-1153', 'relay-1153', 'public-key-1153'),('twin-1154', 3, 1154, 'account-id-1154', 'relay-1154', 'public-key-1154'),('twin-1155', 3, 1155, 'account-id-1155', 'relay-1155', 'public-key-1155'),('twin-1156', 3, 1156, 'account-id-1156', 'relay-1156', 'public-key-1156'),('twin-1157', 3, 1157, 'account-id-1157', 'relay-1157', 'public-key-1157'),('twin-1158', 3, 1158, 'account-id-1158', 'relay-1158', 'public-key-1158'),('twin-1159', 3, 1159, 'account-id-1159', 'relay-1159', 'public-key-1159'),('twin-1160', 3, 1160, 'account-id-1160', 'relay-1160', 'public-key-1160'),('twin-1161', 3, 1161, 'account-id-1161', 'relay-1161', 'public-key-1161'),('twin-1162', 3, 1162, 'account-id-1162', 'relay-1162', 'public-key-1162'),('twin-1163', 3, 1163, 'account-id-1163', 'relay-1163', 'public-key-1163'),('twin-1164', 3, 1164, 'account-id-1164', 'relay-1164', 'public-key-1164'),('twin-1165', 3, 1165, 'account-id-1165', 'relay-1165', 'public-key-1165'),('twin-1166', 3, 1166, 'account-id-1166', 'relay-1166', 'public-key-1166'),('twin-1167', 3, 1167, 'account-id-1167', 'relay-1167', 'public-key-1167'),('twin-1168', 3, 1168, 'account-id-1168', 'relay-1168', 'public-key-1168'),('twin-1169', 3, 1169, 'account-id-1169', 'relay-1169', 'public-key-1169'),('twin-1170', 3, 1170, 'account-id-1170', 'relay-1170', 'public-key-1170'),('twin-1171', 3, 1171, 'account-id-1171', 'relay-1171', 'public-key-1171'),('twin-1172', 3, 1172, 'account-id-1172', 'relay-1172', 'public-key-1172'),('twin-1173', 3, 1173, 'account-id-1173', 'relay-1173', 'public-key-1173'),('twin-1174', 3, 1174, 'account-id-1174', 'relay-1174', 'public-key-1174'),('twin-1175', 3, 1175, 'account-id-1175', 'relay-1175', 'public-key-1175'),('twin-1176', 3, 1176, 'account-id-1176', 'relay-1176', 'public-key-1176'),('twin-1177', 3, 1177, 'account-id-1177', 'relay-1177', 'public-key-1177'),('twin-1178', 3, 1178, 'account-id-1178', 'relay-1178', 'public-key-1178'),('twin-1179', 3, 1179, 'account-id-1179', 'relay-1179', 'public-key-1179'),('twin-1180', 3, 1180, 'account-id-1180', 'relay-1180', 'public-key-1180'),('twin-1181', 3, 1181, 'account-id-1181', 'relay-1181', 'public-key-1181'),('twin-1182', 3, 1182, 'account-id-1182', 'relay-1182', 'public-key-1182'),('twin-1183', 3, 1183, 'account-id-1183', 'relay-1183', 'public-key-1183'),('twin-1184', 3, 1184, 'account-id-1184', 'relay-1184', 'public-key-1184'),('twin-1185', 3, 1185, 'account-id-1185', 'relay-1185', 'public-key-1185'),('twin-1186', 3, 1186, 'account-id-1186', 'relay-1186', 'public-key-1186'),('twin-1187', 3, 1187, 'account-id-1187', 'relay-1187', 'public-key-1187'),('twin-1188', 3, 1188, 'account-id-1188', 'relay-1188', 'public-key-1188'),('twin-1189', 3, 1189, 'account-id-1189', 'relay-1189', 'public-key-1189'),('twin-1190', 3, 1190, 'account-id-1190', 'relay-1190', 'public-key-1190'),('twin-1191', 3, 1191, 'account-id-1191', 'relay-1191', 'public-key-1191'),('twin-1192', 3, 1192, 'account-id-1192', 'relay-1192', 'public-key-1192'),('twin-1193', 3, 1193, 'account-id-1193', 'relay-1193', 'public-key-1193'),('twin-1194', 3, 1194, 'account-id-1194', 'relay-1194', 'public-key-1194'),('twin-1195', 3, 1195, 'account-id-1195', 'relay-1195', 'public-key-1195'),('twin-1196', 3, 1196, 'account-id-1196', 'relay-1196', 'public-key-1196'),('twin-1197', 3, 1197, 'account-id-1197', 'relay-1197', 'public-key-1197'),('twin-1198', 3, 1198, 'account-id-1198', 'relay-1198', 'public-key-1198'),('twin-1199', 3, 1199, 'account-id-1199', 'relay-1199', 'public-key-1199'),('twin-1200', 3, 1200, 'account-id-1200', 'relay-1200', 'public-key-1200'),('twin-1201', 3, 1201, 'account-id-1201', 'relay-1201', 'public-key-1201'),('twin-1202', 3, 1202, 'account-id-1202', 'relay-1202', 'public-key-1202'),('twin-1203', 3, 1203, 'account-id-1203', 'relay-1203', 'public-key-1203'),('twin-1204', 3, 1204, 'account-id-1204', 'relay-1204', 'public-key-1204'),('twin-1205', 3, 1205, 'account-id-1205', 'relay-1205', 'public-key-1205'),('twin-1206', 3, 1206, 'account-id-1206', 'relay-1206', 'public-key-1206'),('twin-1207', 3, 1207, 'account-id-1207', 'relay-1207', 'public-key-1207'),('twin-1208', 3, 1208, 'account-id-1208', 'relay-1208', 'public-key-1208'),('twin-1209', 3, 1209, 'account-id-1209', 'relay-1209', 'public-key-1209'),('twin-1210', 3, 1210, 'account-id-1210', 'relay-1210', 'public-key-1210'),('twin-1211', 3, 1211, 'account-id-1211', 'relay-1211', 'public-key-1211'),('twin-1212', 3, 1212, 'account-id-1212', 'relay-1212', 'public-key-1212'),('twin-1213', 3, 1213, 'account-id-1213', 'relay-1213', 'public-key-1213'),('twin-1214', 3, 1214, 'account-id-1214', 'relay-1214', 'public-key-1214'),('twin-1215', 3, 1215, 'account-id-1215', 'relay-1215', 'public-key-1215'),('twin-1216', 3, 1216, 'account-id-1216', 'relay-1216', 'public-key-1216'),('twin-1217', 3, 1217, 'account-id-1217', 'relay-1217', 'public-key-1217'),('twin-1218', 3, 1218, 'account-id-1218', 'relay-1218', 'public-key-1218'),('twin-1219', 3, 1219, 'account-id-1219', 'relay-1219', 'public-key-1219'),('twin-1220', 3, 1220, 'account-id-1220', 'relay-1220', 'public-key-1220'),('twin-1221', 3, 1221, 'account-id-1221', 'relay-1221', 'public-key-1221'),('twin-1222', 3, 1222, 'account-id-1222', 'relay-1222', 'public-key-1222'),('twin-1223', 3, 1223, 'account-id-1223', 'relay-1223', 'public-key-1223'),('twin-1224', 3, 1224, 'account-id-1224', 'relay-1224', 'public-key-1224'),('twin-1225', 3, 1225, 'account-id-1225', 'relay-1225', 'public-key-1225'),('twin-1226', 3, 1226, 'account-id-1226', 'relay-1226', 'public-key-1226'),('twin-1227', 3, 1227, 'account-id-1227', 'relay-1227', 'public-key-1227'),('twin-1228', 3, 1228, 'account-id-1228', 'relay-1228', 'public-key-1228'),('twin-1229', 3, 1229, 'account-id-1229', 'relay-1229', 'public-key-1229'),('twin-1230', 3, 1230, 'account-id-1230', 'relay-1230', 'public-key-1230'),('twin-1231', 3, 1231, 'account-id-1231', 'relay-1231', 'public-key-1231'),('twin-1232', 3, 1232, 'account-id-1232', 'relay-1232', 'public-key-1232'),('twin-1233', 3, 1233, 'account-id-1233', 'relay-1233', 'public-key-1233'),('twin-1234', 3, 1234, 'account-id-1234', 'relay-1234', 'public-key-1234'),('twin-1235', 3, 1235, 'account-id-1235', 'relay-1235', 'public-key-1235'),('twin-1236', 3, 1236, 'account-id-1236', 'relay-1236', 'public-key-1236'),('twin-1237', 3, 1237, 'account-id-1237', 'relay-1237', 'public-key-1237'),('twin-1238', 3, 1238, 'account-id-1238', 'relay-1238', 'public-key-1238'),('twin-1239', 3, 1239, 'account-id-1239', 'relay-1239', 'public-key-1239'),('twin-1240', 3, 1240, 'account-id-1240', 'relay-1240', 'public-key-1240'),('twin-1241', 3, 1241, 'account-id-1241', 'relay-1241', 'public-key-1241'),('twin-1242', 3, 1242, 'account-id-1242', 'relay-1242', 'public-key-1242'),('twin-1243', 3, 1243, 'account-id-1243', 'relay-1243', 'public-key-1243'),('twin-1244', 3, 1244, 'account-id-1244', 'relay-1244', 'public-key-1244'),('twin-1245', 3, 1245, 'account-id-1245', 'relay-1245', 'public-key-1245'),('twin-1246', 3, 1246, 'account-id-1246', 'relay-1246', 'public-key-1246'),('twin-1247', 3, 1247, 'account-id-1247', 'relay-1247', 'public-key-1247'),('twin-1248', 3, 1248, 'account-id-1248', 'relay-1248', 'public-key-1248'),('twin-1249', 3, 1249, 'account-id-1249', 'relay-1249', 'public-key-1249'),('twin-1250', 3, 1250, 'account-id-1250', 'relay-1250', 'public-key-1250'),('twin-1251', 3, 1251, 'account-id-1251', 'relay-1251', 'public-key-1251'),('twin-1252', 3, 1252, 'account-id-1252', 'relay-1252', 'public-key-1252'),('twin-1253', 3, 1253, 'account-id-1253', 'relay-1253', 'public-key-1253'),('twin-1254', 3, 1254, 'account-id-1254', 'relay-1254', 'public-key-1254'),('twin-1255', 3, 1255, 'account-id-1255', 'relay-1255', 'public-key-1255'),('twin-1256', 3, 1256, 'account-id-1256', 'relay-1256', 'public-key-1256'),('twin-1257', 3, 1257, 'account-id-1257', 'relay-1257', 'public-key-1257'),('twin-1258', 3, 1258, 'account-id-1258', 'relay-1258', 'public-key-1258'),('twin-1259', 3, 1259, 'account-id-1259', 'relay-1259', 'public-key-1259'),('twin-1260', 3, 1260, 'account-id-1260', 'relay-1260', 'public-key-1260'),('twin-1261', 3, 1261, 'account-id-1261', 'relay-1261', 'public-key-1261'),('twin-1262', 3, 1262, 'account-id-1262', 'relay-1262', 'public-key-1262'),('twin-1263', 3, 1263, 'account-id-1263', 'relay-1263', 'public-key-1263'),('twin-1264', 3, 1264, 'account-id-1264', 'relay-1264', 'public-key-1264'),('twin-1265', 3, 1265, 'account-id-1265', 'relay-1265', 'public-key-1265'),('twin-1266', 3, 1266, 'account-id-1266', 'relay-1266', 'public-key-1266'),('twin-1267', 3, 1267, 'account-id-1267', 'relay-1267', 'public-key-1267'),('twin-1268', 3, 1268, 'account-id-1268', 'relay-1268', 'public-key-1268'),('twin-1269', 3, 1269, 'account-id-1269', 'relay-1269', 'public-key-1269'),('twin-1270', 3, 1270, 'account-id-1270', 'relay-1270', 'public-key-1270'),('twin-1271', 3, 1271, 'account-id-1271', 'relay-1271', 'public-key-1271'),('twin-1272', 3, 1272, 'account-id-1272', 'relay-1272', 'public-key-1272'),('twin-1273', 3, 1273, 'account-id-1273', 'relay-1273', 'public-key-1273'),('twin-1274', 3, 1274, 'account-id-1274', 'relay-1274', 'public-key-1274'),('twin-1275', 3, 1275, 'account-id-1275', 'relay-1275', 'public-key-1275'),('twin-1276', 3, 1276, 'account-id-1276', 'relay-1276', 'public-key-1276'),('twin-1277', 3, 1277, 'account-id-1277', 'relay-1277', 'public-key-1277'),('twin-1278', 3, 1278, 'account-id-1278', 'relay-1278', 'public-key-1278'),('twin-1279', 3, 1279, 'account-id-1279', 'relay-1279', 'public-key-1279'),('twin-1280', 3, 1280, 'account-id-1280', 'relay-1280', 'public-key-1280'),('twin-1281', 3, 1281, 'account-id-1281', 'relay-1281', 'public-key-1281'),('twin-1282', 3, 1282, 'account-id-1282', 'relay-1282', 'public-key-1282'),('twin-1283', 3, 1283, 'account-id-1283', 'relay-1283', 'public-key-1283'),('twin-1284', 3, 1284, 'account-id-1284', 'relay-1284', 'public-key-1284'),('twin-1285', 3, 1285, 'account-id-1285', 'relay-1285', 'public-key-1285'),('twin-1286', 3, 1286, 'account-id-1286', 'relay-1286', 'public-key-1286'),('twin-1287', 3, 1287, 'account-id-1287', 'relay-1287', 'public-key-1287'),('twin-1288', 3, 1288, 'account-id-1288', 'relay-1288', 'public-key-1288'),('twin-1289', 3, 1289, 'account-id-1289', 'relay-1289', 'public-key-1289'),('twin-1290', 3, 1290, 'account-id-1290', 'relay-1290', 'public-key-1290'),('twin-1291', 3, 1291, 'account-id-1291', 'relay-1291', 'public-key-1291'),('twin-1292', 3, 1292, 'account-id-1292', 'relay-1292', 'public-key-1292'),('twin-1293', 3, 1293, 'account-id-1293', 'relay-1293', 'public-key-1293'),('twin-1294', 3, 1294, 'account-id-1294', 'relay-1294', 'public-key-1294'),('twin-1295', 3, 1295, 'account-id-1295', 'relay-1295', 'public-key-1295'),('twin-1296', 3, 1296, 'account-id-1296', 'relay-1296', 'public-key-1296'),('twin-1297', 3, 1297, 'account-id-1297', 'relay-1297', 'public-key-1297'),('twin-1298', 3, 1298, 'account-id-1298', 'relay-1298', 'public-key-1298'),('twin-1299', 3, 1299, 'account-id-1299', 'relay-1299', 'public-key-1299'),('twin-1300', 3, 1300, 'account-id-1300', 'relay-1300', 'public-key-1300');; INSERT INTO farm (id, grid_version, farm_id, name, twin_id, pricing_policy_id, certification, stellar_address, dedicated_farm) VALUES ('farm-1', 3, 1, 'farm-name-1', 3, 1, 'Diy', NULL, false),('farm-2', 3, 2, 'farm-name-2', 4, 1, 'Diy', NULL, false),('farm-3', 3, 3, 'farm-name-3', 5, 1, 'Diy', NULL, true),('farm-4', 3, 4, 'farm-name-4', 6, 1, 'Diy', NULL, false),('farm-5', 3, 5, 'farm-name-5', 7, 1, 'Diy', NULL, false),('farm-6', 3, 6, 'farm-name-6', 8, 1, 'Diy', NULL, false),('farm-7', 3, 7, 'farm-name-7', 9, 1, 'Diy', NULL, false),('farm-8', 3, 8, 'farm-name-8', 10, 1, 'Diy', NULL, false),('farm-9', 3, 9, 'farm-name-9', 11, 1, 'Diy', NULL, false),('farm-10', 3, 10, 'farm-name-10', 12, 1, 'Diy', NULL, false),('farm-11', 3, 11, 'farm-name-11', 13, 1, 'Diy', NULL, false),('farm-12', 3, 12, 'farm-name-12', 14, 1, 'Diy', NULL, false),('farm-13', 3, 13, 'farm-name-13', 15, 1, 'Diy', NULL, false),('farm-14', 3, 14, 'farm-name-14', 16, 1, 'Diy', NULL, false),('farm-15', 3, 15, 'farm-name-15', 17, 1, 'Diy', NULL, false),('farm-16', 3, 16, 'farm-name-16', 18, 1, 'Diy', NULL, false),('farm-17', 3, 17, 'farm-name-17', 19, 1, 'Diy', NULL, false),('farm-18', 3, 18, 'farm-name-18', 20, 1, 'Diy', NULL, false),('farm-19', 3, 19, 'farm-name-19', 21, 1, 'Diy', NULL, false),('farm-20', 3, 20, 'farm-name-20', 22, 1, 'Diy', NULL, true),('farm-21', 3, 21, 'farm-name-21', 23, 1, 'Diy', NULL, false),('farm-22', 3, 22, 'farm-name-22', 24, 1, 'Diy', NULL, false),('farm-23', 3, 23, 'farm-name-23', 25, 1, 'Diy', NULL, true),('farm-24', 3, 24, 'farm-name-24', 26, 1, 'Diy', NULL, false),('farm-25', 3, 25, 'farm-name-25', 27, 1, 'Diy', NULL, false),('farm-26', 3, 26, 'farm-name-26', 28, 1, 'Diy', NULL, false),('farm-27', 3, 27, 'farm-name-27', 29, 1, 'Diy', NULL, false),('farm-28', 3, 28, 'farm-name-28', 30, 1, 'Diy', NULL, false),('farm-29', 3, 29, 'farm-name-29', 31, 1, 'Diy', NULL, false),('farm-30', 3, 30, 'farm-name-30', 32, 1, 'Diy', NULL, false),('farm-31', 3, 31, 'farm-name-31', 33, 1, 'Diy', NULL, false),('farm-32', 3, 32, 'farm-name-32', 34, 1, 'Diy', NULL, false),('farm-33', 3, 33, 'farm-name-33', 35, 1, 'Diy', NULL, false),('farm-34', 3, 34, 'farm-name-34', 36, 1, 'Diy', NULL, false),('farm-35', 3, 35, 'farm-name-35', 37, 1, 'Diy', NULL, false),('farm-36', 3, 36, 'farm-name-36', 38, 1, 'Diy', NULL, false),('farm-37', 3, 37, 'farm-name-37', 39, 1, 'Diy', NULL, true),('farm-38', 3, 38, 'farm-name-38', 40, 1, 'Diy', NULL, false),('farm-39', 3, 39, 'farm-name-39', 41, 1, 'Diy', NULL, false),('farm-40', 3, 40, 'farm-name-40', 42, 1, 'Diy', NULL, false),('farm-41', 3, 41, 'farm-name-41', 43, 1, 'Diy', NULL, false),('farm-42', 3, 42, 'farm-name-42', 44, 1, 'Diy', NULL, false),('farm-43', 3, 43, 'farm-name-43', 45, 1, 'Diy', NULL, true),('farm-44', 3, 44, 'farm-name-44', 46, 1, 'Diy', NULL, false),('farm-45', 3, 45, 'farm-name-45', 47, 1, 'Diy', NULL, false),('farm-46', 3, 46, 'farm-name-46', 48, 1, 'Diy', NULL, false),('farm-47', 3, 47, 'farm-name-47', 49, 1, 'Diy', NULL, false),('farm-48', 3, 48, 'farm-name-48', 50, 1, 'Diy', NULL, false),('farm-49', 3, 49, 'farm-name-49', 51, 1, 'Diy', NULL, true),('farm-50', 3, 50, 'farm-name-50', 52, 1, 'Diy', NULL, false),('farm-51', 3, 51, 'farm-name-51', 53, 1, 'Diy', NULL, false),('farm-52', 3, 52, 'farm-name-52', 54, 1, 'Diy', NULL, false),('farm-53', 3, 53, 'farm-name-53', 55, 1, 'Diy', NULL, false),('farm-54', 3, 54, 'farm-name-54', 56, 1, 'Diy', NULL, false),('farm-55', 3, 55, 'farm-name-55', 57, 1, 'Diy', NULL, false),('farm-56', 3, 56, 'farm-name-56', 58, 1, 'Diy', NULL, false),('farm-57', 3, 57, 'farm-name-57', 59, 1, 'Diy', NULL, false),('farm-58', 3, 58, 'farm-name-58', 60, 1, 'Diy', NULL, false),('farm-59', 3, 59, 'farm-name-59', 61, 1, 'Diy', NULL, false),('farm-60', 3, 60, 'farm-name-60', 62, 1, 'Diy', NULL, false),('farm-61', 3, 61, 'farm-name-61', 63, 1, 'Diy', NULL, true),('farm-62', 3, 62, 'farm-name-62', 64, 1, 'Diy', NULL, false),('farm-63', 3, 63, 'farm-name-63', 65, 1, 'Diy', NULL, false),('farm-64', 3, 64, 'farm-name-64', 66, 1, 'Diy', NULL, false),('farm-65', 3, 65, 'farm-name-65', 67, 1, 'Diy', NULL, false),('farm-66', 3, 66, 'farm-name-66', 68, 1, 'Diy', NULL, false),('farm-67', 3, 67, 'farm-name-67', 69, 1, 'Diy', NULL, true),('farm-68', 3, 68, 'farm-name-68', 70, 1, 'Diy', NULL, false),('farm-69', 3, 69, 'farm-name-69', 71, 1, 'Diy', NULL, false),('farm-70', 3, 70, 'farm-name-70', 72, 1, 'Diy', NULL, false),('farm-71', 3, 71, 'farm-name-71', 73, 1, 'Diy', NULL, false),('farm-72', 3, 72, 'farm-name-72', 74, 1, 'Diy', NULL, false),('farm-73', 3, 73, 'farm-name-73', 75, 1, 'Diy', NULL, false),('farm-74', 3, 74, 'farm-name-74', 76, 1, 'Diy', NULL, false),('farm-75', 3, 75, 'farm-name-75', 77, 1, 'Diy', NULL, true),('farm-76', 3, 76, 'farm-name-76', 78, 1, 'Diy', NULL, false),('farm-77', 3, 77, 'farm-name-77', 79, 1, 'Diy', NULL, false),('farm-78', 3, 78, 'farm-name-78', 80, 1, 'Diy', NULL, true),('farm-79', 3, 79, 'farm-name-79', 81, 1, 'Diy', NULL, false),('farm-80', 3, 80, 'farm-name-80', 82, 1, 'Diy', NULL, false),('farm-81', 3, 81, 'farm-name-81', 83, 1, 'Diy', NULL, true),('farm-82', 3, 82, 'farm-name-82', 84, 1, 'Diy', NULL, false),('farm-83', 3, 83, 'farm-name-83', 85, 1, 'Diy', NULL, false),('farm-84', 3, 84, 'farm-name-84', 86, 1, 'Diy', NULL, true),('farm-85', 3, 85, 'farm-name-85', 87, 1, 'Diy', NULL, false),('farm-86', 3, 86, 'farm-name-86', 88, 1, 'Diy', NULL, false),('farm-87', 3, 87, 'farm-name-87', 89, 1, 'Diy', NULL, false),('farm-88', 3, 88, 'farm-name-88', 90, 1, 'Diy', NULL, false),('farm-89', 3, 89, 'farm-name-89', 91, 1, 'Diy', NULL, false),('farm-90', 3, 90, 'farm-name-90', 92, 1, 'Diy', NULL, false),('farm-91', 3, 91, 'farm-name-91', 93, 1, 'Diy', NULL, false),('farm-92', 3, 92, 'farm-name-92', 94, 1, 'Diy', NULL, false),('farm-93', 3, 93, 'farm-name-93', 95, 1, 'Diy', NULL, false),('farm-94', 3, 94, 'farm-name-94', 96, 1, 'Diy', NULL, false),('farm-95', 3, 95, 'farm-name-95', 97, 1, 'Diy', NULL, false),('farm-96', 3, 96, 'farm-name-96', 98, 1, 'Diy', NULL, false),('farm-97', 3, 97, 'farm-name-97', 99, 1, 'Diy', NULL, false),('farm-98', 3, 98, 'farm-name-98', 100, 1, 'Diy', NULL, false),('farm-99', 3, 99, 'farm-name-99', 101, 1, 'Diy', NULL, true),('farm-100', 3, 100, 'farm-name-100', 102, 1, 'Diy', NULL, false);; INSERT INTO location (id, longitude, latitude) VALUES ('location-2', '1', '1'),('location-3', '2', '2'),('location-4', '3', '3'),('location-5', '4', '4'),('location-6', '5', '5'),('location-7', '6', '6'),('location-8', '7', '7'),('location-9', '8', '8'),('location-10', '9', '9'),('location-11', '10', '10'),('location-12', '11', '11'),('location-13', '12', '12'),('location-14', '13', '13'),('location-15', '14', '14'),('location-16', '15', '15'),('location-17', '16', '16'),('location-18', '17', '17'),('location-19', '18', '18'),('location-20', '19', '19'),('location-21', '20', '20'),('location-22', '21', '21'),('location-23', '22', '22'),('location-24', '23', '23'),('location-25', '24', '24'),('location-26', '25', '25'),('location-27', '26', '26'),('location-28', '27', '27'),('location-29', '28', '28'),('location-30', '29', '29'),('location-31', '30', '30'),('location-32', '31', '31'),('location-33', '32', '32'),('location-34', '33', '33'),('location-35', '34', '34'),('location-36', '35', '35'),('location-37', '36', '36'),('location-38', '37', '37'),('location-39', '38', '38'),('location-40', '39', '39'),('location-41', '40', '40'),('location-42', '41', '41'),('location-43', '42', '42'),('location-44', '43', '43'),('location-45', '44', '44'),('location-46', '45', '45'),('location-47', '46', '46'),('location-48', '47', '47'),('location-49', '48', '48'),('location-50', '49', '49'),('location-51', '50', '50'),('location-52', '51', '51'),('location-53', '52', '52'),('location-54', '53', '53'),('location-55', '54', '54'),('location-56', '55', '55'),('location-57', '56', '56'),('location-58', '57', '57'),('location-59', '58', '58'),('location-60', '59', '59'),('location-61', '60', '60'),('location-62', '61', '61'),('location-63', '62', '62'),('location-64', '63', '63'),('location-65', '64', '64'),('location-66', '65', '65'),('location-67', '66', '66'),('location-68', '67', '67'),('location-69', '68', '68'),('location-70', '69', '69'),('location-71', '70', '70'),('location-72', '71', '71'),('location-73', '72', '72'),('location-74', '73', '73'),('location-75', '74', '74'),('location-76', '75', '75'),('location-77', '76', '76'),('location-78', '77', '77'),('location-79', '78', '78'),('location-80', '79', '79'),('location-81', '80', '80'),('location-82', '81', '81'),('location-83', '82', '82'),('location-84', '83', '83'),('location-85', '84', '84'),('location-86', '85', '85'),('location-87', '86', '86'),('location-88', '87', '87'),('location-89', '88', '88'),('location-90', '89', '89'),('location-91', '90', '90'),('location-92', '91', '91'),('location-93', '92', '92'),('location-94', '93', '93'),('location-95', '94', '94'),('location-96', '95', '95'),('location-97', '96', '96'),('location-98', '97', '97'),('location-99', '98', '98'),('location-100', '99', '99'),('location-101', '100', '100'),('location-102', '101', '101'),('location-103', '102', '102'),('location-104', '103', '103'),('location-105', '104', '104'),('location-106', '105', '105'),('location-107', '106', '106'),('location-108', '107', '107'),('location-109', '108', '108'),('location-110', '109', '109'),('location-111', '110', '110'),('location-112', '111', '111'),('location-113', '112', '112'),('location-114', '113', '113'),('location-115', '114', '114'),('location-116', '115', '115'),('location-117', '116', '116'),('location-118', '117', '117'),('location-119', '118', '118'),('location-120', '119', '119'),('location-121', '120', '120'),('location-122', '121', '121'),('location-123', '122', '122'),('location-124', '123', '123'),('location-125', '124', '124'),('location-126', '125', '125'),('location-127', '126', '126'),('location-128', '127', '127'),('location-129', '128', '128'),('location-130', '129', '129'),('location-131', '130', '130'),('location-132', '131', '131'),('location-133', '132', '132'),('location-134', '133', '133'),('location-135', '134', '134'),('location-136', '135', '135'),('location-137', '136', '136'),('location-138', '137', '137'),('location-139', '138', '138'),('location-140', '139', '139'),('location-141', '140', '140'),('location-142', '141', '141'),('location-143', '142', '142'),('location-144', '143', '143'),('location-145', '144', '144'),('location-146', '145', '145'),('location-147', '146', '146'),('location-148', '147', '147'),('location-149', '148', '148'),('location-150', '149', '149'),('location-151', '150', '150'),('location-152', '151', '151'),('location-153', '152', '152'),('location-154', '153', '153'),('location-155', '154', '154'),('location-156', '155', '155'),('location-157', '156', '156'),('location-158', '157', '157'),('location-159', '158', '158'),('location-160', '159', '159'),('location-161', '160', '160'),('location-162', '161', '161'),('location-163', '162', '162'),('location-164', '163', '163'),('location-165', '164', '164'),('location-166', '165', '165'),('location-167', '166', '166'),('location-168', '167', '167'),('location-169', '168', '168'),('location-170', '169', '169'),('location-171', '170', '170'),('location-172', '171', '171'),('location-173', '172', '172'),('location-174', '173', '173'),('location-175', '174', '174'),('location-176', '175', '175'),('location-177', '176', '176'),('location-178', '177', '177'),('location-179', '178', '178'),('location-180', '179', '179'),('location-181', '180', '180'),('location-182', '181', '181'),('location-183', '182', '182'),('location-184', '183', '183'),('location-185', '184', '184'),('location-186', '185', '185'),('location-187', '186', '186'),('location-188', '187', '187'),('location-189', '188', '188'),('location-190', '189', '189'),('location-191', '190', '190'),('location-192', '191', '191'),('location-193', '192', '192'),('location-194', '193', '193'),('location-195', '194', '194'),('location-196', '195', '195'),('location-197', '196', '196'),('location-198', '197', '197'),('location-199', '198', '198'),('location-200', '199', '199'),('location-201', '200', '200'),('location-202', '201', '201'),('location-203', '202', '202'),('location-204', '203', '203'),('location-205', '204', '204'),('location-206', '205', '205'),('location-207', '206', '206'),('location-208', '207', '207'),('location-209', '208', '208'),('location-210', '209', '209'),('location-211', '210', '210'),('location-212', '211', '211'),('location-213', '212', '212'),('location-214', '213', '213'),('location-215', '214', '214'),('location-216', '215', '215'),('location-217', '216', '216'),('location-218', '217', '217'),('location-219', '218', '218'),('location-220', '219', '219'),('location-221', '220', '220'),('location-222', '221', '221'),('location-223', '222', '222'),('location-224', '223', '223'),('location-225', '224', '224'),('location-226', '225', '225'),('location-227', '226', '226'),('location-228', '227', '227'),('location-229', '228', '228'),('location-230', '229', '229'),('location-231', '230', '230'),('location-232', '231', '231'),('location-233', '232', '232'),('location-234', '233', '233'),('location-235', '234', '234'),('location-236', '235', '235'),('location-237', '236', '236'),('location-238', '237', '237'),('location-239', '238', '238'),('location-240', '239', '239'),('location-241', '240', '240'),('location-242', '241', '241'),('location-243', '242', '242'),('location-244', '243', '243'),('location-245', '244', '244'),('location-246', '245', '245'),('location-247', '246', '246'),('location-248', '247', '247'),('location-249', '248', '248'),('location-250', '249', '249'),('location-251', '250', '250'),('location-252', '251', '251'),('location-253', '252', '252'),('location-254', '253', '253'),('location-255', '254', '254'),('location-256', '255', '255'),('location-257', '256', '256'),('location-258', '257', '257'),('location-259', '258', '258'),('location-260', '259', '259'),('location-261', '260', '260'),('location-262', '261', '261'),('location-263', '262', '262'),('location-264', '263', '263'),('location-265', '264', '264'),('location-266', '265', '265'),('location-267', '266', '266'),('location-268', '267', '267'),('location-269', '268', '268'),('location-270', '269', '269'),('location-271', '270', '270'),('location-272', '271', '271'),('location-273', '272', '272'),('location-274', '273', '273'),('location-275', '274', '274'),('location-276', '275', '275'),('location-277', '276', '276'),('location-278', '277', '277'),('location-279', '278', '278'),('location-280', '279', '279'),('location-281', '280', '280'),('location-282', '281', '281'),('location-283', '282', '282'),('location-284', '283', '283'),('location-285', '284', '284'),('location-286', '285', '285'),('location-287', '286', '286'),('location-288', '287', '287'),('location-289', '288', '288'),('location-290', '289', '289'),('location-291', '290', '290'),('location-292', '291', '291'),('location-293', '292', '292'),('location-294', '293', '293'),('location-295', '294', '294'),('location-296', '295', '295'),('location-297', '296', '296'),('location-298', '297', '297'),('location-299', '298', '298'),('location-300', '299', '299'),('location-301', '300', '300'),('location-302', '301', '301'),('location-303', '302', '302'),('location-304', '303', '303'),('location-305', '304', '304'),('location-306', '305', '305'),('location-307', '306', '306'),('location-308', '307', '307'),('location-309', '308', '308'),('location-310', '309', '309'),('location-311', '310', '310'),('location-312', '311', '311'),('location-313', '312', '312'),('location-314', '313', '313'),('location-315', '314', '314'),('location-316', '315', '315'),('location-317', '316', '316'),('location-318', '317', '317'),('location-319', '318', '318'),('location-320', '319', '319'),('location-321', '320', '320'),('location-322', '321', '321'),('location-323', '322', '322'),('location-324', '323', '323'),('location-325', '324', '324'),('location-326', '325', '325'),('location-327', '326', '326'),('location-328', '327', '327'),('location-329', '328', '328'),('location-330', '329', '329'),('location-331', '330', '330'),('location-332', '331', '331'),('location-333', '332', '332'),('location-334', '333', '333'),('location-335', '334', '334'),('location-336', '335', '335'),('location-337', '336', '336'),('location-338', '337', '337'),('location-339', '338', '338'),('location-340', '339', '339'),('location-341', '340', '340'),('location-342', '341', '341'),('location-343', '342', '342'),('location-344', '343', '343'),('location-345', '344', '344'),('location-346', '345', '345'),('location-347', '346', '346'),('location-348', '347', '347'),('location-349', '348', '348'),('location-350', '349', '349'),('location-351', '350', '350'),('location-352', '351', '351'),('location-353', '352', '352'),('location-354', '353', '353'),('location-355', '354', '354'),('location-356', '355', '355'),('location-357', '356', '356'),('location-358', '357', '357'),('location-359', '358', '358'),('location-360', '359', '359'),('location-361', '360', '360'),('location-362', '361', '361'),('location-363', '362', '362'),('location-364', '363', '363'),('location-365', '364', '364'),('location-366', '365', '365'),('location-367', '366', '366'),('location-368', '367', '367'),('location-369', '368', '368'),('location-370', '369', '369'),('location-371', '370', '370'),('location-372', '371', '371'),('location-373', '372', '372'),('location-374', '373', '373'),('location-375', '374', '374'),('location-376', '375', '375'),('location-377', '376', '376'),('location-378', '377', '377'),('location-379', '378', '378'),('location-380', '379', '379'),('location-381', '380', '380'),('location-382', '381', '381'),('location-383', '382', '382'),('location-384', '383', '383'),('location-385', '384', '384'),('location-386', '385', '385'),('location-387', '386', '386'),('location-388', '387', '387'),('location-389', '388', '388'),('location-390', '389', '389'),('location-391', '390', '390'),('location-392', '391', '391'),('location-393', '392', '392'),('location-394', '393', '393'),('location-395', '394', '394'),('location-396', '395', '395'),('location-397', '396', '396'),('location-398', '397', '397'),('location-399', '398', '398'),('location-400', '399', '399'),('location-401', '400', '400'),('location-402', '401', '401'),('location-403', '402', '402'),('location-404', '403', '403'),('location-405', '404', '404'),('location-406', '405', '405'),('location-407', '406', '406'),('location-408', '407', '407'),('location-409', '408', '408'),('location-410', '409', '409'),('location-411', '410', '410'),('location-412', '411', '411'),('location-413', '412', '412'),('location-414', '413', '413'),('location-415', '414', '414'),('location-416', '415', '415'),('location-417', '416', '416'),('location-418', '417', '417'),('location-419', '418', '418'),('location-420', '419', '419'),('location-421', '420', '420'),('location-422', '421', '421'),('location-423', '422', '422'),('location-424', '423', '423'),('location-425', '424', '424'),('location-426', '425', '425'),('location-427', '426', '426'),('location-428', '427', '427'),('location-429', '428', '428'),('location-430', '429', '429'),('location-431', '430', '430'),('location-432', '431', '431'),('location-433', '432', '432'),('location-434', '433', '433'),('location-435', '434', '434'),('location-436', '435', '435'),('location-437', '436', '436'),('location-438', '437', '437'),('location-439', '438', '438'),('location-440', '439', '439'),('location-441', '440', '440'),('location-442', '441', '441'),('location-443', '442', '442'),('location-444', '443', '443'),('location-445', '444', '444'),('location-446', '445', '445'),('location-447', '446', '446'),('location-448', '447', '447'),('location-449', '448', '448'),('location-450', '449', '449'),('location-451', '450', '450'),('location-452', '451', '451'),('location-453', '452', '452'),('location-454', '453', '453'),('location-455', '454', '454'),('location-456', '455', '455'),('location-457', '456', '456'),('location-458', '457', '457'),('location-459', '458', '458'),('location-460', '459', '459'),('location-461', '460', '460'),('location-462', '461', '461'),('location-463', '462', '462'),('location-464', '463', '463'),('location-465', '464', '464'),('location-466', '465', '465'),('location-467', '466', '466'),('location-468', '467', '467'),('location-469', '468', '468'),('location-470', '469', '469'),('location-471', '470', '470'),('location-472', '471', '471'),('location-473', '472', '472'),('location-474', '473', '473'),('location-475', '474', '474'),('location-476', '475', '475'),('location-477', '476', '476'),('location-478', '477', '477'),('location-479', '478', '478'),('location-480', '479', '479'),('location-481', '480', '480'),('location-482', '481', '481'),('location-483', '482', '482'),('location-484', '483', '483'),('location-485', '484', '484'),('location-486', '485', '485'),('location-487', '486', '486'),('location-488', '487', '487'),('location-489', '488', '488'),('location-490', '489', '489'),('location-491', '490', '490'),('location-492', '491', '491'),('location-493', '492', '492'),('location-494', '493', '493'),('location-495', '494', '494'),('location-496', '495', '495'),('location-497', '496', '496'),('location-498', '497', '497'),('location-499', '498', '498'),('location-500', '499', '499'),('location-501', '500', '500'),('location-502', '501', '501'),('location-503', '502', '502'),('location-504', '503', '503'),('location-505', '504', '504'),('location-506', '505', '505'),('location-507', '506', '506'),('location-508', '507', '507'),('location-509', '508', '508'),('location-510', '509', '509'),('location-511', '510', '510'),('location-512', '511', '511'),('location-513', '512', '512'),('location-514', '513', '513'),('location-515', '514', '514'),('location-516', '515', '515'),('location-517', '516', '516'),('location-518', '517', '517'),('location-519', '518', '518'),('location-520', '519', '519'),('location-521', '520', '520'),('location-522', '521', '521'),('location-523', '522', '522'),('location-524', '523', '523'),('location-525', '524', '524'),('location-526', '525', '525'),('location-527', '526', '526'),('location-528', '527', '527'),('location-529', '528', '528'),('location-530', '529', '529'),('location-531', '530', '530'),('location-532', '531', '531'),('location-533', '532', '532'),('location-534', '533', '533'),('location-535', '534', '534'),('location-536', '535', '535'),('location-537', '536', '536'),('location-538', '537', '537'),('location-539', '538', '538'),('location-540', '539', '539'),('location-541', '540', '540'),('location-542', '541', '541'),('location-543', '542', '542'),('location-544', '543', '543'),('location-545', '544', '544'),('location-546', '545', '545'),('location-547', '546', '546'),('location-548', '547', '547'),('location-549', '548', '548'),('location-550', '549', '549'),('location-551', '550', '550'),('location-552', '551', '551'),('location-553', '552', '552'),('location-554', '553', '553'),('location-555', '554', '554'),('location-556', '555', '555'),('location-557', '556', '556'),('location-558', '557', '557'),('location-559', '558', '558'),('location-560', '559', '559'),('location-561', '560', '560'),('location-562', '561', '561'),('location-563', '562', '562'),('location-564', '563', '563'),('location-565', '564', '564'),('location-566', '565', '565'),('location-567', '566', '566'),('location-568', '567', '567'),('location-569', '568', '568'),('location-570', '569', '569'),('location-571', '570', '570'),('location-572', '571', '571'),('location-573', '572', '572'),('location-574', '573', '573'),('location-575', '574', '574'),('location-576', '575', '575'),('location-577', '576', '576'),('location-578', '577', '577'),('location-579', '578', '578'),('location-580', '579', '579'),('location-581', '580', '580'),('location-582', '581', '581'),('location-583', '582', '582'),('location-584', '583', '583'),('location-585', '584', '584'),('location-586', '585', '585'),('location-587', '586', '586'),('location-588', '587', '587'),('location-589', '588', '588'),('location-590', '589', '589'),('location-591', '590', '590'),('location-592', '591', '591'),('location-593', '592', '592'),('location-594', '593', '593'),('location-595', '594', '594'),('location-596', '595', '595'),('location-597', '596', '596'),('location-598', '597', '597'),('location-599', '598', '598'),('location-600', '599', '599'),('location-601', '600', '600');; @@ -25,7 +36,37 @@ UPDATE public_ip SET contract_id = 32 WHERE id = 'public-ip-2'; UPDATE public_ip SET contract_id = 6 WHERE id = 'public-ip-3'; UPDATE public_ip SET contract_id = 16 WHERE id = 'public-ip-1'; UPDATE public_ip SET contract_id = 37 WHERE id = 'public-ip-4'; -INSERT INTO node_gpu (node_twin_id, id, vendor, device, contract) VALUES (103, 'node-gpu-103-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(103, 'node-gpu-103-1', 'AMD', 'Radeon RX 6800 XT', 1),(103, 'node-gpu-103-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(104, 'node-gpu-104-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(104, 'node-gpu-104-1', 'AMD', 'Radeon RX 6800 XT', 0),(104, 'node-gpu-104-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0),(105, 'node-gpu-105-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(105, 'node-gpu-105-1', 'AMD', 'Radeon RX 6800 XT', 1),(105, 'node-gpu-105-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(106, 'node-gpu-106-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(106, 'node-gpu-106-1', 'AMD', 'Radeon RX 6800 XT', 0),(106, 'node-gpu-106-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0),(107, 'node-gpu-107-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(107, 'node-gpu-107-1', 'AMD', 'Radeon RX 6800 XT', 1),(107, 'node-gpu-107-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(108, 'node-gpu-108-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(108, 'node-gpu-108-1', 'AMD', 'Radeon RX 6800 XT', 0),(108, 'node-gpu-108-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0),(109, 'node-gpu-109-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(109, 'node-gpu-109-1', 'AMD', 'Radeon RX 6800 XT', 1),(109, 'node-gpu-109-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(110, 'node-gpu-110-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(110, 'node-gpu-110-1', 'AMD', 'Radeon RX 6800 XT', 0),(110, 'node-gpu-110-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0),(111, 'node-gpu-111-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1),(111, 'node-gpu-111-1', 'AMD', 'Radeon RX 6800 XT', 1),(111, 'node-gpu-111-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1),(112, 'node-gpu-112-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0),(112, 'node-gpu-112-1', 'AMD', 'Radeon RX 6800 XT', 0),(112, 'node-gpu-112-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0);; +INSERT INTO node_gpu (node_twin_id, id, vendor, device, contract, updated_at) VALUES +(103, 'node-gpu-103-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1, 1731429000), +(103, 'node-gpu-103-1', 'AMD', 'Radeon RX 6800 XT', 1, 1731429100), +(103, 'node-gpu-103-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1, 1731429200), +(104, 'node-gpu-104-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0, 1731429300), +(104, 'node-gpu-104-1', 'AMD', 'Radeon RX 6800 XT', 0, 1731429400), +(104, 'node-gpu-104-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0, 1731429500), +(105, 'node-gpu-105-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1, 1731429600), +(105, 'node-gpu-105-1', 'AMD', 'Radeon RX 6800 XT', 1, 1731429700), +(105, 'node-gpu-105-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1, 1731429800), +(106, 'node-gpu-106-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0, 1731429900), +(106, 'node-gpu-106-1', 'AMD', 'Radeon RX 6800 XT', 0, 1731430000), +(106, 'node-gpu-106-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0, 1731430100), +(107, 'node-gpu-107-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1, 1731430200), +(107, 'node-gpu-107-1', 'AMD', 'Radeon RX 6800 XT', 1, 1731430300), +(107, 'node-gpu-107-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1, 1731430400), +(108, 'node-gpu-108-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0, 1731430500), +(108, 'node-gpu-108-1', 'AMD', 'Radeon RX 6800 XT', 0, 1731430600), +(108, 'node-gpu-108-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0, 1731430700), +(109, 'node-gpu-109-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1, 1731430800), +(109, 'node-gpu-109-1', 'AMD', 'Radeon RX 6800 XT', 1, 1731430900), +(109, 'node-gpu-109-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1, 1731431000), +(110, 'node-gpu-110-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0, 1731429248), +(110, 'node-gpu-110-1', 'AMD', 'Radeon RX 6800 XT', 0, 1731429258), +(110, 'node-gpu-110-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0, 1731429268), +(111, 'node-gpu-111-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 1, 1731429278), +(111, 'node-gpu-111-1', 'AMD', 'Radeon RX 6800 XT', 1, 1731429288), +(111, 'node-gpu-111-2', 'Intel Corporation', 'Intel Iris Xe MAX', 1, 1731429298), +(112, 'node-gpu-112-0', 'NVIDIA Corporation', 'GeForce RTX 3080', 0, 1731429308), +(112, 'node-gpu-112-1', 'AMD', 'Radeon RX 6800 XT', 0, 1731429318), +(112, 'node-gpu-112-2', 'Intel Corporation', 'Intel Iris Xe MAX', 0, 1731429328);; INSERT INTO country (id, country_id, code, name, region, subregion, lat, long) VALUES ('country-2', 2, 'BG', 'Belgium', 'Europe', 'unknown', '0', '0'),('country-3', 3, 'US', 'United States', 'Americas', 'unknown', '0', '0'),('country-4', 4, 'EG', 'Egypt', 'Africa', 'unknown', '0', '0'),('country-5', 5, 'UK', 'United Kingdom', 'Europe', 'unknown', '0', '0');; INSERT INTO public.pricing_policy ( From d154820400da44afee1a2d94271ca0745f6eab86 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Wed, 13 Nov 2024 13:05:35 +0200 Subject: [PATCH 06/10] fix: linting problems Signed-off-by: nabil salah --- .../explorer/db/tests/db_getters_test.go | 80 +++++++++---------- .../db/tests/db_indexer_upserters_test.go | 39 +++++---- .../db/tests/db_indexer_utils_test.go | 5 +- .../internal/explorer/db/tests/db_test.go | 9 +-- 4 files changed, 61 insertions(+), 72 deletions(-) diff --git a/grid-proxy/internal/explorer/db/tests/db_getters_test.go b/grid-proxy/internal/explorer/db/tests/db_getters_test.go index 1c70583da..8964572fd 100644 --- a/grid-proxy/internal/explorer/db/tests/db_getters_test.go +++ b/grid-proxy/internal/explorer/db/tests/db_getters_test.go @@ -12,8 +12,8 @@ import ( // TestPostgresDatabase_GetNode tests the GetNode function. func TestPostgresDatabase_GetNode(t *testing.T) { - - dbTest, err := db.NewPostgresDatabase("localhost", 5432,"postgres","mypassword","testdb", 80, logger.Error) + + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb %e", err) @@ -48,7 +48,7 @@ func TestPostgresDatabase_GetNode(t *testing.T) { // TestPostgresDatabase_GetFarm tests the GetFarm function. func TestPostgresDatabase_GetFarm(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -93,10 +93,9 @@ func TestPostgresDatabase_GetFarm(t *testing.T) { }) } - // TestPostgresDatabase_GetNodes tests the GetNodes function. func TestPostgresDatabase_GetNodes(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -132,7 +131,7 @@ func TestPostgresDatabase_GetNodes(t *testing.T) { _, count, err := dbTest.GetNodes(ctx, filter, limit) assert.NoError(t, err) - assert.Equal(t, uint(3), count ) + assert.Equal(t, uint(3), count) }) t.Run("Filter by farm id and add limit to 2 nodes", func(t *testing.T) { @@ -141,8 +140,8 @@ func TestPostgresDatabase_GetNodes(t *testing.T) { FarmIDs: farmId, } limit := types.Limit{ - Size: 2, - Page: 1, + Size: 2, + Page: 1, } nodes, _, err := dbTest.GetNodes(ctx, filter, limit) @@ -157,8 +156,8 @@ func TestPostgresDatabase_GetNodes(t *testing.T) { Country: &country, } limit := types.Limit{ - Size: 999999999999, - Page: 1, + Size: 999999999999, + Page: 1, } nodes, _, err := dbTest.GetNodes(ctx, filter, limit) @@ -170,10 +169,9 @@ func TestPostgresDatabase_GetNodes(t *testing.T) { }) } - // TestPostgresDatabase_GetNodes tests the GetFarms function. func TestPostgresDatabase_GetFarms(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -191,7 +189,7 @@ func TestPostgresDatabase_GetFarms(t *testing.T) { nodes, count, err := dbTest.GetFarms(ctx, filter, limit) assert.NoError(t, err) - assert.Equal(t, uint(100), count ) + assert.Equal(t, uint(100), count) assert.NotEmpty(t, nodes) }) @@ -199,7 +197,7 @@ func TestPostgresDatabase_GetFarms(t *testing.T) { // TestPostgresDatabase_GetTwins tests the GetTwins function. func TestPostgresDatabase_GetTwins(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -217,7 +215,7 @@ func TestPostgresDatabase_GetTwins(t *testing.T) { _, count, err := dbTest.GetTwins(ctx, filter, limit) assert.NoError(t, err) - assert.Equal(t, uint(1300), count ) + assert.Equal(t, uint(1300), count) }) t.Run("Retrieve twin with twin id", func(t *testing.T) { @@ -242,10 +240,9 @@ func TestPostgresDatabase_GetTwins(t *testing.T) { }) } - // TestPostgresDatabase_GetContracts tests the GetContracts function. func TestPostgresDatabase_GetContracts(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -263,7 +260,7 @@ func TestPostgresDatabase_GetContracts(t *testing.T) { _, count, err := dbTest.GetContracts(ctx, filter, limit) assert.NoError(t, err) - assert.Equal(t, uint(61), count ) + assert.Equal(t, uint(61), count) }) t.Run("Retrieve contract with id", func(t *testing.T) { @@ -280,7 +277,7 @@ func TestPostgresDatabase_GetContracts(t *testing.T) { contract, count, err := dbTest.GetContracts(ctx, filter, limit) assert.NoError(t, err) - assert.Equal(t, uint(1), count ) + assert.Equal(t, uint(1), count) assert.Equal(t, uint(37), contract[0].ContractID) assert.Equal(t, uint(303), contract[0].NodeID) assert.Equal(t, uint(1), contract[0].NumberOfPublicIps) @@ -300,7 +297,7 @@ func TestPostgresDatabase_GetContracts(t *testing.T) { contract, count, err := dbTest.GetContracts(ctx, filter, limit) assert.NoError(t, err) - assert.Equal(t, uint(1), count ) + assert.Equal(t, uint(1), count) assert.Equal(t, uint(52), contract[0].ContractID) assert.Equal(t, "401c4f28-4a84-47ff-9a91-50426305db00", contract[0].Name) }) @@ -319,7 +316,7 @@ func TestPostgresDatabase_GetContracts(t *testing.T) { contract, count, err := dbTest.GetContracts(ctx, filter, limit) assert.NoError(t, err) - assert.Equal(t, uint(1), count ) + assert.Equal(t, uint(1), count) assert.Equal(t, uint(52), contract[0].ContractID) assert.Equal(t, "401c4f28-4a84-47ff-9a91-50426305db00", contract[0].Name) }) @@ -341,16 +338,15 @@ func TestPostgresDatabase_GetContracts(t *testing.T) { //name contracts + node contracts assert.Equal(t, uint(29), count) for _, contract := range contracts { - assert.Equal(t, contractType[0] ,contract.State) + assert.Equal(t, contractType[0], contract.State) } }) } - // TestPostgresDatabase_GetContract tests the GetContract function. func TestPostgresDatabase_GetContract(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -368,7 +364,6 @@ func TestPostgresDatabase_GetContract(t *testing.T) { assert.Equal(t, uint(1), contract.NumberOfPublicIps) }) - t.Run("Retrieve contract with id", func(t *testing.T) { id := uint32(52) contract, err := dbTest.GetContract(ctx, id) @@ -385,15 +380,14 @@ func TestPostgresDatabase_GetContract(t *testing.T) { assert.ErrorIs(t, err, db.ErrContractNotFound) assert.Equal(t, db.DBContract{}, contract) - + }) } - // TestPostgresDatabase_GetContractBills tests the GetContractBills function. func TestPostgresDatabase_GetContractBills(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -407,12 +401,12 @@ func TestPostgresDatabase_GetContractBills(t *testing.T) { Page: 1, RetCount: true, } - contractBills, count, err := dbTest.GetContractBills(ctx, id,limit) + contractBills, count, err := dbTest.GetContractBills(ctx, id, limit) assert.NoError(t, err) assert.NotNil(t, contractBills) assert.Equal(t, uint(9), count) - //assert.Equal(t, uint64(37), contractBills[0].ContractId) + //assert.Equal(t, uint64(37), contractBills[0].ContractId) }) t.Run("Retrieve contract bills with id not found", func(t *testing.T) { @@ -422,7 +416,7 @@ func TestPostgresDatabase_GetContractBills(t *testing.T) { Page: 1, RetCount: true, } - _, count, err := dbTest.GetContractBills(ctx, id,limit) + _, count, err := dbTest.GetContractBills(ctx, id, limit) assert.NoError(t, err) assert.Equal(t, uint(0), count) @@ -432,7 +426,7 @@ func TestPostgresDatabase_GetContractBills(t *testing.T) { // TestPostgresDatabase_GetContractsLatestBillReports tests the GetContractsLatestBillReports function. func TestPostgresDatabase_GetContractsLatestBillReports(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -446,14 +440,14 @@ func TestPostgresDatabase_GetContractsLatestBillReports(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, contractBills) assert.Equal(t, 2, len(contractBills)) - //assert.Equal(t, uint64(37), contractBills[0].ContractId) + //assert.Equal(t, uint64(37), contractBills[0].ContractId) }) } // TestPostgresDatabase_GetContractsTotalBilledAmount tests the GetContractsTotalBilledAmount function. func TestPostgresDatabase_GetContractsTotalBilledAmount(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -465,8 +459,8 @@ func TestPostgresDatabase_GetContractsTotalBilledAmount(t *testing.T) { totalBills, err := dbTest.GetContractsTotalBilledAmount(ctx, id) assert.NoError(t, err) - assert.Equal(t, uint64(825687),totalBills) - //assert.Equal(t, uint64(37), contractBills[0].ContractId) + assert.Equal(t, uint64(825687), totalBills) + //assert.Equal(t, uint64(37), contractBills[0].ContractId) }) t.Run("Retrieve contract bills with multiple ids", func(t *testing.T) { @@ -474,14 +468,14 @@ func TestPostgresDatabase_GetContractsTotalBilledAmount(t *testing.T) { totalBills, err := dbTest.GetContractsTotalBilledAmount(ctx, id) assert.NoError(t, err) - assert.Equal(t, uint64(176890 + 825687),totalBills) + assert.Equal(t, uint64(176890+825687), totalBills) }) } // TestPostgresDatabase_GetPublicIps tests the GetPublicIps function. func TestPostgresDatabase_GetPublicIps(t *testing.T) { - + dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) @@ -512,10 +506,10 @@ func TestPostgresDatabase_GetPublicIps(t *testing.T) { FarmIDs: farmIds, } limit := types.Limit{ - Size: 999999999999, - Page: 1, - RetCount: true, - SortBy: "contract_id", + Size: 999999999999, + Page: 1, + RetCount: true, + SortBy: "contract_id", SortOrder: types.SortOrderAsc, } publicIp, count, err := dbTest.GetPublicIps(ctx, filter, limit) @@ -528,4 +522,4 @@ func TestPostgresDatabase_GetPublicIps(t *testing.T) { assert.Equal(t, uint64(16), publicIp[1].ContractID) }) -} \ No newline at end of file +} diff --git a/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go b/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go index cbba1d236..8e266064b 100644 --- a/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go +++ b/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go @@ -55,12 +55,12 @@ func TestPostgresDatabase_UpsertNodeHealth(t *testing.T) { } countOfHealthyNodeIds, err := dbTest.GetHealthyNodeTwinIds(ctx) - assert.NoError(t,err) + assert.NoError(t, err) err = dbTest.UpsertNodeHealth(ctx, healthReports) assert.NoError(t, err) currCountOfHealthyNodeIds, err := dbTest.GetHealthyNodeTwinIds(ctx) - assert.NoError(t,err) + assert.NoError(t, err) assert.Equal(t, len(countOfHealthyNodeIds)+1, len(currCountOfHealthyNodeIds)) }) @@ -76,50 +76,50 @@ func TestPostgresDatabase_UpsertNodeDmi(t *testing.T) { t.Run("Upsert Node DMI", func(t *testing.T) { dmis := []types.Dmi{ - { - NodeTwinId: 105, + { + NodeTwinId: 105, BIOS: types.BIOS{ - Vendor: "American Megatrends", + Vendor: "American Megatrends", Version: "v1.0", - }, + }, Baseboard: types.Baseboard{ Manufacturer: "ASUS", - ProductName: "Prime Z390-A", - }, + ProductName: "Prime Z390-A", + }, Processor: []types.Processor{ { - Version: "Intel Core i7-9700K", + Version: "Intel Core i7-9700K", ThreadCount: "8", }, - }, + }, Memory: []types.Memory{ { Manufacturer: "Kingston", - Type: "DDR4 16GB", + Type: "DDR4 16GB", }, - }, + }, UpdatedAt: time.Now().Unix(), }, - { - NodeTwinId: 106, + { + NodeTwinId: 106, BIOS: types.BIOS{ - Vendor: "Phoenix Technologies", + Vendor: "Phoenix Technologies", Version: "v2.0", }, Baseboard: types.Baseboard{ Manufacturer: "Gigabyte", - ProductName: "B450 AORUS PRO WIFI", + ProductName: "B450 AORUS PRO WIFI", }, Processor: []types.Processor{ { - Version: "AMD Ryzen 7 3700X", + Version: "AMD Ryzen 7 3700X", ThreadCount: "16", }, }, Memory: []types.Memory{ { Manufacturer: "Corsair", - Type: "DDR4 32GB", + Type: "DDR4 32GB", }, }, UpdatedAt: time.Now().Unix(), @@ -193,7 +193,6 @@ func TestPostgresDatabase_UpsertNodeWorkloads(t *testing.T) { }) } - // TestPostgresDatabase_GetLastUpsertsTimestamp tests the GetLastUpsertsTimestamp function. func TestPostgresDatabase_GetLastUpsertsTimestamp(t *testing.T) { dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) @@ -214,4 +213,4 @@ func TestPostgresDatabase_GetLastUpsertsTimestamp(t *testing.T) { assert.NoError(t, err) assert.Equal(t, currTime, state.Workloads.UpdatedAt) }) -} \ No newline at end of file +} diff --git a/grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go b/grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go index ce1d174d5..9d55f8cd3 100644 --- a/grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go +++ b/grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go @@ -40,7 +40,7 @@ func TestPostgresDatabase_GetLastNodeTwinID(t *testing.T) { t.Run("Get last node twin ID", func(t *testing.T) { lastTwinID, err := dbTest.GetLastNodeTwinID(ctx) - + assert.NoError(t, err) assert.Equal(t, uint32(702), lastTwinID) }) @@ -66,7 +66,6 @@ func TestPostgresDatabase_GetNodeTwinIDsAfter(t *testing.T) { }) } - // TestPostgresDatabase_GetHealthyNodeTwinIds tests the GetHealthyNodeTwinIds function. func TestPostgresDatabase_GetHealthyNodeTwinIds(t *testing.T) { dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) @@ -90,4 +89,4 @@ func TestPostgresDatabase_GetHealthyNodeTwinIds(t *testing.T) { assert.Contains(t, nodeTwinIDs, uint32(112)) assert.Contains(t, nodeTwinIDs, uint32(113)) }) -} \ No newline at end of file +} diff --git a/grid-proxy/internal/explorer/db/tests/db_test.go b/grid-proxy/internal/explorer/db/tests/db_test.go index 8436e3791..f17db58ab 100644 --- a/grid-proxy/internal/explorer/db/tests/db_test.go +++ b/grid-proxy/internal/explorer/db/tests/db_test.go @@ -8,10 +8,8 @@ import ( "database/sql" ) +func TestMain(m *testing.M) { - -func TestMain(m *testing.M){ - // Connect to the default `postgres` database to create `testdb` initialDb, err := sql.Open("postgres", "host=localhost user=postgres port=5432 password=mypassword sslmode=disable") if err != nil { @@ -53,7 +51,7 @@ func TestMain(m *testing.M){ if err != nil { log.Fatalf("%e", err) } - + // Load and execute schema setup, err := os.ReadFile("../setup.sql") if err != nil { @@ -75,6 +73,5 @@ func TestMain(m *testing.M){ } code := m.Run() os.Exit(code) - -} +} From 467e6705b9b25f510204501919860b22d2caa3c2 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Wed, 13 Nov 2024 19:28:43 +0200 Subject: [PATCH 07/10] fix: add more verification on the indexer db queries and fix: makefile to run db tests with the current unit tests Signed-off-by: nabil salah --- grid-proxy/Makefile | 3 +- .../db/{tests => }/db_getters_test.go | 35 ++- .../db/{tests => }/db_indexer_utils_test.go | 25 +- .../db/{tests => }/fixtures/testdata.sql | 0 .../db/{tests/db_test.go => main_test.go} | 14 +- .../db/tests/db_indexer_upserters_test.go | 216 ------------------ 6 files changed, 46 insertions(+), 247 deletions(-) rename grid-proxy/internal/explorer/db/{tests => }/db_getters_test.go (89%) rename grid-proxy/internal/explorer/db/{tests => }/db_indexer_utils_test.go (71%) rename grid-proxy/internal/explorer/db/{tests => }/fixtures/testdata.sql (100%) rename grid-proxy/internal/explorer/db/{tests/db_test.go => main_test.go} (81%) delete mode 100644 grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go diff --git a/grid-proxy/Makefile b/grid-proxy/Makefile index f3da93429..f11d533dd 100644 --- a/grid-proxy/Makefile +++ b/grid-proxy/Makefile @@ -93,7 +93,8 @@ test-query: ## Run specific test query (Args: `t=TestName`). -run $(t) test-unit: ## Run only unit tests - @go test -v ./pkg/client + @go test -v ./pkg/client &&\ + go test ./internal/explorer/db/tests/ -timeout 0 test-all: test-unit test-queries ## Run all unit/queries tests diff --git a/grid-proxy/internal/explorer/db/tests/db_getters_test.go b/grid-proxy/internal/explorer/db/db_getters_test.go similarity index 89% rename from grid-proxy/internal/explorer/db/tests/db_getters_test.go rename to grid-proxy/internal/explorer/db/db_getters_test.go index 8964572fd..392118d7b 100644 --- a/grid-proxy/internal/explorer/db/tests/db_getters_test.go +++ b/grid-proxy/internal/explorer/db/db_getters_test.go @@ -5,7 +5,6 @@ import ( "testing" "github.com/stretchr/testify/assert" - "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/internal/explorer/db" "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" "gorm.io/gorm/logger" ) @@ -13,7 +12,7 @@ import ( // TestPostgresDatabase_GetNode tests the GetNode function. func TestPostgresDatabase_GetNode(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb %e", err) @@ -41,15 +40,15 @@ func TestPostgresDatabase_GetNode(t *testing.T) { node, err := dbTest.GetNode(ctx, nonExistentNodeID) - assert.ErrorIs(t, err, db.ErrNodeNotFound) - assert.Equal(t, db.Node{}, node) + assert.ErrorIs(t, err, ErrNodeNotFound) + assert.Equal(t, Node{}, node) }) } // TestPostgresDatabase_GetFarm tests the GetFarm function. func TestPostgresDatabase_GetFarm(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -88,15 +87,15 @@ func TestPostgresDatabase_GetFarm(t *testing.T) { farm, _ := dbTest.GetFarm(ctx, nonExistentFarmID) - //assert.ErrorIs(t, err, db.ErrFarmNotFound) - assert.Equal(t, db.Farm{}, farm) + //assert.ErrorIs(t, err, ErrFarmNotFound) + assert.Equal(t, Farm{}, farm) }) } // TestPostgresDatabase_GetNodes tests the GetNodes function. func TestPostgresDatabase_GetNodes(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -172,7 +171,7 @@ func TestPostgresDatabase_GetNodes(t *testing.T) { // TestPostgresDatabase_GetNodes tests the GetFarms function. func TestPostgresDatabase_GetFarms(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -198,7 +197,7 @@ func TestPostgresDatabase_GetFarms(t *testing.T) { // TestPostgresDatabase_GetTwins tests the GetTwins function. func TestPostgresDatabase_GetTwins(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -243,7 +242,7 @@ func TestPostgresDatabase_GetTwins(t *testing.T) { // TestPostgresDatabase_GetContracts tests the GetContracts function. func TestPostgresDatabase_GetContracts(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -347,7 +346,7 @@ func TestPostgresDatabase_GetContracts(t *testing.T) { // TestPostgresDatabase_GetContract tests the GetContract function. func TestPostgresDatabase_GetContract(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -378,8 +377,8 @@ func TestPostgresDatabase_GetContract(t *testing.T) { id := uint32(999) contract, err := dbTest.GetContract(ctx, id) - assert.ErrorIs(t, err, db.ErrContractNotFound) - assert.Equal(t, db.DBContract{}, contract) + assert.ErrorIs(t, err, ErrContractNotFound) + assert.Equal(t, DBContract{}, contract) }) @@ -388,7 +387,7 @@ func TestPostgresDatabase_GetContract(t *testing.T) { // TestPostgresDatabase_GetContractBills tests the GetContractBills function. func TestPostgresDatabase_GetContractBills(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -427,7 +426,7 @@ func TestPostgresDatabase_GetContractBills(t *testing.T) { // TestPostgresDatabase_GetContractsLatestBillReports tests the GetContractsLatestBillReports function. func TestPostgresDatabase_GetContractsLatestBillReports(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -448,7 +447,7 @@ func TestPostgresDatabase_GetContractsLatestBillReports(t *testing.T) { // TestPostgresDatabase_GetContractsTotalBilledAmount tests the GetContractsTotalBilledAmount function. func TestPostgresDatabase_GetContractsTotalBilledAmount(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -476,7 +475,7 @@ func TestPostgresDatabase_GetContractsTotalBilledAmount(t *testing.T) { // TestPostgresDatabase_GetPublicIps tests the GetPublicIps function. func TestPostgresDatabase_GetPublicIps(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } diff --git a/grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go b/grid-proxy/internal/explorer/db/db_indexer_utils_test.go similarity index 71% rename from grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go rename to grid-proxy/internal/explorer/db/db_indexer_utils_test.go index 9d55f8cd3..9efc490f3 100644 --- a/grid-proxy/internal/explorer/db/tests/db_indexer_utils_test.go +++ b/grid-proxy/internal/explorer/db/db_indexer_utils_test.go @@ -6,14 +6,13 @@ import ( "time" "github.com/stretchr/testify/assert" - "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/internal/explorer/db" "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" "gorm.io/gorm/logger" ) // TestPostgresDatabase_DeleteOldGpus tests the DeleteOldGpus function. func TestPostgresDatabase_DeleteOldGpus(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -23,16 +22,28 @@ func TestPostgresDatabase_DeleteOldGpus(t *testing.T) { nodeTwinIDs := []uint32{103} expiration := int64(1731429101) - err := dbTest.DeleteOldGpus(ctx, nodeTwinIDs, expiration) + count := 0 + err := dbTest.gormDB.Raw("SELECT COUNT(*) FROM node_gpu WHERE node_twin_id = ?", 103).Scan(&count).Error + if err != nil { + t.Skipf("error counting GPUs: %v", err) + } + err = dbTest.DeleteOldGpus(ctx, nodeTwinIDs, expiration) assert.NoError(t, err) - //todo verify whether these gpus are really deleted or not + curCount := 0 + err = dbTest.gormDB.Raw("SELECT COUNT(*) FROM node_gpu WHERE node_twin_id = ?", 103).Scan(&curCount).Error + + if err != nil { + t.Skipf("error counting GPUs: %v", err) + } + + assert.Less(t, curCount, count) }) } // TestPostgresDatabase_GetLastNodeTwinID tests the GetLastNodeTwinID function. func TestPostgresDatabase_GetLastNodeTwinID(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -48,7 +59,7 @@ func TestPostgresDatabase_GetLastNodeTwinID(t *testing.T) { // TestPostgresDatabase_GetNodeTwinIDsAfter tests the GetNodeTwinIDsAfter function. func TestPostgresDatabase_GetNodeTwinIDsAfter(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } @@ -68,7 +79,7 @@ func TestPostgresDatabase_GetNodeTwinIDsAfter(t *testing.T) { // TestPostgresDatabase_GetHealthyNodeTwinIds tests the GetHealthyNodeTwinIds function. func TestPostgresDatabase_GetHealthyNodeTwinIds(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) if err != nil { t.Skipf("Can't connect to testdb: %v", err) } diff --git a/grid-proxy/internal/explorer/db/tests/fixtures/testdata.sql b/grid-proxy/internal/explorer/db/fixtures/testdata.sql similarity index 100% rename from grid-proxy/internal/explorer/db/tests/fixtures/testdata.sql rename to grid-proxy/internal/explorer/db/fixtures/testdata.sql diff --git a/grid-proxy/internal/explorer/db/tests/db_test.go b/grid-proxy/internal/explorer/db/main_test.go similarity index 81% rename from grid-proxy/internal/explorer/db/tests/db_test.go rename to grid-proxy/internal/explorer/db/main_test.go index f17db58ab..d3d742331 100644 --- a/grid-proxy/internal/explorer/db/tests/db_test.go +++ b/grid-proxy/internal/explorer/db/main_test.go @@ -6,25 +6,27 @@ import ( "testing" "database/sql" + + "gorm.io/gorm/logger" ) func TestMain(m *testing.M) { // Connect to the default `postgres` database to create `testdb` - initialDb, err := sql.Open("postgres", "host=localhost user=postgres port=5432 password=mypassword sslmode=disable") + initialDb, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "postgres", 80, logger.Error) if err != nil { log.Fatalf("could not connect to default database: %v", err) } defer initialDb.Close() // drop the `testdb` database - _, err = initialDb.Exec(`DROP DATABASE IF EXISTS testdb;`) + err = initialDb.gormDB.Exec(`DROP DATABASE IF EXISTS testdb;`).Error if err != nil { log.Fatalf("could not create testdb database: %v", err) } // Create the `testdb` database - _, err = initialDb.Exec(`CREATE DATABASE testdb;`) + err = initialDb.gormDB.Exec(`CREATE DATABASE testdb;`).Error if err != nil { log.Fatalf("could not create testdb database: %v", err) } @@ -37,7 +39,7 @@ func TestMain(m *testing.M) { defer testDb.Close() // Load and execute schema - schema, err := os.ReadFile("../../../../tools/db/schema.sql") + schema, err := os.ReadFile("../../../tools/db/schema.sql") if err != nil { log.Fatalf("could not load schema sql file: %v", err) } @@ -53,7 +55,7 @@ func TestMain(m *testing.M) { } // Load and execute schema - setup, err := os.ReadFile("../setup.sql") + setup, err := os.ReadFile("./setup.sql") if err != nil { log.Fatalf("could not load setup sql file: %v", err) } @@ -75,3 +77,5 @@ func TestMain(m *testing.M) { os.Exit(code) } + + diff --git a/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go b/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go deleted file mode 100644 index 8e266064b..000000000 --- a/grid-proxy/internal/explorer/db/tests/db_indexer_upserters_test.go +++ /dev/null @@ -1,216 +0,0 @@ -package db - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/internal/explorer/db" - "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" - "gorm.io/gorm/logger" -) - -// TestPostgresDatabase_UpsertNodesGPU tests the UpsertNodesGPU function. -func TestPostgresDatabase_UpsertNodesGPU(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) - if err != nil { - t.Skipf("Can't connect to testdb: %v", err) - } - ctx := context.Background() - - t.Run("Upsert Nodes GPU", func(t *testing.T) { - //take care not to interfere with other tests like (TestPostgresDatabase_DeleteOldGpus) - gpus := []types.NodeGPU{ - {ID: "node-gpu-104-3", NodeTwinID: 104, Vendor: "NVIDIA", Device: "RTX 3090", Contract: 1, UpdatedAt: time.Now().Unix()}, - {ID: "node-gpu-102-0", NodeTwinID: 102, Vendor: "AMD", Device: "RX 6800", Contract: 1, UpdatedAt: time.Now().Unix()}, - } - err := dbTest.UpsertNodesGPU(ctx, gpus) - assert.NoError(t, err) - // TODO check number of gpus for the nodes after finnish (currently node gpu doesn't map right) - // res, err := dbTest.GetNode(ctx, uint32(104)) - // assert.NoError(t, err) - // assert.Equal(t, len(res.Gpus), 3) - - // res, err = dbTest.GetNode(ctx, uint32(102)) - // assert.NoError(t, err) - // assert.Equal(t, len(res.Gpus), 1) - - }) -} - -// TestPostgresDatabase_UpsertNodeHealth tests the UpsertNodeHealth function. -func TestPostgresDatabase_UpsertNodeHealth(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) - if err != nil { - t.Skipf("Can't connect to testdb: %v", err) - } - ctx := context.Background() - - t.Run("Upsert Node Health", func(t *testing.T) { - healthReports := []types.HealthReport{ - //two ids that aren't in the health table - {NodeTwinId: 115, Healthy: true, UpdatedAt: time.Now().Unix()}, - {NodeTwinId: 114, Healthy: false, UpdatedAt: time.Now().Unix()}, - } - - countOfHealthyNodeIds, err := dbTest.GetHealthyNodeTwinIds(ctx) - assert.NoError(t, err) - err = dbTest.UpsertNodeHealth(ctx, healthReports) - assert.NoError(t, err) - - currCountOfHealthyNodeIds, err := dbTest.GetHealthyNodeTwinIds(ctx) - assert.NoError(t, err) - - assert.Equal(t, len(countOfHealthyNodeIds)+1, len(currCountOfHealthyNodeIds)) - }) -} - -// TestPostgresDatabase_UpsertNodeDmi tests the UpsertNodeDmi function. -func TestPostgresDatabase_UpsertNodeDmi(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) - if err != nil { - t.Skipf("Can't connect to testdb: %v", err) - } - ctx := context.Background() - - t.Run("Upsert Node DMI", func(t *testing.T) { - dmis := []types.Dmi{ - { - NodeTwinId: 105, - BIOS: types.BIOS{ - Vendor: "American Megatrends", - Version: "v1.0", - }, - Baseboard: types.Baseboard{ - Manufacturer: "ASUS", - ProductName: "Prime Z390-A", - }, - Processor: []types.Processor{ - { - Version: "Intel Core i7-9700K", - ThreadCount: "8", - }, - }, - Memory: []types.Memory{ - { - Manufacturer: "Kingston", - Type: "DDR4 16GB", - }, - }, - UpdatedAt: time.Now().Unix(), - }, - { - NodeTwinId: 106, - BIOS: types.BIOS{ - Vendor: "Phoenix Technologies", - Version: "v2.0", - }, - Baseboard: types.Baseboard{ - Manufacturer: "Gigabyte", - ProductName: "B450 AORUS PRO WIFI", - }, - Processor: []types.Processor{ - { - Version: "AMD Ryzen 7 3700X", - ThreadCount: "16", - }, - }, - Memory: []types.Memory{ - { - Manufacturer: "Corsair", - Type: "DDR4 32GB", - }, - }, - UpdatedAt: time.Now().Unix(), - }, - } - - err := dbTest.UpsertNodeDmi(ctx, dmis) - assert.NoError(t, err) - //todo verify whether these Dmi's are really upserted right or not - - }) -} - -// TestPostgresDatabase_UpsertNetworkSpeed tests the UpsertNetworkSpeed function. -func TestPostgresDatabase_UpsertNetworkSpeed(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) - if err != nil { - t.Skipf("Can't connect to testdb: %v", err) - } - ctx := context.Background() - - t.Run("Upsert Network Speed", func(t *testing.T) { - speeds := []types.Speed{ - {NodeTwinId: 104, Download: 100.5, Upload: 50.2, UpdatedAt: time.Now().Unix()}, - {NodeTwinId: 105, Download: 150.8, Upload: 75.1, UpdatedAt: time.Now().Unix()}, - } - - err := dbTest.UpsertNetworkSpeed(ctx, speeds) - assert.NoError(t, err) - //todo verify whether these speed's are really upserted right or not - }) -} - -// TestPostgresDatabase_UpsertNodeIpv6Report tests the UpsertNodeIpv6Report function. -func TestPostgresDatabase_UpsertNodeIpv6Report(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) - if err != nil { - t.Skipf("Can't connect to testdb: %v", err) - } - ctx := context.Background() - - t.Run("Upsert Node IPv6 Report", func(t *testing.T) { - ips := []types.HasIpv6{ - {NodeTwinId: 104, HasIpv6: true, UpdatedAt: time.Now().Unix()}, - {NodeTwinId: 105, HasIpv6: false, UpdatedAt: time.Now().Unix()}, - } - - err := dbTest.UpsertNodeIpv6Report(ctx, ips) - assert.NoError(t, err) - //todo verify whether these HasIpv6's are really upserted right or not - }) -} - -// TestPostgresDatabase_UpsertNodeWorkloads tests the UpsertNodeWorkloads function. -func TestPostgresDatabase_UpsertNodeWorkloads(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) - if err != nil { - t.Skipf("Can't connect to testdb: %v", err) - } - ctx := context.Background() - - t.Run("Upsert Node Workloads", func(t *testing.T) { - workloads := []types.NodesWorkloads{ - {NodeTwinId: 101, WorkloadsNumber: 5, UpdatedAt: time.Now().Unix()}, - {NodeTwinId: 102, WorkloadsNumber: 3, UpdatedAt: time.Now().Unix()}, - } - - err := dbTest.UpsertNodeWorkloads(ctx, workloads) - assert.NoError(t, err) - //todo verify whether these NodesWorkloads's are really upserted right or not - }) -} - -// TestPostgresDatabase_GetLastUpsertsTimestamp tests the GetLastUpsertsTimestamp function. -func TestPostgresDatabase_GetLastUpsertsTimestamp(t *testing.T) { - dbTest, err := db.NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) - if err != nil { - t.Skipf("Can't connect to testdb: %v", err) - } - ctx := context.Background() - - t.Run("Upsert Node Workloads", func(t *testing.T) { - currTime := time.Now().Unix() - workloads := []types.NodesWorkloads{ - {NodeTwinId: 104, WorkloadsNumber: 5, UpdatedAt: currTime}, - } - err := dbTest.UpsertNodeWorkloads(ctx, workloads) - assert.NoError(t, err) - - state, err := dbTest.GetLastUpsertsTimestamp() - assert.NoError(t, err) - assert.Equal(t, currTime, state.Workloads.UpdatedAt) - }) -} From d90cef0aafeb1470ca8792c0189776f88022c825 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Wed, 13 Nov 2024 19:30:45 +0200 Subject: [PATCH 08/10] fix: linting problems Signed-off-by: nabil salah --- grid-proxy/Makefile | 2 +- .../explorer/db/db_indexer_upserters_test.go | 250 ++++++++++++++++++ .../explorer/db/db_indexer_utils_test.go | 2 +- grid-proxy/internal/explorer/db/main_test.go | 2 - 4 files changed, 252 insertions(+), 4 deletions(-) create mode 100644 grid-proxy/internal/explorer/db/db_indexer_upserters_test.go diff --git a/grid-proxy/Makefile b/grid-proxy/Makefile index f11d533dd..d5383e226 100644 --- a/grid-proxy/Makefile +++ b/grid-proxy/Makefile @@ -94,7 +94,7 @@ test-query: ## Run specific test query (Args: `t=TestName`). test-unit: ## Run only unit tests @go test -v ./pkg/client &&\ - go test ./internal/explorer/db/tests/ -timeout 0 + go test ./internal/explorer/db/ -timeout 0 test-all: test-unit test-queries ## Run all unit/queries tests diff --git a/grid-proxy/internal/explorer/db/db_indexer_upserters_test.go b/grid-proxy/internal/explorer/db/db_indexer_upserters_test.go new file mode 100644 index 000000000..5f18aeecc --- /dev/null +++ b/grid-proxy/internal/explorer/db/db_indexer_upserters_test.go @@ -0,0 +1,250 @@ +package db + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" + "gorm.io/gorm/logger" +) + +// TestPostgresDatabase_UpsertNodesGPU tests the UpsertNodesGPU function. +func TestPostgresDatabase_UpsertNodesGPU(t *testing.T) { + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Nodes GPU", func(t *testing.T) { + //take care not to interfere with other tests like (TestPostgresDatabase_DeleteOldGpus) + gpus := []types.NodeGPU{ + {ID: "node-gpu-104-3", NodeTwinID: 104, Vendor: "NVIDIA", Device: "RTX 3090", Contract: 1, UpdatedAt: time.Now().Unix()}, + {ID: "node-gpu-102-0", NodeTwinID: 102, Vendor: "AMD", Device: "RX 6800", Contract: 1, UpdatedAt: time.Now().Unix()}, + } + err := dbTest.UpsertNodesGPU(ctx, gpus) + assert.NoError(t, err) + // TODO check number of gpus for the nodes after finnish (currently node gpu doesn't map right) + // res, err := dbTest.GetNode(ctx, uint32(104)) + // assert.NoError(t, err) + // assert.Equal(t, len(res.Gpus), 3) + + // res, err = dbTest.GetNode(ctx, uint32(102)) + // assert.NoError(t, err) + // assert.Equal(t, len(res.Gpus), 1) + + }) +} + +// TestPostgresDatabase_UpsertNodeHealth tests the UpsertNodeHealth function. +func TestPostgresDatabase_UpsertNodeHealth(t *testing.T) { + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node Health", func(t *testing.T) { + healthReports := []types.HealthReport{ + //two ids that aren't in the health table + {NodeTwinId: 115, Healthy: true, UpdatedAt: time.Now().Unix()}, + {NodeTwinId: 114, Healthy: false, UpdatedAt: time.Now().Unix()}, + } + + countOfHealthyNodeIds, err := dbTest.GetHealthyNodeTwinIds(ctx) + assert.NoError(t, err) + err = dbTest.UpsertNodeHealth(ctx, healthReports) + assert.NoError(t, err) + + currCountOfHealthyNodeIds, err := dbTest.GetHealthyNodeTwinIds(ctx) + assert.NoError(t, err) + + assert.Equal(t, len(countOfHealthyNodeIds)+1, len(currCountOfHealthyNodeIds)) + }) +} + +// TestPostgresDatabase_UpsertNodeDmi tests the UpsertNodeDmi function. +func TestPostgresDatabase_UpsertNodeDmi(t *testing.T) { + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node DMI", func(t *testing.T) { + dmis := []types.Dmi{ + { + NodeTwinId: 105, + BIOS: types.BIOS{ + Vendor: "American Megatrends", + Version: "v1.0", + }, + Baseboard: types.Baseboard{ + Manufacturer: "ASUS", + ProductName: "Prime Z390-A", + }, + Processor: []types.Processor{ + { + Version: "Intel Core i7-9700K", + ThreadCount: "8", + }, + }, + Memory: []types.Memory{ + { + Manufacturer: "Kingston", + Type: "DDR4 16GB", + }, + }, + UpdatedAt: time.Now().Unix(), + }, + { + NodeTwinId: 106, + BIOS: types.BIOS{ + Vendor: "Phoenix Technologies", + Version: "v2.0", + }, + Baseboard: types.Baseboard{ + Manufacturer: "Gigabyte", + ProductName: "B450 AORUS PRO WIFI", + }, + Processor: []types.Processor{ + { + Version: "AMD Ryzen 7 3700X", + ThreadCount: "16", + }, + }, + Memory: []types.Memory{ + { + Manufacturer: "Corsair", + Type: "DDR4 32GB", + }, + }, + UpdatedAt: time.Now().Unix(), + }, + } + + err := dbTest.UpsertNodeDmi(ctx, dmis) + assert.NoError(t, err) + + var dmiLookup types.Dmi + err = dbTest.gormDB.Where("node_twin_id = ?", 105).First(&dmiLookup).Error + assert.NoError(t, err) + assert.Equal(t, dmiLookup, dmis[0]) + + var dmi2Lookup types.Dmi + err = dbTest.gormDB.Where("node_twin_id = ?", 106).First(&dmi2Lookup).Error + assert.NoError(t, err) + assert.Equal(t, dmi2Lookup, dmis[1]) + }) +} + +// TestPostgresDatabase_UpsertNetworkSpeed tests the UpsertNetworkSpeed function. +func TestPostgresDatabase_UpsertNetworkSpeed(t *testing.T) { + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Network Speed", func(t *testing.T) { + speeds := []types.Speed{ + {NodeTwinId: 104, Download: 100.5, Upload: 50.2, UpdatedAt: time.Now().Unix()}, + {NodeTwinId: 105, Download: 150.8, Upload: 75.1, UpdatedAt: time.Now().Unix()}, + } + + err := dbTest.UpsertNetworkSpeed(ctx, speeds) + assert.NoError(t, err) + + var speedLookup types.Speed + err = dbTest.gormDB.Where("node_twin_id = ?", 104).First(&speedLookup).Error + assert.NoError(t, err) + assert.Equal(t, speedLookup, speeds[0]) + + var speed2Lookup types.Speed + err = dbTest.gormDB.Where("node_twin_id = ?", 105).First(&speed2Lookup).Error + assert.NoError(t, err) + assert.Equal(t, speed2Lookup, speeds[1]) + }) +} + +// TestPostgresDatabase_UpsertNodeIpv6Report tests the UpsertNodeIpv6Report function. +func TestPostgresDatabase_UpsertNodeIpv6Report(t *testing.T) { + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node IPv6 Report", func(t *testing.T) { + ips := []types.HasIpv6{ + {NodeTwinId: 104, HasIpv6: true, UpdatedAt: time.Now().Unix()}, + {NodeTwinId: 105, HasIpv6: false, UpdatedAt: time.Now().Unix()}, + } + + err := dbTest.UpsertNodeIpv6Report(ctx, ips) + assert.NoError(t, err) + + var ipv6Lookup types.HasIpv6 + err = dbTest.gormDB.Where("node_twin_id = ?", 104).First(&ipv6Lookup).Error + assert.NoError(t, err) + assert.Equal(t, ipv6Lookup, ips[0]) + + var ipv62Lookup types.HasIpv6 + err = dbTest.gormDB.Where("node_twin_id = ?", 105).First(&ipv62Lookup).Error + assert.NoError(t, err) + assert.Equal(t, ipv62Lookup, ips[1]) + }) +} + +// TestPostgresDatabase_UpsertNodeWorkloads tests the UpsertNodeWorkloads function. +func TestPostgresDatabase_UpsertNodeWorkloads(t *testing.T) { + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node Workloads", func(t *testing.T) { + workloads := []types.NodesWorkloads{ + {NodeTwinId: 101, WorkloadsNumber: 5, UpdatedAt: time.Now().Unix()}, + {NodeTwinId: 102, WorkloadsNumber: 3, UpdatedAt: time.Now().Unix()}, + } + + err := dbTest.UpsertNodeWorkloads(ctx, workloads) + assert.NoError(t, err) + + var workloadsLookup types.NodesWorkloads + err = dbTest.gormDB.Where("node_twin_id = ?", 101).First(&workloadsLookup).Error + assert.NoError(t, err) + assert.Equal(t, workloadsLookup, workloads[0]) + + var workloads2Lookup types.NodesWorkloads + err = dbTest.gormDB.Where("node_twin_id = ?", 102).First(&workloads2Lookup).Error + assert.NoError(t, err) + assert.Equal(t, workloads2Lookup, workloads[1]) + }) +} + +// TestPostgresDatabase_GetLastUpsertsTimestamp tests the GetLastUpsertsTimestamp function. +func TestPostgresDatabase_GetLastUpsertsTimestamp(t *testing.T) { + dbTest, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "testdb", 80, logger.Error) + if err != nil { + t.Skipf("Can't connect to testdb: %v", err) + } + ctx := context.Background() + + t.Run("Upsert Node Workloads", func(t *testing.T) { + currTime := time.Now().Unix() + workloads := []types.NodesWorkloads{ + {NodeTwinId: 104, WorkloadsNumber: 5, UpdatedAt: currTime}, + } + err := dbTest.UpsertNodeWorkloads(ctx, workloads) + assert.NoError(t, err) + + state, err := dbTest.GetLastUpsertsTimestamp() + assert.NoError(t, err) + assert.Equal(t, currTime, state.Workloads.UpdatedAt) + }) +} diff --git a/grid-proxy/internal/explorer/db/db_indexer_utils_test.go b/grid-proxy/internal/explorer/db/db_indexer_utils_test.go index 9efc490f3..c31a7c001 100644 --- a/grid-proxy/internal/explorer/db/db_indexer_utils_test.go +++ b/grid-proxy/internal/explorer/db/db_indexer_utils_test.go @@ -31,7 +31,7 @@ func TestPostgresDatabase_DeleteOldGpus(t *testing.T) { assert.NoError(t, err) curCount := 0 err = dbTest.gormDB.Raw("SELECT COUNT(*) FROM node_gpu WHERE node_twin_id = ?", 103).Scan(&curCount).Error - + if err != nil { t.Skipf("error counting GPUs: %v", err) } diff --git a/grid-proxy/internal/explorer/db/main_test.go b/grid-proxy/internal/explorer/db/main_test.go index d3d742331..0f9531444 100644 --- a/grid-proxy/internal/explorer/db/main_test.go +++ b/grid-proxy/internal/explorer/db/main_test.go @@ -77,5 +77,3 @@ func TestMain(m *testing.M) { os.Exit(code) } - - From d9cc91664437b213f57e936c966e7e39673158d8 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Tue, 26 Nov 2024 16:46:19 +0200 Subject: [PATCH 09/10] fix: rollback upsert changes --- .../explorer/db/db_indexer_upserters_test.go | 14 ++++++++++++ .../explorer/db/db_indexer_utils_test.go | 3 ++- grid-proxy/internal/explorer/db/main_test.go | 22 +++++++++++++++---- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/grid-proxy/internal/explorer/db/db_indexer_upserters_test.go b/grid-proxy/internal/explorer/db/db_indexer_upserters_test.go index 5f18aeecc..26412d6f3 100644 --- a/grid-proxy/internal/explorer/db/db_indexer_upserters_test.go +++ b/grid-proxy/internal/explorer/db/db_indexer_upserters_test.go @@ -17,6 +17,8 @@ func TestPostgresDatabase_UpsertNodesGPU(t *testing.T) { t.Skipf("Can't connect to testdb: %v", err) } ctx := context.Background() + defer dbTest.Close() + defer Setup() t.Run("Upsert Nodes GPU", func(t *testing.T) { //take care not to interfere with other tests like (TestPostgresDatabase_DeleteOldGpus) @@ -45,6 +47,8 @@ func TestPostgresDatabase_UpsertNodeHealth(t *testing.T) { t.Skipf("Can't connect to testdb: %v", err) } ctx := context.Background() + defer dbTest.Close() + defer Setup() t.Run("Upsert Node Health", func(t *testing.T) { healthReports := []types.HealthReport{ @@ -72,6 +76,8 @@ func TestPostgresDatabase_UpsertNodeDmi(t *testing.T) { t.Skipf("Can't connect to testdb: %v", err) } ctx := context.Background() + defer dbTest.Close() + defer Setup() t.Run("Upsert Node DMI", func(t *testing.T) { dmis := []types.Dmi{ @@ -147,6 +153,8 @@ func TestPostgresDatabase_UpsertNetworkSpeed(t *testing.T) { t.Skipf("Can't connect to testdb: %v", err) } ctx := context.Background() + defer dbTest.Close() + defer Setup() t.Run("Upsert Network Speed", func(t *testing.T) { speeds := []types.Speed{ @@ -176,6 +184,8 @@ func TestPostgresDatabase_UpsertNodeIpv6Report(t *testing.T) { t.Skipf("Can't connect to testdb: %v", err) } ctx := context.Background() + defer dbTest.Close() + defer Setup() t.Run("Upsert Node IPv6 Report", func(t *testing.T) { ips := []types.HasIpv6{ @@ -205,6 +215,8 @@ func TestPostgresDatabase_UpsertNodeWorkloads(t *testing.T) { t.Skipf("Can't connect to testdb: %v", err) } ctx := context.Background() + defer dbTest.Close() + defer Setup() t.Run("Upsert Node Workloads", func(t *testing.T) { workloads := []types.NodesWorkloads{ @@ -234,6 +246,8 @@ func TestPostgresDatabase_GetLastUpsertsTimestamp(t *testing.T) { t.Skipf("Can't connect to testdb: %v", err) } ctx := context.Background() + defer dbTest.Close() + defer Setup() t.Run("Upsert Node Workloads", func(t *testing.T) { currTime := time.Now().Unix() diff --git a/grid-proxy/internal/explorer/db/db_indexer_utils_test.go b/grid-proxy/internal/explorer/db/db_indexer_utils_test.go index c31a7c001..80c50b3dd 100644 --- a/grid-proxy/internal/explorer/db/db_indexer_utils_test.go +++ b/grid-proxy/internal/explorer/db/db_indexer_utils_test.go @@ -84,6 +84,8 @@ func TestPostgresDatabase_GetHealthyNodeTwinIds(t *testing.T) { t.Skipf("Can't connect to testdb: %v", err) } ctx := context.Background() + defer dbTest.Close() + defer Setup() t.Run("Get node twin IDs after a certain twin ID", func(t *testing.T) { @@ -96,7 +98,6 @@ func TestPostgresDatabase_GetHealthyNodeTwinIds(t *testing.T) { nodeTwinIDs, err := dbTest.GetHealthyNodeTwinIds(ctx) assert.NoError(t, err) - // it depend on whether run first or not assert.Contains(t, nodeTwinIDs, uint32(112)) assert.Contains(t, nodeTwinIDs, uint32(113)) }) diff --git a/grid-proxy/internal/explorer/db/main_test.go b/grid-proxy/internal/explorer/db/main_test.go index 0f9531444..e6331d8d6 100644 --- a/grid-proxy/internal/explorer/db/main_test.go +++ b/grid-proxy/internal/explorer/db/main_test.go @@ -10,14 +10,31 @@ import ( "gorm.io/gorm/logger" ) + func TestMain(m *testing.M) { + Setup() + code := m.Run() + os.Exit(code) + +} +func Setup() { // Connect to the default `postgres` database to create `testdb` initialDb, err := NewPostgresDatabase("localhost", 5432, "postgres", "mypassword", "postgres", 80, logger.Error) if err != nil { log.Fatalf("could not connect to default database: %v", err) } defer initialDb.Close() + // Force close all connections to testdb before dropping + err = initialDb.gormDB.Exec(` + SELECT pg_terminate_backend(pg_stat_activity.pid) + FROM pg_stat_activity + WHERE pg_stat_activity.datname = 'testdb' + AND pid <> pg_backend_pid(); + `).Error + if err != nil { + log.Printf("warning while terminating connections: %v", err) + } // drop the `testdb` database err = initialDb.gormDB.Exec(`DROP DATABASE IF EXISTS testdb;`).Error @@ -73,7 +90,4 @@ func TestMain(m *testing.M) { if err != nil { log.Fatalf("could not populate db: %v", err) } - code := m.Run() - os.Exit(code) - -} +} \ No newline at end of file From 9be806af2cfb1e9fa5832b43711a6065c10cca01 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Tue, 26 Nov 2024 16:54:03 +0200 Subject: [PATCH 10/10] fix: code fmted --- grid-proxy/internal/explorer/db/main_test.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/grid-proxy/internal/explorer/db/main_test.go b/grid-proxy/internal/explorer/db/main_test.go index e6331d8d6..42369116d 100644 --- a/grid-proxy/internal/explorer/db/main_test.go +++ b/grid-proxy/internal/explorer/db/main_test.go @@ -10,7 +10,6 @@ import ( "gorm.io/gorm/logger" ) - func TestMain(m *testing.M) { Setup() @@ -26,15 +25,15 @@ func Setup() { } defer initialDb.Close() // Force close all connections to testdb before dropping - err = initialDb.gormDB.Exec(` + err = initialDb.gormDB.Exec(` SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'testdb' AND pid <> pg_backend_pid(); `).Error if err != nil { - log.Printf("warning while terminating connections: %v", err) - } + log.Printf("warning while terminating connections: %v", err) + } // drop the `testdb` database err = initialDb.gormDB.Exec(`DROP DATABASE IF EXISTS testdb;`).Error @@ -90,4 +89,4 @@ func Setup() { if err != nil { log.Fatalf("could not populate db: %v", err) } -} \ No newline at end of file +}