aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Ge <jerry.ge@arm.com>2024-06-14 20:09:53 +0000
committerJerry Ge <jerry.ge@arm.com>2024-06-18 21:15:16 +0000
commit895822576f97ca9470709378e7ff122ccbea5d00 (patch)
tree373e54315f2bf2e27e78cb02378634f2321a3c3b
parentca6fa5fbc4af9f486d87d36c7baeff924edd0534 (diff)
downloadserialization_lib-895822576f97ca9470709378e7ff122ccbea5d00.tar.gz
Enable serialization_lib to load tosa schema directly from a header
- Implement convert_schema_to_header.py to convert tosa schema file to tosa_schema.h - Enable loading tosa schema directly from a string from the header file Signed-off-by: Jerry Ge <jerry.ge@arm.com> Change-Id: Iafcccf2a03fd8968acd2d12c0081e85c10a91ef4
-rw-r--r--.pre-commit-config.yaml2
-rw-r--r--CMakeLists.txt7
-rw-r--r--include/tosa_schema.h355
-rw-r--r--include/tosa_serialization_handler.h1
-rwxr-xr-xregenerate_headers.sh1
-rw-r--r--schema/convert_schema_to_header.py55
-rw-r--r--src/tosa_serialization_handler.cpp16
7 files changed, 435 insertions, 2 deletions
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3afbd2d..a0886e9 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -37,7 +37,7 @@ repos:
hooks:
- id: clang-format
name: clang-format
- exclude: tosa_generated.h|build|third_party
+ exclude: tosa_generated.h|build|third_party|tosa_schema.h
language: system
entry: clang-format
types: ["c++"]
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1248d86..4adde30 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -112,3 +112,10 @@ install(EXPORT TosaSerializationLibTargets
NAMESPACE tosa::
DESTINATION ${TOSA_SERIALIZATION_LIB_CMAKE_DIR}
)
+
+# Run the following script to generate tosa schema as a C/C++ header file
+find_package(Python COMPONENTS Interpreter REQUIRED)
+execute_process(
+ COMMAND ${Python_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/schema/convert_schema_to_header.py"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/schema"
+)
diff --git a/include/tosa_schema.h b/include/tosa_schema.h
new file mode 100644
index 0000000..0d645de
--- /dev/null
+++ b/include/tosa_schema.h
@@ -0,0 +1,355 @@
+const char TOSA_SCHEMA[] = {
+0x0a, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63,
+0x29, 0x20, 0x32, 0x30, 0x32, 0x30, 0x2d, 0x32, 0x30, 0x32, 0x34, 0x2c, 0x20, 0x41, 0x52, 0x4d,
+0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x2f, 0x2f, 0x0a, 0x2f, 0x2f, 0x20,
+0x20, 0x20, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65,
+0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63,
+0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x2e,
+0x30, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x22, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22,
+0x29, 0x3b, 0x0a, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79,
+0x20, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69,
+0x6c, 0x65, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6d,
+0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65,
+0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20,
+0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61,
+0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63,
+0x65, 0x6e, 0x73, 0x65, 0x20, 0x61, 0x74, 0x0a, 0x2f, 0x2f, 0x0a, 0x2f, 0x2f, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65,
+0x6e, 0x73, 0x65, 0x73, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2d, 0x32, 0x2e, 0x30,
+0x0a, 0x2f, 0x2f, 0x0a, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x55, 0x6e, 0x6c, 0x65, 0x73, 0x73,
+0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x70, 0x70,
+0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6c, 0x61, 0x77, 0x20, 0x6f, 0x72, 0x20, 0x61,
+0x67, 0x72, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x72, 0x69, 0x74,
+0x69, 0x6e, 0x67, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0a, 0x2f, 0x2f,
+0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20,
+0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73,
+0x65, 0x20, 0x69, 0x73, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64,
+0x20, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, 0x22, 0x20, 0x42,
+0x41, 0x53, 0x49, 0x53, 0x2c, 0x0a, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x57, 0x49, 0x54, 0x48,
+0x4f, 0x55, 0x54, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, 0x20, 0x4f,
+0x52, 0x20, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x20, 0x4f, 0x46, 0x20,
+0x41, 0x4e, 0x59, 0x20, 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72,
+0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c,
+0x69, 0x65, 0x64, 0x2e, 0x0a, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x53, 0x65, 0x65, 0x20, 0x74,
+0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74,
+0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6c, 0x61, 0x6e, 0x67,
+0x75, 0x61, 0x67, 0x65, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x70,
+0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x2f,
+0x2f, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e,
+0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x74,
+0x6f, 0x73, 0x61, 0x3b, 0x0a, 0x0a, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f,
+0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
+0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69,
+0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x22, 0x54, 0x4f, 0x53, 0x41, 0x22,
+0x3b, 0x0a, 0x2f, 0x2f, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74,
+0x65, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x65,
+0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x74, 0x6f, 0x73, 0x61, 0x22, 0x3b,
+0x0a, 0x0a, 0x2f, 0x2f, 0x20, 0x4e, 0x4f, 0x54, 0x45, 0x3a, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x76,
+0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74,
+0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64,
+0x20, 0x62, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x0a, 0x2f, 0x2f, 0x20, 0x61, 0x74,
+0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+0x6c, 0x69, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f,
+0x20, 0x6b, 0x65, 0x65, 0x70, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x73, 0x74, 0x61,
+0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x44, 0x54, 0x79, 0x70, 0x65,
+0x3a, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x55, 0x4e, 0x4b, 0x4e,
+0x4f, 0x57, 0x4e, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x42, 0x4f, 0x4f, 0x4c, 0x2c,
+0x0a, 0x20, 0x20, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x2c, 0x0a, 0x20, 0x20, 0x49, 0x4e, 0x54, 0x34,
+0x2c, 0x0a, 0x20, 0x20, 0x49, 0x4e, 0x54, 0x38, 0x2c, 0x0a, 0x20, 0x20, 0x49, 0x4e, 0x54, 0x31,
+0x36, 0x2c, 0x0a, 0x20, 0x20, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x2c, 0x0a, 0x20, 0x20, 0x49, 0x4e,
+0x54, 0x34, 0x38, 0x2c, 0x0a, 0x20, 0x20, 0x46, 0x50, 0x33, 0x32, 0x2c, 0x0a, 0x20, 0x20, 0x55,
+0x49, 0x4e, 0x54, 0x31, 0x36, 0x2c, 0x0a, 0x20, 0x20, 0x46, 0x50, 0x31, 0x36, 0x2c, 0x0a, 0x20,
+0x20, 0x42, 0x46, 0x31, 0x36, 0x2c, 0x0a, 0x20, 0x20, 0x53, 0x48, 0x41, 0x50, 0x45, 0x2c, 0x0a,
+0x20, 0x20, 0x46, 0x50, 0x38, 0x45, 0x34, 0x4d, 0x33, 0x2c, 0x0a, 0x20, 0x20, 0x46, 0x50, 0x38,
+0x45, 0x35, 0x4d, 0x32, 0x2c, 0x0a, 0x7d, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x52, 0x65,
+0x73, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x20,
+0x7b, 0x0a, 0x20, 0x20, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x20, 0x3d, 0x20, 0x30, 0x2c,
+0x0a, 0x20, 0x20, 0x4e, 0x45, 0x41, 0x52, 0x45, 0x53, 0x54, 0x2c, 0x0a, 0x20, 0x20, 0x42, 0x49,
+0x4c, 0x49, 0x4e, 0x45, 0x41, 0x52, 0x2c, 0x0a, 0x7d, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x20,
+0x4f, 0x70, 0x3a, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x55, 0x4e,
+0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x41, 0x52, 0x47,
+0x4d, 0x41, 0x58, 0x2c, 0x0a, 0x20, 0x20, 0x41, 0x56, 0x47, 0x5f, 0x50, 0x4f, 0x4f, 0x4c, 0x32,
+0x44, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x56, 0x32, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x43,
+0x4f, 0x4e, 0x56, 0x33, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x44, 0x45, 0x50, 0x54, 0x48, 0x57, 0x49,
+0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x32, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x46, 0x55, 0x4c,
+0x4c, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x2c, 0x0a, 0x20, 0x20,
+0x4d, 0x41, 0x54, 0x4d, 0x55, 0x4c, 0x2c, 0x0a, 0x20, 0x20, 0x4d, 0x41, 0x58, 0x5f, 0x50, 0x4f,
+0x4f, 0x4c, 0x32, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x50, 0x4f, 0x53,
+0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x32, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x4c, 0x41, 0x4d,
+0x50, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x2c, 0x0a, 0x20,
+0x20, 0x53, 0x49, 0x47, 0x4d, 0x4f, 0x49, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x54, 0x41, 0x4e, 0x48,
+0x2c, 0x0a, 0x20, 0x20, 0x41, 0x44, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x41, 0x52, 0x49, 0x54, 0x48,
+0x4d, 0x45, 0x54, 0x49, 0x43, 0x5f, 0x52, 0x49, 0x47, 0x48, 0x54, 0x5f, 0x53, 0x48, 0x49, 0x46,
+0x54, 0x2c, 0x0a, 0x20, 0x20, 0x42, 0x49, 0x54, 0x57, 0x49, 0x53, 0x45, 0x5f, 0x41, 0x4e, 0x44,
+0x2c, 0x0a, 0x20, 0x20, 0x42, 0x49, 0x54, 0x57, 0x49, 0x53, 0x45, 0x5f, 0x4f, 0x52, 0x2c, 0x0a,
+0x20, 0x20, 0x42, 0x49, 0x54, 0x57, 0x49, 0x53, 0x45, 0x5f, 0x58, 0x4f, 0x52, 0x2c, 0x0a, 0x20,
+0x20, 0x49, 0x4e, 0x54, 0x44, 0x49, 0x56, 0x2c, 0x0a, 0x20, 0x20, 0x4c, 0x4f, 0x47, 0x49, 0x43,
+0x41, 0x4c, 0x5f, 0x41, 0x4e, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x4c, 0x4f, 0x47, 0x49, 0x43, 0x41,
+0x4c, 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x5f, 0x53, 0x48, 0x49, 0x46, 0x54, 0x2c, 0x0a, 0x20, 0x20,
+0x4c, 0x4f, 0x47, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x52, 0x49, 0x47, 0x48, 0x54, 0x5f, 0x53, 0x48,
+0x49, 0x46, 0x54, 0x2c, 0x0a, 0x20, 0x20, 0x4c, 0x4f, 0x47, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x4f,
+0x52, 0x2c, 0x0a, 0x20, 0x20, 0x4c, 0x4f, 0x47, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x58, 0x4f, 0x52,
+0x2c, 0x0a, 0x20, 0x20, 0x4d, 0x41, 0x58, 0x49, 0x4d, 0x55, 0x4d, 0x2c, 0x0a, 0x20, 0x20, 0x4d,
+0x49, 0x4e, 0x49, 0x4d, 0x55, 0x4d, 0x2c, 0x0a, 0x20, 0x20, 0x4d, 0x55, 0x4c, 0x2c, 0x0a, 0x20,
+0x20, 0x50, 0x4f, 0x57, 0x2c, 0x0a, 0x20, 0x20, 0x53, 0x55, 0x42, 0x2c, 0x0a, 0x20, 0x20, 0x54,
+0x41, 0x42, 0x4c, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x41, 0x42, 0x53, 0x2c, 0x0a, 0x20, 0x20, 0x42,
+0x49, 0x54, 0x57, 0x49, 0x53, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x45,
+0x49, 0x4c, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x4c, 0x5a, 0x2c, 0x0a, 0x20, 0x20, 0x45, 0x58, 0x50,
+0x2c, 0x0a, 0x20, 0x20, 0x46, 0x4c, 0x4f, 0x4f, 0x52, 0x2c, 0x0a, 0x20, 0x20, 0x4c, 0x4f, 0x47,
+0x2c, 0x0a, 0x20, 0x20, 0x4c, 0x4f, 0x47, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x4e, 0x4f, 0x54, 0x2c,
+0x0a, 0x20, 0x20, 0x4e, 0x45, 0x47, 0x41, 0x54, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x45, 0x43,
+0x49, 0x50, 0x52, 0x4f, 0x43, 0x41, 0x4c, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x53, 0x51, 0x52, 0x54,
+0x2c, 0x0a, 0x20, 0x20, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x2c, 0x0a, 0x20, 0x20, 0x45, 0x51,
+0x55, 0x41, 0x4c, 0x2c, 0x0a, 0x20, 0x20, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x2c, 0x0a,
+0x20, 0x20, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x2c,
+0x0a, 0x20, 0x20, 0x52, 0x45, 0x44, 0x55, 0x43, 0x45, 0x5f, 0x41, 0x4e, 0x59, 0x2c, 0x0a, 0x20,
+0x20, 0x52, 0x45, 0x44, 0x55, 0x43, 0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x2c, 0x0a, 0x20, 0x20, 0x52,
+0x45, 0x44, 0x55, 0x43, 0x45, 0x5f, 0x4d, 0x41, 0x58, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x45, 0x44,
+0x55, 0x43, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x45, 0x44, 0x55, 0x43,
+0x45, 0x5f, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x45, 0x44,
+0x55, 0x43, 0x45, 0x5f, 0x53, 0x55, 0x4d, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x43, 0x41,
+0x54, 0x2c, 0x0a, 0x20, 0x20, 0x50, 0x41, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x45, 0x53, 0x48,
+0x41, 0x50, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x2c, 0x0a,
+0x20, 0x20, 0x53, 0x4c, 0x49, 0x43, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x54, 0x49, 0x4c, 0x45, 0x2c,
+0x0a, 0x20, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x50, 0x4f, 0x53, 0x45, 0x2c, 0x0a, 0x20, 0x20,
+0x47, 0x41, 0x54, 0x48, 0x45, 0x52, 0x2c, 0x0a, 0x20, 0x20, 0x53, 0x43, 0x41, 0x54, 0x54, 0x45,
+0x52, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x45, 0x53, 0x49, 0x5a, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x43,
+0x41, 0x53, 0x54, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x45, 0x53, 0x43, 0x41, 0x4c, 0x45, 0x2c, 0x0a,
+0x20, 0x20, 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x2c, 0x0a, 0x20, 0x20, 0x49, 0x44, 0x45, 0x4e, 0x54,
+0x49, 0x54, 0x59, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x2c, 0x0a, 0x20,
+0x20, 0x43, 0x4f, 0x4e, 0x44, 0x5f, 0x49, 0x46, 0x2c, 0x0a, 0x20, 0x20, 0x57, 0x48, 0x49, 0x4c,
+0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x2c, 0x0a, 0x20, 0x20, 0x46, 0x46, 0x54, 0x32, 0x44, 0x2c,
+0x0a, 0x20, 0x20, 0x52, 0x46, 0x46, 0x54, 0x32, 0x44, 0x2c, 0x0a, 0x20, 0x20, 0x45, 0x52, 0x46,
+0x2c, 0x0a, 0x20, 0x20, 0x44, 0x49, 0x4d, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x53, 0x54,
+0x5f, 0x53, 0x48, 0x41, 0x50, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x43, 0x41, 0x54,
+0x5f, 0x53, 0x48, 0x41, 0x50, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x41, 0x44, 0x44, 0x5f, 0x53, 0x48,
+0x41, 0x50, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x53, 0x55, 0x42, 0x5f, 0x53, 0x48, 0x41, 0x50, 0x45,
+0x2c, 0x0a, 0x20, 0x20, 0x4d, 0x55, 0x4c, 0x5f, 0x53, 0x48, 0x41, 0x50, 0x45, 0x2c, 0x0a, 0x20,
+0x20, 0x44, 0x49, 0x56, 0x5f, 0x53, 0x48, 0x41, 0x50, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x4f,
+0x53, 0x2c, 0x0a, 0x20, 0x20, 0x53, 0x49, 0x4e, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x41, 0x53, 0x54,
+0x5f, 0x53, 0x54, 0x4f, 0x43, 0x48, 0x41, 0x53, 0x54, 0x49, 0x43, 0x2c, 0x0a, 0x7d, 0x0a, 0x0a,
+0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+0x7b, 0x0a, 0x20, 0x20, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+0x65, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x43,
+0x6f, 0x6e, 0x76, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20,
+0x50, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20,
+0x41, 0x78, 0x69, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20,
+0x20, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+0x2c, 0x0a, 0x20, 0x20, 0x43, 0x6c, 0x61, 0x6d, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x52, 0x65, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x41, 0x74, 0x74,
+0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x4d, 0x75, 0x6c, 0x41, 0x74, 0x74,
+0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d,
+0x65, 0x74, 0x69, 0x63, 0x52, 0x69, 0x67, 0x68, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x41, 0x74,
+0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x64, 0x49,
+0x66, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x57, 0x68,
+0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+0x2c, 0x0a, 0x20, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x74, 0x74,
+0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41,
+0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x4d, 0x61, 0x74, 0x4d,
+0x75, 0x6c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x46,
+0x75, 0x6c, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74,
+0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x65,
+0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x43, 0x75, 0x73,
+0x74, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20,
+0x46, 0x46, 0x54, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x20, 0x20,
+0x52, 0x46, 0x46, 0x54, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x0a, 0x7d,
+0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x74, 0x74, 0x72,
+0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x3a, 0x20, 0x5b,
+0x69, 0x6e, 0x74, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c,
+0x3a, 0x20, 0x5b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x73, 0x74, 0x72,
+0x69, 0x64, 0x65, 0x3a, 0x20, 0x5b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20,
+0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b,
+0x0a, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e,
+0x74, 0x33, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x61, 0x63, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x3a,
+0x20, 0x44, 0x54, 0x79, 0x70, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65,
+0x20, 0x43, 0x6f, 0x6e, 0x76, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b,
+0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x3a, 0x20, 0x5b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5d, 0x3b,
+0x0a, 0x20, 0x20, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x3a, 0x20, 0x5b, 0x69, 0x6e, 0x74, 0x33,
+0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x64, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20,
+0x5b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74,
+0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x77, 0x65,
+0x69, 0x67, 0x68, 0x74, 0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a,
+0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x62,
+0x6f, 0x6f, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x61, 0x63, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x3a,
+0x20, 0x44, 0x54, 0x79, 0x70, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65,
+0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x41, 0x74,
+0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x5f,
+0x70, 0x61, 0x64, 0x3a, 0x20, 0x5b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20,
+0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x3a, 0x20, 0x5b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5d, 0x3b,
+0x0a, 0x20, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e, 0x74,
+0x33, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x7a, 0x70, 0x3a,
+0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f,
+0x62, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x61,
+0x63, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x44, 0x54, 0x79, 0x70, 0x65, 0x3b, 0x0a,
+0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x50, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72,
+0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x5f, 0x63, 0x6f,
+0x6e, 0x73, 0x74, 0x3a, 0x20, 0x5b, 0x75, 0x62, 0x79, 0x74, 0x65, 0x5d, 0x20, 0x28, 0x66, 0x6f,
+0x72, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x38, 0x29, 0x3b, 0x0a, 0x7d,
+0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x41, 0x78, 0x69, 0x73, 0x41, 0x74, 0x74, 0x72,
+0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x78, 0x69, 0x73, 0x3a, 0x20,
+0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20,
+0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+0x7b, 0x0a, 0x20, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x3a, 0x20, 0x5b, 0x69, 0x6e, 0x74, 0x31,
+0x36, 0x5d, 0x20, 0x28, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x29, 0x3b,
+0x0a, 0x20, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x20, 0x5b, 0x69, 0x6e, 0x74, 0x31,
+0x36, 0x5d, 0x20, 0x28, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x29, 0x3b,
+0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x5b, 0x69, 0x6e, 0x74, 0x31,
+0x36, 0x5d, 0x20, 0x28, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x29, 0x3b,
+0x0a, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3a, 0x20, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x4d,
+0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x43, 0x6c,
+0x61, 0x6d, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20,
+0x20, 0x6d, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x3a, 0x20, 0x5b, 0x75, 0x62, 0x79, 0x74, 0x65,
+0x5d, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20,
+0x38, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c, 0x3a, 0x20, 0x5b,
+0x75, 0x62, 0x79, 0x74, 0x65, 0x5d, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x6c,
+0x69, 0x67, 0x6e, 0x3a, 0x20, 0x38, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c,
+0x65, 0x20, 0x52, 0x65, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x7a, 0x70, 0x3a,
+0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74,
+0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x73, 0x63,
+0x61, 0x6c, 0x65, 0x33, 0x32, 0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x64,
+0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x62, 0x6f, 0x6f,
+0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
+0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f,
+0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b, 0x0a,
+0x20, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65,
+0x64, 0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c,
+0x65, 0x20, 0x4d, 0x75, 0x6c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b,
+0x0a, 0x20, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b,
+0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d,
+0x65, 0x74, 0x69, 0x63, 0x52, 0x69, 0x67, 0x68, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x41, 0x74,
+0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e,
+0x64, 0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c,
+0x65, 0x20, 0x43, 0x6f, 0x6e, 0x64, 0x49, 0x66, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68,
+0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x0a, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65,
+0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x0a,
+0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f,
+0x6f, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20,
+0x63, 0x6f, 0x6e, 0x64, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69,
+0x6e, 0x67, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68,
+0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62,
+0x6c, 0x65, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x74, 0x74, 0x72,
+0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x73, 0x3a,
+0x20, 0x5b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62,
+0x6c, 0x65, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3a, 0x20, 0x5b, 0x69, 0x6e,
+0x74, 0x31, 0x36, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x4d,
+0x61, 0x74, 0x4d, 0x75, 0x6c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b,
+0x0a, 0x20, 0x20, 0x61, 0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a,
+0x20, 0x20, 0x62, 0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a, 0x7d,
+0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x79, 0x43, 0x6f, 0x6e,
+0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+0x7b, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e,
+0x74, 0x33, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x7a, 0x70,
+0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c,
+0x65, 0x20, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x31, 0x5f, 0x7a, 0x70, 0x3a,
+0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74,
+0x5f, 0x7a, 0x70, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74,
+0x61, 0x62, 0x6c, 0x65, 0x20, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69,
+0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f,
+0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x0a, 0x20,
+0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x73, 0x74, 0x72,
+0x69, 0x6e, 0x67, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x73, 0x3a, 0x5b, 0x75, 0x62, 0x79,
+0x74, 0x65, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x46, 0x46,
+0x54, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x69,
+0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b, 0x0a, 0x20, 0x20,
+0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x62, 0x6f, 0x6f,
+0x6c, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x52, 0x46, 0x46, 0x54,
+0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x6c, 0x6f,
+0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b,
+0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+0x6e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x3a, 0x20, 0x69, 0x6e,
+0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x69, 0x6e,
+0x6f, 0x72, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0x3b, 0x0a,
+0x20, 0x20, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x20,
+0x3d, 0x20, 0x2d, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x64, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x20,
+0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a,
+0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x54, 0x6f, 0x73, 0x61, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72,
+0x20, 0x7b, 0x0a, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f,
+0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x2c, 0x20, 0x75, 0x73,
+0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x64,
+0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x0a, 0x20, 0x20, 0x73, 0x68, 0x61, 0x70,
+0x65, 0x3a, 0x5b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5d, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f,
+0x20, 0x73, 0x68, 0x61, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65,
+0x6e, 0x73, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x44, 0x54, 0x79, 0x70,
+0x65, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x64, 0x61, 0x74, 0x61,
+0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x6e,
+0x73, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x20, 0x5b, 0x75, 0x62, 0x79,
+0x74, 0x65, 0x5d, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+0x3a, 0x20, 0x38, 0x29, 0x3b, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x61, 0x77, 0x20, 0x64,
+0x61, 0x74, 0x61, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74, 0x27,
+0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x6e,
+0x73, 0x6f, 0x72, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x3a,
+0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x74,
+0x68, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74,
+0x65, 0x6e, 0x73, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x69, 0x73, 0x5f, 0x75, 0x6e, 0x72, 0x61, 0x6e,
+0x6b, 0x65, 0x64, 0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x77, 0x68, 0x65,
+0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20,
+0x75, 0x6e, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x0a,
+0x20, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3a,
+0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20,
+0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+0x74, 0x65, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x54, 0x6f, 0x73, 0x61,
+0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x6f, 0x70, 0x3a,
+0x4f, 0x70, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
+0x6f, 0x72, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x0a, 0x20, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+0x75, 0x74, 0x65, 0x3a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3b, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x72,
+0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72,
+0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x70,
+0x75, 0x74, 0x73, 0x3a, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x3b, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f,
+0x66, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x6e,
+0x61, 0x6d, 0x65, 0x73, 0x0a, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x3a, 0x5b,
+0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x74, 0x70,
+0x75, 0x74, 0x20, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x0a,
+0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x54, 0x6f, 0x73, 0x61, 0x42, 0x61, 0x73,
+0x69, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x62,
+0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x20, 0x20, 0x6f, 0x70, 0x65, 0x72,
+0x61, 0x74, 0x6f, 0x72, 0x73, 0x3a, 0x5b, 0x54, 0x6f, 0x73, 0x61, 0x4f, 0x70, 0x65, 0x72, 0x61,
+0x74, 0x6f, 0x72, 0x5d, 0x3b, 0x20, 0x2f, 0x2f, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f,
+0x72, 0x73, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x0a, 0x20, 0x20, 0x74, 0x65, 0x6e, 0x73, 0x6f,
+0x72, 0x73, 0x3a, 0x5b, 0x54, 0x6f, 0x73, 0x61, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x5d, 0x3b,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x20,
+0x61, 0x72, 0x72, 0x61, 0x79, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x3a, 0x5b,
+0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x67, 0x72, 0x61,
+0x70, 0x68, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x0a, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x70,
+0x75, 0x74, 0x73, 0x3a, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x3b, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66,
+0x20, 0x67, 0x72, 0x61, 0x70, 0x68, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x0a, 0x7d,
+0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x54, 0x6f, 0x73, 0x61, 0x52, 0x65, 0x67, 0x69,
+0x6f, 0x6e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x73, 0x74, 0x72, 0x69,
+0x6e, 0x67, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x2f, 0x2f, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x67, 0x69, 0x6f,
+0x6e, 0x0a, 0x20, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x3a, 0x5b, 0x54, 0x6f, 0x73, 0x61,
+0x42, 0x61, 0x73, 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5d, 0x3b, 0x20, 0x2f, 0x2f, 0x20,
+0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x20, 0x61, 0x72, 0x72,
+0x61, 0x79, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x54, 0x6f, 0x73, 0x61,
+0x47, 0x72, 0x61, 0x70, 0x68, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
+0x6e, 0x3a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69,
+0x72, 0x65, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x3a,
+0x5b, 0x54, 0x6f, 0x73, 0x61, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5d, 0x3b, 0x20, 0x20, 0x20,
+0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61,
+0x72, 0x72, 0x61, 0x79, 0x0a, 0x7d, 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x74, 0x79, 0x70,
+0x65, 0x20, 0x54, 0x6f, 0x73, 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x3b, 0x0a, 0x00 };
+
+const size_t TOSA_SCHEMA_SIZE = 5629;
diff --git a/include/tosa_serialization_handler.h b/include/tosa_serialization_handler.h
index c09a47d..5b3882e 100644
--- a/include/tosa_serialization_handler.h
+++ b/include/tosa_serialization_handler.h
@@ -410,6 +410,7 @@ public:
tosa_err_t SaveFileJson(const char* filename);
tosa_err_t SaveFileTosaFlatbuffer(const char* filename);
tosa_err_t LoadFileSchema(const char* schema_filename);
+ tosa_err_t LoadTosaSchema();
// data format conversion. little-endian.
static tosa_err_t ConvertBF16toU8(const std::vector<bf16>& in, std::vector<uint8_t>& out);
diff --git a/regenerate_headers.sh b/regenerate_headers.sh
index 9fef94b..f01bd76 100755
--- a/regenerate_headers.sh
+++ b/regenerate_headers.sh
@@ -34,4 +34,3 @@ popd > /dev/null
pushd python/ > /dev/null
../third_party/flatbuffers/flatc --python ../schema/tosa.fbs
popd > /dev/null
-
diff --git a/schema/convert_schema_to_header.py b/schema/convert_schema_to_header.py
new file mode 100644
index 0000000..99886a6
--- /dev/null
+++ b/schema/convert_schema_to_header.py
@@ -0,0 +1,55 @@
+# Copyright (c) 2024, ARM Limited.
+#
+# 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.
+
+# This short python script converts the tosa flatbuffer schema file to a C/C++ header
+
+with open("tosa.fbs", "rb") as schema_file:
+ schema_string = schema_file.read().hex()
+
+ # add trailing 00
+ schema_string += "00"
+
+ # split into bytes and add 0x for each byte
+ bytes_list = [schema_string[i : i + 2] for i in range(0, len(schema_string), 2)]
+ for i in range(len(bytes_list)):
+ bytes_list[i] = " 0x" + bytes_list[i]
+
+ # construct the string with , delimiter
+ schema_string_splitted = ",".join(bytes_list)
+
+ # wrap the long string into 16 bytes per new line
+ # each byte is of length 6 including the leading white space. e.g, " 0x1a,"
+ # 6*16 = 96
+ byte_group_16 = [
+ schema_string_splitted[i : i + 96]
+ for i in range(0, len(schema_string_splitted), 96)
+ ]
+ for i in range(len(byte_group_16)):
+ # remove leading whitespace for each 16 bytes group string
+ byte_group_16[i] = byte_group_16[i][1:]
+ # glue back to the long string with new lines
+ schema_string_splitted_wrapped = "\n".join(byte_group_16)
+
+ # construct the final long string
+ var_name = "const char TOSA_SCHEMA[] = {\n"
+ schema_string_splitted_wrapped = (
+ var_name + schema_string_splitted_wrapped + " };\n\n"
+ )
+ schema_size_var = "const size_t TOSA_SCHEMA_SIZE = "
+ schema_size_string = schema_size_var + str(len(bytes_list) - 1) + ";\n"
+ schema_file_string = schema_string_splitted_wrapped + schema_size_string
+
+ # save to a header file
+ with open("../include/tosa_schema.h", "w") as schema_header_file:
+ schema_header_file.write(schema_file_string)
diff --git a/src/tosa_serialization_handler.cpp b/src/tosa_serialization_handler.cpp
index 06c0431..eb71b69 100644
--- a/src/tosa_serialization_handler.cpp
+++ b/src/tosa_serialization_handler.cpp
@@ -15,6 +15,7 @@
#include "tosa_serialization_handler.h"
#include "half.hpp"
+#include "tosa_schema.h"
#include <iostream>
using namespace tosa;
@@ -235,6 +236,21 @@ tosa_err_t TosaSerializationHandler::LoadFileSchema(const char* schema_filename)
return TOSA_OK;
}
+tosa_err_t TosaSerializationHandler::LoadTosaSchema()
+{
+ bool ok;
+ ok = _parser.Parse(TOSA_SCHEMA);
+
+ if (!ok)
+ {
+ printf("Error parsing ISA schema contents \n");
+ return TOSA_FILE_ERROR;
+ }
+
+ _schemaLoaded = true;
+ return TOSA_OK;
+}
+
tosa_err_t TosaSerializationHandler::LoadFileJson(const char* filename)
{
std::string jsonfile;