Repository: feagi/feagi (language: python)

Issue:
Updates from Neuraville Inc
This PR syncs with latest Neuraville Inc. development code.


Discussion / hints:

Fix patch:
diff --git a/.github/workflows/update_dev_feagi.yml b/.github/workflows/update_dev_feagi.yml
new file mode 100644
index 000000000..4c2128728
--- /dev/null
+++ b/.github/workflows/update_dev_feagi.yml
@@ -0,0 +1,18 @@
+name: Update dev gcr FEAGI
+on:
+  push:
+    branches:
+      - staging
+    paths:
+      - 'src/**'
+      - 'generate_version.sh'
+  workflow_dispatch:
+
+jobs:
+  Build:
+    runs-on: ubuntu-latest
+
+    steps:
+    - name: testing
+      run: |
+        ls
diff --git a/.gitignore b/.gitignore
index 82d4cd460..03d75062b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -73,4 +73,5 @@ npm-debug.log*
 yarn-debug.log*
 yarn-error.log*
 *.import
-**/.env
\ No newline at end of file
+**/.env
+docker/.env
\ No newline at end of file
diff --git a/docker/.env b/docker/.env
index edaf17ca3..73fff50be 100644
--- a/docker/.env
+++ b/docker/.env
@@ -44,7 +44,7 @@ ANALYTICS_URL=http://127.0.0.1:6082
 FEAGI_URL=http://127.0.0.1:8000
 URL_BRAIN_PONG=None
 
-# URLs for image
+# Public images
 BRIDGE_IMAGE=neuraville/bridge:latest
 WEBCAM_CONTROLLER_IMAGE=neuraville/webcam_controller:latest
 FEAGI_IMAGE=neuraville/feagi:latest
@@ -53,3 +53,4 @@ MICROBIT_IMAGE=neuraville/microbit:latest
 PLAYGROUND_IMAGE=neuraville/playground:latest
 INFLUX_DB_IMAGE=influxdb:2.0.7
 GRAFANA_IMAGE=../third_party/visualizers/grafana
+
diff --git a/docker/base.Dockerfile b/docker/base.Dockerfile
index f56312028..abeb498e6 100644
--- a/docker/base.Dockerfile
+++ b/docker/base.Dockerfile
@@ -20,4 +20,5 @@ RUN pip3 install --upgrade pip && \
     pip3 install requests==2.27.1 && \
     pip3 install python-multipart==0.0.5 && \
     pip3 install typing_extensions==4.1.1 && \
+    pip3 install xxhash==3.4.1 && \
     pip3 install lz4==4.3.2
\ No newline at end of file
diff --git a/docker/playground.yml b/docker/playground.yml
index aaffb270d..76af7132e 100644
--- a/docker/playground.yml
+++ b/docker/playground.yml
@@ -5,47 +5,24 @@ networks:
     driver: bridge
 
 services:
-#  influxdb:
-#    image: ${INFLUX_DB_IMAGE}
-#    deploy:
-#      resources:
-#        limits:
-#          cpus: '1'
-#          memory: '2g'
-#    ports:
-#      - 8086:8086
-#    env_file:
-#      - ./.env
-#    volumes:
-#      - influxdb_data:/var/lib/influxdb
-##    healthcheck:
-##      test: "exit 0"
-#    networks:
-#      - net
-#    healthcheck:
-#      test: [ "CMD", "curl", "-f", "http://localhost:8086" ]
-#      interval: 10s
-#      timeout: 10s
-#      retries: 5
-#
-#  grafana:
-#    build: ${GRAFANA_IMAGE}
-#    deploy:
-#      resources:
-#        limits:
-#          cpus: '1'
-#          memory: '1g'
-#    env_file:
-#      - ./.env
-#    ports:
-#      - 6082:3000
-#    volumes:
-#      - grafana_data:/var/lib/grafana
-#    networks:
-#      - net
-#    depends_on:
-#      influxdb:
-#        condition: service_healthy
+  feagi:
+    image: ${FEAGI_IMAGE}
+    deploy:
+      resources:
+        limits:
+          cpus: '1'
+          memory: '2g'
+    ports:
+      - "8000:8000"
+      - "30000:30000"
+      - "40000-40050:40000-40050"
+    #      - "10000-10050:10000-10050" # ZMQ Port for Agent to Connect to Feagi
+    env_file:
+      - ./.env
+    volumes:
+      - ../src/:/opt/source-code/feagi/src
+    networks:
+      - net
 
   godot_bridge:
     image: ${BRIDGE_IMAGE}
@@ -65,41 +42,33 @@ services:
     depends_on:
       - feagi
 
-  webcam_javascript_controller:
-    image: ${WEBCAM_CONTROLLER_IMAGE}
-    deploy:
-      resources:
-        limits:
-          cpus: '1'
-          memory: '2g'
+  playground:
+    image: ${PLAYGROUND_IMAGE}
     ports:
-      - "9051:9051"
+      - "4000:4000"
     env_file:
       - ./.env
     privileged: true
     networks:
       - net
-    depends_on:
-      - feagi
 
-  feagi:
-    image: ${FEAGI_IMAGE}
+  webcam_javascript_controller:
+    image: ${WEBCAM_CONTROLLER_IMAGE}
     deploy:
       resources:
         limits:
           cpus: '1'
           memory: '2g'
     ports:
-      - "8000:8000"
-      - "30000:30000"
-      - "40000-40050:40000-40050"
-#      - "10000-10050:10000-10050" # ZMQ Port for Agent to Connect to Feagi
+      - "9051:9051"
     env_file:
       - ./.env
-    volumes:
-      - ../src/:/opt/source-code/feagi/src
+    privileged: true
     networks:
       - net
+    depends_on:
+      - feagi
+
 
   brain_pong_controller:
     image: ${BRAIN_PONG_IMAGE}
@@ -122,15 +91,47 @@ services:
       - net
 
 
-  playground:
-    image: ${PLAYGROUND_IMAGE}
-    ports:
-      - "4000:4000"
-    env_file:
-      - ./.env
-    privileged: true
-    networks:
-      - net
+#  influxdb:
+#    image: ${INFLUX_DB_IMAGE}
+#    deploy:
+#      resources:
+#        limits:
+#          cpus: '1'
+#          memory: '2g'
+#    ports:
+#      - 8086:8086
+#    env_file:
+#      - ./.env
+#    volumes:
+#      - influxdb_data:/var/lib/influxdb
+##    healthcheck:
+##      test: "exit 0"
+#    networks:
+#      - net
+#    healthcheck:
+#      test: [ "CMD", "curl", "-f", "http://localhost:8086" ]
+#      interval: 10s
+#      timeout: 10s
+#      retries: 5
+#
+#  grafana:
+#    build: ${GRAFANA_IMAGE}
+#    deploy:
+#      resources:
+#        limits:
+#          cpus: '1'
+#          memory: '1g'
+#    env_file:
+#      - ./.env
+#    ports:
+#      - 6082:3000
+#    volumes:
+#      - grafana_data:/var/lib/grafana
+#    networks:
+#      - net
+#    depends_on:
+#      influxdb:
+#        condition: service_healthy
 
 volumes:
   grafana_data:
diff --git a/peripherals/feagi_agent_core/feagi_agent/pns_gateway.py b/peripherals/feagi_agent_core/feagi_agent/pns_gateway.py
index 6b8a9b9d8..b1bd6fb31 100644
--- a/peripherals/feagi_agent_core/feagi_agent/pns_gateway.py
+++ b/peripherals/feagi_agent_core/feagi_agent/pns_gateway.py
@@ -23,6 +23,10 @@
 # Variable storage #
 raw_aptr = -1
 global_aptr_cortical_size = None
+global_ID_cortical_size = None
+full_list_dimension = []
+previous_genome_timestamp = 0
+genome_tracker = 0
 
 
 def generate_feagi_data(rgb, msg_counter, date, message_to_feagi):
@@ -44,12 +48,27 @@ def generate_feagi_data(rgb, msg_counter, date, message_to_feagi):
     return message_to_feagi
 
 
-def efferent_signaling(feagi_opu_channel):
+def append_sensory_data_for_feagi(sensory_category, sensory_data, message_to_feagi):
+    """
+    :param sensory_category: A name such as training, camera, IR, ultrasonic and so on.
+    :param sensory_data: The data of dict only
+    :param message_to_feagi: Use the existing dict to append
+    :return: the updated dict called `message_to_feagi`
+    """
+    if "data" not in message_to_feagi:
+        message_to_feagi["data"] = {}
+    if "sensory_data" not in message_to_feagi["data"]:
+        message_to_feagi["data"]["sensory_data"] = {}
+    message_to_feagi["data"]["sensory_data"][sensory_category] = sensory_data
+    return message_to_feagi
+
+
+def signals_from_feagi(feagi_opu_channel):
     """ get OPU from FEAGI """
     return router.fetch_feagi(feagi_opu_channel)
 
 
-def afferent_signaling(message_to_feagi, feagi_ipu_channel, agent_settings):
+def signals_to_feagi(message_to_feagi, feagi_ipu_channel, agent_settings):
     router.send_feagi(message_to_feagi, feagi_ipu_channel, agent_settings)
 
 
@@ -151,6 +170,10 @@ def check_aptr(get_size_for_aptr_cortical):
     return router.fetch_aptr(get_size_for_aptr_cortical)
 
 
+def check_id_size(get_size_for_ID):
+    return router.fetch_ID(get_size_for_ID)
+
+
 def grab_geometry():
     return router.fetch_geometry()
 
@@ -191,10 +214,10 @@ def obtain_data_type(data):
         return "Unknown"
 
 
-def obtain_snap_data(raw_frame, message_from_feagi, capabilities):
-    if "o_snap" in message_from_feagi["opu_data"]:
-        if message_from_feagi["opu_data"]["o_snap"]:
-            capabilities['camera']['snap'] = raw_frame
+def obtain_blink_data(raw_frame, message_from_feagi, capabilities):
+    if "o_blnk" in message_from_feagi["opu_data"]:
+        if message_from_feagi["opu_data"]["o_blnk"]:
+            capabilities['camera']['blink'] = raw_frame
     return capabilities
 
 
@@ -238,6 +261,17 @@ def pupil_control_update(message_from_feagi, capabilities):
     return capabilities
 
 
+def detect_ID_data(message_from_feagi):
+    """
+    :param message_from_feagi: Should be a dict from FEAGI data only
+    :return: Return the data that given by FEAGI
+    """
+    if "o___id" in message_from_feagi["opu_data"]:
+        if message_from_feagi["opu_data"]["o___id"]:
+            return message_from_feagi["opu_data"]["o___id"]
+    return {}
+
+
 def detect_genome_change(message_from_feagi):
     if "genome_changed" in message_from_feagi:
         if message_from_feagi["genome_changed"]:
@@ -248,3 +282,19 @@ def check_refresh_rate(message_from_feagi, current_second):
     if message_from_feagi is not None:
         return message_from_feagi['burst_frequency']
     return current_second
+
+
+def fetch_full_dimensions():
+    return router.fetch_cortical_dimensions()
+
+
+def check_genome_status(message_from_feagi):
+    global previous_genome_timestamp, genome_tracker
+    genome_changed = detect_genome_change(message_from_feagi)
+    if genome_changed != previous_genome_timestamp:
+        full_list_dimension = fetch_full_dimensions()
+        previous_genome_timestamp = message_from_feagi["genome_changed"]
+    current_tracker = obtain_genome_number(genome_tracker, message_from_feagi)
+    if genome_tracker != current_tracker:
+        full_list_dimension = fetch_full_dimensions()
+        genome_tracker = current_tracker
diff --git a/peripherals/feagi_agent_core/feagi_agent/retina.py b/peripherals/feagi_agent_core/feagi_agent/retina.py
index a567daa58..45d0b5981 100644
--- a/peripherals/feagi_agent_core/feagi_agent/retina.py
+++ b/peripherals/feagi_agent_core/feagi_agent/retina.py
@@ -23,6 +23,7 @@
 from feagi_agent import pns_gateway as pns
 
 genome_tracker = 0
+previous_genome_timestamp = 0
 
 
 def get_device_of_vision(device):
@@ -61,7 +62,7 @@ def vision_frame_capture(device, RGB_flag=True):
         return cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), datetime.now(), check
 
 
-def vision_region_coordinates(frame_width, frame_height, x1, x2, y1, y2, camera_index):
+def vision_region_coordinates(frame_width, frame_height, x1, x2, y1, y2, camera_index,size_list):
     """
     Calculate coordinates for nine different regions within a frame based on given percentages.
 
@@ -91,15 +92,24 @@ def vision_region_coordinates(frame_width, frame_height, x1, x2, y1, y2, camera_
     y2_prime = y1_prime + int((frame_height - y1_prime) * (y2 / 100))
 
     region_coordinates = dict()
-    region_coordinates[camera_index + 'TL'] = [0, 0, x1_prime, y1_prime]
-    region_coordinates[camera_index + 'TM'] = [x1_prime, 0, x2_prime, y1_prime]
-    region_coordinates[camera_index + 'TR'] = [x2_prime, 0, frame_width, y1_prime]
-    region_coordinates[camera_index + 'ML'] = [0, y1_prime, x1_prime, y2_prime]
-    region_coordinates[camera_index + '_C'] = [x1_prime, y1_prime, x2_prime, y2_prime]
-    region_coordinates[camera_index + 'MR'] = [x2_prime, y1_prime, frame_width, y2_prime]
-    region_coordinates[camera_index + 'LL'] = [0, y2_prime, x1_prime, frame_height]
-    region_coordinates[camera_index + 'LM'] = [x1_prime, y2_prime, x2_prime, frame_height]
-    region_coordinates[camera_index + 'LR'] = [x2_prime, y2_prime, frame_width, frame_height]
+    if (camera_index + 'TL') in size_list:
+        region_coordinates[camera_index + 'TL'] = [0, 0, x1_prime, y1_prime]
+    if (camera_index + 'TM') in size_list:
+        region_coordinates[camera_index + 'TM'] = [x1_prime, 0, x2_prime, y1_prime]
+    if (camera_index + 'TR') in size_list:
+        region_coordinates[camera_index + 'TR'] = [x2_prime, 0, frame_width, y1_prime]
+    if (camera_index + 'ML') in size_list:
+        region_coordinates[camera_index + 'ML'] = [0, y1_prime, x1_prime, y2_prime]
+    if (camera_index + '_C') in size_list:
+        region_coordinates[camera_index + '_C'] = [x1_prime, y1_prime, x2_prime, y2_prime]
+    if (camera_index + 'MR') in size_list:
+        region_coordinates[camera_index + 'MR'] = [x2_prime, y1_prime, frame_width, y2_prime]
+    if (camera_index + 'LL') in size_list:
+        region_coordinates[camera_index + 'LL'] = [0, y2_prime, x1_prime, frame_height]
+    if (camera_index + 'LM') in size_list:
+        region_coordinates[camera_index + 'LM'] = [x1_prime, y2_prime, x2_prime, frame_height]
+    if (camera_index + 'LR') in size_list:
+        region_coordinates[camera_index + 'LR'] = [x2_prime, y2_prime, frame_width, frame_height]
     # print("vision_region_coordinates time total: ", (datetime.now() - start_time).total_seconds())
     return region_coordinates
 
@@ -205,21 +215,21 @@ def change_detector_grayscale(previous, current, capabilities):
     # Using cv2.absdiff for optimized difference calculation
     if current.shape == previous.shape:
 
-        if capabilities['camera']['snap'] == []:
+        if len(capabilities['camera']['blink']) == 0:
             difference = cv2.absdiff(previous, current)
+            _, thresholded = cv2.threshold(difference, capabilities['camera']['iso_default'][0], capabilities['camera']['iso_default'][1], cv2.THRESH_TOZERO)
+            # thresholded = cv2.threshold(difference, capabilities['camera']['iso_default'][0],
+            #                             capabilities['camera']['iso_default'][1],
+            #                             cv2.THRESH_TRUNC)[1]
 
         else:
-            print("Snap!")
-            difference = cv2.absdiff(0, current)
-            print(current)
-
-        thresholded = cv2.threshold(difference, capabilities['camera']['iso_default'][0],
-                                    capabilities['camera']['iso_default'][1],
-                                    cv2.THRESH_TOZERO)[1]
-
-        thresholded = cv2.threshold(thresholded, capabilities['camera']['iso_default'][0],
-                                    capabilities['camera']['iso_default'][1],
-                                    cv2.THRESH_TOZERO_INV)[1]
+            # print("Blink!")
+            difference = current
+            # print(current)
+            thresholded = cv2.threshold(difference, capabilities['camera']['iso_default'][2],
+                                        capabilities['camera']['iso_default'][3],
+                                        cv2.THRESH_TOZERO )[1]
+        # cv2.imshow("center only", thresholded)
         # Convert to boolean array for significant changes
         significant_changes = thresholded > 0
 
@@ -249,25 +259,26 @@ def change_detector(previous, current, capabilities):
 
     # Using cv2.absdiff for optimized difference calculation
     if current.shape == previous.shape:
-        difference = cv2.absdiff(previous, current)
-        if capabilities['camera']['snap'] == []:
-            thresholded = cv2.threshold(difference, capabilities['camera']['iso_default'][0],
-                                        capabilities['camera']['iso_default'][1],
-                                        cv2.THRESH_BINARY)[1]
-            # Convert to boolean array for significant changes
-            significant_changes = thresholded > 0
+
+        if len(capabilities['camera']['blink']) == 0:
+            difference = cv2.absdiff(previous, current)
+            _, thresholded = cv2.threshold(difference, capabilities['camera']['iso_default'][0], capabilities['camera']['iso_default'][1], cv2.THRESH_TOZERO)
+            # thresholded = cv2.threshold(difference, capabilities['camera']['iso_default'][0],
+            #                             capabilities['camera']['iso_default'][1],
+            #                             cv2.THRESH_TRUNC)[1]
+
         else:
-            thresholded = cv2.threshold(difference, 0, 255,
-                                        cv2.THRESH_BINARY)[1]
-            # Convert to boolean array for significant changes
-            significant_changes = thresholded > 0
+            # print("Blink!")
+            difference = current
+            # print(current)
+            thresholded = cv2.threshold(difference, capabilities['camera']['iso_default'][2],
+                                        capabilities['camera']['iso_default'][3],
+                                        cv2.THRESH_TOZERO )[1]
 
-        # print("RGB signifcant change: ", significant_changes)
+        # Convert to boolean array for significant changes
+        significant_changes = thresholded > 0
 
         feagi_data = create_feagi_data(significant_changes, current, previous.shape)
-        #
-        # print("change_detector_optimized time total: ",
-        #       (datetime.now() - start_time).total_seconds())
     else:
         return {}
     return dict(feagi_data)
@@ -275,14 +286,17 @@ def change_detector(previous, current, capabilities):
 
 def detect_change_edge(raw_frame, capabilities, camera_index, resize_list, previous_frame_data,
                        rgb):
+
   if resize_list:
     region_coordinates = vision_region_coordinates(raw_frame.shape[1],
-                                                   raw_frame.shape[0], capabilities['camera'][
-                                                       'gaze_control'][0], capabilities['camera'][
-                                                       'gaze_control'][1],
-                                                   capabilities['camera']['pupil_control'][0],
-                                                   capabilities['camera']['pupil_control'][1],
-                                                   camera_index)
+                                                   raw_frame.shape[0], abs(capabilities['camera'][
+                                                       'gaze_control'][0]), abs(capabilities[
+                                                                                                                                                         'camera'][
+                                                       'gaze_control'][1]),
+                                                   abs(capabilities['camera']['pupil_control'][0]),
+                                                   abs(capabilities['camera']['pupil_control'][1]),
+                                                   camera_index,
+                                                   resize_list)
     segmented_frame_data = split_vision_regions(coordinates=region_coordinates,
                                                 raw_frame_data=raw_frame)
     compressed_data = dict()
@@ -326,9 +340,9 @@ def obtain_cortical_vision_size(camera_index, response):
             for fetch_name in items:
                 if fetch_name in name_from_data:
                     name = name_from_data.replace("iv", "")
-                    dimension_array = data[name_from_data]["dimensions"][0], \
-                                      data[name_from_data]["dimensions"][1], \
-                                      data[name_from_data]["dimensions"][2]
+                    dimension_array = data[name_from_data]["cortical_dimensions"][0], \
+                                      data[name_from_data]["cortical_dimensions"][1], \
+                                      data[name_from_data]["cortical_dimensions"][2]
                     size_list[name] = dimension_array
     return size_list
 
@@ -340,10 +354,10 @@ def update_size_list(capabilities):
     return capabilities
 
 
-def vision_progress(capabilities, previous_genome_timestamp, feagi_opu_channel, api_address,
+def vision_progress(capabilities, feagi_opu_channel, api_address,
                     feagi_settings, raw_frame):
-    global genome_tracker # horrible, worst in programming. TODO: FIX THIS
-    message_from_feagi = pns.efferent_signaling(feagi_opu_channel)
+    global genome_tracker, previous_genome_timestamp # horrible, worst in programming. TODO: FIX THIS
+    message_from_feagi = pns.signals_from_feagi(feagi_opu_channel)
     if message_from_feagi is not None:
         # OPU section STARTS
         # Obtain the size of aptr
@@ -370,14 +384,14 @@ def vision_progress(capabilities, previous_genome_timestamp, feagi_opu_channel,
         if genome_changed != previous_genome_timestamp:
             capabilities = update_size_list(capabilities)
             previous_genome_timestamp = message_from_feagi["genome_changed"]
-        capabilities = pns.obtain_snap_data(raw_frame, message_from_feagi, capabilities)
+        capabilities = pns.obtain_blink_data(raw_frame, message_from_feagi, capabilities)
         capabilities = pns.monitor_switch(message_from_feagi, capabilities)
         capabilities = pns.gaze_control_update(message_from_feagi, capabilities)
         capabilities = pns.pupil_control_update(message_from_feagi, capabilities)
         feagi_settings['feagi_burst_speed'] = pns.check_refresh_rate(message_from_feagi,
                                                                      feagi_settings[
                                                                          'feagi_burst_speed'])
-    return capabilities, previous_genome_timestamp, feagi_settings['feagi_burst_speed']
+    return capabilities, feagi_settings['feagi_burst_speed']
 
 
 def update_astype(data):
@@ -392,3 +406,20 @@ def RGB_list_to_ndarray(data, size):
 
 def flip_video(data):
     return cv2.flip(data, 1)
+
+
+def check_brightness(frame):
+
+    # Calculate the average pixel intensity (brightness)
+    average_intensity = cv2.mean(frame)[0]
+
+    # Define thresholds for brightness
+    brightness_threshold = 127  # Adjust this threshold as needed
+
+    # Check if the average intensity is above or below the threshold
+    if average_intensity > brightness_threshold:
+        return "Image is too bright"
+    elif average_intensity < brightness_threshold:
+        return "Image is too dark"
+    else:
+        return "Image is neither too bright nor too dark"
\ No newline at end of file
diff --git a/peripherals/feagi_agent_core/feagi_agent/router.py b/peripherals/feagi_agent_core/feagi_agent/router.py
index 22ab7bfb1..547a8f69b 100644
--- a/peripherals/feagi_agent_core/feagi_agent/router.py
+++ b/peripherals/feagi_agent_core/feagi_agent/router.py
@@ -140,6 +140,16 @@ def fetch_aptr(get_size_for_aptr_cortical):
         return 10
 
 
+def fetch_cortical_dimensions():
+    try:
+        list_dimesions = requests.\
+            get(global_api_address + '/v1/feagi/connectome/properties/dimensions').json()
+        return list_dimesions
+    except Exception as e:
+        print("e: ", e)
+        return []
+
+
 def fetch_geometry():
     return requests.get(global_api_address + '/v1/feagi/genome/cortical_area/geometry')
 
diff --git a/peripherals/feagi_agent_core/feagi_agent/trainer.py b/peripherals/feagi_agent_core/feagi_agent/trainer.py
new file mode 100644
index 000000000..3af4da4f6
--- /dev/null
+++ b/peripherals/feagi_agent_core/feagi_agent/trainer.py
@@ -0,0 +1,29 @@
+import os
+import re
+import cv2
+from feagi_agent import pns_gateway as pns
+
+
+def scan_the_folder(path_direction):
+    """
+    Generator to yield image files with specific pattern in filename.
+    Useful for filtering training images provided by the user.
+    Will ignore the file if it doesn't have #-#-# in the filename or isn't an image.
+    """
+    folder_path = path_direction
+    files = os.listdir(folder_path)
+    pattern = re.compile(r'\d+-\d+-\d+\..+')
+    image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp']
+    for filename in files:
+        if pattern.match(filename) and os.path.splitext(filename)[1].lower() in image_extensions:
+            id_message = dict()
+            name_only = os.path.splitext(filename)[0]
+            id_message[name_only] = 100
+            yield cv2.imread(path_direction + filename), id_message
+
+
+def id_training_with_image(message_to_feagi, name_id):
+    # Process for ID training
+    message_to_feagi = pns.append_sensory_data_for_feagi('training', name_id, message_to_feagi)
+    # Process ends for the ID training
+    return message_to_feagi
diff --git a/peripherals/feagi_agent_core/setup.cfg b/peripherals/feagi_agent_core/setup.cfg
index 57fe6464b..ad0f8e6c6 100755
--- a/peripherals/feagi_agent_core/setup.cfg
+++ b/peripherals/feagi_agent_core/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = feagi_agent
-version = 0.0.50
+version = 0.0.51
 author = Neuraville Inc.
 author_email = info@feagi.org
 description = Feagi agent to work with general and simulation robots
diff --git a/requirements.txt b/requirements.txt
index 5626142d3..dc3feee9e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -16,4 +16,5 @@ starlette~=0.17.1
 setuptools~=57.0.0
 websockets~=10.2
 lz4==4.3.2
+xxhash==3.4.1
 feagi_agent
diff --git a/src/api/api.py b/src/api/api.py
index da3c9926c..aeb079b9f 100644
--- a/src/api/api.py
+++ b/src/api/api.py
@@ -1,4 +1,4 @@
-# Copyright 2016-2022 The FEAGI Authors. All Rights Reserved.
+# Copyright 2016-2023 The FEAGI Authors. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -132,6 +132,7 @@ class NewCustomCorticalProperties(BaseModel):
     coordinates_2d: Optional[list] = [0, 0]
     coordinates_3d: list
     cortical_dimensions: list
+    sub_group_id: Optional[str] = ""
 
 
 # class NewCorticalProperties_old(BaseModel):
@@ -168,7 +169,6 @@ class NewCustomCorticalProperties(BaseModel):
 class UpdateCorticalProperties(BaseModel):
     cortical_id: str = Field(None, max_length=6, min_length=6)
     cortical_name: Optional[str]
-    cortical_group: Optional[str]
     cortical_neuron_per_vox_count: Optional[int]
     cortical_visibility: Optional[bool]
     cortical_coordinates: Optional[list]
@@ -189,6 +189,9 @@ class UpdateCorticalProperties(BaseModel):
     neuron_psp_uniform_distribution: Optional[bool]
     neuron_mp_charge_accumulation: Optional[bool]
     neuron_mp_driven_psp: Optional[bool]
+    neuron_longterm_mem_threshold: Optional[int]
+    neuron_lifespan_growth_rate: Optional[int]
+    neuron_init_lifespan: Optional[int]
 
 
 # class Network(BaseModel):
@@ -504,6 +507,7 @@ async def fetch_cortical_properties(cortical_area, response: Response):
                 "cortical_id": cortical_area,
                 "cortical_name": cortical_data['cortical_name'],
                 "cortical_group": cortical_data['group_id'],
+                "cortical_sub_group": cortical_data['sub_group_id'],
                 "cortical_neuron_per_vox_count": cortical_data['per_voxel_neuron_cnt'],
                 "cortical_visibility": cortical_data['visualization'],
                 "cortical_synaptic_attractivity": cortical_data['synapse_attractivity'],
@@ -540,6 +544,9 @@ async def fetch_cortical_properties(cortical_area, response: Response):
                 "neuron_psp_uniform_distribution": cortical_data['psp_uniform_distribution'],
                 "neuron_mp_charge_accumulation": cortical_data['mp_charge_accumulation'],
                 "neuron_mp_driven_psp": cortical_data['mp_driven_psp'],
+                "neuron_longterm_mem_threshold": cortical_data['longterm_mem_threshold'],
+                "neuron_lifespan_growth_rate": cortical_data['lifespan_growth_rate'],
+                "neuron_init_lifespan": cortical_data['init_lifespan'],
                 "transforming": False
             }
             if cortical_area in runtime_data.transforming_areas:
@@ -606,11 +613,18 @@ async def add_cortical_area_custom(new_custom_cortical_properties: NewCustomCort
         cortical_name = new_custom_cortical_properties.cortical_name
         coordinates_3d = new_custom_cortical_properties.coordinates_3d
         coordinates_2d = new_custom_cortical_properties.coordinates_2d
-        cortical_dimensions = new_custom_cortical_properties.cortical_dimensions
+        sub_group_id = new_custom_cortical_properties.sub_group_id
+        if "MEMORY" in sub_group_id:
+            is_memory = True
+            cortical_dimensions = [1, 1, 1]
+        else:
+            is_memory = False
+            cortical_dimensions = new_custom_cortical_properties.cortical_dimensions
         cortical_id = add_custom_cortical_area(cortical_name=cortical_name,
                                                coordinates_3d=coordinates_3d,
                                                coordinates_2d=coordinates_2d,
-                                               cortical_dimensions=cortical_dimensions)
+                                               cortical_dimensions=cortical_dimensions,
+                                               is_memory=is_memory)
         return JSONResponse(status_code=200, content={'cortical_id': cortical_id})
         # message = {'add_custom_cortical_area': message}
         # print("*" * 50 + "\n", message)
@@ -1097,6 +1111,25 @@ async def genome_append_circuit(circuit_name: str,
         print("API Error:", e)
 
 
+@app.api_route("/v1/feagi/genome/cortical_map_detailed", methods=['GET'], tags=["Genome"])
+async def connectome_detailed_cortical_map(response: Response):
+    try:
+        cortical_map = dict()
+        for cortical_area in runtime_data.genome["blueprint"]:
+            cortical_map[cortical_area] = dict()
+            for dst in runtime_data.genome["blueprint"][cortical_area]["cortical_mapping_dst"]:
+                cortical_map[cortical_area][dst] = list()
+                for mapping in runtime_data.genome["blueprint"][cortical_area]["cortical_mapping_dst"][dst]:
+                    cortical_map[cortical_area][dst].append(mapping)
+
+        response.status_code = status.HTTP_200_OK
+        return cortical_map
+
+    except Exception as e:
+        response.status_code = status.HTTP_422_UNPROCESSABLE_ENTITY
+        print("API Error:", e)
+
+
 @app.api_route("/v1/feagi/genome/cortical_map", methods=['GET'], tags=["Genome"])
 async def connectome_cortical_map(response: Response):
     try:
@@ -1765,6 +1798,7 @@ async def connectome_cortical_areas(response: Response):
             cortical_list[cortical_area] = {}
             cortical_list[cortical_area]["name"] = runtime_data.genome["blueprint"][cortical_area]["cortical_name"]
             cortical_list[cortical_area]["type"] = runtime_data.genome["blueprint"][cortical_area]["group_id"]
+            cortical_list[cortical_area]["sub_type"] = runtime_data.genome["blueprint"][cortical_area]["sub_group_id"]
             cortical_list[cortical_area]["position"] = []
 
         response.status_code = status.HTTP_200_OK
@@ -2202,17 +2236,36 @@ async def agent_deregisteration(agent_id: str, response: Response):
 # ######   System Endpoints #########
 # ###################################
 
+def human_readable_version(version):
+    print(version)
+    time_portion = str(version)[-10:]
+    reminder = str(version)[:-10]
+    human_readable_time = datetime.datetime.utcfromtimestamp(int(time_portion))
+    if reminder:
+        if int(reminder) == 0:
+            reminder = "C"
+        else:
+            reminder = "N"
+    else:
+        reminder = "N"
+    return reminder + '-' + human_readable_time.strftime("%Y-%m-%d %H:%M:%S UTC")
+
 
 @app.get("/v1/feagi/versions", tags=["System"])
 def get_versions():
-    all_versions = dict()
-    all_versions["feagi"] = __version__
-    for agent_id in runtime_data.agent_registry:
-        if agent_id not in all_versions:
-            all_versions[agent_id] = {}
-        all_versions[agent_id]["agent_version"] = runtime_data.agent_registry[agent_id]["agent_version"]
-        all_versions[agent_id]["controller_version"] = runtime_data.agent_registry[agent_id]["controller_version"]
-    return all_versions
+    try:
+        all_versions = dict()
+        all_versions["feagi"] = human_readable_version(__version__)
+        for agent_id in runtime_data.agent_registry:
+            if agent_id not in all_versions:
+                all_versions[agent_id] = {}
+            all_versions[agent_id]["agent_version"] = \
+                human_readable_version(runtime_data.agent_registry[agent_id]["agent_version"])
+            all_versions[agent_id]["controller_version"] = \
+                human_readable_version(runtime_data.agent_registry[agent_id]["controller_version"])
+        return all_versions
+    except Exception as e:
+        print(f"Error during version collection {e}")
 
 
 @app.get("/v1/feagi/health_check", tags=["System"])
diff --git a/src/api/message_processor.py b/src/api/message_processor.py
index ae107967b..91712ddb0 100644
--- a/src/api/message_processor.py
+++ b/src/api/message_processor.py
@@ -1,3 +1,18 @@
+# Copyright 2016-2023 The FEAGI Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+
 import datetime
 import json
 from inf.initialize import deploy_genome
diff --git a/src/evo/circuits/motor_pathway_m1.json b/src/evo/circuits/motor_pathway_m1.json
new file mode 100644
index 000000000..84e9f8060
--- /dev/null
+++ b/src/evo/circuits/motor_pathway_m1.json
@@ -0,0 +1,2239 @@
+{
+   "genome_id": "2022-07-10_21:53:10_961677_111111_G",
+   "version": "2.0",
+   "max_burst_count": 3,
+   "burst_delay": 0.025,
+   "max_age": 10000000,
+   "evolution_burst_count": 50,
+   "ipu_idle_threshold": 1000,
+   "plasticity_queue_depth": 3,
+   "lifespan_mgmt_interval": 10,
+   "neuron_morphologies": {
+      "decrease_filter_diagonal": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  1,
+                  1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "decrease_filter_diagonal2": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  2,
+                  1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "increase_filter_diagonal": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  1,
+                  -1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "increase_filter_diagonal2": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  2,
+                  -1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "to_block_[5, 7, 4]": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ],
+                  [
+                     5,
+                     7,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_one": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     3
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     3
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_two": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_three": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     1
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     1
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_four": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_five": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     1,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     5,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_one": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     3
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     3
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_two": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     2
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_three": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     1
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     1
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_four": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     2
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_five": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     3,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     7,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "motor_forward": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "motor_backward": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     1,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     3,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     5,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     7,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "y_consolidator": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ],
+                  [
+                     "*",
+                     "?",
+                     "*"
+                  ]
+               ]
+            ]
+         }
+      },
+      "intensity": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ],
+                  [
+                     0,
+                     0,
+                     "*"
+                  ]
+               ]
+            ]
+         }
+      },
+      "APT_low": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     7
+                  ],
+                  [
+                     0,
+                     0,
+                     8
+                  ]
+               ]
+            ]
+         }
+      },
+      "apt_high": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     2
+                  ],
+                  [
+                     0,
+                     0,
+                     2
+                  ]
+               ]
+            ]
+         }
+      },
+      "diagonal_proprio": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  1,
+                  1,
+                  0
+               ]
+            ]
+         }
+      },
+      "right_detect": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     7,
+                     "*",
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         }
+      },
+      "left_detect": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     "*",
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         }
+      },
+      "bbb3": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  -1,
+                  1,
+                  0
+               ]
+            ]
+         }
+      },
+      "ori_135_deg": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  -1,
+                  0
+               ],
+               [
+                  2,
+                  -2,
+                  0
+               ],
+               [
+                  3,
+                  -3,
+                  0
+               ],
+               [
+                  4,
+                  -4,
+                  0
+               ],
+               [
+                  5,
+                  -5,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "ori_115": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  -2,
+                  0
+               ],
+               [
+                  2,
+                  -4,
+                  0
+               ],
+               [
+                  3,
+                  -6,
+                  0
+               ],
+               [
+                  4,
+                  -9,
+                  0
+               ],
+               [
+                  5,
+                  -11,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "ori_0_deg": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  0,
+                  0
+               ],
+               [
+                  2,
+                  0,
+                  0
+               ],
+               [
+                  3,
+                  0,
+                  0
+               ],
+               [
+                  4,
+                  0,
+                  0
+               ]
+            ]
+         }
+      },
+      "ori_90_deg": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  0,
+                  1,
+                  0
+               ],
+               [
+                  0,
+                  2,
+                  0
+               ],
+               [
+                  0,
+                  3,
+                  0
+               ],
+               [
+                  0,
+                  4,
+                  0
+               ],
+               [
+                  0,
+                  5,
+                  0
+               ],
+               [
+                  0,
+                  6,
+                  0
+               ],
+               [
+                  0,
+                  7,
+                  0
+               ],
+               [
+                  0,
+                  8,
+                  0
+               ],
+               [
+                  0,
+                  9,
+                  0
+               ]
+            ]
+         }
+      },
+      "ori_45_deg": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  1,
+                  0
+               ],
+               [
+                  2,
+                  2,
+                  0
+               ],
+               [
+                  3,
+                  3,
+                  0
+               ],
+               [
+                  4,
+                  4,
+                  0
+               ],
+               [
+                  5,
+                  5,
+                  0
+               ],
+               [
+                  6,
+                  6,
+                  0
+               ],
+               [
+                  7,
+                  7,
+                  0
+               ],
+               [
+                  8,
+                  8,
+                  0
+               ]
+            ]
+         }
+      },
+      "ori_60_deg": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  1,
+                  0
+               ],
+               [
+                  1,
+                  2,
+                  0
+               ],
+               [
+                  2,
+                  3,
+                  0
+               ],
+               [
+                  2,
+                  4,
+                  0
+               ],
+               [
+                  3,
+                  5,
+                  0
+               ],
+               [
+                  3,
+                  6,
+                  0
+               ],
+               [
+                  4,
+                  7,
+                  0
+               ]
+            ]
+         }
+      },
+      "block_to_block": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "projector": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "memory": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "0-0-0_to_all": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ]
+               ]
+            ]
+         }
+      },
+      "all_to_0-0-0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ],
+                  [
+                     0,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         }
+      },
+      "all_to_all": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "?",
+                     "?",
+                     "?"
+                  ],
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ]
+               ]
+            ]
+         }
+      },
+      "lateral_+x": {
+         "parameters": {
+            "vectors": [
+               [
+                  1,
+                  0,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_-x": {
+         "parameters": {
+            "vectors": [
+               [
+                  -1,
+                  0,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_+y": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  1,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_-y": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  -1,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_+z": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_-z": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  -1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "randomizer": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "expander_x": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "reducer_x": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "lateral_pairs_x": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "tile": {
+         "parameters": {
+            "src_seed": [
+               16,
+               16,
+               1
+            ],
+            "src_pattern": [
+               [
+                  1,
+                  0
+               ],
+               [
+                  1,
+                  0
+               ],
+               [
+                  1,
+                  0
+               ]
+            ],
+            "mapper_morphology": "projector"
+         },
+         "type": "composite"
+      },
+      "0_0_0-_0_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-_0_0_0"
+      },
+      "0_0_0-1_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     1,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-1_0_0"
+      },
+      "0_0_0-2_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-2_0_0"
+      },
+      "0_0_0-3_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     3,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-3_0_0"
+      },
+      "0_0_0-4_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-4_0_0"
+      },
+      "0_0_0-5_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     5,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-5_0_0"
+      },
+      "0_0_0-6_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-6_0_0"
+      },
+      "0_0_0-7_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     7,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-7_0_0"
+      }
+   },
+   "species": {
+      "parents": {},
+      "species_id": "",
+      "class": "toy",
+      "brand": "gazebo",
+      "model": "smart_car"
+   },
+   "blueprint": {
+      "_____10c-___pwr-cx-subgrp-t": "",
+      "_____10c-___pwr-cx-_n_cnt-i": 1,
+      "_____10c-___pwr-cx-synatt-i": 100,
+      "_____10c-___pwr-cx-de_gen-f": 0.01,
+      "_____10c-___pwr-cx-pspuni-b": false,
+      "_____10c-___pwr-nx-pstcrm-f": 35,
+      "_____10c-___pwr-cx-dstmap-d": {},
+      "_____10c-___pwr-cx-___bbx-i": 1,
+      "_____10c-___pwr-cx-___bby-i": 1,
+      "_____10c-___pwr-cx-___bbz-i": 1,
+      "_____10c-___pwr-cx-rcordx-i": 10,
+      "_____10c-___pwr-cx-rcordy-i": 0,
+      "_____10c-___pwr-cx-rcordz-i": -20,
+      "_____10c-___pwr-cx-2dcorx-i": -319,
+      "_____10c-___pwr-cx-2dcory-i": -682,
+      "_____10c-___pwr-cx-gd_vis-b": true,
+      "_____10c-___pwr-nx-pstcr_-f": 500,
+      "_____10c-___pwr-nx-fire_t-f": 1,
+      "_____10c-___pwr-nx-refrac-i": 0,
+      "_____10c-___pwr-nx-leak_c-f": 10,
+      "_____10c-___pwr-nx-leak_v-f": 0,
+      "_____10c-___pwr-nx-c_fr_c-i": 3,
+      "_____10c-___pwr-nx-snooze-f": 0,
+      "_____10c-___pwr-nx-ftincx-f": 0,
+      "_____10c-___pwr-nx-ftincy-f": 0,
+      "_____10c-___pwr-nx-ftincz-f": 0,
+      "_____10c-___pwr-nx-fthlim-i": 0,
+      "_____10c-___pwr-nx-mp_acc-b": true,
+      "_____10c-___pwr-nx-mp_psp-b": false,
+      "_____10c-___pwr-cx-memory-b": false,
+      "_____10c-___pwr-cx-mem__t-i": 100,
+      "_____10c-___pwr-cx-mem_gr-i": 1,
+      "_____10c-___pwr-cx-mem_ls-i": 9,
+      "_____10c-___pwr-cx-__name-t": "Brain_Power",
+      "_____10c-___pwr-cx-_group-t": "CORE",
+      "_____10c-o__mot-cx-subgrp-t": "",
+      "_____10c-o__mot-cx-_n_cnt-i": 1,
+      "_____10c-o__mot-cx-synatt-i": 100,
+      "_____10c-o__mot-cx-de_gen-f": 0,
+      "_____10c-o__mot-cx-pspuni-b": false,
+      "_____10c-o__mot-nx-pstcrm-f": 35,
+      "_____10c-o__mot-cx-dstmap-d": {},
+      "_____10c-o__mot-cx-___bbx-i": 8,
+      "_____10c-o__mot-cx-___bby-i": 1,
+      "_____10c-o__mot-cx-___bbz-i": 1,
+      "_____10c-o__mot-cx-rcordx-i": -31,
+      "_____10c-o__mot-cx-rcordy-i": 0,
+      "_____10c-o__mot-cx-rcordz-i": -22,
+      "_____10c-o__mot-cx-2dcorx-i": 2083,
+      "_____10c-o__mot-cx-2dcory-i": 187,
+      "_____10c-o__mot-cx-gd_vis-b": true,
+      "_____10c-o__mot-nx-pstcr_-f": 6,
+      "_____10c-o__mot-nx-fire_t-f": 1,
+      "_____10c-o__mot-nx-refrac-i": 0,
+      "_____10c-o__mot-nx-leak_c-f": 0,
+      "_____10c-o__mot-nx-leak_v-f": 0,
+      "_____10c-o__mot-nx-c_fr_c-i": 0,
+      "_____10c-o__mot-nx-snooze-f": 0,
+      "_____10c-o__mot-nx-ftincx-f": 0,
+      "_____10c-o__mot-nx-ftincy-f": 0,
+      "_____10c-o__mot-nx-ftincz-f": 0,
+      "_____10c-o__mot-nx-fthlim-i": 0,
+      "_____10c-o__mot-nx-mp_acc-b": false,
+      "_____10c-o__mot-nx-mp_psp-b": false,
+      "_____10c-o__mot-cx-memory-b": false,
+      "_____10c-o__mot-cx-mem__t-i": 100,
+      "_____10c-o__mot-cx-mem_gr-i": 1,
+      "_____10c-o__mot-cx-mem_ls-i": 9,
+      "_____10c-o__mot-cx-__name-t": "motor_opu",
+      "_____10c-o__mot-cx-_group-t": "OPU",
+      "_____10c-m__lef-cx-subgrp-t": "",
+      "_____10c-m__lef-cx-_n_cnt-i": 1,
+      "_____10c-m__lef-cx-synatt-i": 100,
+      "_____10c-m__lef-cx-de_gen-f": 0,
+      "_____10c-m__lef-cx-pspuni-b": true,
+      "_____10c-m__lef-nx-pstcrm-f": 35,
+      "_____10c-m__lef-cx-dstmap-d": {},
+      "_____10c-m__lef-cx-___bbx-i": 1,
+      "_____10c-m__lef-cx-___bby-i": 1,
+      "_____10c-m__lef-cx-___bbz-i": 1,
+      "_____10c-m__lef-cx-rcordx-i": -48,
+      "_____10c-m__lef-cx-rcordy-i": 0,
+      "_____10c-m__lef-cx-rcordz-i": 5,
+      "_____10c-m__lef-cx-2dcorx-i": 887,
+      "_____10c-m__lef-cx-2dcory-i": 533,
+      "_____10c-m__lef-cx-gd_vis-b": true,
+      "_____10c-m__lef-nx-pstcr_-f": 5,
+      "_____10c-m__lef-nx-fire_t-f": 1,
+      "_____10c-m__lef-nx-refrac-i": 0,
+      "_____10c-m__lef-nx-leak_c-f": 10,
+      "_____10c-m__lef-nx-leak_v-f": 0,
+      "_____10c-m__lef-nx-c_fr_c-i": 3,
+      "_____10c-m__lef-nx-snooze-f": 0,
+      "_____10c-m__lef-nx-ftincx-f": 0,
+      "_____10c-m__lef-nx-ftincy-f": 0,
+      "_____10c-m__lef-nx-ftincz-f": 0,
+      "_____10c-m__lef-nx-fthlim-i": 0,
+      "_____10c-m__lef-nx-mp_acc-b": true,
+      "_____10c-m__lef-nx-mp_psp-b": false,
+      "_____10c-m__lef-cx-memory-b": false,
+      "_____10c-m__lef-cx-mem__t-i": 100,
+      "_____10c-m__lef-cx-mem_gr-i": 1,
+      "_____10c-m__lef-cx-mem_ls-i": 9,
+      "_____10c-m__lef-cx-__name-t": "turn_left",
+      "_____10c-m__lef-cx-_group-t": "CUSTOM",
+      "_____10c-m__rig-cx-subgrp-t": "",
+      "_____10c-m__rig-cx-_n_cnt-i": 1,
+      "_____10c-m__rig-cx-synatt-i": 100,
+      "_____10c-m__rig-cx-de_gen-f": 0,
+      "_____10c-m__rig-cx-pspuni-b": true,
+      "_____10c-m__rig-nx-pstcrm-f": 35,
+      "_____10c-m__rig-cx-dstmap-d": {},
+      "_____10c-m__rig-cx-___bbx-i": 1,
+      "_____10c-m__rig-cx-___bby-i": 1,
+      "_____10c-m__rig-cx-___bbz-i": 1,
+      "_____10c-m__rig-cx-rcordx-i": -28,
+      "_____10c-m__rig-cx-rcordy-i": 0,
+      "_____10c-m__rig-cx-rcordz-i": 5,
+      "_____10c-m__rig-cx-2dcorx-i": 896,
+      "_____10c-m__rig-cx-2dcory-i": 239,
+      "_____10c-m__rig-cx-gd_vis-b": true,
+      "_____10c-m__rig-nx-pstcr_-f": 5,
+      "_____10c-m__rig-nx-fire_t-f": 1,
+      "_____10c-m__rig-nx-refrac-i": 0,
+      "_____10c-m__rig-nx-leak_c-f": 10,
+      "_____10c-m__rig-nx-leak_v-f": 0,
+      "_____10c-m__rig-nx-c_fr_c-i": 3,
+      "_____10c-m__rig-nx-snooze-f": 0,
+      "_____10c-m__rig-nx-ftincx-f": 0,
+      "_____10c-m__rig-nx-ftincy-f": 0,
+      "_____10c-m__rig-nx-ftincz-f": 0,
+      "_____10c-m__rig-nx-fthlim-i": 0,
+      "_____10c-m__rig-nx-mp_acc-b": true,
+      "_____10c-m__rig-nx-mp_psp-b": false,
+      "_____10c-m__rig-cx-memory-b": false,
+      "_____10c-m__rig-cx-mem__t-i": 100,
+      "_____10c-m__rig-cx-mem_gr-i": 1,
+      "_____10c-m__rig-cx-mem_ls-i": 9,
+      "_____10c-m__rig-cx-__name-t": "turn_right",
+      "_____10c-m__rig-cx-_group-t": "CUSTOM",
+      "_____10c-m__for-cx-subgrp-t": "",
+      "_____10c-m__for-cx-_n_cnt-i": 1,
+      "_____10c-m__for-cx-synatt-i": 100,
+      "_____10c-m__for-cx-de_gen-f": 0,
+      "_____10c-m__for-cx-pspuni-b": true,
+      "_____10c-m__for-nx-pstcrm-f": 35,
+      "_____10c-m__for-cx-dstmap-d": {
+         "CRSMot": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ],
+         "CKQM2_": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ],
+         "CO4M3_": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ],
+         "CTGM4_": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-m__for-cx-___bbx-i": 1,
+      "_____10c-m__for-cx-___bby-i": 1,
+      "_____10c-m__for-cx-___bbz-i": 1,
+      "_____10c-m__for-cx-rcordx-i": -38,
+      "_____10c-m__for-cx-rcordy-i": 0,
+      "_____10c-m__for-cx-rcordz-i": 0,
+      "_____10c-m__for-cx-2dcorx-i": 894,
+      "_____10c-m__for-cx-2dcory-i": -204,
+      "_____10c-m__for-cx-gd_vis-b": true,
+      "_____10c-m__for-nx-pstcr_-f": 5,
+      "_____10c-m__for-nx-fire_t-f": 1,
+      "_____10c-m__for-nx-refrac-i": 0,
+      "_____10c-m__for-nx-leak_c-f": 10,
+      "_____10c-m__for-nx-leak_v-f": 0,
+      "_____10c-m__for-nx-c_fr_c-i": 3,
+      "_____10c-m__for-nx-snooze-f": 0,
+      "_____10c-m__for-nx-ftincx-f": 0,
+      "_____10c-m__for-nx-ftincy-f": 0,
+      "_____10c-m__for-nx-ftincz-f": 0,
+      "_____10c-m__for-nx-fthlim-i": 0,
+      "_____10c-m__for-nx-mp_acc-b": true,
+      "_____10c-m__for-nx-mp_psp-b": false,
+      "_____10c-m__for-cx-memory-b": false,
+      "_____10c-m__for-cx-mem__t-i": 100,
+      "_____10c-m__for-cx-mem_gr-i": 1,
+      "_____10c-m__for-cx-mem_ls-i": 9,
+      "_____10c-m__for-cx-__name-t": "forward",
+      "_____10c-m__for-cx-_group-t": "CUSTOM",
+      "_____10c-m__bac-cx-subgrp-t": "",
+      "_____10c-m__bac-cx-_n_cnt-i": 1,
+      "_____10c-m__bac-cx-synatt-i": 100,
+      "_____10c-m__bac-cx-de_gen-f": 0,
+      "_____10c-m__bac-cx-pspuni-b": true,
+      "_____10c-m__bac-nx-pstcrm-f": 35,
+      "_____10c-m__bac-cx-dstmap-d": {
+         "CLWM4_": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ],
+         "CJWM3_": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ],
+         "CKYM2_": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ],
+         "CIHMot": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-m__bac-cx-___bbx-i": 1,
+      "_____10c-m__bac-cx-___bby-i": 1,
+      "_____10c-m__bac-cx-___bbz-i": 1,
+      "_____10c-m__bac-cx-rcordx-i": -38,
+      "_____10c-m__bac-cx-rcordy-i": 0,
+      "_____10c-m__bac-cx-rcordz-i": 10,
+      "_____10c-m__bac-cx-2dcorx-i": 892,
+      "_____10c-m__bac-cx-2dcory-i": 859,
+      "_____10c-m__bac-cx-gd_vis-b": true,
+      "_____10c-m__bac-nx-pstcr_-f": 5,
+      "_____10c-m__bac-nx-fire_t-f": 1,
+      "_____10c-m__bac-nx-refrac-i": 0,
+      "_____10c-m__bac-nx-leak_c-f": 10,
+      "_____10c-m__bac-nx-leak_v-f": 0,
+      "_____10c-m__bac-nx-c_fr_c-i": 3,
+      "_____10c-m__bac-nx-snooze-f": 0,
+      "_____10c-m__bac-nx-ftincx-f": 0,
+      "_____10c-m__bac-nx-ftincy-f": 0,
+      "_____10c-m__bac-nx-ftincz-f": 0,
+      "_____10c-m__bac-nx-fthlim-i": 0,
+      "_____10c-m__bac-nx-mp_acc-b": true,
+      "_____10c-m__bac-nx-mp_psp-b": false,
+      "_____10c-m__bac-cx-memory-b": false,
+      "_____10c-m__bac-cx-mem__t-i": 100,
+      "_____10c-m__bac-cx-mem_gr-i": 1,
+      "_____10c-m__bac-cx-mem_ls-i": 9,
+      "_____10c-m__bac-cx-__name-t": "backward",
+      "_____10c-m__bac-cx-_group-t": "CUSTOM",
+      "_____10c-CRSMot-cx-subgrp-t": "",
+      "_____10c-CRSMot-cx-_n_cnt-i": 1,
+      "_____10c-CRSMot-cx-synatt-i": 100,
+      "_____10c-CRSMot-cx-de_gen-f": 0,
+      "_____10c-CRSMot-cx-pspuni-b": false,
+      "_____10c-CRSMot-nx-pstcrm-f": 99999,
+      "_____10c-CRSMot-cx-dstmap-d": {
+         "o__mot": [
+            [
+               "0_0_0-_0_0_0",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-CRSMot-cx-___bbx-i": 1,
+      "_____10c-CRSMot-cx-___bby-i": 1,
+      "_____10c-CRSMot-cx-___bbz-i": 1,
+      "_____10c-CRSMot-cx-rcordx-i": -50,
+      "_____10c-CRSMot-cx-rcordy-i": 0,
+      "_____10c-CRSMot-cx-rcordz-i": -14,
+      "_____10c-CRSMot-cx-2dcorx-i": 1503,
+      "_____10c-CRSMot-cx-2dcory-i": -284,
+      "_____10c-CRSMot-cx-gd_vis-b": true,
+      "_____10c-CRSMot-nx-pstcr_-f": 1,
+      "_____10c-CRSMot-nx-fire_t-f": 1,
+      "_____10c-CRSMot-nx-refrac-i": 0,
+      "_____10c-CRSMot-nx-leak_c-f": 0,
+      "_____10c-CRSMot-nx-leak_v-f": 0,
+      "_____10c-CRSMot-nx-c_fr_c-i": 0,
+      "_____10c-CRSMot-nx-snooze-f": 0,
+      "_____10c-CRSMot-nx-ftincx-f": 0,
+      "_____10c-CRSMot-nx-ftincy-f": 0,
+      "_____10c-CRSMot-nx-ftincz-f": 0,
+      "_____10c-CRSMot-nx-fthlim-i": 0,
+      "_____10c-CRSMot-nx-mp_acc-b": false,
+      "_____10c-CRSMot-nx-mp_psp-b": false,
+      "_____10c-CRSMot-cx-memory-b": false,
+      "_____10c-CRSMot-cx-mem__t-i": 100,
+      "_____10c-CRSMot-cx-mem_gr-i": 1,
+      "_____10c-CRSMot-cx-mem_ls-i": 9,
+      "_____10c-CRSMot-cx-__name-t": "M1_FW",
+      "_____10c-CRSMot-cx-_group-t": "CUSTOM",
+      "_____10c-CIHMot-cx-subgrp-t": "",
+      "_____10c-CIHMot-cx-_n_cnt-i": 1,
+      "_____10c-CIHMot-cx-synatt-i": 100,
+      "_____10c-CIHMot-cx-de_gen-f": 0,
+      "_____10c-CIHMot-cx-pspuni-b": false,
+      "_____10c-CIHMot-nx-pstcrm-f": 99999,
+      "_____10c-CIHMot-cx-dstmap-d": {
+         "o__mot": [
+            [
+               "0_0_0-1_0_0",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-CIHMot-cx-___bbx-i": 1,
+      "_____10c-CIHMot-cx-___bby-i": 1,
+      "_____10c-CIHMot-cx-___bbz-i": 1,
+      "_____10c-CIHMot-cx-rcordx-i": -45,
+      "_____10c-CIHMot-cx-rcordy-i": 0,
+      "_____10c-CIHMot-cx-rcordz-i": -14,
+      "_____10c-CIHMot-cx-2dcorx-i": 1510,
+      "_____10c-CIHMot-cx-2dcory-i": -106,
+      "_____10c-CIHMot-cx-gd_vis-b": true,
+      "_____10c-CIHMot-nx-pstcr_-f": 1,
+      "_____10c-CIHMot-nx-fire_t-f": 1,
+      "_____10c-CIHMot-nx-refrac-i": 0,
+      "_____10c-CIHMot-nx-leak_c-f": 0,
+      "_____10c-CIHMot-nx-leak_v-f": 0,
+      "_____10c-CIHMot-nx-c_fr_c-i": 0,
+      "_____10c-CIHMot-nx-snooze-f": 0,
+      "_____10c-CIHMot-nx-ftincx-f": 0,
+      "_____10c-CIHMot-nx-ftincy-f": 0,
+      "_____10c-CIHMot-nx-ftincz-f": 0,
+      "_____10c-CIHMot-nx-fthlim-i": 0,
+      "_____10c-CIHMot-nx-mp_acc-b": false,
+      "_____10c-CIHMot-nx-mp_psp-b": false,
+      "_____10c-CIHMot-cx-memory-b": false,
+      "_____10c-CIHMot-cx-mem__t-i": 100,
+      "_____10c-CIHMot-cx-mem_gr-i": 1,
+      "_____10c-CIHMot-cx-mem_ls-i": 9,
+      "_____10c-CIHMot-cx-__name-t": "M1_BW",
+      "_____10c-CIHMot-cx-_group-t": "CUSTOM",
+      "_____10c-CKQM2_-cx-subgrp-t": "",
+      "_____10c-CKQM2_-cx-_n_cnt-i": 1,
+      "_____10c-CKQM2_-cx-synatt-i": 100,
+      "_____10c-CKQM2_-cx-de_gen-f": 0,
+      "_____10c-CKQM2_-cx-pspuni-b": false,
+      "_____10c-CKQM2_-nx-pstcrm-f": 99999,
+      "_____10c-CKQM2_-cx-dstmap-d": {
+         "o__mot": [
+            [
+               "0_0_0-2_0_0",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-CKQM2_-cx-___bbx-i": 1,
+      "_____10c-CKQM2_-cx-___bby-i": 1,
+      "_____10c-CKQM2_-cx-___bbz-i": 1,
+      "_____10c-CKQM2_-cx-rcordx-i": -40,
+      "_____10c-CKQM2_-cx-rcordy-i": 0,
+      "_____10c-CKQM2_-cx-rcordz-i": -14,
+      "_____10c-CKQM2_-cx-2dcorx-i": 1509,
+      "_____10c-CKQM2_-cx-2dcory-i": 81,
+      "_____10c-CKQM2_-cx-gd_vis-b": true,
+      "_____10c-CKQM2_-nx-pstcr_-f": 1,
+      "_____10c-CKQM2_-nx-fire_t-f": 1,
+      "_____10c-CKQM2_-nx-refrac-i": 0,
+      "_____10c-CKQM2_-nx-leak_c-f": 0,
+      "_____10c-CKQM2_-nx-leak_v-f": 0,
+      "_____10c-CKQM2_-nx-c_fr_c-i": 0,
+      "_____10c-CKQM2_-nx-snooze-f": 0,
+      "_____10c-CKQM2_-nx-ftincx-f": 0,
+      "_____10c-CKQM2_-nx-ftincy-f": 0,
+      "_____10c-CKQM2_-nx-ftincz-f": 0,
+      "_____10c-CKQM2_-nx-fthlim-i": 0,
+      "_____10c-CKQM2_-nx-mp_acc-b": false,
+      "_____10c-CKQM2_-nx-mp_psp-b": false,
+      "_____10c-CKQM2_-cx-memory-b": false,
+      "_____10c-CKQM2_-cx-mem__t-i": 100,
+      "_____10c-CKQM2_-cx-mem_gr-i": 1,
+      "_____10c-CKQM2_-cx-mem_ls-i": 9,
+      "_____10c-CKQM2_-cx-__name-t": "M2_FW",
+      "_____10c-CKQM2_-cx-_group-t": "CUSTOM",
+      "_____10c-CKYM2_-cx-subgrp-t": "",
+      "_____10c-CKYM2_-cx-_n_cnt-i": 1,
+      "_____10c-CKYM2_-cx-synatt-i": 100,
+      "_____10c-CKYM2_-cx-de_gen-f": 0,
+      "_____10c-CKYM2_-cx-pspuni-b": false,
+      "_____10c-CKYM2_-nx-pstcrm-f": 99999,
+      "_____10c-CKYM2_-cx-dstmap-d": {
+         "o__mot": [
+            [
+               "0_0_0-3_0_0",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-CKYM2_-cx-___bbx-i": 1,
+      "_____10c-CKYM2_-cx-___bby-i": 1,
+      "_____10c-CKYM2_-cx-___bbz-i": 1,
+      "_____10c-CKYM2_-cx-rcordx-i": -35,
+      "_____10c-CKYM2_-cx-rcordy-i": 0,
+      "_____10c-CKYM2_-cx-rcordz-i": -14,
+      "_____10c-CKYM2_-cx-2dcorx-i": 1518,
+      "_____10c-CKYM2_-cx-2dcory-i": 239,
+      "_____10c-CKYM2_-cx-gd_vis-b": true,
+      "_____10c-CKYM2_-nx-pstcr_-f": 1,
+      "_____10c-CKYM2_-nx-fire_t-f": 1,
+      "_____10c-CKYM2_-nx-refrac-i": 0,
+      "_____10c-CKYM2_-nx-leak_c-f": 0,
+      "_____10c-CKYM2_-nx-leak_v-f": 0,
+      "_____10c-CKYM2_-nx-c_fr_c-i": 0,
+      "_____10c-CKYM2_-nx-snooze-f": 0,
+      "_____10c-CKYM2_-nx-ftincx-f": 0,
+      "_____10c-CKYM2_-nx-ftincy-f": 0,
+      "_____10c-CKYM2_-nx-ftincz-f": 0,
+      "_____10c-CKYM2_-nx-fthlim-i": 0,
+      "_____10c-CKYM2_-nx-mp_acc-b": false,
+      "_____10c-CKYM2_-nx-mp_psp-b": false,
+      "_____10c-CKYM2_-cx-memory-b": false,
+      "_____10c-CKYM2_-cx-mem__t-i": 100,
+      "_____10c-CKYM2_-cx-mem_gr-i": 1,
+      "_____10c-CKYM2_-cx-mem_ls-i": 9,
+      "_____10c-CKYM2_-cx-__name-t": "M2_BW",
+      "_____10c-CKYM2_-cx-_group-t": "CUSTOM",
+      "_____10c-CO4M3_-cx-subgrp-t": "",
+      "_____10c-CO4M3_-cx-_n_cnt-i": 1,
+      "_____10c-CO4M3_-cx-synatt-i": 100,
+      "_____10c-CO4M3_-cx-de_gen-f": 0,
+      "_____10c-CO4M3_-cx-pspuni-b": false,
+      "_____10c-CO4M3_-nx-pstcrm-f": 99999,
+      "_____10c-CO4M3_-cx-dstmap-d": {
+         "o__mot": [
+            [
+               "0_0_0-4_0_0",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-CO4M3_-cx-___bbx-i": 1,
+      "_____10c-CO4M3_-cx-___bby-i": 1,
+      "_____10c-CO4M3_-cx-___bbz-i": 1,
+      "_____10c-CO4M3_-cx-rcordx-i": -30,
+      "_____10c-CO4M3_-cx-rcordy-i": 0,
+      "_____10c-CO4M3_-cx-rcordz-i": -14,
+      "_____10c-CO4M3_-cx-2dcorx-i": 1517,
+      "_____10c-CO4M3_-cx-2dcory-i": 403,
+      "_____10c-CO4M3_-cx-gd_vis-b": true,
+      "_____10c-CO4M3_-nx-pstcr_-f": 1,
+      "_____10c-CO4M3_-nx-fire_t-f": 1,
+      "_____10c-CO4M3_-nx-refrac-i": 0,
+      "_____10c-CO4M3_-nx-leak_c-f": 0,
+      "_____10c-CO4M3_-nx-leak_v-f": 0,
+      "_____10c-CO4M3_-nx-c_fr_c-i": 0,
+      "_____10c-CO4M3_-nx-snooze-f": 0,
+      "_____10c-CO4M3_-nx-ftincx-f": 0,
+      "_____10c-CO4M3_-nx-ftincy-f": 0,
+      "_____10c-CO4M3_-nx-ftincz-f": 0,
+      "_____10c-CO4M3_-nx-fthlim-i": 0,
+      "_____10c-CO4M3_-nx-mp_acc-b": false,
+      "_____10c-CO4M3_-nx-mp_psp-b": false,
+      "_____10c-CO4M3_-cx-memory-b": false,
+      "_____10c-CO4M3_-cx-mem__t-i": 100,
+      "_____10c-CO4M3_-cx-mem_gr-i": 1,
+      "_____10c-CO4M3_-cx-mem_ls-i": 9,
+      "_____10c-CO4M3_-cx-__name-t": "M3_FW",
+      "_____10c-CO4M3_-cx-_group-t": "CUSTOM",
+      "_____10c-CJWM3_-cx-subgrp-t": "",
+      "_____10c-CJWM3_-cx-_n_cnt-i": 1,
+      "_____10c-CJWM3_-cx-synatt-i": 100,
+      "_____10c-CJWM3_-cx-de_gen-f": 0,
+      "_____10c-CJWM3_-cx-pspuni-b": false,
+      "_____10c-CJWM3_-nx-pstcrm-f": 99999,
+      "_____10c-CJWM3_-cx-dstmap-d": {
+         "o__mot": [
+            [
+               "0_0_0-5_0_0",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-CJWM3_-cx-___bbx-i": 1,
+      "_____10c-CJWM3_-cx-___bby-i": 1,
+      "_____10c-CJWM3_-cx-___bbz-i": 1,
+      "_____10c-CJWM3_-cx-rcordx-i": -25,
+      "_____10c-CJWM3_-cx-rcordy-i": 0,
+      "_____10c-CJWM3_-cx-rcordz-i": -14,
+      "_____10c-CJWM3_-cx-2dcorx-i": 1514,
+      "_____10c-CJWM3_-cx-2dcory-i": 519,
+      "_____10c-CJWM3_-cx-gd_vis-b": true,
+      "_____10c-CJWM3_-nx-pstcr_-f": 1,
+      "_____10c-CJWM3_-nx-fire_t-f": 1,
+      "_____10c-CJWM3_-nx-refrac-i": 0,
+      "_____10c-CJWM3_-nx-leak_c-f": 0,
+      "_____10c-CJWM3_-nx-leak_v-f": 0,
+      "_____10c-CJWM3_-nx-c_fr_c-i": 0,
+      "_____10c-CJWM3_-nx-snooze-f": 0,
+      "_____10c-CJWM3_-nx-ftincx-f": 0,
+      "_____10c-CJWM3_-nx-ftincy-f": 0,
+      "_____10c-CJWM3_-nx-ftincz-f": 0,
+      "_____10c-CJWM3_-nx-fthlim-i": 0,
+      "_____10c-CJWM3_-nx-mp_acc-b": false,
+      "_____10c-CJWM3_-nx-mp_psp-b": false,
+      "_____10c-CJWM3_-cx-memory-b": false,
+      "_____10c-CJWM3_-cx-mem__t-i": 100,
+      "_____10c-CJWM3_-cx-mem_gr-i": 1,
+      "_____10c-CJWM3_-cx-mem_ls-i": 9,
+      "_____10c-CJWM3_-cx-__name-t": "M3_BW",
+      "_____10c-CJWM3_-cx-_group-t": "CUSTOM",
+      "_____10c-CTGM4_-cx-subgrp-t": "",
+      "_____10c-CTGM4_-cx-_n_cnt-i": 1,
+      "_____10c-CTGM4_-cx-synatt-i": 100,
+      "_____10c-CTGM4_-cx-de_gen-f": 0,
+      "_____10c-CTGM4_-cx-pspuni-b": false,
+      "_____10c-CTGM4_-nx-pstcrm-f": 99999,
+      "_____10c-CTGM4_-cx-dstmap-d": {
+         "o__mot": [
+            [
+               "0_0_0-6_0_0",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-CTGM4_-cx-___bbx-i": 1,
+      "_____10c-CTGM4_-cx-___bby-i": 1,
+      "_____10c-CTGM4_-cx-___bbz-i": 1,
+      "_____10c-CTGM4_-cx-rcordx-i": -20,
+      "_____10c-CTGM4_-cx-rcordy-i": 0,
+      "_____10c-CTGM4_-cx-rcordz-i": -14,
+      "_____10c-CTGM4_-cx-2dcorx-i": 1516,
+      "_____10c-CTGM4_-cx-2dcory-i": 670,
+      "_____10c-CTGM4_-cx-gd_vis-b": true,
+      "_____10c-CTGM4_-nx-pstcr_-f": 1,
+      "_____10c-CTGM4_-nx-fire_t-f": 1,
+      "_____10c-CTGM4_-nx-refrac-i": 0,
+      "_____10c-CTGM4_-nx-leak_c-f": 0,
+      "_____10c-CTGM4_-nx-leak_v-f": 0,
+      "_____10c-CTGM4_-nx-c_fr_c-i": 0,
+      "_____10c-CTGM4_-nx-snooze-f": 0,
+      "_____10c-CTGM4_-nx-ftincx-f": 0,
+      "_____10c-CTGM4_-nx-ftincy-f": 0,
+      "_____10c-CTGM4_-nx-ftincz-f": 0,
+      "_____10c-CTGM4_-nx-fthlim-i": 0,
+      "_____10c-CTGM4_-nx-mp_acc-b": false,
+      "_____10c-CTGM4_-nx-mp_psp-b": false,
+      "_____10c-CTGM4_-cx-memory-b": false,
+      "_____10c-CTGM4_-cx-mem__t-i": 100,
+      "_____10c-CTGM4_-cx-mem_gr-i": 1,
+      "_____10c-CTGM4_-cx-mem_ls-i": 9,
+      "_____10c-CTGM4_-cx-__name-t": "M4_FW",
+      "_____10c-CTGM4_-cx-_group-t": "CUSTOM",
+      "_____10c-CLWM4_-cx-subgrp-t": "",
+      "_____10c-CLWM4_-cx-_n_cnt-i": 1,
+      "_____10c-CLWM4_-cx-synatt-i": 100,
+      "_____10c-CLWM4_-cx-de_gen-f": 0,
+      "_____10c-CLWM4_-cx-pspuni-b": false,
+      "_____10c-CLWM4_-nx-pstcrm-f": 99999,
+      "_____10c-CLWM4_-cx-dstmap-d": {
+         "o__mot": [
+            [
+               "0_0_0-7_0_0",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-CLWM4_-cx-___bbx-i": 1,
+      "_____10c-CLWM4_-cx-___bby-i": 1,
+      "_____10c-CLWM4_-cx-___bbz-i": 1,
+      "_____10c-CLWM4_-cx-rcordx-i": -15,
+      "_____10c-CLWM4_-cx-rcordy-i": 0,
+      "_____10c-CLWM4_-cx-rcordz-i": -14,
+      "_____10c-CLWM4_-cx-2dcorx-i": 1520,
+      "_____10c-CLWM4_-cx-2dcory-i": 825,
+      "_____10c-CLWM4_-cx-gd_vis-b": true,
+      "_____10c-CLWM4_-nx-pstcr_-f": 1,
+      "_____10c-CLWM4_-nx-fire_t-f": 1,
+      "_____10c-CLWM4_-nx-refrac-i": 0,
+      "_____10c-CLWM4_-nx-leak_c-f": 0,
+      "_____10c-CLWM4_-nx-leak_v-f": 0,
+      "_____10c-CLWM4_-nx-c_fr_c-i": 0,
+      "_____10c-CLWM4_-nx-snooze-f": 0,
+      "_____10c-CLWM4_-nx-ftincx-f": 0,
+      "_____10c-CLWM4_-nx-ftincy-f": 0,
+      "_____10c-CLWM4_-nx-ftincz-f": 0,
+      "_____10c-CLWM4_-nx-fthlim-i": 0,
+      "_____10c-CLWM4_-nx-mp_acc-b": false,
+      "_____10c-CLWM4_-nx-mp_psp-b": false,
+      "_____10c-CLWM4_-cx-memory-b": false,
+      "_____10c-CLWM4_-cx-mem__t-i": 100,
+      "_____10c-CLWM4_-cx-mem_gr-i": 1,
+      "_____10c-CLWM4_-cx-mem_ls-i": 9,
+      "_____10c-CLWM4_-cx-__name-t": "M4_BW",
+      "_____10c-CLWM4_-cx-_group-t": "CUSTOM"
+   }
+}
\ No newline at end of file
diff --git a/src/evo/circuits/visual_pathway_v1.json b/src/evo/circuits/visual_pathway_v1.json
new file mode 100644
index 000000000..3cb64d5ed
--- /dev/null
+++ b/src/evo/circuits/visual_pathway_v1.json
@@ -0,0 +1,1849 @@
+{
+   "genome_id": "2022-07-10_21:53:10_961677_111111_G",
+   "version": "2.0",
+   "max_burst_count": 3,
+   "burst_delay": 0.025,
+   "max_age": 10000000,
+   "evolution_burst_count": 50,
+   "ipu_idle_threshold": 1000,
+   "plasticity_queue_depth": 3,
+   "lifespan_mgmt_interval": 10,
+   "neuron_morphologies": {
+      "decrease_filter_diagonal": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  1,
+                  1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "decrease_filter_diagonal2": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  2,
+                  1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "increase_filter_diagonal": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  1,
+                  -1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "increase_filter_diagonal2": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  2,
+                  -1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "to_block_[5, 7, 4]": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ],
+                  [
+                     5,
+                     7,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_one": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     3
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     3
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_two": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_three": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     1
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     1
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_four": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_left_level_five": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     1,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     5,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_one": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     3
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     3
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_two": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     1,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     2
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_three": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     1
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     2,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     1
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_four": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     2
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     3,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     2
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "turn_right_level_five": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     3,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     4,
+                     0,
+                     0
+                  ],
+                  [
+                     7,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "motor_forward": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "motor_backward": {
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     1,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     3,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     5,
+                     0,
+                     4
+                  ]
+               ],
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     7,
+                     0,
+                     4
+                  ]
+               ]
+            ]
+         },
+         "type": "patterns"
+      },
+      "y_consolidator": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ],
+                  [
+                     "*",
+                     "?",
+                     "*"
+                  ]
+               ]
+            ]
+         }
+      },
+      "intensity": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ],
+                  [
+                     0,
+                     0,
+                     "*"
+                  ]
+               ]
+            ]
+         }
+      },
+      "APT_low": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     7
+                  ],
+                  [
+                     0,
+                     0,
+                     8
+                  ]
+               ]
+            ]
+         }
+      },
+      "apt_high": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     2
+                  ],
+                  [
+                     0,
+                     0,
+                     2
+                  ]
+               ]
+            ]
+         }
+      },
+      "diagonal_proprio": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  1,
+                  1,
+                  0
+               ]
+            ]
+         }
+      },
+      "right_detect": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     7,
+                     "*",
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         }
+      },
+      "left_detect": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     "*",
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         }
+      },
+      "bbb3": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  -1,
+                  1,
+                  0
+               ]
+            ]
+         }
+      },
+      "ori_135_deg": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  -1,
+                  0
+               ],
+               [
+                  2,
+                  -2,
+                  0
+               ],
+               [
+                  3,
+                  -3,
+                  0
+               ],
+               [
+                  4,
+                  -4,
+                  0
+               ],
+               [
+                  5,
+                  -5,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "ori_115": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  -2,
+                  0
+               ],
+               [
+                  2,
+                  -4,
+                  0
+               ],
+               [
+                  3,
+                  -6,
+                  0
+               ],
+               [
+                  4,
+                  -9,
+                  0
+               ],
+               [
+                  5,
+                  -11,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "ori_0_deg": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  0,
+                  0
+               ],
+               [
+                  2,
+                  0,
+                  0
+               ],
+               [
+                  3,
+                  0,
+                  0
+               ],
+               [
+                  4,
+                  0,
+                  0
+               ]
+            ]
+         }
+      },
+      "ori_90_deg": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  0,
+                  1,
+                  0
+               ],
+               [
+                  0,
+                  2,
+                  0
+               ],
+               [
+                  0,
+                  3,
+                  0
+               ],
+               [
+                  0,
+                  4,
+                  0
+               ],
+               [
+                  0,
+                  5,
+                  0
+               ],
+               [
+                  0,
+                  6,
+                  0
+               ],
+               [
+                  0,
+                  7,
+                  0
+               ],
+               [
+                  0,
+                  8,
+                  0
+               ],
+               [
+                  0,
+                  9,
+                  0
+               ]
+            ]
+         }
+      },
+      "ori_45_deg": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  1,
+                  0
+               ],
+               [
+                  2,
+                  2,
+                  0
+               ],
+               [
+                  3,
+                  3,
+                  0
+               ],
+               [
+                  4,
+                  4,
+                  0
+               ],
+               [
+                  5,
+                  5,
+                  0
+               ],
+               [
+                  6,
+                  6,
+                  0
+               ],
+               [
+                  7,
+                  7,
+                  0
+               ],
+               [
+                  8,
+                  8,
+                  0
+               ]
+            ]
+         }
+      },
+      "ori_60_deg": {
+         "type": "vectors",
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ],
+               [
+                  1,
+                  1,
+                  0
+               ],
+               [
+                  1,
+                  2,
+                  0
+               ],
+               [
+                  2,
+                  3,
+                  0
+               ],
+               [
+                  2,
+                  4,
+                  0
+               ],
+               [
+                  3,
+                  5,
+                  0
+               ],
+               [
+                  3,
+                  6,
+                  0
+               ],
+               [
+                  4,
+                  7,
+                  0
+               ]
+            ]
+         }
+      },
+      "block_to_block": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "projector": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "memory": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "0-0-0_to_all": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ]
+               ]
+            ]
+         }
+      },
+      "all_to_0-0-0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ],
+                  [
+                     0,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         }
+      },
+      "all_to_all": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     "?",
+                     "?",
+                     "?"
+                  ],
+                  [
+                     "*",
+                     "*",
+                     "*"
+                  ]
+               ]
+            ]
+         }
+      },
+      "lateral_+x": {
+         "parameters": {
+            "vectors": [
+               [
+                  1,
+                  0,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_-x": {
+         "parameters": {
+            "vectors": [
+               [
+                  -1,
+                  0,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_+y": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  1,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_-y": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  -1,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_+z": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_-z": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  -1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "randomizer": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "expander_x": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "reducer_x": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "lateral_pairs_x": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "tile": {
+         "parameters": {
+            "src_seed": [
+               16,
+               16,
+               1
+            ],
+            "src_pattern": [
+               [
+                  1,
+                  0
+               ],
+               [
+                  1,
+                  0
+               ],
+               [
+                  1,
+                  0
+               ]
+            ],
+            "mapper_morphology": "projector"
+         },
+         "type": "composite"
+      },
+      "0_0_0-_0_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-_0_0_0"
+      },
+      "0_0_0-1_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     1,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-1_0_0"
+      },
+      "0_0_0-2_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-2_0_0"
+      },
+      "0_0_0-3_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     3,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-3_0_0"
+      },
+      "0_0_0-4_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-4_0_0"
+      },
+      "0_0_0-5_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     5,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-5_0_0"
+      },
+      "0_0_0-6_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-6_0_0"
+      },
+      "0_0_0-7_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     7,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-7_0_0"
+      }
+   },
+   "species": {
+      "parents": {},
+      "species_id": "",
+      "class": "toy",
+      "brand": "gazebo",
+      "model": "smart_car"
+   },
+   "blueprint": {
+      "_____10c-___pwr-cx-subgrp-t": "",
+      "_____10c-___pwr-cx-_n_cnt-i": 1,
+      "_____10c-___pwr-cx-synatt-i": 100,
+      "_____10c-___pwr-cx-de_gen-f": 0.01,
+      "_____10c-___pwr-cx-pspuni-b": false,
+      "_____10c-___pwr-nx-pstcrm-f": 35,
+      "_____10c-___pwr-cx-dstmap-d": {},
+      "_____10c-___pwr-cx-___bbx-i": 1,
+      "_____10c-___pwr-cx-___bby-i": 1,
+      "_____10c-___pwr-cx-___bbz-i": 1,
+      "_____10c-___pwr-cx-rcordx-i": 10,
+      "_____10c-___pwr-cx-rcordy-i": 0,
+      "_____10c-___pwr-cx-rcordz-i": -20,
+      "_____10c-___pwr-cx-2dcorx-i": -319,
+      "_____10c-___pwr-cx-2dcory-i": -682,
+      "_____10c-___pwr-cx-gd_vis-b": true,
+      "_____10c-___pwr-nx-pstcr_-f": 500,
+      "_____10c-___pwr-nx-fire_t-f": 1,
+      "_____10c-___pwr-nx-refrac-i": 0,
+      "_____10c-___pwr-nx-leak_c-f": 10,
+      "_____10c-___pwr-nx-leak_v-f": 0,
+      "_____10c-___pwr-nx-c_fr_c-i": 3,
+      "_____10c-___pwr-nx-snooze-f": 0,
+      "_____10c-___pwr-nx-ftincx-f": 0,
+      "_____10c-___pwr-nx-ftincy-f": 0,
+      "_____10c-___pwr-nx-ftincz-f": 0,
+      "_____10c-___pwr-nx-fthlim-i": 0,
+      "_____10c-___pwr-nx-mp_acc-b": true,
+      "_____10c-___pwr-nx-mp_psp-b": false,
+      "_____10c-___pwr-cx-memory-b": false,
+      "_____10c-___pwr-cx-mem__t-i": 100,
+      "_____10c-___pwr-cx-mem_gr-i": 1,
+      "_____10c-___pwr-cx-mem_ls-i": 9,
+      "_____10c-___pwr-cx-__name-t": "Brain_Power",
+      "_____10c-___pwr-cx-_group-t": "CORE",
+      "_____10c-iv00_C-cx-subgrp-t": "",
+      "_____10c-iv00_C-cx-_n_cnt-i": 1,
+      "_____10c-iv00_C-cx-synatt-i": 100,
+      "_____10c-iv00_C-cx-de_gen-f": 0.0,
+      "_____10c-iv00_C-cx-pspuni-b": false,
+      "_____10c-iv00_C-nx-pstcrm-f": 100.0,
+      "_____10c-iv00_C-cx-dstmap-d": {},
+      "_____10c-iv00_C-cx-___bbx-i": 64,
+      "_____10c-iv00_C-cx-___bby-i": 64,
+      "_____10c-iv00_C-cx-___bbz-i": 3,
+      "_____10c-iv00_C-cx-rcordx-i": 30,
+      "_____10c-iv00_C-cx-rcordy-i": 40,
+      "_____10c-iv00_C-cx-rcordz-i": -20,
+      "_____10c-iv00_C-cx-2dcorx-i": -262,
+      "_____10c-iv00_C-cx-2dcory-i": 127,
+      "_____10c-iv00_C-cx-gd_vis-b": true,
+      "_____10c-iv00_C-nx-pstcr_-f": 25.0,
+      "_____10c-iv00_C-nx-fire_t-f": 1.0,
+      "_____10c-iv00_C-nx-refrac-i": 0,
+      "_____10c-iv00_C-nx-leak_c-f": 0,
+      "_____10c-iv00_C-nx-leak_v-f": 0,
+      "_____10c-iv00_C-nx-c_fr_c-i": 3,
+      "_____10c-iv00_C-nx-snooze-f": 0,
+      "_____10c-iv00_C-nx-ftincx-f": 0,
+      "_____10c-iv00_C-nx-ftincy-f": 0,
+      "_____10c-iv00_C-nx-ftincz-f": 0,
+      "_____10c-iv00_C-nx-fthlim-i": 0,
+      "_____10c-iv00_C-nx-mp_acc-b": true,
+      "_____10c-iv00_C-nx-mp_psp-b": false,
+      "_____10c-iv00_C-cx-memory-b": false,
+      "_____10c-iv00_C-cx-mem__t-i": 100,
+      "_____10c-iv00_C-cx-mem_gr-i": 1,
+      "_____10c-iv00_C-cx-mem_ls-i": 9,
+      "_____10c-iv00_C-cx-__name-t": "vision_C",
+      "_____10c-iv00_C-cx-_group-t": "IPU",
+      "_____10c-iv00LL-cx-subgrp-t": "",
+      "_____10c-iv00LL-cx-_n_cnt-i": 1,
+      "_____10c-iv00LL-cx-synatt-i": 100,
+      "_____10c-iv00LL-cx-de_gen-f": 0,
+      "_____10c-iv00LL-cx-pspuni-b": false,
+      "_____10c-iv00LL-nx-pstcrm-f": 35,
+      "_____10c-iv00LL-cx-dstmap-d": {},
+      "_____10c-iv00LL-cx-___bbx-i": 8,
+      "_____10c-iv00LL-cx-___bby-i": 8,
+      "_____10c-iv00LL-cx-___bbz-i": 3,
+      "_____10c-iv00LL-cx-rcordx-i": 20,
+      "_____10c-iv00LL-cx-rcordy-i": 30,
+      "_____10c-iv00LL-cx-rcordz-i": -20,
+      "_____10c-iv00LL-cx-2dcorx-i": -614,
+      "_____10c-iv00LL-cx-2dcory-i": 317,
+      "_____10c-iv00LL-cx-gd_vis-b": true,
+      "_____10c-iv00LL-nx-pstcr_-f": 5,
+      "_____10c-iv00LL-nx-fire_t-f": 1,
+      "_____10c-iv00LL-nx-refrac-i": 0,
+      "_____10c-iv00LL-nx-leak_c-f": 0,
+      "_____10c-iv00LL-nx-leak_v-f": 0,
+      "_____10c-iv00LL-nx-c_fr_c-i": 3,
+      "_____10c-iv00LL-nx-snooze-f": 0,
+      "_____10c-iv00LL-nx-ftincx-f": 0,
+      "_____10c-iv00LL-nx-ftincy-f": 0,
+      "_____10c-iv00LL-nx-ftincz-f": 0,
+      "_____10c-iv00LL-nx-fthlim-i": 0,
+      "_____10c-iv00LL-nx-mp_acc-b": true,
+      "_____10c-iv00LL-nx-mp_psp-b": false,
+      "_____10c-iv00LL-cx-memory-b": false,
+      "_____10c-iv00LL-cx-mem__t-i": 100,
+      "_____10c-iv00LL-cx-mem_gr-i": 1,
+      "_____10c-iv00LL-cx-mem_ls-i": 9,
+      "_____10c-iv00LL-cx-__name-t": "vision_LL",
+      "_____10c-iv00LL-cx-_group-t": "IPU",
+      "_____10c-iv00LM-cx-subgrp-t": "",
+      "_____10c-iv00LM-cx-_n_cnt-i": 1,
+      "_____10c-iv00LM-cx-synatt-i": 100,
+      "_____10c-iv00LM-cx-de_gen-f": 0,
+      "_____10c-iv00LM-cx-pspuni-b": false,
+      "_____10c-iv00LM-nx-pstcrm-f": 35,
+      "_____10c-iv00LM-cx-dstmap-d": {},
+      "_____10c-iv00LM-cx-___bbx-i": 8,
+      "_____10c-iv00LM-cx-___bby-i": 8,
+      "_____10c-iv00LM-cx-___bbz-i": 3,
+      "_____10c-iv00LM-cx-rcordx-i": 55,
+      "_____10c-iv00LM-cx-rcordy-i": 30,
+      "_____10c-iv00LM-cx-rcordz-i": -20,
+      "_____10c-iv00LM-cx-2dcorx-i": -253,
+      "_____10c-iv00LM-cx-2dcory-i": 324,
+      "_____10c-iv00LM-cx-gd_vis-b": true,
+      "_____10c-iv00LM-nx-pstcr_-f": 5,
+      "_____10c-iv00LM-nx-fire_t-f": 1,
+      "_____10c-iv00LM-nx-refrac-i": 0,
+      "_____10c-iv00LM-nx-leak_c-f": 0,
+      "_____10c-iv00LM-nx-leak_v-f": 0,
+      "_____10c-iv00LM-nx-c_fr_c-i": 3,
+      "_____10c-iv00LM-nx-snooze-f": 0,
+      "_____10c-iv00LM-nx-ftincx-f": 0,
+      "_____10c-iv00LM-nx-ftincy-f": 0,
+      "_____10c-iv00LM-nx-ftincz-f": 0,
+      "_____10c-iv00LM-nx-fthlim-i": 0,
+      "_____10c-iv00LM-nx-mp_acc-b": true,
+      "_____10c-iv00LM-nx-mp_psp-b": false,
+      "_____10c-iv00LM-cx-memory-b": false,
+      "_____10c-iv00LM-cx-mem__t-i": 100,
+      "_____10c-iv00LM-cx-mem_gr-i": 1,
+      "_____10c-iv00LM-cx-mem_ls-i": 9,
+      "_____10c-iv00LM-cx-__name-t": "vision_LM",
+      "_____10c-iv00LM-cx-_group-t": "IPU",
+      "_____10c-iv00LR-cx-subgrp-t": "",
+      "_____10c-iv00LR-cx-_n_cnt-i": 1,
+      "_____10c-iv00LR-cx-synatt-i": 100,
+      "_____10c-iv00LR-cx-de_gen-f": 0,
+      "_____10c-iv00LR-cx-pspuni-b": false,
+      "_____10c-iv00LR-nx-pstcrm-f": 35,
+      "_____10c-iv00LR-cx-dstmap-d": {},
+      "_____10c-iv00LR-cx-___bbx-i": 8,
+      "_____10c-iv00LR-cx-___bby-i": 8,
+      "_____10c-iv00LR-cx-___bbz-i": 3,
+      "_____10c-iv00LR-cx-rcordx-i": 95,
+      "_____10c-iv00LR-cx-rcordy-i": 30,
+      "_____10c-iv00LR-cx-rcordz-i": -20,
+      "_____10c-iv00LR-cx-2dcorx-i": 86,
+      "_____10c-iv00LR-cx-2dcory-i": 319,
+      "_____10c-iv00LR-cx-gd_vis-b": true,
+      "_____10c-iv00LR-nx-pstcr_-f": 5,
+      "_____10c-iv00LR-nx-fire_t-f": 1,
+      "_____10c-iv00LR-nx-refrac-i": 0,
+      "_____10c-iv00LR-nx-leak_c-f": 0,
+      "_____10c-iv00LR-nx-leak_v-f": 0,
+      "_____10c-iv00LR-nx-c_fr_c-i": 3,
+      "_____10c-iv00LR-nx-snooze-f": 0,
+      "_____10c-iv00LR-nx-ftincx-f": 0,
+      "_____10c-iv00LR-nx-ftincy-f": 0,
+      "_____10c-iv00LR-nx-ftincz-f": 0,
+      "_____10c-iv00LR-nx-fthlim-i": 0,
+      "_____10c-iv00LR-nx-mp_acc-b": true,
+      "_____10c-iv00LR-nx-mp_psp-b": false,
+      "_____10c-iv00LR-cx-memory-b": false,
+      "_____10c-iv00LR-cx-mem__t-i": 100,
+      "_____10c-iv00LR-cx-mem_gr-i": 1,
+      "_____10c-iv00LR-cx-mem_ls-i": 9,
+      "_____10c-iv00LR-cx-__name-t": "vision_LR",
+      "_____10c-iv00LR-cx-_group-t": "IPU",
+      "_____10c-iv00ML-cx-subgrp-t": "",
+      "_____10c-iv00ML-cx-_n_cnt-i": 1,
+      "_____10c-iv00ML-cx-synatt-i": 100,
+      "_____10c-iv00ML-cx-de_gen-f": 0,
+      "_____10c-iv00ML-cx-pspuni-b": false,
+      "_____10c-iv00ML-nx-pstcrm-f": 35,
+      "_____10c-iv00ML-cx-dstmap-d": {},
+      "_____10c-iv00ML-cx-___bbx-i": 8,
+      "_____10c-iv00ML-cx-___bby-i": 8,
+      "_____10c-iv00ML-cx-___bbz-i": 3,
+      "_____10c-iv00ML-cx-rcordx-i": 20,
+      "_____10c-iv00ML-cx-rcordy-i": 70,
+      "_____10c-iv00ML-cx-rcordz-i": -20,
+      "_____10c-iv00ML-cx-2dcorx-i": -609,
+      "_____10c-iv00ML-cx-2dcory-i": 129,
+      "_____10c-iv00ML-cx-gd_vis-b": true,
+      "_____10c-iv00ML-nx-pstcr_-f": 5,
+      "_____10c-iv00ML-nx-fire_t-f": 1,
+      "_____10c-iv00ML-nx-refrac-i": 0,
+      "_____10c-iv00ML-nx-leak_c-f": 0,
+      "_____10c-iv00ML-nx-leak_v-f": 0,
+      "_____10c-iv00ML-nx-c_fr_c-i": 3,
+      "_____10c-iv00ML-nx-snooze-f": 0,
+      "_____10c-iv00ML-nx-ftincx-f": 0,
+      "_____10c-iv00ML-nx-ftincy-f": 0,
+      "_____10c-iv00ML-nx-ftincz-f": 0,
+      "_____10c-iv00ML-nx-fthlim-i": 0,
+      "_____10c-iv00ML-nx-mp_acc-b": true,
+      "_____10c-iv00ML-nx-mp_psp-b": false,
+      "_____10c-iv00ML-cx-memory-b": false,
+      "_____10c-iv00ML-cx-mem__t-i": 100,
+      "_____10c-iv00ML-cx-mem_gr-i": 1,
+      "_____10c-iv00ML-cx-mem_ls-i": 9,
+      "_____10c-iv00ML-cx-__name-t": "vision_ML",
+      "_____10c-iv00ML-cx-_group-t": "IPU",
+      "_____10c-iv00MR-cx-subgrp-t": "",
+      "_____10c-iv00MR-cx-_n_cnt-i": 1,
+      "_____10c-iv00MR-cx-synatt-i": 100,
+      "_____10c-iv00MR-cx-de_gen-f": 0,
+      "_____10c-iv00MR-cx-pspuni-b": false,
+      "_____10c-iv00MR-nx-pstcrm-f": 35,
+      "_____10c-iv00MR-cx-dstmap-d": {},
+      "_____10c-iv00MR-cx-___bbx-i": 8,
+      "_____10c-iv00MR-cx-___bby-i": 8,
+      "_____10c-iv00MR-cx-___bbz-i": 3,
+      "_____10c-iv00MR-cx-rcordx-i": 95,
+      "_____10c-iv00MR-cx-rcordy-i": 70,
+      "_____10c-iv00MR-cx-rcordz-i": -20,
+      "_____10c-iv00MR-cx-2dcorx-i": 81,
+      "_____10c-iv00MR-cx-2dcory-i": 131,
+      "_____10c-iv00MR-cx-gd_vis-b": true,
+      "_____10c-iv00MR-nx-pstcr_-f": 5,
+      "_____10c-iv00MR-nx-fire_t-f": 1,
+      "_____10c-iv00MR-nx-refrac-i": 0,
+      "_____10c-iv00MR-nx-leak_c-f": 0,
+      "_____10c-iv00MR-nx-leak_v-f": 0,
+      "_____10c-iv00MR-nx-c_fr_c-i": 3,
+      "_____10c-iv00MR-nx-snooze-f": 0,
+      "_____10c-iv00MR-nx-ftincx-f": 0,
+      "_____10c-iv00MR-nx-ftincy-f": 0,
+      "_____10c-iv00MR-nx-ftincz-f": 0,
+      "_____10c-iv00MR-nx-fthlim-i": 0,
+      "_____10c-iv00MR-nx-mp_acc-b": true,
+      "_____10c-iv00MR-nx-mp_psp-b": false,
+      "_____10c-iv00MR-cx-memory-b": false,
+      "_____10c-iv00MR-cx-mem__t-i": 100,
+      "_____10c-iv00MR-cx-mem_gr-i": 1,
+      "_____10c-iv00MR-cx-mem_ls-i": 9,
+      "_____10c-iv00MR-cx-__name-t": "vision_MR",
+      "_____10c-iv00MR-cx-_group-t": "IPU",
+      "_____10c-iv00TL-cx-subgrp-t": "",
+      "_____10c-iv00TL-cx-_n_cnt-i": 1,
+      "_____10c-iv00TL-cx-synatt-i": 100,
+      "_____10c-iv00TL-cx-de_gen-f": 0,
+      "_____10c-iv00TL-cx-pspuni-b": false,
+      "_____10c-iv00TL-nx-pstcrm-f": 35,
+      "_____10c-iv00TL-cx-dstmap-d": {},
+      "_____10c-iv00TL-cx-___bbx-i": 8,
+      "_____10c-iv00TL-cx-___bby-i": 8,
+      "_____10c-iv00TL-cx-___bbz-i": 3,
+      "_____10c-iv00TL-cx-rcordx-i": 20,
+      "_____10c-iv00TL-cx-rcordy-i": 105,
+      "_____10c-iv00TL-cx-rcordz-i": -20,
+      "_____10c-iv00TL-cx-2dcorx-i": -606,
+      "_____10c-iv00TL-cx-2dcory-i": -61,
+      "_____10c-iv00TL-cx-gd_vis-b": true,
+      "_____10c-iv00TL-nx-pstcr_-f": 5,
+      "_____10c-iv00TL-nx-fire_t-f": 1,
+      "_____10c-iv00TL-nx-refrac-i": 0,
+      "_____10c-iv00TL-nx-leak_c-f": 0,
+      "_____10c-iv00TL-nx-leak_v-f": 0,
+      "_____10c-iv00TL-nx-c_fr_c-i": 3,
+      "_____10c-iv00TL-nx-snooze-f": 0,
+      "_____10c-iv00TL-nx-ftincx-f": 0,
+      "_____10c-iv00TL-nx-ftincy-f": 0,
+      "_____10c-iv00TL-nx-ftincz-f": 0,
+      "_____10c-iv00TL-nx-fthlim-i": 0,
+      "_____10c-iv00TL-nx-mp_acc-b": true,
+      "_____10c-iv00TL-nx-mp_psp-b": false,
+      "_____10c-iv00TL-cx-memory-b": false,
+      "_____10c-iv00TL-cx-mem__t-i": 100,
+      "_____10c-iv00TL-cx-mem_gr-i": 1,
+      "_____10c-iv00TL-cx-mem_ls-i": 9,
+      "_____10c-iv00TL-cx-__name-t": "vision_TL",
+      "_____10c-iv00TL-cx-_group-t": "IPU",
+      "_____10c-iv00TR-cx-subgrp-t": "",
+      "_____10c-iv00TR-cx-_n_cnt-i": 1,
+      "_____10c-iv00TR-cx-synatt-i": 100,
+      "_____10c-iv00TR-cx-de_gen-f": 0,
+      "_____10c-iv00TR-cx-pspuni-b": false,
+      "_____10c-iv00TR-nx-pstcrm-f": 35,
+      "_____10c-iv00TR-cx-dstmap-d": {},
+      "_____10c-iv00TR-cx-___bbx-i": 8,
+      "_____10c-iv00TR-cx-___bby-i": 8,
+      "_____10c-iv00TR-cx-___bbz-i": 3,
+      "_____10c-iv00TR-cx-rcordx-i": 95,
+      "_____10c-iv00TR-cx-rcordy-i": 105,
+      "_____10c-iv00TR-cx-rcordz-i": -20,
+      "_____10c-iv00TR-cx-2dcorx-i": 72,
+      "_____10c-iv00TR-cx-2dcory-i": -62,
+      "_____10c-iv00TR-cx-gd_vis-b": true,
+      "_____10c-iv00TR-nx-pstcr_-f": 5,
+      "_____10c-iv00TR-nx-fire_t-f": 1,
+      "_____10c-iv00TR-nx-refrac-i": 0,
+      "_____10c-iv00TR-nx-leak_c-f": 0,
+      "_____10c-iv00TR-nx-leak_v-f": 0,
+      "_____10c-iv00TR-nx-c_fr_c-i": 3,
+      "_____10c-iv00TR-nx-snooze-f": 0,
+      "_____10c-iv00TR-nx-ftincx-f": 0,
+      "_____10c-iv00TR-nx-ftincy-f": 0,
+      "_____10c-iv00TR-nx-ftincz-f": 0,
+      "_____10c-iv00TR-nx-fthlim-i": 0,
+      "_____10c-iv00TR-nx-mp_acc-b": true,
+      "_____10c-iv00TR-nx-mp_psp-b": false,
+      "_____10c-iv00TR-cx-memory-b": false,
+      "_____10c-iv00TR-cx-mem__t-i": 100,
+      "_____10c-iv00TR-cx-mem_gr-i": 1,
+      "_____10c-iv00TR-cx-mem_ls-i": 9,
+      "_____10c-iv00TR-cx-__name-t": "vision_TR",
+      "_____10c-iv00TR-cx-_group-t": "IPU",
+      "_____10c-iv00TM-cx-subgrp-t": "",
+      "_____10c-iv00TM-cx-_n_cnt-i": 1,
+      "_____10c-iv00TM-cx-synatt-i": 100,
+      "_____10c-iv00TM-cx-de_gen-f": 0,
+      "_____10c-iv00TM-cx-pspuni-b": false,
+      "_____10c-iv00TM-nx-pstcrm-f": 35,
+      "_____10c-iv00TM-cx-dstmap-d": {},
+      "_____10c-iv00TM-cx-___bbx-i": 8,
+      "_____10c-iv00TM-cx-___bby-i": 8,
+      "_____10c-iv00TM-cx-___bbz-i": 3,
+      "_____10c-iv00TM-cx-rcordx-i": 55,
+      "_____10c-iv00TM-cx-rcordy-i": 105,
+      "_____10c-iv00TM-cx-rcordz-i": -20,
+      "_____10c-iv00TM-cx-2dcorx-i": -271,
+      "_____10c-iv00TM-cx-2dcory-i": -65,
+      "_____10c-iv00TM-cx-gd_vis-b": true,
+      "_____10c-iv00TM-nx-pstcr_-f": 5,
+      "_____10c-iv00TM-nx-fire_t-f": 1,
+      "_____10c-iv00TM-nx-refrac-i": 0,
+      "_____10c-iv00TM-nx-leak_c-f": 0,
+      "_____10c-iv00TM-nx-leak_v-f": 0,
+      "_____10c-iv00TM-nx-c_fr_c-i": 3,
+      "_____10c-iv00TM-nx-snooze-f": 0,
+      "_____10c-iv00TM-nx-ftincx-f": 0,
+      "_____10c-iv00TM-nx-ftincy-f": 0,
+      "_____10c-iv00TM-nx-ftincz-f": 0,
+      "_____10c-iv00TM-nx-fthlim-i": 0,
+      "_____10c-iv00TM-nx-mp_acc-b": true,
+      "_____10c-iv00TM-nx-mp_psp-b": false,
+      "_____10c-iv00TM-cx-memory-b": false,
+      "_____10c-iv00TM-cx-mem__t-i": 100,
+      "_____10c-iv00TM-cx-mem_gr-i": 1,
+      "_____10c-iv00TM-cx-mem_ls-i": 9,
+      "_____10c-iv00TM-cx-__name-t": "vision_TM",
+      "_____10c-iv00TM-cx-_group-t": "IPU"
+   }
+}
\ No newline at end of file
diff --git a/src/evo/genome_processor.py b/src/evo/genome_processor.py
index f320c8820..c8f3bb50d 100644
--- a/src/evo/genome_processor.py
+++ b/src/evo/genome_processor.py
@@ -1,5 +1,4 @@
-
-# Copyright 2016-2022 The FEAGI Authors. All Rights Reserved.
+# Copyright 2016-2023 The FEAGI Authors. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -20,11 +19,19 @@
 import datetime
 from evo.genome_editor import save_genome
 from evo.genome_validator import genome_validator
+from evo.templates import core_morphologies, cortical_types
 from inf import runtime_data
 
+
 logger = logging.getLogger(__name__)
 
 
+def merge_core_morphologies(genome):
+    for core_morphology in core_morphologies:
+        genome["neuron_morphologies"][core_morphology] = core_morphologies[core_morphology].copy()
+    return genome
+
+
 def genome_ver_check(genome):
     try:
         if genome['version'] == "2.0":
@@ -34,6 +41,7 @@ def genome_ver_check(genome):
                 print("Genome validity=", runtime_data.genome_validity)
             except Exception as e:
                 print("Error during genome validation!!\n", traceback.print_exc(), e)
+            genome = merge_core_morphologies(genome)
             genome = genome_morphology_updator(genome)
             save_genome(genome=genome, file_name=runtime_data.connectome_path + "genome.json")
             genome1 = genome_2_1_convertor(flat_genome=genome['blueprint'])
@@ -459,10 +467,15 @@ def genome_morphology_updator(genome):
     "_______c-______-nx-leak_c-f": "leak_coefficient",
     "_______c-______-nx-leak_v-i": "leak_variability",
     "_______c-______-nx-c_fr_c-i": "consecutive_fire_cnt_max",
-    "_______c-______-nx-snooze-f": "snooze_length"
+    "_______c-______-nx-snooze-f": "snooze_length",
+    "_______c-______-cx-memory-b": "is_mem_type",
+    "_______c-______-cx-mem__t-i": "longterm_mem_threshold",
+    "_______c-______-cx-mem_gr-i": "lifespan_growth_rate",
+    "_______c-______-cx-mem_ls-i": "init_lifespan"
 }
 
 genome_1_template = {
+    "sub_group_id": "",
     "per_voxel_neuron_cnt": 1,
     "synapse_attractivity": 100,
     "degeneration": 0,
@@ -496,7 +509,11 @@ def genome_morphology_updator(genome):
     "firing_threshold_increment_z": 0,
     "firing_threshold_limit": 0,
     "mp_charge_accumulation": True,
-    "mp_driven_psp": False
+    "mp_driven_psp": False,
+    "is_mem_type": False,
+    "longterm_mem_threshold": 100,
+    "lifespan_growth_rate": 1,
+    "init_lifespan": 9
     }
 
 genome_2_to_1 = {
@@ -526,16 +543,22 @@ def genome_morphology_updator(genome):
     "c_fr_c-i": "consecutive_fire_cnt_max",
     "snooze-f": "snooze_length",
     "_group-t": "group_id",
+    "subgrp-t": "sub_group_id",
     "dstmap-d": "cortical_mapping_dst",
     "de_gen-f": "degeneration",
     "pspuni-b": "psp_uniform_distribution",
     "mp_acc-b": "mp_charge_accumulation",
-    "mp_psp-b": "mp_driven_psp"
+    "mp_psp-b": "mp_driven_psp",
+    "memory-b": "is_mem_type",
+    "mem__t-i": "longterm_mem_threshold",
+    "mem_gr-i": "lifespan_growth_rate",
+    "mem_ls-i": "init_lifespan"
 }
 
 genome_1_to_2 = {
     "cortical_name": "cx-__name-t",
     "group_id": "cx-_group-t",
+    "sub_group_id": "cx-subgrp-t",
     "per_voxel_neuron_cnt": "cx-_n_cnt-i",
     "visualization": "cx-gd_vis-b",
     "location_generation_type": "cx-__rand-b",
@@ -556,5 +579,9 @@ def genome_morphology_updator(genome):
     "psp_uniform_distribution": "cx-pspuni-b",
     "cortical_mapping_dst": "cx-dstmap-d",
     "mp_charge_accumulation": "nx-mp_acc-b",
-    "mp_driven_psp": "nx-mp_psp-b"
+    "mp_driven_psp": "nx-mp_psp-b",
+    "is_mem_type": "cx-memory-b",
+    "longterm_mem_threshold": "cx-mem__t-i",
+    "lifespan_growth_rate": "cx-mem_gr-i",
+    "init_lifespan": "cx-mem_ls-i"
 }
diff --git a/src/evo/neuron.py b/src/evo/neuron.py
index 4fc0490d0..9f0f53ee8 100644
--- a/src/evo/neuron.py
+++ b/src/evo/neuron.py
@@ -1,5 +1,5 @@
 
-# Copyright 2016-2022 The FEAGI Authors. All Rights Reserved.
+# Copyright 2016-2023 The FEAGI Authors. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -54,7 +54,7 @@ def neuron_id_gen(cortical_id=None, size=6, chars=string.ascii_uppercase + strin
     return str(cortical_id + '_' + now.strftime("%Y%m%d%H%M%S%f")[2:]) + '_' + (''.join(random.choice(chars) for _ in range(size))) + '_N'
 
 
-def init_neuron(cortical_area, soma_location):
+def init_neuron(cortical_area, soma_location, memory_hash=None):
     """
     Responsible for adding a Neuron to connectome
 
@@ -62,9 +62,19 @@ def init_neuron(cortical_area, soma_location):
 
     genome = runtime_data.genome
 
-    neuron_id = neuron_id_gen(cortical_id=cortical_area)
+    if memory_hash:
+        immortality = False
+        is_memory_type = True
+        lifespan = runtime_data.genome["blueprint"][cortical_area]["init_lifespan"] + runtime_data.burst_count
+        neuron_id = str(cortical_area + '_' + memory_hash)
+    else:
+        immortality = True
+        is_memory_type = False
+        lifespan = None
+        neuron_id = neuron_id_gen(cortical_id=cortical_area)
 
     runtime_data.brain[cortical_area][neuron_id] = {}
+    runtime_data.brain[cortical_area][neuron_id]["memory_neuron"] = is_memory_type
     runtime_data.brain[cortical_area][neuron_id]["neighbors"] = {}
     runtime_data.brain[cortical_area][neuron_id]["upstream_neurons"] = set()
     runtime_data.brain[cortical_area][neuron_id]["event_id"] = {}
@@ -77,6 +87,8 @@ def init_neuron(cortical_area, soma_location):
     runtime_data.brain[cortical_area][neuron_id]["snooze_till_burst_num"] = 0
     runtime_data.brain[cortical_area][neuron_id]["last_burst_num"] = 0
     runtime_data.brain[cortical_area][neuron_id]["activity_history"] = []
+    runtime_data.brain[cortical_area][neuron_id]["lifespan"] = lifespan
+    runtime_data.brain[cortical_area][neuron_id]["immortal"] = immortality
     runtime_data.brain[cortical_area][neuron_id]["soma_location"] = soma_location
     # loc_blk is a two element list where first element being the location of the neuron and second being the block
     # runtime_data.brain[cortical_area][neuron_id]["dendrite_locations"] = dendrite_locations
@@ -136,9 +148,22 @@ def create_neuron(cortical_area, voxel):
         runtime_data.voxel_dict[cortical_area][voxel].add(neuron_id)
 
 
-def neuron_apoptosis(cortical_area):
+def neuron_apoptosis(cortical_area, neuron_id):
     """
     Responsible for programmed death of neuron
     """
-    # todo: implement the function
-    return
+    runtime_data.brain[cortical_area].pop(neuron_id)
+    print("^^^^^^" * 20)
+    print(f"Neuron {neuron_id} from {cortical_area} just died!")
+
+
+def increase_neuron_lifespan(cortical_area, neuron_id):
+    if cortical_area in runtime_data.brain:
+        if neuron_id in runtime_data.brain[cortical_area]:
+            runtime_data.brain[cortical_area][neuron_id]["lifespan"] += \
+                runtime_data.genome["blueprint"][cortical_area]["lifespan_growth_rate"]
+
+            # Check eligibility for neuron immortality (Short-term to Long-term memory xfer)
+            if runtime_data.brain[cortical_area][neuron_id]["lifespan"] > \
+                    runtime_data.genome["blueprint"][cortical_area]["longterm_mem_threshold"]:
+                runtime_data.brain[cortical_area][neuron_id]["immortal"] = True
diff --git a/src/evo/static_genome.json b/src/evo/static_genome.json
index 9dc0567a6..a36324fc1 100644
--- a/src/evo/static_genome.json
+++ b/src/evo/static_genome.json
@@ -7,44 +7,8 @@
    "evolution_burst_count": 50,
    "ipu_idle_threshold": 1000,
    "plasticity_queue_depth": 3,
+   "lifespan_mgmt_interval": 10,
    "neuron_morphologies": {
-      "block_to_block": {
-         "parameters": {
-            "vectors": [
-               [
-                  0,
-                  0,
-                  0
-               ]
-            ]
-         },
-         "type": "vectors"
-      },
-      "tile": {
-         "parameters": {
-            "src_seed": [
-               16,
-               16,
-               1
-            ],
-            "src_pattern": [
-               [
-                  1,
-                  0
-               ],
-               [
-                  1,
-                  0
-               ],
-               [
-                  1,
-                  0
-               ]
-            ],
-            "mapper_morphology": "projector"
-         },
-         "type": "composite"
-      },
       "decrease_filter_diagonal": {
          "parameters": {
             "vectors": [
@@ -93,78 +57,6 @@
          },
          "type": "vectors"
       },
-      "lateral_+x": {
-         "parameters": {
-            "vectors": [
-               [
-                  1,
-                  0,
-                  0
-               ]
-            ]
-         },
-         "type": "vectors"
-      },
-      "lateral_-x": {
-         "parameters": {
-            "vectors": [
-               [
-                  -1,
-                  0,
-                  0
-               ]
-            ]
-         },
-         "type": "vectors"
-      },
-      "lateral_+y": {
-         "parameters": {
-            "vectors": [
-               [
-                  0,
-                  1,
-                  0
-               ]
-            ]
-         },
-         "type": "vectors"
-      },
-      "lateral_-y": {
-         "parameters": {
-            "vectors": [
-               [
-                  0,
-                  -1,
-                  0
-               ]
-            ]
-         },
-         "type": "vectors"
-      },
-      "lateral_+z": {
-         "parameters": {
-            "vectors": [
-               [
-                  0,
-                  0,
-                  1
-               ]
-            ]
-         },
-         "type": "vectors"
-      },
-      "lateral_-z": {
-         "parameters": {
-            "vectors": [
-               [
-                  0,
-                  0,
-                  -1
-               ]
-            ]
-         },
-         "type": "vectors"
-      },
       "to_block_[5, 7, 4]": {
          "parameters": {
             "patterns": [
@@ -184,26 +76,6 @@
          },
          "type": "patterns"
       },
-      "expander_x": {
-         "parameters": {},
-         "type": "functions"
-      },
-      "projector": {
-         "parameters": {},
-         "type": "functions"
-      },
-      "reducer_x": {
-         "parameters": {},
-         "type": "functions"
-      },
-      "randomizer": {
-         "parameters": {},
-         "type": "functions"
-      },
-      "lateral_pairs_x": {
-         "parameters": {},
-         "type": "functions"
-      },
       "turn_left_level_one": {
          "parameters": {
             "patterns": [
@@ -883,44 +755,6 @@
             ]
          }
       },
-      "0-0-0_to_all": {
-         "type": "patterns",
-         "parameters": {
-            "patterns": [
-               [
-                  [
-                     0,
-                     0,
-                     0
-                  ],
-                  [
-                     "*",
-                     "*",
-                     "*"
-                  ]
-               ]
-            ]
-         }
-      },
-      "all_to_0-0-0": {
-         "type": "patterns",
-         "parameters": {
-            "patterns": [
-               [
-                  [
-                     "*",
-                     "*",
-                     "*"
-                  ],
-                  [
-                     0,
-                     0,
-                     0
-                  ]
-               ]
-            ]
-         }
-      },
       "intensity": {
          "type": "patterns",
          "parameters": {
@@ -1302,15 +1136,35 @@
             ]
          }
       },
-      "any_to_any": {
+      "block_to_block": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "projector": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "memory": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "0-0-0_to_all": {
          "type": "patterns",
          "parameters": {
             "patterns": [
                [
                   [
-                     "?",
-                     "?",
-                     "?"
+                     0,
+                     0,
+                     0
                   ],
                   [
                      "*",
@@ -1321,7 +1175,7 @@
             ]
          }
       },
-      "LED0": {
+      "all_to_0-0-0": {
          "type": "patterns",
          "parameters": {
             "patterns": [
@@ -1338,71 +1192,302 @@
                   ]
                ]
             ]
-         },
-         "morphology_name": "LED0"
+         }
       },
-      "LED1": {
+      "all_to_all": {
          "type": "patterns",
          "parameters": {
             "patterns": [
                [
+                  [
+                     "?",
+                     "?",
+                     "?"
+                  ],
                   [
                      "*",
                      "*",
                      "*"
-                  ],
-                  [
-                     1,
-                     0,
-                     0
                   ]
                ]
             ]
+         }
+      },
+      "lateral_+x": {
+         "parameters": {
+            "vectors": [
+               [
+                  1,
+                  0,
+                  0
+               ]
+            ]
          },
-         "morphology_name": "LED1"
+         "type": "vectors"
       },
-      "LED2": {
-         "type": "patterns",
+      "lateral_-x": {
          "parameters": {
-            "patterns": [
+            "vectors": [
                [
-                  [
-                     "*",
-                     "*",
-                     "*"
-                  ],
-                  [
-                     2,
-                     0,
-                     0
-                  ]
+                  -1,
+                  0,
+                  0
                ]
             ]
          },
-         "morphology_name": "LED2"
+         "type": "vectors"
       },
-      "LED3": {
-         "type": "patterns",
+      "lateral_+y": {
          "parameters": {
-            "patterns": [
+            "vectors": [
                [
-                  [
-                     "*",
-                     "*",
-                     "*"
-                  ],
-                  [
-                     3,
-                     0,
-                     0
-                  ]
+                  0,
+                  1,
+                  0
                ]
             ]
          },
-         "morphology_name": "LED3"
-      }
-   },
-   "species": {
+         "type": "vectors"
+      },
+      "lateral_-y": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  -1,
+                  0
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_+z": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "lateral_-z": {
+         "parameters": {
+            "vectors": [
+               [
+                  0,
+                  0,
+                  -1
+               ]
+            ]
+         },
+         "type": "vectors"
+      },
+      "randomizer": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "expander_x": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "reducer_x": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "lateral_pairs_x": {
+         "parameters": {},
+         "type": "functions"
+      },
+      "tile": {
+         "parameters": {
+            "src_seed": [
+               16,
+               16,
+               1
+            ],
+            "src_pattern": [
+               [
+                  1,
+                  0
+               ],
+               [
+                  1,
+                  0
+               ],
+               [
+                  1,
+                  0
+               ]
+            ],
+            "mapper_morphology": "projector"
+         },
+         "type": "composite"
+      },
+      "0_0_0-_0_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     0,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-_0_0_0"
+      },
+      "0_0_0-1_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     1,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-1_0_0"
+      },
+      "0_0_0-2_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     2,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-2_0_0"
+      },
+      "0_0_0-3_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     3,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-3_0_0"
+      },
+      "0_0_0-4_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     4,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-4_0_0"
+      },
+      "0_0_0-5_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     5,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-5_0_0"
+      },
+      "0_0_0-6_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     6,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-6_0_0"
+      },
+      "0_0_0-7_0_0": {
+         "type": "patterns",
+         "parameters": {
+            "patterns": [
+               [
+                  [
+                     0,
+                     0,
+                     0
+                  ],
+                  [
+                     7,
+                     0,
+                     0
+                  ]
+               ]
+            ]
+         },
+         "morphology_name": "0_0_0-7_0_0"
+      }
+   },
+   "species": {
       "parents": {},
       "species_id": "",
       "class": "toy",
@@ -1410,6 +1495,7 @@
       "model": "smart_car"
    },
    "blueprint": {
+      "_____10c-___pwr-cx-subgrp-t": "",
       "_____10c-___pwr-cx-_n_cnt-i": 1,
       "_____10c-___pwr-cx-synatt-i": 100,
       "_____10c-___pwr-cx-de_gen-f": 0.01,
@@ -1422,8 +1508,8 @@
       "_____10c-___pwr-cx-rcordx-i": 10,
       "_____10c-___pwr-cx-rcordy-i": 0,
       "_____10c-___pwr-cx-rcordz-i": -20,
-      "_____10c-___pwr-cx-2dcorx-i": null,
-      "_____10c-___pwr-cx-2dcory-i": null,
+      "_____10c-___pwr-cx-2dcorx-i": -319,
+      "_____10c-___pwr-cx-2dcory-i": -682,
       "_____10c-___pwr-cx-gd_vis-b": true,
       "_____10c-___pwr-nx-pstcr_-f": 500,
       "_____10c-___pwr-nx-fire_t-f": 1,
@@ -1437,133 +1523,128 @@
       "_____10c-___pwr-nx-ftincz-f": 0,
       "_____10c-___pwr-nx-fthlim-i": 0,
       "_____10c-___pwr-nx-mp_acc-b": true,
+      "_____10c-___pwr-nx-mp_psp-b": false,
+      "_____10c-___pwr-cx-memory-b": false,
+      "_____10c-___pwr-cx-mem__t-i": 100,
+      "_____10c-___pwr-cx-mem_gr-i": 1,
+      "_____10c-___pwr-cx-mem_ls-i": 9,
       "_____10c-___pwr-cx-__name-t": "Brain_Power",
-      "_____10c-___pwr-cx-_group-t": "IPU",
-      "_____10c-_death-cx-_n_cnt-i": 1,
-      "_____10c-_death-cx-synatt-i": 100,
-      "_____10c-_death-cx-de_gen-f": 0.01,
-      "_____10c-_death-cx-pspuni-b": false,
-      "_____10c-_death-nx-pstcrm-f": 35,
-      "_____10c-_death-cx-dstmap-d": {},
-      "_____10c-_death-cx-___bbx-i": 1,
-      "_____10c-_death-cx-___bby-i": 1,
-      "_____10c-_death-cx-___bbz-i": 1,
-      "_____10c-_death-cx-rcordx-i": 10,
-      "_____10c-_death-cx-rcordy-i": 0,
-      "_____10c-_death-cx-rcordz-i": -30,
-      "_____10c-_death-cx-2dcorx-i": null,
-      "_____10c-_death-cx-2dcory-i": null,
-      "_____10c-_death-cx-gd_vis-b": true,
-      "_____10c-_death-nx-pstcr_-f": 5,
-      "_____10c-_death-nx-fire_t-f": 1,
-      "_____10c-_death-nx-refrac-i": 0,
-      "_____10c-_death-nx-leak_c-f": 10,
-      "_____10c-_death-nx-leak_v-f": 0,
-      "_____10c-_death-nx-c_fr_c-i": 3,
-      "_____10c-_death-nx-snooze-f": 0,
-      "_____10c-_death-nx-ftincx-f": 0,
-      "_____10c-_death-nx-ftincy-f": 0,
-      "_____10c-_death-nx-ftincz-f": 0,
-      "_____10c-_death-nx-fthlim-i": 0,
-      "_____10c-_death-nx-mp_acc-b": true,
-      "_____10c-_death-cx-__name-t": "Brain_Death",
-      "_____10c-_death-cx-_group-t": "IPU",
-      "_____10c-i__inf-cx-_n_cnt-i": 1,
-      "_____10c-i__inf-cx-synatt-i": 100,
-      "_____10c-i__inf-cx-de_gen-f": 0.01,
-      "_____10c-i__inf-cx-pspuni-b": false,
-      "_____10c-i__inf-nx-pstcrm-f": 35,
-      "_____10c-i__inf-cx-dstmap-d": {},
-      "_____10c-i__inf-cx-___bbx-i": 3,
-      "_____10c-i__inf-cx-___bby-i": 1,
-      "_____10c-i__inf-cx-___bbz-i": 1,
-      "_____10c-i__inf-cx-rcordx-i": 50,
-      "_____10c-i__inf-cx-rcordy-i": 0,
-      "_____10c-i__inf-cx-rcordz-i": -15,
-      "_____10c-i__inf-cx-2dcorx-i": null,
-      "_____10c-i__inf-cx-2dcory-i": null,
-      "_____10c-i__inf-cx-gd_vis-b": true,
-      "_____10c-i__inf-nx-pstcr_-f": 5,
-      "_____10c-i__inf-nx-fire_t-f": 1,
-      "_____10c-i__inf-nx-refrac-i": 0,
-      "_____10c-i__inf-nx-leak_c-f": 10,
-      "_____10c-i__inf-nx-leak_v-f": 0,
-      "_____10c-i__inf-nx-c_fr_c-i": 3,
-      "_____10c-i__inf-nx-snooze-f": 0,
-      "_____10c-i__inf-nx-ftincx-f": 0,
-      "_____10c-i__inf-nx-ftincy-f": 0,
-      "_____10c-i__inf-nx-ftincz-f": 0,
-      "_____10c-i__inf-nx-fthlim-i": 0,
-      "_____10c-i__inf-nx-mp_acc-b": true,
-      "_____10c-i__inf-cx-__name-t": "ir_ipu",
-      "_____10c-i__inf-cx-_group-t": "IPU",
-      "_____10c-ishock-cx-_n_cnt-i": 1,
-      "_____10c-ishock-cx-synatt-i": 100,
-      "_____10c-ishock-cx-de_gen-f": 0,
-      "_____10c-ishock-cx-pspuni-b": false,
-      "_____10c-ishock-nx-pstcrm-f": 35,
-      "_____10c-ishock-cx-dstmap-d": {},
-      "_____10c-ishock-cx-___bbx-i": 1,
-      "_____10c-ishock-cx-___bby-i": 1,
-      "_____10c-ishock-cx-___bbz-i": 10,
-      "_____10c-ishock-cx-rcordx-i": 80,
-      "_____10c-ishock-cx-rcordy-i": 0,
-      "_____10c-ishock-cx-rcordz-i": -30,
-      "_____10c-ishock-cx-2dcorx-i": null,
-      "_____10c-ishock-cx-2dcory-i": null,
-      "_____10c-ishock-cx-gd_vis-b": true,
-      "_____10c-ishock-nx-pstcr_-f": 5,
-      "_____10c-ishock-nx-fire_t-f": 1,
-      "_____10c-ishock-nx-refrac-i": 0,
-      "_____10c-ishock-nx-leak_c-f": 10,
-      "_____10c-ishock-nx-leak_v-f": 0,
-      "_____10c-ishock-nx-c_fr_c-i": 3,
-      "_____10c-ishock-nx-snooze-f": 0,
-      "_____10c-ishock-nx-ftincx-f": 0,
-      "_____10c-ishock-nx-ftincy-f": 0,
-      "_____10c-ishock-nx-ftincz-f": 0,
-      "_____10c-ishock-nx-fthlim-i": 0,
-      "_____10c-ishock-nx-mp_acc-b": true,
-      "_____10c-ishock-cx-__name-t": "shock_ipu",
-      "_____10c-ishock-cx-_group-t": "IPU",
-      "_____10c-ii_inf-cx-_n_cnt-i": 1,
-      "_____10c-ii_inf-cx-synatt-i": 100,
-      "_____10c-ii_inf-cx-de_gen-f": 0.01,
-      "_____10c-ii_inf-cx-pspuni-b": false,
-      "_____10c-ii_inf-nx-pstcrm-f": 35,
-      "_____10c-ii_inf-cx-dstmap-d": {},
-      "_____10c-ii_inf-cx-___bbx-i": 3,
-      "_____10c-ii_inf-cx-___bby-i": 1,
-      "_____10c-ii_inf-cx-___bbz-i": 1,
-      "_____10c-ii_inf-cx-rcordx-i": 60,
-      "_____10c-ii_inf-cx-rcordy-i": 0,
-      "_____10c-ii_inf-cx-rcordz-i": -15,
-      "_____10c-ii_inf-cx-2dcorx-i": null,
-      "_____10c-ii_inf-cx-2dcory-i": null,
-      "_____10c-ii_inf-cx-gd_vis-b": true,
-      "_____10c-ii_inf-nx-pstcr_-f": 5,
-      "_____10c-ii_inf-nx-fire_t-f": 1,
-      "_____10c-ii_inf-nx-refrac-i": 0,
-      "_____10c-ii_inf-nx-leak_c-f": 10,
-      "_____10c-ii_inf-nx-leak_v-f": 0,
-      "_____10c-ii_inf-nx-c_fr_c-i": 3,
-      "_____10c-ii_inf-nx-snooze-f": 0,
-      "_____10c-ii_inf-nx-ftincx-f": 0,
-      "_____10c-ii_inf-nx-ftincy-f": 0,
-      "_____10c-ii_inf-nx-ftincz-f": 0,
-      "_____10c-ii_inf-nx-fthlim-i": 0,
-      "_____10c-ii_inf-nx-mp_acc-b": true,
-      "_____10c-ii_inf-cx-__name-t": "inv_ir_ipu",
-      "_____10c-ii_inf-cx-_group-t": "IPU",
-      "_____10c-i__pro-cx-_n_cnt-i": 1,
-      "_____10c-i__pro-cx-synatt-i": 100,
-      "_____10c-i__pro-cx-de_gen-f": 0,
-      "_____10c-i__pro-cx-pspuni-b": false,
-      "_____10c-i__pro-nx-pstcrm-f": 35,
-      "_____10c-i__pro-cx-dstmap-d": {
-         "t__pro": [
+      "_____10c-___pwr-cx-_group-t": "CORE",
+      "_____10c-o__mot-cx-subgrp-t": "",
+      "_____10c-o__mot-cx-_n_cnt-i": 1,
+      "_____10c-o__mot-cx-synatt-i": 100,
+      "_____10c-o__mot-cx-de_gen-f": 0,
+      "_____10c-o__mot-cx-pspuni-b": false,
+      "_____10c-o__mot-nx-pstcrm-f": 35,
+      "_____10c-o__mot-cx-dstmap-d": {},
+      "_____10c-o__mot-cx-___bbx-i": 8,
+      "_____10c-o__mot-cx-___bby-i": 1,
+      "_____10c-o__mot-cx-___bbz-i": 1,
+      "_____10c-o__mot-cx-rcordx-i": -31,
+      "_____10c-o__mot-cx-rcordy-i": 0,
+      "_____10c-o__mot-cx-rcordz-i": -22,
+      "_____10c-o__mot-cx-2dcorx-i": 2083,
+      "_____10c-o__mot-cx-2dcory-i": 187,
+      "_____10c-o__mot-cx-gd_vis-b": true,
+      "_____10c-o__mot-nx-pstcr_-f": 6,
+      "_____10c-o__mot-nx-fire_t-f": 1,
+      "_____10c-o__mot-nx-refrac-i": 0,
+      "_____10c-o__mot-nx-leak_c-f": 0,
+      "_____10c-o__mot-nx-leak_v-f": 0,
+      "_____10c-o__mot-nx-c_fr_c-i": 0,
+      "_____10c-o__mot-nx-snooze-f": 0,
+      "_____10c-o__mot-nx-ftincx-f": 0,
+      "_____10c-o__mot-nx-ftincy-f": 0,
+      "_____10c-o__mot-nx-ftincz-f": 0,
+      "_____10c-o__mot-nx-fthlim-i": 0,
+      "_____10c-o__mot-nx-mp_acc-b": false,
+      "_____10c-o__mot-nx-mp_psp-b": false,
+      "_____10c-o__mot-cx-memory-b": false,
+      "_____10c-o__mot-cx-mem__t-i": 100,
+      "_____10c-o__mot-cx-mem_gr-i": 1,
+      "_____10c-o__mot-cx-mem_ls-i": 9,
+      "_____10c-o__mot-cx-__name-t": "motor_opu",
+      "_____10c-o__mot-cx-_group-t": "OPU",
+      "_____10c-m__lef-cx-subgrp-t": "",
+      "_____10c-m__lef-cx-_n_cnt-i": 1,
+      "_____10c-m__lef-cx-synatt-i": 100,
+      "_____10c-m__lef-cx-de_gen-f": 0,
+      "_____10c-m__lef-cx-pspuni-b": true,
+      "_____10c-m__lef-nx-pstcrm-f": 35,
+      "_____10c-m__lef-cx-dstmap-d": {},
+      "_____10c-m__lef-cx-___bbx-i": 1,
+      "_____10c-m__lef-cx-___bby-i": 1,
+      "_____10c-m__lef-cx-___bbz-i": 1,
+      "_____10c-m__lef-cx-rcordx-i": -48,
+      "_____10c-m__lef-cx-rcordy-i": 0,
+      "_____10c-m__lef-cx-rcordz-i": 5,
+      "_____10c-m__lef-cx-2dcorx-i": 887,
+      "_____10c-m__lef-cx-2dcory-i": 533,
+      "_____10c-m__lef-cx-gd_vis-b": true,
+      "_____10c-m__lef-nx-pstcr_-f": 5,
+      "_____10c-m__lef-nx-fire_t-f": 1,
+      "_____10c-m__lef-nx-refrac-i": 0,
+      "_____10c-m__lef-nx-leak_c-f": 10,
+      "_____10c-m__lef-nx-leak_v-f": 0,
+      "_____10c-m__lef-nx-c_fr_c-i": 3,
+      "_____10c-m__lef-nx-snooze-f": 0,
+      "_____10c-m__lef-nx-ftincx-f": 0,
+      "_____10c-m__lef-nx-ftincy-f": 0,
+      "_____10c-m__lef-nx-ftincz-f": 0,
+      "_____10c-m__lef-nx-fthlim-i": 0,
+      "_____10c-m__lef-nx-mp_acc-b": true,
+      "_____10c-m__lef-nx-mp_psp-b": false,
+      "_____10c-m__lef-cx-memory-b": false,
+      "_____10c-m__lef-cx-mem__t-i": 100,
+      "_____10c-m__lef-cx-mem_gr-i": 1,
+      "_____10c-m__lef-cx-mem_ls-i": 9,
+      "_____10c-m__lef-cx-__name-t": "turn_left",
+      "_____10c-m__lef-cx-_group-t": "CUSTOM",
+      "_____10c-m__rig-cx-subgrp-t": "",
+      "_____10c-m__rig-cx-_n_cnt-i": 1,
+      "_____10c-m__rig-cx-synatt-i": 100,
+      "_____10c-m__rig-cx-de_gen-f": 0,
+      "_____10c-m__rig-cx-pspuni-b": true,
+      "_____10c-m__rig-nx-pstcrm-f": 35,
+      "_____10c-m__rig-cx-dstmap-d": {},
+      "_____10c-m__rig-cx-___bbx-i": 1,
+      "_____10c-m__rig-cx-___bby-i": 1,
+      "_____10c-m__rig-cx-___bbz-i": 1,
+      "_____10c-m__rig-cx-rcordx-i": -28,
+      "_____10c-m__rig-cx-rcordy-i": 0,
+      "_____10c-m__rig-cx-rcordz-i": 5,
+      "_____10c-m__rig-cx-2dcorx-i": 896,
+      "_____10c-m__rig-cx-2dcory-i": 239,
+      "_____10c-m__rig-cx-gd_vis-b": true,
+      "_____10c-m__rig-nx-pstcr_-f": 5,
+      "_____10c-m__rig-nx-fire_t-f": 1,
+      "_____10c-m__rig-nx-refrac-i": 0,
+      "_____10c-m__rig-nx-leak_c-f": 10,
+      "_____10c-m__rig-nx-leak_v-f": 0,
+      "_____10c-m__rig-nx-c_fr_c-i": 3,
+      "_____10c-m__rig-nx-snooze-f": 0,
+      "_____10c-m__rig-nx-ftincx-f": 0,
+      "_____10c-m__rig-nx-ftincy-f": 0,
+      "_____10c-m__rig-nx-ftincz-f": 0,
+      "_____10c-m__rig-nx-fthlim-i": 0,
+      "_____10c-m__rig-nx-mp_acc-b": true,
+      "_____10c-m__rig-nx-mp_psp-b": false,
+      "_____10c-m__rig-cx-memory-b": false,
+      "_____10c-m__rig-cx-mem__t-i": 100,
+      "_____10c-m__rig-cx-mem_gr-i": 1,
+      "_____10c-m__rig-cx-mem_ls-i": 9,
+      "_____10c-m__rig-cx-__name-t": "turn_right",
+      "_____10c-m__rig-cx-_group-t": "CUSTOM",
+      "_____10c-m__for-cx-subgrp-t": "",
+      "_____10c-m__for-cx-_n_cnt-i": 1,
+      "_____10c-m__for-cx-synatt-i": 100,
+      "_____10c-m__for-cx-de_gen-f": 0,
+      "_____10c-m__for-cx-pspuni-b": true,
+      "_____10c-m__for-nx-pstcrm-f": 35,
+      "_____10c-m__for-cx-dstmap-d": {
+         "CRSMot": [
             [
-               "block_to_block",
+               "projector",
                [
                   1,
                   1,
@@ -1575,40 +1656,40 @@
                1,
                1
             ]
-         ]
-      },
-      "_____10c-i__pro-cx-___bbx-i": 1,
-      "_____10c-i__pro-cx-___bby-i": 1,
-      "_____10c-i__pro-cx-___bbz-i": 10,
-      "_____10c-i__pro-cx-rcordx-i": 70,
-      "_____10c-i__pro-cx-rcordy-i": 0,
-      "_____10c-i__pro-cx-rcordz-i": -30,
-      "_____10c-i__pro-cx-2dcorx-i": null,
-      "_____10c-i__pro-cx-2dcory-i": null,
-      "_____10c-i__pro-cx-gd_vis-b": true,
-      "_____10c-i__pro-nx-pstcr_-f": 5,
-      "_____10c-i__pro-nx-fire_t-f": 1,
-      "_____10c-i__pro-nx-refrac-i": 0,
-      "_____10c-i__pro-nx-leak_c-f": 10,
-      "_____10c-i__pro-nx-leak_v-f": 0,
-      "_____10c-i__pro-nx-c_fr_c-i": 1,
-      "_____10c-i__pro-nx-snooze-f": 0,
-      "_____10c-i__pro-nx-ftincx-f": 0,
-      "_____10c-i__pro-nx-ftincy-f": 0,
-      "_____10c-i__pro-nx-ftincz-f": 0,
-      "_____10c-i__pro-nx-fthlim-i": 0,
-      "_____10c-i__pro-nx-mp_acc-b": true,
-      "_____10c-i__pro-cx-__name-t": "proximity_ipu",
-      "_____10c-i__pro-cx-_group-t": "memory",
-      "_____10c-t__pro-cx-_n_cnt-i": 1,
-      "_____10c-t__pro-cx-synatt-i": 20,
-      "_____10c-t__pro-cx-de_gen-f": 0,
-      "_____10c-t__pro-cx-pspuni-b": true,
-      "_____10c-t__pro-nx-pstcrm-f": 35,
-      "_____10c-t__pro-cx-dstmap-d": {
-         "o__bat": [
+         ],
+         "CKQM2_": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ],
+         "CO4M3_": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ],
+         "CTGM4_": [
             [
-               "block_to_block",
+               "projector",
                [
                   1,
                   1,
@@ -1622,357 +1703,44 @@
             ]
          ]
       },
-      "_____10c-t__pro-cx-___bbx-i": 1,
-      "_____10c-t__pro-cx-___bby-i": 1,
-      "_____10c-t__pro-cx-___bbz-i": 10,
-      "_____10c-t__pro-cx-rcordx-i": 60,
-      "_____10c-t__pro-cx-rcordy-i": 0,
-      "_____10c-t__pro-cx-rcordz-i": -30,
-      "_____10c-t__pro-cx-2dcorx-i": null,
-      "_____10c-t__pro-cx-2dcory-i": null,
-      "_____10c-t__pro-cx-gd_vis-b": true,
-      "_____10c-t__pro-nx-pstcr_-f": 5,
-      "_____10c-t__pro-nx-fire_t-f": 2,
-      "_____10c-t__pro-nx-refrac-i": 0,
-      "_____10c-t__pro-nx-leak_c-f": 10,
-      "_____10c-t__pro-nx-leak_v-f": 0,
-      "_____10c-t__pro-nx-c_fr_c-i": 1,
-      "_____10c-t__pro-nx-snooze-f": 0,
-      "_____10c-t__pro-nx-ftincx-f": 0,
-      "_____10c-t__pro-nx-ftincy-f": 0,
-      "_____10c-t__pro-nx-ftincz-f": 0,
-      "_____10c-t__pro-nx-fthlim-i": 0,
-      "_____10c-t__pro-nx-mp_acc-b": true,
-      "_____10c-t__pro-cx-__name-t": "proximity_thalamus",
-      "_____10c-t__pro-cx-_group-t": "memory",
-      "_____10c-i__bat-cx-_n_cnt-i": 1,
-      "_____10c-i__bat-cx-synatt-i": 100,
-      "_____10c-i__bat-cx-de_gen-f": 0,
-      "_____10c-i__bat-cx-pspuni-b": false,
-      "_____10c-i__bat-nx-pstcrm-f": 35,
-      "_____10c-i__bat-cx-dstmap-d": {},
-      "_____10c-i__bat-cx-___bbx-i": 1,
-      "_____10c-i__bat-cx-___bby-i": 1,
-      "_____10c-i__bat-cx-___bbz-i": 10,
-      "_____10c-i__bat-cx-rcordx-i": 90,
-      "_____10c-i__bat-cx-rcordy-i": 0,
-      "_____10c-i__bat-cx-rcordz-i": -30,
-      "_____10c-i__bat-cx-2dcorx-i": null,
-      "_____10c-i__bat-cx-2dcory-i": null,
-      "_____10c-i__bat-cx-gd_vis-b": true,
-      "_____10c-i__bat-nx-pstcr_-f": 5,
-      "_____10c-i__bat-nx-fire_t-f": 1,
-      "_____10c-i__bat-nx-refrac-i": 0,
-      "_____10c-i__bat-nx-leak_c-f": 0,
-      "_____10c-i__bat-nx-leak_v-f": 0,
-      "_____10c-i__bat-nx-c_fr_c-i": 3,
-      "_____10c-i__bat-nx-snooze-f": 0,
-      "_____10c-i__bat-nx-ftincx-f": 0,
-      "_____10c-i__bat-nx-ftincy-f": 0,
-      "_____10c-i__bat-nx-ftincz-f": 0,
-      "_____10c-i__bat-nx-fthlim-i": 0,
-      "_____10c-i__bat-nx-mp_acc-b": true,
-      "_____10c-i__bat-cx-__name-t": "battery_ipu",
-      "_____10c-i__bat-cx-_group-t": "IPU",
-      "_____10c-o__bat-cx-_n_cnt-i": 1,
-      "_____10c-o__bat-cx-synatt-i": 100,
-      "_____10c-o__bat-cx-de_gen-f": 0,
-      "_____10c-o__bat-cx-pspuni-b": false,
-      "_____10c-o__bat-nx-pstcrm-f": 35,
-      "_____10c-o__bat-cx-dstmap-d": {},
-      "_____10c-o__bat-cx-___bbx-i": 1,
-      "_____10c-o__bat-cx-___bby-i": 1,
-      "_____10c-o__bat-cx-___bbz-i": 10,
-      "_____10c-o__bat-cx-rcordx-i": 135,
-      "_____10c-o__bat-cx-rcordy-i": 0,
-      "_____10c-o__bat-cx-rcordz-i": -30,
-      "_____10c-o__bat-cx-2dcorx-i": null,
-      "_____10c-o__bat-cx-2dcory-i": null,
-      "_____10c-o__bat-cx-gd_vis-b": true,
-      "_____10c-o__bat-nx-pstcr_-f": 5,
-      "_____10c-o__bat-nx-fire_t-f": 1,
-      "_____10c-o__bat-nx-refrac-i": 0,
-      "_____10c-o__bat-nx-leak_c-f": 0,
-      "_____10c-o__bat-nx-leak_v-f": 0,
-      "_____10c-o__bat-nx-c_fr_c-i": 3,
-      "_____10c-o__bat-nx-snooze-f": 0,
-      "_____10c-o__bat-nx-ftincx-f": 0,
-      "_____10c-o__bat-nx-ftincy-f": 0,
-      "_____10c-o__bat-nx-ftincz-f": 0,
-      "_____10c-o__bat-nx-fthlim-i": 0,
-      "_____10c-o__bat-nx-mp_acc-b": true,
-      "_____10c-o__bat-cx-__name-t": "battery_opu",
-      "_____10c-o__bat-cx-_group-t": "OPU",
-      "_____10c-o_init-cx-_n_cnt-i": 1,
-      "_____10c-o_init-cx-synatt-i": 100,
-      "_____10c-o_init-cx-de_gen-f": 0,
-      "_____10c-o_init-cx-pspuni-b": false,
-      "_____10c-o_init-nx-pstcrm-f": 35,
-      "_____10c-o_init-cx-dstmap-d": {},
-      "_____10c-o_init-cx-___bbx-i": 5,
-      "_____10c-o_init-cx-___bby-i": 1,
-      "_____10c-o_init-cx-___bbz-i": 1,
-      "_____10c-o_init-cx-rcordx-i": 110,
-      "_____10c-o_init-cx-rcordy-i": 0,
-      "_____10c-o_init-cx-rcordz-i": -35,
-      "_____10c-o_init-cx-2dcorx-i": null,
-      "_____10c-o_init-cx-2dcory-i": null,
-      "_____10c-o_init-cx-gd_vis-b": true,
-      "_____10c-o_init-nx-pstcr_-f": 5,
-      "_____10c-o_init-nx-fire_t-f": 1,
-      "_____10c-o_init-nx-refrac-i": 0,
-      "_____10c-o_init-nx-leak_c-f": 0,
-      "_____10c-o_init-nx-leak_v-f": 0,
-      "_____10c-o_init-nx-c_fr_c-i": 3,
-      "_____10c-o_init-nx-snooze-f": 0,
-      "_____10c-o_init-nx-ftincx-f": 0,
-      "_____10c-o_init-nx-ftincy-f": 0,
-      "_____10c-o_init-nx-ftincz-f": 0,
-      "_____10c-o_init-nx-fthlim-i": 0,
-      "_____10c-o_init-nx-mp_acc-b": true,
-      "_____10c-o_init-cx-__name-t": "position_init_opu",
-      "_____10c-o_init-cx-_group-t": "OPU",
-      "_____10c-o__mot-cx-_n_cnt-i": 1,
-      "_____10c-o__mot-cx-synatt-i": 100,
-      "_____10c-o__mot-cx-de_gen-f": 0,
-      "_____10c-o__mot-cx-pspuni-b": false,
-      "_____10c-o__mot-nx-pstcrm-f": 35,
-      "_____10c-o__mot-cx-dstmap-d": {},
-      "_____10c-o__mot-cx-___bbx-i": 8,
-      "_____10c-o__mot-cx-___bby-i": 1,
-      "_____10c-o__mot-cx-___bbz-i": 1,
-      "_____10c-o__mot-cx-rcordx-i": 110,
-      "_____10c-o__mot-cx-rcordy-i": 0,
-      "_____10c-o__mot-cx-rcordz-i": -30,
-      "_____10c-o__mot-cx-2dcorx-i": null,
-      "_____10c-o__mot-cx-2dcory-i": null,
-      "_____10c-o__mot-cx-gd_vis-b": true,
-      "_____10c-o__mot-nx-pstcr_-f": 6,
-      "_____10c-o__mot-nx-fire_t-f": 1,
-      "_____10c-o__mot-nx-refrac-i": 0,
-      "_____10c-o__mot-nx-leak_c-f": 0,
-      "_____10c-o__mot-nx-leak_v-f": 0,
-      "_____10c-o__mot-nx-c_fr_c-i": 3,
-      "_____10c-o__mot-nx-snooze-f": 0,
-      "_____10c-o__mot-nx-ftincx-f": 0,
-      "_____10c-o__mot-nx-ftincy-f": 0,
-      "_____10c-o__mot-nx-ftincz-f": 0,
-      "_____10c-o__mot-nx-fthlim-i": 0,
-      "_____10c-o__mot-nx-mp_acc-b": true,
-      "_____10c-o__mot-cx-__name-t": "motor_opu",
-      "_____10c-o__mot-cx-_group-t": "OPU",
-      "_____10c-o_aptr-cx-_n_cnt-i": 1,
-      "_____10c-o_aptr-cx-synatt-i": 100,
-      "_____10c-o_aptr-cx-de_gen-f": 0.0,
-      "_____10c-o_aptr-cx-pspuni-b": false,
-      "_____10c-o_aptr-nx-pstcrm-f": 35.0,
-      "_____10c-o_aptr-cx-dstmap-d": {},
-      "_____10c-o_aptr-cx-___bbx-i": 1,
-      "_____10c-o_aptr-cx-___bby-i": 1,
-      "_____10c-o_aptr-cx-___bbz-i": 10,
-      "_____10c-o_aptr-cx-rcordx-i": 55,
-      "_____10c-o_aptr-cx-rcordy-i": 42,
-      "_____10c-o_aptr-cx-rcordz-i": -64,
-      "_____10c-o_aptr-cx-2dcorx-i": null,
-      "_____10c-o_aptr-cx-2dcory-i": null,
-      "_____10c-o_aptr-cx-gd_vis-b": true,
-      "_____10c-o_aptr-nx-pstcr_-f": 6.0,
-      "_____10c-o_aptr-nx-fire_t-f": 1.0,
-      "_____10c-o_aptr-nx-refrac-i": 0,
-      "_____10c-o_aptr-nx-leak_c-f": 0,
-      "_____10c-o_aptr-nx-leak_v-f": 0,
-      "_____10c-o_aptr-nx-c_fr_c-i": 3,
-      "_____10c-o_aptr-nx-snooze-f": 0,
-      "_____10c-o_aptr-nx-ftincx-f": 0,
-      "_____10c-o_aptr-nx-ftincy-f": 0,
-      "_____10c-o_aptr-nx-ftincz-f": 0,
-      "_____10c-o_aptr-nx-fthlim-i": 0,
-      "_____10c-o_aptr-nx-mp_acc-b": true,
-      "_____10c-o_aptr-cx-__name-t": "aperture_opu",
-      "_____10c-o_aptr-cx-_group-t": "OPU",
-      "_____10c-o_vres-cx-_n_cnt-i": 1,
-      "_____10c-o_vres-cx-synatt-i": 100,
-      "_____10c-o_vres-cx-de_gen-f": 0.0,
-      "_____10c-o_vres-cx-pspuni-b": false,
-      "_____10c-o_vres-nx-pstcrm-f": 35.0,
-      "_____10c-o_vres-cx-dstmap-d": {},
-      "_____10c-o_vres-cx-___bbx-i": 2,
-      "_____10c-o_vres-cx-___bby-i": 1,
-      "_____10c-o_vres-cx-___bbz-i": 10,
-      "_____10c-o_vres-cx-rcordx-i": 30,
-      "_____10c-o_vres-cx-rcordy-i": 42,
-      "_____10c-o_vres-cx-rcordz-i": -64,
-      "_____10c-o_vres-cx-2dcorx-i": null,
-      "_____10c-o_vres-cx-2dcory-i": null,
-      "_____10c-o_vres-cx-gd_vis-b": true,
-      "_____10c-o_vres-nx-pstcr_-f": 6.0,
-      "_____10c-o_vres-nx-fire_t-f": 1.0,
-      "_____10c-o_vres-nx-refrac-i": 0,
-      "_____10c-o_vres-nx-leak_c-f": 0,
-      "_____10c-o_vres-nx-leak_v-f": 0,
-      "_____10c-o_vres-nx-c_fr_c-i": 3,
-      "_____10c-o_vres-nx-snooze-f": 0,
-      "_____10c-o_vres-nx-ftincx-f": 0,
-      "_____10c-o_vres-nx-ftincy-f": 0,
-      "_____10c-o_vres-nx-ftincz-f": 0,
-      "_____10c-o_vres-nx-fthlim-i": 0,
-      "_____10c-o_vres-nx-mp_acc-b": true,
-      "_____10c-o_vres-cx-__name-t": "vision_resolution_opu",
-      "_____10c-o_vres-cx-_group-t": "OPU",
-      "_____10c-o_vact-cx-_n_cnt-i": 20,
-      "_____10c-o_vact-cx-synatt-i": 100,
-      "_____10c-o_vact-cx-de_gen-f": 0.0,
-      "_____10c-o_vact-cx-pspuni-b": false,
-      "_____10c-o_vact-nx-pstcrm-f": 35.0,
-      "_____10c-o_vact-cx-dstmap-d": {},
-      "_____10c-o_vact-cx-___bbx-i": 2,
-      "_____10c-o_vact-cx-___bby-i": 1,
-      "_____10c-o_vact-cx-___bbz-i": 1,
-      "_____10c-o_vact-cx-rcordx-i": 35,
-      "_____10c-o_vact-cx-rcordy-i": 42,
-      "_____10c-o_vact-cx-rcordz-i": -64,
-      "_____10c-o_vact-cx-2dcorx-i": null,
-      "_____10c-o_vact-cx-2dcory-i": null,
-      "_____10c-o_vact-cx-gd_vis-b": true,
-      "_____10c-o_vact-nx-pstcr_-f": 6.0,
-      "_____10c-o_vact-nx-fire_t-f": 1.0,
-      "_____10c-o_vact-nx-refrac-i": 0,
-      "_____10c-o_vact-nx-leak_c-f": 0,
-      "_____10c-o_vact-nx-leak_v-f": 0,
-      "_____10c-o_vact-nx-c_fr_c-i": 3,
-      "_____10c-o_vact-nx-snooze-f": 0,
-      "_____10c-o_vact-nx-ftincx-f": 0,
-      "_____10c-o_vact-nx-ftincy-f": 0,
-      "_____10c-o_vact-nx-ftincz-f": 0,
-      "_____10c-o_vact-nx-fthlim-i": 0,
-      "_____10c-o_vact-nx-mp_acc-b": true,
-      "_____10c-o_vact-cx-__name-t": "vision_acuity_opu",
-      "_____10c-o_vact-cx-_group-t": "OPU",
-      "_____10c-o_misc-cx-_n_cnt-i": 1,
-      "_____10c-o_misc-cx-synatt-i": 100,
-      "_____10c-o_misc-cx-de_gen-f": 0,
-      "_____10c-o_misc-cx-pspuni-b": false,
-      "_____10c-o_misc-nx-pstcrm-f": 35,
-      "_____10c-o_misc-cx-dstmap-d": {},
-      "_____10c-o_misc-cx-___bbx-i": 6,
-      "_____10c-o_misc-cx-___bby-i": 1,
-      "_____10c-o_misc-cx-___bbz-i": 1,
-      "_____10c-o_misc-cx-rcordx-i": 125,
-      "_____10c-o_misc-cx-rcordy-i": 0,
-      "_____10c-o_misc-cx-rcordz-i": -35,
-      "_____10c-o_misc-cx-2dcorx-i": null,
-      "_____10c-o_misc-cx-2dcory-i": null,
-      "_____10c-o_misc-cx-gd_vis-b": true,
-      "_____10c-o_misc-nx-pstcr_-f": 6,
-      "_____10c-o_misc-nx-fire_t-f": 1,
-      "_____10c-o_misc-nx-refrac-i": 0,
-      "_____10c-o_misc-nx-leak_c-f": 0,
-      "_____10c-o_misc-nx-leak_v-f": 0,
-      "_____10c-o_misc-nx-c_fr_c-i": 3,
-      "_____10c-o_misc-nx-snooze-f": 0,
-      "_____10c-o_misc-nx-ftincx-f": 0,
-      "_____10c-o_misc-nx-ftincy-f": 0,
-      "_____10c-o_misc-nx-ftincz-f": 0,
-      "_____10c-o_misc-nx-fthlim-i": 0,
-      "_____10c-o_misc-nx-mp_acc-b": true,
-      "_____10c-o_misc-cx-__name-t": "misc_opu",
-      "_____10c-o_misc-cx-_group-t": "OPU",
-      "_____10c-o__nav-cx-_n_cnt-i": 1,
-      "_____10c-o__nav-cx-synatt-i": 100,
-      "_____10c-o__nav-cx-de_gen-f": 0.01,
-      "_____10c-o__nav-cx-pspuni-b": false,
-      "_____10c-o__nav-nx-pstcrm-f": 35,
-      "_____10c-o__nav-cx-dstmap-d": {},
-      "_____10c-o__nav-cx-___bbx-i": 3,
-      "_____10c-o__nav-cx-___bby-i": 1,
-      "_____10c-o__nav-cx-___bbz-i": 20,
-      "_____10c-o__nav-cx-rcordx-i": 145,
-      "_____10c-o__nav-cx-rcordy-i": 0,
-      "_____10c-o__nav-cx-rcordz-i": -30,
-      "_____10c-o__nav-cx-2dcorx-i": null,
-      "_____10c-o__nav-cx-2dcory-i": null,
-      "_____10c-o__nav-cx-gd_vis-b": true,
-      "_____10c-o__nav-nx-pstcr_-f": 6,
-      "_____10c-o__nav-nx-fire_t-f": 1,
-      "_____10c-o__nav-nx-refrac-i": 0,
-      "_____10c-o__nav-nx-leak_c-f": 0,
-      "_____10c-o__nav-nx-leak_v-f": 0,
-      "_____10c-o__nav-nx-c_fr_c-i": 3,
-      "_____10c-o__nav-nx-snooze-f": 0,
-      "_____10c-o__nav-nx-ftincx-f": 0,
-      "_____10c-o__nav-nx-ftincy-f": 0,
-      "_____10c-o__nav-nx-ftincz-f": 0,
-      "_____10c-o__nav-nx-fthlim-i": 0,
-      "_____10c-o__nav-nx-mp_acc-b": true,
-      "_____10c-o__nav-cx-__name-t": "navigate_opu",
-      "_____10c-o__nav-cx-_group-t": "OPU",
-      "_____10c-o__spd-cx-_n_cnt-i": 1,
-      "_____10c-o__spd-cx-synatt-i": 100,
-      "_____10c-o__spd-cx-de_gen-f": 0.01,
-      "_____10c-o__spd-cx-pspuni-b": false,
-      "_____10c-o__spd-nx-pstcrm-f": 35,
-      "_____10c-o__spd-cx-dstmap-d": {},
-      "_____10c-o__spd-cx-___bbx-i": 1,
-      "_____10c-o__spd-cx-___bby-i": 1,
-      "_____10c-o__spd-cx-___bbz-i": 10,
-      "_____10c-o__spd-cx-rcordx-i": 150,
-      "_____10c-o__spd-cx-rcordy-i": 0,
-      "_____10c-o__spd-cx-rcordz-i": -30,
-      "_____10c-o__spd-cx-2dcorx-i": null,
-      "_____10c-o__spd-cx-2dcory-i": null,
-      "_____10c-o__spd-cx-gd_vis-b": true,
-      "_____10c-o__spd-nx-pstcr_-f": 6,
-      "_____10c-o__spd-nx-fire_t-f": 1,
-      "_____10c-o__spd-nx-refrac-i": 0,
-      "_____10c-o__spd-nx-leak_c-f": 0,
-      "_____10c-o__spd-nx-leak_v-f": 0,
-      "_____10c-o__spd-nx-c_fr_c-i": 3,
-      "_____10c-o__spd-nx-snooze-f": 0,
-      "_____10c-o__spd-nx-ftincx-f": 0,
-      "_____10c-o__spd-nx-ftincy-f": 0,
-      "_____10c-o__spd-nx-ftincz-f": 0,
-      "_____10c-o__spd-nx-fthlim-i": 0,
-      "_____10c-o__spd-nx-mp_acc-b": true,
-      "_____10c-o__spd-cx-__name-t": "speed",
-      "_____10c-o__spd-cx-_group-t": "OPU",
-      "_____10c-o__ser-cx-_n_cnt-i": 1,
-      "_____10c-o__ser-cx-synatt-i": 100,
-      "_____10c-o__ser-cx-de_gen-f": 0,
-      "_____10c-o__ser-cx-pspuni-b": false,
-      "_____10c-o__ser-nx-pstcrm-f": 35,
-      "_____10c-o__ser-cx-dstmap-d": {},
-      "_____10c-o__ser-cx-___bbx-i": 4,
-      "_____10c-o__ser-cx-___bby-i": 1,
-      "_____10c-o__ser-cx-___bbz-i": 1,
-      "_____10c-o__ser-cx-rcordx-i": 125,
-      "_____10c-o__ser-cx-rcordy-i": 0,
-      "_____10c-o__ser-cx-rcordz-i": -30,
-      "_____10c-o__ser-cx-2dcorx-i": null,
-      "_____10c-o__ser-cx-2dcory-i": null,
-      "_____10c-o__ser-cx-gd_vis-b": true,
-      "_____10c-o__ser-nx-pstcr_-f": 3,
-      "_____10c-o__ser-nx-fire_t-f": 1,
-      "_____10c-o__ser-nx-refrac-i": 0,
-      "_____10c-o__ser-nx-leak_c-f": 0,
-      "_____10c-o__ser-nx-leak_v-f": 0,
-      "_____10c-o__ser-nx-c_fr_c-i": 3,
-      "_____10c-o__ser-nx-snooze-f": 0,
-      "_____10c-o__ser-nx-ftincx-f": 0,
-      "_____10c-o__ser-nx-ftincy-f": 0,
-      "_____10c-o__ser-nx-ftincz-f": 0,
-      "_____10c-o__ser-nx-fthlim-i": 0,
-      "_____10c-o__ser-nx-mp_acc-b": true,
-      "_____10c-o__ser-cx-__name-t": "servo_opu",
-      "_____10c-o__ser-cx-_group-t": "OPU",
-      "_____10c-m__lef-cx-_n_cnt-i": 1,
-      "_____10c-m__lef-cx-synatt-i": 100,
-      "_____10c-m__lef-cx-de_gen-f": 0,
-      "_____10c-m__lef-cx-pspuni-b": false,
-      "_____10c-m__lef-nx-pstcrm-f": 35,
-      "_____10c-m__lef-cx-dstmap-d": {
-         "o__mot": [
+      "_____10c-m__for-cx-___bbx-i": 1,
+      "_____10c-m__for-cx-___bby-i": 1,
+      "_____10c-m__for-cx-___bbz-i": 1,
+      "_____10c-m__for-cx-rcordx-i": -38,
+      "_____10c-m__for-cx-rcordy-i": 0,
+      "_____10c-m__for-cx-rcordz-i": 0,
+      "_____10c-m__for-cx-2dcorx-i": 894,
+      "_____10c-m__for-cx-2dcory-i": -204,
+      "_____10c-m__for-cx-gd_vis-b": true,
+      "_____10c-m__for-nx-pstcr_-f": 5,
+      "_____10c-m__for-nx-fire_t-f": 1,
+      "_____10c-m__for-nx-refrac-i": 0,
+      "_____10c-m__for-nx-leak_c-f": 10,
+      "_____10c-m__for-nx-leak_v-f": 0,
+      "_____10c-m__for-nx-c_fr_c-i": 3,
+      "_____10c-m__for-nx-snooze-f": 0,
+      "_____10c-m__for-nx-ftincx-f": 0,
+      "_____10c-m__for-nx-ftincy-f": 0,
+      "_____10c-m__for-nx-ftincz-f": 0,
+      "_____10c-m__for-nx-fthlim-i": 0,
+      "_____10c-m__for-nx-mp_acc-b": true,
+      "_____10c-m__for-nx-mp_psp-b": false,
+      "_____10c-m__for-cx-memory-b": false,
+      "_____10c-m__for-cx-mem__t-i": 100,
+      "_____10c-m__for-cx-mem_gr-i": 1,
+      "_____10c-m__for-cx-mem_ls-i": 9,
+      "_____10c-m__for-cx-__name-t": "forward",
+      "_____10c-m__for-cx-_group-t": "CUSTOM",
+      "_____10c-m__bac-cx-subgrp-t": "",
+      "_____10c-m__bac-cx-_n_cnt-i": 1,
+      "_____10c-m__bac-cx-synatt-i": 100,
+      "_____10c-m__bac-cx-de_gen-f": 0,
+      "_____10c-m__bac-cx-pspuni-b": true,
+      "_____10c-m__bac-nx-pstcrm-f": 35,
+      "_____10c-m__bac-cx-dstmap-d": {
+         "CLWM4_": [
             [
-               "turn_left_level_one",
+               "projector",
                [
                   1,
                   1,
@@ -1983,9 +1751,11 @@
                1,
                1,
                1
-            ],
+            ]
+         ],
+         "CJWM3_": [
             [
-               "turn_left_level_two",
+               "projector",
                [
                   1,
                   1,
@@ -1996,9 +1766,11 @@
                1,
                1,
                1
-            ],
+            ]
+         ],
+         "CKYM2_": [
             [
-               "turn_left_level_three",
+               "projector",
                [
                   1,
                   1,
@@ -2009,9 +1781,11 @@
                1,
                1,
                1
-            ],
+            ]
+         ],
+         "CIHMot": [
             [
-               "turn_left_level_four",
+               "projector",
                [
                   1,
                   1,
@@ -2022,9 +1796,117 @@
                1,
                1,
                1
-            ],
+            ]
+         ]
+      },
+      "_____10c-m__bac-cx-___bbx-i": 1,
+      "_____10c-m__bac-cx-___bby-i": 1,
+      "_____10c-m__bac-cx-___bbz-i": 1,
+      "_____10c-m__bac-cx-rcordx-i": -38,
+      "_____10c-m__bac-cx-rcordy-i": 0,
+      "_____10c-m__bac-cx-rcordz-i": 10,
+      "_____10c-m__bac-cx-2dcorx-i": 892,
+      "_____10c-m__bac-cx-2dcory-i": 859,
+      "_____10c-m__bac-cx-gd_vis-b": true,
+      "_____10c-m__bac-nx-pstcr_-f": 5,
+      "_____10c-m__bac-nx-fire_t-f": 1,
+      "_____10c-m__bac-nx-refrac-i": 0,
+      "_____10c-m__bac-nx-leak_c-f": 10,
+      "_____10c-m__bac-nx-leak_v-f": 0,
+      "_____10c-m__bac-nx-c_fr_c-i": 3,
+      "_____10c-m__bac-nx-snooze-f": 0,
+      "_____10c-m__bac-nx-ftincx-f": 0,
+      "_____10c-m__bac-nx-ftincy-f": 0,
+      "_____10c-m__bac-nx-ftincz-f": 0,
+      "_____10c-m__bac-nx-fthlim-i": 0,
+      "_____10c-m__bac-nx-mp_acc-b": true,
+      "_____10c-m__bac-nx-mp_psp-b": false,
+      "_____10c-m__bac-cx-memory-b": false,
+      "_____10c-m__bac-cx-mem__t-i": 100,
+      "_____10c-m__bac-cx-mem_gr-i": 1,
+      "_____10c-m__bac-cx-mem_ls-i": 9,
+      "_____10c-m__bac-cx-__name-t": "backward",
+      "_____10c-m__bac-cx-_group-t": "CUSTOM",
+      "_____10c-iv00_C-cx-subgrp-t": "",
+      "_____10c-iv00_C-cx-_n_cnt-i": 1,
+      "_____10c-iv00_C-cx-synatt-i": 100,
+      "_____10c-iv00_C-cx-de_gen-f": 0.0,
+      "_____10c-iv00_C-cx-pspuni-b": false,
+      "_____10c-iv00_C-nx-pstcrm-f": 100.0,
+      "_____10c-iv00_C-cx-dstmap-d": {},
+      "_____10c-iv00_C-cx-___bbx-i": 64,
+      "_____10c-iv00_C-cx-___bby-i": 64,
+      "_____10c-iv00_C-cx-___bbz-i": 3,
+      "_____10c-iv00_C-cx-rcordx-i": 30,
+      "_____10c-iv00_C-cx-rcordy-i": 40,
+      "_____10c-iv00_C-cx-rcordz-i": -20,
+      "_____10c-iv00_C-cx-2dcorx-i": -262,
+      "_____10c-iv00_C-cx-2dcory-i": 127,
+      "_____10c-iv00_C-cx-gd_vis-b": true,
+      "_____10c-iv00_C-nx-pstcr_-f": 25.0,
+      "_____10c-iv00_C-nx-fire_t-f": 1.0,
+      "_____10c-iv00_C-nx-refrac-i": 0,
+      "_____10c-iv00_C-nx-leak_c-f": 0,
+      "_____10c-iv00_C-nx-leak_v-f": 0,
+      "_____10c-iv00_C-nx-c_fr_c-i": 3,
+      "_____10c-iv00_C-nx-snooze-f": 0,
+      "_____10c-iv00_C-nx-ftincx-f": 0,
+      "_____10c-iv00_C-nx-ftincy-f": 0,
+      "_____10c-iv00_C-nx-ftincz-f": 0,
+      "_____10c-iv00_C-nx-fthlim-i": 0,
+      "_____10c-iv00_C-nx-mp_acc-b": true,
+      "_____10c-iv00_C-nx-mp_psp-b": false,
+      "_____10c-iv00_C-cx-memory-b": false,
+      "_____10c-iv00_C-cx-mem__t-i": 100,
+      "_____10c-iv00_C-cx-mem_gr-i": 1,
+      "_____10c-iv00_C-cx-mem_ls-i": 9,
+      "_____10c-iv00_C-cx-__name-t": "vision_C",
+      "_____10c-iv00_C-cx-_group-t": "IPU",
+      "_____10c-iv00LL-cx-subgrp-t": "",
+      "_____10c-iv00LL-cx-_n_cnt-i": 1,
+      "_____10c-iv00LL-cx-synatt-i": 100,
+      "_____10c-iv00LL-cx-de_gen-f": 0,
+      "_____10c-iv00LL-cx-pspuni-b": false,
+      "_____10c-iv00LL-nx-pstcrm-f": 35,
+      "_____10c-iv00LL-cx-dstmap-d": {},
+      "_____10c-iv00LL-cx-___bbx-i": 8,
+      "_____10c-iv00LL-cx-___bby-i": 8,
+      "_____10c-iv00LL-cx-___bbz-i": 3,
+      "_____10c-iv00LL-cx-rcordx-i": 20,
+      "_____10c-iv00LL-cx-rcordy-i": 30,
+      "_____10c-iv00LL-cx-rcordz-i": -20,
+      "_____10c-iv00LL-cx-2dcorx-i": -614,
+      "_____10c-iv00LL-cx-2dcory-i": 317,
+      "_____10c-iv00LL-cx-gd_vis-b": true,
+      "_____10c-iv00LL-nx-pstcr_-f": 5,
+      "_____10c-iv00LL-nx-fire_t-f": 1,
+      "_____10c-iv00LL-nx-refrac-i": 0,
+      "_____10c-iv00LL-nx-leak_c-f": 0,
+      "_____10c-iv00LL-nx-leak_v-f": 0,
+      "_____10c-iv00LL-nx-c_fr_c-i": 3,
+      "_____10c-iv00LL-nx-snooze-f": 0,
+      "_____10c-iv00LL-nx-ftincx-f": 0,
+      "_____10c-iv00LL-nx-ftincy-f": 0,
+      "_____10c-iv00LL-nx-ftincz-f": 0,
+      "_____10c-iv00LL-nx-fthlim-i": 0,
+      "_____10c-iv00LL-nx-mp_acc-b": true,
+      "_____10c-iv00LL-nx-mp_psp-b": false,
+      "_____10c-iv00LL-cx-memory-b": false,
+      "_____10c-iv00LL-cx-mem__t-i": 100,
+      "_____10c-iv00LL-cx-mem_gr-i": 1,
+      "_____10c-iv00LL-cx-mem_ls-i": 9,
+      "_____10c-iv00LL-cx-__name-t": "vision_LL",
+      "_____10c-iv00LL-cx-_group-t": "IPU",
+      "_____10c-iv00LM-cx-subgrp-t": "",
+      "_____10c-iv00LM-cx-_n_cnt-i": 1,
+      "_____10c-iv00LM-cx-synatt-i": 100,
+      "_____10c-iv00LM-cx-de_gen-f": 0,
+      "_____10c-iv00LM-cx-pspuni-b": false,
+      "_____10c-iv00LM-nx-pstcrm-f": 35,
+      "_____10c-iv00LM-cx-dstmap-d": {
+         "m__bac": [
             [
-               "turn_left_level_five",
+               "projector",
                [
                   1,
                   1,
@@ -2038,38 +1920,270 @@
             ]
          ]
       },
-      "_____10c-m__lef-cx-___bbx-i": 5,
-      "_____10c-m__lef-cx-___bby-i": 1,
-      "_____10c-m__lef-cx-___bbz-i": 1,
-      "_____10c-m__lef-cx-rcordx-i": 53,
-      "_____10c-m__lef-cx-rcordy-i": 0,
-      "_____10c-m__lef-cx-rcordz-i": 5,
-      "_____10c-m__lef-cx-2dcorx-i": null,
-      "_____10c-m__lef-cx-2dcory-i": null,
-      "_____10c-m__lef-cx-gd_vis-b": true,
-      "_____10c-m__lef-nx-pstcr_-f": 5,
-      "_____10c-m__lef-nx-fire_t-f": 1,
-      "_____10c-m__lef-nx-refrac-i": 0,
-      "_____10c-m__lef-nx-leak_c-f": 10,
-      "_____10c-m__lef-nx-leak_v-f": 0,
-      "_____10c-m__lef-nx-c_fr_c-i": 3,
-      "_____10c-m__lef-nx-snooze-f": 0,
-      "_____10c-m__lef-nx-ftincx-f": 0,
-      "_____10c-m__lef-nx-ftincy-f": 0,
-      "_____10c-m__lef-nx-ftincz-f": 0,
-      "_____10c-m__lef-nx-fthlim-i": 0,
-      "_____10c-m__lef-nx-mp_acc-b": true,
-      "_____10c-m__lef-cx-__name-t": "turn_left",
-      "_____10c-m__lef-cx-_group-t": "OPU",
-      "_____10c-m__rig-cx-_n_cnt-i": 1,
-      "_____10c-m__rig-cx-synatt-i": 100,
-      "_____10c-m__rig-cx-de_gen-f": 0,
-      "_____10c-m__rig-cx-pspuni-b": false,
-      "_____10c-m__rig-nx-pstcrm-f": 35,
-      "_____10c-m__rig-cx-dstmap-d": {
+      "_____10c-iv00LM-cx-___bbx-i": 8,
+      "_____10c-iv00LM-cx-___bby-i": 8,
+      "_____10c-iv00LM-cx-___bbz-i": 3,
+      "_____10c-iv00LM-cx-rcordx-i": 55,
+      "_____10c-iv00LM-cx-rcordy-i": 30,
+      "_____10c-iv00LM-cx-rcordz-i": -20,
+      "_____10c-iv00LM-cx-2dcorx-i": -253,
+      "_____10c-iv00LM-cx-2dcory-i": 324,
+      "_____10c-iv00LM-cx-gd_vis-b": true,
+      "_____10c-iv00LM-nx-pstcr_-f": 5,
+      "_____10c-iv00LM-nx-fire_t-f": 1,
+      "_____10c-iv00LM-nx-refrac-i": 0,
+      "_____10c-iv00LM-nx-leak_c-f": 0,
+      "_____10c-iv00LM-nx-leak_v-f": 0,
+      "_____10c-iv00LM-nx-c_fr_c-i": 3,
+      "_____10c-iv00LM-nx-snooze-f": 0,
+      "_____10c-iv00LM-nx-ftincx-f": 0,
+      "_____10c-iv00LM-nx-ftincy-f": 0,
+      "_____10c-iv00LM-nx-ftincz-f": 0,
+      "_____10c-iv00LM-nx-fthlim-i": 0,
+      "_____10c-iv00LM-nx-mp_acc-b": true,
+      "_____10c-iv00LM-nx-mp_psp-b": false,
+      "_____10c-iv00LM-cx-memory-b": false,
+      "_____10c-iv00LM-cx-mem__t-i": 100,
+      "_____10c-iv00LM-cx-mem_gr-i": 1,
+      "_____10c-iv00LM-cx-mem_ls-i": 9,
+      "_____10c-iv00LM-cx-__name-t": "vision_LM",
+      "_____10c-iv00LM-cx-_group-t": "IPU",
+      "_____10c-iv00LR-cx-subgrp-t": "",
+      "_____10c-iv00LR-cx-_n_cnt-i": 1,
+      "_____10c-iv00LR-cx-synatt-i": 100,
+      "_____10c-iv00LR-cx-de_gen-f": 0,
+      "_____10c-iv00LR-cx-pspuni-b": false,
+      "_____10c-iv00LR-nx-pstcrm-f": 35,
+      "_____10c-iv00LR-cx-dstmap-d": {},
+      "_____10c-iv00LR-cx-___bbx-i": 8,
+      "_____10c-iv00LR-cx-___bby-i": 8,
+      "_____10c-iv00LR-cx-___bbz-i": 3,
+      "_____10c-iv00LR-cx-rcordx-i": 95,
+      "_____10c-iv00LR-cx-rcordy-i": 30,
+      "_____10c-iv00LR-cx-rcordz-i": -20,
+      "_____10c-iv00LR-cx-2dcorx-i": 86,
+      "_____10c-iv00LR-cx-2dcory-i": 319,
+      "_____10c-iv00LR-cx-gd_vis-b": true,
+      "_____10c-iv00LR-nx-pstcr_-f": 5,
+      "_____10c-iv00LR-nx-fire_t-f": 1,
+      "_____10c-iv00LR-nx-refrac-i": 0,
+      "_____10c-iv00LR-nx-leak_c-f": 0,
+      "_____10c-iv00LR-nx-leak_v-f": 0,
+      "_____10c-iv00LR-nx-c_fr_c-i": 3,
+      "_____10c-iv00LR-nx-snooze-f": 0,
+      "_____10c-iv00LR-nx-ftincx-f": 0,
+      "_____10c-iv00LR-nx-ftincy-f": 0,
+      "_____10c-iv00LR-nx-ftincz-f": 0,
+      "_____10c-iv00LR-nx-fthlim-i": 0,
+      "_____10c-iv00LR-nx-mp_acc-b": true,
+      "_____10c-iv00LR-nx-mp_psp-b": false,
+      "_____10c-iv00LR-cx-memory-b": false,
+      "_____10c-iv00LR-cx-mem__t-i": 100,
+      "_____10c-iv00LR-cx-mem_gr-i": 1,
+      "_____10c-iv00LR-cx-mem_ls-i": 9,
+      "_____10c-iv00LR-cx-__name-t": "vision_LR",
+      "_____10c-iv00LR-cx-_group-t": "IPU",
+      "_____10c-iv00ML-cx-subgrp-t": "",
+      "_____10c-iv00ML-cx-_n_cnt-i": 1,
+      "_____10c-iv00ML-cx-synatt-i": 100,
+      "_____10c-iv00ML-cx-de_gen-f": 0,
+      "_____10c-iv00ML-cx-pspuni-b": false,
+      "_____10c-iv00ML-nx-pstcrm-f": 35,
+      "_____10c-iv00ML-cx-dstmap-d": {},
+      "_____10c-iv00ML-cx-___bbx-i": 8,
+      "_____10c-iv00ML-cx-___bby-i": 8,
+      "_____10c-iv00ML-cx-___bbz-i": 3,
+      "_____10c-iv00ML-cx-rcordx-i": 20,
+      "_____10c-iv00ML-cx-rcordy-i": 70,
+      "_____10c-iv00ML-cx-rcordz-i": -20,
+      "_____10c-iv00ML-cx-2dcorx-i": -609,
+      "_____10c-iv00ML-cx-2dcory-i": 129,
+      "_____10c-iv00ML-cx-gd_vis-b": true,
+      "_____10c-iv00ML-nx-pstcr_-f": 5,
+      "_____10c-iv00ML-nx-fire_t-f": 1,
+      "_____10c-iv00ML-nx-refrac-i": 0,
+      "_____10c-iv00ML-nx-leak_c-f": 0,
+      "_____10c-iv00ML-nx-leak_v-f": 0,
+      "_____10c-iv00ML-nx-c_fr_c-i": 3,
+      "_____10c-iv00ML-nx-snooze-f": 0,
+      "_____10c-iv00ML-nx-ftincx-f": 0,
+      "_____10c-iv00ML-nx-ftincy-f": 0,
+      "_____10c-iv00ML-nx-ftincz-f": 0,
+      "_____10c-iv00ML-nx-fthlim-i": 0,
+      "_____10c-iv00ML-nx-mp_acc-b": true,
+      "_____10c-iv00ML-nx-mp_psp-b": false,
+      "_____10c-iv00ML-cx-memory-b": false,
+      "_____10c-iv00ML-cx-mem__t-i": 100,
+      "_____10c-iv00ML-cx-mem_gr-i": 1,
+      "_____10c-iv00ML-cx-mem_ls-i": 9,
+      "_____10c-iv00ML-cx-__name-t": "vision_ML",
+      "_____10c-iv00ML-cx-_group-t": "IPU",
+      "_____10c-iv00MR-cx-subgrp-t": "",
+      "_____10c-iv00MR-cx-_n_cnt-i": 1,
+      "_____10c-iv00MR-cx-synatt-i": 100,
+      "_____10c-iv00MR-cx-de_gen-f": 0,
+      "_____10c-iv00MR-cx-pspuni-b": false,
+      "_____10c-iv00MR-nx-pstcrm-f": 35,
+      "_____10c-iv00MR-cx-dstmap-d": {},
+      "_____10c-iv00MR-cx-___bbx-i": 8,
+      "_____10c-iv00MR-cx-___bby-i": 8,
+      "_____10c-iv00MR-cx-___bbz-i": 3,
+      "_____10c-iv00MR-cx-rcordx-i": 95,
+      "_____10c-iv00MR-cx-rcordy-i": 70,
+      "_____10c-iv00MR-cx-rcordz-i": -20,
+      "_____10c-iv00MR-cx-2dcorx-i": 81,
+      "_____10c-iv00MR-cx-2dcory-i": 131,
+      "_____10c-iv00MR-cx-gd_vis-b": true,
+      "_____10c-iv00MR-nx-pstcr_-f": 5,
+      "_____10c-iv00MR-nx-fire_t-f": 1,
+      "_____10c-iv00MR-nx-refrac-i": 0,
+      "_____10c-iv00MR-nx-leak_c-f": 0,
+      "_____10c-iv00MR-nx-leak_v-f": 0,
+      "_____10c-iv00MR-nx-c_fr_c-i": 3,
+      "_____10c-iv00MR-nx-snooze-f": 0,
+      "_____10c-iv00MR-nx-ftincx-f": 0,
+      "_____10c-iv00MR-nx-ftincy-f": 0,
+      "_____10c-iv00MR-nx-ftincz-f": 0,
+      "_____10c-iv00MR-nx-fthlim-i": 0,
+      "_____10c-iv00MR-nx-mp_acc-b": true,
+      "_____10c-iv00MR-nx-mp_psp-b": false,
+      "_____10c-iv00MR-cx-memory-b": false,
+      "_____10c-iv00MR-cx-mem__t-i": 100,
+      "_____10c-iv00MR-cx-mem_gr-i": 1,
+      "_____10c-iv00MR-cx-mem_ls-i": 9,
+      "_____10c-iv00MR-cx-__name-t": "vision_MR",
+      "_____10c-iv00MR-cx-_group-t": "IPU",
+      "_____10c-iv00TL-cx-subgrp-t": "",
+      "_____10c-iv00TL-cx-_n_cnt-i": 1,
+      "_____10c-iv00TL-cx-synatt-i": 100,
+      "_____10c-iv00TL-cx-de_gen-f": 0,
+      "_____10c-iv00TL-cx-pspuni-b": false,
+      "_____10c-iv00TL-nx-pstcrm-f": 35,
+      "_____10c-iv00TL-cx-dstmap-d": {},
+      "_____10c-iv00TL-cx-___bbx-i": 8,
+      "_____10c-iv00TL-cx-___bby-i": 8,
+      "_____10c-iv00TL-cx-___bbz-i": 3,
+      "_____10c-iv00TL-cx-rcordx-i": 20,
+      "_____10c-iv00TL-cx-rcordy-i": 105,
+      "_____10c-iv00TL-cx-rcordz-i": -20,
+      "_____10c-iv00TL-cx-2dcorx-i": -606,
+      "_____10c-iv00TL-cx-2dcory-i": -61,
+      "_____10c-iv00TL-cx-gd_vis-b": true,
+      "_____10c-iv00TL-nx-pstcr_-f": 5,
+      "_____10c-iv00TL-nx-fire_t-f": 1,
+      "_____10c-iv00TL-nx-refrac-i": 0,
+      "_____10c-iv00TL-nx-leak_c-f": 0,
+      "_____10c-iv00TL-nx-leak_v-f": 0,
+      "_____10c-iv00TL-nx-c_fr_c-i": 3,
+      "_____10c-iv00TL-nx-snooze-f": 0,
+      "_____10c-iv00TL-nx-ftincx-f": 0,
+      "_____10c-iv00TL-nx-ftincy-f": 0,
+      "_____10c-iv00TL-nx-ftincz-f": 0,
+      "_____10c-iv00TL-nx-fthlim-i": 0,
+      "_____10c-iv00TL-nx-mp_acc-b": true,
+      "_____10c-iv00TL-nx-mp_psp-b": false,
+      "_____10c-iv00TL-cx-memory-b": false,
+      "_____10c-iv00TL-cx-mem__t-i": 100,
+      "_____10c-iv00TL-cx-mem_gr-i": 1,
+      "_____10c-iv00TL-cx-mem_ls-i": 9,
+      "_____10c-iv00TL-cx-__name-t": "vision_TL",
+      "_____10c-iv00TL-cx-_group-t": "IPU",
+      "_____10c-iv00TR-cx-subgrp-t": "",
+      "_____10c-iv00TR-cx-_n_cnt-i": 1,
+      "_____10c-iv00TR-cx-synatt-i": 100,
+      "_____10c-iv00TR-cx-de_gen-f": 0,
+      "_____10c-iv00TR-cx-pspuni-b": false,
+      "_____10c-iv00TR-nx-pstcrm-f": 35,
+      "_____10c-iv00TR-cx-dstmap-d": {},
+      "_____10c-iv00TR-cx-___bbx-i": 8,
+      "_____10c-iv00TR-cx-___bby-i": 8,
+      "_____10c-iv00TR-cx-___bbz-i": 3,
+      "_____10c-iv00TR-cx-rcordx-i": 95,
+      "_____10c-iv00TR-cx-rcordy-i": 105,
+      "_____10c-iv00TR-cx-rcordz-i": -20,
+      "_____10c-iv00TR-cx-2dcorx-i": 72,
+      "_____10c-iv00TR-cx-2dcory-i": -62,
+      "_____10c-iv00TR-cx-gd_vis-b": true,
+      "_____10c-iv00TR-nx-pstcr_-f": 5,
+      "_____10c-iv00TR-nx-fire_t-f": 1,
+      "_____10c-iv00TR-nx-refrac-i": 0,
+      "_____10c-iv00TR-nx-leak_c-f": 0,
+      "_____10c-iv00TR-nx-leak_v-f": 0,
+      "_____10c-iv00TR-nx-c_fr_c-i": 3,
+      "_____10c-iv00TR-nx-snooze-f": 0,
+      "_____10c-iv00TR-nx-ftincx-f": 0,
+      "_____10c-iv00TR-nx-ftincy-f": 0,
+      "_____10c-iv00TR-nx-ftincz-f": 0,
+      "_____10c-iv00TR-nx-fthlim-i": 0,
+      "_____10c-iv00TR-nx-mp_acc-b": true,
+      "_____10c-iv00TR-nx-mp_psp-b": false,
+      "_____10c-iv00TR-cx-memory-b": false,
+      "_____10c-iv00TR-cx-mem__t-i": 100,
+      "_____10c-iv00TR-cx-mem_gr-i": 1,
+      "_____10c-iv00TR-cx-mem_ls-i": 9,
+      "_____10c-iv00TR-cx-__name-t": "vision_TR",
+      "_____10c-iv00TR-cx-_group-t": "IPU",
+      "_____10c-iv00TM-cx-subgrp-t": "",
+      "_____10c-iv00TM-cx-_n_cnt-i": 1,
+      "_____10c-iv00TM-cx-synatt-i": 100,
+      "_____10c-iv00TM-cx-de_gen-f": 0,
+      "_____10c-iv00TM-cx-pspuni-b": false,
+      "_____10c-iv00TM-nx-pstcrm-f": 35,
+      "_____10c-iv00TM-cx-dstmap-d": {
+         "m__for": [
+            [
+               "projector",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-iv00TM-cx-___bbx-i": 8,
+      "_____10c-iv00TM-cx-___bby-i": 8,
+      "_____10c-iv00TM-cx-___bbz-i": 3,
+      "_____10c-iv00TM-cx-rcordx-i": 55,
+      "_____10c-iv00TM-cx-rcordy-i": 105,
+      "_____10c-iv00TM-cx-rcordz-i": -20,
+      "_____10c-iv00TM-cx-2dcorx-i": -271,
+      "_____10c-iv00TM-cx-2dcory-i": -65,
+      "_____10c-iv00TM-cx-gd_vis-b": true,
+      "_____10c-iv00TM-nx-pstcr_-f": 5,
+      "_____10c-iv00TM-nx-fire_t-f": 1,
+      "_____10c-iv00TM-nx-refrac-i": 0,
+      "_____10c-iv00TM-nx-leak_c-f": 0,
+      "_____10c-iv00TM-nx-leak_v-f": 0,
+      "_____10c-iv00TM-nx-c_fr_c-i": 3,
+      "_____10c-iv00TM-nx-snooze-f": 0,
+      "_____10c-iv00TM-nx-ftincx-f": 0,
+      "_____10c-iv00TM-nx-ftincy-f": 0,
+      "_____10c-iv00TM-nx-ftincz-f": 0,
+      "_____10c-iv00TM-nx-fthlim-i": 0,
+      "_____10c-iv00TM-nx-mp_acc-b": true,
+      "_____10c-iv00TM-nx-mp_psp-b": false,
+      "_____10c-iv00TM-cx-memory-b": false,
+      "_____10c-iv00TM-cx-mem__t-i": 100,
+      "_____10c-iv00TM-cx-mem_gr-i": 1,
+      "_____10c-iv00TM-cx-mem_ls-i": 9,
+      "_____10c-iv00TM-cx-__name-t": "vision_TM",
+      "_____10c-iv00TM-cx-_group-t": "IPU",
+      "_____10c-CRSMot-cx-subgrp-t": "",
+      "_____10c-CRSMot-cx-_n_cnt-i": 1,
+      "_____10c-CRSMot-cx-synatt-i": 100,
+      "_____10c-CRSMot-cx-de_gen-f": 0,
+      "_____10c-CRSMot-cx-pspuni-b": false,
+      "_____10c-CRSMot-nx-pstcrm-f": 99999,
+      "_____10c-CRSMot-cx-dstmap-d": {
          "o__mot": [
             [
-               "turn_right_level_one",
+               "0_0_0-_0_0_0",
                [
                   1,
                   1,
@@ -2080,9 +2194,47 @@
                1,
                1,
                1
-            ],
+            ]
+         ]
+      },
+      "_____10c-CRSMot-cx-gd_vis-b": true,
+      "_____10c-CRSMot-nx-pstcr_-f": 1,
+      "_____10c-CRSMot-nx-fire_t-f": 1,
+      "_____10c-CRSMot-nx-refrac-i": 0,
+      "_____10c-CRSMot-nx-leak_c-f": 0,
+      "_____10c-CRSMot-nx-leak_v-f": 0,
+      "_____10c-CRSMot-nx-c_fr_c-i": 0,
+      "_____10c-CRSMot-nx-snooze-f": 0,
+      "_____10c-CRSMot-nx-ftincx-f": 0,
+      "_____10c-CRSMot-nx-ftincy-f": 0,
+      "_____10c-CRSMot-nx-ftincz-f": 0,
+      "_____10c-CRSMot-nx-fthlim-i": 0,
+      "_____10c-CRSMot-nx-mp_acc-b": false,
+      "_____10c-CRSMot-nx-mp_psp-b": false,
+      "_____10c-CRSMot-cx-memory-b": false,
+      "_____10c-CRSMot-cx-mem__t-i": 100,
+      "_____10c-CRSMot-cx-mem_gr-i": 1,
+      "_____10c-CRSMot-cx-mem_ls-i": 9,
+      "_____10c-CRSMot-cx-__name-t": "M1_FW",
+      "_____10c-CRSMot-cx-___bbx-i": 1,
+      "_____10c-CRSMot-cx-___bby-i": 1,
+      "_____10c-CRSMot-cx-___bbz-i": 1,
+      "_____10c-CRSMot-cx-rcordx-i": -50,
+      "_____10c-CRSMot-cx-rcordy-i": 0,
+      "_____10c-CRSMot-cx-rcordz-i": -14,
+      "_____10c-CRSMot-cx-2dcorx-i": 1503,
+      "_____10c-CRSMot-cx-2dcory-i": -284,
+      "_____10c-CRSMot-cx-_group-t": "CUSTOM",
+      "_____10c-CIHMot-cx-subgrp-t": "",
+      "_____10c-CIHMot-cx-_n_cnt-i": 1,
+      "_____10c-CIHMot-cx-synatt-i": 100,
+      "_____10c-CIHMot-cx-de_gen-f": 0,
+      "_____10c-CIHMot-cx-pspuni-b": false,
+      "_____10c-CIHMot-nx-pstcrm-f": 99999,
+      "_____10c-CIHMot-cx-dstmap-d": {
+         "o__mot": [
             [
-               "turn_right_level_two",
+               "0_0_0-1_0_0",
                [
                   1,
                   1,
@@ -2093,9 +2245,47 @@
                1,
                1,
                1
-            ],
+            ]
+         ]
+      },
+      "_____10c-CIHMot-cx-gd_vis-b": true,
+      "_____10c-CIHMot-nx-pstcr_-f": 1,
+      "_____10c-CIHMot-nx-fire_t-f": 1,
+      "_____10c-CIHMot-nx-refrac-i": 0,
+      "_____10c-CIHMot-nx-leak_c-f": 0,
+      "_____10c-CIHMot-nx-leak_v-f": 0,
+      "_____10c-CIHMot-nx-c_fr_c-i": 0,
+      "_____10c-CIHMot-nx-snooze-f": 0,
+      "_____10c-CIHMot-nx-ftincx-f": 0,
+      "_____10c-CIHMot-nx-ftincy-f": 0,
+      "_____10c-CIHMot-nx-ftincz-f": 0,
+      "_____10c-CIHMot-nx-fthlim-i": 0,
+      "_____10c-CIHMot-nx-mp_acc-b": false,
+      "_____10c-CIHMot-nx-mp_psp-b": false,
+      "_____10c-CIHMot-cx-memory-b": false,
+      "_____10c-CIHMot-cx-mem__t-i": 100,
+      "_____10c-CIHMot-cx-mem_gr-i": 1,
+      "_____10c-CIHMot-cx-mem_ls-i": 9,
+      "_____10c-CIHMot-cx-__name-t": "M1_BW",
+      "_____10c-CIHMot-cx-___bbx-i": 1,
+      "_____10c-CIHMot-cx-___bby-i": 1,
+      "_____10c-CIHMot-cx-___bbz-i": 1,
+      "_____10c-CIHMot-cx-rcordx-i": -45,
+      "_____10c-CIHMot-cx-rcordy-i": 0,
+      "_____10c-CIHMot-cx-rcordz-i": -14,
+      "_____10c-CIHMot-cx-2dcorx-i": 1510,
+      "_____10c-CIHMot-cx-2dcory-i": -106,
+      "_____10c-CIHMot-cx-_group-t": "CUSTOM",
+      "_____10c-CKQM2_-cx-subgrp-t": "",
+      "_____10c-CKQM2_-cx-_n_cnt-i": 1,
+      "_____10c-CKQM2_-cx-synatt-i": 100,
+      "_____10c-CKQM2_-cx-de_gen-f": 0,
+      "_____10c-CKQM2_-cx-pspuni-b": false,
+      "_____10c-CKQM2_-nx-pstcrm-f": 99999,
+      "_____10c-CKQM2_-cx-dstmap-d": {
+         "o__mot": [
             [
-               "turn_right_level_three",
+               "0_0_0-2_0_0",
                [
                   1,
                   1,
@@ -2106,9 +2296,47 @@
                1,
                1,
                1
-            ],
+            ]
+         ]
+      },
+      "_____10c-CKQM2_-cx-gd_vis-b": true,
+      "_____10c-CKQM2_-nx-pstcr_-f": 1,
+      "_____10c-CKQM2_-nx-fire_t-f": 1,
+      "_____10c-CKQM2_-nx-refrac-i": 0,
+      "_____10c-CKQM2_-nx-leak_c-f": 0,
+      "_____10c-CKQM2_-nx-leak_v-f": 0,
+      "_____10c-CKQM2_-nx-c_fr_c-i": 0,
+      "_____10c-CKQM2_-nx-snooze-f": 0,
+      "_____10c-CKQM2_-nx-ftincx-f": 0,
+      "_____10c-CKQM2_-nx-ftincy-f": 0,
+      "_____10c-CKQM2_-nx-ftincz-f": 0,
+      "_____10c-CKQM2_-nx-fthlim-i": 0,
+      "_____10c-CKQM2_-nx-mp_acc-b": false,
+      "_____10c-CKQM2_-nx-mp_psp-b": false,
+      "_____10c-CKQM2_-cx-memory-b": false,
+      "_____10c-CKQM2_-cx-mem__t-i": 100,
+      "_____10c-CKQM2_-cx-mem_gr-i": 1,
+      "_____10c-CKQM2_-cx-mem_ls-i": 9,
+      "_____10c-CKQM2_-cx-__name-t": "M2_FW",
+      "_____10c-CKQM2_-cx-___bbx-i": 1,
+      "_____10c-CKQM2_-cx-___bby-i": 1,
+      "_____10c-CKQM2_-cx-___bbz-i": 1,
+      "_____10c-CKQM2_-cx-rcordx-i": -40,
+      "_____10c-CKQM2_-cx-rcordy-i": 0,
+      "_____10c-CKQM2_-cx-rcordz-i": -14,
+      "_____10c-CKQM2_-cx-2dcorx-i": 1509,
+      "_____10c-CKQM2_-cx-2dcory-i": 81,
+      "_____10c-CKQM2_-cx-_group-t": "CUSTOM",
+      "_____10c-CKYM2_-cx-subgrp-t": "",
+      "_____10c-CKYM2_-cx-_n_cnt-i": 1,
+      "_____10c-CKYM2_-cx-synatt-i": 100,
+      "_____10c-CKYM2_-cx-de_gen-f": 0,
+      "_____10c-CKYM2_-cx-pspuni-b": false,
+      "_____10c-CKYM2_-nx-pstcrm-f": 99999,
+      "_____10c-CKYM2_-cx-dstmap-d": {
+         "o__mot": [
             [
-               "turn_right_level_four",
+               "0_0_0-3_0_0",
                [
                   1,
                   1,
@@ -2119,9 +2347,47 @@
                1,
                1,
                1
-            ],
+            ]
+         ]
+      },
+      "_____10c-CKYM2_-cx-gd_vis-b": true,
+      "_____10c-CKYM2_-nx-pstcr_-f": 1,
+      "_____10c-CKYM2_-nx-fire_t-f": 1,
+      "_____10c-CKYM2_-nx-refrac-i": 0,
+      "_____10c-CKYM2_-nx-leak_c-f": 0,
+      "_____10c-CKYM2_-nx-leak_v-f": 0,
+      "_____10c-CKYM2_-nx-c_fr_c-i": 0,
+      "_____10c-CKYM2_-nx-snooze-f": 0,
+      "_____10c-CKYM2_-nx-ftincx-f": 0,
+      "_____10c-CKYM2_-nx-ftincy-f": 0,
+      "_____10c-CKYM2_-nx-ftincz-f": 0,
+      "_____10c-CKYM2_-nx-fthlim-i": 0,
+      "_____10c-CKYM2_-nx-mp_acc-b": false,
+      "_____10c-CKYM2_-nx-mp_psp-b": false,
+      "_____10c-CKYM2_-cx-memory-b": false,
+      "_____10c-CKYM2_-cx-mem__t-i": 100,
+      "_____10c-CKYM2_-cx-mem_gr-i": 1,
+      "_____10c-CKYM2_-cx-mem_ls-i": 9,
+      "_____10c-CKYM2_-cx-__name-t": "M2_BW",
+      "_____10c-CKYM2_-cx-___bbx-i": 1,
+      "_____10c-CKYM2_-cx-___bby-i": 1,
+      "_____10c-CKYM2_-cx-___bbz-i": 1,
+      "_____10c-CKYM2_-cx-rcordx-i": -35,
+      "_____10c-CKYM2_-cx-rcordy-i": 0,
+      "_____10c-CKYM2_-cx-rcordz-i": -14,
+      "_____10c-CKYM2_-cx-2dcorx-i": 1518,
+      "_____10c-CKYM2_-cx-2dcory-i": 239,
+      "_____10c-CKYM2_-cx-_group-t": "CUSTOM",
+      "_____10c-CO4M3_-cx-subgrp-t": "",
+      "_____10c-CO4M3_-cx-_n_cnt-i": 1,
+      "_____10c-CO4M3_-cx-synatt-i": 100,
+      "_____10c-CO4M3_-cx-de_gen-f": 0,
+      "_____10c-CO4M3_-cx-pspuni-b": false,
+      "_____10c-CO4M3_-nx-pstcrm-f": 99999,
+      "_____10c-CO4M3_-cx-dstmap-d": {
+         "o__mot": [
             [
-               "turn_right_level_five",
+               "0_0_0-4_0_0",
                [
                   1,
                   1,
@@ -2135,38 +2401,44 @@
             ]
          ]
       },
-      "_____10c-m__rig-cx-___bbx-i": 5,
-      "_____10c-m__rig-cx-___bby-i": 1,
-      "_____10c-m__rig-cx-___bbz-i": 1,
-      "_____10c-m__rig-cx-rcordx-i": 62,
-      "_____10c-m__rig-cx-rcordy-i": 0,
-      "_____10c-m__rig-cx-rcordz-i": 5,
-      "_____10c-m__rig-cx-2dcorx-i": null,
-      "_____10c-m__rig-cx-2dcory-i": null,
-      "_____10c-m__rig-cx-gd_vis-b": true,
-      "_____10c-m__rig-nx-pstcr_-f": 5,
-      "_____10c-m__rig-nx-fire_t-f": 1,
-      "_____10c-m__rig-nx-refrac-i": 0,
-      "_____10c-m__rig-nx-leak_c-f": 10,
-      "_____10c-m__rig-nx-leak_v-f": 0,
-      "_____10c-m__rig-nx-c_fr_c-i": 3,
-      "_____10c-m__rig-nx-snooze-f": 0,
-      "_____10c-m__rig-nx-ftincx-f": 0,
-      "_____10c-m__rig-nx-ftincy-f": 0,
-      "_____10c-m__rig-nx-ftincz-f": 0,
-      "_____10c-m__rig-nx-fthlim-i": 0,
-      "_____10c-m__rig-nx-mp_acc-b": true,
-      "_____10c-m__rig-cx-__name-t": "turn_right",
-      "_____10c-m__rig-cx-_group-t": "OPU",
-      "_____10c-m__for-cx-_n_cnt-i": 1,
-      "_____10c-m__for-cx-synatt-i": 100,
-      "_____10c-m__for-cx-de_gen-f": 0,
-      "_____10c-m__for-cx-pspuni-b": false,
-      "_____10c-m__for-nx-pstcrm-f": 35,
-      "_____10c-m__for-cx-dstmap-d": {
+      "_____10c-CO4M3_-cx-gd_vis-b": true,
+      "_____10c-CO4M3_-nx-pstcr_-f": 1,
+      "_____10c-CO4M3_-nx-fire_t-f": 1,
+      "_____10c-CO4M3_-nx-refrac-i": 0,
+      "_____10c-CO4M3_-nx-leak_c-f": 0,
+      "_____10c-CO4M3_-nx-leak_v-f": 0,
+      "_____10c-CO4M3_-nx-c_fr_c-i": 0,
+      "_____10c-CO4M3_-nx-snooze-f": 0,
+      "_____10c-CO4M3_-nx-ftincx-f": 0,
+      "_____10c-CO4M3_-nx-ftincy-f": 0,
+      "_____10c-CO4M3_-nx-ftincz-f": 0,
+      "_____10c-CO4M3_-nx-fthlim-i": 0,
+      "_____10c-CO4M3_-nx-mp_acc-b": false,
+      "_____10c-CO4M3_-nx-mp_psp-b": false,
+      "_____10c-CO4M3_-cx-memory-b": false,
+      "_____10c-CO4M3_-cx-mem__t-i": 100,
+      "_____10c-CO4M3_-cx-mem_gr-i": 1,
+      "_____10c-CO4M3_-cx-mem_ls-i": 9,
+      "_____10c-CO4M3_-cx-__name-t": "M3_FW",
+      "_____10c-CO4M3_-cx-___bbx-i": 1,
+      "_____10c-CO4M3_-cx-___bby-i": 1,
+      "_____10c-CO4M3_-cx-___bbz-i": 1,
+      "_____10c-CO4M3_-cx-rcordx-i": -30,
+      "_____10c-CO4M3_-cx-rcordy-i": 0,
+      "_____10c-CO4M3_-cx-rcordz-i": -14,
+      "_____10c-CO4M3_-cx-2dcorx-i": 1517,
+      "_____10c-CO4M3_-cx-2dcory-i": 403,
+      "_____10c-CO4M3_-cx-_group-t": "CUSTOM",
+      "_____10c-CJWM3_-cx-subgrp-t": "",
+      "_____10c-CJWM3_-cx-_n_cnt-i": 1,
+      "_____10c-CJWM3_-cx-synatt-i": 100,
+      "_____10c-CJWM3_-cx-de_gen-f": 0,
+      "_____10c-CJWM3_-cx-pspuni-b": false,
+      "_____10c-CJWM3_-nx-pstcrm-f": 99999,
+      "_____10c-CJWM3_-cx-dstmap-d": {
          "o__mot": [
             [
-               "motor_forward",
+               "0_0_0-5_0_0",
                [
                   1,
                   1,
@@ -2180,38 +2452,44 @@
             ]
          ]
       },
-      "_____10c-m__for-cx-___bbx-i": 1,
-      "_____10c-m__for-cx-___bby-i": 1,
-      "_____10c-m__for-cx-___bbz-i": 1,
-      "_____10c-m__for-cx-rcordx-i": 60,
-      "_____10c-m__for-cx-rcordy-i": 0,
-      "_____10c-m__for-cx-rcordz-i": 0,
-      "_____10c-m__for-cx-2dcorx-i": null,
-      "_____10c-m__for-cx-2dcory-i": null,
-      "_____10c-m__for-cx-gd_vis-b": true,
-      "_____10c-m__for-nx-pstcr_-f": 5,
-      "_____10c-m__for-nx-fire_t-f": 1,
-      "_____10c-m__for-nx-refrac-i": 0,
-      "_____10c-m__for-nx-leak_c-f": 10,
-      "_____10c-m__for-nx-leak_v-f": 0,
-      "_____10c-m__for-nx-c_fr_c-i": 3,
-      "_____10c-m__for-nx-snooze-f": 0,
-      "_____10c-m__for-nx-ftincx-f": 0,
-      "_____10c-m__for-nx-ftincy-f": 0,
-      "_____10c-m__for-nx-ftincz-f": 0,
-      "_____10c-m__for-nx-fthlim-i": 0,
-      "_____10c-m__for-nx-mp_acc-b": true,
-      "_____10c-m__for-cx-__name-t": "forward",
-      "_____10c-m__for-cx-_group-t": "OPU",
-      "_____10c-m__bac-cx-_n_cnt-i": 1,
-      "_____10c-m__bac-cx-synatt-i": 100,
-      "_____10c-m__bac-cx-de_gen-f": 0,
-      "_____10c-m__bac-cx-pspuni-b": false,
-      "_____10c-m__bac-nx-pstcrm-f": 35,
-      "_____10c-m__bac-cx-dstmap-d": {
+      "_____10c-CJWM3_-cx-gd_vis-b": true,
+      "_____10c-CJWM3_-nx-pstcr_-f": 1,
+      "_____10c-CJWM3_-nx-fire_t-f": 1,
+      "_____10c-CJWM3_-nx-refrac-i": 0,
+      "_____10c-CJWM3_-nx-leak_c-f": 0,
+      "_____10c-CJWM3_-nx-leak_v-f": 0,
+      "_____10c-CJWM3_-nx-c_fr_c-i": 0,
+      "_____10c-CJWM3_-nx-snooze-f": 0,
+      "_____10c-CJWM3_-nx-ftincx-f": 0,
+      "_____10c-CJWM3_-nx-ftincy-f": 0,
+      "_____10c-CJWM3_-nx-ftincz-f": 0,
+      "_____10c-CJWM3_-nx-fthlim-i": 0,
+      "_____10c-CJWM3_-nx-mp_acc-b": false,
+      "_____10c-CJWM3_-nx-mp_psp-b": false,
+      "_____10c-CJWM3_-cx-memory-b": false,
+      "_____10c-CJWM3_-cx-mem__t-i": 100,
+      "_____10c-CJWM3_-cx-mem_gr-i": 1,
+      "_____10c-CJWM3_-cx-mem_ls-i": 9,
+      "_____10c-CJWM3_-cx-__name-t": "M3_BW",
+      "_____10c-CJWM3_-cx-___bbx-i": 1,
+      "_____10c-CJWM3_-cx-___bby-i": 1,
+      "_____10c-CJWM3_-cx-___bbz-i": 1,
+      "_____10c-CJWM3_-cx-rcordx-i": -25,
+      "_____10c-CJWM3_-cx-rcordy-i": 0,
+      "_____10c-CJWM3_-cx-rcordz-i": -14,
+      "_____10c-CJWM3_-cx-2dcorx-i": 1514,
+      "_____10c-CJWM3_-cx-2dcory-i": 519,
+      "_____10c-CJWM3_-cx-_group-t": "CUSTOM",
+      "_____10c-CTGM4_-cx-subgrp-t": "",
+      "_____10c-CTGM4_-cx-_n_cnt-i": 1,
+      "_____10c-CTGM4_-cx-synatt-i": 100,
+      "_____10c-CTGM4_-cx-de_gen-f": 0,
+      "_____10c-CTGM4_-cx-pspuni-b": false,
+      "_____10c-CTGM4_-nx-pstcrm-f": 99999,
+      "_____10c-CTGM4_-cx-dstmap-d": {
          "o__mot": [
             [
-               "motor_backward",
+               "0_0_0-6_0_0",
                [
                   1,
                   1,
@@ -2225,492 +2503,84 @@
             ]
          ]
       },
-      "_____10c-m__bac-cx-___bbx-i": 1,
-      "_____10c-m__bac-cx-___bby-i": 1,
-      "_____10c-m__bac-cx-___bbz-i": 1,
-      "_____10c-m__bac-cx-rcordx-i": 60,
-      "_____10c-m__bac-cx-rcordy-i": 0,
-      "_____10c-m__bac-cx-rcordz-i": 10,
-      "_____10c-m__bac-cx-2dcorx-i": null,
-      "_____10c-m__bac-cx-2dcory-i": null,
-      "_____10c-m__bac-cx-gd_vis-b": true,
-      "_____10c-m__bac-nx-pstcr_-f": 5,
-      "_____10c-m__bac-nx-fire_t-f": 1,
-      "_____10c-m__bac-nx-refrac-i": 0,
-      "_____10c-m__bac-nx-leak_c-f": 10,
-      "_____10c-m__bac-nx-leak_v-f": 0,
-      "_____10c-m__bac-nx-c_fr_c-i": 3,
-      "_____10c-m__bac-nx-snooze-f": 0,
-      "_____10c-m__bac-nx-ftincx-f": 0,
-      "_____10c-m__bac-nx-ftincy-f": 0,
-      "_____10c-m__bac-nx-ftincz-f": 0,
-      "_____10c-m__bac-nx-fthlim-i": 0,
-      "_____10c-m__bac-nx-mp_acc-b": true,
-      "_____10c-m__bac-cx-__name-t": "backward",
-      "_____10c-m__bac-cx-_group-t": "OPU",
-      "_____10c-i__gyr-cx-_n_cnt-i": 1,
-      "_____10c-i__gyr-cx-synatt-i": 100,
-      "_____10c-i__gyr-cx-de_gen-f": 0,
-      "_____10c-i__gyr-cx-pspuni-b": false,
-      "_____10c-i__gyr-nx-pstcrm-f": 35,
-      "_____10c-i__gyr-cx-dstmap-d": {},
-      "_____10c-i__gyr-cx-___bbx-i": 3,
-      "_____10c-i__gyr-cx-___bby-i": 1,
-      "_____10c-i__gyr-cx-___bbz-i": 10,
-      "_____10c-i__gyr-cx-rcordx-i": 50,
-      "_____10c-i__gyr-cx-rcordy-i": 0,
-      "_____10c-i__gyr-cx-rcordz-i": -30,
-      "_____10c-i__gyr-cx-2dcorx-i": null,
-      "_____10c-i__gyr-cx-2dcory-i": null,
-      "_____10c-i__gyr-cx-gd_vis-b": true,
-      "_____10c-i__gyr-nx-pstcr_-f": 5,
-      "_____10c-i__gyr-nx-fire_t-f": 1,
-      "_____10c-i__gyr-nx-refrac-i": 0,
-      "_____10c-i__gyr-nx-leak_c-f": 0,
-      "_____10c-i__gyr-nx-leak_v-f": 0,
-      "_____10c-i__gyr-nx-c_fr_c-i": 3,
-      "_____10c-i__gyr-nx-snooze-f": 0,
-      "_____10c-i__gyr-nx-ftincx-f": 0,
-      "_____10c-i__gyr-nx-ftincy-f": 0,
-      "_____10c-i__gyr-nx-ftincz-f": 0,
-      "_____10c-i__gyr-nx-fthlim-i": 0,
-      "_____10c-i__gyr-nx-mp_acc-b": true,
-      "_____10c-i__gyr-cx-__name-t": "gyroscope_ipu",
-      "_____10c-i__gyr-cx-_group-t": "IPU",
-      "_____10c-i__vis-cx-_n_cnt-i": 1,
-      "_____10c-i__vis-cx-synatt-i": 100,
-      "_____10c-i__vis-cx-de_gen-f": 0,
-      "_____10c-i__vis-cx-pspuni-b": false,
-      "_____10c-i__vis-nx-pstcrm-f": 35,
-      "_____10c-i__vis-cx-dstmap-d": {},
-      "_____10c-i__vis-cx-___bbx-i": 1,
-      "_____10c-i__vis-cx-___bby-i": 1,
-      "_____10c-i__vis-cx-___bbz-i": 1,
-      "_____10c-i__vis-cx-rcordx-i": 50,
-      "_____10c-i__vis-cx-rcordy-i": 20,
-      "_____10c-i__vis-cx-rcordz-i": -30,
-      "_____10c-i__vis-cx-2dcorx-i": null,
-      "_____10c-i__vis-cx-2dcory-i": null,
-      "_____10c-i__vis-cx-gd_vis-b": true,
-      "_____10c-i__vis-nx-pstcr_-f": 5,
-      "_____10c-i__vis-nx-fire_t-f": 1,
-      "_____10c-i__vis-nx-refrac-i": 0,
-      "_____10c-i__vis-nx-leak_c-f": 0,
-      "_____10c-i__vis-nx-leak_v-f": 0,
-      "_____10c-i__vis-nx-c_fr_c-i": 3,
-      "_____10c-i__vis-nx-snooze-f": 0,
-      "_____10c-i__vis-nx-ftincx-f": 0,
-      "_____10c-i__vis-nx-ftincy-f": 0,
-      "_____10c-i__vis-nx-ftincz-f": 0,
-      "_____10c-i__vis-nx-fthlim-i": 0,
-      "_____10c-i__vis-nx-mp_acc-b": true,
-      "_____10c-i__vis-cx-__name-t": "vision_ipu",
-      "_____10c-i__vis-cx-_group-t": "IPU",
-      "_____10c-i__v0C-cx-_n_cnt-i": 1,
-      "_____10c-i__v0C-cx-synatt-i": 100,
-      "_____10c-i__v0C-cx-de_gen-f": 0.0,
-      "_____10c-i__v0C-cx-pspuni-b": false,
-      "_____10c-i__v0C-nx-pstcrm-f": 100.0,
-      "_____10c-i__v0C-cx-dstmap-d": {},
-      "_____10c-i__v0C-cx-___bbx-i": 64,
-      "_____10c-i__v0C-cx-___bby-i": 64,
-      "_____10c-i__v0C-cx-___bbz-i": 3,
-      "_____10c-i__v0C-cx-rcordx-i": 30,
-      "_____10c-i__v0C-cx-rcordy-i": 40,
-      "_____10c-i__v0C-cx-rcordz-i": -20,
-      "_____10c-i__v0C-cx-2dcorx-i": null,
-      "_____10c-i__v0C-cx-2dcory-i": null,
-      "_____10c-i__v0C-cx-gd_vis-b": true,
-      "_____10c-i__v0C-nx-pstcr_-f": 25.0,
-      "_____10c-i__v0C-nx-fire_t-f": 1.0,
-      "_____10c-i__v0C-nx-refrac-i": 0,
-      "_____10c-i__v0C-nx-leak_c-f": 0,
-      "_____10c-i__v0C-nx-leak_v-f": 0,
-      "_____10c-i__v0C-nx-c_fr_c-i": 3,
-      "_____10c-i__v0C-nx-snooze-f": 0,
-      "_____10c-i__v0C-nx-ftincx-f": 0,
-      "_____10c-i__v0C-nx-ftincy-f": 0,
-      "_____10c-i__v0C-nx-ftincz-f": 0,
-      "_____10c-i__v0C-nx-fthlim-i": 0,
-      "_____10c-i__v0C-nx-mp_acc-b": true,
-      "_____10c-i__v0C-cx-__name-t": "vision_C",
-      "_____10c-i__v0C-cx-_group-t": "IPU",
-      "_____10c-i_v0LL-cx-_n_cnt-i": 1,
-      "_____10c-i_v0LL-cx-synatt-i": 100,
-      "_____10c-i_v0LL-cx-de_gen-f": 0,
-      "_____10c-i_v0LL-cx-pspuni-b": false,
-      "_____10c-i_v0LL-nx-pstcrm-f": 35,
-      "_____10c-i_v0LL-cx-dstmap-d": {},
-      "_____10c-i_v0LL-cx-___bbx-i": 8,
-      "_____10c-i_v0LL-cx-___bby-i": 8,
-      "_____10c-i_v0LL-cx-___bbz-i": 3,
-      "_____10c-i_v0LL-cx-rcordx-i": 20,
-      "_____10c-i_v0LL-cx-rcordy-i": 30,
-      "_____10c-i_v0LL-cx-rcordz-i": -20,
-      "_____10c-i_v0LL-cx-2dcorx-i": null,
-      "_____10c-i_v0LL-cx-2dcory-i": null,
-      "_____10c-i_v0LL-cx-gd_vis-b": true,
-      "_____10c-i_v0LL-nx-pstcr_-f": 5,
-      "_____10c-i_v0LL-nx-fire_t-f": 1,
-      "_____10c-i_v0LL-nx-refrac-i": 0,
-      "_____10c-i_v0LL-nx-leak_c-f": 0,
-      "_____10c-i_v0LL-nx-leak_v-f": 0,
-      "_____10c-i_v0LL-nx-c_fr_c-i": 3,
-      "_____10c-i_v0LL-nx-snooze-f": 0,
-      "_____10c-i_v0LL-nx-ftincx-f": 0,
-      "_____10c-i_v0LL-nx-ftincy-f": 0,
-      "_____10c-i_v0LL-nx-ftincz-f": 0,
-      "_____10c-i_v0LL-nx-fthlim-i": 0,
-      "_____10c-i_v0LL-nx-mp_acc-b": true,
-      "_____10c-i_v0LL-cx-__name-t": "vision_LL",
-      "_____10c-i_v0LL-cx-_group-t": "IPU",
-      "_____10c-i_v0LM-cx-_n_cnt-i": 1,
-      "_____10c-i_v0LM-cx-synatt-i": 100,
-      "_____10c-i_v0LM-cx-de_gen-f": 0,
-      "_____10c-i_v0LM-cx-pspuni-b": false,
-      "_____10c-i_v0LM-nx-pstcrm-f": 35,
-      "_____10c-i_v0LM-cx-dstmap-d": {},
-      "_____10c-i_v0LM-cx-___bbx-i": 8,
-      "_____10c-i_v0LM-cx-___bby-i": 8,
-      "_____10c-i_v0LM-cx-___bbz-i": 3,
-      "_____10c-i_v0LM-cx-rcordx-i": 55,
-      "_____10c-i_v0LM-cx-rcordy-i": 30,
-      "_____10c-i_v0LM-cx-rcordz-i": -20,
-      "_____10c-i_v0LM-cx-2dcorx-i": null,
-      "_____10c-i_v0LM-cx-2dcory-i": null,
-      "_____10c-i_v0LM-cx-gd_vis-b": true,
-      "_____10c-i_v0LM-nx-pstcr_-f": 5,
-      "_____10c-i_v0LM-nx-fire_t-f": 1,
-      "_____10c-i_v0LM-nx-refrac-i": 0,
-      "_____10c-i_v0LM-nx-leak_c-f": 0,
-      "_____10c-i_v0LM-nx-leak_v-f": 0,
-      "_____10c-i_v0LM-nx-c_fr_c-i": 3,
-      "_____10c-i_v0LM-nx-snooze-f": 0,
-      "_____10c-i_v0LM-nx-ftincx-f": 0,
-      "_____10c-i_v0LM-nx-ftincy-f": 0,
-      "_____10c-i_v0LM-nx-ftincz-f": 0,
-      "_____10c-i_v0LM-nx-fthlim-i": 0,
-      "_____10c-i_v0LM-nx-mp_acc-b": true,
-      "_____10c-i_v0LM-cx-__name-t": "vision_LM",
-      "_____10c-i_v0LM-cx-_group-t": "IPU",
-      "_____10c-i_v0LR-cx-_n_cnt-i": 1,
-      "_____10c-i_v0LR-cx-synatt-i": 100,
-      "_____10c-i_v0LR-cx-de_gen-f": 0,
-      "_____10c-i_v0LR-cx-pspuni-b": false,
-      "_____10c-i_v0LR-nx-pstcrm-f": 35,
-      "_____10c-i_v0LR-cx-dstmap-d": {},
-      "_____10c-i_v0LR-cx-___bbx-i": 8,
-      "_____10c-i_v0LR-cx-___bby-i": 8,
-      "_____10c-i_v0LR-cx-___bbz-i": 3,
-      "_____10c-i_v0LR-cx-rcordx-i": 95,
-      "_____10c-i_v0LR-cx-rcordy-i": 30,
-      "_____10c-i_v0LR-cx-rcordz-i": -20,
-      "_____10c-i_v0LR-cx-2dcorx-i": null,
-      "_____10c-i_v0LR-cx-2dcory-i": null,
-      "_____10c-i_v0LR-cx-gd_vis-b": true,
-      "_____10c-i_v0LR-nx-pstcr_-f": 5,
-      "_____10c-i_v0LR-nx-fire_t-f": 1,
-      "_____10c-i_v0LR-nx-refrac-i": 0,
-      "_____10c-i_v0LR-nx-leak_c-f": 0,
-      "_____10c-i_v0LR-nx-leak_v-f": 0,
-      "_____10c-i_v0LR-nx-c_fr_c-i": 3,
-      "_____10c-i_v0LR-nx-snooze-f": 0,
-      "_____10c-i_v0LR-nx-ftincx-f": 0,
-      "_____10c-i_v0LR-nx-ftincy-f": 0,
-      "_____10c-i_v0LR-nx-ftincz-f": 0,
-      "_____10c-i_v0LR-nx-fthlim-i": 0,
-      "_____10c-i_v0LR-nx-mp_acc-b": true,
-      "_____10c-i_v0LR-cx-__name-t": "vision_LR",
-      "_____10c-i_v0LR-cx-_group-t": "IPU",
-      "_____10c-i_v0ML-cx-_n_cnt-i": 1,
-      "_____10c-i_v0ML-cx-synatt-i": 100,
-      "_____10c-i_v0ML-cx-de_gen-f": 0,
-      "_____10c-i_v0ML-cx-pspuni-b": false,
-      "_____10c-i_v0ML-nx-pstcrm-f": 35,
-      "_____10c-i_v0ML-cx-dstmap-d": {},
-      "_____10c-i_v0ML-cx-___bbx-i": 8,
-      "_____10c-i_v0ML-cx-___bby-i": 8,
-      "_____10c-i_v0ML-cx-___bbz-i": 3,
-      "_____10c-i_v0ML-cx-rcordx-i": 20,
-      "_____10c-i_v0ML-cx-rcordy-i": 70,
-      "_____10c-i_v0ML-cx-rcordz-i": -20,
-      "_____10c-i_v0ML-cx-2dcorx-i": null,
-      "_____10c-i_v0ML-cx-2dcory-i": null,
-      "_____10c-i_v0ML-cx-gd_vis-b": true,
-      "_____10c-i_v0ML-nx-pstcr_-f": 5,
-      "_____10c-i_v0ML-nx-fire_t-f": 1,
-      "_____10c-i_v0ML-nx-refrac-i": 0,
-      "_____10c-i_v0ML-nx-leak_c-f": 0,
-      "_____10c-i_v0ML-nx-leak_v-f": 0,
-      "_____10c-i_v0ML-nx-c_fr_c-i": 3,
-      "_____10c-i_v0ML-nx-snooze-f": 0,
-      "_____10c-i_v0ML-nx-ftincx-f": 0,
-      "_____10c-i_v0ML-nx-ftincy-f": 0,
-      "_____10c-i_v0ML-nx-ftincz-f": 0,
-      "_____10c-i_v0ML-nx-fthlim-i": 0,
-      "_____10c-i_v0ML-nx-mp_acc-b": true,
-      "_____10c-i_v0ML-cx-__name-t": "vision_ML",
-      "_____10c-i_v0ML-cx-_group-t": "IPU",
-      "_____10c-i_v0MR-cx-_n_cnt-i": 1,
-      "_____10c-i_v0MR-cx-synatt-i": 100,
-      "_____10c-i_v0MR-cx-de_gen-f": 0,
-      "_____10c-i_v0MR-cx-pspuni-b": false,
-      "_____10c-i_v0MR-nx-pstcrm-f": 35,
-      "_____10c-i_v0MR-cx-dstmap-d": {},
-      "_____10c-i_v0MR-cx-___bbx-i": 8,
-      "_____10c-i_v0MR-cx-___bby-i": 8,
-      "_____10c-i_v0MR-cx-___bbz-i": 3,
-      "_____10c-i_v0MR-cx-rcordx-i": 95,
-      "_____10c-i_v0MR-cx-rcordy-i": 70,
-      "_____10c-i_v0MR-cx-rcordz-i": -20,
-      "_____10c-i_v0MR-cx-2dcorx-i": null,
-      "_____10c-i_v0MR-cx-2dcory-i": null,
-      "_____10c-i_v0MR-cx-gd_vis-b": true,
-      "_____10c-i_v0MR-nx-pstcr_-f": 5,
-      "_____10c-i_v0MR-nx-fire_t-f": 1,
-      "_____10c-i_v0MR-nx-refrac-i": 0,
-      "_____10c-i_v0MR-nx-leak_c-f": 0,
-      "_____10c-i_v0MR-nx-leak_v-f": 0,
-      "_____10c-i_v0MR-nx-c_fr_c-i": 3,
-      "_____10c-i_v0MR-nx-snooze-f": 0,
-      "_____10c-i_v0MR-nx-ftincx-f": 0,
-      "_____10c-i_v0MR-nx-ftincy-f": 0,
-      "_____10c-i_v0MR-nx-ftincz-f": 0,
-      "_____10c-i_v0MR-nx-fthlim-i": 0,
-      "_____10c-i_v0MR-nx-mp_acc-b": true,
-      "_____10c-i_v0MR-cx-__name-t": "vision_MR",
-      "_____10c-i_v0MR-cx-_group-t": "IPU",
-      "_____10c-i_v0TL-cx-_n_cnt-i": 1,
-      "_____10c-i_v0TL-cx-synatt-i": 100,
-      "_____10c-i_v0TL-cx-de_gen-f": 0,
-      "_____10c-i_v0TL-cx-pspuni-b": false,
-      "_____10c-i_v0TL-nx-pstcrm-f": 35,
-      "_____10c-i_v0TL-cx-dstmap-d": {},
-      "_____10c-i_v0TL-cx-___bbx-i": 8,
-      "_____10c-i_v0TL-cx-___bby-i": 8,
-      "_____10c-i_v0TL-cx-___bbz-i": 3,
-      "_____10c-i_v0TL-cx-rcordx-i": 20,
-      "_____10c-i_v0TL-cx-rcordy-i": 105,
-      "_____10c-i_v0TL-cx-rcordz-i": -20,
-      "_____10c-i_v0TL-cx-2dcorx-i": null,
-      "_____10c-i_v0TL-cx-2dcory-i": null,
-      "_____10c-i_v0TL-cx-gd_vis-b": true,
-      "_____10c-i_v0TL-nx-pstcr_-f": 5,
-      "_____10c-i_v0TL-nx-fire_t-f": 1,
-      "_____10c-i_v0TL-nx-refrac-i": 0,
-      "_____10c-i_v0TL-nx-leak_c-f": 0,
-      "_____10c-i_v0TL-nx-leak_v-f": 0,
-      "_____10c-i_v0TL-nx-c_fr_c-i": 3,
-      "_____10c-i_v0TL-nx-snooze-f": 0,
-      "_____10c-i_v0TL-nx-ftincx-f": 0,
-      "_____10c-i_v0TL-nx-ftincy-f": 0,
-      "_____10c-i_v0TL-nx-ftincz-f": 0,
-      "_____10c-i_v0TL-nx-fthlim-i": 0,
-      "_____10c-i_v0TL-nx-mp_acc-b": true,
-      "_____10c-i_v0TL-cx-__name-t": "vision_TL",
-      "_____10c-i_v0TL-cx-_group-t": "IPU",
-      "_____10c-i_v0TR-cx-_n_cnt-i": 1,
-      "_____10c-i_v0TR-cx-synatt-i": 100,
-      "_____10c-i_v0TR-cx-de_gen-f": 0,
-      "_____10c-i_v0TR-cx-pspuni-b": false,
-      "_____10c-i_v0TR-nx-pstcrm-f": 35,
-      "_____10c-i_v0TR-cx-dstmap-d": {},
-      "_____10c-i_v0TR-cx-___bbx-i": 8,
-      "_____10c-i_v0TR-cx-___bby-i": 8,
-      "_____10c-i_v0TR-cx-___bbz-i": 3,
-      "_____10c-i_v0TR-cx-rcordx-i": 95,
-      "_____10c-i_v0TR-cx-rcordy-i": 105,
-      "_____10c-i_v0TR-cx-rcordz-i": -20,
-      "_____10c-i_v0TR-cx-2dcorx-i": null,
-      "_____10c-i_v0TR-cx-2dcory-i": null,
-      "_____10c-i_v0TR-cx-gd_vis-b": true,
-      "_____10c-i_v0TR-nx-pstcr_-f": 5,
-      "_____10c-i_v0TR-nx-fire_t-f": 1,
-      "_____10c-i_v0TR-nx-refrac-i": 0,
-      "_____10c-i_v0TR-nx-leak_c-f": 0,
-      "_____10c-i_v0TR-nx-leak_v-f": 0,
-      "_____10c-i_v0TR-nx-c_fr_c-i": 3,
-      "_____10c-i_v0TR-nx-snooze-f": 0,
-      "_____10c-i_v0TR-nx-ftincx-f": 0,
-      "_____10c-i_v0TR-nx-ftincy-f": 0,
-      "_____10c-i_v0TR-nx-ftincz-f": 0,
-      "_____10c-i_v0TR-nx-fthlim-i": 0,
-      "_____10c-i_v0TR-nx-mp_acc-b": true,
-      "_____10c-i_v0TR-cx-__name-t": "vision_TR",
-      "_____10c-i_v0TR-cx-_group-t": "IPU",
-      "_____10c-i_v0TM-cx-_n_cnt-i": 1,
-      "_____10c-i_v0TM-cx-synatt-i": 100,
-      "_____10c-i_v0TM-cx-de_gen-f": 0,
-      "_____10c-i_v0TM-cx-pspuni-b": false,
-      "_____10c-i_v0TM-nx-pstcrm-f": 35,
-      "_____10c-i_v0TM-cx-dstmap-d": {},
-      "_____10c-i_v0TM-cx-___bbx-i": 8,
-      "_____10c-i_v0TM-cx-___bby-i": 8,
-      "_____10c-i_v0TM-cx-___bbz-i": 3,
-      "_____10c-i_v0TM-cx-rcordx-i": 55,
-      "_____10c-i_v0TM-cx-rcordy-i": 105,
-      "_____10c-i_v0TM-cx-rcordz-i": -20,
-      "_____10c-i_v0TM-cx-2dcorx-i": null,
-      "_____10c-i_v0TM-cx-2dcory-i": null,
-      "_____10c-i_v0TM-cx-gd_vis-b": true,
-      "_____10c-i_v0TM-nx-pstcr_-f": 5,
-      "_____10c-i_v0TM-nx-fire_t-f": 1,
-      "_____10c-i_v0TM-nx-refrac-i": 0,
-      "_____10c-i_v0TM-nx-leak_c-f": 0,
-      "_____10c-i_v0TM-nx-leak_v-f": 0,
-      "_____10c-i_v0TM-nx-c_fr_c-i": 3,
-      "_____10c-i_v0TM-nx-snooze-f": 0,
-      "_____10c-i_v0TM-nx-ftincx-f": 0,
-      "_____10c-i_v0TM-nx-ftincy-f": 0,
-      "_____10c-i_v0TM-nx-ftincz-f": 0,
-      "_____10c-i_v0TM-nx-fthlim-i": 0,
-      "_____10c-i_v0TM-nx-mp_acc-b": true,
-      "_____10c-i_v0TM-cx-__name-t": "vision_TM",
-      "_____10c-i_v0TM-cx-_group-t": "IPU",
-      "_____10c-i__acc-cx-_n_cnt-i": 1,
-      "_____10c-i__acc-cx-synatt-i": 100,
-      "_____10c-i__acc-cx-de_gen-f": 0,
-      "_____10c-i__acc-cx-pspuni-b": false,
-      "_____10c-i__acc-nx-pstcrm-f": 35,
-      "_____10c-i__acc-cx-dstmap-d": {},
-      "_____10c-i__acc-cx-___bbx-i": 4,
-      "_____10c-i__acc-cx-___bby-i": 1,
-      "_____10c-i__acc-cx-___bbz-i": 20,
-      "_____10c-i__acc-cx-rcordx-i": 40,
-      "_____10c-i__acc-cx-rcordy-i": 0,
-      "_____10c-i__acc-cx-rcordz-i": -30,
-      "_____10c-i__acc-cx-2dcorx-i": null,
-      "_____10c-i__acc-cx-2dcory-i": null,
-      "_____10c-i__acc-cx-gd_vis-b": true,
-      "_____10c-i__acc-nx-pstcr_-f": 5,
-      "_____10c-i__acc-nx-fire_t-f": 1,
-      "_____10c-i__acc-nx-refrac-i": 0,
-      "_____10c-i__acc-nx-leak_c-f": 0,
-      "_____10c-i__acc-nx-leak_v-f": 0,
-      "_____10c-i__acc-nx-c_fr_c-i": 3,
-      "_____10c-i__acc-nx-snooze-f": 0,
-      "_____10c-i__acc-nx-ftincx-f": 0,
-      "_____10c-i__acc-nx-ftincy-f": 0,
-      "_____10c-i__acc-nx-ftincz-f": 0,
-      "_____10c-i__acc-nx-fthlim-i": 0,
-      "_____10c-i__acc-nx-mp_acc-b": true,
-      "_____10c-i__acc-cx-__name-t": "accelerator_ipu",
-      "_____10c-i__acc-cx-_group-t": "IPU",
-      "_____10c-o__dev-cx-_n_cnt-i": 1,
-      "_____10c-o__dev-cx-synatt-i": 100,
-      "_____10c-o__dev-cx-de_gen-f": 0,
-      "_____10c-o__dev-cx-pspuni-b": true,
-      "_____10c-o__dev-nx-pstcrm-f": 10,
-      "_____10c-o__dev-cx-dstmap-d": {},
-      "_____10c-o__dev-cx-___bbx-i": 1,
-      "_____10c-o__dev-cx-___bby-i": 1,
-      "_____10c-o__dev-cx-___bbz-i": 10,
-      "_____10c-o__dev-cx-rcordx-i": 64,
-      "_____10c-o__dev-cx-rcordy-i": 45,
-      "_____10c-o__dev-cx-rcordz-i": -73,
-      "_____10c-o__dev-cx-2dcorx-i": 0,
-      "_____10c-o__dev-cx-2dcory-i": 0,
-      "_____10c-o__dev-cx-gd_vis-b": true,
-      "_____10c-o__dev-nx-pstcr_-f": 1,
-      "_____10c-o__dev-nx-fire_t-f": 1,
-      "_____10c-o__dev-nx-refrac-i": 0,
-      "_____10c-o__dev-nx-leak_c-f": 0,
-      "_____10c-o__dev-nx-leak_v-f": 0,
-      "_____10c-o__dev-nx-c_fr_c-i": 0,
-      "_____10c-o__dev-nx-snooze-f": 0,
-      "_____10c-o__dev-nx-ftincx-f": 0,
-      "_____10c-o__dev-nx-ftincy-f": 0,
-      "_____10c-o__dev-nx-ftincz-f": 0,
-      "_____10c-o__dev-nx-fthlim-i": 0,
-      "_____10c-o__dev-nx-mp_acc-b": true,
-      "_____10c-o__dev-cx-__name-t": "ISO",
-      "_____10c-o__dev-cx-_group-t": "OPU",
-      "_____10c-ospmot-cx-_n_cnt-i": 1,
-      "_____10c-ospmot-cx-synatt-i": 100,
-      "_____10c-ospmot-cx-de_gen-f": 0,
-      "_____10c-ospmot-cx-pspuni-b": false,
-      "_____10c-ospmot-nx-pstcrm-f": 99999,
-      "_____10c-ospmot-cx-dstmap-d": {},
-      "_____10c-ospmot-cx-gd_vis-b": true,
-      "_____10c-ospmot-nx-pstcr_-f": 1,
-      "_____10c-ospmot-nx-fire_t-f": 1,
-      "_____10c-ospmot-nx-refrac-i": 0,
-      "_____10c-ospmot-nx-leak_c-f": 0,
-      "_____10c-ospmot-nx-leak_v-f": 0,
-      "_____10c-ospmot-nx-c_fr_c-i": 0,
-      "_____10c-ospmot-nx-snooze-f": 0,
-      "_____10c-ospmot-nx-ftincx-f": 0,
-      "_____10c-ospmot-nx-ftincy-f": 0,
-      "_____10c-ospmot-nx-ftincz-f": 0,
-      "_____10c-ospmot-nx-fthlim-i": 0,
-      "_____10c-ospmot-nx-mp_acc-b": true,
-      "_____10c-ospmot-cx-__name-t": "motor_speed",
-      "_____10c-ospmot-cx-___bbx-i": 8,
-      "_____10c-ospmot-cx-___bby-i": 1,
-      "_____10c-ospmot-cx-___bbz-i": 10,
-      "_____10c-ospmot-cx-rcordx-i": 110,
-      "_____10c-ospmot-cx-rcordy-i": 0,
-      "_____10c-ospmot-cx-rcordz-i": -28,
-      "_____10c-ospmot-cx-2dcorx-i": null,
-      "_____10c-ospmot-cx-2dcory-i": null,
-      "_____10c-ospmot-cx-_group-t": "CUSTOM",
-      "_____10c-ospser-cx-_n_cnt-i": 1,
-      "_____10c-ospser-cx-synatt-i": 100,
-      "_____10c-ospser-cx-de_gen-f": 0,
-      "_____10c-ospser-cx-pspuni-b": false,
-      "_____10c-ospser-nx-pstcrm-f": 99999,
-      "_____10c-ospser-cx-dstmap-d": {},
-      "_____10c-ospser-cx-gd_vis-b": true,
-      "_____10c-ospser-nx-pstcr_-f": 1,
-      "_____10c-ospser-nx-fire_t-f": 1,
-      "_____10c-ospser-nx-refrac-i": 0,
-      "_____10c-ospser-nx-leak_c-f": 0,
-      "_____10c-ospser-nx-leak_v-f": 0,
-      "_____10c-ospser-nx-c_fr_c-i": 0,
-      "_____10c-ospser-nx-snooze-f": 0,
-      "_____10c-ospser-nx-ftincx-f": 0,
-      "_____10c-ospser-nx-ftincy-f": 0,
-      "_____10c-ospser-nx-ftincz-f": 0,
-      "_____10c-ospser-nx-fthlim-i": 0,
-      "_____10c-ospser-nx-mp_acc-b": true,
-      "_____10c-ospser-cx-__name-t": "servo_speed",
-      "_____10c-ospser-cx-___bbx-i": 4,
-      "_____10c-ospser-cx-___bby-i": 1,
-      "_____10c-ospser-cx-___bbz-i": 10,
-      "_____10c-ospser-cx-rcordx-i": 125,
-      "_____10c-ospser-cx-rcordy-i": 0,
-      "_____10c-ospser-cx-rcordz-i": -28,
-      "_____10c-ospser-cx-2dcorx-i": null,
-      "_____10c-ospser-cx-2dcory-i": null,
-      "_____10c-ospser-cx-_group-t": "CUSTOM",
-      "_____10c-ocoacu-cx-_n_cnt-i": 1,
-      "_____10c-ocoacu-cx-synatt-i": 100,
-      "_____10c-ocoacu-cx-de_gen-f": 0,
-      "_____10c-ocoacu-cx-pspuni-b": false,
-      "_____10c-ocoacu-nx-pstcrm-f": 99999,
-      "_____10c-ocoacu-cx-dstmap-d": {},
-      "_____10c-ocoacu-cx-gd_vis-b": true,
-      "_____10c-ocoacu-nx-pstcr_-f": 1,
-      "_____10c-ocoacu-nx-fire_t-f": 1,
-      "_____10c-ocoacu-nx-refrac-i": 0,
-      "_____10c-ocoacu-nx-leak_c-f": 0,
-      "_____10c-ocoacu-nx-leak_v-f": 0,
-      "_____10c-ocoacu-nx-c_fr_c-i": 0,
-      "_____10c-ocoacu-nx-snooze-f": 0,
-      "_____10c-ocoacu-nx-ftincx-f": 0,
-      "_____10c-ocoacu-nx-ftincy-f": 0,
-      "_____10c-ocoacu-nx-ftincz-f": 0,
-      "_____10c-ocoacu-nx-fthlim-i": 0,
-      "_____10c-ocoacu-nx-mp_acc-b": true,
-      "_____10c-ocoacu-cx-__name-t": "acuity_control",
-      "_____10c-ocoacu-cx-___bbx-i": 2,
-      "_____10c-ocoacu-cx-___bby-i": 1,
-      "_____10c-ocoacu-cx-___bbz-i": 10,
-      "_____10c-ocoacu-cx-rcordx-i": 35,
-      "_____10c-ocoacu-cx-rcordy-i": 42,
-      "_____10c-ocoacu-cx-rcordz-i": -60,
-      "_____10c-ocoacu-cx-2dcorx-i": null,
-      "_____10c-ocoacu-cx-2dcory-i": null,
-      "_____10c-ocoacu-cx-_group-t": "CUSTOM"
+      "_____10c-CTGM4_-cx-gd_vis-b": true,
+      "_____10c-CTGM4_-nx-pstcr_-f": 1,
+      "_____10c-CTGM4_-nx-fire_t-f": 1,
+      "_____10c-CTGM4_-nx-refrac-i": 0,
+      "_____10c-CTGM4_-nx-leak_c-f": 0,
+      "_____10c-CTGM4_-nx-leak_v-f": 0,
+      "_____10c-CTGM4_-nx-c_fr_c-i": 0,
+      "_____10c-CTGM4_-nx-snooze-f": 0,
+      "_____10c-CTGM4_-nx-ftincx-f": 0,
+      "_____10c-CTGM4_-nx-ftincy-f": 0,
+      "_____10c-CTGM4_-nx-ftincz-f": 0,
+      "_____10c-CTGM4_-nx-fthlim-i": 0,
+      "_____10c-CTGM4_-nx-mp_acc-b": false,
+      "_____10c-CTGM4_-nx-mp_psp-b": false,
+      "_____10c-CTGM4_-cx-memory-b": false,
+      "_____10c-CTGM4_-cx-mem__t-i": 100,
+      "_____10c-CTGM4_-cx-mem_gr-i": 1,
+      "_____10c-CTGM4_-cx-mem_ls-i": 9,
+      "_____10c-CTGM4_-cx-__name-t": "M4_FW",
+      "_____10c-CTGM4_-cx-___bbx-i": 1,
+      "_____10c-CTGM4_-cx-___bby-i": 1,
+      "_____10c-CTGM4_-cx-___bbz-i": 1,
+      "_____10c-CTGM4_-cx-rcordx-i": -20,
+      "_____10c-CTGM4_-cx-rcordy-i": 0,
+      "_____10c-CTGM4_-cx-rcordz-i": -14,
+      "_____10c-CTGM4_-cx-2dcorx-i": 1516,
+      "_____10c-CTGM4_-cx-2dcory-i": 670,
+      "_____10c-CTGM4_-cx-_group-t": "CUSTOM",
+      "_____10c-CLWM4_-cx-subgrp-t": "",
+      "_____10c-CLWM4_-cx-_n_cnt-i": 1,
+      "_____10c-CLWM4_-cx-synatt-i": 100,
+      "_____10c-CLWM4_-cx-de_gen-f": 0,
+      "_____10c-CLWM4_-cx-pspuni-b": false,
+      "_____10c-CLWM4_-nx-pstcrm-f": 99999,
+      "_____10c-CLWM4_-cx-dstmap-d": {
+         "o__mot": [
+            [
+               "0_0_0-7_0_0",
+               [
+                  1,
+                  1,
+                  1
+               ],
+               1,
+               false,
+               1,
+               1,
+               1
+            ]
+         ]
+      },
+      "_____10c-CLWM4_-cx-gd_vis-b": true,
+      "_____10c-CLWM4_-nx-pstcr_-f": 1,
+      "_____10c-CLWM4_-nx-fire_t-f": 1,
+      "_____10c-CLWM4_-nx-refrac-i": 0,
+      "_____10c-CLWM4_-nx-leak_c-f": 0,
+      "_____10c-CLWM4_-nx-leak_v-f": 0,
+      "_____10c-CLWM4_-nx-c_fr_c-i": 0,
+      "_____10c-CLWM4_-nx-snooze-f": 0,
+      "_____10c-CLWM4_-nx-ftincx-f": 0,
+      "_____10c-CLWM4_-nx-ftincy-f": 0,
+      "_____10c-CLWM4_-nx-ftincz-f": 0,
+      "_____10c-CLWM4_-nx-fthlim-i": 0,
+      "_____10c-CLWM4_-nx-mp_acc-b": false,
+      "_____10c-CLWM4_-nx-mp_psp-b": false,
+      "_____10c-CLWM4_-cx-memory-b": false,
+      "_____10c-CLWM4_-cx-mem__t-i": 100,
+      "_____10c-CLWM4_-cx-mem_gr-i": 1,
+      "_____10c-CLWM4_-cx-mem_ls-i": 9,
+      "_____10c-CLWM4_-cx-__name-t": "M4_BW",
+      "_____10c-CLWM4_-cx-___bbx-i": 1,
+      "_____10c-CLWM4_-cx-___bby-i": 1,
+      "_____10c-CLWM4_-cx-___bbz-i": 1,
+      "_____10c-CLWM4_-cx-rcordx-i": -15,
+      "_____10c-CLWM4_-cx-rcordy-i": 0,
+      "_____10c-CLWM4_-cx-rcordz-i": -14,
+      "_____10c-CLWM4_-cx-2dcorx-i": 1520,
+      "_____10c-CLWM4_-cx-2dcory-i": 825,
+      "_____10c-CLWM4_-cx-_group-t": "CUSTOM"
    }
 }
\ No newline at end of file
diff --git a/src/evo/synaptogenesis_rules.py b/src/evo/synaptogenesis_rules.py
index 49ef9a138..5ee434289 100644
--- a/src/evo/synaptogenesis_rules.py
+++ b/src/evo/synaptogenesis_rules.py
@@ -1,5 +1,5 @@
 
-# Copyright 2016-2022 The FEAGI Authors. All Rights Reserved.
+# Copyright 2016-2023 The FEAGI Authors. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -147,6 +147,10 @@ def neighbor_finder(cortical_area_src, cortical_area_dst, src_neuron_id, morphol
                 for candidate in candidate_list:
                     raw_candidate_list.add((candidate[0], candidate[1], candidate[2]))
                     # candidate_voxel_list.append([candidate, post_synaptic_current])
+
+            elif neuron_morphology == "memory":
+                syn_memory(src_cortical_area=cortical_area_src, dst_cortial_area=cortical_area_dst)
+
             candidate_list = None
 
         elif runtime_data.genome["neuron_morphologies"][neuron_morphology]["type"] == "placeholder":
@@ -407,4 +411,6 @@ def syn_projector(src_cortical_area, dst_cortical_area, src_neuron_id, src_subre
     return candidate_list
 
 
-
+def syn_memory(src_cortical_area, dst_cortical_area):
+    if dst_cortical_area in runtime_data.memory_register:
+        runtime_data.memory_register[dst_cortical_area].add(src_cortical_area)
diff --git a/src/evo/templates.py b/src/evo/templates.py
index f77b845e5..9d0690c62 100644
--- a/src/evo/templates.py
+++ b/src/evo/templates.py
@@ -117,23 +117,29 @@
                 "cortical_name": "lower_middle_peripheral_vision_sensor",
                 "structure": "asymmetric",
                 "resolution": [8, 8, 3]
+            },
+            "i___id": {
+                "enabled": True,
+                "cortical_name": "ID_Trainer",
+                "structure": "asymmetric",
+                "resolution": [1, 10, 1]
             }
         }
     },
     "OPU": {
-        "gui_name": "o__mot",
+        "gui_name": "Actuators",
         "supported_devices": {
-            "Motor": {
+            "o__mot": {
                 "enabled": True,
-                "cortical_name": "Actuators",
+                "cortical_name": "Misc",
                 "structure": "asymmetric",
-                "resolution": [1, 1, 10]
+                "resolution": [1, 1, 1]
             },
             "o__srv": {
                 "enabled": True,
                 "cortical_name": "Servo",
                 "structure": "asymmetric",
-                "resolution": [1, 1, 10]
+                "resolution": [1, 1, 1]
             },
             "o__nav": {
                 "enabled": True,
@@ -159,35 +165,35 @@
                 "structure": "asymmetric",
                 "resolution": [1, 1, 1]
             },
-            "o__mot": {
-                "enabled": True,
-                "cortical_name": "Misc",
-                "structure": "asymmetric",
-                "resolution": [1, 1, 1]
-            },
             "o_aptr": {
                 "enabled": True,
                 "cortical_name": "Aperture",
                 "structure": "asymmetric",
                 "resolution": [1, 1, 10]
             },
-            "o_vres": {
+            "o__pup": {
                 "enabled": True,
-                "cortical_name": "Vision_Resolution",
+                "cortical_name": "Vision_Pupil",
                 "structure": "asymmetric",
-                "resolution": [2, 1, 10]
+                "resolution": [2, 1, 1]
             },
-            "o_vact": {
+            "o__gaz": {
                 "enabled": True,
-                "cortical_name": "Vision_Acuity",
+                "cortical_name": "Vision_Gaze",
                 "structure": "asymmetric",
                 "resolution": [2, 1, 1]
             },
-            "o_snap": {
+            "o_blnk": {
                 "enabled": True,
-                "cortical_name": "Vision_Screenshot",
+                "cortical_name": "Visual_Blink",
                 "structure": "asymmetric",
                 "resolution": [1, 1, 1]
+            },
+            "o___id": {
+                "enabled": True,
+                "cortical_name": "ID_Recognition",
+                "structure": "asymmetric",
+                "resolution": [1, 10, 1]
             }
         }
     },
@@ -198,19 +204,20 @@
                 "enabled": True,
                 "cortical_name": "Death",
                 "structure": "asymmetric",
-                "resolution": [1, 1, 1]
+                "resolution": [1, 1, 1],
+                "coordinate_3d": [0, 0, -10],
+                "coordinate_2d": [-10, -20]
             },
             "___pwr": {
                 "enabled": False,
                 "cortical_name": "Power",
                 "structure": "asymmetric",
-                "resolution": [1, 1, 1]
+                "resolution": [1, 1, 1],
+                "coordinate_3d": [0, 0, -20],
+                "coordinate_2d": [-10, -10]
             }
         }
     },
-    "MEMORY": {
-        "gui_name": "Memory"
-    },
     "CUSTOM": {
         "gui_name": "Custom"
     }
@@ -218,6 +225,7 @@
 
 
 cortical_template = {
+    "sub_group_id": "",
     "per_voxel_neuron_cnt": 1,
     "synapse_attractivity": 100,
     "degeneration": 0,
@@ -239,5 +247,203 @@
     "firing_threshold_increment_z": 0,
     "firing_threshold_limit": 0,
     "mp_charge_accumulation": True,
-    "mp_driven_psp": False
+    "mp_driven_psp": False,
+    "is_mem_type": False,
+    "longterm_mem_threshold": 100,
+    "lifespan_growth_rate": 1,
+    "init_lifespan": 9
+}
+
+
+core_morphologies = {
+    "block_to_block": {
+        "parameters": {
+            "vectors": [
+                [
+                    0,
+                    0,
+                    0
+                ]
+            ]
+        },
+        "type": "vectors"
+    },
+    "projector": {
+        "parameters": {},
+        "type": "functions"
+    },
+    "memory": {
+        "parameters": {},
+        "type": "functions"
+    },
+    "0-0-0_to_all": {
+        "type": "patterns",
+        "parameters": {
+            "patterns": [
+                [
+                    [
+                        0,
+                        0,
+                        0
+                    ],
+                    [
+                        "*",
+                        "*",
+                        "*"
+                    ]
+                ]
+            ]
+        }
+    },
+    "all_to_0-0-0": {
+        "type": "patterns",
+        "parameters": {
+            "patterns": [
+                [
+                    [
+                        "*",
+                        "*",
+                        "*"
+                    ],
+                    [
+                        0,
+                        0,
+                        0
+                    ]
+                ]
+            ]
+        }
+    },
+    "all_to_all": {
+        "type": "patterns",
+        "parameters": {
+            "patterns": [
+                [
+                    [
+                        "?",
+                        "?",
+                        "?"
+                    ],
+                    [
+                        "*",
+                        "*",
+                        "*"
+                    ]
+                ]
+            ]
+        }
+    },
+    "lateral_+x": {
+        "parameters": {
+            "vectors": [
+                [
+                    1,
+                    0,
+                    0
+                ]
+            ]
+        },
+        "type": "vectors"
+    },
+    "lateral_-x": {
+        "parameters": {
+            "vectors": [
+                [
+                    -1,
+                    0,
+                    0
+                ]
+            ]
+        },
+        "type": "vectors"
+    },
+    "lateral_+y": {
+        "parameters": {
+            "vectors": [
+                [
+                    0,
+                    1,
+                    0
+                ]
+            ]
+        },
+        "type": "vectors"
+    },
+    "lateral_-y": {
+        "parameters": {
+            "vectors": [
+                [
+                    0,
+                    -1,
+                    0
+                ]
+            ]
+        },
+        "type": "vectors"
+    },
+    "lateral_+z": {
+        "parameters": {
+            "vectors": [
+                [
+                    0,
+                    0,
+                    1
+                ]
+            ]
+        },
+        "type": "vectors"
+    },
+    "lateral_-z": {
+        "parameters": {
+            "vectors": [
+                [
+                    0,
+                    0,
+                    -1
+                ]
+            ]
+        },
+        "type": "vectors"
+    },
+    "randomizer": {
+        "parameters": {},
+        "type": "functions"
+    },
+    "expander_x": {
+        "parameters": {},
+        "type": "functions"
+    },
+    "reducer_x": {
+        "parameters": {},
+        "type": "functions"
+    },
+    "lateral_pairs_x": {
+        "parameters": {},
+        "type": "functions"
+    },
+    "tile": {
+        "parameters": {
+            "src_seed": [
+                16,
+                16,
+                1
+            ],
+            "src_pattern": [
+                [
+                    1,
+                    0
+                ],
+                [
+                    1,
+                    0
+                ],
+                [
+                    1,
+                    0
+                ]
+            ],
+            "mapper_morphology": "projector"
+        },
+        "type": "composite"
+    },
 }
diff --git a/src/evo/x_genesis.py b/src/evo/x_genesis.py
index 724c73e86..55b7b5286 100644
--- a/src/evo/x_genesis.py
+++ b/src/evo/x_genesis.py
@@ -256,6 +256,30 @@ def update_cortical_properties(cortical_properties):
             regeneration_flag = True
             changed_areas.add("blueprint")
 
+    if cortical_properties['neuron_longterm_mem_threshold'] is not None:
+        if runtime_data.genome['blueprint'][cortical_area]["longterm_mem_threshold"] != \
+                cortical_properties['neuron_longterm_mem_threshold']:
+            runtime_data.genome['blueprint'][cortical_area]["longterm_mem_threshold"] = \
+                cortical_properties['neuron_longterm_mem_threshold']
+            regeneration_flag = False
+            changed_areas.add("blueprint")
+
+    if cortical_properties['neuron_lifespan_growth_rate'] is not None:
+        if runtime_data.genome['blueprint'][cortical_area]["lifespan_growth_rate"] != \
+                cortical_properties['neuron_lifespan_growth_rate']:
+            runtime_data.genome['blueprint'][cortical_area]["lifespan_growth_rate"] = \
+                cortical_properties['neuron_lifespan_growth_rate']
+            regeneration_flag = False
+            changed_areas.add("blueprint")
+
+    if cortical_properties['neuron_init_lifespan'] is not None:
+        if runtime_data.genome['blueprint'][cortical_area]["init_lifespan"] != \
+                cortical_properties['neuron_init_lifespan']:
+            runtime_data.genome['blueprint'][cortical_area]["init_lifespan"] = \
+                cortical_properties['neuron_init_lifespan']
+            regeneration_flag = False
+            changed_areas.add("blueprint")
+
     if cortical_properties['neuron_fire_threshold_increment'] is not None:
         genome_fire_threshold_increment = [
             runtime_data.genome['blueprint'][cortical_area]["firing_threshold_increment_x"],
@@ -412,6 +436,9 @@ def neighboring_cortical_areas(cortical_area, blueprint=None):
 def cortical_removal(cortical_area, genome_scrub=False):
     if cortical_area not in runtime_data.cortical_list:
         print("Error: Cortical area requested for removal does not exist:", cortical_area)
+
+    elif cortical_area in templates.cortical_types["CORE"]["supported_devices"]:
+        print("Error: Cortical areas of CORE type cannot be removed", cortical_area)
     else:
         print("Processing cortical removal for", cortical_area)
         msg = "Processing cortical removal request for" + cortical_area
@@ -535,12 +562,17 @@ def mapping_change_report(cortical_area, new_mapping):
     return added, removed, modified
 
 
-def cortical_id_gen(seed='___'):
+def cortical_id_gen(seed='___', is_memory=False):
     while True:
         chars = string.ascii_uppercase + string.digits
-        random_id = 'C' + str('').join(random.choice(chars) for _ in range(2)) + seed
-        if random_id not in runtime_data.cortical_list:
-            return random_id
+        if not is_memory:
+            random_id = 'C' + str('').join(random.choice(chars) for _ in range(2)) + seed
+            if random_id not in runtime_data.cortical_list:
+                return random_id
+        else:
+            random_id = 'M' + str('').join(random.choice(chars) for _ in range(2)) + seed
+            if random_id not in runtime_data.cortical_list:
+                return random_id
 
 
 def add_core_cortical_area(cortical_properties):
@@ -578,28 +610,32 @@ def add_core_cortical_area(cortical_properties):
                  cortical_properties['coordinates_2d'][1]]
 
             runtime_data.genome['blueprint'][cortical_id_]['cortical_mapping_dst'] = dict()
-            runtime_data.genome["blueprint"][cortical_id_]["per_voxel_neuron_cnt"] = \
-                template['per_voxel_neuron_cnt']
-            runtime_data.genome["blueprint"][cortical_id_]["synapse_attractivity"] = \
-                template['synapse_attractivity']
-            runtime_data.genome["blueprint"][cortical_id_]["postsynaptic_current"] = \
-                template['postsynaptic_current']
-            runtime_data.genome["blueprint"][cortical_id_]["plasticity_constant"] = \
-                template['plasticity_constant']
-            runtime_data.genome["blueprint"][cortical_id_]["degeneration"] = \
-                template['degeneration']
-            runtime_data.genome["blueprint"][cortical_id_]["psp_uniform_distribution"] = \
-                template['psp_uniform_distribution']
-            runtime_data.genome["blueprint"][cortical_id_]["postsynaptic_current_max"] = \
-                template['postsynaptic_current_max']
-            runtime_data.genome["blueprint"][cortical_id_]["mp_charge_accumulation"] = \
-                template['mp_charge_accumulation']
-            runtime_data.genome["blueprint"][cortical_id_]["mp_driven_psp"] = \
-                template['mp_driven_psp']
-            runtime_data.genome["blueprint"][cortical_id_]["firing_threshold_increment"] = \
-                template['firing_threshold_increment']
-            runtime_data.genome["blueprint"][cortical_id_]["firing_threshold_limit"] = \
-                template['firing_threshold_limit']
+
+            for parameter in template:
+                runtime_data.genome["blueprint"][cortical_id_][parameter] = template[parameter]
+
+            # runtime_data.genome["blueprint"][cortical_id_]["per_voxel_neuron_cnt"] = \
+            #     template['per_voxel_neuron_cnt']
+            # runtime_data.genome["blueprint"][cortical_id_]["synapse_attractivity"] = \
+            #     template['synapse_attractivity']
+            # runtime_data.genome["blueprint"][cortical_id_]["postsynaptic_current"] = \
+            #     template['postsynaptic_current']
+            # runtime_data.genome["blueprint"][cortical_id_]["plasticity_constant"] = \
+            #     template['plasticity_constant']
+            # runtime_data.genome["blueprint"][cortical_id_]["degeneration"] = \
+            #     template['degeneration']
+            # runtime_data.genome["blueprint"][cortical_id_]["psp_uniform_distribution"] = \
+            #     template['psp_uniform_distribution']
+            # runtime_data.genome["blueprint"][cortical_id_]["postsynaptic_current_max"] = \
+            #     template['postsynaptic_current_max']
+            # runtime_data.genome["blueprint"][cortical_id_]["mp_charge_accumulation"] = \
+            #     template['mp_charge_accumulation']
+            # runtime_data.genome["blueprint"][cortical_id_]["mp_driven_psp"] = \
+            #     template['mp_driven_psp']
+            # runtime_data.genome["blueprint"][cortical_id_]["firing_threshold_increment"] = \
+            #     template['firing_threshold_increment']
+            # runtime_data.genome["blueprint"][cortical_id_]["firing_threshold_limit"] = \
+            #     template['firing_threshold_limit']
 
             runtime_data.genome["blueprint"][cortical_id_]["group_id"] = cortical_properties['cortical_type']
 
@@ -618,7 +654,8 @@ def add_core_cortical_area(cortical_properties):
         print("Error: New cortical area was not added.", traceback.print_exc())
 
 
-def add_custom_cortical_area(cortical_name, coordinates_3d, coordinates_2d, cortical_dimensions, cortical_id_overwrite=None):
+def add_custom_cortical_area(cortical_name, coordinates_3d, coordinates_2d, cortical_dimensions,
+                             cortical_id_overwrite=None, is_memory=False):
     # Generate Cortical ID
     # todo: instead of hard coding the length have the genome properties captured and reference instead
     temp_name = cortical_name
@@ -627,7 +664,7 @@ def add_custom_cortical_area(cortical_name, coordinates_3d, coordinates_2d, cort
     if cortical_id_overwrite:
         cortical_area = cortical_id_overwrite
     else:
-        cortical_area = cortical_id_gen(temp_name[:3])
+        cortical_area = cortical_id_gen(temp_name[:3], is_memory=is_memory)
 
     cortical_names = neuroembryogenesis.cortical_name_list()
     template = templates.cortical_template.copy()
@@ -683,6 +720,17 @@ def add_custom_cortical_area(cortical_name, coordinates_3d, coordinates_2d, cort
         runtime_data.genome["blueprint"][cortical_area]["firing_threshold_limit"] = \
             template['firing_threshold_limit']
 
+        runtime_data.genome["blueprint"][cortical_area]["sub_group_id"] = ""
+
+        if is_memory:
+            runtime_data.genome["blueprint"][cortical_area]["longterm_mem_threshold"] = \
+                template['longterm_mem_threshold']
+            runtime_data.genome["blueprint"][cortical_area]["lifespan_growth_rate"] = \
+                template['lifespan_growth_rate']
+            runtime_data.genome["blueprint"][cortical_area]["init_lifespan"] = \
+                template['init_lifespan']
+            runtime_data.genome["blueprint"][cortical_area]["sub_group_id"] = "MEMORY"
+
         runtime_data.genome["blueprint"][cortical_area]["group_id"] = "CUSTOM"
 
         neuroembryogenesis.voxelogenesis(cortical_area=cortical_area)
@@ -715,10 +763,16 @@ def append_circuit(source_genome, circuit_origin):
         for cortical_area_id in src_blueprint:
             print(f"-----Attempting to import cortical area {cortical_area_id}")
             try:
-                if src_blueprint[cortical_area_id]['group_id'] not in ["IPU", "OPU", "Core"]:
-                    src_cortical_area = src_blueprint[cortical_area_id]
-                    new_cortical_name = src_blueprint[cortical_area_id]["cortical_name"]
-                    new_cortical_area_id = cortical_area_id
+                src_cortical_area = src_blueprint[cortical_area_id]
+                new_cortical_name = src_blueprint[cortical_area_id]["cortical_name"]
+                new_cortical_area_id = cortical_area_id
+
+                new_coordinates = [src_cortical_area["relative_coordinate"][0] + circuit_origin[0],
+                                   src_cortical_area["relative_coordinate"][1] + circuit_origin[1],
+                                   src_cortical_area["relative_coordinate"][2] + circuit_origin[2],
+                                   ]
+
+                if src_blueprint[cortical_area_id]['group_id'] not in ["IPU", "OPU", "CORE"]:
 
                     if cortical_area_id in dst_blueprint:
                         while new_cortical_area_id == cortical_area_id:
@@ -731,11 +785,6 @@ def append_circuit(source_genome, circuit_origin):
                                 src_blueprint[cortical_area_id]["cortical_name"] + \
                                 "".join(random.choice(string.ascii_uppercase) for _ in range(3))
 
-                    new_coordinates = [src_cortical_area["relative_coordinate"][0] + circuit_origin[0],
-                                       src_cortical_area["relative_coordinate"][1] + circuit_origin[1],
-                                       src_cortical_area["relative_coordinate"][2] + circuit_origin[2],
-                                       ]
-
                     upstream_cortical_areas, downstream_cortical_areas = \
                         neighboring_cortical_areas(cortical_area=cortical_area_id, blueprint=src_blueprint)
 
@@ -764,11 +813,12 @@ def append_circuit(source_genome, circuit_origin):
                 else:
                     if cortical_area_id not in dst_blueprint:
                         add_core_cortical_area(cortical_properties={
-                          "cortical_type": src_blueprint[cortical_area_id]['group_id'],
-                          "cortical_name": src_blueprint[cortical_area_id]['cortical_name'],
-                          "cortical_coordinates": [new_coordinates[0], new_coordinates[1], new_coordinates[2]],
-                          "channel_count": 1,
-                          "2d_coordinates": [0, 0]
+                            "cortical_id": cortical_area_id,
+                            "cortical_type": src_blueprint[cortical_area_id]['group_id'],
+                            "cortical_name": src_blueprint[cortical_area_id]['cortical_name'],
+                            "coordinates_3d": [new_coordinates[0], new_coordinates[1], new_coordinates[2]],
+                            "channel_count": 1,
+                            "coordinates_2d": [0, 0]
                         })
                         appended_cortical_areas.add(cortical_area_id)
                         print(f"---------------Successfully imported a built-in cortical area. id:{cortical_area_id}")
diff --git a/src/inf/initialize.py b/src/inf/initialize.py
index 9ade99ec4..f73351ca6 100644
--- a/src/inf/initialize.py
+++ b/src/inf/initialize.py
@@ -1,5 +1,4 @@
-
-# Copyright 2016-2022 The FEAGI Authors. All Rights Reserved.
+# Copyright 2016-2023 The FEAGI Authors. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -13,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # ==============================================================================
+
 import json
 import os
 import platform
@@ -77,7 +77,11 @@ def deploy_genome(neuroembryogenesis_flag=False, reset_runtime_data_flag=False,
     runtime_data.genome = genome_data
     runtime_data.genome = genome_ver_check(runtime_data.genome)
     runtime_data.genome_ver = "2.0"
+
     # todo temp check to find a better solution
+    if "lifespan_mgmt_interval" not in runtime_data.genome:
+        runtime_data.genome["lifespan_mgmt_interval"] = 10
+
     for _ in runtime_data.genome["blueprint"]:
         if "mp_charge_accumulation" not in runtime_data.genome["blueprint"][_]:
             runtime_data.genome["blueprint"][_]["mp_charge_accumulation"] = True
@@ -180,6 +184,13 @@ def init_container_variables():
         runtime_data.gazebo = True
 
 
+def init_memory_register():
+    for cortical_are in runtime_data.genome["blueprint"]:
+        if "lstm" in runtime_data.genome["blueprint"][cortical_are]:
+            if runtime_data.genome["blueprint"][cortical_are]["lstm"]:
+                runtime_data.memory_register.add(cortical_are)
+
+
 def running_in_container():
     """
     Identifies if FEAGI is running in a container or not based on the ENV variable set during the container creation
@@ -418,6 +429,7 @@ def reset_runtime_data():
     runtime_data.stats = {}
     runtime_data.brain = {}
     runtime_data.cortical_list = {}
+    runtime_data.memory_register = {}
     runtime_data.cortical_dimensions = {}
     runtime_data.stimulation_script = {}
     runtime_data.shock_admin = False
@@ -456,6 +468,7 @@ def init_brain():
     runtime_data.last_alertness_trigger = datetime.now()
     runtime_data.brain_run_id = id_gen(signature='_R')
     init_cortical_info()
+    init_memory_register()
     runtime_data.cortical_list = genome_1_cortical_list(runtime_data.genome)
     runtime_data.cortical_dimensions = generate_cortical_dimensions()
     runtime_data.cortical_dimensions_by_id = generate_cortical_dimensions_by_id()
@@ -575,22 +588,23 @@ def generate_cortical_dimensions_by_id():
         cortical_information[cortical_area] = {}
         genes = runtime_data.genome["blueprint"][cortical_area]
 
-        cortical_information[cortical_area]["name"] = genes["cortical_name"]
-        cortical_information[cortical_area]["type"] = genes["group_id"]
+        cortical_information[cortical_area]["cortical_name"] = genes["cortical_name"]
+        cortical_information[cortical_area]["cortical_group"] = genes["group_id"]
+        cortical_information[cortical_area]["cortical_sub_group"] = genes["sub_group_id"]
         cortical_information[cortical_area]["visible"] = genes["visualization"]
 
-        cortical_information[cortical_area]["position_2d"] = [
+        cortical_information[cortical_area]["coordinates_2d"] = [
             genes["2d_coordinate"][0],
             genes["2d_coordinate"][1]
         ]
 
-        cortical_information[cortical_area]["position_3d"] = [
+        cortical_information[cortical_area]["coordinates_3d"] = [
             genes["relative_coordinate"][0],
             genes["relative_coordinate"][1],
             genes["relative_coordinate"][2]
         ]
 
-        cortical_information[cortical_area]["dimensions"] = [
+        cortical_information[cortical_area]["cortical_dimensions"] = [
             genes["block_boundaries"][0],
             genes["block_boundaries"][1],
             genes["block_boundaries"][2]
diff --git a/src/inf/runtime_data.py b/src/inf/runtime_data.py
index 2696fac12..e246b90c5 100644
--- a/src/inf/runtime_data.py
+++ b/src/inf/runtime_data.py
@@ -101,6 +101,7 @@
 fire_list = []
 prunning_candidates = set()
 plasticity_queue_candidates = dict()
+upcoming_lifesnap_mgmt = None
 
 # Stats Collection
 neuron_mp_collection_scope = {}
@@ -149,6 +150,7 @@
 intercortical_mapping = []
 brain_is_running = False
 cumulative_stats = {}
+memory_register = {}
 
 # Training
 shock_scenarios_options = tuple
diff --git a/src/main.py b/src/main.py
index b2aace728..a91150d8d 100644
--- a/src/main.py
+++ b/src/main.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2016-2022 The FEAGI Authors. All Rights Reserved.
+# Copyright 2016-2023 The FEAGI Authors. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/mem/memory.py b/src/mem/memory.py
index 1d90707a1..ab527e84a 100644
--- a/src/mem/memory.py
+++ b/src/mem/memory.py
@@ -50,7 +50,9 @@
 """
 import traceback
 import logging
+import xxhash
 from inf import runtime_data
+from evo.neuron import init_neuron, increase_neuron_lifespan, neuron_apoptosis
 from evo.synapse import bidirectional_synapse, synapse
 from npu.physiology import list_upstream_plastic_neurons, list_downstream_plastic_neurons, post_synaptic_current_update
 
@@ -154,3 +156,75 @@ def longterm_potentiation_depression(src_cortical_area, src_neuron_id, dst_corti
                     pass
     else:
         print(f"longterm_potentiation_depression did not find {dst_cortical_area} as a mapping in {src_cortical_area}")
+
+
+def long_short_term_memory():
+    # todo: build up the runtime_date.memory_register from synaptogenesis
+    if runtime_data.memory_register:
+        for memory_cortical_area in runtime_data.memory_register:
+            neurogenesis_list = set()
+            for upstream_cortical_area in memory_cortical_area:
+                if runtime_data.fire_candidate_list[upstream_cortical_area]:
+                    neurogenesis_list.add(runtime_data.fire_candidate_list[upstream_cortical_area])
+
+            print(f"Memory Neurogenesis list of neurons for {memory_cortical_area}")
+            memory_hash = generate_mem_hash_cache(afferent_neuron_list=neurogenesis_list)
+
+            mem_neuron_id = convert_hash_to_neuron_id(cortical_area=memory_cortical_area, memory_hash=memory_hash)
+
+            if mem_neuron_id not in runtime_data.brain[memory_cortical_area]:
+                init_neuron(cortical_area=memory_cortical_area, soma_location=[0, 0, 0], memory_hash=memory_hash)
+
+            else:
+                increase_neuron_lifespan(cortical_area=memory_cortical_area, neuron_id=mem_neuron_id)
+
+
+def lstm_lifespan_mgmt():
+    """
+    Handles lifecycle management for memory neurons
+    """
+    if runtime_data.memory_register:
+        if runtime_data.burst_count > runtime_data.upcoming_lifesnap_mgmt:
+            runtime_data.upcoming_lifesnap_mgmt += runtime_data.genome["lifespan_mgmt_interval"]
+
+            # Wipe short-term memory neurons that has expired
+            memory_cleanup()
+
+
+def memory_cleanup():
+    for memory_cortical_area in runtime_data.memory_register:
+        for neuron in runtime_data.brain[memory_cortical_area]:
+            # Neuron lifespan management
+            if not runtime_data.brain[memory_cortical_area][neuron]["immortal"]:
+                # Neuron Apoptosis check
+                if runtime_data.brain[memory_cortical_area][neuron]["lifespan"] < runtime_data.burst_count:
+                    neuron_apoptosis(cortical_area=memory_cortical_area, neuron_id=neuron)
+                # Short-term Memory to Long-term Memory transformation check
+                elif runtime_data.brain[memory_cortical_area][neuron]["lifespan"] > \
+                        runtime_data.burst_count + \
+                        runtime_data.genome["blueprint"][memory_cortical_area]["lstm_threshold"]:
+                    # Convert Short Term Memory Neuron to Long Term Memory Neuron
+                    runtime_data.brain[memory_cortical_area][neuron]["immortal"] = True
+
+
+def generate_mem_hash_cache(afferent_neuron_list):
+    combined_hash = 0
+    hash_cache = {}
+
+    for serial_number in afferent_neuron_list:
+        if serial_number not in hash_cache:
+            # Compute and cache the hash for new serial numbers
+            hash_cache[serial_number] = xxhash.xxh32(serial_number).intdigest()
+
+        # Retrieve the hash from the cache
+        individual_hash = hash_cache[serial_number]
+
+        # Combine hashes using XOR
+        combined_hash ^= individual_hash
+
+    return hex(combined_hash)
+
+
+def convert_hash_to_neuron_id(cortical_area, memory_hash):
+    neuron_id = str(cortical_area + '_' + memory_hash)
+    return neuron_id
\ No newline at end of file
diff --git a/src/npu/burst_engine.py b/src/npu/burst_engine.py
index a7025a21a..eea020bba 100644
--- a/src/npu/burst_engine.py
+++ b/src/npu/burst_engine.py
@@ -37,7 +37,7 @@
 import pickle
 from npu.physiology import *
 from npu import stimulator, auxiliary
-from mem.memory import neuroplasticity
+from mem.memory import neuroplasticity, long_short_term_memory, lstm_lifespan_mgmt
 from evo.stats import *
 from evo.death import death_manager
 from inf.initialize import init_burst_engine, init_fcl, utc_time
@@ -609,6 +609,8 @@ def burst():
 
         # Forming memories through creation of cell assemblies
         neuroplasticity()
+        long_short_term_memory()
+        lstm_lifespan_mgmt()
 
         # A deep copy of the FCL to previous FCL
         for _ in runtime_data.fire_candidate_list:
@@ -758,3 +760,5 @@ def toggle_brain_status():
     else:
         runtime_data.brain_is_running = True
         print("Brain is now running!!!")
+
+
diff --git a/src/pns/pns_router.py b/src/pns/pns_router.py
index d53b22cbc..bf8f36454 100644
--- a/src/pns/pns_router.py
+++ b/src/pns/pns_router.py
@@ -145,6 +145,12 @@ def stimuli_router(ipu_data):
                     except Exception:
                         print("ERROR while processing Camera IPU", traceback.format_exc())
 
+                if 'training' in sensor_type and ipu_data["data"]["sensory_data"][sensor_type] is not None:
+                    try:
+                        stimuli_translator.training_translator(stimulation=ipu_data["data"]["sensory_data"][sensor_type])
+                    except Exception:
+                        print("ERROR while processing Object Identification Training IPU", traceback.format_exc())
+
 
 def opu_router():
     """
diff --git a/src/pns/stimuli_translator.py b/src/pns/stimuli_translator.py
index 466434cc9..07e895b36 100644
--- a/src/pns/stimuli_translator.py
+++ b/src/pns/stimuli_translator.py
@@ -218,6 +218,12 @@ def convert_ir_to_fire_list(ir_data):
         runtime_data.logs["PNS"].add(f"Warning! Cortical stimulation received but genome missing {cortical_area}")
 
 
+def training_translator(stimulation):
+    cortical_area = "i___id"
+    if stimulation is not None:
+        inject_stimuli_to_fcl(cortical_area=cortical_area, stimulation=stimulation)
+
+
 def lidar_translator(proximity_data):
     """
     Translate the lidar messages based on its type.
@@ -394,16 +400,16 @@ def encoder_speed_translator(encoder_speed_data):
         runtime_data.logs["PNS"].add(f"Warning! Cortical stimulation received but genome missing {cortical_area}")
 
 
-def inject_visual_stimuli_to_fcl(cortical_area, sub_region_data):
+def inject_stimuli_to_fcl(cortical_area, stimulation):
     if cortical_area in runtime_data.genome["blueprint"]:
-        for pixel_coordinate in sub_region_data:
+        for pixel_coordinate in stimulation:
             neuron_ids = set()
             block_neurons = neurons_in_the_block(cortical_area, pixel_coordinate)
             neuron_ids.update(neuron for neuron in block_neurons if neuron is not None)
             for neuron in neuron_ids:
                 update_membrane_potential_fire_queue(cortical_area=cortical_area,
                                                      neuron_id=neuron,
-                                                     mp_update_amount=sub_region_data[pixel_coordinate],
+                                                     mp_update_amount=stimulation[pixel_coordinate],
                                                      fcl_insertion=True)
 
 
@@ -447,7 +453,7 @@ def vision_translator(vision_data):
                 cortical_area = "iv00_C"
             else:
                 cortical_area = "iv" + data_packet_key
-            inject_visual_stimuli_to_fcl(cortical_area=cortical_area, sub_region_data=vision_data[data_packet_key])
+            inject_stimuli_to_fcl(cortical_area=cortical_area, stimulation=vision_data[data_packet_key])
 
                 # if 'C' in sub_region:
                 #     cortical_area = "i__v" + str(camera_index) + str('C')  # generate specific cortical area
diff --git a/src/version.py b/src/version.py
index ef6447ae0..894592765 100644
--- a/src/version.py
+++ b/src/version.py
@@ -1,1 +1,1 @@
-__version__ = '01701715553'
+__version__ = '01702569283'
diff --git a/third_party/embodiments/digital_dream_labs/cozmo_1.0/controller.py b/third_party/embodiments/digital_dream_labs/cozmo_1.0/controller.py
index c41cb310f..9ba86879c 100644
--- a/third_party/embodiments/digital_dream_labs/cozmo_1.0/controller.py
+++ b/third_party/embodiments/digital_dream_labs/cozmo_1.0/controller.py
@@ -350,7 +350,7 @@ def action(obtained_data, device_list, feagi_settings, arms_angle, head_angle):
 
     while True:
         try:
-            message_from_feagi = pns.efferent_signaling(feagi_opu_channel)
+            message_from_feagi = pns.signals_from_feagi(feagi_opu_channel)
             if message_from_feagi is not None:
                 # Obtain the size of aptr
                 if aptr_cortical_size is None:
@@ -458,7 +458,7 @@ def action(obtained_data, device_list, feagi_settings, arms_angle, head_angle):
             if message_from_feagi is not None:
                 feagi_settings['feagi_burst_speed'] = message_from_feagi['burst_frequency']
             sleep(feagi_settings['feagi_burst_speed'])
-            pns.afferent_signaling(message_to_feagi, feagi_ipu_channel, agent_settings)
+            pns.signals_to_feagi(message_to_feagi, feagi_ipu_channel, agent_settings)
             message_to_feagi.clear()
             for i in rgb['camera']:
                 rgb['camera'][i].clear()
diff --git a/third_party/embodiments/elecfreaks/cutebot/web_html_microbit/controller.py b/third_party/embodiments/elecfreaks/cutebot/web_html_microbit/controller.py
index a059dd564..de5f8c72e 100644
--- a/third_party/embodiments/elecfreaks/cutebot/web_html_microbit/controller.py
+++ b/third_party/embodiments/elecfreaks/cutebot/web_html_microbit/controller.py
@@ -191,7 +191,7 @@ def action(obtained_data, device_list):
         runtime_data['accelerator'] = {}
         while True:
             try:
-                message_from_feagi = pns.efferent_signaling(feagi_opu_channel)
+                message_from_feagi = pns.signals_from_feagi(feagi_opu_channel)
                 if message_from_feagi is not None:
                     # OPU section STARTS
                     obtained_signals = pns.obtain_opu_data(device_list, message_from_feagi)
diff --git a/third_party/embodiments/elecfreaks/cutebot/web_html_microbit/version.py b/third_party/embodiments/elecfreaks/cutebot/web_html_microbit/version.py
index 64d64422a..1493bd653 100644
--- a/third_party/embodiments/elecfreaks/cutebot/web_html_microbit/version.py
+++ b/third_party/embodiments/elecfreaks/cutebot/web_html_microbit/version.py
@@ -1,1 +1,1 @@
-__version__ = '01700708209'
+__version__ = '01702569284'
diff --git a/third_party/embodiments/elephant_robotics/feagi_agent_mycobot/feagi_agent_mycobot/src/mycobot.py b/third_party/embodiments/elephant_robotics/feagi_agent_mycobot/feagi_agent_mycobot/src/mycobot.py
index fcccf416e..1f9b13535 100755
--- a/third_party/embodiments/elephant_robotics/feagi_agent_mycobot/feagi_agent_mycobot/src/mycobot.py
+++ b/third_party/embodiments/elephant_robotics/feagi_agent_mycobot/feagi_agent_mycobot/src/mycobot.py
@@ -371,7 +371,7 @@ def action(obtained_data, device_list, runtime_data):
 while keyboard_flag:
     try:
         # OPU section
-        message_from_feagi = pns.efferent_signaling(feagi_opu_channel)
+        message_from_feagi = pns.signals_from_feagi(feagi_opu_channel)
         if message_from_feagi is not None:
             obtained_signals = pns.obtain_opu_data(device_list, message_from_feagi)
             action(obtained_signals, device_list, runtime_data)
@@ -400,7 +400,7 @@ def action(obtained_data, device_list, runtime_data):
         # SENDING MESSAGE TO FEAGI SECTION # #
         message_to_feagi['timestamp'] = datetime.now()
         message_to_feagi['counter'] = msg_counter
-        pns.afferent_signaling(message_to_feagi, feagi_ipu_channel, agent_settings)
+        pns.signals_to_feagi(message_to_feagi, feagi_ipu_channel, agent_settings)
         message_to_feagi.clear()
 
         # Doing the misc background work (check on sync setting #
diff --git a/third_party/embodiments/freenove/feagi_agent_freenove/feagi_agent_freenove/configuration.py b/third_party/embodiments/freenove/feagi_agent_freenove/feagi_agent_freenove/configuration.py
index 65218afac..f0ca0e28f 100644
--- a/third_party/embodiments/freenove/feagi_agent_freenove/feagi_agent_freenove/configuration.py
+++ b/third_party/embodiments/freenove/feagi_agent_freenove/feagi_agent_freenove/configuration.py
@@ -88,7 +88,7 @@
         "aperture_range": [0.2, 2],
         "aperture_default": 2,
         "mirror": True,
-        "snap": []
+        "blink": []
     },
     "led": {
         "type": "opu"
diff --git a/third_party/embodiments/freenove/feagi_agent_freenove/feagi_agent_freenove/controller.py b/third_party/embodiments/freenove/feagi_agent_freenove/feagi_agent_freenove/controller.py
index 43445f628..646f8c16f 100644
--- a/third_party/embodiments/freenove/feagi_agent_freenove/feagi_agent_freenove/controller.py
+++ b/third_party/embodiments/freenove/feagi_agent_freenove/feagi_agent_freenove/controller.py
@@ -489,7 +489,7 @@ async def listening_feagi(feagi_dict, feagi_opu_channel, feagi_settings):
     while True:
         if len(feagi_dict) > 2:
             feagi_dict.popleft()
-        feagi_dict.append(pns.efferent_signaling(feagi_opu_channel))
+        feagi_dict.append(pns.signals_from_feagi(feagi_opu_channel))
 
 
 def start_feagi_bridge(feagi_dict, feagi_opu_channel, feagi_settings):
@@ -590,9 +590,9 @@ def main(feagi_auth_url, feagi_settings, agent_settings, capabilities):
                 if capabilities['camera']['mirror']:
                     image = retina.flip_video(image)
                 rgb = dict()
-                if len(capabilities['camera']['snap']) > 0:
+                if len(capabilities['camera']['blink']) > 0:
                     previous_data_frame, camera, capabilities['camera']['current_select'] = \
-                        pns.generate_rgb(capabilities['camera']['snap'],
+                        pns.generate_rgb(capabilities['camera']['blink'],
                                          capabilities['camera'][
                                              'central_vision_allocation_percentage'][0],
                                          capabilities['camera'][
@@ -604,9 +604,9 @@ def main(feagi_auth_url, feagi_settings, agent_settings, capabilities):
                                          capabilities['camera']['iso_default'],
                                          capabilities['camera']['iso_default'],
                                          camera_index=capabilities['camera']["index"],
-                                         snap=True)
+                                         blink=True)
                     rgb['camera'] = camera
-                    capabilities['camera']['snap'] = []
+                    capabilities['camera']['blink'] = []
                 else:
                     previous_data_frame, rgb['camera'], capabilities['camera']['current_select'] \
                         = pns.generate_rgb(image,
@@ -625,7 +625,7 @@ def main(feagi_auth_url, feagi_settings, agent_settings, capabilities):
                 rgb = {}
             # Process OPU data received from FEAGI and pass it along
             # if feagi_dict:
-            message_from_feagi = pns.efferent_signaling(feagi_opu_channel)
+            message_from_feagi = pns.signals_from_feagi(feagi_opu_channel)
             if message_from_feagi is not None:
                 # Obtain the size of aptr
                 if aptr_cortical_size is None:
@@ -644,9 +644,9 @@ def main(feagi_auth_url, feagi_settings, agent_settings, capabilities):
                 led_flag = action(obtained_signals, device_list, led_flag, feagi_settings,
                                   capabilities, motor_data, rolling_window, motor, servo, led,
                                   runtime_data)
-                if "o_snap" in message_from_feagi["opu_data"]:
-                    if message_from_feagi["opu_data"]["o_snap"]:
-                        capabilities['camera']['snap'] = image
+                if "o_blnk" in message_from_feagi["opu_data"]:
+                    if message_from_feagi["opu_data"]["o_blnk"]:
+                        capabilities['camera']['blink'] = image
             # print(time.time() - start)
             # Fetch IR data
             ir_list = ir_data[0] if ir_data else []
diff --git a/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/__main__.py b/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/__main__.py
index 95c422ad7..1cfa53e0f 100644
--- a/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/__main__.py
+++ b/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/__main__.py
@@ -17,6 +17,7 @@
     parser.add_argument('-device', '--device', help='To bind the location or index of webcam.',
                         required=False)
     parser.add_argument('-video', '--video', help='Use the path to video to read', required=False)
+    parser.add_argument('-image', '--image', help='Use the path to image to read', required=False)
     parser.add_argument('-port', '--port', help='Change the port instead of default 8000.',
                         required=False)
     args = vars(parser.parse_args())
@@ -35,6 +36,8 @@
         capabilities["camera"]["video_device_index"] = args['video']
     if args['port']:
         feagi_settings["feagi_api_port"] = args['port']
+    if args['image']:
+      capabilities["camera"]["image"] = args['image']
     if __name__ == '__main__':
         inital_feagi_setting = feagi_settings.copy()
         inital_agent_settings = agent_settings.copy()
diff --git a/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/configuration.py b/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/configuration.py
index 9108a8142..8fef1e69e 100644
--- a/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/configuration.py
+++ b/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/configuration.py
@@ -47,12 +47,13 @@
                                [256, 256], [320, 240], [400, 400], [480, 320], [500, 500], [800, 800], [1024, 900]],
         "previous_data": {},
         "video_device_index": 0,
+        "image": "",
         "video_loop": False,
         "aperture_range": [0.1, 2],
         "aperture_default": 2,
         "mirror": False,
         "monitor": 0,
-        "snap": [],
+        "blink": [],
         "gaze_control": {0: 25, 1: 50},
         "pupil_control": {0: 25, 1: 50},
         "size_list": []
diff --git a/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/controller.py b/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/controller.py
index d20092a47..2c278f357 100644
--- a/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/controller.py
+++ b/third_party/embodiments/neuraville/feagi_agent_video_capture/feagi_agent_video_capture/controller.py
@@ -18,45 +18,49 @@
 """
 
 import cv2
-import feagi_agent.feagi_interface
 import requests
 from time import sleep
 from datetime import datetime
+from feagi_agent import pns_gateway as pns
 from feagi_agent.version import __version__
 from feagi_agent import retina as retina
 from feagi_agent import feagi_interface as feagi
 import traceback
 import threading
 import os
-import time
-import pickle
-import lz4.frame
 import screeninfo
 import mss
 import numpy
-import multiprocessing
-from PIL import Image
 
 camera_data = {"vision": {}}
 
 
 def process_video(video_path, capabilities):
-    cam = cv2.VideoCapture(video_path)
+    if capabilities["camera"]["image"] == "":
+      cam = cv2.VideoCapture(video_path)
     # cam.set(3, 320)
     # cam.set(4, 240)
     if capabilities['camera']['video_device_index'] == "monitor":
         all_monitors = screeninfo.get_monitors()  # Needs to create an IPU for this
     pixels = []
+    static_image = []
     while True:
         if capabilities['camera']['video_device_index'] != "monitor":
+          if capabilities["camera"]["image"] != "":
+            if static_image == []:
+              pixels = cv2.imread(capabilities["camera"]["image"], -1)
+              static_image = pixels
+            else:
+              pixels = static_image
+              # pixels = adjust_gamma(pixels)
+          else:
             check, pixels = cam.read()
         else:
             check = True
         if capabilities['camera']['video_device_index'] != "monitor":
             if bool(capabilities["camera"]["video_loop"]):
                 if check:
-                    sleep(0.01)
-                    # cv2.imshow("OpenCV/Numpy normal", pixels)
+                    sleep(0.05)
                 else:
                     cam.set(cv2.CAP_PROP_POS_FRAMES, 0)
         if capabilities['camera']['video_device_index'] == "monitor":
@@ -83,6 +87,13 @@ def process_video(video_path, capabilities):
     cv2.destroyAllWindows()
 
 
+def adjust_gamma(image, gamma=5.0):
+  invGamma = 1.0 / gamma
+  table = numpy.array([((i / 255.0) ** invGamma) * 255
+		for i in numpy.arange(0, 256)]).astype("uint8")
+  # apply gamma correction using the lookup table
+  return cv2.LUT(image, table)
+
 def main(feagi_auth_url, feagi_settings, agent_settings, capabilities, message_to_feagi):
     threading.Thread(target=process_video, args=(capabilities['camera']['video_device_index'],
                                                  capabilities), daemon=True).start()
@@ -116,13 +127,16 @@ def main(feagi_auth_url, feagi_settings, agent_settings, capabilities, message_t
         try:
             if camera_data['vision'] is not None:
                 raw_frame = camera_data['vision']
-            if capabilities['camera']['snap'] != []:
-                raw_frame = capabilities['camera']['snap']
+                cv2.imshow("OpenCV/Numpy normal", raw_frame) # Move to main due to Mac's restriction
+                if cv2.waitKey(10) & 0xFF == ord('q'):
+                    pass
+            if capabilities['camera']['blink'] != []:
+                raw_frame = capabilities['camera']['blink']
             previous_frame_data, rgb = retina.detect_change_edge(raw_frame, capabilities,
                                                                  capabilities['camera']["index"],
                                                                  capabilities['camera']['size_list'],
                                                                  previous_frame_data, rgb)
-            capabilities['camera']['snap'] = []
+            capabilities['camera']['blink'] = []
             capabilities, previous_genome_timestamp, feagi_settings['feagi_burst_speed'] = \
                 retina.vision_progress(capabilities, previous_genome_timestamp, feagi_opu_channel,
                                        api_address, feagi_settings, raw_frame)
@@ -130,7 +144,7 @@ def main(feagi_auth_url, feagi_settings, agent_settings, capabilities, message_t
             message_to_feagi = pns.generate_feagi_data(rgb, msg_counter, datetime.now(),
                                                        message_to_feagi)
             sleep(feagi_settings['feagi_burst_speed'])
-            pns.afferent_signaling(message_to_feagi, feagi_ipu_channel, agent_settings)
+            pns.signals_to_feagi(message_to_feagi, feagi_ipu_channel, agent_settings)
 
             message_to_feagi.clear()
             for i in rgb['camera']:
@@ -139,3 +153,4 @@ def main(feagi_auth_url, feagi_settings, agent_settings, capabilities, message_t
             # pass
             print("ERROR! : ", e)
             traceback.print_exc()
+            break
diff --git a/third_party/embodiments/neuraville/feagi_trainer/configuration.py b/third_party/embodiments/neuraville/feagi_trainer/configuration.py
new file mode 100644
index 000000000..0dd2c108a
--- /dev/null
+++ b/third_party/embodiments/neuraville/feagi_trainer/configuration.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python3
+"""
+Copyright 2016-2022 The FEAGI Authors. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+==============================================================================
+"""
+
+import os
+
+
+feagi_settings = {
+    # "feagi_auth_url": "http://127.0.0.1:9000/v1/k8/feagi_settings/auth_token",
+    "feagi_url": None,
+    "feagi_dns": None,
+    "feagi_host": os.environ.get('FEAGI_HOST_INTERNAL', "127.0.0.1"),
+    "feagi_api_port": os.environ.get('FEAGI_API_PORT', "8000")
+}
+agent_settings = {
+    "agent_data_port": "10006",
+    "agent_id": "javascript_webcam",
+    "agent_type": "embodiment",
+    'TTL': 2,
+    'last_message': 0,
+    'godot_websocket_ip': "0.0.0.0",
+    'godot_websocket_port': os.environ.get('WS_WEBCAM_PORT', "9051"),
+    'compression': True
+}
+
+capabilities = {
+    "camera": {
+        "type": "ipu",
+        "disabled": False,
+        "index": "00",
+        "iso_default": [10, 255, 130, 51, 255],
+        "iso_range": [1, 255],
+        "central_vision_allocation_percentage": [80, 60],
+        "central_vision_resolution": [64, 64],
+        "peripheral_vision_resolution": [8, 8],
+        "resolution_presets": [[8, 8], [16, 16], [32, 32], [64, 64], [80, 60], [128, 128], [160, 120],
+                               [256, 256], [320, 240], [400, 400], [480, 320], [500, 500], [800, 800], [1024, 900]],
+        "previous_data": {},
+        "video_device_index": 0,
+        "image": "",
+        "video_loop": False,
+        "aperture_range": [0.1, 2],
+        "aperture_default": 2,
+        "mirror": False,
+        "monitor": 0,
+        "blink": [],
+        "gaze_control": {0: 25, 1: 50},
+        "pupil_control": {0: 25, 1: 50},
+        "size_list": []
+    },
+    "image_reader": {
+        "loop": True,
+        "pause": 2,
+        "path": "./",
+        "test_mode": True
+    }
+}
+
+message_to_feagi = {"data": {}}
+
diff --git a/third_party/embodiments/neuraville/feagi_trainer/controller.py b/third_party/embodiments/neuraville/feagi_trainer/controller.py
new file mode 100644
index 000000000..1a472d1a6
--- /dev/null
+++ b/third_party/embodiments/neuraville/feagi_trainer/controller.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+Copyright 2016-2022 The FEAGI Authors. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+==============================================================================
+"""
+
+from time import sleep
+from datetime import datetime
+from feagi_agent import pns_gateway as pns
+from feagi_agent import retina as retina
+from feagi_agent.version import __version__
+from feagi_agent import feagi_interface as feagi
+from feagi_agent import testing_mode
+from feagi_agent import trainer as feagi_trainer
+from configuration import *
+import requests
+import os
+
+if __name__ == "__main__":
+    # Generate runtime dictionary
+    runtime_data = {"vision": {}, "current_burst_id": None, "stimulation_period": None,
+                    "feagi_state": None,
+                    "feagi_network": None}
+    print("retrying...")
+    FEAGI_FLAG = False
+    print("Waiting on FEAGI...")
+    while not FEAGI_FLAG:
+        FEAGI_FLAG = feagi.is_FEAGI_reachable(
+            os.environ.get('FEAGI_HOST_INTERNAL', feagi_settings["feagi_host"]),
+            int(os.environ.get('FEAGI_OPU_PORT', "3000")))
+        sleep(2)
+    # # # FEAGI registration # # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+    # - - - - - - - - - - - - - - - - - - #
+    feagi_settings, runtime_data, api_address, feagi_ipu_channel, feagi_opu_channel = \
+        feagi.connect_to_feagi(feagi_settings, runtime_data, agent_settings, capabilities,
+                               __version__)
+    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+    msg_counter = runtime_data["feagi_state"]['burst_counter']
+    if not pns.full_list_dimension:
+        pns.full_list_dimension = pns.fetch_full_dimensions()
+    rgb = dict()
+    rgb['camera'] = dict()
+    previous_frame_data = {}
+    response = requests.get(api_address + '/v1/feagi/genome/cortical_area/geometry')
+    size_list = retina.obtain_cortical_vision_size("00", response)  # Temporarily
+    start_timer = 0
+    raw_frame = []
+    continue_loop = True
+    total = 0
+    success = 0
+    success_rate = 0
+    while continue_loop:
+        image_obj = feagi_trainer.scan_the_folder(capabilities['image_reader']['path'])
+        for image in image_obj:
+            raw_frame = image[0]
+            name_id = image[1]
+            message_to_feagi = feagi_trainer.id_training_with_image(message_to_feagi, name_id)
+
+            # Post image into vision
+            previous_frame_data, rgb = retina.detect_change_edge(raw_frame, capabilities, "00",
+                                                                 size_list, previous_frame_data,
+                                                                 rgb)
+            capabilities, feagi_settings['feagi_burst_speed'] = retina.vision_progress(
+                capabilities, feagi_opu_channel, api_address, feagi_settings, raw_frame)
+
+            message_to_feagi = pns.generate_feagi_data(rgb, msg_counter, datetime.now(),
+                                                       message_to_feagi)
+            # Vision process ends
+            if start_timer == 0:
+                start_timer = datetime.now()
+            while capabilities['image_reader']['pause'] >= int((datetime.now() - start_timer).total_seconds()):
+                # Testing mode section
+                if capabilities['image_reader']['test_mode']:
+                    success_rate, success, total = testing_mode.mode_testing(name_id,
+                                                                             feagi_opu_channel,
+                                                                             total, success,
+                                                                             success_rate)
+                else:
+                    success_rate, success, total = 0, 0, 0
+                pns.signals_to_feagi(message_to_feagi, feagi_ipu_channel, agent_settings)
+            start_timer = 0
+            message_to_feagi.clear()
+
+        continue_loop = capabilities['image_reader']['loop']
diff --git a/third_party/embodiments/neuraville/javascript_webcam/configuration.py b/third_party/embodiments/neuraville/javascript_webcam/configuration.py
index 295499ce1..acddf88e8 100644
--- a/third_party/embodiments/neuraville/javascript_webcam/configuration.py
+++ b/third_party/embodiments/neuraville/javascript_webcam/configuration.py
@@ -54,7 +54,7 @@
         "aperture_range": [0.1, 2],
         "aperture_default": 2,
         "mirror": True,
-        "snap": [],
+        "blink": [],
         "gaze_control": {0: 25, 1: 50},
         "pupil_control": {0: 25, 1: 50},
         "size_list": []
diff --git a/third_party/embodiments/neuraville/javascript_webcam/controller.py b/third_party/embodiments/neuraville/javascript_webcam/controller.py
index b2fd9e25c..bc09d8a7c 100644
--- a/third_party/embodiments/neuraville/javascript_webcam/controller.py
+++ b/third_party/embodiments/neuraville/javascript_webcam/controller.py
@@ -65,36 +65,6 @@ async def bridge_to_godot():
 def bridge_operation():
     asyncio.run(bridge_to_godot())
 
-
-def rgba2rgb(rgba, background=(255, 255, 255)):
-    """
-    The rgba2rgb function takes an input image in the form of a numpy array with shape (row, col,
-    ch), where ch is equal to 4, indicating that the input image has an RGBA color space.
-
-    The function converts the RGBA image to an RGB image by blending the RGB channels of the
-    input image with a specified background color using the alpha channel as a weighting factor.
-    The resulting image is then returned as a numpy array with shape (row, col, 3), where ch is
-    now equal to 3, indicating that the output image is in the RGB color space.
-    """
-    row, col, channels = rgba.shape
-
-    if channels == 3:
-        return rgba
-
-    assert channels == 4, 'RGBA image has 4 channels.'
-
-    R_CHANNEL, G_CHANNEL, B_CHANNEL = background
-
-    alpha = rgba[:, :, 3] / 255.0
-
-    rgb_input = np.empty((row, col, 3), dtype='uint8')
-    rgb_input[:, :, 0] = (rgba[:, :, 0] * alpha + (1.0 - alpha) * R_CHANNEL).astype('uint8')
-    rgb_input[:, :, 1] = (rgba[:, :, 1] * alpha + (1.0 - alpha) * G_CHANNEL).astype('uint8')
-    rgb_input[:, :, 2] = (rgba[:, :, 2] * alpha + (1.0 - alpha) * B_CHANNEL).astype('uint8')
-
-    return rgb_input
-
-
 def utc_time():
     current_time = datetime.utcnow()
     return current_time
@@ -177,23 +147,23 @@ def websocket_operation():
                     raw_frame = retina.update_astype(raw_frame)
                     if capabilities["camera"]["mirror"]:
                         raw_frame = retina.flip_video(raw_frame)
-                    if capabilities['camera']['snap'] != []:
-                        raw_frame = capabilities['camera']['snap']
+                    if capabilities['camera']['blink'] != []:
+                        raw_frame = capabilities['camera']['blink']
                     previous_frame_data, rgb = retina.detect_change_edge(raw_frame, capabilities,
                                                                          capabilities['camera'][
                                                                              "index"],
                                                                          capabilities['camera'][
                                                                              'size_list'],
                                                                          previous_frame_data, rgb)
-                    capabilities['camera']['snap'] = []
-                    capabilities, previous_genome_timestamp, feagi_settings['feagi_burst_speed'] = \
-                        retina.vision_progress(capabilities, previous_genome_timestamp,
+                    capabilities['camera']['blink'] = []
+                    capabilities, feagi_settings['feagi_burst_speed'] = \
+                        retina.vision_progress(capabilities,
                                                feagi_opu_channel,
                                                api_address, feagi_settings, raw_frame)
                     if rgb:
                         message_to_feagi = pns.generate_feagi_data(rgb, msg_counter, datetime.now(),
                                                                    message_to_feagi)
-                        pns.afferent_signaling(message_to_feagi, feagi_ipu_channel, agent_settings)
+                        pns.signals_to_feagi(message_to_feagi, feagi_ipu_channel, agent_settings)
                         message_to_feagi.clear()
                         for cortical_area in rgb['camera']:
                             rgb['camera'][cortical_area].clear()
diff --git a/third_party/embodiments/neuraville/javascript_webcam/version.py b/third_party/embodiments/neuraville/javascript_webcam/version.py
index 2e4a5e5bb..958e13343 100644
--- a/third_party/embodiments/neuraville/javascript_webcam/version.py
+++ b/third_party/embodiments/neuraville/javascript_webcam/version.py
@@ -1,1 +1,1 @@
-__version__ = '01701743064'
+__version__ = '01702569344'
diff --git a/third_party/embodiments/ryze_robotics/tello/controller.py b/third_party/embodiments/ryze_robotics/tello/controller.py
index 3bb4297e7..479e90ca8 100644
--- a/third_party/embodiments/ryze_robotics/tello/controller.py
+++ b/third_party/embodiments/ryze_robotics/tello/controller.py
@@ -321,7 +321,7 @@ def action(obtained_signals, device_list, flying_flag):
                 original_message=rgb,
                 data=configuration.message_to_feagi,
                 battery=battery)
-            message_from_feagi = pns.efferent_signaling(feagi_opu_channel)
+            message_from_feagi = pns.signals_from_feagi(feagi_opu_channel)
             if message_from_feagi is not None:
                 if aptr_cortical_size is None:
                     aptr_cortical_size = pns.check_aptr(raw_aptr)
@@ -339,7 +339,7 @@ def action(obtained_signals, device_list, flying_flag):
             # Preparing to send data to FEAGI
             configuration.message_to_feagi['timestamp'] = datetime.now()
             configuration.message_to_feagi['counter'] = msg_counter
-            pns.afferent_signaling(message_to_feagi, feagi_ipu_channel, agent_settings)
+            pns.signals_to_feagi(message_to_feagi, feagi_ipu_channel, agent_settings)
             configuration.message_to_feagi.clear()
             if message_from_feagi is not None:
                 feagi_settings['feagi_burst_speed'] = message_from_feagi['burst_frequency']
diff --git a/third_party/simulators/gazebo/simulation/src/robot.py b/third_party/simulators/gazebo/simulation/src/robot.py
index 47e30e0af..e245e4352 100755
--- a/third_party/simulators/gazebo/simulation/src/robot.py
+++ b/third_party/simulators/gazebo/simulation/src/robot.py
@@ -968,7 +968,7 @@ def convert_feagi_to_english(feagi):
             except:
                 pass
             # Process OPU data received from FEAGI and pass it along
-            message_from_feagi = pns.efferent_signaling(feagi_opu_channel)
+            message_from_feagi = pns.signals_from_feagi(feagi_opu_channel)
             battery.consume_battery()
             try:
                 if aptr_cortical_size is None:


Test patch:
diff --git a/peripherals/feagi_agent_core/feagi_agent/testing_mode.py b/peripherals/feagi_agent_core/feagi_agent/testing_mode.py
new file mode 100644
index 000000000..ce3a7697c
--- /dev/null
+++ b/peripherals/feagi_agent_core/feagi_agent/testing_mode.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+Copyright 2016-2022 The FEAGI Authors. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+==============================================================================
+"""
+
+from feagi_agent import pns_gateway as pns
+
+
+def mode_testing(name_id, feagi_opu_channel, total, success, success_rate):
+    ipu_name = list(name_id.keys())[0]
+    message_from_feagi = pns.signals_from_feagi(feagi_opu_channel)
+    if message_from_feagi is not None:
+        data = pns.detect_ID_data(message_from_feagi)
+        for key in data:
+            print("COMPARING WITH ", key, " and ", ipu_name)
+            total += 1
+            if key == ipu_name:
+                success += 1
+            success_rate = (success / total) * 100
+            print("success rate: ", success_rate, " success: ", success, " and total: ", total)
+    return success_rate, success, total