Spaces:
Runtime error
Runtime error
updatable script
Browse files- redis2sheets_img.py +8 -2
- redisList.py +28 -0
- sql2predict.py +96 -0
- sql2redis.py +70 -39
- uuids.json +1 -0
redis2sheets_img.py
CHANGED
@@ -18,8 +18,14 @@ for i_key in redis_keys:
|
|
18 |
image_id = i_key.decode().split(':')[-2]
|
19 |
raw_image_data_bytes = r.hgetall(f'image:{image_id}'.encode('utf-8'))
|
20 |
raw_image_data = {k.decode('utf-8'): v.decode('utf-8') for k, v in raw_image_data_bytes.items()}
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
row = [image_id, i_key.decode().split(':')[-1], image_data['author'], image_data['author_id'], image_data['role'], image_data['timestamp'], image_data['label'], image_data['confidence'], path, dashboard_url,'=IMAGE("{}", 2)'.format(path)]
|
24 |
rows.append(row)
|
25 |
|
|
|
18 |
image_id = i_key.decode().split(':')[-2]
|
19 |
raw_image_data_bytes = r.hgetall(f'image:{image_id}'.encode('utf-8'))
|
20 |
raw_image_data = {k.decode('utf-8'): v.decode('utf-8') for k, v in raw_image_data_bytes.items()}
|
21 |
+
try:
|
22 |
+
path = f'https://gainforest-transparency-dashboard.s3.amazonaws.com/{raw_image_data["awsCID"]}'
|
23 |
+
except:
|
24 |
+
path = f'https://twitter.com/GainForestNow/photo.jpg'
|
25 |
+
try:
|
26 |
+
dashboard_url = f'https://gainforest.app/observations/{raw_image_data["uuid"]}'
|
27 |
+
except:
|
28 |
+
dashboard_url = f'no'
|
29 |
row = [image_id, i_key.decode().split(':')[-1], image_data['author'], image_data['author_id'], image_data['role'], image_data['timestamp'], image_data['label'], image_data['confidence'], path, dashboard_url,'=IMAGE("{}", 2)'.format(path)]
|
30 |
rows.append(row)
|
31 |
|
redisList.py
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import redis
|
2 |
+
import json
|
3 |
+
|
4 |
+
redis_url = 'redis://default:[email protected]:7369'
|
5 |
+
r = redis.from_url(redis_url)
|
6 |
+
uuids = []
|
7 |
+
|
8 |
+
redis_keys = r.keys('image:*')
|
9 |
+
for i_key in redis_keys:
|
10 |
+
image_data_bytes = r.hgetall(i_key)
|
11 |
+
image_data = {k.decode('utf-8'): v.decode('utf-8') for k, v in image_data_bytes.items()}
|
12 |
+
try:
|
13 |
+
uuids.append(image_data['uuid'])
|
14 |
+
except:
|
15 |
+
print(i_key)
|
16 |
+
|
17 |
+
# Save the UUIDs to a file
|
18 |
+
with open('uuids.json', 'w') as file:
|
19 |
+
json.dump(uuids, file)
|
20 |
+
|
21 |
+
print('UUIDs saved to uuids.json')
|
22 |
+
|
23 |
+
# # Read the JSON file
|
24 |
+
# with open('./uuids.json', 'r') as file:
|
25 |
+
# uuid_list = json.load(file)
|
26 |
+
|
27 |
+
# # Access the list
|
28 |
+
# print(uuid_list == uuids)
|
sql2predict.py
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import redis
|
2 |
+
import psycopg2
|
3 |
+
from gradio_client import Client
|
4 |
+
import json
|
5 |
+
from datetime import datetime
|
6 |
+
|
7 |
+
redis_url = 'redis://default:[email protected]:7369'
|
8 |
+
r = redis.from_url(redis_url)
|
9 |
+
# run josh's algorithm
|
10 |
+
client = Client("https://diverseco-metaformer.hf.space/")
|
11 |
+
|
12 |
+
# Postgres database get the observations
|
13 |
+
def connect():
|
14 |
+
conn = None
|
15 |
+
try:
|
16 |
+
# Connecting to your PostgreSQL server
|
17 |
+
print('Connecting to the PostgreSQL database...')
|
18 |
+
conn = psycopg2.connect('postgresql://postgres:[email protected]:7297/railway')
|
19 |
+
# conn = psycopg2.connect('postgresql://postgres:[email protected]:6771/railway') #staging
|
20 |
+
# conn = psycopg2.connect('postgresql://postgres:[email protected]:5772/railway') #development
|
21 |
+
|
22 |
+
except (Exception, psycopg2.DatabaseError) as error:
|
23 |
+
print(error)
|
24 |
+
|
25 |
+
print("Connection successful")
|
26 |
+
return conn
|
27 |
+
|
28 |
+
def predict_images():
|
29 |
+
query = """SELECT "id", "awsCID", "name" FROM "Asset" WHERE "projectId" = 37 AND "classification" = 'Camera Traps'"""
|
30 |
+
conn = connect()
|
31 |
+
cur = conn.cursor()
|
32 |
+
|
33 |
+
try:
|
34 |
+
# Execute a simple SQL command
|
35 |
+
cur.execute(query)
|
36 |
+
|
37 |
+
# Fetch all the data returned by the database
|
38 |
+
rows = cur.fetchall()
|
39 |
+
for row in rows:
|
40 |
+
image_cnt = generate_id('cnt:predict:image')
|
41 |
+
# Set multiple field-value pairs using HMSET
|
42 |
+
# Convert the date string to a datetime object
|
43 |
+
# date_obj = datetime.strptime(row[2].split('_')[1], "%Y%m%d%H%M%S")
|
44 |
+
|
45 |
+
# # Format the datetime object to the desired format
|
46 |
+
# formatted_date = date_obj.strftime("%d/%m/%Y %H:%M")
|
47 |
+
# fields_values = {
|
48 |
+
# 'uuid': row[0],
|
49 |
+
# 'awsCID': row[1],
|
50 |
+
# 'name': row[2],
|
51 |
+
# 'sensor': 'M300/RGB',
|
52 |
+
# 'label': 'β',
|
53 |
+
# 'author': 'β',
|
54 |
+
# 'timestamp': formatted_date
|
55 |
+
# }
|
56 |
+
# r.hmset(f'image:{image_cnt}', fields_values)
|
57 |
+
|
58 |
+
image_url = f'https://gainforest-transparency-dashboard.s3.amazonaws.com/{row[1]}'
|
59 |
+
print(f'predicting {image_url}')
|
60 |
+
|
61 |
+
result = client.predict(
|
62 |
+
image_url,
|
63 |
+
api_name="/predict"
|
64 |
+
)
|
65 |
+
|
66 |
+
with open(result, 'r') as file:
|
67 |
+
json_data = json.load(file)
|
68 |
+
|
69 |
+
# Extract labels and confidences from JSON data
|
70 |
+
labels = [data['label'] for data in json_data['confidences']]
|
71 |
+
confidences = [data['confidence'] for data in json_data['confidences']]
|
72 |
+
|
73 |
+
# Store labels and confidences in Redis using HMSET
|
74 |
+
for label, confidence in zip(labels, confidences):
|
75 |
+
pred_cnt = generate_id(f'cnt:prediction:{image_cnt}')
|
76 |
+
fields_values = {
|
77 |
+
'label': label,
|
78 |
+
'confidence': confidence,
|
79 |
+
}
|
80 |
+
r.hmset(f'prediction:{image_cnt}:{pred_cnt}', fields_values)
|
81 |
+
|
82 |
+
|
83 |
+
except (Exception, psycopg2.DatabaseError) as error:
|
84 |
+
print(error)
|
85 |
+
|
86 |
+
finally:
|
87 |
+
# Close the cursor and connection
|
88 |
+
cur.close()
|
89 |
+
conn.close()
|
90 |
+
r.close()
|
91 |
+
|
92 |
+
# Function to generate auto-incremented IDs
|
93 |
+
def generate_id(key):
|
94 |
+
return r.incr(key)
|
95 |
+
|
96 |
+
predict_images()
|
sql2redis.py
CHANGED
@@ -2,6 +2,13 @@ import redis
|
|
2 |
import psycopg2
|
3 |
from gradio_client import Client
|
4 |
import json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
6 |
redis_url = 'redis://default:[email protected]:7369'
|
7 |
r = redis.from_url(redis_url)
|
@@ -25,7 +32,7 @@ def connect():
|
|
25 |
return conn
|
26 |
|
27 |
def get_all_images():
|
28 |
-
query = """SELECT "id", "awsCID" FROM "Asset" WHERE "projectId" = 37 AND "classification" = 'Camera Traps'"""
|
29 |
conn = connect()
|
30 |
cur = conn.cursor()
|
31 |
|
@@ -36,41 +43,65 @@ def get_all_images():
|
|
36 |
# Fetch all the data returned by the database
|
37 |
rows = cur.fetchall()
|
38 |
for row in rows:
|
39 |
-
image_cnt = generate_id('cnt:image')
|
40 |
# Set multiple field-value pairs using HMSET
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
'
|
45 |
-
'
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
|
75 |
|
76 |
except (Exception, psycopg2.DatabaseError) as error:
|
@@ -99,11 +130,11 @@ def get_all_sounds():
|
|
99 |
fields_values = {
|
100 |
'uuid': row[0],
|
101 |
'awsCID': row[1],
|
102 |
-
'sensor': '
|
103 |
'label': 'β',
|
104 |
'author': 'β',
|
105 |
'label_at': 'β',
|
106 |
-
'timestamp': '
|
107 |
}
|
108 |
r.hmset(f'sound:{sound_cnt}', fields_values)
|
109 |
|
@@ -120,6 +151,6 @@ def get_all_sounds():
|
|
120 |
def generate_id(key):
|
121 |
return r.incr(key)
|
122 |
|
123 |
-
r.flushdb()
|
124 |
get_all_images()
|
125 |
-
get_all_sounds()
|
|
|
2 |
import psycopg2
|
3 |
from gradio_client import Client
|
4 |
import json
|
5 |
+
from datetime import datetime
|
6 |
+
import json
|
7 |
+
|
8 |
+
# Read the JSON file
|
9 |
+
# Read the JSON file
|
10 |
+
with open('./uuids.json', 'r') as file:
|
11 |
+
uuid_list = json.load(file)
|
12 |
|
13 |
redis_url = 'redis://default:[email protected]:7369'
|
14 |
r = redis.from_url(redis_url)
|
|
|
32 |
return conn
|
33 |
|
34 |
def get_all_images():
|
35 |
+
query = """SELECT "id", "awsCID", "name" FROM "Asset" WHERE "projectId" = 37 AND "classification" = 'Camera Traps'"""
|
36 |
conn = connect()
|
37 |
cur = conn.cursor()
|
38 |
|
|
|
43 |
# Fetch all the data returned by the database
|
44 |
rows = cur.fetchall()
|
45 |
for row in rows:
|
|
|
46 |
# Set multiple field-value pairs using HMSET
|
47 |
+
# Convert the date string to a datetime object
|
48 |
+
if row[0] not in uuid_list:
|
49 |
+
print(row[0])
|
50 |
+
image_cnt = generate_id('cnt:image')
|
51 |
+
if row[2].split('_')[0] == 'DJI':
|
52 |
+
print(f'adding DJI M300: {row[2]}')
|
53 |
+
date_obj = datetime.strptime(row[2].split('_')[1], "%Y%m%d%H%M%S")
|
54 |
+
|
55 |
+
# Format the datetime object to the desired format
|
56 |
+
formatted_date = date_obj.strftime("%d/%m/%Y %H:%M")
|
57 |
+
fields_values = {
|
58 |
+
'uuid': row[0],
|
59 |
+
'awsCID': row[1],
|
60 |
+
'name': row[2],
|
61 |
+
'sensor': 'M300/RGB',
|
62 |
+
'label': 'β',
|
63 |
+
'author': 'β',
|
64 |
+
'timestamp': formatted_date
|
65 |
+
}
|
66 |
+
r.hmset(f'image:{image_cnt}', fields_values)
|
67 |
+
|
68 |
+
else:
|
69 |
+
print(f'adding Rover: {row[2]}')
|
70 |
+
# Format the datetime object to the desired format
|
71 |
+
fields_values = {
|
72 |
+
'uuid': row[0],
|
73 |
+
'awsCID': row[1],
|
74 |
+
'name': row[2],
|
75 |
+
'sensor': 'Rover/RGB',
|
76 |
+
'label': 'β',
|
77 |
+
'author': 'β',
|
78 |
+
'timestamp': row[2].split('_')[0]
|
79 |
+
}
|
80 |
+
r.hmset(f'image:{image_cnt}', fields_values)
|
81 |
+
|
82 |
+
# image_url = f'https://gainforest-transparency-dashboard.s3.amazonaws.com/{row[1]}'
|
83 |
+
# print(f'predicting {image_url}')
|
84 |
+
|
85 |
+
# result = client.predict(
|
86 |
+
# image_url,
|
87 |
+
# api_name="/predict"
|
88 |
+
# )
|
89 |
+
|
90 |
+
# with open(result, 'r') as file:
|
91 |
+
# json_data = json.load(file)
|
92 |
+
|
93 |
+
# # Extract labels and confidences from JSON data
|
94 |
+
# labels = [data['label'] for data in json_data['confidences']]
|
95 |
+
# confidences = [data['confidence'] for data in json_data['confidences']]
|
96 |
+
|
97 |
+
# # Store labels and confidences in Redis using HMSET
|
98 |
+
# for label, confidence in zip(labels, confidences):
|
99 |
+
# pred_cnt = generate_id(f'cnt:prediction:{image_cnt}')
|
100 |
+
# fields_values = {
|
101 |
+
# 'label': label,
|
102 |
+
# 'confidence': confidence,
|
103 |
+
# }
|
104 |
+
# r.hmset(f'prediction:{image_cnt}:{pred_cnt}', fields_values)
|
105 |
|
106 |
|
107 |
except (Exception, psycopg2.DatabaseError) as error:
|
|
|
130 |
fields_values = {
|
131 |
'uuid': row[0],
|
132 |
'awsCID': row[1],
|
133 |
+
'sensor': 'Rover/Acoustic',
|
134 |
'label': 'β',
|
135 |
'author': 'β',
|
136 |
'label_at': 'β',
|
137 |
+
'timestamp': '6th June 2023, 6 am'
|
138 |
}
|
139 |
r.hmset(f'sound:{sound_cnt}', fields_values)
|
140 |
|
|
|
151 |
def generate_id(key):
|
152 |
return r.incr(key)
|
153 |
|
154 |
+
# r.flushdb()
|
155 |
get_all_images()
|
156 |
+
# get_all_sounds()
|
uuids.json
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
["aa709960-e359-479b-ab8d-2105666d58ff", "fcc5073d-09bc-4c84-b686-411d80aea2bd", "87add743-271e-4cbc-8334-ca607bb216e3", "934d6ade-0c41-4c91-8591-dfa42205665e", "6ebac702-a0dc-491f-8b36-fd112f1da5ef", "6d6250be-c6ff-4a7a-b7be-8d92c203cab8", "a07914c3-9838-4af2-a2d5-4d25102a8a06", "1e0fe1ae-0d5c-4230-9b95-b7c77e9e69ce", "afef5dcc-e92c-4bc2-8d43-91f8e32a5d74", "fa0063d8-d5e7-4088-9016-59168e6aecc9", "6723af5a-a6f4-4445-b8de-746a4d7e5708", "bd64d819-5669-404b-bbe6-eeee2b99fc20", "ff081add-043a-4df6-baa3-21a36d3bc097", "a6b95e99-abbd-4e73-8ce6-e449cf981753", "f717ef3a-45af-4208-8f75-b28dd5c72855", "150f89b5-09cf-4411-a254-ca7a8255e612", "8fea38b1-5425-4dd1-824b-edead56a58fb", "2209d127-e94c-477f-87b7-f18d170622dc", "956e01f5-2a27-4aa5-8bff-d8b95c25983c", "47060014-bf76-4d6b-bfe7-9cd6a4324e69", "b8fe4567-c309-4fc0-8ada-26c43c4afb6a", "c22ed793-df3b-47f1-94ef-923a7eaf7454", "6b4df3b2-5f7e-4940-9e53-9a0e16f891ea", "7821dd0d-6dd2-473c-ac5a-1fe595f88f50", "5409728a-925b-4bdc-b250-6640ca82b4e9", "7aceb2f3-be7a-4450-99db-f88a01cf9797", "a8eb6198-5640-4f6d-a10f-ec496f4b3df0", "628da910-b568-4b80-ae06-a087240bbb98", "076e5ccf-e7ef-484e-8c96-617733d06f09", "29bc7bb2-0bb0-4d1e-986a-b9b65cb3dc4e", "b3d165c5-4f53-4a1e-9de0-609ec1514a04", "bcc4bb84-a21f-4683-abc8-e43139d184c8", "a61651f9-e01a-407e-a0a1-00b789df588e", "a49df16f-d848-4d82-840f-c1cb5b115c0a", "6e44ab58-d735-4244-b751-6f95687e09d9", "8dbc69b8-6f80-4c27-b99e-147586e3aef7", "686eeeaf-963c-4306-9977-ef6f4825526d", "a6744dbd-9f3e-402f-ba14-d26bf2b1ee9f", "b1482bc1-0b05-414d-af8c-919a786e6e24", "73748a5d-9d32-4648-80ae-d746435c1d25", "4a6a63b9-acfc-4527-b8a1-b6d978da43fd", "fc9deccf-6306-4661-8a75-3be23ff54170", "4be9688b-e756-479b-89f1-754ac02060f2", "7bfc4329-3ac5-4015-8e0c-351360c3de12", "0e1a7e7a-d4c7-4c9d-ba82-7ff12682ee97", "653d8796-7096-4ff0-8a34-ba9da853c3d6", "fabc1b56-30bb-468b-874d-e4bcece0800d", "1dc3d9c8-3899-4f7e-9e21-5306cf2b0785", "82e86018-1e25-482d-9e93-954512b5a65b", "8bc25292-030e-42f2-94e0-7ebe2ede87a1", "51039d31-661c-4e9f-b5bf-c3e674b04dfe", "726c7cae-1980-4cc7-95b1-16a19805a4d2", "9b67e7df-5c9d-4e41-adf2-7c351748b6c5", "95368698-9c17-4960-b386-2ce0f667620d", "8c04c37c-bf42-446c-94a3-b4c0ea1b66b6", "2e6506a5-9175-4cf0-9000-57915e520d8d", "2c1bb8f3-b57b-417b-b7eb-f08dd790bd5b", "c5ba33a5-cbf6-44aa-a8a6-16e21d56a381", "d67ad26c-10fc-410d-b98e-067e137508dc", "880e30ee-f480-43f0-8d78-024bf576a1b4", "8575a0ff-218a-45a1-8c63-62eb6aef146e", "a4cd5139-ccf6-4c4f-9084-78d1f768559e", "845e44a5-0e8a-444e-b78b-ec5e70fdf7a0", "aafe2dd4-b102-41a9-b194-744057939d60", "b56fae77-1a2f-4e7b-8214-fdca11be487d", "6270f852-647e-4728-8b49-2086532f6e1d", "ccb62204-6463-43f3-bb80-b680a5edbd7a", "c29de73f-4b49-4d4d-bcea-8942d36854dc", "19c99e46-a966-4c92-957d-76b71f1bb957", "9e116f4a-8e92-4711-a211-b92d34439d33", "94b5475e-8ee0-4733-892d-5ad38fc1aa4b", "4184339b-6cd0-4a80-9c1e-0289a43d30a0", "4f72b8bb-5d2e-4dbc-8873-f353f6dd9046", "89f6b1ea-514e-4462-9f39-edc6a85e5683", "ecb9303e-fc29-40e7-8783-ec01c5b7bcdb", "ca3eb53a-56ea-4393-9d81-7a45eb9f1ae8", "afc351e6-0bc9-42a5-94b4-7d032100dd36", "9909b01f-695a-4dd4-84e9-4416d54323e6", "4438c48c-18b2-466a-ad4f-78086202c0c0", "e3c350ff-7875-4913-98af-70511284ac7b", "559532f3-6bce-4d5c-ba0c-aba73b2811c6", "b77672fe-1660-4272-9987-edb47182bb73", "b655b8fe-bc24-4e09-b83f-8dbd58f23754", "5fb6c6b2-c8c6-4879-8caf-ec79181779a7", "1625e7ec-3c40-48e2-85e4-5d11376b6516", "cfedcd5e-e329-430d-9c54-8a99de7ec935", "c2806299-af52-417f-98c8-8b6173ce6d61", "e2f8fd69-0574-4836-a553-78f678571d0a", "f28cf2a0-4f4d-4485-a25c-11fe41b1a42b", "cc974958-8ab9-42eb-887d-510882b163c3", "1570b375-6033-4d5e-bba7-2698848f5fc4", "1d9af947-e0f1-4cf6-9ff5-e3e827bb1712", "9229175b-71e2-4fc9-9373-7a4d87266844", "6dc676f1-7055-4087-9ebb-11734692da04", "db258f25-0826-4aea-9671-86328a39a919", "3d4b603e-70fc-43d6-93d3-ccfe190e0483", "0d3f4fd9-6c4a-4cd0-b065-e8e7b6ae8d47", "fcc24225-6bd1-4216-b801-96ee43722f38", "0c8dccbc-a84e-48db-bd90-da47bcab54a8", "db9cb210-58ba-476f-a06a-4530a893e24c", "1c3ece80-a3bb-48de-8b69-9427e92030a1", "cf76ec81-f8c1-4c3e-a5d3-dc8a7e9d69ab", "d5a0407b-56ac-4f43-9603-1a65a10864bd", "9f62f5d9-cbab-4207-b7e4-b0cb88a90e2b", "019ad7ca-f167-4e17-88c4-06f9fe6777b9", "5340cdc5-de27-40fe-8635-ebebac905b5e", "0707b952-0673-4a81-9096-07587563e603", "9cdbcc54-3476-490b-97ce-67dd43b92620", "b365acfe-96d2-4d92-8a35-a4fef2032940", "f95ea71f-ab67-4327-8f34-795fc0303343", "5c56fc30-542c-4c8c-8891-4b0ee967509f", "b465c3cb-ab12-4b70-9798-2b1b194e3c4d", "c1c8dfea-fb5c-4e04-8e39-483c423a3146", "da26ee9a-e298-49f2-a3c3-70625071393b", "045540b7-0437-43cf-b84d-854c50c5c2dc", "4cabbb5a-b053-4a90-b384-06a30fea9816", "b70eb392-7e4d-4c5d-b2df-8385f2535eb8", "4811756d-65fc-469e-b588-12e975dbbbfc", "7c1bbe10-03e3-4203-8a61-1a8f045a597e", "9f025942-d4cd-4950-bee6-588156845e75", "357593ed-6755-4bba-8c8e-9344ec406a01", "de7ff933-699b-45f4-b2e0-4dcd5d2c957b", "b01983b0-d7a3-4182-88a5-30b79645bcc1", "2ab93f66-7f6d-4c19-a5e7-dd55f3e6b189", "f6ab7d4f-5067-467e-ba68-bd730f813f9f", "c815e5c2-3a3a-43c7-9137-a345a7c8f0f3", "65d2ce7c-1f06-42cb-81f8-1327609d8cc7", "613a4a61-e842-49d4-8572-fa202fe836b1", "325eba9b-b48e-4ce1-850b-0026f60f2b3d", "aa0a048c-5e8e-4765-ac88-8b6ebe0ba36d", "5e674a5f-985c-40ab-8e27-ba650ed6bc6e", "1dc80155-3f2a-4b16-af2f-7ef68d5fb225", "fc7be854-d2c2-4d4b-8ab1-5aa558e220e6", "e4a4c41f-6f31-4b46-b01a-77451e430b0b", "ca68e797-f61e-43f1-927a-4ff2c06d3fc0", "2988cc69-1f19-4641-ac82-a454da6f32ae", "36c7dac7-e948-4eb3-9af5-99a43736e98c", "8912321f-88f4-481a-a297-cfcbb079c967", "588fe5c6-1636-40f0-9156-299a5a401bd7", "f7ad6082-1ccd-47ff-aee0-5e7ae784170e", "97f98648-436c-4e8f-be60-5a359082529c", "9be38534-86e0-4af1-a8e9-0bc3974e95f4", "2ae7301c-e796-4e54-a164-5b21c5dde292", "e772a52d-b8f3-4855-a7d5-48458636232b", "b9801201-bb73-4935-9e30-c871c44f9e6f", "2aab4bd8-5d7c-4fe2-ba97-787ba35c6231", "500bd426-bc16-44aa-96c0-c2e981599554", "fe2c9bc3-1f16-4fb5-abf9-4cdd51906faa", "ca9599e7-9ccc-47f8-a6b9-198daad0a368", "3a08bb49-c375-448b-80d4-784fa68e0a89", "066b7e68-9d46-4853-b0ee-3f20a5b7cb8f", "92bb9a32-883a-4000-a03f-f1e294c098a9", "595dc8e0-b780-4fcf-8693-8df34d03b3ae", "18b084d1-0061-4731-b96e-72a69de95974", "61b81a1d-d1e1-4d6e-bf54-ece4f8488da2", "568cf381-26e5-459a-a3ef-aca67f981762", "39272bd7-7a5f-4934-831b-df955f36f9f9", "d227655e-0f4f-4337-80e2-ce4a90ed7412", "3960b026-dff4-4eea-ab45-dee397c0f135", "55478ad6-7d54-4108-a8d9-0051e464eb83", "0117efe1-a962-4480-9cfd-5f7df7eb2d7a", "4f283534-4bd9-4778-80e8-c09bb63a9e20", "effc9941-d351-4118-a84c-5d2363f8e550", "f40a26fe-b564-4a07-a729-49a34ad4f126", "eb5a7a98-0950-4a56-a9e8-552834170206", "71f6084d-0e68-4132-b973-8f4c17c300ed", "2be74743-3f14-45ea-8442-f1ca231d8dc9", "31f2bbc3-fd41-4cc5-a8e2-bc755bf5a9fd", "33b8a1e4-6030-48b9-8056-3e5c5738e62a", "b529171b-8f66-4eb9-b2eb-94973337aa57", "b52d6b3e-de60-4299-ac44-6e00533c397b", "186b97e0-b84f-4385-b6cc-9dfab8be8b1e", "2bc10daa-b91a-4c89-a2cc-b22c2cc1077d", "b3cdaf2c-1ddf-4f57-926c-d1d1d092f965", "1509ecd7-4fbc-4664-ba2a-10f16bc8ef68", "2bf74645-c649-46db-a105-7778d3e8bd97", "656dc57c-43cf-405d-a8bb-662d6ad2fa96", "75161fac-8762-43dd-8ca4-823108b70ab6", "cbe32737-fb2e-43e5-a67c-c1471f07fc85", "e693a5a2-bde8-446e-83a2-352d50c486ea", "337000f1-0518-47a6-8eab-6e3ae14e399a", "a07cae79-fbc4-437b-82bb-86422852a4ab", "5043214f-a722-4909-aab0-9c451de1570c", "c0216181-73f5-412f-9ead-c6a037bc1e42", "66de8ffe-86df-49d8-9aa8-2216b9d9651d", "bb3209c3-ec72-462d-b219-5ec404e1d85a", "c7c7d7f2-6b39-443f-a193-225350de17f6", "759352a3-65a4-44e8-b54f-c63ddb142dbe", "80824c78-069c-4394-8d81-4d5994ac3924", "2a2bd813-8fb2-4335-a587-1f0449105398", "d9c1b9eb-210c-4acf-b737-f4d9172a9774", "1eeb58a4-ef02-4f01-bfa5-a760fd27ed6e", "15e727cb-67ca-4f82-ba5f-e9b132d0fb4b", "1f701553-409b-4d98-b428-73fd07098b07", "01382e96-7863-49aa-a96c-9494f06e70ec", "5b70783f-f6ff-4ce6-98e3-b4390cc16d94", "6801d7e4-659b-47f0-b989-1f31fbbe6fd4", "e01bc42c-b85f-4edb-ae6f-bbd6bdd334a5", "02ace1b9-9277-40a2-868c-d1baf53f3f6d", "3d105ed4-f430-4819-bb53-3b3ec2faad50", "4fb1d73f-620e-4264-a635-5a563628800b", "55313112-ea0b-4cf7-a0d9-610e474f5252", "2d265a11-9525-4714-838d-a8cb90702f20", "6efbca6a-b91d-4671-bab8-2c1a2c881ffe", "e4d8ede3-b5fe-4bb9-8eb5-0ae87c777c40", "b69913dc-666d-4492-beae-c69bdabba82e", "7a760214-5fe9-4f12-9f01-137e66f11743", "adfc699d-8a20-46df-a8cf-a83f47f50011", "8517ef9f-a3f2-47df-b21a-6687dba408e4", "a435d19a-fd1e-4fbf-bbfc-074f7fb2490b", "fff35167-a0f0-4251-bbb9-a7cd5554b25e", "5fd05168-eea3-464e-acc8-9e79fd39952a", "0e757a36-5185-47b0-bde8-b34f4e107186", "79fefc65-1055-4f20-87bf-55b37eb79c65", "b7150f7a-feff-4090-93dd-2115475a72ec", "a7b3e935-5252-40f1-85a3-0dfa258ca31c", "0ab872eb-788b-43f8-96f8-cecd15066e38", "8be8a070-9875-42a6-b0cc-d6742da9f673", "ee58aa5d-fed9-471c-893b-1c91fd4ed112", "b284b9ac-a55d-4e41-8316-be8992ba01a3", "724abec7-312a-45ad-b6fd-fc41c74044b6", "128aae9d-2dec-4350-bec0-19ed01efe965", "a95fc180-6d6d-484d-9495-90db927f9821", "4f4d2d1f-a746-4765-be12-0f74caac4563", "af7717fd-1dbc-4864-9df1-b4417d700a42", "5aa29411-2a58-4d13-98c2-518481b41a86", "290a9e93-4d79-4f77-8194-d3a9f8806d4f", "29dbd5b3-f746-4fc2-b760-b48fe7f8dd6a", "09a26bdd-c402-40b6-a43c-5b5998da74fc", "ab12fe87-9828-422c-bea0-259234bdcb43", "26c72826-8965-41a1-a2a2-639786096e8d", "bb493b71-17cd-41a9-8c69-89010c7c9f7d", "7a655904-be32-46d5-8993-3cd18a047bb4", "924d14f7-59bc-4887-ba5f-0918d93a9d88", "0a77ed83-04c5-4ce0-8623-3491f737be64", "b34c22b0-7af4-4e38-87a4-857cd1237cb5", "ea0ae019-70d7-4017-85f1-a8e5d2eccc3c", "97870cad-9747-4cd4-9686-40493163a7dc", "35f58b57-10d1-4cdf-bca2-7263b954d4dc", "800e03b0-5e08-4913-8836-c8d2baf1b096", "089b7ea5-7728-4482-a5bf-6ebb664e9c17", "c73c99f1-e1bd-4c82-8378-abe5c27133ce", "ab080403-702e-4ba9-abb2-e670f0ad6d38", "f5a2b061-b4a5-4400-a59f-d875fcf57dfc", "c1741277-c231-4030-ab86-ac057ada1f4d", "48412f3a-a2fd-46ed-8bf2-15038ca4cf07", "814cab1f-0fde-4b96-8b4d-c6ab64a32635", "a756c221-9768-4c0c-91a7-c43285827162", "95abec5a-6672-4693-98fb-5f9c3f83a397", "df3ae1fd-eeb6-48f9-917b-9351c838fc69", "ed2edfd0-9fbb-4a37-b0b8-f0d3acd7670f", "d5713a79-f206-4b14-ae0b-34730d1d607f", "c4072925-469a-4497-bedb-2b89ec0ee279", "8765e552-3d5d-4799-9097-cf95bbfc4146", "1a622906-7125-4201-836d-f7862284edf6", "9e0d9c70-7388-47af-ba60-c89ec16b010a", "1c993659-a24b-4b5d-8251-5c1803c82862", "5c988aaa-4a07-4e9c-b828-d353090e426f"]
|