From 82dddb5de52c45d155899e4aa8280b752866c687 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 12 Apr 2023 14:30:51 +0400 Subject: [PATCH 1/2] fix: python plugin bindings --- packages/schema/bind/src/bindings/python/plugin/index.ts | 8 +++----- .../python/plugin/templates/__init__-py.mustache | 1 + .../bindings/python/plugin/templates/module-py.mustache | 3 ++- .../bindings/python/plugin/templates/types-py.mustache | 9 +++++---- .../python/plugin/templates/wrap_info-py.mustache | 6 +++--- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/schema/bind/src/bindings/python/plugin/index.ts b/packages/schema/bind/src/bindings/python/plugin/index.ts index c6111472dc..f9efa5c451 100644 --- a/packages/schema/bind/src/bindings/python/plugin/index.ts +++ b/packages/schema/bind/src/bindings/python/plugin/index.ts @@ -54,11 +54,9 @@ export const generateBinding: GenerateBindingFn = ( name: options.projectName, type: "plugin", version: latestWrapManifestVersion, - abi: JSON.stringify( - sort((options.abi as unknown) as Record), - null, - 2 - ), + abi: Buffer.from( + JSON.stringify(sort((options.abi as unknown) as Record)) + ).toString("base64"), }; output.entries = renderTemplates(templatePath(""), { ...abi, manifest }, {}); diff --git a/packages/schema/bind/src/bindings/python/plugin/templates/__init__-py.mustache b/packages/schema/bind/src/bindings/python/plugin/templates/__init__-py.mustache index 69d13ff304..d2ad6b3725 100644 --- a/packages/schema/bind/src/bindings/python/plugin/templates/__init__-py.mustache +++ b/packages/schema/bind/src/bindings/python/plugin/templates/__init__-py.mustache @@ -1,4 +1,5 @@ # NOTE: This is an auto-generated file. All modifications will be overwritten. +# type: ignore from .types import * from .module import * diff --git a/packages/schema/bind/src/bindings/python/plugin/templates/module-py.mustache b/packages/schema/bind/src/bindings/python/plugin/templates/module-py.mustache index b9ee3ffcd6..00eb1cb498 100644 --- a/packages/schema/bind/src/bindings/python/plugin/templates/module-py.mustache +++ b/packages/schema/bind/src/bindings/python/plugin/templates/module-py.mustache @@ -1,4 +1,5 @@ # NOTE: This is an auto-generated file. All modifications will be overwritten. +# type: ignore from __future__ import annotations from abc import abstractmethod @@ -38,7 +39,7 @@ class Module(Generic[TConfig], PluginModule[TConfig]): {{#moduleType}} {{#methods}} @abstractmethod - def {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}( + async def {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}( self, args: Args{{#toUpper}}{{name}}{{/toUpper}}, client: InvokerClient[UriPackageOrWrapper], diff --git a/packages/schema/bind/src/bindings/python/plugin/templates/types-py.mustache b/packages/schema/bind/src/bindings/python/plugin/templates/types-py.mustache index c3c092b313..24767f5a46 100644 --- a/packages/schema/bind/src/bindings/python/plugin/templates/types-py.mustache +++ b/packages/schema/bind/src/bindings/python/plugin/templates/types-py.mustache @@ -1,4 +1,5 @@ # NOTE: This is an auto-generated file. All modifications will be overwritten. +# type: ignore from __future__ import annotations from typing import TypedDict, Optional @@ -36,12 +37,12 @@ from polywrap_msgpack import GenericMap {{#enumTypes}} class {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}}(IntEnum): {{#constants}} - {{#detectKeyword}}{{.}}{{/detectKeyword}} = auto() - 1, "{{.}}" + {{#detectKeyword}}{{.}}{{/detectKeyword}} = auto(), "{{.}}" {{/constants}} def __new__(cls, value: int, *aliases: str): obj = int.__new__(cls) - obj._value_ = value + obj._value_ = value - 1 for alias in aliases: cls._value2member_map_[alias] = obj return obj @@ -68,12 +69,12 @@ class {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}}(IntEn # URI: "{{uri}}" # class {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}}(IntEnum): {{#constants}} - {{#detectKeyword}}{{.}}{{/detectKeyword}} = auto() - 1 + {{#detectKeyword}}{{.}}{{/detectKeyword}} = auto() {{/constants}} def __new__(cls, value: int, *aliases: str): obj = int.__new__(cls) - obj._value_ = value + obj._value_ = value - 1 for alias in aliases: cls._value2member_map_[alias] = obj return obj diff --git a/packages/schema/bind/src/bindings/python/plugin/templates/wrap_info-py.mustache b/packages/schema/bind/src/bindings/python/plugin/templates/wrap_info-py.mustache index 42a16ac717..27c2b77ff3 100644 --- a/packages/schema/bind/src/bindings/python/plugin/templates/wrap_info-py.mustache +++ b/packages/schema/bind/src/bindings/python/plugin/templates/wrap_info-py.mustache @@ -1,14 +1,14 @@ # NOTE: This is an auto-generated file. All modifications will be overwritten. +# type: ignore from __future__ import annotations import json +from base64 import b64decode from polywrap_manifest import WrapManifest {{#manifest}} -abi = json.loads(""" -{{abi}} -""") +abi = json.loads(b64decode("{{abi}}").decode("utf-8")) manifest = WrapManifest.parse_obj({ "name": "{{name}}", From f5faf8db75f9e9ae950c69199188c3b79d58a095 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 12 Apr 2023 14:37:44 +0400 Subject: [PATCH 2/2] fix: binding tests --- .../bind/sanity/output/plugin-py/__init__.py | 1 + .../bind/sanity/output/plugin-py/module.py | 9 +- .../bind/sanity/output/plugin-py/types.py | 25 +- .../bind/sanity/output/plugin-py/wrap_info.py | 2309 +---------------- 4 files changed, 22 insertions(+), 2322 deletions(-) diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-py/__init__.py b/packages/test-cases/cases/bind/sanity/output/plugin-py/__init__.py index 69d13ff304..d2ad6b3725 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-py/__init__.py +++ b/packages/test-cases/cases/bind/sanity/output/plugin-py/__init__.py @@ -1,4 +1,5 @@ # NOTE: This is an auto-generated file. All modifications will be overwritten. +# type: ignore from .types import * from .module import * diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-py/module.py b/packages/test-cases/cases/bind/sanity/output/plugin-py/module.py index 896a171aec..c62e6f2d73 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-py/module.py +++ b/packages/test-cases/cases/bind/sanity/output/plugin-py/module.py @@ -1,4 +1,5 @@ # NOTE: This is an auto-generated file. All modifications will be overwritten. +# type: ignore from __future__ import annotations from abc import abstractmethod @@ -57,7 +58,7 @@ def __new__(cls, *args, **kwargs): return instance @abstractmethod - def module_method( + async def module_method( self, args: ArgsModuleMethod, client: InvokerClient[UriPackageOrWrapper], @@ -66,7 +67,7 @@ def module_method( pass @abstractmethod - def object_method( + async def object_method( self, args: ArgsObjectMethod, client: InvokerClient[UriPackageOrWrapper], @@ -75,7 +76,7 @@ def object_method( pass @abstractmethod - def optional_env_method( + async def optional_env_method( self, args: ArgsOptionalEnvMethod, client: InvokerClient[UriPackageOrWrapper], @@ -84,7 +85,7 @@ def optional_env_method( pass @abstractmethod - def r_if( + async def r_if( self, args: ArgsIf, client: InvokerClient[UriPackageOrWrapper], diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-py/types.py b/packages/test-cases/cases/bind/sanity/output/plugin-py/types.py index 009e4d7851..e5d45f5403 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-py/types.py +++ b/packages/test-cases/cases/bind/sanity/output/plugin-py/types.py @@ -1,4 +1,5 @@ # NOTE: This is an auto-generated file. All modifications will be overwritten. +# type: ignore from __future__ import annotations from typing import TypedDict, Optional @@ -83,23 +84,23 @@ ### Enums START ### class CustomEnum(IntEnum): - STRING = auto() - 1, "STRING" - BYTES = auto() - 1, "BYTES" + STRING = auto(), "STRING" + BYTES = auto(), "BYTES" def __new__(cls, value: int, *aliases: str): obj = int.__new__(cls) - obj._value_ = value + obj._value_ = value - 1 for alias in aliases: cls._value2member_map_[alias] = obj return obj class While(IntEnum): - r_for = auto() - 1, "for" - r_in = auto() - 1, "in" + r_for = auto(), "for" + r_in = auto(), "in" def __new__(cls, value: int, *aliases: str): obj = int.__new__(cls) - obj._value_ = value + obj._value_ = value - 1 for alias in aliases: cls._value2member_map_[alias] = obj return obj @@ -131,24 +132,24 @@ def __new__(cls, value: int, *aliases: str): # URI: "testimport.uri.eth" # class TestImportEnum(IntEnum): - STRING = auto() - 1 - BYTES = auto() - 1 + STRING = auto() + BYTES = auto() def __new__(cls, value: int, *aliases: str): obj = int.__new__(cls) - obj._value_ = value + obj._value_ = value - 1 for alias in aliases: cls._value2member_map_[alias] = obj return obj # URI: "testimport.uri.eth" # class TestImportEnumReturn(IntEnum): - STRING = auto() - 1 - BYTES = auto() - 1 + STRING = auto() + BYTES = auto() def __new__(cls, value: int, *aliases: str): obj = int.__new__(cls) - obj._value_ = value + obj._value_ = value - 1 for alias in aliases: cls._value2member_map_[alias] = obj return obj diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-py/wrap_info.py b/packages/test-cases/cases/bind/sanity/output/plugin-py/wrap_info.py index 29560f86e7..b86538fd75 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-py/wrap_info.py +++ b/packages/test-cases/cases/bind/sanity/output/plugin-py/wrap_info.py @@ -1,2316 +1,13 @@ # NOTE: This is an auto-generated file. All modifications will be overwritten. +# type: ignore from __future__ import annotations import json +from base64 import b64decode from polywrap_manifest import WrapManifest -abi = json.loads(""" -{ - "enumTypes": [ - { - "constants": [ - "STRING", - "BYTES" - ], - "kind": 8, - "type": "CustomEnum" - }, - { - "constants": [ - "for", - "in" - ], - "kind": 8, - "type": "while" - } - ], - "envType": { - "kind": 65536, - "properties": [ - { - "kind": 34, - "name": "prop", - "required": true, - "scalar": { - "kind": 4, - "name": "prop", - "required": true, - "type": "String" - }, - "type": "String" - }, - { - "kind": 34, - "name": "optProp", - "scalar": { - "kind": 4, - "name": "optProp", - "type": "String" - }, - "type": "String" - }, - { - "kind": 34, - "map": { - "key": { - "kind": 4, - "name": "optMap", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "optMap", - "scalar": { - "kind": 4, - "name": "optMap", - "type": "Int" - }, - "type": "Map", - "value": { - "kind": 4, - "name": "optMap", - "type": "Int" - } - }, - "name": "optMap", - "type": "Map" - } - ], - "type": "Env" - }, - "importedEnumTypes": [ - { - "constants": [ - "STRING", - "BYTES" - ], - "kind": 520, - "namespace": "TestImport", - "nativeType": "Enum", - "type": "TestImport_Enum", - "uri": "testimport.uri.eth" - }, - { - "constants": [ - "STRING", - "BYTES" - ], - "kind": 520, - "namespace": "TestImport", - "nativeType": "Enum", - "type": "TestImport_Enum_Return", - "uri": "testimport.uri.eth" - } - ], - "importedEnvTypes": [ - { - "kind": 524288, - "namespace": "TestImport", - "nativeType": "Env", - "properties": [ - { - "kind": 34, - "name": "enviroProp", - "required": true, - "scalar": { - "kind": 4, - "name": "enviroProp", - "required": true, - "type": "String" - }, - "type": "String" - } - ], - "type": "TestImport_Env", - "uri": "testimport.uri.eth" - } - ], - "importedModuleTypes": [ - { - "isInterface": true, - "kind": 256, - "methods": [ - { - "arguments": [ - { - "kind": 34, - "name": "str", - "required": true, - "scalar": { - "kind": 4, - "name": "str", - "required": true, - "type": "String" - }, - "type": "String" - }, - { - "kind": 34, - "name": "optStr", - "scalar": { - "kind": 4, - "name": "optStr", - "type": "String" - }, - "type": "String" - }, - { - "kind": 34, - "name": "u", - "required": true, - "scalar": { - "kind": 4, - "name": "u", - "required": true, - "type": "UInt" - }, - "type": "UInt" - }, - { - "kind": 34, - "name": "optU", - "scalar": { - "kind": 4, - "name": "optU", - "type": "UInt" - }, - "type": "UInt" - }, - { - "array": { - "array": { - "item": { - "kind": 4, - "name": "uArrayArray", - "type": "UInt" - }, - "kind": 18, - "name": "uArrayArray", - "scalar": { - "kind": 4, - "name": "uArrayArray", - "type": "UInt" - }, - "type": "[UInt]" - }, - "item": { - "item": { - "kind": 4, - "name": "uArrayArray", - "type": "UInt" - }, - "kind": 18, - "name": "uArrayArray", - "scalar": { - "kind": 4, - "name": "uArrayArray", - "type": "UInt" - }, - "type": "[UInt]" - }, - "kind": 18, - "name": "uArrayArray", - "required": true, - "type": "[[UInt]]" - }, - "kind": 34, - "name": "uArrayArray", - "required": true, - "type": "[[UInt]]" - }, - { - "kind": 34, - "name": "object", - "object": { - "kind": 8192, - "name": "object", - "required": true, - "type": "TestImport_Object" - }, - "required": true, - "type": "TestImport_Object" - }, - { - "kind": 34, - "name": "optObject", - "object": { - "kind": 8192, - "name": "optObject", - "type": "TestImport_Object" - }, - "type": "TestImport_Object" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "TestImport_Object" - }, - "kind": 18, - "name": "objectArray", - "object": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "TestImport_Object" - }, - "required": true, - "type": "[TestImport_Object]" - }, - "kind": 34, - "name": "objectArray", - "required": true, - "type": "[TestImport_Object]" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "optObjectArray", - "type": "TestImport_Object" - }, - "kind": 18, - "name": "optObjectArray", - "object": { - "kind": 8192, - "name": "optObjectArray", - "type": "TestImport_Object" - }, - "type": "[TestImport_Object]" - }, - "kind": 34, - "name": "optObjectArray", - "type": "[TestImport_Object]" - }, - { - "enum": { - "kind": 16384, - "name": "en", - "required": true, - "type": "TestImport_Enum" - }, - "kind": 34, - "name": "en", - "required": true, - "type": "TestImport_Enum" - }, - { - "enum": { - "kind": 16384, - "name": "optEnum", - "type": "TestImport_Enum" - }, - "kind": 34, - "name": "optEnum", - "type": "TestImport_Enum" - }, - { - "array": { - "enum": { - "kind": 16384, - "name": "enumArray", - "required": true, - "type": "TestImport_Enum" - }, - "item": { - "kind": 16384, - "name": "enumArray", - "required": true, - "type": "TestImport_Enum" - }, - "kind": 18, - "name": "enumArray", - "required": true, - "type": "[TestImport_Enum]" - }, - "kind": 34, - "name": "enumArray", - "required": true, - "type": "[TestImport_Enum]" - }, - { - "array": { - "enum": { - "kind": 16384, - "name": "optEnumArray", - "type": "TestImport_Enum" - }, - "item": { - "kind": 16384, - "name": "optEnumArray", - "type": "TestImport_Enum" - }, - "kind": 18, - "name": "optEnumArray", - "type": "[TestImport_Enum]" - }, - "kind": 34, - "name": "optEnumArray", - "type": "[TestImport_Enum]" - } - ], - "env": { - "required": true - }, - "kind": 64, - "name": "importedMethod", - "required": true, - "return": { - "kind": 34, - "name": "importedMethod", - "object": { - "kind": 8192, - "name": "importedMethod", - "type": "TestImport_Object" - }, - "type": "TestImport_Object" - }, - "type": "Method" - }, - { - "arguments": [ - { - "array": { - "item": { - "kind": 4, - "name": "arg", - "required": true, - "type": "String" - }, - "kind": 18, - "name": "arg", - "required": true, - "scalar": { - "kind": 4, - "name": "arg", - "required": true, - "type": "String" - }, - "type": "[String]" - }, - "kind": 34, - "name": "arg", - "required": true, - "type": "[String]" - } - ], - "kind": 64, - "name": "anotherMethod", - "required": true, - "return": { - "kind": 34, - "name": "anotherMethod", - "required": true, - "scalar": { - "kind": 4, - "name": "anotherMethod", - "required": true, - "type": "Int32" - }, - "type": "Int32" - }, - "type": "Method" - }, - { - "arguments": [ - { - "kind": 34, - "name": "arg", - "required": true, - "scalar": { - "kind": 4, - "name": "arg", - "required": true, - "type": "String" - }, - "type": "String" - } - ], - "kind": 64, - "name": "returnsArrayOfEnums", - "required": true, - "return": { - "array": { - "enum": { - "kind": 16384, - "name": "returnsArrayOfEnums", - "type": "TestImport_Enum_Return" - }, - "item": { - "kind": 16384, - "name": "returnsArrayOfEnums", - "type": "TestImport_Enum_Return" - }, - "kind": 18, - "name": "returnsArrayOfEnums", - "required": true, - "type": "[TestImport_Enum_Return]" - }, - "kind": 34, - "name": "returnsArrayOfEnums", - "required": true, - "type": "[TestImport_Enum_Return]" - }, - "type": "Method" - } - ], - "namespace": "TestImport", - "nativeType": "Module", - "type": "TestImport_Module", - "uri": "testimport.uri.eth" - } - ], - "importedObjectTypes": [ - { - "kind": 1025, - "namespace": "TestImport", - "nativeType": "Object", - "properties": [ - { - "kind": 34, - "name": "object", - "object": { - "kind": 8192, - "name": "object", - "required": true, - "type": "TestImport_AnotherObject" - }, - "required": true, - "type": "TestImport_AnotherObject" - }, - { - "kind": 34, - "name": "optObject", - "object": { - "kind": 8192, - "name": "optObject", - "type": "TestImport_AnotherObject" - }, - "type": "TestImport_AnotherObject" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "TestImport_AnotherObject" - }, - "kind": 18, - "name": "objectArray", - "object": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "TestImport_AnotherObject" - }, - "required": true, - "type": "[TestImport_AnotherObject]" - }, - "kind": 34, - "name": "objectArray", - "required": true, - "type": "[TestImport_AnotherObject]" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "optObjectArray", - "type": "TestImport_AnotherObject" - }, - "kind": 18, - "name": "optObjectArray", - "object": { - "kind": 8192, - "name": "optObjectArray", - "type": "TestImport_AnotherObject" - }, - "type": "[TestImport_AnotherObject]" - }, - "kind": 34, - "name": "optObjectArray", - "type": "[TestImport_AnotherObject]" - }, - { - "enum": { - "kind": 16384, - "name": "en", - "required": true, - "type": "TestImport_Enum" - }, - "kind": 34, - "name": "en", - "required": true, - "type": "TestImport_Enum" - }, - { - "enum": { - "kind": 16384, - "name": "optEnum", - "type": "TestImport_Enum" - }, - "kind": 34, - "name": "optEnum", - "type": "TestImport_Enum" - }, - { - "array": { - "enum": { - "kind": 16384, - "name": "enumArray", - "required": true, - "type": "TestImport_Enum" - }, - "item": { - "kind": 16384, - "name": "enumArray", - "required": true, - "type": "TestImport_Enum" - }, - "kind": 18, - "name": "enumArray", - "required": true, - "type": "[TestImport_Enum]" - }, - "kind": 34, - "name": "enumArray", - "required": true, - "type": "[TestImport_Enum]" - }, - { - "array": { - "enum": { - "kind": 16384, - "name": "optEnumArray", - "type": "TestImport_Enum" - }, - "item": { - "kind": 16384, - "name": "optEnumArray", - "type": "TestImport_Enum" - }, - "kind": 18, - "name": "optEnumArray", - "type": "[TestImport_Enum]" - }, - "kind": 34, - "name": "optEnumArray", - "type": "[TestImport_Enum]" - } - ], - "type": "TestImport_Object", - "uri": "testimport.uri.eth" - }, - { - "kind": 1025, - "namespace": "TestImport", - "nativeType": "AnotherObject", - "properties": [ - { - "kind": 34, - "name": "prop", - "required": true, - "scalar": { - "kind": 4, - "name": "prop", - "required": true, - "type": "String" - }, - "type": "String" - } - ], - "type": "TestImport_AnotherObject", - "uri": "testimport.uri.eth" - } - ], - "interfaceTypes": [ - { - "capabilities": { - "getImplementations": { - "enabled": true - } - }, - "kind": 32768, - "namespace": "TestImport", - "nativeType": "Interface", - "type": "TestImport", - "uri": "testimport.uri.eth" - } - ], - "moduleType": { - "imports": [ - { - "type": "TestImport_Module" - }, - { - "type": "TestImport_Object" - }, - { - "type": "TestImport_AnotherObject" - }, - { - "type": "TestImport_Enum" - }, - { - "type": "TestImport_Enum_Return" - } - ], - "kind": 128, - "methods": [ - { - "arguments": [ - { - "kind": 34, - "name": "str", - "required": true, - "scalar": { - "kind": 4, - "name": "str", - "required": true, - "type": "String" - }, - "type": "String" - }, - { - "kind": 34, - "name": "optStr", - "scalar": { - "kind": 4, - "name": "optStr", - "type": "String" - }, - "type": "String" - }, - { - "enum": { - "kind": 16384, - "name": "en", - "required": true, - "type": "CustomEnum" - }, - "kind": 34, - "name": "en", - "required": true, - "type": "CustomEnum" - }, - { - "enum": { - "kind": 16384, - "name": "optEnum", - "type": "CustomEnum" - }, - "kind": 34, - "name": "optEnum", - "type": "CustomEnum" - }, - { - "array": { - "enum": { - "kind": 16384, - "name": "enumArray", - "required": true, - "type": "CustomEnum" - }, - "item": { - "kind": 16384, - "name": "enumArray", - "required": true, - "type": "CustomEnum" - }, - "kind": 18, - "name": "enumArray", - "required": true, - "type": "[CustomEnum]" - }, - "kind": 34, - "name": "enumArray", - "required": true, - "type": "[CustomEnum]" - }, - { - "array": { - "enum": { - "kind": 16384, - "name": "optEnumArray", - "type": "CustomEnum" - }, - "item": { - "kind": 16384, - "name": "optEnumArray", - "type": "CustomEnum" - }, - "kind": 18, - "name": "optEnumArray", - "type": "[CustomEnum]" - }, - "kind": 34, - "name": "optEnumArray", - "type": "[CustomEnum]" - }, - { - "kind": 34, - "map": { - "key": { - "kind": 4, - "name": "map", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "map", - "required": true, - "scalar": { - "kind": 4, - "name": "map", - "required": true, - "type": "Int" - }, - "type": "Map", - "value": { - "kind": 4, - "name": "map", - "required": true, - "type": "Int" - } - }, - "name": "map", - "required": true, - "type": "Map" - }, - { - "kind": 34, - "map": { - "array": { - "item": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "Int" - }, - "kind": 18, - "name": "mapOfArr", - "required": true, - "scalar": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "Int" - }, - "type": "[Int]" - }, - "key": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "mapOfArr", - "required": true, - "type": "Map", - "value": { - "item": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "Int" - }, - "kind": 18, - "name": "mapOfArr", - "required": true, - "scalar": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "Int" - }, - "type": "[Int]" - } - }, - "name": "mapOfArr", - "required": true, - "type": "Map" - }, - { - "kind": 34, - "map": { - "key": { - "kind": 4, - "name": "mapOfMap", - "required": true, - "type": "String" - }, - "kind": 262146, - "map": { - "key": { - "kind": 4, - "name": "mapOfMap", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "mapOfMap", - "required": true, - "scalar": { - "kind": 4, - "name": "mapOfMap", - "required": true, - "type": "Int" - }, - "type": "Map", - "value": { - "kind": 4, - "name": "mapOfMap", - "required": true, - "type": "Int" - } - }, - "name": "mapOfMap", - "required": true, - "type": "Map>", - "value": { - "key": { - "kind": 4, - "name": "mapOfMap", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "mapOfMap", - "required": true, - "scalar": { - "kind": 4, - "name": "mapOfMap", - "required": true, - "type": "Int" - }, - "type": "Map", - "value": { - "kind": 4, - "name": "mapOfMap", - "required": true, - "type": "Int" - } - } - }, - "name": "mapOfMap", - "required": true, - "type": "Map>" - }, - { - "kind": 34, - "map": { - "key": { - "kind": 4, - "name": "mapOfObj", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "mapOfObj", - "object": { - "kind": 8192, - "name": "mapOfObj", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "Map", - "value": { - "kind": 8192, - "name": "mapOfObj", - "required": true, - "type": "AnotherType" - } - }, - "name": "mapOfObj", - "required": true, - "type": "Map" - }, - { - "kind": 34, - "map": { - "array": { - "item": { - "kind": 8192, - "name": "mapOfArrOfObj", - "required": true, - "type": "AnotherType" - }, - "kind": 18, - "name": "mapOfArrOfObj", - "object": { - "kind": 8192, - "name": "mapOfArrOfObj", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "[AnotherType]" - }, - "key": { - "kind": 4, - "name": "mapOfArrOfObj", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "mapOfArrOfObj", - "required": true, - "type": "Map", - "value": { - "item": { - "kind": 8192, - "name": "mapOfArrOfObj", - "required": true, - "type": "AnotherType" - }, - "kind": 18, - "name": "mapOfArrOfObj", - "object": { - "kind": 8192, - "name": "mapOfArrOfObj", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "[AnotherType]" - } - }, - "name": "mapOfArrOfObj", - "required": true, - "type": "Map" - } - ], - "kind": 64, - "name": "moduleMethod", - "required": true, - "return": { - "kind": 34, - "name": "moduleMethod", - "required": true, - "scalar": { - "kind": 4, - "name": "moduleMethod", - "required": true, - "type": "Int" - }, - "type": "Int" - }, - "type": "Method" - }, - { - "arguments": [ - { - "kind": 34, - "name": "object", - "object": { - "kind": 8192, - "name": "object", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "AnotherType" - }, - { - "kind": 34, - "name": "optObject", - "object": { - "kind": 8192, - "name": "optObject", - "type": "AnotherType" - }, - "type": "AnotherType" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "AnotherType" - }, - "kind": 18, - "name": "objectArray", - "object": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "[AnotherType]" - }, - "kind": 34, - "name": "objectArray", - "required": true, - "type": "[AnotherType]" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "optObjectArray", - "type": "AnotherType" - }, - "kind": 18, - "name": "optObjectArray", - "object": { - "kind": 8192, - "name": "optObjectArray", - "type": "AnotherType" - }, - "type": "[AnotherType]" - }, - "kind": 34, - "name": "optObjectArray", - "type": "[AnotherType]" - } - ], - "env": { - "required": true - }, - "kind": 64, - "name": "objectMethod", - "required": true, - "return": { - "kind": 34, - "name": "objectMethod", - "object": { - "kind": 8192, - "name": "objectMethod", - "type": "AnotherType" - }, - "type": "AnotherType" - }, - "type": "Method" - }, - { - "arguments": [ - { - "kind": 34, - "name": "object", - "object": { - "kind": 8192, - "name": "object", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "AnotherType" - }, - { - "kind": 34, - "name": "optObject", - "object": { - "kind": 8192, - "name": "optObject", - "type": "AnotherType" - }, - "type": "AnotherType" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "AnotherType" - }, - "kind": 18, - "name": "objectArray", - "object": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "[AnotherType]" - }, - "kind": 34, - "name": "objectArray", - "required": true, - "type": "[AnotherType]" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "optObjectArray", - "type": "AnotherType" - }, - "kind": 18, - "name": "optObjectArray", - "object": { - "kind": 8192, - "name": "optObjectArray", - "type": "AnotherType" - }, - "type": "[AnotherType]" - }, - "kind": 34, - "name": "optObjectArray", - "type": "[AnotherType]" - } - ], - "env": { - "required": false - }, - "kind": 64, - "name": "optionalEnvMethod", - "required": true, - "return": { - "kind": 34, - "name": "optionalEnvMethod", - "object": { - "kind": 8192, - "name": "optionalEnvMethod", - "type": "AnotherType" - }, - "type": "AnotherType" - }, - "type": "Method" - }, - { - "arguments": [ - { - "kind": 34, - "name": "if", - "object": { - "kind": 8192, - "name": "if", - "required": true, - "type": "else" - }, - "required": true, - "type": "else" - } - ], - "kind": 64, - "name": "if", - "required": true, - "return": { - "kind": 34, - "name": "if", - "object": { - "kind": 8192, - "name": "if", - "required": true, - "type": "else" - }, - "required": true, - "type": "else" - }, - "type": "Method" - } - ], - "type": "Module" - }, - "objectTypes": [ - { - "kind": 1, - "properties": [ - { - "kind": 34, - "name": "str", - "required": true, - "scalar": { - "kind": 4, - "name": "str", - "required": true, - "type": "String" - }, - "type": "String" - }, - { - "kind": 34, - "name": "optStr", - "scalar": { - "kind": 4, - "name": "optStr", - "type": "String" - }, - "type": "String" - }, - { - "kind": 34, - "name": "u", - "required": true, - "scalar": { - "kind": 4, - "name": "u", - "required": true, - "type": "UInt" - }, - "type": "UInt" - }, - { - "kind": 34, - "name": "optU", - "scalar": { - "kind": 4, - "name": "optU", - "type": "UInt" - }, - "type": "UInt" - }, - { - "kind": 34, - "name": "u8", - "required": true, - "scalar": { - "kind": 4, - "name": "u8", - "required": true, - "type": "UInt8" - }, - "type": "UInt8" - }, - { - "kind": 34, - "name": "u16", - "required": true, - "scalar": { - "kind": 4, - "name": "u16", - "required": true, - "type": "UInt16" - }, - "type": "UInt16" - }, - { - "kind": 34, - "name": "u32", - "required": true, - "scalar": { - "kind": 4, - "name": "u32", - "required": true, - "type": "UInt32" - }, - "type": "UInt32" - }, - { - "kind": 34, - "name": "i", - "required": true, - "scalar": { - "kind": 4, - "name": "i", - "required": true, - "type": "Int" - }, - "type": "Int" - }, - { - "kind": 34, - "name": "i8", - "required": true, - "scalar": { - "kind": 4, - "name": "i8", - "required": true, - "type": "Int8" - }, - "type": "Int8" - }, - { - "kind": 34, - "name": "i16", - "required": true, - "scalar": { - "kind": 4, - "name": "i16", - "required": true, - "type": "Int16" - }, - "type": "Int16" - }, - { - "kind": 34, - "name": "i32", - "required": true, - "scalar": { - "kind": 4, - "name": "i32", - "required": true, - "type": "Int32" - }, - "type": "Int32" - }, - { - "kind": 34, - "name": "bigint", - "required": true, - "scalar": { - "kind": 4, - "name": "bigint", - "required": true, - "type": "BigInt" - }, - "type": "BigInt" - }, - { - "kind": 34, - "name": "optBigint", - "scalar": { - "kind": 4, - "name": "optBigint", - "type": "BigInt" - }, - "type": "BigInt" - }, - { - "kind": 34, - "name": "bignumber", - "required": true, - "scalar": { - "kind": 4, - "name": "bignumber", - "required": true, - "type": "BigNumber" - }, - "type": "BigNumber" - }, - { - "kind": 34, - "name": "optBignumber", - "scalar": { - "kind": 4, - "name": "optBignumber", - "type": "BigNumber" - }, - "type": "BigNumber" - }, - { - "kind": 34, - "name": "json", - "required": true, - "scalar": { - "kind": 4, - "name": "json", - "required": true, - "type": "JSON" - }, - "type": "JSON" - }, - { - "kind": 34, - "name": "optJson", - "scalar": { - "kind": 4, - "name": "optJson", - "type": "JSON" - }, - "type": "JSON" - }, - { - "kind": 34, - "name": "bytes", - "required": true, - "scalar": { - "kind": 4, - "name": "bytes", - "required": true, - "type": "Bytes" - }, - "type": "Bytes" - }, - { - "kind": 34, - "name": "optBytes", - "scalar": { - "kind": 4, - "name": "optBytes", - "type": "Bytes" - }, - "type": "Bytes" - }, - { - "kind": 34, - "name": "boolean", - "required": true, - "scalar": { - "kind": 4, - "name": "boolean", - "required": true, - "type": "Boolean" - }, - "type": "Boolean" - }, - { - "kind": 34, - "name": "optBoolean", - "scalar": { - "kind": 4, - "name": "optBoolean", - "type": "Boolean" - }, - "type": "Boolean" - }, - { - "array": { - "item": { - "kind": 4, - "name": "uArray", - "required": true, - "type": "UInt" - }, - "kind": 18, - "name": "uArray", - "required": true, - "scalar": { - "kind": 4, - "name": "uArray", - "required": true, - "type": "UInt" - }, - "type": "[UInt]" - }, - "kind": 34, - "name": "uArray", - "required": true, - "type": "[UInt]" - }, - { - "array": { - "item": { - "kind": 4, - "name": "uOptArray", - "required": true, - "type": "UInt" - }, - "kind": 18, - "name": "uOptArray", - "scalar": { - "kind": 4, - "name": "uOptArray", - "required": true, - "type": "UInt" - }, - "type": "[UInt]" - }, - "kind": 34, - "name": "uOptArray", - "type": "[UInt]" - }, - { - "array": { - "item": { - "kind": 4, - "name": "optUOptArray", - "type": "UInt" - }, - "kind": 18, - "name": "optUOptArray", - "scalar": { - "kind": 4, - "name": "optUOptArray", - "type": "UInt" - }, - "type": "[UInt]" - }, - "kind": 34, - "name": "optUOptArray", - "type": "[UInt]" - }, - { - "array": { - "item": { - "kind": 4, - "name": "optStrOptArray", - "type": "String" - }, - "kind": 18, - "name": "optStrOptArray", - "scalar": { - "kind": 4, - "name": "optStrOptArray", - "type": "String" - }, - "type": "[String]" - }, - "kind": 34, - "name": "optStrOptArray", - "type": "[String]" - }, - { - "array": { - "array": { - "item": { - "kind": 4, - "name": "uArrayArray", - "required": true, - "type": "UInt" - }, - "kind": 18, - "name": "uArrayArray", - "required": true, - "scalar": { - "kind": 4, - "name": "uArrayArray", - "required": true, - "type": "UInt" - }, - "type": "[UInt]" - }, - "item": { - "item": { - "kind": 4, - "name": "uArrayArray", - "required": true, - "type": "UInt" - }, - "kind": 18, - "name": "uArrayArray", - "required": true, - "scalar": { - "kind": 4, - "name": "uArrayArray", - "required": true, - "type": "UInt" - }, - "type": "[UInt]" - }, - "kind": 18, - "name": "uArrayArray", - "required": true, - "type": "[[UInt]]" - }, - "kind": 34, - "name": "uArrayArray", - "required": true, - "type": "[[UInt]]" - }, - { - "array": { - "array": { - "item": { - "kind": 4, - "name": "uOptArrayOptArray", - "type": "UInt32" - }, - "kind": 18, - "name": "uOptArrayOptArray", - "scalar": { - "kind": 4, - "name": "uOptArrayOptArray", - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "item": { - "item": { - "kind": 4, - "name": "uOptArrayOptArray", - "type": "UInt32" - }, - "kind": 18, - "name": "uOptArrayOptArray", - "scalar": { - "kind": 4, - "name": "uOptArrayOptArray", - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "kind": 18, - "name": "uOptArrayOptArray", - "required": true, - "type": "[[UInt32]]" - }, - "kind": 34, - "name": "uOptArrayOptArray", - "required": true, - "type": "[[UInt32]]" - }, - { - "array": { - "array": { - "array": { - "item": { - "kind": 4, - "name": "uArrayOptArrayArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "uArrayOptArrayArray", - "required": true, - "scalar": { - "kind": 4, - "name": "uArrayOptArrayArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "item": { - "item": { - "kind": 4, - "name": "uArrayOptArrayArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "uArrayOptArrayArray", - "required": true, - "scalar": { - "kind": 4, - "name": "uArrayOptArrayArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "kind": 18, - "name": "uArrayOptArrayArray", - "type": "[[UInt32]]" - }, - "item": { - "array": { - "item": { - "kind": 4, - "name": "uArrayOptArrayArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "uArrayOptArrayArray", - "required": true, - "scalar": { - "kind": 4, - "name": "uArrayOptArrayArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "item": { - "item": { - "kind": 4, - "name": "uArrayOptArrayArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "uArrayOptArrayArray", - "required": true, - "scalar": { - "kind": 4, - "name": "uArrayOptArrayArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "kind": 18, - "name": "uArrayOptArrayArray", - "type": "[[UInt32]]" - }, - "kind": 18, - "name": "uArrayOptArrayArray", - "required": true, - "type": "[[[UInt32]]]" - }, - "kind": 34, - "name": "uArrayOptArrayArray", - "required": true, - "type": "[[[UInt32]]]" - }, - { - "array": { - "array": { - "array": { - "array": { - "item": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "crazyArray", - "scalar": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "item": { - "item": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "crazyArray", - "scalar": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "kind": 18, - "name": "crazyArray", - "required": true, - "type": "[[UInt32]]" - }, - "item": { - "array": { - "item": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "crazyArray", - "scalar": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "item": { - "item": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "crazyArray", - "scalar": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "kind": 18, - "name": "crazyArray", - "required": true, - "type": "[[UInt32]]" - }, - "kind": 18, - "name": "crazyArray", - "type": "[[[UInt32]]]" - }, - "item": { - "array": { - "array": { - "item": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "crazyArray", - "scalar": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "item": { - "item": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "crazyArray", - "scalar": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "kind": 18, - "name": "crazyArray", - "required": true, - "type": "[[UInt32]]" - }, - "item": { - "array": { - "item": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "crazyArray", - "scalar": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "item": { - "item": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "kind": 18, - "name": "crazyArray", - "scalar": { - "kind": 4, - "name": "crazyArray", - "required": true, - "type": "UInt32" - }, - "type": "[UInt32]" - }, - "kind": 18, - "name": "crazyArray", - "required": true, - "type": "[[UInt32]]" - }, - "kind": 18, - "name": "crazyArray", - "type": "[[[UInt32]]]" - }, - "kind": 18, - "name": "crazyArray", - "type": "[[[[UInt32]]]]" - }, - "kind": 34, - "name": "crazyArray", - "type": "[[[[UInt32]]]]" - }, - { - "kind": 34, - "name": "object", - "object": { - "kind": 8192, - "name": "object", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "AnotherType" - }, - { - "kind": 34, - "name": "optObject", - "object": { - "kind": 8192, - "name": "optObject", - "type": "AnotherType" - }, - "type": "AnotherType" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "AnotherType" - }, - "kind": 18, - "name": "objectArray", - "object": { - "kind": 8192, - "name": "objectArray", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "[AnotherType]" - }, - "kind": 34, - "name": "objectArray", - "required": true, - "type": "[AnotherType]" - }, - { - "array": { - "item": { - "kind": 8192, - "name": "optObjectArray", - "type": "AnotherType" - }, - "kind": 18, - "name": "optObjectArray", - "object": { - "kind": 8192, - "name": "optObjectArray", - "type": "AnotherType" - }, - "type": "[AnotherType]" - }, - "kind": 34, - "name": "optObjectArray", - "type": "[AnotherType]" - }, - { - "enum": { - "kind": 16384, - "name": "en", - "required": true, - "type": "CustomEnum" - }, - "kind": 34, - "name": "en", - "required": true, - "type": "CustomEnum" - }, - { - "enum": { - "kind": 16384, - "name": "optEnum", - "type": "CustomEnum" - }, - "kind": 34, - "name": "optEnum", - "type": "CustomEnum" - }, - { - "array": { - "enum": { - "kind": 16384, - "name": "enumArray", - "required": true, - "type": "CustomEnum" - }, - "item": { - "kind": 16384, - "name": "enumArray", - "required": true, - "type": "CustomEnum" - }, - "kind": 18, - "name": "enumArray", - "required": true, - "type": "[CustomEnum]" - }, - "kind": 34, - "name": "enumArray", - "required": true, - "type": "[CustomEnum]" - }, - { - "array": { - "enum": { - "kind": 16384, - "name": "optEnumArray", - "type": "CustomEnum" - }, - "item": { - "kind": 16384, - "name": "optEnumArray", - "type": "CustomEnum" - }, - "kind": 18, - "name": "optEnumArray", - "type": "[CustomEnum]" - }, - "kind": 34, - "name": "optEnumArray", - "type": "[CustomEnum]" - }, - { - "kind": 34, - "map": { - "key": { - "kind": 4, - "name": "map", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "map", - "required": true, - "scalar": { - "kind": 4, - "name": "map", - "required": true, - "type": "Int" - }, - "type": "Map", - "value": { - "kind": 4, - "name": "map", - "required": true, - "type": "Int" - } - }, - "name": "map", - "required": true, - "type": "Map" - }, - { - "kind": 34, - "map": { - "array": { - "item": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "Int" - }, - "kind": 18, - "name": "mapOfArr", - "required": true, - "scalar": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "Int" - }, - "type": "[Int]" - }, - "key": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "mapOfArr", - "required": true, - "type": "Map", - "value": { - "item": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "Int" - }, - "kind": 18, - "name": "mapOfArr", - "required": true, - "scalar": { - "kind": 4, - "name": "mapOfArr", - "required": true, - "type": "Int" - }, - "type": "[Int]" - } - }, - "name": "mapOfArr", - "required": true, - "type": "Map" - }, - { - "kind": 34, - "map": { - "key": { - "kind": 4, - "name": "mapOfObj", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "mapOfObj", - "object": { - "kind": 8192, - "name": "mapOfObj", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "Map", - "value": { - "kind": 8192, - "name": "mapOfObj", - "required": true, - "type": "AnotherType" - } - }, - "name": "mapOfObj", - "required": true, - "type": "Map" - }, - { - "kind": 34, - "map": { - "array": { - "item": { - "kind": 8192, - "name": "mapOfArrOfObj", - "required": true, - "type": "AnotherType" - }, - "kind": 18, - "name": "mapOfArrOfObj", - "object": { - "kind": 8192, - "name": "mapOfArrOfObj", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "[AnotherType]" - }, - "key": { - "kind": 4, - "name": "mapOfArrOfObj", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "mapOfArrOfObj", - "required": true, - "type": "Map", - "value": { - "item": { - "kind": 8192, - "name": "mapOfArrOfObj", - "required": true, - "type": "AnotherType" - }, - "kind": 18, - "name": "mapOfArrOfObj", - "object": { - "kind": 8192, - "name": "mapOfArrOfObj", - "required": true, - "type": "AnotherType" - }, - "required": true, - "type": "[AnotherType]" - } - }, - "name": "mapOfArrOfObj", - "required": true, - "type": "Map" - }, - { - "kind": 34, - "map": { - "key": { - "kind": 4, - "name": "mapCustomValue", - "required": true, - "type": "String" - }, - "kind": 262146, - "name": "mapCustomValue", - "object": { - "kind": 8192, - "name": "mapCustomValue", - "type": "CustomMapValue" - }, - "required": true, - "type": "Map", - "value": { - "kind": 8192, - "name": "mapCustomValue", - "type": "CustomMapValue" - } - }, - "name": "mapCustomValue", - "required": true, - "type": "Map" - } - ], - "type": "CustomType" - }, - { - "kind": 1, - "properties": [ - { - "kind": 34, - "name": "prop", - "scalar": { - "kind": 4, - "name": "prop", - "type": "String" - }, - "type": "String" - }, - { - "kind": 34, - "name": "circular", - "object": { - "kind": 8192, - "name": "circular", - "type": "CustomType" - }, - "type": "CustomType" - }, - { - "kind": 34, - "name": "const", - "scalar": { - "kind": 4, - "name": "const", - "type": "String" - }, - "type": "String" - } - ], - "type": "AnotherType" - }, - { - "kind": 1, - "properties": [ - { - "kind": 34, - "name": "foo", - "required": true, - "scalar": { - "kind": 4, - "name": "foo", - "required": true, - "type": "String" - }, - "type": "String" - } - ], - "type": "CustomMapValue" - }, - { - "kind": 1, - "properties": [ - { - "kind": 34, - "name": "else", - "required": true, - "scalar": { - "kind": 4, - "name": "else", - "required": true, - "type": "String" - }, - "type": "String" - } - ], - "type": "else" - } - ], - "version": "0.1" -} -""") +abi = json.loads(b64decode("eyJlbnVtVHlwZXMiOlt7ImNvbnN0YW50cyI6WyJTVFJJTkciLCJCWVRFUyJdLCJraW5kIjo4LCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LHsiY29uc3RhbnRzIjpbImZvciIsImluIl0sImtpbmQiOjgsInR5cGUiOiJ3aGlsZSJ9XSwiZW52VHlwZSI6eyJraW5kIjo2NTUzNiwicHJvcGVydGllcyI6W3sia2luZCI6MzQsIm5hbWUiOiJwcm9wIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoicHJvcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0UHJvcCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0UHJvcCIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im9wdE1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im9wdE1hcCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0TWFwIiwidHlwZSI6IkludCJ9LCJ0eXBlIjoiTWFwPFN0cmluZywgSW50PiIsInZhbHVlIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRNYXAiLCJ0eXBlIjoiSW50In19LCJuYW1lIjoib3B0TWFwIiwidHlwZSI6Ik1hcDxTdHJpbmcsIEludD4ifV0sInR5cGUiOiJFbnYifSwiaW1wb3J0ZWRFbnVtVHlwZXMiOlt7ImNvbnN0YW50cyI6WyJTVFJJTkciLCJCWVRFUyJdLCJraW5kIjo1MjAsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiRW51bSIsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0iLCJ1cmkiOiJ0ZXN0aW1wb3J0LnVyaS5ldGgifSx7ImNvbnN0YW50cyI6WyJTVFJJTkciLCJCWVRFUyJdLCJraW5kIjo1MjAsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiRW51bSIsInR5cGUiOiJUZXN0SW1wb3J0X0VudW1fUmV0dXJuIiwidXJpIjoidGVzdGltcG9ydC51cmkuZXRoIn1dLCJpbXBvcnRlZEVudlR5cGVzIjpbeyJraW5kIjo1MjQyODgsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiRW52IiwicHJvcGVydGllcyI6W3sia2luZCI6MzQsIm5hbWUiOiJlbnZpcm9Qcm9wIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiZW52aXJvUHJvcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifV0sInR5cGUiOiJUZXN0SW1wb3J0X0VudiIsInVyaSI6InRlc3RpbXBvcnQudXJpLmV0aCJ9XSwiaW1wb3J0ZWRNb2R1bGVUeXBlcyI6W3siaXNJbnRlcmZhY2UiOnRydWUsImtpbmQiOjI1NiwibWV0aG9kcyI6W3siYXJndW1lbnRzIjpbeyJraW5kIjozNCwibmFtZSI6InN0ciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InN0ciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0U3RyIiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRTdHIiLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoidSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InUiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwidHlwZSI6IlVJbnQifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0VSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0VSIsInR5cGUiOiJVSW50In0sInR5cGUiOiJVSW50In0seyJhcnJheSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwidHlwZSI6IlVJbnQifSwidHlwZSI6IltVSW50XSJ9LCJpdGVtIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwidHlwZSI6IlVJbnQifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJ0eXBlIjoiVUludCJ9LCJ0eXBlIjoiW1VJbnRdIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludF1dIn0sImtpbmQiOjM0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludF1dIn0seyJraW5kIjozNCwibmFtZSI6Im9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0seyJraW5kIjozNCwibmFtZSI6Im9wdE9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0IiwidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0sInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0sImtpbmQiOjE4LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X09iamVjdF0ifSwia2luZCI6MzQsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1Rlc3RJbXBvcnRfT2JqZWN0XSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QifSwia2luZCI6MTgsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QifSwidHlwZSI6IltUZXN0SW1wb3J0X09iamVjdF0ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJbVGVzdEltcG9ydF9PYmplY3RdIn0seyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdEVudW0iLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbVGVzdEltcG9ydF9FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1Rlc3RJbXBvcnRfRW51bV0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sIml0ZW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn1dLCJlbnYiOnsicmVxdWlyZWQiOnRydWV9LCJraW5kIjo2NCwibmFtZSI6ImltcG9ydGVkTWV0aG9kIiwicmVxdWlyZWQiOnRydWUsInJldHVybiI6eyJraW5kIjozNCwibmFtZSI6ImltcG9ydGVkTWV0aG9kIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJpbXBvcnRlZE1ldGhvZCIsInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QifSwidHlwZSI6Ik1ldGhvZCJ9LHsiYXJndW1lbnRzIjpbeyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJhcmciLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoxOCwibmFtZSI6ImFyZyIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImFyZyIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJbU3RyaW5nXSJ9LCJraW5kIjozNCwibmFtZSI6ImFyZyIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1N0cmluZ10ifV0sImtpbmQiOjY0LCJuYW1lIjoiYW5vdGhlck1ldGhvZCIsInJlcXVpcmVkIjp0cnVlLCJyZXR1cm4iOnsia2luZCI6MzQsIm5hbWUiOiJhbm90aGVyTWV0aG9kIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiYW5vdGhlck1ldGhvZCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50MzIifSwidHlwZSI6IkludDMyIn0sInR5cGUiOiJNZXRob2QifSx7ImFyZ3VtZW50cyI6W3sia2luZCI6MzQsIm5hbWUiOiJhcmciLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJhcmciLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJraW5kIjo2NCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJyZXF1aXJlZCI6dHJ1ZSwicmV0dXJuIjp7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJyZXR1cm5zQXJyYXlPZkVudW1zIiwidHlwZSI6IlRlc3RJbXBvcnRfRW51bV9SZXR1cm4ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtX1JldHVybiJ9LCJraW5kIjoxOCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1fUmV0dXJuXSJ9LCJraW5kIjozNCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1fUmV0dXJuXSJ9LCJ0eXBlIjoiTWV0aG9kIn1dLCJuYW1lc3BhY2UiOiJUZXN0SW1wb3J0IiwibmF0aXZlVHlwZSI6Ik1vZHVsZSIsInR5cGUiOiJUZXN0SW1wb3J0X01vZHVsZSIsInVyaSI6InRlc3RpbXBvcnQudXJpLmV0aCJ9XSwiaW1wb3J0ZWRPYmplY3RUeXBlcyI6W3sia2luZCI6MTAyNSwibmFtZXNwYWNlIjoiVGVzdEltcG9ydCIsIm5hdGl2ZVR5cGUiOiJPYmplY3QiLCJwcm9wZXJ0aWVzIjpbeyJraW5kIjozNCwibmFtZSI6Im9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3QiLCJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0In0sInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSwia2luZCI6MTgsIm5hbWUiOiJvYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfQW5vdGhlck9iamVjdCJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3RdIn0sImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3RdIn0seyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSwia2luZCI6MTgsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0In0sInR5cGUiOiJbVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0XSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3RdIn0seyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdEVudW0iLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbVGVzdEltcG9ydF9FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1Rlc3RJbXBvcnRfRW51bV0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sIml0ZW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn1dLCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QiLCJ1cmkiOiJ0ZXN0aW1wb3J0LnVyaS5ldGgifSx7ImtpbmQiOjEwMjUsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiQW5vdGhlck9iamVjdCIsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoicHJvcCIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InByb3AiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0IiwidXJpIjoidGVzdGltcG9ydC51cmkuZXRoIn1dLCJpbnRlcmZhY2VUeXBlcyI6W3siY2FwYWJpbGl0aWVzIjp7ImdldEltcGxlbWVudGF0aW9ucyI6eyJlbmFibGVkIjp0cnVlfX0sImtpbmQiOjMyNzY4LCJuYW1lc3BhY2UiOiJUZXN0SW1wb3J0IiwibmF0aXZlVHlwZSI6IkludGVyZmFjZSIsInR5cGUiOiJUZXN0SW1wb3J0IiwidXJpIjoidGVzdGltcG9ydC51cmkuZXRoIn1dLCJtb2R1bGVUeXBlIjp7ImltcG9ydHMiOlt7InR5cGUiOiJUZXN0SW1wb3J0X01vZHVsZSJ9LHsidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0seyJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0In0seyJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0seyJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtX1JldHVybiJ9XSwia2luZCI6MTI4LCJtZXRob2RzIjpbeyJhcmd1bWVudHMiOlt7ImtpbmQiOjM0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRTdHIiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdFN0ciIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsiZW51bSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJDdXN0b21FbnVtIn0sImtpbmQiOjM0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkN1c3RvbUVudW0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IkN1c3RvbUVudW0ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IkN1c3RvbUVudW0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJlbnVtQXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkN1c3RvbUVudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJraW5kIjoxOCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0N1c3RvbUVudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQ3VzdG9tRW51bV0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJpdGVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IkN1c3RvbUVudW0ifSwia2luZCI6MTgsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiW0N1c3RvbUVudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltDdXN0b21FbnVtXSJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+IiwidmFsdWUiOnsia2luZCI6NCwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In19LCJuYW1lIjoibWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+In0seyJraW5kIjozNCwibWFwIjp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwidHlwZSI6IltJbnRdIn0sImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0ludF0+IiwidmFsdWUiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJraW5kIjoxOCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJ0eXBlIjoiW0ludF0ifX0sIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0ludF0+In0seyJraW5kIjozNCwibWFwIjp7ImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZk1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+IiwidmFsdWUiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifX0sIm5hbWUiOiJtYXBPZk1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgTWFwPFN0cmluZywgSW50Pj4iLCJ2YWx1ZSI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZk1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+IiwidmFsdWUiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifX19LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIEludD4+In0seyJraW5kIjozNCwibWFwIjp7ImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm5hbWUiOiJtYXBPZk9iaiIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgQW5vdGhlclR5cGU+IiwidmFsdWUiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9fSwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBBbm90aGVyVHlwZT4ifSx7ImtpbmQiOjM0LCJtYXAiOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSwia2V5Ijp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0Fub3RoZXJUeXBlXT4iLCJ2YWx1ZSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9fSwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIFtBbm90aGVyVHlwZV0+In1dLCJraW5kIjo2NCwibmFtZSI6Im1vZHVsZU1ldGhvZCIsInJlcXVpcmVkIjp0cnVlLCJyZXR1cm4iOnsia2luZCI6MzQsIm5hbWUiOiJtb2R1bGVNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtb2R1bGVNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJ0eXBlIjoiSW50In0sInR5cGUiOiJNZXRob2QifSx7ImFyZ3VtZW50cyI6W3sia2luZCI6MzQsIm5hbWUiOiJvYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdCIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiQW5vdGhlclR5cGUifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im9iamVjdEFycmF5Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9XSwiZW52Ijp7InJlcXVpcmVkIjp0cnVlfSwia2luZCI6NjQsIm5hbWUiOiJvYmplY3RNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwicmV0dXJuIjp7ImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0TWV0aG9kIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RNZXRob2QiLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJNZXRob2QifSx7ImFyZ3VtZW50cyI6W3sia2luZCI6MzQsIm5hbWUiOiJvYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdCIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiQW5vdGhlclR5cGUifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im9iamVjdEFycmF5Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9XSwiZW52Ijp7InJlcXVpcmVkIjpmYWxzZX0sImtpbmQiOjY0LCJuYW1lIjoib3B0aW9uYWxFbnZNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwicmV0dXJuIjp7ImtpbmQiOjM0LCJuYW1lIjoib3B0aW9uYWxFbnZNZXRob2QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdGlvbmFsRW52TWV0aG9kIiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiTWV0aG9kIn0seyJhcmd1bWVudHMiOlt7ImtpbmQiOjM0LCJuYW1lIjoiaWYiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6ImlmIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJlbHNlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiZWxzZSJ9XSwia2luZCI6NjQsIm5hbWUiOiJpZiIsInJlcXVpcmVkIjp0cnVlLCJyZXR1cm4iOnsia2luZCI6MzQsIm5hbWUiOiJpZiIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoiaWYiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6ImVsc2UifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJlbHNlIn0sInR5cGUiOiJNZXRob2QifV0sInR5cGUiOiJNb2R1bGUifSwib2JqZWN0VHlwZXMiOlt7ImtpbmQiOjEsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRTdHIiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdFN0ciIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJ1IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludCJ9LCJ0eXBlIjoiVUludCJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRVIiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRVIiwidHlwZSI6IlVJbnQifSwidHlwZSI6IlVJbnQifSx7ImtpbmQiOjM0LCJuYW1lIjoidTgiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1OCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDgifSwidHlwZSI6IlVJbnQ4In0seyJraW5kIjozNCwibmFtZSI6InUxNiIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InUxNiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDE2In0sInR5cGUiOiJVSW50MTYifSx7ImtpbmQiOjM0LCJuYW1lIjoidTMyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidTMyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IlVJbnQzMiJ9LHsia2luZCI6MzQsIm5hbWUiOiJpIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiaSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJJbnQifSx7ImtpbmQiOjM0LCJuYW1lIjoiaTgiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJpOCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50OCJ9LCJ0eXBlIjoiSW50OCJ9LHsia2luZCI6MzQsIm5hbWUiOiJpMTYiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJpMTYiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludDE2In0sInR5cGUiOiJJbnQxNiJ9LHsia2luZCI6MzQsIm5hbWUiOiJpMzIiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJpMzIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludDMyIn0sInR5cGUiOiJJbnQzMiJ9LHsia2luZCI6MzQsIm5hbWUiOiJiaWdpbnQiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJiaWdpbnQiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkJpZ0ludCJ9LCJ0eXBlIjoiQmlnSW50In0seyJraW5kIjozNCwibmFtZSI6Im9wdEJpZ2ludCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0QmlnaW50IiwidHlwZSI6IkJpZ0ludCJ9LCJ0eXBlIjoiQmlnSW50In0seyJraW5kIjozNCwibmFtZSI6ImJpZ251bWJlciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImJpZ251bWJlciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQmlnTnVtYmVyIn0sInR5cGUiOiJCaWdOdW1iZXIifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0QmlnbnVtYmVyIiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRCaWdudW1iZXIiLCJ0eXBlIjoiQmlnTnVtYmVyIn0sInR5cGUiOiJCaWdOdW1iZXIifSx7ImtpbmQiOjM0LCJuYW1lIjoianNvbiIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Impzb24iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkpTT04ifSwidHlwZSI6IkpTT04ifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0SnNvbiIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0SnNvbiIsInR5cGUiOiJKU09OIn0sInR5cGUiOiJKU09OIn0seyJraW5kIjozNCwibmFtZSI6ImJ5dGVzIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiYnl0ZXMiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkJ5dGVzIn0sInR5cGUiOiJCeXRlcyJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRCeXRlcyIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0Qnl0ZXMiLCJ0eXBlIjoiQnl0ZXMifSwidHlwZSI6IkJ5dGVzIn0seyJraW5kIjozNCwibmFtZSI6ImJvb2xlYW4iLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJib29sZWFuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJCb29sZWFuIn0sInR5cGUiOiJCb29sZWFuIn0seyJraW5kIjozNCwibmFtZSI6Im9wdEJvb2xlYW4iLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdEJvb2xlYW4iLCJ0eXBlIjoiQm9vbGVhbiJ9LCJ0eXBlIjoiQm9vbGVhbiJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sInR5cGUiOiJbVUludF0ifSwia2luZCI6MzQsIm5hbWUiOiJ1QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltVSW50XSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidU9wdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoidU9wdEFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1T3B0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwidHlwZSI6IltVSW50XSJ9LCJraW5kIjozNCwibmFtZSI6InVPcHRBcnJheSIsInR5cGUiOiJbVUludF0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6Im9wdFVPcHRBcnJheSIsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoib3B0VU9wdEFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRVT3B0QXJyYXkiLCJ0eXBlIjoiVUludCJ9LCJ0eXBlIjoiW1VJbnRdIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0VU9wdEFycmF5IiwidHlwZSI6IltVSW50XSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoib3B0U3RyT3B0QXJyYXkiLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0U3RyT3B0QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdFN0ck9wdEFycmF5IiwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiW1N0cmluZ10ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRTdHJPcHRBcnJheSIsInR5cGUiOiJbU3RyaW5nXSJ9LHsiYXJyYXkiOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sInR5cGUiOiJbVUludF0ifSwiaXRlbSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludCJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwidHlwZSI6IltVSW50XSJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbW1VJbnRdXSJ9LCJraW5kIjozNCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbW1VJbnRdXSJ9LHsiYXJyYXkiOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVPcHRBcnJheU9wdEFycmF5IiwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwiaXRlbSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1T3B0QXJyYXlPcHRBcnJheSIsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJ1T3B0QXJyYXlPcHRBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJraW5kIjoxOCwibmFtZSI6InVPcHRBcnJheU9wdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbW1VJbnQzMl1dIn0sImtpbmQiOjM0LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludDMyXV0ifSx7ImFycmF5Ijp7ImFycmF5Ijp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwidHlwZSI6IltbVUludDMyXV0ifSwiaXRlbSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJpdGVtIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInR5cGUiOiJbW1VJbnQzMl1dIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tbVUludDMyXV1dIn0sImtpbmQiOjM0LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tbVUludDMyXV1dIn0seyJhcnJheSI6eyJhcnJheSI6eyJhcnJheSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludDMyXV0ifSwiaXRlbSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludDMyXV0ifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5IiwidHlwZSI6IltbW1VJbnQzMl1dXSJ9LCJpdGVtIjp7ImFycmF5Ijp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwiaXRlbSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tVSW50MzJdXSJ9LCJpdGVtIjp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwiaXRlbSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tVSW50MzJdXSJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJ0eXBlIjoiW1tbVUludDMyXV1dIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInR5cGUiOiJbW1tbVUludDMyXV1dXSJ9LCJraW5kIjozNCwibmFtZSI6ImNyYXp5QXJyYXkiLCJ0eXBlIjoiW1tbW1VJbnQzMl1dXV0ifSx7ImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3QiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3QiLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwidHlwZSI6IkFub3RoZXJUeXBlIn0seyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwia2luZCI6MTgsIm5hbWUiOiJvYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9LCJraW5kIjozNCwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0seyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im9wdE9iamVjdEFycmF5Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IltBbm90aGVyVHlwZV0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJlbiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJraW5kIjozNCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJDdXN0b21FbnVtIn0seyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoib3B0RW51bSIsInR5cGUiOiJDdXN0b21FbnVtIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bSIsInR5cGUiOiJDdXN0b21FbnVtIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJDdXN0b21FbnVtIn0sIml0ZW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJlbnVtQXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkN1c3RvbUVudW0ifSwia2luZCI6MTgsIm5hbWUiOiJlbnVtQXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltDdXN0b21FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0N1c3RvbUVudW1dIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IkN1c3RvbUVudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6Im9wdEVudW1BcnJheSIsInR5cGUiOiJDdXN0b21FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltDdXN0b21FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdEVudW1BcnJheSIsInR5cGUiOiJbQ3VzdG9tRW51bV0ifSx7ImtpbmQiOjM0LCJtYXAiOnsia2V5Ijp7ImtpbmQiOjQsIm5hbWUiOiJtYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm5hbWUiOiJtYXAiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJ0eXBlIjoiTWFwPFN0cmluZywgSW50PiIsInZhbHVlIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9fSwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgSW50PiJ9LHsia2luZCI6MzQsIm1hcCI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sImtpbmQiOjE4LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJbSW50XSJ9LCJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIFtJbnRdPiIsInZhbHVlIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwidHlwZSI6IltJbnRdIn19LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIFtJbnRdPiJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZPYmoiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIEFub3RoZXJUeXBlPiIsInZhbHVlIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifX0sIm5hbWUiOiJtYXBPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgQW5vdGhlclR5cGU+In0seyJraW5kIjozNCwibWFwIjp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIFtBbm90aGVyVHlwZV0+IiwidmFsdWUiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifX0sIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBbQW5vdGhlclR5cGVdPiJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcEN1c3RvbVZhbHVlIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwQ3VzdG9tVmFsdWUiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcEN1c3RvbVZhbHVlIiwidHlwZSI6IkN1c3RvbU1hcFZhbHVlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgQ3VzdG9tTWFwVmFsdWU+IiwidmFsdWUiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcEN1c3RvbVZhbHVlIiwidHlwZSI6IkN1c3RvbU1hcFZhbHVlIn19LCJuYW1lIjoibWFwQ3VzdG9tVmFsdWUiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIEN1c3RvbU1hcFZhbHVlPiJ9XSwidHlwZSI6IkN1c3RvbVR5cGUifSx7ImtpbmQiOjEsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoicHJvcCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoicHJvcCIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJjaXJjdWxhciIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoiY2lyY3VsYXIiLCJ0eXBlIjoiQ3VzdG9tVHlwZSJ9LCJ0eXBlIjoiQ3VzdG9tVHlwZSJ9LHsia2luZCI6MzQsIm5hbWUiOiJjb25zdCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY29uc3QiLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifV0sInR5cGUiOiJBbm90aGVyVHlwZSJ9LHsia2luZCI6MSwicHJvcGVydGllcyI6W3sia2luZCI6MzQsIm5hbWUiOiJmb28iLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJmb28iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJ0eXBlIjoiQ3VzdG9tTWFwVmFsdWUifSx7ImtpbmQiOjEsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoiZWxzZSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImVsc2UiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJ0eXBlIjoiZWxzZSJ9XSwidmVyc2lvbiI6IjAuMSJ9").decode("utf-8")) manifest = WrapManifest.parse_obj({ "name": "Test",