[
  {
    "path": ".editorconfig",
    "content": "###############################\n# Core EditorConfig Options   #\n###############################\n\n# dotnet-format requires version 3.1.37601\n# dotnet tool update -g dotnet-format\n# remember to have: git config --global core.autocrlf false  #(which is usually default)\n\n# top-most EditorConfig file\nroot = true\n\n# Don't use tabs for indentation.\n[*]\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\ncharset = utf-8\nend_of_line = lf\n\n# (Please don't specify an indent_size here; that has too many unintended consequences.)\nspelling_exclusion_path = SpellingExclusions.dic\n\n# Code files\n[*.{cs,csx,vb,vbx}]\nindent_size = 4\ninsert_final_newline = true\ntrim_trailing_whitespace = true\ncharset = utf-8\n\n# XML project files\n[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]\nindent_size = 2\n\n# XML config files\n[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]\nindent_size = 2\n\n# JSON files\n[*.json]\nindent_size = 2\n\n# Powershell files\n[*.ps1]\nindent_size = 2\n\n# Shell script files\n[*.sh]\nend_of_line = lf\nindent_size = 2\n\n# YAML files\n[*.yml]\nend_of_line = lf\nindent_size = 2\n\n# Dotnet code style settings:\n[*.{cs,vb}]\n# Use file-scoped namespace\ncsharp_style_namespace_declarations = file_scoped:warning\n\n# Member can be made 'readonly'\ncsharp_style_prefer_readonly_struct_member = true\ndotnet_diagnostic.IDE0251.severity = warning\n\ndotnet_diagnostic.CS1591.severity = silent\n// Use primary constructor\ncsharp_style_prefer_primary_constructors = false\n\n# Sort using and Import directives with System.* appearing first\ndotnet_sort_system_directives_first = false\ndotnet_separate_import_directive_groups = false\n\n# Avoid \"this.\" and \"Me.\" if not necessary\ndotnet_style_qualification_for_field = false:warning\ndotnet_style_qualification_for_property = false:warning\ndotnet_style_qualification_for_method = false:warning\ndotnet_style_qualification_for_event = false:warning\n\n# Use language keywords instead of framework type names for type references\ndotnet_style_predefined_type_for_locals_parameters_members = true:suggestion\ndotnet_style_predefined_type_for_member_access = true:suggestion\n\n# Suggest more modern language features when available\ndotnet_style_object_initializer = true:warning\ndotnet_style_collection_initializer = true:warning\ndotnet_style_coalesce_expression = true:suggestion\ndotnet_style_null_propagation = true:suggestion\ndotnet_style_explicit_tuple_names = true:suggestion\ndotnet_style_prefer_collection_expression = never\n\n# Whitespace options\ndotnet_style_allow_multiple_blank_lines_experimental = false\n\n# Non-private static fields are PascalCase\ndotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields\ndotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style\n\ndotnet_naming_symbols.non_private_static_fields.applicable_kinds = field\ndotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected\ndotnet_naming_symbols.non_private_static_fields.required_modifiers = static\n\ndotnet_naming_style.non_private_static_field_style.capitalization = pascal_case\n\n# Non-private readonly fields are PascalCase\ndotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields\ndotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style\n\ndotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field\ndotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected\ndotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly\n\ndotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case\n\n# Local functions are PascalCase\ndotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions\ndotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style\n\ndotnet_naming_symbols.local_functions.applicable_kinds = local_function\n\ndotnet_naming_style.local_function_style.capitalization = pascal_case\n\nfile_header_template = Copyright (C) 2015-2026 The Neo Project.\\n\\n{fileName} file belongs to the neo project and is free\\nsoftware distributed under the MIT software license, see the\\naccompanying file LICENSE in the main directory of the\\nrepository or http://www.opensource.org/licenses/mit-license.php\\nfor more details.\\n\\nRedistribution and use in source and binary forms with or without\\nmodifications are permitted.\n\n# Require file header\ndotnet_diagnostic.IDE0073.severity = warning\n\n# RS0016: Only enable if API files are present\ndotnet_public_api_analyzer.require_api_files = true\n\n# IDE0055: Fix formatting\n# Workaround for https://github.com/dotnet/roslyn/issues/70570\ndotnet_diagnostic.IDE0055.severity = warning\n\n# CSharp code style settings:\n[*.cs]\n# Newline settings\ncsharp_new_line_before_open_brace = all\ncsharp_new_line_before_else = true\ncsharp_new_line_before_catch = true\ncsharp_new_line_before_finally = true\ncsharp_new_line_before_members_in_object_initializers = true\ncsharp_new_line_before_members_in_anonymous_types = true\ncsharp_new_line_between_query_expression_clauses = true\n\n# Indentation preferences\ncsharp_indent_block_contents = true\ncsharp_indent_braces = false\ncsharp_indent_case_contents = true\ncsharp_indent_case_contents_when_block = true\ncsharp_indent_switch_labels = true\ncsharp_indent_labels = flush_left\n\n# Whitespace options\ncsharp_style_allow_embedded_statements_on_same_line_experimental = false\ncsharp_style_allow_blank_lines_between_consecutive_braces_experimental = false\ncsharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false\ncsharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = false\ncsharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = false\n\n# Prefer method-like constructs to have a block body\ncsharp_style_expression_bodied_methods = false:none\ncsharp_style_expression_bodied_constructors = false:none\ncsharp_style_expression_bodied_operators = false:none\n\n# Prefer property-like constructs to have an expression-body\ncsharp_style_expression_bodied_properties = true:none\ncsharp_style_expression_bodied_indexers = true:none\ncsharp_style_expression_bodied_accessors = true:none\n\n# IDE0230: Use UTF-8 string literal\ncsharp_style_prefer_utf8_string_literals = true:silent\n\n# Suggest more modern language features when available\ncsharp_style_pattern_matching_over_is_with_cast_check = true:suggestion\ncsharp_style_pattern_matching_over_as_with_null_check = true:suggestion\ncsharp_style_inlined_variable_declaration = true:suggestion\ncsharp_style_throw_expression = true:suggestion\ncsharp_style_conditional_delegate_call = true:suggestion\ncsharp_style_prefer_extended_property_pattern = true:suggestion\n\n# Space preferences\ncsharp_space_after_cast = false\ncsharp_space_after_colon_in_inheritance_clause = true\ncsharp_space_after_comma = true\ncsharp_space_after_dot = false\ncsharp_space_after_keywords_in_control_flow_statements = true\ncsharp_space_after_semicolon_in_for_statement = true\ncsharp_space_around_binary_operators = before_and_after\ncsharp_space_around_declaration_statements = do_not_ignore\ncsharp_space_before_colon_in_inheritance_clause = true\ncsharp_space_before_comma = false\ncsharp_space_before_dot = false\ncsharp_space_before_open_square_brackets = false\ncsharp_space_before_semicolon_in_for_statement = false\ncsharp_space_between_empty_square_brackets = false\ncsharp_space_between_method_call_empty_parameter_list_parentheses = false\ncsharp_space_between_method_call_name_and_opening_parenthesis = false\ncsharp_space_between_method_call_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_empty_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_name_and_open_parenthesis = false\ncsharp_space_between_method_declaration_parameter_list_parentheses = false\ncsharp_space_between_parentheses = false\ncsharp_space_between_square_brackets = false\n\n# Blocks are allowed\ncsharp_prefer_braces = true:silent\ncsharp_preserve_single_line_blocks = true\ncsharp_preserve_single_line_statements = true\n\n# IDE0060: Remove unused parameter\ndotnet_diagnostic.IDE0060.severity = none\n\n[src/{Analyzers,CodeStyle,Features,Workspaces,EditorFeatures,VisualStudio}/**/*.{cs,vb}]\n\n# Avoid \"this.\" and \"Me.\" if not necessary\ndotnet_diagnostic.IDE0003.severity = warning\ndotnet_diagnostic.IDE0009.severity = warning\n\n# IDE0011: Add braces\ncsharp_prefer_braces = when_multiline:warning\n# NOTE: We need the below severity entry for Add Braces due to https://github.com/dotnet/roslyn/issues/44201\ndotnet_diagnostic.IDE0011.severity = warning\n\n# IDE0040: Add accessibility modifiers\ndotnet_diagnostic.IDE0040.severity = warning\n\n# IDE0052: Remove unread private member\ndotnet_diagnostic.IDE0052.severity = warning\n\n# IDE0059: Unnecessary assignment to a value\ndotnet_diagnostic.IDE0059.severity = warning\n\n# Use collection expression for array\ndotnet_diagnostic.IDE0300.severity = warning\n\n# CA1012: Abstract types should not have public constructors\ndotnet_diagnostic.CA1012.severity = warning\n\n# CA1822: Make member static\ndotnet_diagnostic.CA1822.severity = warning\n\n# csharp_style_allow_embedded_statements_on_same_line_experimental\ndotnet_diagnostic.IDE2001.severity = warning\n\n# csharp_style_allow_blank_lines_between_consecutive_braces_experimental\ndotnet_diagnostic.IDE2002.severity = warning\n\n# csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental\ndotnet_diagnostic.IDE2004.severity = warning\n\n# csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental\ndotnet_diagnostic.IDE2005.severity = warning\n\n# csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental\ndotnet_diagnostic.IDE2006.severity = warning\n\n[src/{VisualStudio}/**/*.{cs,vb}]\n# CA1822: Make member static\n# There is a risk of accidentally breaking an internal API that partners rely on though IVT.\ndotnet_code_quality.CA1822.api_surface = private\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "content": "name: .NET Core Test and Publish\n\non:\n  push:\n    branches: [master]\n  pull_request:\n\nenv:\n  DOTNET_VERSION: 10.0.x\n\njobs:\n\n  Test:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n    - name: Setup .NET Core\n      uses: actions/setup-dotnet@v5\n      with:\n        dotnet-version: |\n          ${{ env.DOTNET_VERSION }}\n    - name: Check format\n      run: |\n        dotnet format --verify-no-changes --verbosity diagnostic\n    - name: Test\n      run: |\n        find tests -name *.csproj | xargs -I % dotnet add % package coverlet.msbuild\n        dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=lcov /p:CoverletOutput=${GITHUB_WORKSPACE}/coverage/lcov\n    - name: Codecov\n      uses: codecov/codecov-action@v6\n      with:\n        token: ${{ secrets.CODECOV_TOKEN }}\n        files: ${{ github.workspace }}/TestResults/coverage/coverage.info\n        fail_ci_if_error: false\n\n  PublishMyGet:\n    if: github.ref == 'refs/heads/master' && startsWith(github.repository, 'neo-project/')\n    needs: Test\n    runs-on: ubuntu-latest\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n      with:\n        fetch-depth: 0\n    - name: Setup .NET Core\n      uses: actions/setup-dotnet@v5\n      with:\n        dotnet-version: ${{ env.DOTNET_VERSION }}\n    - name: Pack with dotnet\n      run: git rev-list --count HEAD |xargs printf \"CI%05d\" |xargs dotnet pack -c Debug -o out --include-source --version-suffix\n    - name: Publish to MyGet\n      run: dotnet nuget push out/*.nupkg -s https://www.myget.org/F/neo/api/v2/package -k ${MYGET_TOKEN} -ss https://www.myget.org/F/neo/symbols/api/v2/package -sk ${MYGET_TOKEN}\n      env:\n        MYGET_TOKEN: ${{ secrets.MYGET_TOKEN }}\n\n  Release:\n    if: github.ref == 'refs/heads/master' && startsWith(github.repository, 'neo-project/')\n    needs: Test\n    runs-on: ubuntu-latest\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n    - name: Get version\n      id: get_version\n      run: |\n        sudo apt install xmlstarlet\n        find src -name *.csproj | xargs xmlstarlet sel -t -v \"concat('version=v',//Version/text())\" | xargs echo >> $GITHUB_OUTPUT\n    - name: Check tag\n      if: steps.get_version.outputs.version != 'v' && startsWith(steps.get_version.outputs.version, 'v')\n      id: check_tag\n      run: curl -s -I ${{ format('https://github.com/{0}/releases/tag/{1}', github.repository, steps.get_version.outputs.version) }} | head -n 1 | cut -d$' ' -f2 | xargs printf \"statusCode=%s\" | xargs echo >> $GITHUB_OUTPUT\n    - name: Create release\n      if: steps.check_tag.outputs.statusCode == '404'\n      id: create_release\n      uses: actions/create-release@v1\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      with:\n        tag_name: ${{ steps.get_version.outputs.version }}\n        release_name: ${{ steps.get_version.outputs.version }}\n        prerelease: ${{ contains(steps.get_version.outputs.version, '-') }}\n    - name: Setup .NET Core\n      if: steps.check_tag.outputs.statusCode == '404'\n      uses: actions/setup-dotnet@v5\n      with:\n        dotnet-version: ${{ env.DOTNET_VERSION }}\n    - name: Publish to NuGet\n      if: steps.check_tag.outputs.statusCode == '404'\n      run: |\n        dotnet pack -o out -c Release\n        dotnet nuget push out/*.nupkg -s https://api.nuget.org/v3/index.json -k ${NUGET_TOKEN}\n      env:\n        NUGET_TOKEN: ${{ secrets.NUGET_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015 cache/options directory\n.vs/\n# Git worktrees (project-local)\n.worktrees/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# DNX\nproject.lock.json\nartifacts/\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n# NuGet v3's project.json files produces more ignoreable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\norleans.codegen.cs\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2016 \n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<a href=\"https://neo.org/\"><img src=\"https://neo3.azureedge.net/images/logo%20files-dark.svg\" width=\"250px\" alt=\"neo-logo\"></a>\n\n# NeoVM — The NEO Virtual Machine\n\n[![NuGet](https://img.shields.io/nuget/v/Neo.VM.svg)](https://www.nuget.org/packages/Neo.VM/)\n[![Coverage Status](https://coveralls.io/repos/github/neo-project/neo-vm/badge.svg)](https://coveralls.io/github/neo-project/neo-vm)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\nNeoVM is the lightweight, deterministic, stack-based virtual machine that executes Neo smart contracts. It’s designed to be embeddable, predictable, and portable across platforms. For an overview and deep dives (architecture, stacks, instruction set), see the official developer docs. ([NEO Developer Resource](https://developers.neo.org/docs/n3/foundation/neovm))\n\n---\n\n## Features\n\n* **Deterministic & Turing-complete** execution for smart contracts.\n* **Small, embeddable runtime** suitable for host applications beyond the Neo blockchain.\n* **Clear isolation boundary**: external effects are provided by the host via an interop/syscall layer (e.g., ApplicationEngine in Neo).\n* **Rich instruction set** (control flow, stacks, arithmetic, crypto, data structures).\n\n---\n\n## Packages\n\nThe VM is published as a NuGet package:\n\n```\ndotnet add package Neo.VM\n```\n\nThis adds the VM to your project; you can then embed and drive it from your host application.\n\nTargets **.NET 10.0** and **.NET Standard 2.1** (compatible with a wide range of runtimes).\n\n---\n\n## Contributing\n\nContributions are welcome! Typical flow:\n\n1. Fork the repo and create a feature branch.\n2. Make changes with tests (`tests/Neo.VM.Tests`).\n3. Ensure `dotnet test` passes and follow standard C# conventions.\n4. Open a pull request with a clear description and rationale.\n\n---\n\n## See also\n\n* **neo (core library)** — base classes, ledger, P2P, IO. ([Github](https://github.com/neo-project/neo))\n* **neo-devpack-dotnet** — C# → NeoVM compiler and developer toolkit. ([Github](https://github.com/neo-project/neo-devpack-dotnet))\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/Benchmarks.POC.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Benchmarks.POC.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing BenchmarkDotNet.Attributes;\nusing System.Diagnostics;\n\nnamespace Neo.VM.Benchmarks;\n\npublic class Benchmarks_PoCs\n{\n    [Benchmark]\n    public static void NeoIssue2528()\n    {\n        // https://github.com/neo-project/neo/issues/2528\n        // L01: INITSLOT 1, 0\n        // L02: NEWARRAY0\n        // L03: DUP\n        // L04: DUP\n        // L05: PUSHINT16 2043\n        // L06: STLOC 0\n        // L07: PUSH1\n        // L08: PACK\n        // L09: LDLOC 0\n        // L10: DEC\n        // L11: STLOC 0\n        // L12: LDLOC 0\n        // L13: JMPIF_L L07\n        // L14: PUSH1\n        // L15: PACK\n        // L16: APPEND\n        // L17: PUSHINT32 38000\n        // L18: STLOC 0\n        // L19: PUSH0\n        // L20: PICKITEM\n        // L21: LDLOC 0\n        // L22: DEC\n        // L23: STLOC 0\n        // L24: LDLOC 0\n        // L25: JMPIF_L L19\n        // L26: DROP\n        Run(\"VwEAwkpKAfsHdwARwG8AnXcAbwAl9////xHAzwJwlAAAdwAQzm8AnXcAbwAl9////0U=\");\n    }\n\n    [Benchmark]\n    public static void NeoVMIssue418()\n    {\n        // https://github.com/neo-project/neo-vm/issues/418\n        // L00: NEWARRAY0\n        // L01: PUSH0\n        // L02: PICK\n        // L03: PUSH1\n        // L04: PACK\n        // L05: PUSH1\n        // L06: PICK\n        // L07: PUSH1\n        // L08: PACK\n        // L09: INITSSLOT 1\n        // L10: PUSHINT16 510\n        // L11: DEC\n        // L12: STSFLD0\n        // L13: PUSH1\n        // L14: PICK\n        // L15: PUSH1\n        // L16: PICK\n        // L17: PUSH2\n        // L18: PACK\n        // L19: REVERSE3\n        // L20: PUSH2\n        // L21: PACK\n        // L22: LDSFLD0\n        // L23: DUP\n        // L24: JMPIF L11\n        // L25: DROP\n        // L26: ROT\n        // L27: DROP\n        Run(\"whBNEcARTRHAVgEB/gGdYBFNEU0SwFMSwFhKJPNFUUU=\");\n    }\n\n    [Benchmark]\n    public static void NeoIssue2723()\n    {\n        // L00: INITSSLOT 1\n        // L01: PUSHINT32 130000\n        // L02: STSFLD 0\n        // L03: PUSHINT32 1048576\n        // L04: NEWBUFFER\n        // L05: DROP\n        // L06: LDSFLD 0\n        // L07: DEC\n        // L08: DUP\n        // L09: STSFLD 0\n        // L10: JMPIF L03\n        Run(\"VgEC0PsBAGcAAgAAEACIRV8AnUpnACTz\");\n    }\n\n    // Below are PoCs from issue https://github.com/neo-project/neo/issues/2723 by @dusmart\n    [Benchmark]\n    public static void PoC_NewBuffer()\n    {\n        // INITSLOT 0100\n        // PUSHINT32 23000000\n        // STLOC 00\n        // PUSHINT32 1048576\n        // NEWBUFFER\n        // DROP\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f2ffffff\n        // CLEAR\n        // RET\n        Run(\"VwEAAsDzXgF3AAIAABAAiEVvAJ13AG8AJfL///9JQA==\");\n    }\n\n    [Benchmark]\n    public static void PoC_Cat()\n    {\n        // INITSLOT 0100\n        // PUSHINT32 1048575\n        // NEWBUFFER\n        // PUSH1\n        // NEWBUFFER\n        // PUSHINT32 133333337\n        // STLOC 00\n        // OVER\n        // OVER\n        // CAT\n        // DROP\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f5ffffff\n        // CLEAR\n        // RET\n        Run(\"VwEAAv//DwCIEYgCWYHyB3cAS0uLRW8AnXcAbwAl9f///0lA\");\n    }\n\n    [Benchmark]\n    public static void PoC_Left()\n    {\n        // INITSLOT 0100\n        // PUSHINT32 1048576\n        // NEWBUFFER\n        // PUSHINT32 133333337\n        // STLOC 00\n        // DUP\n        // PUSHINT32 1048576\n        // LEFT\n        // DROP\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f1ffffff\n        // CLEAR\n        // RET\n        Run(\"VwEAAgAAEACIAlmB8gd3AEoCAAAQAI1FbwCddwBvACXx////SUA=\");\n    }\n\n    [Benchmark]\n    public static void PoC_Right()\n    {\n        // INITSLOT 0100\n        // PUSHINT32 1048576\n        // NEWBUFFER\n        // PUSHINT32 133333337\n        // STLOC 00\n        // DUP\n        // PUSHINT32 1048576\n        // RIGHT\n        // DROP\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f1ffffff\n        // CLEAR\n        // RET\n        Run(\"VwEAAgAAEACIAlmB8gd3AEoCAAAQAI5FbwCddwBvACXx////SUA=\");\n    }\n\n    [Benchmark]\n    public static void PoC_ReverseN()\n    {\n        // INITSLOT 0100\n        // PUSHINT16 2040\n        // STLOC 00\n        // PUSHDATA1 aaabbbbbbbbbcccccccdddddddeeeeeeefffffff\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L cfffffff\n        // PUSHINT32 23000000\n        // STLOC 00\n        // PUSHINT16 2040\n        // REVERSEN\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f5ffffff\n        // CLEAR\n        // RET\n        Run(\"VwEAAfgHdwAMKGFhYWJiYmJiYmJiYmNjY2NjY2NkZGRkZGRkZWVlZWVlZWZmZmZmZmZvAJ13AG8AJc////8CwPNeAXcAAfgHVW8AnXcAbwAl9f///0lA\");\n    }\n\n    [Benchmark]\n    public static void PoC_Substr()\n    {\n        // INITSLOT 0100\n        // PUSHINT32 1048576\n        // NEWBUFFER\n        // PUSHINT32 133333337\n        // STLOC 00\n        // DUP\n        // PUSH0\n        // PUSHINT32 1048576\n        // SUBSTR\n        // DROP\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f0ffffff\n        // CLEAR\n        // RET\n        Run(\"VwEAAgAAEACIAlmB8gd3AEoQAgAAEACMRW8AnXcAbwAl8P///0lA\");\n    }\n\n    [Benchmark]\n    public static void PoC_NewArray()\n    {\n        // INITSLOT 0100\n        // PUSHINT32 1333333337\n        // STLOC 00\n        // PUSHINT16 2040\n        // NEWARRAY\n        // DROP\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f4ffffff\n        // RET\n        Run(\"VwEAAlkNeU93AAH4B8NFbwCddwBvACX0////QA==\");\n    }\n\n    [Benchmark]\n    public static void PoC_NewStruct()\n    {\n        // INITSLOT 0100\n        // PUSHINT32 1333333337\n        // STLOC 00\n        // PUSHINT16 2040\n        // NEWSTRUCT\n        // DROP\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f4ffffff\n        // RET\n        Run(\"VwEAAlkNeU93AAH4B8ZFbwCddwBvACX0////QA==\");\n    }\n\n    [Benchmark]\n    public static void PoC_Roll()\n    {\n        // INITSLOT 0100\n        // PUSHINT16 2040\n        // STLOC 00\n        // PUSHDATA1 aaabbbbbbbbbcccccccdddddddeeeeeeefffffff\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L cfffffff\n        // PUSHINT32 23000000\n        // STLOC 00\n        // PUSHINT16 2039\n        // ROLL\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f5ffffff\n        // CLEAR\n        // RET\n        Run(\"VwEAAfgHdwAMKGFhYWJiYmJiYmJiYmNjY2NjY2NkZGRkZGRkZWVlZWVlZWZmZmZmZmZvAJ13AG8AJc////8CwPNeAXcAAfcHUm8AnXcAbwAl9f///0lA\");\n    }\n\n    [Benchmark]\n    public static void PoC_XDrop()\n    {\n        // INITSLOT 0100\n        // PUSHINT16 2040\n        // STLOC 00\n        // PUSHDATA1 aaabbbbbbbbbcccccccdddddddeeeeeeefffffff\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L cfffffff\n        // PUSHINT32 23000000\n        // STLOC 00\n        // PUSHINT16 2039\n        // XDROP\n        // DUP\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f4ffffff\n        // CLEAR\n        // RET\n        Run(\"VwEAAfgHdwAMKGFhYWJiYmJiYmJiYmNjY2NjY2NkZGRkZGRkZWVlZWVlZWZmZmZmZmZvAJ13AG8AJc////8CwPNeAXcAAfcHSEpvAJ13AG8AJfT///9JQA==\");\n    }\n\n    [Benchmark]\n    public static void PoC_MemCpy()\n    {\n        // INITSLOT 0100\n        // PUSHINT32 1048576\n        // NEWBUFFER\n        // PUSHINT32 1048576\n        // NEWBUFFER\n        // PUSHINT32 133333337\n        // STLOC 00\n        // OVER\n        // PUSH0\n        // PUSH2\n        // PICK\n        // PUSH0\n        // PUSHINT32 1048576\n        // MEMCPY\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L eeffffff\n        // CLEAR\n        // RET\n        Run(\"VwEAAgAAEACIAgAAEACIAlmB8gd3AEsQEk0QAgAAEACJbwCddwBvACXu////SUA=\");\n    }\n\n    [Benchmark]\n    public static void PoC_Unpack()\n    {\n        // INITSLOT 0200\n        // PUSHINT16 1010\n        // NEWARRAY\n        // STLOC 01\n        // PUSHINT32 1333333337\n        // STLOC 00\n        // LDLOC 01\n        // UNPACK\n        // CLEAR\n        // LDLOC 00\n        // DEC\n        // STLOC 00\n        // LDLOC 00\n        // JMPIF_L f5ffffff\n        // RET\n        Run(\"VwIAAfIDw3cBAlkNeU93AG8BwUlvAJ13AG8AJfX///9A\");\n    }\n\n    [Benchmark]\n    public static void PoC_GetScriptContainer()\n    {\n        // SYSCALL System.Runtime.GetScriptContainer\n        // DROP\n        // JMP fa\n        Run(\"QS1RCDBFIvo=\");\n    }\n\n    private static void Run(string poc)\n    {\n        byte[] script = Convert.FromBase64String(poc);\n        using ExecutionEngine engine = new();\n        engine.LoadScript(script);\n        engine.Execute();\n\n        Debug.Assert(engine.State == VMState.HALT);\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/Benchmarks_VMHotPaths.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Benchmarks_VMHotPaths.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing BenchmarkDotNet.Attributes;\nusing Neo.VM.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing VMArray = Neo.VM.Types.Array;\n\nnamespace Neo.VM.Benchmarks;\n\npublic class Benchmarks_ArrayBuild\n{\n    [Params(1, 8, 32, 256, 1024)]\n    public int N { get; set; }\n\n    private static readonly StackItem Item = StackItem.Null;\n\n    [Benchmark]\n    public VMArray BuildWithListFill()\n    {\n        var referenceCounter = new ReferenceCounter();\n        var items = new List<StackItem>(N);\n        for (int i = 0; i < N; i++)\n            items.Add(Item);\n        return new VMArray(referenceCounter, items);\n    }\n\n    [Benchmark]\n    public VMArray BuildWithArrayFill()\n    {\n        var referenceCounter = new ReferenceCounter();\n        var itemArray = new StackItem[N];\n        System.Array.Fill(itemArray, Item);\n        return new VMArray(referenceCounter, itemArray);\n    }\n}\n\npublic class Benchmarks_MapSubItems\n{\n    [Params(1, 8, 32, 256, 1024)]\n    public int N { get; set; }\n\n    private Map _map = null!;\n\n    [GlobalSetup]\n    public void Setup()\n    {\n        _map = new Map();\n        for (int i = 0; i < N; i++)\n            _map[new Integer(i)] = new Integer(i + 1);\n    }\n\n    [Benchmark]\n    public int EnumerateYield()\n    {\n        int count = 0;\n        foreach (var _ in SubItemsYield(_map))\n            count++;\n        return count;\n    }\n\n    [Benchmark]\n    public int EnumerateConcat()\n    {\n        int count = 0;\n        foreach (var _ in SubItemsConcat(_map))\n            count++;\n        return count;\n    }\n\n    private static IEnumerable<StackItem> SubItemsYield(Map map)\n    {\n        foreach (var key in map.Keys)\n            yield return key;\n        foreach (var value in map.Values)\n            yield return value;\n    }\n\n    private static IEnumerable<StackItem> SubItemsConcat(Map map) => map.Keys.Concat(map.Values);\n}\n\npublic class Benchmarks_ListCopy\n{\n    private const int SourceCount = 4096;\n\n    [Params(1, 8, 32, 256, 1024, 2048)]\n    public int CopyCount { get; set; }\n\n    private List<StackItem> _source = null!;\n    private List<StackItem> _target = null!;\n\n    [GlobalSetup]\n    public void Setup()\n    {\n        _source = new List<StackItem>(SourceCount);\n        for (int i = 0; i < SourceCount; i++)\n            _source.Add(StackItem.Null);\n        _target = new List<StackItem>(CopyCount);\n    }\n\n    [Benchmark]\n    public int AddRangeSkip()\n    {\n        _target.Clear();\n        _target.AddRange(_source.Skip(_source.Count - CopyCount));\n        return _target.Count;\n    }\n\n    [Benchmark]\n    public int ManualLoop()\n    {\n        _target.Clear();\n        int start = _source.Count - CopyCount;\n        for (int i = start; i < _source.Count; i++)\n            _target.Add(_source[i]);\n        return _target.Count;\n    }\n}\n\npublic class Benchmarks_InstructionAdvance\n{\n    [Params(1024, 4096, 16384)]\n    public int InstructionCount { get; set; }\n\n    private Script _script = null!;\n    private ExecutionContext _context = null!;\n\n    [GlobalSetup]\n    public void Setup()\n    {\n        var bytes = new byte[InstructionCount];\n        System.Array.Fill(bytes, (byte)OpCode.PUSH0);\n        _script = new Script(bytes);\n        _context = new ExecutionContext(_script, 0, new ReferenceCounter());\n    }\n\n    [IterationSetup]\n    public void IterationSetup()\n    {\n        WarmInstructionCache();\n        _context.InstructionPointer = 0;\n    }\n\n    [Benchmark]\n    public Instruction? AdvanceWithMoveNext()\n    {\n        Instruction? last = null;\n        while (true)\n        {\n            last = _context.CurrentInstruction ?? Instruction.RET;\n            if (!_context.MoveNext()) break;\n        }\n        return last;\n    }\n\n    [Benchmark]\n    public Instruction? AdvanceWithPointer()\n    {\n        Instruction? last = null;\n        while (true)\n        {\n            var current = _context.CurrentInstruction;\n            if (current is null) break;\n            last = current;\n            _context.InstructionPointer += current.Size;\n        }\n        return last;\n    }\n\n    private void WarmInstructionCache()\n    {\n        while (true)\n        {\n            var current = _context.CurrentInstruction;\n            if (current is null) break;\n            _context.InstructionPointer += current.Size;\n        }\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/Builders/Helper.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Helper.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System.Buffers.Binary;\n\nnamespace Neo.VM.Benchmarks.Builders;\n\npublic static class Helper\n{\n    public static void RebuildOffsets(this IReadOnlyList<Instruction> instructions)\n    {\n        var offset = 0;\n        foreach (var instruction in instructions)\n        {\n            instruction._offset = offset;\n            offset += instruction.Size;\n        }\n    }\n\n    public static void RebuildOperands(this IReadOnlyList<Instruction> instructions)\n    {\n        foreach (var instruction in instructions)\n        {\n            if (instruction._target is null) continue;\n            bool isLong;\n            if (instruction._opCode >= OpCode.JMP && instruction._opCode <= OpCode.CALL_L)\n                isLong = (instruction._opCode - OpCode.JMP) % 2 != 0;\n            else\n                isLong = instruction._opCode == OpCode.PUSHA || instruction._opCode == OpCode.CALLA || instruction._opCode == OpCode.TRY_L || instruction._opCode == OpCode.ENDTRY_L;\n            if (instruction._opCode == OpCode.TRY || instruction._opCode == OpCode.TRY_L)\n            {\n                var offset1 = instruction._target._instruction?._offset - instruction._offset ?? 0;\n                var offset2 = instruction._target2!._instruction?._offset - instruction._offset ?? 0;\n                if (isLong)\n                {\n                    instruction._operand = new byte[sizeof(int) + sizeof(int)];\n                    BinaryPrimitives.WriteInt32LittleEndian(instruction._operand, offset1);\n                    BinaryPrimitives.WriteInt32LittleEndian(instruction._operand.AsSpan(sizeof(int)), offset2);\n                }\n                else\n                {\n                    instruction._operand = new byte[sizeof(sbyte) + sizeof(sbyte)];\n                    var sbyte1 = checked((sbyte)offset1);\n                    var sbyte2 = checked((sbyte)offset2);\n                    instruction._operand[0] = unchecked((byte)sbyte1);\n                    instruction._operand[1] = unchecked((byte)sbyte2);\n                }\n            }\n            else\n            {\n                int offset = instruction._target._instruction!._offset - instruction._offset;\n                if (isLong)\n                {\n                    instruction._operand = BitConverter.GetBytes(offset);\n                }\n                else\n                {\n                    var sbyte1 = checked((sbyte)offset);\n                    instruction._operand = [unchecked((byte)sbyte1)];\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/Builders/Instruction.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Instruction.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.CodeAnalysis;\nusing System.Diagnostics;\nusing System.Reflection;\n\nnamespace Neo.VM.Benchmarks.Builders;\n\n[DebuggerDisplay(\"{_opCode}\")]\npublic class Instruction\n{\n    private static readonly int[] s_operandSizePrefixTable = new int[256];\n    private static readonly int[] s_operandSizeTable = new int[256];\n\n    public OpCode _opCode;\n    public byte[]? _operand;\n    public JumpTarget? _target;\n    public JumpTarget? _target2;\n    public int _offset;\n\n    public int Size\n    {\n        get\n        {\n            int prefixSize = s_operandSizePrefixTable[(int)_opCode];\n            return prefixSize > 0\n                ? sizeof(OpCode) + _operand!.Length\n                : sizeof(OpCode) + s_operandSizeTable[(int)_opCode];\n        }\n    }\n\n    static Instruction()\n    {\n        foreach (var field in typeof(OpCode).GetFields(BindingFlags.Public | BindingFlags.Static))\n        {\n            var attribute = field.GetCustomAttribute<OperandSizeAttribute>();\n            if (attribute is null) continue;\n            var index = (int)(OpCode)field.GetValue(null)!;\n            s_operandSizePrefixTable[index] = attribute.SizePrefix;\n            s_operandSizeTable[index] = attribute.Size;\n        }\n    }\n\n    public byte[] ToArray()\n    {\n        if (_operand is null) return [(byte)_opCode];\n        return _operand.Prepend((byte)_opCode).ToArray();\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/Builders/InstructionBuilder.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// InstructionBuilder.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System.Buffers.Binary;\nusing System.Numerics;\n\nnamespace Neo.VM.Benchmarks.Builders;\n\ninternal class InstructionBuilder\n{\n    private readonly List<Instruction> _instructions = new();\n\n    public InstructionBuilder() { }\n\n    internal Instruction AddInstruction(Instruction instruction)\n    {\n        _instructions.Add(instruction);\n        return instruction;\n    }\n\n    internal Instruction AddInstruction(OpCode opcode)\n    {\n        return AddInstruction(new Instruction\n        {\n            _opCode = opcode\n        });\n    }\n\n    internal Instruction Jump(OpCode opcode, JumpTarget target)\n    {\n        return AddInstruction(new Instruction\n        {\n            _opCode = opcode,\n            _target = target\n        });\n    }\n\n    internal void Push(bool value)\n    {\n        AddInstruction(value ? OpCode.PUSHT : OpCode.PUSHF);\n    }\n\n    internal Instruction Ret() => AddInstruction(OpCode.RET);\n\n    internal Instruction Push(BigInteger number)\n    {\n        if (number >= -1 && number <= 16) return AddInstruction(number == -1 ? OpCode.PUSHM1 : OpCode.PUSH0 + (byte)(int)number);\n        Span<byte> buffer = stackalloc byte[32];\n        if (!number.TryWriteBytes(buffer, out var bytesWritten, isUnsigned: false, isBigEndian: false))\n            throw new ArgumentOutOfRangeException(nameof(number));\n        var instruction = bytesWritten switch\n        {\n            1 => new Instruction\n            {\n                _opCode = OpCode.PUSHINT8,\n                _operand = PadRight(buffer, bytesWritten, 1, number.Sign < 0).ToArray()\n            },\n            2 => new Instruction\n            {\n                _opCode = OpCode.PUSHINT16,\n                _operand = PadRight(buffer, bytesWritten, 2, number.Sign < 0).ToArray()\n            },\n            <= 4 => new Instruction\n            {\n                _opCode = OpCode.PUSHINT32,\n                _operand = PadRight(buffer, bytesWritten, 4, number.Sign < 0).ToArray()\n            },\n            <= 8 => new Instruction\n            {\n                _opCode = OpCode.PUSHINT64,\n                _operand = PadRight(buffer, bytesWritten, 8, number.Sign < 0).ToArray()\n            },\n            <= 16 => new Instruction\n            {\n                _opCode = OpCode.PUSHINT128,\n                _operand = PadRight(buffer, bytesWritten, 16, number.Sign < 0).ToArray()\n            },\n            <= 32 => new Instruction\n            {\n                _opCode = OpCode.PUSHINT256,\n                _operand = PadRight(buffer, bytesWritten, 32, number.Sign < 0).ToArray()\n            },\n            _ => throw new ArgumentOutOfRangeException($\"Number too large: {bytesWritten}\")\n        };\n        AddInstruction(instruction);\n        return instruction;\n    }\n\n    internal Instruction Push(string s)\n    {\n        return Push(s.ToStrictUtf8Bytes());\n    }\n\n    internal Instruction Push(byte[] data)\n    {\n        OpCode opcode;\n        byte[] buffer;\n        switch (data.Length)\n        {\n            case <= byte.MaxValue:\n                opcode = OpCode.PUSHDATA1;\n                buffer = new byte[sizeof(byte) + data.Length];\n                buffer[0] = (byte)data.Length;\n                Buffer.BlockCopy(data, 0, buffer, sizeof(byte), data.Length);\n                break;\n            case <= ushort.MaxValue:\n                opcode = OpCode.PUSHDATA2;\n                buffer = new byte[sizeof(ushort) + data.Length];\n                BinaryPrimitives.WriteUInt16LittleEndian(buffer, (ushort)data.Length);\n                Buffer.BlockCopy(data, 0, buffer, sizeof(ushort), data.Length);\n                break;\n            default:\n                opcode = OpCode.PUSHDATA4;\n                buffer = new byte[sizeof(uint) + data.Length];\n                BinaryPrimitives.WriteUInt32LittleEndian(buffer, (uint)data.Length);\n                Buffer.BlockCopy(data, 0, buffer, sizeof(uint), data.Length);\n                break;\n        }\n        return AddInstruction(new Instruction\n        {\n            _opCode = opcode,\n            _operand = buffer\n        });\n    }\n\n    internal void Push(object? obj)\n    {\n        switch (obj)\n        {\n            case bool data:\n                Push(data);\n                break;\n            case byte[] data:\n                Push(data);\n                break;\n            case string data:\n                Push(data);\n                break;\n            case BigInteger data:\n                Push(data);\n                break;\n            case char data:\n                Push((ushort)data);\n                break;\n            case sbyte data:\n                Push(data);\n                break;\n            case byte data:\n                Push(data);\n                break;\n            case short data:\n                Push(data);\n                break;\n            case ushort data:\n                Push(data);\n                break;\n            case int data:\n                Push(data);\n                break;\n            case uint data:\n                Push(data);\n                break;\n            case long data:\n                Push(data);\n                break;\n            case ulong data:\n                Push(data);\n                break;\n            case Enum data:\n                Push(BigInteger.Parse(data.ToString(\"d\")));\n                break;\n            case null:\n                AddInstruction(OpCode.PUSHNULL);\n                break;\n            default:\n                throw new NotSupportedException($\"Unsupported constant value: {obj}\");\n        }\n    }\n\n    // Helper method to reverse stack items\n    internal void ReverseStackItems(int count)\n    {\n        switch (count)\n        {\n            case 2:\n                AddInstruction(OpCode.SWAP);\n                break;\n            case 3:\n                AddInstruction(OpCode.REVERSE3);\n                break;\n            case 4:\n                AddInstruction(OpCode.REVERSE4);\n                break;\n            default:\n                Push(count);\n                AddInstruction(OpCode.REVERSEN);\n                break;\n        }\n    }\n\n    internal static ReadOnlySpan<byte> PadRight(Span<byte> buffer, int dataLength, int padLength, bool negative)\n    {\n        byte pad = negative ? (byte)0xff : (byte)0;\n        for (int x = dataLength; x < padLength; x++)\n            buffer[x] = pad;\n        return buffer[..padLength];\n    }\n\n    internal Instruction IsType(Types.StackItemType type)\n    {\n        return AddInstruction(new Instruction\n        {\n            _opCode = OpCode.ISTYPE,\n            _operand = [(byte)type]\n        });\n    }\n\n    internal Instruction ChangeType(Types.StackItemType type)\n    {\n        return AddInstruction(new Instruction\n        {\n            _opCode = OpCode.CONVERT,\n            _operand = [(byte)type]\n        });\n    }\n\n    internal byte[] ToArray()\n    {\n        var instructions = _instructions.ToArray();\n        instructions.RebuildOffsets();\n        instructions.RebuildOperands();\n        return instructions.Select(p => p.ToArray()).SelectMany(p => p).ToArray();\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/Builders/JumpTarget.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTarget.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nnamespace Neo.VM.Benchmarks.Builders;\n\npublic class JumpTarget\n{\n    public Instruction? _instruction;\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/Neo.VM.Benchmarks.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <OutputType>Exe</OutputType>\r\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <Nullable>enable</Nullable>\r\n    <IsPackable>false</IsPackable>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"BenchmarkDotNet\" Version=\"0.15.8\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\src\\Neo.VM\\Neo.VM.csproj\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/OpCodes/Arrays/OpCode.ReverseN.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// OpCode.ReverseN.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Benchmarks.Builders;\n\nnamespace Neo.VM.Benchmarks.OpCodes.Arrays;\n\npublic class OpCode_ReverseN : OpCodeBase\n{\n    protected override byte[] CreateScript(BenchmarkMode benchmarkMode)\n    {\n        var builder = new InstructionBuilder();\n        var initBegin = new JumpTarget();\n        builder.AddInstruction(new Builders.Instruction { _opCode = OpCode.INITSLOT, _operand = [1, 0] });\n        builder.Push(ItemCount);\n        builder.AddInstruction(OpCode.STLOC0);\n        initBegin._instruction = builder.AddInstruction(OpCode.NOP);\n        builder.Push(0);\n        builder.AddInstruction(OpCode.LDLOC0);\n        builder.AddInstruction(OpCode.DEC);\n        builder.AddInstruction(OpCode.STLOC0);\n        builder.AddInstruction(OpCode.LDLOC0);\n        builder.Jump(OpCode.JMPIF, initBegin);\n        if (benchmarkMode == BenchmarkMode.BaseLine)\n        {\n            return builder.ToArray();\n        }\n        builder.Push(ItemCount);\n        builder.AddInstruction(OpCode.REVERSEN);\n        if (benchmarkMode == BenchmarkMode.OneGAS)\n        {\n            // just keep running until GAS is exhausted\n            var loopStart = new JumpTarget { _instruction = builder.AddInstruction(OpCode.NOP) };\n            builder.Push(ItemCount);\n            builder.AddInstruction(OpCode.REVERSEN);\n            builder.Jump(OpCode.JMP, loopStart);\n        }\n\n        return builder.ToArray();\n    }\n}\n\n// for 0\n\n// BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.4249/23H2/2023Update/SunValley3)\n// Intel Core i9-14900HX, 1 CPU, 32 logical and 24 physical cores\n// .NET SDK 8.0.205\n//   [Host]     : .NET 8.0.5 (8.0.524.21615), X64 RyuJIT AVX2\n//   DefaultJob : .NET 8.0.5 (8.0.524.21615), X64 RyuJIT AVX2\n//\n//\n// | Method               | ItemCount | Mean             | Error         | StdDev         | Median           | Ratio     | RatioSD  |\n// |--------------------- |---------- |-----------------:|--------------:|---------------:|-----------------:|----------:|---------:|\n// | Bench_ReverseN       | 1         |         63.43 us |      0.466 us |       0.518 us |         63.45 us |      0.99 |     0.01 |\n// | Bench_OneGasReverseN | 1         |    403,904.11 us |  6,492.511 us |   6,073.099 us |    402,932.40 us |  6,315.67 |    89.44 |\n// | Bench_BaseLine       | 1         |         63.96 us |      0.763 us |       0.714 us |         63.92 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 2         |         62.55 us |      0.988 us |       0.924 us |         62.46 us |      0.95 |     0.02 |\n// | Bench_OneGasReverseN | 2         |    424,297.10 us |  8,453.137 us |   7,493.486 us |    423,912.90 us |  6,446.21 |   118.35 |\n// | Bench_BaseLine       | 2         |         65.83 us |      0.845 us |       0.749 us |         65.95 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 4         |         63.93 us |      0.418 us |       0.371 us |         63.89 us |      0.95 |     0.03 |\n// | Bench_OneGasReverseN | 4         |    443,708.92 us |  6,689.013 us |   6,256.907 us |    444,636.60 us |  6,560.69 |   229.86 |\n// | Bench_BaseLine       | 4         |         67.64 us |      1.281 us |       1.524 us |         67.79 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 8         |         66.69 us |      0.757 us |       0.671 us |         66.69 us |      1.00 |     0.02 |\n// | Bench_OneGasReverseN | 8         |    463,571.38 us |  6,614.687 us |   6,187.382 us |    465,568.00 us |  6,963.59 |    85.80 |\n// | Bench_BaseLine       | 8         |         66.64 us |      0.870 us |       0.771 us |         66.68 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 16        |         65.85 us |      0.994 us |       0.929 us |         65.61 us |      0.94 |     0.02 |\n// | Bench_OneGasReverseN | 16        |    740,905.55 us | 71,090.901 us | 209,613.127 us |    653,644.75 us |  9,341.86 | 3,092.85 |\n// | Bench_BaseLine       | 16        |         70.08 us |      1.376 us |       1.638 us |         70.15 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 32        |         66.47 us |      0.928 us |       2.187 us |         65.77 us |      1.02 |     0.04 |\n// | Bench_OneGasReverseN | 32        |    631,596.65 us | 11,060.847 us |  10,346.323 us |    629,654.10 us |  9,360.06 |   221.36 |\n// | Bench_BaseLine       | 32        |         67.49 us |      0.900 us |       0.842 us |         67.56 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 64        |         72.21 us |      0.921 us |       0.862 us |         72.05 us |      1.02 |     0.02 |\n// | Bench_OneGasReverseN | 64        |    787,570.95 us |  6,915.746 us |   6,468.994 us |    786,778.70 us | 11,090.76 |   177.74 |\n// | Bench_BaseLine       | 64        |         71.02 us |      0.946 us |       0.884 us |         71.06 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 128       |         80.17 us |      0.723 us |       0.676 us |         80.19 us |      0.98 |     0.01 |\n// | Bench_OneGasReverseN | 128       |  1,134,510.61 us | 14,991.714 us |  14,023.259 us |  1,133,177.90 us | 13,828.61 |   184.58 |\n// | Bench_BaseLine       | 128       |         81.90 us |      0.623 us |       0.553 us |         81.77 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 256       |         98.24 us |      1.140 us |       1.067 us |         98.05 us |      0.99 |     0.01 |\n// | Bench_OneGasReverseN | 256       |  1,785,906.33 us | 13,785.746 us |  12,895.195 us |  1,788,819.30 us | 18,067.20 |   198.87 |\n// | Bench_BaseLine       | 256       |         98.85 us |      0.961 us |       0.899 us |         98.95 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 512       |        136.19 us |      1.614 us |       1.510 us |        136.34 us |      1.02 |     0.02 |\n// | Bench_OneGasReverseN | 512       |  3,100,087.41 us | 16,564.249 us |  15,494.209 us |  3,097,066.60 us | 23,209.57 |   381.50 |\n// | Bench_BaseLine       | 512       |        133.60 us |      2.144 us |       2.006 us |        132.73 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 1024      |        207.06 us |      2.213 us |       2.070 us |        206.76 us |      1.01 |     0.01 |\n// | Bench_OneGasReverseN | 1024      |  5,762,294.72 us | 20,289.404 us |  16,942.572 us |  5,764,133.80 us | 28,109.14 |   349.87 |\n// | Bench_BaseLine       | 1024      |        205.07 us |      2.360 us |       2.208 us |        205.07 us |      1.00 |     0.00 |\n// |                      |           |                  |               |                |                  |           |          |\n// | Bench_ReverseN       | 2040      |        345.09 us |      4.271 us |       3.995 us |        345.40 us |      0.97 |     0.01 |\n// | Bench_OneGasReverseN | 2040      | 11,005,147.03 us | 37,306.455 us |  33,071.200 us | 11,003,479.70 us | 31,019.36 |   356.02 |\n// | Bench_BaseLine       | 2040      |        354.62 us |      4.623 us |       4.325 us |        353.32 us |      1.00 |     0.00 |\n\n\n\n// for StackItems that has a size of maximum stack size.\n// | Method               | ItemCount | Mean            | Error         | StdDev        |\n// |--------------------- |---------- |----------------:|--------------:|--------------:|\n// | Bench_ReverseN       | 1         |        104.0 us |       0.77 us |       0.72 us |\n// | Bench_OneGasReverseN | 1         |    389,585.4 us |   4,740.18 us |   4,433.96 us |\n// | Bench_ReverseN       | 2         |        148.3 us |       2.25 us |       2.10 us |\n// | Bench_OneGasReverseN | 2         |    417,831.5 us |   6,651.20 us |   6,221.53 us |\n// | Bench_ReverseN       | 4         |        231.8 us |       3.92 us |       3.67 us |\n// | Bench_OneGasReverseN | 4         |    428,442.6 us |   8,034.41 us |   7,515.39 us |\n// | Bench_ReverseN       | 8         |        387.8 us |       5.23 us |       4.89 us |\n// | Bench_OneGasReverseN | 8         |    448,046.9 us |   6,270.18 us |   5,235.89 us |\n// | Bench_ReverseN       | 16        |        240.0 us |       7.30 us |      21.53 us |\n// | Bench_OneGasReverseN | 16        |    522,904.3 us |   7,157.93 us |   6,695.54 us |\n// | Bench_ReverseN       | 32        |        302.4 us |       9.53 us |      27.79 us |\n// | Bench_OneGasReverseN | 32        |    626,536.6 us |   6,629.69 us |   6,201.42 us |\n// | Bench_ReverseN       | 64        |      1,728.3 us |      34.27 us |      58.19 us |\n// | Bench_OneGasReverseN | 64        |    827,284.5 us |  15,943.00 us |  14,913.09 us |\n// | Bench_ReverseN       | 128       |      3,704.5 us |      73.98 us |     175.82 us |\n// | Bench_OneGasReverseN | 128       |  1,125,104.6 us |  10,629.65 us |   9,942.98 us |\n// | Bench_ReverseN       | 256       |      6,381.1 us |     127.42 us |     290.21 us |\n// | Bench_OneGasReverseN | 256       |  1,804,355.7 us |   9,690.50 us |   8,590.37 us |\n// | Bench_ReverseN       | 512       |      9,485.9 us |     184.52 us |     492.52 us |\n// | Bench_OneGasReverseN | 512       |  3,159,411.1 us |  28,901.54 us |  27,034.52 us |\n// | Bench_ReverseN       | 1024      |     14,125.6 us |     282.51 us |     577.08 us |\n// | Bench_OneGasReverseN | 1024      |  5,799,154.5 us |  33,817.93 us |  31,633.31 us |\n// | Bench_ReverseN       | 2040      |     22,868.0 us |     449.84 us |     929.00 us |\n// | Bench_OneGasReverseN | 2040      | 11,100,853.9 us | 159,980.97 us | 141,818.97 us |\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/OpCodes/Benchmark.Opcode.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Benchmark.Opcode.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nnamespace Neo.VM.Benchmarks.OpCodes;\n\npublic class Benchmark_Opcode\n{\n    internal static readonly long OneGasDatoshi = 1_0000_0000;\n\n    public static readonly IReadOnlyDictionary<OpCode, long> OpCodePrices = new Dictionary<OpCode, long>\n    {\n        [OpCode.PUSHINT8] = 1 << 0,\n        [OpCode.PUSHINT16] = 1 << 0,\n        [OpCode.PUSHINT32] = 1 << 0,\n        [OpCode.PUSHINT64] = 1 << 0,\n        [OpCode.PUSHINT128] = 1 << 2,\n        [OpCode.PUSHINT256] = 1 << 2,\n        [OpCode.PUSHT] = 1 << 0,\n        [OpCode.PUSHF] = 1 << 0,\n        [OpCode.PUSHA] = 1 << 2,\n        [OpCode.PUSHNULL] = 1 << 0,\n        [OpCode.PUSHDATA1] = 1 << 3,\n        [OpCode.PUSHDATA2] = 1 << 9,\n        [OpCode.PUSHDATA4] = 1 << 12,\n        [OpCode.PUSHM1] = 1 << 0,\n        [OpCode.PUSH0] = 1 << 0,\n        [OpCode.PUSH1] = 1 << 0,\n        [OpCode.PUSH2] = 1 << 0,\n        [OpCode.PUSH3] = 1 << 0,\n        [OpCode.PUSH4] = 1 << 0,\n        [OpCode.PUSH5] = 1 << 0,\n        [OpCode.PUSH6] = 1 << 0,\n        [OpCode.PUSH7] = 1 << 0,\n        [OpCode.PUSH8] = 1 << 0,\n        [OpCode.PUSH9] = 1 << 0,\n        [OpCode.PUSH10] = 1 << 0,\n        [OpCode.PUSH11] = 1 << 0,\n        [OpCode.PUSH12] = 1 << 0,\n        [OpCode.PUSH13] = 1 << 0,\n        [OpCode.PUSH14] = 1 << 0,\n        [OpCode.PUSH15] = 1 << 0,\n        [OpCode.PUSH16] = 1 << 0,\n        [OpCode.NOP] = 1 << 0,\n        [OpCode.JMP] = 1 << 1,\n        [OpCode.JMP_L] = 1 << 1,\n        [OpCode.JMPIF] = 1 << 1,\n        [OpCode.JMPIF_L] = 1 << 1,\n        [OpCode.JMPIFNOT] = 1 << 1,\n        [OpCode.JMPIFNOT_L] = 1 << 1,\n        [OpCode.JMPEQ] = 1 << 1,\n        [OpCode.JMPEQ_L] = 1 << 1,\n        [OpCode.JMPNE] = 1 << 1,\n        [OpCode.JMPNE_L] = 1 << 1,\n        [OpCode.JMPGT] = 1 << 1,\n        [OpCode.JMPGT_L] = 1 << 1,\n        [OpCode.JMPGE] = 1 << 1,\n        [OpCode.JMPGE_L] = 1 << 1,\n        [OpCode.JMPLT] = 1 << 1,\n        [OpCode.JMPLT_L] = 1 << 1,\n        [OpCode.JMPLE] = 1 << 1,\n        [OpCode.JMPLE_L] = 1 << 1,\n        [OpCode.CALL] = 1 << 9,\n        [OpCode.CALL_L] = 1 << 9,\n        [OpCode.CALLA] = 1 << 9,\n        [OpCode.CALLT] = 1 << 15,\n        [OpCode.ABORT] = 0,\n        [OpCode.ABORTMSG] = 0,\n        [OpCode.ASSERT] = 1 << 0,\n        [OpCode.ASSERTMSG] = 1 << 0,\n        [OpCode.THROW] = 1 << 9,\n        [OpCode.TRY] = 1 << 2,\n        [OpCode.TRY_L] = 1 << 2,\n        [OpCode.ENDTRY] = 1 << 2,\n        [OpCode.ENDTRY_L] = 1 << 2,\n        [OpCode.ENDFINALLY] = 1 << 2,\n        [OpCode.RET] = 0,\n        [OpCode.SYSCALL] = 0,\n        [OpCode.DEPTH] = 1 << 1,\n        [OpCode.DROP] = 1 << 1,\n        [OpCode.NIP] = 1 << 1,\n        [OpCode.XDROP] = 1 << 4,\n        [OpCode.CLEAR] = 1 << 4,\n        [OpCode.DUP] = 1 << 1,\n        [OpCode.OVER] = 1 << 1,\n        [OpCode.PICK] = 1 << 1,\n        [OpCode.TUCK] = 1 << 1,\n        [OpCode.SWAP] = 1 << 1,\n        [OpCode.ROT] = 1 << 1,\n        [OpCode.ROLL] = 1 << 4,\n        [OpCode.REVERSE3] = 1 << 1,\n        [OpCode.REVERSE4] = 1 << 1,\n        [OpCode.REVERSEN] = 1 << 4,\n        [OpCode.INITSSLOT] = 1 << 4,\n        [OpCode.INITSLOT] = 1 << 6,\n        [OpCode.LDSFLD0] = 1 << 1,\n        [OpCode.LDSFLD1] = 1 << 1,\n        [OpCode.LDSFLD2] = 1 << 1,\n        [OpCode.LDSFLD3] = 1 << 1,\n        [OpCode.LDSFLD4] = 1 << 1,\n        [OpCode.LDSFLD5] = 1 << 1,\n        [OpCode.LDSFLD6] = 1 << 1,\n        [OpCode.LDSFLD] = 1 << 1,\n        [OpCode.STSFLD0] = 1 << 1,\n        [OpCode.STSFLD1] = 1 << 1,\n        [OpCode.STSFLD2] = 1 << 1,\n        [OpCode.STSFLD3] = 1 << 1,\n        [OpCode.STSFLD4] = 1 << 1,\n        [OpCode.STSFLD5] = 1 << 1,\n        [OpCode.STSFLD6] = 1 << 1,\n        [OpCode.STSFLD] = 1 << 1,\n        [OpCode.LDLOC0] = 1 << 1,\n        [OpCode.LDLOC1] = 1 << 1,\n        [OpCode.LDLOC2] = 1 << 1,\n        [OpCode.LDLOC3] = 1 << 1,\n        [OpCode.LDLOC4] = 1 << 1,\n        [OpCode.LDLOC5] = 1 << 1,\n        [OpCode.LDLOC6] = 1 << 1,\n        [OpCode.LDLOC] = 1 << 1,\n        [OpCode.STLOC0] = 1 << 1,\n        [OpCode.STLOC1] = 1 << 1,\n        [OpCode.STLOC2] = 1 << 1,\n        [OpCode.STLOC3] = 1 << 1,\n        [OpCode.STLOC4] = 1 << 1,\n        [OpCode.STLOC5] = 1 << 1,\n        [OpCode.STLOC6] = 1 << 1,\n        [OpCode.STLOC] = 1 << 1,\n        [OpCode.LDARG0] = 1 << 1,\n        [OpCode.LDARG1] = 1 << 1,\n        [OpCode.LDARG2] = 1 << 1,\n        [OpCode.LDARG3] = 1 << 1,\n        [OpCode.LDARG4] = 1 << 1,\n        [OpCode.LDARG5] = 1 << 1,\n        [OpCode.LDARG6] = 1 << 1,\n        [OpCode.LDARG] = 1 << 1,\n        [OpCode.STARG0] = 1 << 1,\n        [OpCode.STARG1] = 1 << 1,\n        [OpCode.STARG2] = 1 << 1,\n        [OpCode.STARG3] = 1 << 1,\n        [OpCode.STARG4] = 1 << 1,\n        [OpCode.STARG5] = 1 << 1,\n        [OpCode.STARG6] = 1 << 1,\n        [OpCode.STARG] = 1 << 1,\n        [OpCode.NEWBUFFER] = 1 << 8,\n        [OpCode.MEMCPY] = 1 << 11,\n        [OpCode.CAT] = 1 << 11,\n        [OpCode.SUBSTR] = 1 << 11,\n        [OpCode.LEFT] = 1 << 11,\n        [OpCode.RIGHT] = 1 << 11,\n        [OpCode.INVERT] = 1 << 2,\n        [OpCode.AND] = 1 << 3,\n        [OpCode.OR] = 1 << 3,\n        [OpCode.XOR] = 1 << 3,\n        [OpCode.EQUAL] = 1 << 5,\n        [OpCode.NOTEQUAL] = 1 << 5,\n        [OpCode.SIGN] = 1 << 2,\n        [OpCode.ABS] = 1 << 2,\n        [OpCode.NEGATE] = 1 << 2,\n        [OpCode.INC] = 1 << 2,\n        [OpCode.DEC] = 1 << 2,\n        [OpCode.ADD] = 1 << 3,\n        [OpCode.SUB] = 1 << 3,\n        [OpCode.MUL] = 1 << 3,\n        [OpCode.DIV] = 1 << 3,\n        [OpCode.MOD] = 1 << 3,\n        [OpCode.POW] = 1 << 6,\n        [OpCode.SQRT] = 1 << 6,\n        [OpCode.MODMUL] = 1 << 5,\n        [OpCode.MODPOW] = 1 << 11,\n        [OpCode.SHL] = 1 << 3,\n        [OpCode.SHR] = 1 << 3,\n        [OpCode.NOT] = 1 << 2,\n        [OpCode.BOOLAND] = 1 << 3,\n        [OpCode.BOOLOR] = 1 << 3,\n        [OpCode.NZ] = 1 << 2,\n        [OpCode.NUMEQUAL] = 1 << 3,\n        [OpCode.NUMNOTEQUAL] = 1 << 3,\n        [OpCode.LT] = 1 << 3,\n        [OpCode.LE] = 1 << 3,\n        [OpCode.GT] = 1 << 3,\n        [OpCode.GE] = 1 << 3,\n        [OpCode.MIN] = 1 << 3,\n        [OpCode.MAX] = 1 << 3,\n        [OpCode.WITHIN] = 1 << 3,\n        [OpCode.PACKMAP] = 1 << 11,\n        [OpCode.PACKSTRUCT] = 1 << 11,\n        [OpCode.PACK] = 1 << 11,\n        [OpCode.UNPACK] = 1 << 11,\n        [OpCode.NEWARRAY0] = 1 << 4,\n        [OpCode.NEWARRAY] = 1 << 9,\n        [OpCode.NEWARRAY_T] = 1 << 9,\n        [OpCode.NEWSTRUCT0] = 1 << 4,\n        [OpCode.NEWSTRUCT] = 1 << 9,\n        [OpCode.NEWMAP] = 1 << 3,\n        [OpCode.SIZE] = 1 << 2,\n        [OpCode.HASKEY] = 1 << 6,\n        [OpCode.KEYS] = 1 << 4,\n        [OpCode.VALUES] = 1 << 13,\n        [OpCode.PICKITEM] = 1 << 6,\n        [OpCode.APPEND] = 1 << 13,\n        [OpCode.SETITEM] = 1 << 13,\n        [OpCode.REVERSEITEMS] = 1 << 13,\n        [OpCode.REMOVE] = 1 << 4,\n        [OpCode.CLEARITEMS] = 1 << 4,\n        [OpCode.POPITEM] = 1 << 4,\n        [OpCode.ISNULL] = 1 << 1,\n        [OpCode.ISTYPE] = 1 << 1,\n        [OpCode.CONVERT] = 1 << 13,\n    };\n\n    internal static void RunScript(byte[] script)\n    {\n        LoadScript(script).ExecuteBenchmark();\n    }\n\n    internal static BenchmarkEngine RunScriptUntil(byte[] script, OpCode opCode)\n    {\n        return LoadScript(script).ExecuteUntil(opCode);\n    }\n\n    internal static BenchmarkEngine LoadScript(byte[] script)\n    {\n        var engine = new BenchmarkEngine();\n        engine.LoadScript(script);\n        return engine;\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/OpCodes/BenchmarkEngine.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// BenchmarkEngine.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM.Benchmarks.OpCodes;\n\n/// <summary>\n/// A simple benchmark engine for <see cref=\"ExecutionEngine\"/>.\n/// </summary>\npublic class BenchmarkEngine : ExecutionEngine\n{\n    private readonly Dictionary<OpCode, (int Count, TimeSpan TotalTime)> _opcodeStats = new();\n    private readonly Dictionary<Script, HashSet<uint>> _breakPoints = new();\n    private long _gasConsumed = 0;\n\n    public BenchmarkEngine() : base(ComposeJumpTable()) { }\n\n    /// <summary>\n    /// Add a breakpoint at the specified position of the specified script. The VM will break the execution when it reaches the breakpoint.\n    /// </summary>\n    /// <param name=\"script\">The script to add the breakpoint.</param>\n    /// <param name=\"position\">The position of the breakpoint in the script.</param>\n    public void AddBreakPoint(Script script, uint position)\n    {\n        if (!_breakPoints.TryGetValue(script, out var hashset))\n        {\n            hashset = [];\n            _breakPoints.Add(script, hashset);\n        }\n        hashset.Add(position);\n    }\n\n    /// <summary>\n    /// Start or continue execution of the VM.\n    /// </summary>\n    /// <returns>Returns the state of the VM after the execution.</returns>\n    public BenchmarkEngine ExecuteUntil(OpCode opCode)\n    {\n        if (State == VMState.BREAK)\n            State = VMState.NONE;\n        while (State == VMState.NONE)\n        {\n            ExecuteNext();\n            try\n            {\n                var instruction = CurrentContext!.CurrentInstruction!.OpCode;\n                if (instruction == opCode) break;\n            }\n            catch\n            {\n                break;\n            }\n        }\n        return this;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void ExecuteBenchmark()\n    {\n        while (State != VMState.HALT && State != VMState.FAULT)\n        {\n#if DEBUG\n            var stopwatch = Stopwatch.StartNew();\n#endif\n            ExecuteNext();\n#if DEBUG\n            stopwatch.Stop();\n            UpdateOpcodeStats(CurrentContext!.CurrentInstruction!.OpCode, stopwatch.Elapsed);\n#endif\n        }\n#if DEBUG\n        PrintOpcodeStats();\n#endif\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void ExecuteOneGASBenchmark()\n    {\n        while (State != VMState.HALT && State != VMState.FAULT)\n        {\n            var instruction = CurrentContext!.CurrentInstruction ?? Instruction.RET;\n            _gasConsumed += Benchmark_Opcode.OpCodePrices[instruction.OpCode];\n            if (_gasConsumed >= Benchmark_Opcode.OneGasDatoshi)\n            {\n                State = VMState.HALT;\n            }\n#if DEBUG\n            var stopwatch = Stopwatch.StartNew();\n#endif\n            ExecuteNext();\n#if DEBUG\n            stopwatch.Stop();\n            UpdateOpcodeStats(instruction.OpCode, stopwatch.Elapsed);\n#endif\n        }\n#if DEBUG\n        PrintOpcodeStats();\n#endif\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void ExecuteTwentyGASBenchmark()\n    {\n        while (State != VMState.HALT && State != VMState.FAULT)\n        {\n            var instruction = CurrentContext!.CurrentInstruction ?? Instruction.RET;\n            _gasConsumed += Benchmark_Opcode.OpCodePrices[instruction.OpCode];\n            if (_gasConsumed >= 20 * Benchmark_Opcode.OneGasDatoshi)\n            {\n                State = VMState.HALT;\n            }\n#if DEBUG\n            var stopwatch = Stopwatch.StartNew();\n#endif\n            ExecuteNext();\n#if DEBUG\n            stopwatch.Stop();\n            UpdateOpcodeStats(instruction.OpCode, stopwatch.Elapsed);\n#endif\n        }\n#if DEBUG\n        PrintOpcodeStats();\n#endif\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void ExecuteOpCodesBenchmark()\n    {\n        while (State != VMState.HALT && State != VMState.FAULT)\n        {\n            var instruction = CurrentContext!.CurrentInstruction ?? Instruction.RET;\n            _gasConsumed += Benchmark_Opcode.OpCodePrices[instruction.OpCode];\n            if (_gasConsumed >= Benchmark_Opcode.OneGasDatoshi)\n            {\n                State = VMState.HALT;\n            }\n#if DEBUG\n            var stopwatch = Stopwatch.StartNew();\n#endif\n            ExecuteNext();\n#if DEBUG\n            stopwatch.Stop();\n            UpdateOpcodeStats(instruction.OpCode, stopwatch.Elapsed);\n#endif\n        }\n#if DEBUG\n        PrintOpcodeStats();\n#endif\n    }\n\n    protected override void OnFault(Exception ex)\n    {\n        base.OnFault(ex);\n        // throw ex;\n    }\n\n    private void UpdateOpcodeStats(OpCode opcode, TimeSpan elapsed)\n    {\n        if (!_opcodeStats.TryGetValue(opcode, out var value))\n        {\n            _opcodeStats[opcode] = (1, elapsed);\n        }\n        else\n        {\n            var (count, totalTime) = value;\n            _opcodeStats[opcode] = (count + 1, totalTime + elapsed);\n        }\n    }\n\n    private void PrintOpcodeStats()\n    {\n        Console.WriteLine(\"Opcode Statistics:\");\n        foreach (var kvp in _opcodeStats)\n        {\n            Console.WriteLine($\"{kvp.Key,-15} \" +\n                              $\"Count: {kvp.Value.Count,8} \" +\n                              $\"Total Time: {kvp.Value.TotalTime.TotalMilliseconds * 1000,10:F2} μs \" +\n                              $\"Avg Time: {kvp.Value.TotalTime.TotalMilliseconds * 1000 / kvp.Value.Count,10:F2} μs\");\n        }\n    }\n\n    private static JumpTable ComposeJumpTable()\n    {\n        var jumpTable = new JumpTable();\n        jumpTable[OpCode.SYSCALL] = OnSysCall;\n        return jumpTable;\n    }\n\n    private static void OnSysCall(ExecutionEngine engine, Instruction instruction)\n    {\n        uint method = instruction.TokenU32;\n        if (method == 0x77777777)\n            engine.CurrentContext!.EvaluationStack.Push(StackItem.FromInterface(new object()));\n        else if (method == 0xaddeadde)\n            engine.JumpTable.ExecuteThrow(engine, \"error\");\n        else\n            throw new Exception();\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/OpCodes/BenchmarkMode.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// BenchmarkMode.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nnamespace Neo.VM.Benchmarks.OpCodes;\n\npublic enum BenchmarkMode\n{\n    SimpleOpCode,\n    OneGAS,\n    BaseLine\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/OpCodes/Benchmarks_StackOps.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Benchmarks_StackOps.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing BenchmarkDotNet.Attributes;\n\nnamespace Neo.VM.Benchmarks.OpCodes;\n\n[MemoryDiagnoser]\n[CsvExporter]\n[MarkdownExporterAttribute.GitHub]\n[InvocationCount(1)]\npublic class Benchmarks_StackOps\n{\n    private const int RepeatCount = 1000;\n    private const int MultipleCount = 50;\n    private const int MultipleIterations = RepeatCount * MultipleCount;\n\n    // Keep description strings in sync with RepeatCount/MultipleCount.\n    private const string SwapShallowDescription = \"SWAP_Shallow_2x1000\";\n    private const string SwapDeepDescription = \"SWAP_Deep_100x1000\";\n    private const string SwapMultipleDescription = \"SWAP_Multiple_50x1000\";\n    private const string RotShallowDescription = \"ROT_Shallow_3x1000\";\n    private const string RotDeepDescription = \"ROT_Deep_100x1000\";\n    private const string RotMultipleDescription = \"ROT_Multiple_50x1000\";\n\n    private BenchmarkEngine _engine = null!;\n\n    private byte[] _swapShallowScript = [];\n    private byte[] _swapDeepScript = [];\n    private byte[] _swapMultipleScript = [];\n    private byte[] _rotShallowScript = [];\n    private byte[] _rotDeepScript = [];\n    private byte[] _rotMultipleScript = [];\n\n    [GlobalSetup]\n    public void GlobalSetup()\n    {\n        _swapShallowScript = BuildScript(sb =>\n        {\n            sb.EmitPush(1);\n            sb.EmitPush(2);\n            for (int i = 0; i < RepeatCount; i++)\n                sb.Emit(OpCode.SWAP);\n        });\n        _swapDeepScript = BuildScript(sb =>\n        {\n            for (int i = 0; i < 100; i++)\n                sb.EmitPush(i);\n            for (int i = 0; i < RepeatCount; i++)\n                sb.Emit(OpCode.SWAP);\n        });\n        _swapMultipleScript = BuildScript(sb =>\n        {\n            sb.EmitPush(1);\n            sb.EmitPush(2);\n            for (int i = 0; i < MultipleIterations; i++)\n                sb.Emit(OpCode.SWAP);\n        });\n\n        _rotShallowScript = BuildScript(sb =>\n        {\n            sb.EmitPush(1);\n            sb.EmitPush(2);\n            sb.EmitPush(3);\n            for (int i = 0; i < RepeatCount; i++)\n                sb.Emit(OpCode.ROT);\n        });\n        _rotDeepScript = BuildScript(sb =>\n        {\n            for (int i = 0; i < 100; i++)\n                sb.EmitPush(i);\n            for (int i = 0; i < RepeatCount; i++)\n                sb.Emit(OpCode.ROT);\n        });\n        _rotMultipleScript = BuildScript(sb =>\n        {\n            sb.EmitPush(1);\n            sb.EmitPush(2);\n            sb.EmitPush(3);\n            for (int i = 0; i < MultipleIterations; i++)\n                sb.Emit(OpCode.ROT);\n        });\n    }\n\n    private static byte[] BuildScript(Action<ScriptBuilder> build)\n    {\n        using var sb = new ScriptBuilder();\n        build(sb);\n        return sb.ToArray();\n    }\n\n    private void SetupEngine(byte[] script)\n    {\n        _engine = new BenchmarkEngine();\n        _engine.LoadScript(script);\n    }\n\n    #region SWAP Benchmarks\n\n    [IterationSetup(Target = nameof(Bench_SWAP_Shallow))]\n    public void Setup_SWAP_Shallow() => SetupEngine(_swapShallowScript);\n\n    [Benchmark(Description = SwapShallowDescription)]\n    public void Bench_SWAP_Shallow()\n    {\n        _engine.ExecuteBenchmark();\n    }\n\n    [IterationSetup(Target = nameof(Bench_SWAP_Deep))]\n    public void Setup_SWAP_Deep() => SetupEngine(_swapDeepScript);\n\n    [Benchmark(Description = SwapDeepDescription)]\n    public void Bench_SWAP_Deep()\n    {\n        _engine.ExecuteBenchmark();\n    }\n\n    [IterationSetup(Target = nameof(Bench_SWAP_Multiple))]\n    public void Setup_SWAP_Multiple() => SetupEngine(_swapMultipleScript);\n\n    [Benchmark(Description = SwapMultipleDescription)]\n    public void Bench_SWAP_Multiple()\n    {\n        _engine.ExecuteBenchmark();\n    }\n\n    #endregion\n\n    #region ROT Benchmarks\n\n    [IterationSetup(Target = nameof(Bench_ROT_Shallow))]\n    public void Setup_ROT_Shallow() => SetupEngine(_rotShallowScript);\n\n    [Benchmark(Description = RotShallowDescription)]\n    public void Bench_ROT_Shallow()\n    {\n        _engine.ExecuteBenchmark();\n    }\n\n    [IterationSetup(Target = nameof(Bench_ROT_Deep))]\n    public void Setup_ROT_Deep() => SetupEngine(_rotDeepScript);\n\n    [Benchmark(Description = RotDeepDescription)]\n    public void Bench_ROT_Deep()\n    {\n        _engine.ExecuteBenchmark();\n    }\n\n    [IterationSetup(Target = nameof(Bench_ROT_Multiple))]\n    public void Setup_ROT_Multiple() => SetupEngine(_rotMultipleScript);\n\n    [Benchmark(Description = RotMultipleDescription)]\n    public void Bench_ROT_Multiple()\n    {\n        _engine.ExecuteBenchmark();\n    }\n\n    #endregion\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/OpCodes/OpCodeBase.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// OpCodeBase.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing BenchmarkDotNet.Attributes;\n\nnamespace Neo.VM.Benchmarks.OpCodes;\n\npublic abstract class OpCodeBase\n{\n    [Params(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2040)]\n    public int ItemCount { get; set; } = 10;\n    protected byte[] baseLineScript = Array.Empty<byte>();\n    protected byte[] script = Array.Empty<byte>();\n    protected byte[] multiScript = Array.Empty<byte>();\n\n    [GlobalSetup]\n    public void Setup()\n    {\n        script = CreateScript(BenchmarkMode.SimpleOpCode);\n        multiScript = CreateScript(BenchmarkMode.OneGAS);\n        baseLineScript = CreateScript(BenchmarkMode.BaseLine);\n    }\n\n    [Benchmark(Baseline = true)]\n    public void Bench_BaseLine() => Benchmark_Opcode.RunScript(baseLineScript);\n\n    [Benchmark]\n    public void Bench_OneOpCode() => Benchmark_Opcode.RunScript(script);\n\n    /// <summary>\n    /// Benchmark how long 1 GAS can run.\n    /// </summary>\n    [Benchmark]\n    public void Bench_OneGAS() => Benchmark_Opcode.LoadScript(multiScript).ExecuteOneGASBenchmark();\n\n    protected abstract byte[] CreateScript(BenchmarkMode benchmarkMode);\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/Program.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Program.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Running;\nusing Neo.VM.Benchmarks;\nusing System.Reflection;\n\n// Define the benchmark or execute class\nif (Environment.GetEnvironmentVariable(\"NEO_VM_BENCHMARK\") != null)\n{\n    BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);\n}\nelse\n{\n    var benchmarkType = typeof(Benchmarks_PoCs);\n    var instance = Activator.CreateInstance(benchmarkType);\n    benchmarkType.GetMethods(BindingFlags.Public | BindingFlags.Instance)\n        .FirstOrDefault(m => m.GetCustomAttribute<GlobalSetupAttribute>() != null)?\n        .Invoke(instance, null); // setup\n\n    var methods = benchmarkType.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static)\n        .Where(m => m.DeclaringType == benchmarkType && !m.GetCustomAttributes<GlobalSetupAttribute>().Any());\n    foreach (var method in methods)\n    {\n        method.Invoke(instance, null);\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/TestArray.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// TestArray.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System.Collections;\n\nnamespace Neo.VM.Benchmarks;\n\npublic class TestArray : CompoundType, IReadOnlyList<StackItem>\n{\n    protected readonly List<StackItem> InnerList;\n\n    /// <summary>\n    /// Get or set item in the array.\n    /// </summary>\n    /// <param name=\"index\">The index of the item in the array.</param>\n    /// <returns>The item at the specified index.</returns>\n    public StackItem this[int index]\n    {\n        get => InnerList[index];\n        set\n        {\n            if (IsReadOnly) throw new InvalidOperationException(\"The object is readonly.\");\n            ReferenceCounter?.RemoveReference(InnerList[index], this);\n            InnerList[index] = value;\n            ReferenceCounter?.AddReference(value, this);\n        }\n    }\n\n    /// <summary>\n    /// The number of items in the array.\n    /// </summary>\n    public override int Count => InnerList.Count;\n    public override IEnumerable<StackItem> SubItems => InnerList;\n    public override int SubItemsCount => InnerList.Count;\n    public override StackItemType Type => StackItemType.Array;\n\n    /// <summary>\n    /// Create an array containing the specified items.\n    /// </summary>\n    /// <param name=\"items\">The items to be included in the array.</param>\n    public TestArray(IEnumerable<StackItem>? items = null)\n        : this(null, items)\n    {\n    }\n\n    /// <summary>\n    /// Create an array containing the specified items. And make the array use the specified <see cref=\"IReferenceCounter\"/>.\n    /// </summary>\n    /// <param name=\"referenceCounter\">The <see cref=\"IReferenceCounter\"/> to be used by this array.</param>\n    /// <param name=\"items\">The items to be included in the array.</param>\n    public TestArray(IReferenceCounter? referenceCounter, IEnumerable<StackItem>? items = null)\n        : base(referenceCounter)\n    {\n        InnerList = items switch\n        {\n            null => new List<StackItem>(),\n            List<StackItem> list => list,\n            _ => new List<StackItem>(items)\n        };\n        if (referenceCounter != null)\n            foreach (StackItem item in InnerList)\n                referenceCounter.AddReference(item, this);\n    }\n\n    /// <summary>\n    /// Add a new item at the end of the array.\n    /// </summary>\n    /// <param name=\"item\">The item to be added.</param>\n    public void Add(StackItem item)\n    {\n        if (IsReadOnly) throw new InvalidOperationException(\"The object is readonly.\");\n        InnerList.Add(item);\n        ReferenceCounter?.AddReference(item, this);\n    }\n\n    public override void Clear()\n    {\n        if (IsReadOnly) throw new InvalidOperationException(\"The object is readonly.\");\n        if (ReferenceCounter != null)\n            foreach (StackItem item in InnerList)\n                ReferenceCounter.RemoveReference(item, this);\n        InnerList.Clear();\n    }\n\n    public override StackItem ConvertTo(StackItemType type)\n    {\n        if (Type == StackItemType.Array && type == StackItemType.Struct)\n            return new Struct(ReferenceCounter, new List<StackItem>(InnerList));\n        return base.ConvertTo(type);\n    }\n\n    internal sealed override StackItem DeepCopy(Dictionary<StackItem, StackItem> refMap, bool asImmutable)\n    {\n        if (refMap.TryGetValue(this, out StackItem? mappedItem)) return mappedItem;\n        var result = this is TestStruct ? new TestStruct(ReferenceCounter) : new TestArray(ReferenceCounter);\n        refMap.Add(this, result);\n        foreach (StackItem item in InnerList)\n            result.Add(item.DeepCopy(refMap, asImmutable));\n        result.IsReadOnly = true;\n        return result;\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n\n    public IEnumerator<StackItem> GetEnumerator()\n    {\n        return InnerList.GetEnumerator();\n    }\n\n    /// <summary>\n    /// Remove the item at the specified index.\n    /// </summary>\n    /// <param name=\"index\">The index of the item to be removed.</param>\n    public void RemoveAt(int index)\n    {\n        if (IsReadOnly) throw new InvalidOperationException(\"The object is readonly.\");\n        ReferenceCounter?.RemoveReference(InnerList[index], this);\n        InnerList.RemoveAt(index);\n    }\n\n    /// <summary>\n    /// Reverse all items in the array.\n    /// </summary>\n    public void Reverse()\n    {\n        if (IsReadOnly) throw new InvalidOperationException(\"The object is readonly.\");\n        InnerList.Reverse();\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/TestStruct.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// TestStruct.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\n\nnamespace Neo.VM.Benchmarks;\n\npublic class TestStruct : TestArray\n{\n    public override StackItemType Type => StackItemType.Struct;\n\n    /// <summary>\n    /// Create a structure with the specified fields.\n    /// </summary>\n    /// <param name=\"fields\">The fields to be included in the structure.</param>\n    public TestStruct(IEnumerable<StackItem>? fields = null)\n        : this(null, fields)\n    {\n    }\n\n    /// <summary>\n    /// Create a structure with the specified fields. And make the structure use the specified <see cref=\"IReferenceCounter\"/>.\n    /// </summary>\n    /// <param name=\"referenceCounter\">The <see cref=\"IReferenceCounter\"/> to be used by this structure.</param>\n    /// <param name=\"fields\">The fields to be included in the structure.</param>\n    public TestStruct(IReferenceCounter? referenceCounter, IEnumerable<StackItem>? fields = null)\n        : base(referenceCounter, fields)\n    {\n    }\n\n    /// <summary>\n    /// Create a new structure with the same content as this structure. All nested structures will be copied by value.\n    /// </summary>\n    /// <param name=\"limits\">Execution engine limits</param>\n    /// <returns>The copied structure.</returns>\n    public TestStruct Clone(ExecutionEngineLimits limits)\n    {\n        int count = (int)(limits.MaxStackSize - 1);\n        TestStruct result = new(ReferenceCounter);\n        Queue<TestStruct> queue = new();\n        queue.Enqueue(result);\n        queue.Enqueue(this);\n        while (queue.Count > 0)\n        {\n            TestStruct a = queue.Dequeue();\n            TestStruct b = queue.Dequeue();\n            foreach (StackItem item in b)\n            {\n                count--;\n                if (count < 0) throw new InvalidOperationException(\"Beyond clone limits!\");\n                if (item is TestStruct sb)\n                {\n                    TestStruct sa = new(ReferenceCounter);\n                    a.Add(sa);\n                    queue.Enqueue(sa);\n                    queue.Enqueue(sb);\n                }\n                else\n                {\n                    a.Add(item);\n                }\n            }\n        }\n        return result;\n    }\n\n    public override StackItem ConvertTo(StackItemType type)\n    {\n        if (type == StackItemType.Array)\n            return new TestArray(ReferenceCounter, new List<StackItem>(InnerList));\n        return base.ConvertTo(type);\n    }\n\n    public override bool Equals(StackItem? other)\n    {\n        throw new NotSupportedException();\n    }\n\n    internal override bool Equals(StackItem? other, ExecutionEngineLimits limits)\n    {\n        if (other is not TestStruct s) return false;\n        Stack<StackItem> stack1 = new();\n        Stack<StackItem> stack2 = new();\n        stack1.Push(this);\n        stack2.Push(s);\n        uint count = limits.MaxStackSize;\n        uint maxComparableSize = limits.MaxComparableSize;\n        while (stack1.Count > 0)\n        {\n            if (count-- == 0)\n                throw new InvalidOperationException(\"Too many struct items to compare.\");\n            StackItem a = stack1.Pop();\n            StackItem b = stack2.Pop();\n            if (a is ByteString byteString)\n            {\n                if (!byteString.Equals(b, ref maxComparableSize)) return false;\n            }\n            else\n            {\n                if (maxComparableSize == 0)\n                    throw new InvalidOperationException(\"The operand exceeds the maximum comparable size.\");\n                maxComparableSize -= 1;\n                if (a is TestStruct sa)\n                {\n                    if (ReferenceEquals(a, b)) continue;\n                    if (b is not TestStruct sb) return false;\n                    if (sa.Count != sb.Count) return false;\n                    foreach (StackItem item in sa)\n                        stack1.Push(item);\n                    foreach (StackItem item in sb)\n                        stack2.Push(item);\n                }\n                else\n                {\n                    if (!a.Equals(b)) return false;\n                }\n            }\n        }\n        return true;\n    }\n}\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/VMTypes/Benchmarks_Convert.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Benchmarks_Convert.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing BenchmarkDotNet.Attributes;\nusing Neo.VM.Types;\nusing Array = Neo.VM.Types.Array;\nusing Buffer = Neo.VM.Types.Buffer;\n\nnamespace Neo.VM.Benchmarks.VMTypes;\n\npublic class Benchmarks_Convert\n{\n    private Dictionary<StackItemType, List<StackItem>>? testItemsByType;\n\n    [GlobalSetup]\n    public void Setup()\n    {\n        testItemsByType = CreateTestItemsByType();\n    }\n\n    [Benchmark]\n    [ArgumentsSource(nameof(GetTypeConversionPairs))]\n    public void BenchConvertTo(StackItemType fromType, StackItemType toType)\n    {\n        if (testItemsByType is null)\n            throw new InvalidOperationException($\"{nameof(testItemsByType)} not initialized\");\n\n        foreach (var item in testItemsByType[fromType])\n        {\n            try\n            {\n                _ = item.ConvertTo(toType);\n            }\n            catch (Exception)\n            {\n                // Ignore invalid casts as they're expected for some conversions\n            }\n        }\n    }\n\n    public static IEnumerable<object[]> GetTypeConversionPairs()\n    {\n        var types = Enum.GetValues<StackItemType>();\n        foreach (var fromType in types)\n        {\n            foreach (var toType in types)\n            {\n                yield return new object[] { fromType, toType };\n            }\n        }\n    }\n\n    private static Dictionary<StackItemType, List<StackItem>> CreateTestItemsByType()\n    {\n        var referenceCounter = new ReferenceCounter();\n        var result = new Dictionary<StackItemType, List<StackItem>>();\n\n        foreach (StackItemType type in Enum.GetValues<StackItemType>())\n        {\n            result[type] = new List<StackItem>();\n        }\n\n        result[StackItemType.Boolean].Add(StackItem.True);\n        result[StackItemType.Boolean].Add(StackItem.False);\n\n        result[StackItemType.Integer].Add(new Integer(42));\n        result[StackItemType.Integer].Add(new Integer(-1));\n\n        result[StackItemType.ByteString].Add(new ByteString(new byte[] { 1, 2, 3 }));\n        result[StackItemType.ByteString].Add(new ByteString(new byte[] { 255, 0, 128 }));\n\n        // Create a 128-byte buffer\n        var longBuffer = new byte[128];\n        for (int i = 0; i < 128; i++) longBuffer[i] = (byte)(i % 256);\n        result[StackItemType.Buffer].Add(new Buffer(longBuffer));\n        result[StackItemType.Buffer].Add(new Buffer(new byte[128])); // Another 128-byte buffer, all zeros\n\n        // Create an array with 10 items\n        var longArray = new Array(referenceCounter);\n        for (int i = 0; i < 10; i++) longArray.Add(new Integer(i));\n        result[StackItemType.Array].Add(longArray);\n        result[StackItemType.Array].Add(new Array(referenceCounter) { StackItem.True, new ByteString(new byte[] { 3, 4, 5 }) });\n\n        // Create a struct with 10 items\n        var longStruct = new Struct(referenceCounter);\n        for (int i = 0; i < 10; i++) longStruct.Add(new Integer(i * 10));\n        result[StackItemType.Struct].Add(longStruct);\n        result[StackItemType.Struct].Add(new Struct(referenceCounter) { StackItem.False, new Buffer(new byte[] { 6, 7, 8 }) });\n\n        // Create a map with 10 items\n        var longMap = new Map(referenceCounter);\n        for (int i = 0; i < 10; i++) longMap[new Integer(i)] = new ByteString(new byte[] { (byte)(i * 20) });\n        result[StackItemType.Map].Add(longMap);\n        result[StackItemType.Map].Add(new Map(referenceCounter) { [new ByteString(new byte[] { 9 })] = StackItem.True });\n\n        result[StackItemType.InteropInterface].Add(new InteropInterface(new object()));\n        result[StackItemType.InteropInterface].Add(new InteropInterface(\"test string\"));\n\n        return result;\n    }\n}\n\n// BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.4249/23H2/2023Update/SunValley3)\n// Intel Core i9-14900HX, 1 CPU, 32 logical and 24 physical cores\n// .NET SDK 8.0.205\n//   [Host]     : .NET 8.0.5 (8.0.524.21615), X64 RyuJIT AVX2\n//   DefaultJob : .NET 8.0.5 (8.0.524.21615), X64 RyuJIT AVX2\n//\n//\n// | Method         | fromType         | toType           | Mean         | Error       | StdDev      |\n// |--------------- |----------------- |----------------- |-------------:|------------:|------------:|\n// | BenchConvertTo | Any              | Any              |     1.762 ns |   0.0195 ns |   0.0182 ns |\n// | BenchConvertTo | Any              | Pointer          |     1.791 ns |   0.0196 ns |   0.0183 ns |\n// | BenchConvertTo | Any              | Boolean          |     1.774 ns |   0.0245 ns |   0.0229 ns |\n// | BenchConvertTo | Any              | Integer          |     1.781 ns |   0.0236 ns |   0.0220 ns |\n// | BenchConvertTo | Any              | ByteString       |     1.767 ns |   0.0255 ns |   0.0226 ns |\n// | BenchConvertTo | Any              | Buffer           |     1.774 ns |   0.0217 ns |   0.0203 ns |\n// | BenchConvertTo | Any              | Array            |     1.770 ns |   0.0412 ns |   0.0385 ns |\n// | BenchConvertTo | Any              | Struct           |     1.787 ns |   0.0227 ns |   0.0212 ns |\n// | BenchConvertTo | Any              | Map              |     1.796 ns |   0.0292 ns |   0.0273 ns |\n// | BenchConvertTo | Any              | InteropInterface |     1.820 ns |   0.0549 ns |   0.0675 ns |\n// | BenchConvertTo | Pointer          | Any              |     2.312 ns |   0.0210 ns |   0.0175 ns |\n// | BenchConvertTo | Pointer          | Pointer          |     2.337 ns |   0.0157 ns |   0.0146 ns |\n// | BenchConvertTo | Pointer          | Boolean          |     2.352 ns |   0.0190 ns |   0.0169 ns |\n// | BenchConvertTo | Pointer          | Integer          |     2.334 ns |   0.0231 ns |   0.0216 ns |\n// | BenchConvertTo | Pointer          | ByteString       |     2.317 ns |   0.0298 ns |   0.0279 ns |\n// | BenchConvertTo | Pointer          | Buffer           |     2.329 ns |   0.0274 ns |   0.0256 ns |\n// | BenchConvertTo | Pointer          | Array            |     2.338 ns |   0.0257 ns |   0.0241 ns |\n// | BenchConvertTo | Pointer          | Struct           |     2.336 ns |   0.0318 ns |   0.0298 ns |\n// | BenchConvertTo | Pointer          | Map              |     2.351 ns |   0.0676 ns |   0.0903 ns |\n// | BenchConvertTo | Pointer          | InteropInterface |     2.281 ns |   0.0133 ns |   0.0125 ns |\n// | BenchConvertTo | Boolean          | Any              | 5,926.451 ns | 118.1195 ns | 136.0266 ns |\n// | BenchConvertTo | Boolean          | Pointer          | 6,001.282 ns |  15.3048 ns |  12.7802 ns |\n// | BenchConvertTo | Boolean          | Boolean          |     4.459 ns |   0.0151 ns |   0.0133 ns |\n// | BenchConvertTo | Boolean          | Integer          |    14.104 ns |   0.1526 ns |   0.1428 ns |\n// | BenchConvertTo | Boolean          | ByteString       |    11.650 ns |   0.0539 ns |   0.0450 ns |\n// | BenchConvertTo | Boolean          | Buffer           |    26.106 ns |   0.1549 ns |   0.1449 ns |\n// | BenchConvertTo | Boolean          | Array            | 5,813.116 ns |  28.1911 ns |  26.3700 ns |\n// | BenchConvertTo | Boolean          | Struct           | 5,809.844 ns |  19.1249 ns |  15.9702 ns |\n// | BenchConvertTo | Boolean          | Map              | 6,061.558 ns |  29.3991 ns |  27.4999 ns |\n// | BenchConvertTo | Boolean          | InteropInterface | 5,924.682 ns |  80.5533 ns |  75.3496 ns |\n// | BenchConvertTo | Integer          | Any              | 5,240.903 ns |  41.0628 ns |  38.4102 ns |\n// | BenchConvertTo | Integer          | Pointer          | 5,479.116 ns |  75.8232 ns |  70.9251 ns |\n// | BenchConvertTo | Integer          | Boolean          |     5.981 ns |   0.0445 ns |   0.0416 ns |\n// | BenchConvertTo | Integer          | Integer          |     4.277 ns |   0.0177 ns |   0.0166 ns |\n// | BenchConvertTo | Integer          | ByteString       |    19.053 ns |   0.2125 ns |   0.1883 ns |\n// | BenchConvertTo | Integer          | Buffer           |    32.782 ns |   0.1653 ns |   0.1380 ns |\n// | BenchConvertTo | Integer          | Array            | 4,693.207 ns |  14.2446 ns |  12.6275 ns |\n// | BenchConvertTo | Integer          | Struct           | 4,737.341 ns |  60.1813 ns |  56.2936 ns |\n// | BenchConvertTo | Integer          | Map              | 4,808.431 ns |  23.5380 ns |  22.0174 ns |\n// | BenchConvertTo | Integer          | InteropInterface | 4,684.409 ns |  24.7033 ns |  21.8989 ns |\n// | BenchConvertTo | ByteString       | Any              | 5,833.857 ns |  20.1553 ns |  18.8533 ns |\n// | BenchConvertTo | ByteString       | Pointer          | 5,807.973 ns |  11.7754 ns |  10.4386 ns |\n// | BenchConvertTo | ByteString       | Boolean          |    33.007 ns |   0.1574 ns |   0.1472 ns |\n// | BenchConvertTo | ByteString       | Integer          |    23.622 ns |   0.0755 ns |   0.0669 ns |\n// | BenchConvertTo | ByteString       | ByteString       |     4.288 ns |   0.0152 ns |   0.0142 ns |\n// | BenchConvertTo | ByteString       | Buffer           |    24.881 ns |   0.0889 ns |   0.0788 ns |\n// | BenchConvertTo | ByteString       | Array            | 6,030.813 ns |  19.9562 ns |  18.6670 ns |\n// | BenchConvertTo | ByteString       | Struct           | 5,811.185 ns |  24.0781 ns |  22.5226 ns |\n// | BenchConvertTo | ByteString       | Map              | 5,866.820 ns |  17.0315 ns |  15.0980 ns |\n// | BenchConvertTo | ByteString       | InteropInterface | 5,757.124 ns |  16.3184 ns |  14.4658 ns |\n// | BenchConvertTo | Buffer           | Any              | 4,886.279 ns |  17.1370 ns |  14.3102 ns |\n// | BenchConvertTo | Buffer           | Pointer          | 4,698.364 ns |  14.5491 ns |  12.1492 ns |\n// | BenchConvertTo | Buffer           | Boolean          |     6.130 ns |   0.0323 ns |   0.0302 ns |\n// | BenchConvertTo | Buffer           | Integer          | 4,645.764 ns |  15.8146 ns |  14.7930 ns |\n// | BenchConvertTo | Buffer           | ByteString       |    29.874 ns |   0.1518 ns |   0.1268 ns |\n// | BenchConvertTo | Buffer           | Buffer           |     4.939 ns |   0.0190 ns |   0.0178 ns |\n// | BenchConvertTo | Buffer           | Array            | 4,683.427 ns |  21.3813 ns |  20.0001 ns |\n// | BenchConvertTo | Buffer           | Struct           | 4,680.762 ns |  15.7220 ns |  13.9371 ns |\n// | BenchConvertTo | Buffer           | Map              | 4,706.510 ns |  14.2061 ns |  12.5934 ns |\n// | BenchConvertTo | Buffer           | InteropInterface | 4,703.050 ns |  15.8002 ns |  14.0064 ns |\n// | BenchConvertTo | Array            | Any              | 4,652.710 ns |  23.2061 ns |  20.5716 ns |\n// | BenchConvertTo | Array            | Pointer          | 4,625.049 ns |  12.4455 ns |  11.6415 ns |\n// | BenchConvertTo | Array            | Boolean          |     5.568 ns |   0.0181 ns |   0.0169 ns |\n// | BenchConvertTo | Array            | Integer          | 4,659.897 ns |  19.8036 ns |  18.5243 ns |\n// | BenchConvertTo | Array            | ByteString       | 4,663.020 ns |  12.4988 ns |  11.6914 ns |\n// | BenchConvertTo | Array            | Buffer           | 4,680.281 ns |  14.9748 ns |  13.2748 ns |\n// | BenchConvertTo | Array            | Array            |     4.246 ns |   0.0124 ns |   0.0110 ns |\n// | BenchConvertTo | Array            | Struct           | 1,193.106 ns |  98.5374 ns | 285.8748 ns |\n// | BenchConvertTo | Array            | Map              | 4,742.631 ns |  35.5855 ns |  33.2867 ns |\n// | BenchConvertTo | Array            | InteropInterface | 4,670.743 ns |   9.3547 ns |   7.8116 ns |\n// | BenchConvertTo | Struct           | Any              | 4,643.558 ns |  31.0451 ns |  29.0396 ns |\n// | BenchConvertTo | Struct           | Pointer          | 4,867.925 ns |  22.2347 ns |  19.7105 ns |\n// | BenchConvertTo | Struct           | Boolean          |     5.581 ns |   0.0251 ns |   0.0235 ns |\n// | BenchConvertTo | Struct           | Integer          | 4,653.442 ns |  17.7417 ns |  16.5956 ns |\n// | BenchConvertTo | Struct           | ByteString       | 4,646.242 ns |  13.7830 ns |  12.8926 ns |\n// | BenchConvertTo | Struct           | Buffer           | 4,776.205 ns |  14.1918 ns |  13.2751 ns |\n// | BenchConvertTo | Struct           | Array            | 1,622.573 ns | 144.8116 ns | 398.8532 ns |\n// | BenchConvertTo | Struct           | Struct           |     4.195 ns |   0.0327 ns |   0.0290 ns |\n// | BenchConvertTo | Struct           | Map              | 4,672.579 ns |  17.6257 ns |  16.4871 ns |\n// | BenchConvertTo | Struct           | InteropInterface | 4,653.476 ns |   8.2047 ns |   7.6747 ns |\n// | BenchConvertTo | Map              | Any              | 4,676.540 ns |  15.2010 ns |  13.4753 ns |\n// | BenchConvertTo | Map              | Pointer          | 4,663.489 ns |  13.7871 ns |  12.2219 ns |\n// | BenchConvertTo | Map              | Boolean          |     5.535 ns |   0.0205 ns |   0.0192 ns |\n// | BenchConvertTo | Map              | Integer          | 4,661.275 ns |  12.4402 ns |  11.6366 ns |\n// | BenchConvertTo | Map              | ByteString       | 4,662.482 ns |  25.7111 ns |  24.0502 ns |\n// | BenchConvertTo | Map              | Buffer           | 4,859.809 ns |  18.2981 ns |  16.2208 ns |\n// | BenchConvertTo | Map              | Array            | 4,627.149 ns |  10.7487 ns |   9.5285 ns |\n// | BenchConvertTo | Map              | Struct           | 4,646.504 ns |  22.4190 ns |  20.9707 ns |\n// | BenchConvertTo | Map              | Map              |     4.160 ns |   0.0180 ns |   0.0169 ns |\n// | BenchConvertTo | Map              | InteropInterface | 4,667.024 ns |  14.1790 ns |  13.2630 ns |\n// | BenchConvertTo | InteropInterface | Any              | 4,700.511 ns |  17.4725 ns |  15.4889 ns |\n// | BenchConvertTo | InteropInterface | Pointer          | 4,705.819 ns |  25.2035 ns |  23.5754 ns |\n// | BenchConvertTo | InteropInterface | Boolean          |     5.557 ns |   0.0244 ns |   0.0228 ns |\n// | BenchConvertTo | InteropInterface | Integer          | 4,695.410 ns |  21.8674 ns |  20.4547 ns |\n// | BenchConvertTo | InteropInterface | ByteString       | 4,674.552 ns |  18.8705 ns |  17.6515 ns |\n// | BenchConvertTo | InteropInterface | Buffer           | 4,649.237 ns |  23.9084 ns |  22.3639 ns |\n// | BenchConvertTo | InteropInterface | Array            | 4,827.652 ns |  29.7153 ns |  27.7957 ns |\n// | BenchConvertTo | InteropInterface | Struct           | 4,624.202 ns |  10.3563 ns |   8.0855 ns |\n// | BenchConvertTo | InteropInterface | Map              | 4,695.310 ns |  23.1192 ns |  21.6257 ns |\n// | BenchConvertTo | InteropInterface | InteropInterface |     4.137 ns |   0.0156 ns |   0.0138 ns |\n"
  },
  {
    "path": "benchmarks/Neo.VM.Benchmarks/VMTypes/Benchmarks_DeepCopy.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Benchmarks_DeepCopy.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing BenchmarkDotNet.Attributes;\nusing Array = Neo.VM.Types.Array;\n\nnamespace Neo.VM.Benchmarks.VMTypes;\n\npublic class Benchmarks_DeepCopy\n{\n    public static IEnumerable<(int Depth, int ElementsPerLevel)> ParamSource()\n    {\n        int[] depths = [2, 4];\n        int[] elementsPerLevel = [2, 4, 6];\n\n        foreach (var depth in depths)\n        {\n            foreach (var elements in elementsPerLevel)\n            {\n                if (depth <= 8 || elements <= 2)\n                {\n                    yield return (depth, elements);\n                }\n            }\n        }\n    }\n\n    [ParamsSource(nameof(ParamSource))]\n    public (int Depth, int ElementsPerLevel) Params;\n\n    [Benchmark]\n    public void BenchNestedArrayDeepCopy()\n    {\n        var root = new Array(new ReferenceCounter());\n        CreateNestedArray(root, Params.Depth, Params.ElementsPerLevel);\n        _ = root.DeepCopy();\n    }\n\n    [Benchmark]\n    public void BenchNestedArrayDeepCopyWithReferenceCounter()\n    {\n        var referenceCounter = new ReferenceCounter();\n        var root = new Array(referenceCounter);\n        CreateNestedArray(root, Params.Depth, Params.ElementsPerLevel, referenceCounter);\n        _ = root.DeepCopy();\n    }\n\n    [Benchmark]\n    public void BenchNestedTestArrayDeepCopy()\n    {\n        var root = new TestArray(new ReferenceCounter());\n        CreateNestedTestArray(root, Params.Depth, Params.ElementsPerLevel);\n        _ = root.DeepCopy();\n    }\n\n    [Benchmark]\n    public void BenchNestedTestArrayDeepCopyWithReferenceCounter()\n    {\n        var referenceCounter = new ReferenceCounter();\n        var root = new TestArray(referenceCounter);\n        CreateNestedTestArray(root, Params.Depth, Params.ElementsPerLevel, referenceCounter);\n        _ = root.DeepCopy();\n    }\n\n    private static void CreateNestedArray(Array? rootArray, int depth, int elementsPerLevel = 1, IReferenceCounter? referenceCounter = null)\n    {\n        if (depth < 0)\n        {\n            throw new ArgumentException(\"Depth must be non-negative\", nameof(depth));\n        }\n\n        ArgumentNullException.ThrowIfNull(rootArray);\n\n        if (depth == 0)\n        {\n            return;\n        }\n\n        for (var i = 0; i < elementsPerLevel; i++)\n        {\n            var childArray = new Array(referenceCounter);\n            rootArray.Add(childArray);\n            CreateNestedArray(childArray, depth - 1, elementsPerLevel, referenceCounter);\n        }\n    }\n\n    private static void CreateNestedTestArray(TestArray rootArray, int depth, int elementsPerLevel = 1, IReferenceCounter? referenceCounter = null)\n    {\n        if (depth < 0)\n        {\n            throw new ArgumentException(\"Depth must be non-negative\", nameof(depth));\n        }\n\n        ArgumentNullException.ThrowIfNull(rootArray);\n\n        if (depth == 0)\n        {\n            return;\n        }\n\n        for (var i = 0; i < elementsPerLevel; i++)\n        {\n            var childArray = new TestArray(referenceCounter);\n            rootArray.Add(childArray);\n            CreateNestedTestArray(childArray, depth - 1, elementsPerLevel, referenceCounter);\n        }\n    }\n}\n"
  },
  {
    "path": "neo-vm.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.2.32505.173\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"src\", \"src\", \"{0F08E36C-9F18-423D-8F8C-C8C2FACF00F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Neo.VM\", \"src\\Neo.VM\\Neo.VM.csproj\", \"{6A621185-36A9-4E1A-8D3D-462D19503E32}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"tests\", \"tests\", \"{210DA31B-019E-48CE-9498-D56A7987C4E6}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Neo.VM.Tests\", \"tests\\Neo.VM.Tests\\Neo.VM.Tests.csproj\", \"{56063C9E-49B3-4CE2-96C5-E5F7ECACC5FC}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"benchmarks\", \"benchmarks\", \"{68EA7507-C4D7-4BF1-9552-D6ACDC00C209}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Neo.VM.Benchmarks\", \"benchmarks\\Neo.VM.Benchmarks\\Neo.VM.Benchmarks.csproj\", \"{1F7EE0A2-3803-478E-B4FE-EB62F076767B}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{6A621185-36A9-4E1A-8D3D-462D19503E32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6A621185-36A9-4E1A-8D3D-462D19503E32}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6A621185-36A9-4E1A-8D3D-462D19503E32}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6A621185-36A9-4E1A-8D3D-462D19503E32}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{56063C9E-49B3-4CE2-96C5-E5F7ECACC5FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{56063C9E-49B3-4CE2-96C5-E5F7ECACC5FC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{56063C9E-49B3-4CE2-96C5-E5F7ECACC5FC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{56063C9E-49B3-4CE2-96C5-E5F7ECACC5FC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1F7EE0A2-3803-478E-B4FE-EB62F076767B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1F7EE0A2-3803-478E-B4FE-EB62F076767B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1F7EE0A2-3803-478E-B4FE-EB62F076767B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1F7EE0A2-3803-478E-B4FE-EB62F076767B}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{6A621185-36A9-4E1A-8D3D-462D19503E32} = {0F08E36C-9F18-423D-8F8C-C8C2FACF00F7}\n\t\t{56063C9E-49B3-4CE2-96C5-E5F7ECACC5FC} = {210DA31B-019E-48CE-9498-D56A7987C4E6}\n\t\t{1F7EE0A2-3803-478E-B4FE-EB62F076767B} = {68EA7507-C4D7-4BF1-9552-D6ACDC00C209}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {F8AC7AA8-85DE-4A98-9B58-BA08AB813C99}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "src/Neo.VM/BadScriptException.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// BadScriptException.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents the exception thrown when the bad script is parsed.\n/// </summary>\npublic class BadScriptException : Exception\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"BadScriptException\"/> class.\n    /// </summary>\n    public BadScriptException() { }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"BadScriptException\"/> class with a specified error message.\n    /// </summary>\n    /// <param name=\"message\">The message that describes the error.</param>\n    public BadScriptException(string message) : base(message) { }\n}\n"
  },
  {
    "path": "src/Neo.VM/CatchableException.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// CatchableException.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\n\nnamespace Neo.VM;\n\npublic class CatchableException : Exception\n{\n    public CatchableException(string message) : base(message)\n    {\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Collections/OrderedDictionary.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// OrderedDictionary.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\n#if !NET5_0_OR_GREATER\n\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\n\nnamespace Neo.VM.Collections;\n\nclass OrderedDictionary<TKey, TValue> : IDictionary<TKey, TValue> where TKey : notnull\n{\n    private class TItem\n    {\n        public readonly TKey Key;\n        public TValue Value;\n\n        public TItem(TKey key, TValue value)\n        {\n            Key = key;\n            Value = value;\n        }\n    }\n\n    private class InternalCollection : KeyedCollection<TKey, TItem>\n    {\n        protected override TKey GetKeyForItem(TItem item)\n        {\n            return item.Key;\n        }\n    }\n\n    private readonly InternalCollection collection = new();\n\n    public int Count => collection.Count;\n    public bool IsReadOnly => false;\n    public ICollection<TKey> Keys => collection.Select(p => p.Key).ToArray();\n    public ICollection<TValue> Values => collection.Select(p => p.Value).ToArray();\n\n    public TValue this[TKey key]\n    {\n        get\n        {\n            return collection[key].Value;\n        }\n        set\n        {\n            if (collection.TryGetValue(key, out var entry))\n                entry.Value = value;\n            else\n                Add(key, value);\n        }\n    }\n\n    public void Add(TKey key, TValue value)\n    {\n        collection.Add(new TItem(key, value));\n    }\n\n    public bool ContainsKey(TKey key)\n    {\n        return collection.Contains(key);\n    }\n\n    public bool Remove(TKey key)\n    {\n        return collection.Remove(key);\n    }\n\n    public bool TryGetValue(TKey key, out TValue value)\n    {\n        if (collection.TryGetValue(key, out var entry))\n        {\n            value = entry.Value;\n            return true;\n        }\n        value = default!;\n        return false;\n    }\n\n    void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> item)\n    {\n        Add(item.Key, item.Value);\n    }\n\n    public void Clear()\n    {\n        collection.Clear();\n    }\n\n    bool ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue> item)\n    {\n        return collection.Contains(item.Key);\n    }\n\n    void ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)\n    {\n        for (int i = 0; i < collection.Count; i++)\n            array[i + arrayIndex] = new KeyValuePair<TKey, TValue>(collection[i].Key, collection[i].Value);\n    }\n\n    bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> item)\n    {\n        return collection.Remove(item.Key);\n    }\n\n    IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()\n    {\n        return collection.Select(p => new KeyValuePair<TKey, TValue>(p.Key, p.Value)).GetEnumerator();\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return collection.Select(p => new KeyValuePair<TKey, TValue>(p.Key, p.Value)).GetEnumerator();\n    }\n}\n\n#endif\n"
  },
  {
    "path": "src/Neo.VM/Debugger.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Debugger.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System.Collections.Generic;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// A simple debugger for <see cref=\"ExecutionEngine\"/>.\n/// </summary>\npublic class Debugger\n{\n    private readonly ExecutionEngine _engine;\n    private readonly Dictionary<Script, HashSet<uint>> _breakPoints = new();\n\n    /// <summary>\n    /// Create a debugger on the specified <see cref=\"ExecutionEngine\"/>.\n    /// </summary>\n    /// <param name=\"engine\">The <see cref=\"ExecutionEngine\"/> to attach the debugger.</param>\n    public Debugger(ExecutionEngine engine)\n    {\n        _engine = engine;\n    }\n\n    /// <summary>\n    /// Add a breakpoint at the specified position of the specified script.\n    /// The VM will break the execution when it reaches the breakpoint.\n    /// </summary>\n    /// <param name=\"script\">The script to add the breakpoint.</param>\n    /// <param name=\"position\">The position of the breakpoint in the script.</param>\n    public void AddBreakPoint(Script script, uint position)\n    {\n        if (!_breakPoints.TryGetValue(script, out var hashset))\n        {\n            hashset = new HashSet<uint>();\n            _breakPoints.Add(script, hashset);\n        }\n        hashset.Add(position);\n    }\n\n    /// <summary>\n    /// Start or continue execution of the VM.\n    /// </summary>\n    /// <returns>Returns the state of the VM after the execution.</returns>\n    public VMState Execute()\n    {\n        if (_engine.State == VMState.BREAK)\n            _engine.State = VMState.NONE;\n        while (_engine.State == VMState.NONE)\n            ExecuteAndCheckBreakPoints();\n        return _engine.State;\n    }\n\n    private void ExecuteAndCheckBreakPoints()\n    {\n        _engine.ExecuteNext();\n        if (_engine.State == VMState.NONE && _engine.InvocationStack.Count > 0 && _breakPoints.Count > 0)\n        {\n            if (_breakPoints.TryGetValue(_engine.CurrentContext!.Script, out var hashset) &&\n                hashset.Contains((uint)_engine.CurrentContext.InstructionPointer))\n            {\n                _engine.State = VMState.BREAK;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Removes the breakpoint at the specified position in the specified script.\n    /// </summary>\n    /// <param name=\"script\">The script to remove the breakpoint.</param>\n    /// <param name=\"position\">The position of the breakpoint in the script.</param>\n    /// <returns>\n    /// <see langword=\"true\"/> if the breakpoint is successfully found and removed;\n    /// otherwise, <see langword=\"false\"/>.\n    /// </returns>\n    public bool RemoveBreakPoint(Script script, uint position)\n    {\n        if (!_breakPoints.TryGetValue(script, out var hashset)) return false;\n        if (!hashset.Remove(position)) return false;\n        if (hashset.Count == 0) _breakPoints.Remove(script);\n        return true;\n    }\n\n    /// <summary>\n    /// Execute the next instruction.\n    /// If the instruction involves a call to a method,\n    /// it steps into the method and breaks the execution on the first instruction of that method.\n    /// </summary>\n    /// <returns>The VM state after the instruction is executed.</returns>\n    public VMState StepInto()\n    {\n        if (_engine.State == VMState.HALT || _engine.State == VMState.FAULT)\n            return _engine.State;\n        _engine.ExecuteNext();\n        if (_engine.State == VMState.NONE)\n            _engine.State = VMState.BREAK;\n        return _engine.State;\n    }\n\n    /// <summary>\n    /// Execute until the currently executed method is returned.\n    /// </summary>\n    /// <returns>The VM state after the currently executed method is returned.</returns>\n    public VMState StepOut()\n    {\n        if (_engine.State == VMState.BREAK)\n            _engine.State = VMState.NONE;\n        int c = _engine.InvocationStack.Count;\n        while (_engine.State == VMState.NONE && _engine.InvocationStack.Count >= c)\n            ExecuteAndCheckBreakPoints();\n        if (_engine.State == VMState.NONE)\n            _engine.State = VMState.BREAK;\n        return _engine.State;\n    }\n\n    /// <summary>\n    /// Execute the next instruction.\n    /// If the instruction involves a call to a method, it does not step into the method (it steps over it instead).\n    /// </summary>\n    /// <returns>The VM state after the instruction is executed.</returns>\n    public VMState StepOver()\n    {\n        if (_engine.State == VMState.HALT || _engine.State == VMState.FAULT)\n            return _engine.State;\n        _engine.State = VMState.NONE;\n        int c = _engine.InvocationStack.Count;\n        do\n        {\n            ExecuteAndCheckBreakPoints();\n        }\n        while (_engine.State == VMState.NONE && _engine.InvocationStack.Count > c);\n        if (_engine.State == VMState.NONE)\n            _engine.State = VMState.BREAK;\n        return _engine.State;\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/EvaluationStack.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// EvaluationStack.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents the evaluation stack in the VM.\n/// </summary>\npublic sealed class EvaluationStack : IReadOnlyList<StackItem>\n{\n    private readonly List<StackItem> _innerList = [];\n    private readonly IReferenceCounter _referenceCounter;\n\n    internal IReferenceCounter ReferenceCounter => _referenceCounter;\n\n    internal EvaluationStack(IReferenceCounter referenceCounter)\n    {\n        _referenceCounter = referenceCounter;\n    }\n\n    public StackItem this[int index]\n    {\n        get => Peek(index);\n    }\n\n    public IReadOnlyList<StackItem> this[Range range]\n    {\n        get\n        {\n            var start = range.Start.GetOffset(_innerList.Count);\n            var end = range.End.GetOffset(_innerList.Count);\n\n            if (start > end)\n                throw new ArgumentOutOfRangeException(nameof(range), \"Range start must be less than or equal to end.\");\n\n            List<StackItem> copyList = new(_innerList);\n            copyList.Reverse();\n            return copyList.GetRange(start, end - start);\n        }\n    }\n\n    /// <summary>\n    /// Gets the number of items on the stack.\n    /// </summary>\n    public int Count => _innerList.Count;\n\n    internal void Clear()\n    {\n        foreach (var item in _innerList)\n            _referenceCounter.RemoveStackReference(item);\n        _innerList.Clear();\n    }\n\n    internal void CopyTo(EvaluationStack stack, int count = -1)\n    {\n        if (count < -1 || count > _innerList.Count)\n            throw new ArgumentOutOfRangeException(nameof(count), $\"Out of stack bounds: {count}/{_innerList.Count}\");\n        if (count == 0) return;\n        if (count == -1 || count == _innerList.Count)\n            stack._innerList.AddRange(_innerList);\n        else\n            stack._innerList.AddRange(_innerList.Skip(_innerList.Count - count));\n    }\n\n    public IEnumerator<StackItem> GetEnumerator()\n    {\n        return _innerList.GetEnumerator();\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return _innerList.GetEnumerator();\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal void Insert(int index, StackItem item)\n    {\n        if (index > _innerList.Count)\n            throw new InvalidOperationException($\"Insert index is out of stack bounds: {index}/{_innerList.Count}\");\n        _innerList.Insert(_innerList.Count - index, item);\n        _referenceCounter.AddStackReference(item);\n    }\n\n    internal void MoveTo(EvaluationStack stack, int count = -1)\n    {\n        if (count == 0) return;\n        CopyTo(stack, count);\n        if (count == -1 || count == _innerList.Count)\n            _innerList.Clear();\n        else\n            _innerList.RemoveRange(_innerList.Count - count, count);\n    }\n\n    /// <summary>\n    /// Returns the item at the specified index from the top of the stack without removing it.\n    /// </summary>\n    /// <param name=\"index\">The index of the object from the top of the stack.</param>\n    /// <returns>The item at the specified index.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public StackItem Peek(int index = 0)\n    {\n        if (index >= _innerList.Count)\n            throw new InvalidOperationException($\"Peek index is out of stack bounds: {index}/{_innerList.Count}\");\n        if (index < 0)\n        {\n            index += _innerList.Count;\n            if (index < 0) throw new InvalidOperationException($\"Peek index is out of stack bounds: {index}/{_innerList.Count}\");\n        }\n        return _innerList[_innerList.Count - index - 1];\n    }\n\n    /// <summary>\n    /// Pushes an item onto the top of the stack.\n    /// </summary>\n    /// <param name=\"item\">The item to be pushed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void Push(StackItem item)\n    {\n        _innerList.Add(item);\n        _referenceCounter.AddStackReference(item);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal void Reverse(int n)\n    {\n        if (n < 0 || n > _innerList.Count)\n            throw new ArgumentOutOfRangeException(nameof(n), $\"Out of stack bounds: {n}/{_innerList.Count}\");\n        if (n <= 1) return;\n        _innerList.Reverse(_innerList.Count - n, n);\n    }\n\n    /// <summary>\n    /// Swaps two items on the stack by their indices from the top.\n    /// This is an O(1) operation that doesn't trigger reference counting changes.\n    /// Note: The caller must ensure indices are within bounds and non-negative.\n    /// </summary>\n    /// <param name=\"index1\">First index from top of stack.</param>\n    /// <param name=\"index2\">Second index from top of stack.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal void Swap(int index1, int index2)\n    {\n        if (index1 == index2) return;\n\n        int actualIndex1 = _innerList.Count - index1 - 1;\n        int actualIndex2 = _innerList.Count - index2 - 1;\n\n        // Direct swap - no reference counting needed since items stay on stack\n        (_innerList[actualIndex1], _innerList[actualIndex2]) = (_innerList[actualIndex2], _innerList[actualIndex1]);\n    }\n\n    /// <summary>\n    /// Removes and returns the item at the top of the stack.\n    /// </summary>\n    /// <returns>The item removed from the top of the stack.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public StackItem Pop()\n    {\n        return Remove<StackItem>(0);\n    }\n\n    /// <summary>\n    /// Removes and returns the item at the top of the stack and convert it to the specified type.\n    /// </summary>\n    /// <typeparam name=\"T\">The type to convert to.</typeparam>\n    /// <returns>The item removed from the top of the stack.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public T Pop<T>() where T : StackItem\n    {\n        return Remove<T>(0);\n    }\n\n    internal T Remove<T>(int index) where T : StackItem\n    {\n        if (index >= _innerList.Count)\n            throw new ArgumentOutOfRangeException(nameof(index), $\"Out of stack bounds: {index}/{_innerList.Count}\");\n        if (index < 0)\n        {\n            index += _innerList.Count;\n            if (index < 0)\n                throw new ArgumentOutOfRangeException(nameof(index), $\"Out of stack bounds: {index}/{_innerList.Count}\");\n        }\n        index = _innerList.Count - index - 1;\n        if (_innerList[index] is not T item)\n            throw new InvalidCastException($\"The item can't be casted to type {typeof(T)}\");\n        _innerList.RemoveAt(index);\n        _referenceCounter.RemoveStackReference(item);\n        return item;\n    }\n\n    public override string ToString()\n    {\n        return $\"[{string.Join(\", \", _innerList.Select(p => $\"{p.Type}({p})\"))}]\";\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/ExceptionHandlingContext.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ExceptionHandlingContext.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System.Diagnostics;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents the context used for exception handling.\n/// </summary>\n[DebuggerDisplay(\"State={State}, CatchPointer={CatchPointer}, FinallyPointer={FinallyPointer}, EndPointer={EndPointer}\")]\npublic sealed class ExceptionHandlingContext\n{\n    /// <summary>\n    /// The position of the <see langword=\"catch\"/> block.\n    /// </summary>\n    public int CatchPointer { get; }\n\n    /// <summary>\n    /// The position of the <see langword=\"finally\"/> block.\n    /// </summary>\n    public int FinallyPointer { get; }\n\n    /// <summary>\n    /// The end position of the <see langword=\"try\"/>-<see langword=\"catch\"/>-<see langword=\"finally\"/> block.\n    /// </summary>\n    public int EndPointer { get; internal set; } = -1;\n\n    /// <summary>\n    /// Indicates whether the <see langword=\"catch\"/> block is included in the context.\n    /// </summary>\n    public bool HasCatch => CatchPointer >= 0;\n\n    /// <summary>\n    /// Indicates whether the <see langword=\"finally\"/> block is included in the context.\n    /// </summary>\n    public bool HasFinally => FinallyPointer >= 0;\n\n    /// <summary>\n    /// Indicates the state of the context.\n    /// </summary>\n    public ExceptionHandlingState State { get; internal set; } = ExceptionHandlingState.Try;\n\n    internal ExceptionHandlingContext(int catchPointer, int finallyPointer)\n    {\n        CatchPointer = catchPointer;\n        FinallyPointer = finallyPointer;\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/ExceptionHandlingState.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ExceptionHandlingState.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Indicates the state of the <see cref=\"ExceptionHandlingContext\"/>.\n/// </summary>\npublic enum ExceptionHandlingState : byte\n{\n    /// <summary>\n    /// Indicates that the <see langword=\"try\"/> block is being executed.\n    /// </summary>\n    Try,\n\n    /// <summary>\n    /// Indicates that the <see langword=\"catch\"/> block is being executed.\n    /// </summary>\n    Catch,\n\n    /// <summary>\n    /// Indicates that the <see langword=\"finally\"/> block is being executed.\n    /// </summary>\n    Finally\n}\n"
  },
  {
    "path": "src/Neo.VM/ExecutionContext.SharedStates.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ExecutionContext.SharedStates.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Neo.VM;\n\npartial class ExecutionContext\n{\n    private class SharedStates\n    {\n        public readonly Script Script;\n        public readonly EvaluationStack EvaluationStack;\n        public Slot? StaticFields;\n        public readonly Dictionary<Type, object> States;\n\n        public SharedStates(Script script, IReferenceCounter referenceCounter)\n        {\n            Script = script;\n            EvaluationStack = new(referenceCounter);\n            States = new();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/ExecutionContext.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ExecutionContext.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents a frame in the VM execution stack.\n/// </summary>\n[DebuggerDisplay(\"InstructionPointer={InstructionPointer}\")]\npublic sealed partial class ExecutionContext\n{\n    private readonly SharedStates _sharedStates;\n    private int _instructionPointer;\n\n    /// <summary>\n    /// Indicates the number of values that the context should return when it is unloaded.\n    /// </summary>\n    public int RVCount { get; }\n\n    /// <summary>\n    /// The script to run in this context.\n    /// </summary>\n    public Script Script => _sharedStates.Script;\n\n    /// <summary>\n    /// The evaluation stack for this context.\n    /// </summary>\n    public EvaluationStack EvaluationStack => _sharedStates.EvaluationStack;\n\n    /// <summary>\n    /// The slot used to store the static fields.\n    /// </summary>\n    public Slot? StaticFields\n    {\n        get => _sharedStates.StaticFields;\n        internal set => _sharedStates.StaticFields = value;\n    }\n\n    /// <summary>\n    /// The slot used to store the local variables of the current method.\n    /// </summary>\n    public Slot? LocalVariables { get; internal set; }\n\n    /// <summary>\n    /// The slot used to store the arguments of the current method.\n    /// </summary>\n    public Slot? Arguments { get; internal set; }\n\n    /// <summary>\n    /// The stack containing nested <see cref=\"ExceptionHandlingContext\"/>.\n    /// </summary>\n    public Stack<ExceptionHandlingContext>? TryStack { get; internal set; }\n\n    /// <summary>\n    /// The pointer indicating the current instruction.\n    /// </summary>\n    public int InstructionPointer\n    {\n        get\n        {\n            return _instructionPointer;\n        }\n        internal set\n        {\n            if (value < 0 || value > Script.Length)\n                throw new ArgumentOutOfRangeException(nameof(value), $\"Out of script bounds: {value}/{Script.Length}\");\n            _instructionPointer = value;\n        }\n    }\n\n    /// <summary>\n    /// Returns the current <see cref=\"Instruction\"/>.\n    /// </summary>\n    public Instruction? CurrentInstruction\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return GetInstruction(InstructionPointer);\n        }\n    }\n\n    /// <summary>\n    /// Returns the next <see cref=\"Instruction\"/>.\n    /// </summary>\n    public Instruction? NextInstruction\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            var current = CurrentInstruction;\n            if (current is null) return null;\n            return GetInstruction(InstructionPointer + current.Size);\n        }\n    }\n\n    internal ExecutionContext(Script script, int rvcount, IReferenceCounter referenceCounter)\n        : this(new SharedStates(script, referenceCounter), rvcount, 0)\n    {\n    }\n\n    private ExecutionContext(SharedStates sharedStates, int rvcount, int initialPosition)\n    {\n        if (rvcount < -1 || rvcount > ushort.MaxValue)\n            throw new ArgumentOutOfRangeException(nameof(rvcount), $\"Out of range: {rvcount}\");\n        _sharedStates = sharedStates;\n        RVCount = rvcount;\n        InstructionPointer = initialPosition;\n    }\n\n    /// <summary>\n    /// Clones the context so that they share the same script, stack, and static fields.\n    /// </summary>\n    /// <returns>The cloned context.</returns>\n    public ExecutionContext Clone()\n    {\n        return Clone(InstructionPointer);\n    }\n\n    /// <summary>\n    /// Clones the context so that they share the same script, stack, and static fields.\n    /// </summary>\n    /// <param name=\"initialPosition\">The instruction pointer of the new context.</param>\n    /// <returns>The cloned context.</returns>\n    public ExecutionContext Clone(int initialPosition)\n    {\n        return new ExecutionContext(_sharedStates, 0, initialPosition);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private Instruction? GetInstruction(int ip) => ip >= Script.Length ? null : Script.GetInstruction(ip);\n\n    /// <summary>\n    /// Gets custom data of the specified type. If the data does not exist, create a new one.\n    /// </summary>\n    /// <typeparam name=\"T\">The type of data to be obtained.</typeparam>\n    /// <param name=\"factory\">A delegate used to create the entry. If factory is null, new() will be used.</param>\n    /// <returns>The custom data of the specified type.</returns>\n    public T GetState<T>(Func<T>? factory = null) where T : class, new()\n    {\n        if (!_sharedStates.States.TryGetValue(typeof(T), out var value))\n        {\n            value = factory is null ? new T() : factory();\n            _sharedStates.States[typeof(T)] = value;\n        }\n        return (T)value;\n    }\n\n    internal bool MoveNext()\n    {\n        var current = CurrentInstruction;\n        if (current is null) return false;\n        InstructionPointer += current.Size;\n        return InstructionPointer < Script.Length;\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/ExecutionEngine.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ExecutionEngine.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents the VM used to execute the script.\n/// </summary>\npublic class ExecutionEngine : IDisposable\n{\n    private VMState _state = VMState.BREAK;\n\n    internal bool isJumping = false;\n\n    public JumpTable JumpTable { get; }\n\n    /// <summary>\n    /// Restrictions on the VM.\n    /// </summary>\n    public ExecutionEngineLimits Limits { get; }\n\n    /// <summary>\n    /// Used for reference counting of objects in the VM.\n    /// </summary>\n    public IReferenceCounter ReferenceCounter { get; }\n\n    /// <summary>\n    /// The invocation stack of the VM.\n    /// </summary>\n    public Stack<ExecutionContext> InvocationStack { get; } = new();\n\n    /// <summary>\n    /// The top frame of the invocation stack.\n    /// </summary>\n    public ExecutionContext? CurrentContext { get; private set; }\n\n    /// <summary>\n    /// The bottom frame of the invocation stack.\n    /// </summary>\n    public ExecutionContext? EntryContext { get; private set; }\n\n    /// <summary>\n    /// The stack to store the return values.\n    /// </summary>\n    public EvaluationStack ResultStack { get; }\n\n    /// <summary>\n    /// The VM object representing the uncaught exception.\n    /// </summary>\n    public StackItem? UncaughtException { get; internal set; }\n\n    /// <summary>\n    /// The current state of the VM.\n    /// </summary>\n    public VMState State\n    {\n        get\n        {\n            return _state;\n        }\n        protected internal set\n        {\n            if (_state != value)\n            {\n                _state = value;\n                OnStateChanged();\n            }\n        }\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ExecutionEngine\"/> class.\n    /// </summary>\n    /// <param name=\"jumpTable\">The jump table to be used.</param>\n    public ExecutionEngine(JumpTable? jumpTable = null)\n        : this(jumpTable, new ReferenceCounterV2(), ExecutionEngineLimits.Default) { }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ExecutionEngine\"/> class\n    /// with the specified <see cref=\"VM.IReferenceCounter\"/> and <see cref=\"ExecutionEngineLimits\"/>.\n    /// </summary>\n    /// <param name=\"jumpTable\">The jump table to be used.</param>\n    /// <param name=\"referenceCounter\">The reference counter to be used.</param>\n    /// <param name=\"limits\">Restrictions on the VM.</param>\n    internal ExecutionEngine(JumpTable? jumpTable, IReferenceCounter referenceCounter, ExecutionEngineLimits limits)\n    {\n        JumpTable = jumpTable ?? JumpTable.Default;\n        Limits = limits;\n        ReferenceCounter = referenceCounter;\n        ResultStack = new(referenceCounter);\n    }\n\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n\n    protected virtual void Dispose(bool disposing)\n    {\n        if (disposing)\n        {\n            InvocationStack.Clear();\n        }\n    }\n\n    /// <summary>\n    /// Start execution of the VM.\n    /// </summary>\n    /// <returns></returns>\n    public virtual VMState Execute()\n    {\n        if (State == VMState.BREAK)\n            State = VMState.NONE;\n        while (State != VMState.HALT && State != VMState.FAULT)\n            ExecuteNext();\n        return State;\n    }\n\n    /// <summary>\n    /// Execute the next instruction.\n    /// </summary>\n    protected internal void ExecuteNext()\n    {\n        if (InvocationStack.Count == 0)\n        {\n            State = VMState.HALT;\n        }\n        else\n        {\n            try\n            {\n                ExecutionContext context = CurrentContext!;\n                Instruction? currentInstruction = context.CurrentInstruction;\n                Instruction instruction = currentInstruction ?? Instruction.RET;\n                PreExecuteInstruction(instruction);\n#if VMPERF\n                Console.WriteLine(\"op:[\"\n                                  + this.CurrentContext.InstructionPointer.ToString(\"X04\")\n                                  + \"]\"\n                                  + this.CurrentContext.CurrentInstruction?.OpCode\n                                  + \" \"\n                                  + this.CurrentContext.EvaluationStack);\n#endif\n                try\n                {\n                    JumpTable[instruction.OpCode](this, instruction);\n                }\n                catch (CatchableException ex) when (Limits.CatchEngineExceptions)\n                {\n                    JumpTable.ExecuteThrow(this, ex.Message);\n                }\n                PostExecuteInstruction(instruction);\n                if (!isJumping && currentInstruction != null)\n                    context.InstructionPointer += instruction.Size;\n                isJumping = false;\n            }\n            catch (Exception e)\n            {\n                OnFault(e);\n            }\n        }\n    }\n\n    /// <summary>\n    /// Loads the specified context into the invocation stack.\n    /// </summary>\n    /// <param name=\"context\">The context to load.</param>\n    public virtual void LoadContext(ExecutionContext context)\n    {\n        if (InvocationStack.Count >= Limits.MaxInvocationStackSize)\n            throw new InvalidOperationException($\"MaxInvocationStackSize exceed: {InvocationStack.Count}\");\n        InvocationStack.Push(context);\n        EntryContext ??= context;\n        CurrentContext = context;\n    }\n\n    /// <summary>\n    /// Called when a context is unloaded.\n    /// </summary>\n    /// <param name=\"context\">The context being unloaded.</param>\n    internal protected virtual void ContextUnloaded(ExecutionContext context)\n    {\n        if (InvocationStack.Count == 0)\n        {\n            CurrentContext = null;\n            EntryContext = null;\n        }\n        else\n        {\n            CurrentContext = InvocationStack.Peek();\n        }\n        if (context.StaticFields != null && context.StaticFields != CurrentContext?.StaticFields)\n        {\n            context.StaticFields.ClearReferences();\n        }\n        context.LocalVariables?.ClearReferences();\n        context.Arguments?.ClearReferences();\n    }\n\n    /// <summary>\n    /// Create a new context with the specified script without loading.\n    /// </summary>\n    /// <param name=\"script\">The script used to create the context.</param>\n    /// <param name=\"rvcount\">The number of values that the context should return when it is unloaded.</param>\n    /// <param name=\"initialPosition\">The pointer indicating the current instruction.</param>\n    /// <returns>The created context.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    protected ExecutionContext CreateContext(Script script, int rvcount, int initialPosition)\n    {\n        return new ExecutionContext(script, rvcount, ReferenceCounter)\n        {\n            InstructionPointer = initialPosition\n        };\n    }\n\n    /// <summary>\n    /// Create a new context with the specified script and load it.\n    /// </summary>\n    /// <param name=\"script\">The script used to create the context.</param>\n    /// <param name=\"rvcount\">The number of values that the context should return when it is unloaded.</param>\n    /// <param name=\"initialPosition\">The pointer indicating the current instruction.</param>\n    /// <returns>The created context.</returns>\n    public ExecutionContext LoadScript(Script script, int rvcount = -1, int initialPosition = 0)\n    {\n        var context = CreateContext(script, rvcount, initialPosition);\n        LoadContext(context);\n        return context;\n    }\n\n    /// <summary>\n    /// Called when an exception that cannot be caught by the VM is thrown.\n    /// </summary>\n    /// <param name=\"ex\">The exception that caused the <see cref=\"VMState.FAULT\"/> state.</param>\n    protected virtual void OnFault(Exception ex)\n    {\n        State = VMState.FAULT;\n\n#if VMPERF\n        if (ex != null)\n        {\n            Console.Error.WriteLine(ex);\n        }\n#endif\n    }\n\n    /// <summary>\n    /// Called when the state of the VM changed.\n    /// </summary>\n    protected virtual void OnStateChanged()\n    {\n    }\n\n    /// <summary>\n    /// Returns the item at the specified index from the top of the current stack without removing it.\n    /// </summary>\n    /// <param name=\"index\">The index of the object from the top of the stack.</param>\n    /// <returns>The item at the specified index.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public StackItem Peek(int index = 0)\n    {\n        return CurrentContext!.EvaluationStack.Peek(index);\n    }\n\n    /// <summary>\n    /// Removes and returns the item at the top of the current stack.\n    /// </summary>\n    /// <returns>The item removed from the top of the stack.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public StackItem Pop()\n    {\n        return CurrentContext!.EvaluationStack.Pop();\n    }\n\n    /// <summary>\n    /// Removes and returns the item at the top of the current stack and convert it to the specified type.\n    /// </summary>\n    /// <typeparam name=\"T\">The type to convert to.</typeparam>\n    /// <returns>The item removed from the top of the stack.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public T Pop<T>() where T : StackItem\n    {\n        return CurrentContext!.EvaluationStack.Pop<T>();\n    }\n\n    /// <summary>\n    /// Called after an instruction is executed.\n    /// </summary>\n    protected virtual void PostExecuteInstruction(Instruction instruction)\n    {\n        ReferenceCounter.CheckPostExecution();\n    }\n\n    /// <summary>\n    /// Called before an instruction is executed.\n    /// </summary>\n    protected virtual void PreExecuteInstruction(Instruction instruction) { }\n\n    /// <summary>\n    /// Pushes an item onto the top of the current stack.\n    /// </summary>\n    /// <param name=\"item\">The item to be pushed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void Push(StackItem item)\n    {\n        CurrentContext!.EvaluationStack.Push(item);\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/ExecutionEngineLimits.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ExecutionEngineLimits.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents the restrictions on the VM.\n/// </summary>\npublic sealed record ExecutionEngineLimits\n{\n    /// <summary>\n    /// The default strategy.\n    /// </summary>\n    public static readonly ExecutionEngineLimits Default = new();\n\n    /// <summary>\n    /// The maximum number of bits that <see cref=\"OpCode.SHL\"/> and <see cref=\"OpCode.SHR\"/> can shift.\n    /// </summary>\n    public int MaxShift { get; init; } = 256;\n\n    /// <summary>\n    /// The maximum number of items that can be contained in the VM's evaluation stacks and slots.\n    /// </summary>\n    public uint MaxStackSize { get; init; } = 2 * 1024;\n\n    /// <summary>\n    /// The maximum size of an item in the VM.\n    /// </summary>\n    public uint MaxItemSize { get; init; } = ushort.MaxValue * 2;\n\n    /// <summary>\n    /// The largest comparable size.\n    /// If a <see cref=\"Types.ByteString\"/> or <see cref=\"Types.Struct\"/> exceeds this size,\n    /// comparison operations on it cannot be performed in the VM.\n    /// </summary>\n    public uint MaxComparableSize { get; init; } = 65536;\n\n    /// <summary>\n    /// The maximum number of frames in the invocation stack of the VM.\n    /// </summary>\n    public uint MaxInvocationStackSize { get; init; } = 1024;\n\n    /// <summary>\n    /// The maximum nesting depth of <see langword=\"try\"/>-<see langword=\"catch\"/>-<see langword=\"finally\"/> blocks.\n    /// </summary>\n    public uint MaxTryNestingDepth { get; init; } = 16;\n\n    /// <summary>\n    /// Allow to catch the ExecutionEngine Exceptions\n    /// </summary>\n    public bool CatchEngineExceptions { get; init; } = true;\n\n    /// <summary>\n    /// Assert that the size of the item meets the limit.\n    /// </summary>\n    /// <param name=\"size\">The size to be checked.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void AssertMaxItemSize(int size)\n    {\n        if (size < 0 || size > MaxItemSize)\n        {\n            throw new InvalidOperationException($\"MaxItemSize exceed: {size}/{MaxItemSize}\");\n        }\n    }\n\n    /// <summary>\n    /// Assert that the number of bits shifted meets the limit.\n    /// </summary>\n    /// <param name=\"shift\">The number of bits shifted.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void AssertShift(int shift)\n    {\n        if (shift > MaxShift || shift < 0)\n        {\n            throw new InvalidOperationException($\"Invalid shift value: {shift}/{MaxShift}\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/IReferenceCounter.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// IReferenceCounter.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Used for reference counting of objects in the VM.\n/// </summary>\npublic interface IReferenceCounter\n{\n    /// <summary>\n    /// Reference Counter version\n    /// </summary>\n    RCVersion Version { get; }\n\n    /// <summary>\n    /// Gets the count of references.\n    /// </summary>\n    int Count { get; }\n\n    /// <summary>\n    /// Adds an item to the zero-referred list.\n    ///\n    /// This method is used when an item has no remaining references.\n    /// It adds the item to the zero-referred list to be checked for cleanup later.\n    ///\n    /// Use this method when you detect that an item has zero references and may need to be cleaned up.\n    /// </summary>\n    /// <param name=\"item\">The item to add.</param>\n    void AddZeroReferred(StackItem item);\n\n    /// <summary>\n    /// Adds a reference to a specified item with a parent compound type.\n    ///\n    /// This method is used when an item gains a new reference through a parent compound type.\n    /// It increments the reference count and updates the tracking structures if necessary.\n    ///\n    /// Use this method when you need to add a reference from a compound type to a stack item.\n    /// </summary>\n    /// <param name=\"item\">The item to add a reference to.</param>\n    /// <param name=\"parent\">The parent compound type.</param>\n    void AddReference(StackItem item, CompoundType parent);\n\n    /// <summary>\n    /// Adds a stack reference to a specified item with a count.\n    ///\n    /// This method is used when an item gains a new stack reference, usually due to being pushed onto the evaluation stack.\n    /// It increments the reference count and updates the tracking structures if necessary.\n    ///\n    /// Use this method when you need to add one or more stack references to a stack item.\n    /// </summary>\n    /// <param name=\"item\">The item to add a stack reference to.</param>\n    /// <param name=\"count\">The number of references to add.</param>\n    void AddStackReference(StackItem item, int count = 1);\n\n    /// <summary>\n    /// Removes a reference from a specified item with a parent compound type.\n    ///\n    /// This method is used when an item loses a reference from a parent compound type.\n    /// It decrements the reference count and updates the tracking structures if necessary.\n    ///\n    /// Use this method when you need to remove a reference from a compound type to a stack item.\n    /// </summary>\n    /// <param name=\"item\">The item to remove a reference from.</param>\n    /// <param name=\"parent\">The parent compound type.</param>\n    void RemoveReference(StackItem item, CompoundType parent);\n\n    /// <summary>\n    /// Removes a stack reference from a specified item.\n    ///\n    /// This method is used when an item loses a stack reference, usually due to being popped off the evaluation stack.\n    /// It decrements the reference count and updates the tracking structures if necessary.\n    ///\n    /// Use this method when you need to remove one or more stack references from a stack item.\n    /// </summary>\n    /// <param name=\"item\">The item to remove a stack reference from.</param>\n    void RemoveStackReference(StackItem item);\n\n    /// <summary>\n    /// Checks and processes items that have zero references.\n    /// This method is used to check items in the zero-referred list and clean up those that are no longer needed.\n    /// </summary>\n    /// <returns>The current reference count.</returns>\n    int CheckZeroReferred();\n\n    /// <summary>\n    /// Validate reference counters after execution and throw if limits are violated.\n    /// </summary>\n    void CheckPostExecution();\n}\n"
  },
  {
    "path": "src/Neo.VM/Instruction.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Instruction.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Buffers.Binary;\nusing System.Diagnostics;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Text;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents instructions in the VM script.\n/// </summary>\n[DebuggerDisplay(\"OpCode={OpCode}\")]\npublic class Instruction\n{\n    /// <summary>\n    /// Represents the instruction with <see cref=\"OpCode.RET\"/>.\n    /// </summary>\n    public static Instruction RET { get; } = new Instruction(OpCode.RET);\n\n    /// <summary>\n    /// The <see cref=\"VM.OpCode\"/> of the instruction.\n    /// </summary>\n    public readonly OpCode OpCode;\n\n    /// <summary>\n    /// The operand of the instruction.\n    /// </summary>\n    public readonly ReadOnlyMemory<byte> Operand;\n\n    private static readonly int[] OperandSizePrefixTable = new int[256];\n    private static readonly int[] OperandSizeTable = new int[256];\n\n    /// <summary>\n    /// Gets the size of the instruction.\n    /// </summary>\n    public int Size\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            var prefixSize = OperandSizePrefixTable[(byte)OpCode];\n            return prefixSize > 0\n                ? 1 + prefixSize + Operand.Length\n                : 1 + OperandSizeTable[(byte)OpCode];\n        }\n    }\n\n    /// <summary>\n    /// Gets the first operand as <see cref=\"short\"/>.\n    /// </summary>\n    public short TokenI16\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return BinaryPrimitives.ReadInt16LittleEndian(Operand.Span);\n        }\n    }\n\n    /// <summary>\n    /// Gets the first operand as <see cref=\"int\"/>.\n    /// </summary>\n    public int TokenI32\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return BinaryPrimitives.ReadInt32LittleEndian(Operand.Span);\n        }\n    }\n\n    /// <summary>\n    /// Gets the second operand as <see cref=\"int\"/>.\n    /// </summary>\n    public int TokenI32_1\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return BinaryPrimitives.ReadInt32LittleEndian(Operand.Span[4..]);\n        }\n    }\n\n    /// <summary>\n    /// Gets the first operand as <see cref=\"sbyte\"/>.\n    /// </summary>\n    public sbyte TokenI8\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return (sbyte)Operand.Span[0];\n        }\n    }\n\n    /// <summary>\n    /// Gets the second operand as <see cref=\"sbyte\"/>.\n    /// </summary>\n    public sbyte TokenI8_1\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return (sbyte)Operand.Span[1];\n        }\n    }\n\n    /// <summary>\n    /// Gets the operand as <see cref=\"string\"/>.\n    /// </summary>\n    public string TokenString\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return Encoding.ASCII.GetString(Operand.Span);\n        }\n    }\n\n    /// <summary>\n    /// Gets the first operand as <see cref=\"ushort\"/>.\n    /// </summary>\n    public ushort TokenU16\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return BinaryPrimitives.ReadUInt16LittleEndian(Operand.Span);\n        }\n    }\n\n    /// <summary>\n    /// Gets the first operand as <see cref=\"uint\"/>.\n    /// </summary>\n    public uint TokenU32\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return BinaryPrimitives.ReadUInt32LittleEndian(Operand.Span);\n        }\n    }\n\n    /// <summary>\n    /// Gets the first operand as <see cref=\"byte\"/>.\n    /// </summary>\n    public byte TokenU8\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return Operand.Span[0];\n        }\n    }\n\n    /// <summary>\n    /// Gets the second operand as <see cref=\"byte\"/>.\n    /// </summary>\n    public byte TokenU8_1\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return Operand.Span[1];\n        }\n    }\n\n    static Instruction()\n    {\n        foreach (FieldInfo field in typeof(OpCode).GetFields(BindingFlags.Public | BindingFlags.Static))\n        {\n            var attribute = field.GetCustomAttribute<OperandSizeAttribute>();\n            if (attribute == null) continue;\n            var index = (byte)(OpCode)field.GetValue(null)!;\n            OperandSizePrefixTable[index] = attribute.SizePrefix;\n            OperandSizeTable[index] = attribute.Size;\n        }\n    }\n\n    private Instruction(OpCode opcode)\n    {\n        OpCode = opcode;\n#if NET5_0_OR_GREATER\n        if (!Enum.IsDefined(opcode)) throw new BadScriptException();\n#else\n        if (!Enum.IsDefined(typeof(OpCode), opcode)) throw new BadScriptException();\n#endif\n    }\n\n    internal Instruction(ReadOnlyMemory<byte> script, int ip) : this((OpCode)script.Span[ip++])\n    {\n        var span = script.Span;\n        var operandSizePrefix = OperandSizePrefixTable[(byte)OpCode];\n        var operandSize = 0;\n        switch (operandSizePrefix)\n        {\n            case 0:\n                operandSize = OperandSizeTable[(byte)OpCode];\n                break;\n            case 1:\n                if (ip >= span.Length)\n                    throw new BadScriptException($\"Instruction out of bounds. InstructionPointer: {ip}\");\n                operandSize = span[ip];\n                break;\n            case 2:\n                if (ip + 1 >= span.Length)\n                    throw new BadScriptException($\"Instruction out of bounds. InstructionPointer: {ip}\");\n                operandSize = BinaryPrimitives.ReadUInt16LittleEndian(span[ip..]);\n                break;\n            case 4:\n                if (ip + 3 >= span.Length)\n                    throw new BadScriptException($\"Instruction out of bounds. InstructionPointer: {ip}\");\n                operandSize = BinaryPrimitives.ReadInt32LittleEndian(span[ip..]);\n                if (operandSize < 0)\n                    throw new BadScriptException($\"Instruction out of bounds. InstructionPointer: {ip}, operandSize: {operandSize}\");\n                break;\n        }\n        ip += operandSizePrefix;\n        if (operandSize > 0)\n        {\n            if (ip + operandSize > script.Length)\n                throw new BadScriptException($\"Instrucion out of bounds. InstructionPointer: {ip}, operandSize: {operandSize}, length: {script.Length}\");\n            Operand = script.Slice(ip, operandSize);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/IsExternalInit.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// IsExternalInit.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\n#if !NET5_0_OR_GREATER\n\n#pragma warning disable IDE0130\n\nusing System.ComponentModel;\n\nnamespace System.Runtime.CompilerServices;\n\n/// <summary>\n/// Reserved to be used by the compiler for tracking metadata.\n/// This class should not be used by developers in source code.\n/// </summary>\n[EditorBrowsable(EditorBrowsableState.Never)]\ninternal static class IsExternalInit\n{\n}\n\n#endif\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.Bitwisee.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.Bitwisee.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\npartial class JumpTable\n{\n    /// <summary>\n    /// Flips all of the bits of an integer.\n    /// <see cref=\"OpCode.INVERT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Invert(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop().GetInteger();\n        engine.Push(~x);\n    }\n\n    /// <summary>\n    /// Computes the bitwise AND of two integers.\n    /// <see cref=\"OpCode.AND\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void And(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 & x2);\n    }\n\n    /// <summary>\n    /// Computes the bitwise OR of two integers.\n    /// <see cref=\"OpCode.OR\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Or(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 | x2);\n    }\n\n    /// <summary>\n    /// Computes the bitwise XOR (exclusive OR) of two integers.\n    /// <see cref=\"OpCode.XOR\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void XOr(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 ^ x2);\n    }\n\n    /// <summary>\n    /// Determines whether two objects are equal according to the execution engine's comparison rules.\n    /// <see cref=\"OpCode.EQUAL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Equal(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop();\n        var x1 = engine.Pop();\n        engine.Push(x1.Equals(x2, engine.Limits));\n    }\n\n    /// <summary>\n    /// Determines whether two objects are not equal according to the execution engine's comparison rules.\n    /// <see cref=\"OpCode.NOTEQUAL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NotEqual(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop();\n        var x1 = engine.Pop();\n        engine.Push(!x1.Equals(x2, engine.Limits));\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.Compound.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.Compound.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Linq;\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\nusing Array = System.Array;\nusing Buffer = Neo.VM.Types.Buffer;\nusing VMArray = Neo.VM.Types.Array;\n\nnamespace Neo.VM;\n\npartial class JumpTable\n{\n    /// <summary>\n    /// Packs a map from the evaluation stack.\n    /// <see cref=\"OpCode.PACKMAP\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2n+1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PackMap(ExecutionEngine engine, Instruction instruction)\n    {\n        var size = (int)engine.Pop().GetInteger();\n        if (size < 0 || size * 2 > engine.CurrentContext!.EvaluationStack.Count)\n            throw new InvalidOperationException($\"The map size is out of valid range, 2*{size}/[0, {engine.CurrentContext!.EvaluationStack.Count}].\");\n        Map map = new(engine.ReferenceCounter);\n        for (var i = 0; i < size; i++)\n        {\n            var key = engine.Pop<PrimitiveType>();\n            var value = engine.Pop();\n            map[key] = value;\n        }\n        engine.Push(map);\n    }\n\n    /// <summary>\n    /// Packs a struct from the evaluation stack.\n    /// <see cref=\"OpCode.PACKSTRUCT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop n+1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PackStruct(ExecutionEngine engine, Instruction instruction)\n    {\n        var size = (int)engine.Pop().GetInteger();\n        if (size < 0 || size > engine.CurrentContext!.EvaluationStack.Count)\n            throw new InvalidOperationException($\"The struct size is out of valid range, {size}/[0, {engine.CurrentContext!.EvaluationStack.Count}].\");\n        Struct @struct = new(engine.ReferenceCounter);\n        for (var i = 0; i < size; i++)\n        {\n            var item = engine.Pop();\n            @struct.Add(item);\n        }\n        engine.Push(@struct);\n    }\n\n    /// <summary>\n    /// Packs an array from the evaluation stack.\n    /// <see cref=\"OpCode.PACK\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop n+1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Pack(ExecutionEngine engine, Instruction instruction)\n    {\n        var size = (int)engine.Pop().GetInteger();\n        if (size < 0 || size > engine.CurrentContext!.EvaluationStack.Count)\n            throw new InvalidOperationException($\"The array size is out of valid range, {size}/[0, {engine.CurrentContext!.EvaluationStack.Count}].\");\n        VMArray array = new(engine.ReferenceCounter);\n        for (var i = 0; i < size; i++)\n        {\n            var item = engine.Pop();\n            array.Add(item);\n        }\n        engine.Push(array);\n    }\n\n    /// <summary>\n    /// Unpacks a compound type from the evaluation stack.\n    /// <see cref=\"OpCode.UNPACK\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 2n+1 or n+1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Unpack(ExecutionEngine engine, Instruction instruction)\n    {\n        var compound = engine.Pop<CompoundType>();\n        switch (compound)\n        {\n            case Map map:\n                foreach (var (key, value) in map.Reverse())\n                {\n                    engine.Push(value);\n                    engine.Push(key);\n                }\n                break;\n            case VMArray array:\n                for (var i = array.Count - 1; i >= 0; i--)\n                {\n                    engine.Push(array[i]);\n                }\n                break;\n            default:\n                throw new InvalidOperationException($\"Invalid type for {instruction.OpCode}: {compound.Type}\");\n        }\n        engine.Push(compound.Count);\n    }\n\n    /// <summary>\n    /// Creates a new empty array with zero elements on the evaluation stack.\n    /// <see cref=\"OpCode.NEWARRAY0\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>\n    /// Pop 0, Push 1\n    /// TODO: Change to NewNullArray method or add it?\n    /// </remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NewArray0(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(new VMArray(engine.ReferenceCounter));\n    }\n\n    /// <summary>\n    /// Creates a new array with a specified number of elements on the evaluation stack.\n    /// <see cref=\"OpCode.NEWARRAY\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NewArray(ExecutionEngine engine, Instruction instruction)\n    {\n        var n = (int)engine.Pop().GetInteger();\n        if (n < 0 || n > engine.Limits.MaxStackSize)\n            throw new InvalidOperationException($\"The array size is out of valid range, {n}/[0, {engine.Limits.MaxStackSize}].\");\n        var nullArray = new StackItem[n];\n        Array.Fill(nullArray, StackItem.Null);\n        engine.Push(new VMArray(engine.ReferenceCounter, nullArray));\n    }\n\n    /// <summary>\n    /// Creates a new array with a specified number of elements and a specified type on the evaluation stack.\n    /// <see cref=\"OpCode.NEWARRAY_T\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NewArray_T(ExecutionEngine engine, Instruction instruction)\n    {\n        var n = (int)engine.Pop().GetInteger();\n        if (n < 0 || n > engine.Limits.MaxStackSize)\n            throw new InvalidOperationException($\"The array size is out of valid range, {n}/[0, {engine.Limits.MaxStackSize}].\");\n\n        var type = (StackItemType)instruction.TokenU8;\n#if NET5_0_OR_GREATER\n        if (!Enum.IsDefined(type))\n#else\n        if (!Enum.IsDefined(typeof(StackItemType), type))\n#endif\n            throw new InvalidOperationException($\"Invalid type for {instruction.OpCode}: {instruction.TokenU8}\");\n\n        var item = instruction.TokenU8 switch\n        {\n            (byte)StackItemType.Boolean => StackItem.False,\n            (byte)StackItemType.Integer => Integer.Zero,\n            (byte)StackItemType.ByteString => ByteString.Empty,\n            _ => StackItem.Null\n        };\n        var itemArray = new StackItem[n];\n        Array.Fill(itemArray, item);\n        engine.Push(new VMArray(engine.ReferenceCounter, itemArray));\n    }\n\n    /// <summary>\n    /// Creates a new empty struct with zero elements on the evaluation stack.\n    /// <see cref=\"OpCode.NEWSTRUCT0\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 0, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NewStruct0(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(new Struct(engine.ReferenceCounter));\n    }\n\n    /// <summary>\n    /// Creates a new struct with a specified number of elements on the evaluation stack.\n    /// <see cref=\"OpCode.NEWSTRUCT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NewStruct(ExecutionEngine engine, Instruction instruction)\n    {\n        var n = (int)engine.Pop().GetInteger();\n        if (n < 0 || n > engine.Limits.MaxStackSize)\n            throw new InvalidOperationException($\"The struct size is out of valid range, {n}/[0, {engine.Limits.MaxStackSize}].\");\n\n        var nullArray = new StackItem[n];\n        Array.Fill(nullArray, StackItem.Null);\n        engine.Push(new Struct(engine.ReferenceCounter, nullArray));\n    }\n\n    /// <summary>\n    /// Creates a new empty map on the evaluation stack.\n    /// <see cref=\"OpCode.NEWMAP\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 0, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NewMap(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(new Map(engine.ReferenceCounter));\n    }\n\n    /// <summary>\n    /// Gets the size of the top item on the evaluation stack and pushes it onto the stack.\n    /// <see cref=\"OpCode.SIZE\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Size(ExecutionEngine engine, Instruction instruction)\n    {\n        // TODO: we should be able to optimize by using peek instead of dup and pop\n        var x = engine.Pop();\n        switch (x)\n        {\n            case CompoundType compound:\n                engine.Push(compound.Count);\n                break;\n            case PrimitiveType primitive:\n                engine.Push(primitive.Size);\n                break;\n            case Buffer buffer:\n                engine.Push(buffer.Size);\n                break;\n            default:\n                throw new InvalidOperationException($\"Invalid type for {instruction.OpCode}: {x.Type}\");\n        }\n    }\n\n    /// <summary>\n    /// Checks whether the top item on the evaluation stack has the specified key.\n    /// <see cref=\"OpCode.HASKEY\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void HasKey(ExecutionEngine engine, Instruction instruction)\n    {\n        var key = engine.Pop<PrimitiveType>();\n        var x = engine.Pop();\n        // Check the type of the top item and perform the corresponding action.\n        switch (x)\n        {\n            // For arrays, check if the index is within bounds and push the result onto the stack.\n            case VMArray array:\n                {\n                    var index = key.GetInteger();\n                    if (index < 0 || index >= engine.Limits.MaxItemSize)\n                        throw new InvalidOperationException($\"The index {index} is invalid for OpCode {instruction.OpCode}.\");\n                    engine.Push(index < array.Count);\n                    break;\n                }\n            // For maps, check if the key exists and push the result onto the stack.\n            case Map map:\n                {\n                    engine.Push(map.ContainsKey(key));\n                    break;\n                }\n            // For buffers, check if the index is within bounds and push the result onto the stack.\n            case Buffer buffer:\n                {\n                    var index = key.GetInteger();\n                    if (index < 0 || index >= engine.Limits.MaxItemSize)\n                        throw new InvalidOperationException($\"The index {index} is invalid for OpCode {instruction.OpCode}.\");\n                    engine.Push(index < buffer.Size);\n                    break;\n                }\n            // For byte strings, check if the index is within bounds and push the result onto the stack.\n            case ByteString array:\n                {\n                    var index = key.GetInteger();\n                    if (index < 0 || index >= engine.Limits.MaxItemSize)\n                        throw new InvalidOperationException($\"The index {index} is invalid for OpCode {instruction.OpCode}.\");\n                    engine.Push(index < array.Size);\n                    break;\n                }\n            default:\n                throw new InvalidOperationException($\"Invalid type for {instruction.OpCode}: {x.Type}\");\n        }\n    }\n\n    /// <summary>\n    /// Retrieves the keys of a map and pushes them onto the evaluation stack as an array.\n    /// <see cref=\"OpCode.KEYS\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Keys(ExecutionEngine engine, Instruction instruction)\n    {\n        var map = engine.Pop<Map>();\n        engine.Push(new VMArray(engine.ReferenceCounter, map.Keys));\n    }\n\n    /// <summary>\n    /// Retrieves the values of a compound type and pushes them onto the evaluation stack as an array.\n    /// <see cref=\"OpCode.VALUES\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Values(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop();\n        var values = x switch\n        {\n            VMArray array => array,\n            Map map => map.Values,\n            _ => throw new InvalidOperationException($\"Invalid type for {instruction.OpCode}: {x.Type}\"),\n        };\n        VMArray newArray = new(engine.ReferenceCounter);\n        foreach (var item in values)\n            if (item is Struct s)\n                newArray.Add(s.Clone(engine.Limits));\n            else\n                newArray.Add(item);\n        engine.Push(newArray);\n    }\n\n    /// <summary>\n    /// Retrieves the item from an array, map, buffer, or byte string based on the specified key,\n    /// and pushes it onto the evaluation stack.\n    /// <see cref=\"OpCode.PICKITEM\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PickItem(ExecutionEngine engine, Instruction instruction)\n    {\n        var key = engine.Pop<PrimitiveType>();\n        var x = engine.Pop();\n        switch (x)\n        {\n            case VMArray array:\n                {\n                    var index = key.GetInteger();\n                    if (index < 0 || index >= array.Count)\n                        throw new CatchableException($\"The index of {nameof(VMArray)} is out of range, {index}/[0, {array.Count}).\");\n                    engine.Push(array[(int)index]);\n                    break;\n                }\n            case Map map:\n                {\n                    if (!map.TryGetValue(key, out var value))\n                        throw new CatchableException($\"Key {key} not found in {nameof(Map)}.\");\n                    engine.Push(value);\n                    break;\n                }\n            case PrimitiveType primitive:\n                {\n                    var byteArray = primitive.GetSpan();\n                    var index = key.GetInteger();\n                    if (index < 0 || index >= byteArray.Length)\n                        throw new CatchableException($\"The index of {nameof(PrimitiveType)} is out of range, {index}/[0, {byteArray.Length}).\");\n                    engine.Push((BigInteger)byteArray[(int)index]);\n                    break;\n                }\n            case Buffer buffer:\n                {\n                    var index = key.GetInteger();\n                    if (index < 0 || index >= buffer.Size)\n                        throw new CatchableException($\"The index of {nameof(Buffer)} is out of range, {index}/[0, {buffer.Size}).\");\n                    engine.Push((BigInteger)buffer.InnerBuffer.Span[(int)index]);\n                    break;\n                }\n            default:\n                throw new InvalidOperationException($\"Invalid type for {instruction.OpCode}: {x.Type}\");\n        }\n    }\n\n    /// <summary>\n    /// Appends an item to the end of the specified array.\n    /// <see cref=\"OpCode.APPEND\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Append(ExecutionEngine engine, Instruction instruction)\n    {\n        var newItem = engine.Pop();\n        var array = engine.Pop<VMArray>();\n        if (newItem is Struct s) newItem = s.Clone(engine.Limits);\n        array.Add(newItem);\n        if (engine.ReferenceCounter.Version == RCVersion.V2 && array.IsStackReferenced)\n            engine.ReferenceCounter.AddStackReference(newItem);\n    }\n\n    /// <summary>\n    /// A value v, index n (or key) and an array (or map) are taken from main stack. Attribution array[n]=v (or map[n]=v) is performed.\n    /// <see cref=\"OpCode.SETITEM\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 3, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void SetItem(ExecutionEngine engine, Instruction instruction)\n    {\n        var value = engine.Pop();\n        if (value is Struct s) value = s.Clone(engine.Limits);\n        var key = engine.Pop<PrimitiveType>();\n        var x = engine.Pop();\n        var isRC2 = engine.ReferenceCounter.Version == RCVersion.V2;\n        switch (x)\n        {\n            case VMArray array:\n                {\n                    var index = key.GetInteger();\n                    if (index < 0 || index >= array.Count)\n                        throw new CatchableException($\"The index of {nameof(VMArray)} is out of range, {index}/[0, {array.Count}).\");\n                    var i = (int)index;\n                    if (isRC2 && array.IsStackReferenced)\n                        engine.ReferenceCounter.RemoveStackReference(array[i]);\n                    array[i] = value;\n                    if (isRC2 && array.IsStackReferenced)\n                        engine.ReferenceCounter.AddStackReference(value);\n                    break;\n                }\n            case Map map:\n                {\n                    if (isRC2 && map.IsStackReferenced)\n                    {\n                        if (!map.TryGetValue(key, out var value1))\n                        {\n                            engine.ReferenceCounter.AddStackReference(key);\n                        }\n                        else\n                        {\n                            engine.ReferenceCounter.RemoveStackReference(value1);\n                        }\n                        engine.ReferenceCounter.AddStackReference(value);\n                    }\n                    map[key] = value;\n                    break;\n                }\n            case Buffer buffer:\n                {\n                    var index = key.GetInteger();\n                    if (index < 0 || index >= buffer.Size)\n                        throw new CatchableException($\"The index of {nameof(Buffer)} is out of range, {index}/[0, {buffer.Size}).\");\n                    if (value is not PrimitiveType p)\n                        throw new InvalidOperationException($\"Only primitive type values can be set in {nameof(Buffer)} in {instruction.OpCode}.\");\n                    var b = p.GetInteger();\n                    if (b < sbyte.MinValue || b > byte.MaxValue)\n                        throw new InvalidOperationException($\"Overflow in {instruction.OpCode}, {b} is not a byte type.\");\n                    buffer.InnerBuffer.Span[(int)index] = (byte)b;\n                    break;\n                }\n            default:\n                throw new InvalidOperationException($\"Invalid type for {instruction.OpCode}: {x.Type}\");\n        }\n    }\n\n    /// <summary>\n    /// Reverses the order of items in the specified array or buffer.\n    /// <see cref=\"OpCode.REVERSEITEMS\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ReverseItems(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop();\n        switch (x)\n        {\n            case VMArray array:\n                array.Reverse();\n                break;\n            case Buffer buffer:\n                buffer.InnerBuffer.Span.Reverse();\n                break;\n            default:\n                throw new InvalidOperationException($\"Invalid type for {instruction.OpCode}: {x.Type}\");\n        }\n    }\n\n    /// <summary>\n    /// Removes the item at the specified index from the array or map.\n    /// <see cref=\"OpCode.REMOVE\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Remove(ExecutionEngine engine, Instruction instruction)\n    {\n        var key = engine.Pop<PrimitiveType>();\n        var x = engine.Pop();\n        switch (x)\n        {\n            case VMArray array:\n                var index = key.GetInteger();\n                if (index < 0 || index >= array.Count)\n                    throw new InvalidOperationException($\"The index of {nameof(VMArray)} is out of range, {index}/[0, {array.Count}).\");\n\n                var i = (int)index;\n                var item = array[i];\n                array.RemoveAt(i);\n\n                if (engine.ReferenceCounter.Version == RCVersion.V2 && array.IsStackReferenced)\n                    engine.ReferenceCounter.RemoveStackReference(item);\n                break;\n            case Map map:\n                var old = map.Remove(key);\n                if (old is not null && engine.ReferenceCounter.Version == RCVersion.V2 && map.IsStackReferenced)\n                {\n                    engine.ReferenceCounter.RemoveStackReference(key);\n                    engine.ReferenceCounter.RemoveStackReference(old);\n                }\n                break;\n            default:\n                throw new InvalidOperationException($\"Invalid type for {instruction.OpCode}: {x.Type}\");\n        }\n    }\n\n    /// <summary>\n    /// Clears all items from the compound type.\n    /// <see cref=\"OpCode.CLEARITEMS\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ClearItems(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop<CompoundType>();\n        if (engine.ReferenceCounter.Version == RCVersion.V2 && x.IsStackReferenced)\n        {\n            foreach (var xSubItem in x.SubItems)\n            {\n                engine.ReferenceCounter.RemoveStackReference(xSubItem);\n            }\n        }\n        x.Clear();\n    }\n\n    /// <summary>\n    /// Removes and returns the item at the top of the specified array.\n    /// <see cref=\"OpCode.POPITEM\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PopItem(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop<VMArray>();\n        var index = x.Count - 1;\n        var item = x[index];\n        engine.Push(item);\n        x.RemoveAt(index);\n        if (engine.ReferenceCounter.Version == RCVersion.V2 && x.IsStackReferenced)\n            engine.ReferenceCounter.RemoveStackReference(item);\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.Control.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.Control.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\npartial class JumpTable\n{\n    /// <summary>\n    /// No operation. Does nothing.\n    /// <see cref=\"OpCode.NOP\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Nop(ExecutionEngine engine, Instruction instruction)\n    {\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer,\n    /// where the offset is obtained from the first operand of the instruction and interpreted as a signed byte.\n    /// <see cref=\"OpCode.JMP\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Jmp(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteJumpOffset(engine, instruction.TokenI8);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer,\n    /// where the offset is obtained from the first operand of the instruction and interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.JMP_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Jmp_L(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteJumpOffset(engine, instruction.TokenI32);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the boolean result of popping the evaluation stack is true.\n    /// The offset is obtained from the instruction's first operand interpreted as a signed byte.\n    /// <see cref=\"OpCode.JMPIF\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpIf(ExecutionEngine engine, Instruction instruction)\n    {\n        if (engine.Pop().GetBoolean())\n            ExecuteJumpOffset(engine, instruction.TokenI8);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the boolean result of popping the evaluation stack is true.\n    /// The offset is obtained from the instruction's first operand interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.JMPIF_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpIf_L(ExecutionEngine engine, Instruction instruction)\n    {\n        if (engine.Pop().GetBoolean())\n            ExecuteJumpOffset(engine, instruction.TokenI32);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the boolean result of popping the evaluation stack is false.\n    /// The offset is obtained from the instruction's first operand interpreted as a signed byte.\n    /// <see cref=\"OpCode.JMPIFNOT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpIfNot(ExecutionEngine engine, Instruction instruction)\n    {\n        if (!engine.Pop().GetBoolean())\n            ExecuteJumpOffset(engine, instruction.TokenI8);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the boolean result of popping the evaluation stack is false.\n    /// The offset is obtained from the instruction's first operand interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.JMPIFNOT_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpIfNot_L(ExecutionEngine engine, Instruction instruction)\n    {\n        if (!engine.Pop().GetBoolean())\n            ExecuteJumpOffset(engine, instruction.TokenI32);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the two integers popped from the evaluation stack are equal.\n    /// The offset is obtained from the instruction's first operand interpreted as a signed byte.\n    /// <see cref=\"OpCode.JMPEQ\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpEq(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 == x2)\n            ExecuteJumpOffset(engine, instruction.TokenI8);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the two integers popped from the evaluation stack are equal.\n    /// The offset is obtained from the instruction's first operand interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.JMPEQ_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpEq_L(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 == x2)\n            ExecuteJumpOffset(engine, instruction.TokenI32);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the two integers popped from the evaluation stack are not equal.\n    /// The offset is obtained from the instruction's first operand interpreted as a signed byte.\n    /// <see cref=\"OpCode.JMPNE\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpNe(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 != x2)\n            ExecuteJumpOffset(engine, instruction.TokenI8);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the two integers popped from the evaluation stack are not equal.\n    /// The offset is obtained from the instruction's first operand interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.JMPNE_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpNe_L(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 != x2)\n            ExecuteJumpOffset(engine, instruction.TokenI32);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the first integer pushed onto the evaluation stack is greater than the second integer.\n    /// The offset is obtained from the instruction's first operand interpreted as a signed byte.\n    /// <see cref=\"OpCode.JMPGT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpGt(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 > x2)\n            ExecuteJumpOffset(engine, instruction.TokenI8);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the first integer pushed onto the evaluation stack is greater than the second integer.\n    /// The offset is obtained from the instruction's first operand interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.JMPGT_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpGt_L(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 > x2)\n            ExecuteJumpOffset(engine, instruction.TokenI32);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the first integer pushed onto the evaluation stack is greater than or equal to the second integer.\n    /// The offset is obtained from the instruction's first operand interpreted as a signed byte.\n    /// <see cref=\"OpCode.JMPGE\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpGe(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 >= x2)\n            ExecuteJumpOffset(engine, instruction.TokenI8);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the first integer pushed onto the evaluation stack is greater than or equal to the second integer.\n    /// The offset is obtained from the instruction's first operand interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.JMPGE_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpGe_L(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 >= x2)\n            ExecuteJumpOffset(engine, instruction.TokenI32);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the first integer pushed onto the evaluation stack is less than the second integer.\n    /// The offset is obtained from the instruction's first operand interpreted as a signed byte.\n    /// <see cref=\"OpCode.JMPLT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpLt(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 < x2)\n            ExecuteJumpOffset(engine, instruction.TokenI8);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the first integer pushed onto the evaluation stack is less than the second integer.\n    /// The offset is obtained from the instruction's first operand interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.JMPLT_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpLt_L(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 < x2)\n            ExecuteJumpOffset(engine, instruction.TokenI32);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the first integer pushed onto the evaluation stack is less than or equal to the second integer.\n    /// The offset is obtained from the instruction's first operand interpreted as a signed byte.\n    /// <see cref=\"OpCode.JMPLE\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpLe(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 <= x2)\n            ExecuteJumpOffset(engine, instruction.TokenI8);\n    }\n\n    /// <summary>\n    /// Jumps to the specified offset from the current instruction pointer\n    /// if the first integer pushed onto the evaluation stack is less than or equal to the second integer.\n    /// The offset is obtained from the instruction's first operand interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.JMPLE_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void JmpLe_L(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        if (x1 <= x2)\n            ExecuteJumpOffset(engine, instruction.TokenI32);\n    }\n\n    /// <summary>\n    /// Calls a method specified by the offset from the current instruction pointer.\n    /// The offset is obtained from the instruction's first operand interpreted as a signed byte.\n    /// <see cref=\"OpCode.CALL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Call(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteCall(engine, checked(engine.CurrentContext!.InstructionPointer + instruction.TokenI8));\n    }\n\n    /// <summary>\n    /// Calls a method specified by the offset from the current instruction pointer.\n    /// The offset is obtained from the instruction's first operand interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.CALL_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction containing the offset as the first operand.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Call_L(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteCall(engine, checked(engine.CurrentContext!.InstructionPointer + instruction.TokenI32));\n    }\n\n    /// <summary>\n    /// Calls a method specified by the pointer pushed onto the evaluation stack.\n    /// It verifies if the pointer belongs to the current script.\n    /// <see cref=\"OpCode.CALLA\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void CallA(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop<Pointer>();\n        if (x.Script != engine.CurrentContext!.Script)\n            throw new InvalidOperationException(\"Pointers can't be shared between scripts\");\n        ExecuteCall(engine, x.Position);\n    }\n\n    /// <summary>\n    /// Calls the function described by the token.\n    /// <see cref=\"OpCode.CALLT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void CallT(ExecutionEngine engine, Instruction instruction)\n    {\n        throw new InvalidOperationException($\"Token not found: {instruction.TokenU16}\");\n    }\n\n    /// <summary>\n    /// Aborts the execution by turning the virtual machine state to FAULT immediately, and the exception cannot be caught.\n    /// <see cref=\"OpCode.ABORT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Abort(ExecutionEngine engine, Instruction instruction)\n    {\n        throw new Exception($\"{OpCode.ABORT} is executed.\");\n    }\n\n    /// <summary>\n    /// Pop the top value of the stack. If it's false, exit vm execution and set vm state to FAULT.\n    /// <see cref=\"OpCode.ASSERT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Assert(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop().GetBoolean();\n        if (!x)\n            throw new Exception($\"{OpCode.ASSERT} is executed with false result.\");\n    }\n\n    /// <summary>\n    /// Pop the top value of the stack, and throw it.\n    /// <see cref=\"OpCode.THROW\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Throw(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteThrow(engine, engine.Pop());\n    }\n\n    /// <summary>\n    /// Initiates a try block with the specified catch and finally offsets.\n    /// If there's no catch block, set CatchOffset to 0. If there's no finally block, set FinallyOffset to 0.\n    /// where the catch offset is obtained from the first operand of the instruction and interpreted as a signed byte，\n    /// the catch offset is obtained from the second operand of the instruction and interpreted as a signed byte.\n    /// <see cref=\"OpCode.TRY\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Try(ExecutionEngine engine, Instruction instruction)\n    {\n        int catchOffset = instruction.TokenI8;\n        int finallyOffset = instruction.TokenI8_1;\n        ExecuteTry(engine, catchOffset, finallyOffset);\n    }\n\n    /// <summary>\n    /// Initiates a try block with the specified catch and finally offsets.\n    /// If there's no catch block, set CatchOffset to 0. If there's no finally block, set FinallyOffset to 0.\n    /// where the catch offset is obtained from the first operand of the instruction and interpreted as a 32-bit signed integer，\n    /// the catch offset is obtained from the second operand of the instruction and interpreted as a 32-bit signed integer.\n    /// <see cref=\"OpCode.TRY_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Try_L(ExecutionEngine engine, Instruction instruction)\n    {\n        var catchOffset = instruction.TokenI32;\n        var finallyOffset = instruction.TokenI32_1;\n        ExecuteTry(engine, catchOffset, finallyOffset);\n    }\n\n    /// <summary>\n    /// Ensures that the appropriate surrounding finally blocks are executed,\n    /// then unconditionally transfers control to the specific target instruction represented as a 1-byte signed offset\n    /// from the beginning of the current instruction.\n    /// <see cref=\"OpCode.ENDTRY\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void EndTry(ExecutionEngine engine, Instruction instruction)\n    {\n        var endOffset = instruction.TokenI8;\n        ExecuteEndTry(engine, endOffset);\n    }\n\n    /// <summary>\n    /// Ensures that the appropriate surrounding finally blocks are executed,\n    /// then unconditionally transfers control to the specific target instruction represented as a 4-byte signed offset\n    /// from the beginning of the current instruction.\n    /// <see cref=\"OpCode.ENDTRY_L\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void EndTry_L(ExecutionEngine engine, Instruction instruction)\n    {\n        var endOffset = instruction.TokenI32;\n        ExecuteEndTry(engine, endOffset);\n    }\n\n    /// <summary>\n    /// Ends the finally block. If no exception occurs or is caught,\n    /// the VM jumps to the target instruction specified by ENDTRY/ENDTRY_L.\n    /// Otherwise, the VM rethrows the exception to the upper layer.\n    /// <see cref=\"OpCode.ENDFINALLY\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void EndFinally(ExecutionEngine engine, Instruction instruction)\n    {\n        if (engine.CurrentContext!.TryStack is null)\n            throw new InvalidOperationException($\"The corresponding TRY block cannot be found.\");\n        if (!engine.CurrentContext.TryStack.TryPop(out var currentTry))\n            throw new InvalidOperationException($\"The corresponding TRY block cannot be found.\");\n\n        if (engine.UncaughtException is null)\n            engine.CurrentContext.InstructionPointer = currentTry.EndPointer;\n        else\n            ExecuteThrow(engine, engine.UncaughtException);\n\n        engine.isJumping = true;\n    }\n\n    /// <summary>\n    /// Returns from the current method.\n    /// <see cref=\"OpCode.RET\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Ret(ExecutionEngine engine, Instruction instruction)\n    {\n        var context_pop = engine.InvocationStack.Pop();\n        var stack_eval = engine.InvocationStack.Count == 0 ? engine.ResultStack : engine.InvocationStack.Peek().EvaluationStack;\n        if (context_pop.EvaluationStack != stack_eval)\n        {\n            if (context_pop.RVCount >= 0 && context_pop.EvaluationStack.Count != context_pop.RVCount)\n                // This exception indicates a mismatch between the expected and actual number of stack items.\n                // It typically occurs due to compilation errors caused by potential issues in the compiler, resulting in either too many or too few\n                // items left on the stack compared to what was anticipated by the return value count.\n                // When you run into this problem, try to reach core-devs at https://github.com/neo-project/neo for help.\n                throw new InvalidOperationException($\"Return value count mismatch: expected {context_pop.RVCount}, but got {context_pop.EvaluationStack.Count} items on the evaluation stack\");\n            context_pop.EvaluationStack.CopyTo(stack_eval);\n        }\n        if (engine.InvocationStack.Count == 0)\n            engine.State = VMState.HALT;\n        engine.ContextUnloaded(context_pop);\n        engine.isJumping = true;\n    }\n\n    /// <summary>\n    /// Calls to an interop service.\n    /// <see cref=\"OpCode.SYSCALL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The current instruction.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Syscall(ExecutionEngine engine, Instruction instruction)\n    {\n        throw new InvalidOperationException($\"Syscall not found: {instruction.TokenU32}\");\n    }\n\n    #region Execute methods\n\n    /// <summary>\n    /// Executes a call operation by loading a new execution context at the specified position.\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"position\">The position to load the new execution context.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ExecuteCall(ExecutionEngine engine, int position)\n    {\n        engine.LoadContext(engine.CurrentContext!.Clone(position));\n    }\n\n    /// <summary>\n    /// Executes the end of a try block, either popping it from the try stack or transitioning to the finally block.\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"endOffset\">The offset to the end of the try block.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ExecuteEndTry(ExecutionEngine engine, int endOffset)\n    {\n        if (engine.CurrentContext!.TryStack is null)\n            throw new InvalidOperationException($\"The corresponding TRY block cannot be found.\");\n        if (!engine.CurrentContext.TryStack.TryPeek(out var currentTry))\n            throw new InvalidOperationException($\"The corresponding TRY block cannot be found.\");\n        if (currentTry.State == ExceptionHandlingState.Finally)\n            throw new InvalidOperationException($\"The opcode {OpCode.ENDTRY} can't be executed in a FINALLY block.\");\n\n        var endPointer = checked(engine.CurrentContext.InstructionPointer + endOffset);\n        if (currentTry.HasFinally)\n        {\n            currentTry.State = ExceptionHandlingState.Finally;\n            currentTry.EndPointer = endPointer;\n            engine.CurrentContext.InstructionPointer = currentTry.FinallyPointer;\n        }\n        else\n        {\n            engine.CurrentContext.TryStack.Pop();\n            engine.CurrentContext.InstructionPointer = endPointer;\n        }\n        engine.isJumping = true;\n    }\n\n    /// <summary>\n    /// Executes a jump operation to the specified position.\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"position\">The position to jump to.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ExecuteJump(ExecutionEngine engine, int position)\n    {\n        if (position < 0 || position >= engine.CurrentContext!.Script.Length)\n            throw new ArgumentOutOfRangeException($\"Jump out of range for position: {position}\");\n        engine.CurrentContext.InstructionPointer = position;\n        engine.isJumping = true;\n    }\n\n    /// <summary>\n    /// Executes a jump operation with the specified offset from the current instruction pointer.\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"offset\">The offset from the current instruction pointer.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ExecuteJumpOffset(ExecutionEngine engine, int offset)\n    {\n        ExecuteJump(engine, checked(engine.CurrentContext!.InstructionPointer + offset));\n    }\n\n    /// <summary>\n    /// Executes a try block operation with the specified catch and finally offsets.\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"catchOffset\">The catch block offset.</param>\n    /// <param name=\"finallyOffset\">The finally block offset.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ExecuteTry(ExecutionEngine engine, int catchOffset, int finallyOffset)\n    {\n        if (catchOffset == 0 && finallyOffset == 0)\n            throw new InvalidOperationException($\"catchOffset and finallyOffset can't both be 0 in a TRY block.\");\n        if (engine.CurrentContext!.TryStack is null)\n            engine.CurrentContext.TryStack = new Stack<ExceptionHandlingContext>();\n        else if (engine.CurrentContext.TryStack.Count >= engine.Limits.MaxTryNestingDepth)\n            throw new InvalidOperationException(\"MaxTryNestingDepth exceed.\");\n        var catchPointer = catchOffset == 0 ? -1 : checked(engine.CurrentContext.InstructionPointer + catchOffset);\n        var finallyPointer = finallyOffset == 0 ? -1 : checked(engine.CurrentContext.InstructionPointer + finallyOffset);\n        engine.CurrentContext.TryStack.Push(new ExceptionHandlingContext(catchPointer, finallyPointer));\n    }\n\n    /// <summary>\n    /// Executes a throw operation, handling any surrounding try-catch-finally blocks.\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"ex\">The exception to throw.</param>\n    public virtual void ExecuteThrow(ExecutionEngine engine, StackItem? ex)\n    {\n        engine.UncaughtException = ex;\n\n        var pop = 0;\n        foreach (var executionContext in engine.InvocationStack)\n        {\n            if (executionContext.TryStack != null)\n            {\n                while (executionContext.TryStack.TryPeek(out var tryContext))\n                {\n                    if (tryContext.State == ExceptionHandlingState.Finally || (tryContext.State == ExceptionHandlingState.Catch && !tryContext.HasFinally))\n                    {\n                        executionContext.TryStack.Pop();\n                        continue;\n                    }\n                    for (var i = 0; i < pop; i++)\n                    {\n                        engine.ContextUnloaded(engine.InvocationStack.Pop());\n                    }\n                    if (tryContext.State == ExceptionHandlingState.Try && tryContext.HasCatch)\n                    {\n                        tryContext.State = ExceptionHandlingState.Catch;\n                        engine.Push(engine.UncaughtException!);\n                        executionContext.InstructionPointer = tryContext.CatchPointer;\n                        engine.UncaughtException = null;\n                    }\n                    else\n                    {\n                        tryContext.State = ExceptionHandlingState.Finally;\n                        executionContext.InstructionPointer = tryContext.FinallyPointer;\n                    }\n                    engine.isJumping = true;\n                    return;\n                }\n            }\n            ++pop;\n        }\n\n        throw new VMUnhandledException(engine.UncaughtException!);\n    }\n\n    #endregion\n}\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.Numeric.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.Numeric.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\npartial class JumpTable\n{\n    /// <summary>\n    /// Computes the sign of the specified integer.\n    /// If the value is negative, puts -1; if positive, puts 1; if zero, puts 0.\n    /// <see cref=\"OpCode.SIGN\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Sign(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop().GetInteger();\n        engine.Push(x.Sign);\n    }\n\n    /// <summary>\n    /// Computes the absolute value of the specified integer.\n    /// <see cref=\"OpCode.ABS\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Abs(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop().GetInteger();\n        engine.Push(BigInteger.Abs(x));\n    }\n\n    /// <summary>\n    /// Computes the negation of the specified integer.\n    /// <see cref=\"OpCode.NEGATE\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Negate(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop().GetInteger();\n        engine.Push(-x);\n    }\n\n    /// <summary>\n    /// Increments the specified integer by one.\n    /// <see cref=\"OpCode.INC\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Inc(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop().GetInteger();\n        engine.Push(x + 1);\n    }\n\n    /// <summary>\n    /// Decrements the specified integer by one.\n    /// <see cref=\"OpCode.DEC\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Dec(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop().GetInteger();\n        engine.Push(x - 1);\n    }\n\n    /// <summary>\n    /// Computes the sum of two integers.\n    /// <see cref=\"OpCode.ADD\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Add(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 + x2);\n    }\n\n    /// <summary>\n    /// Computes the difference between two integers.\n    /// <see cref=\"OpCode.SUB\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Sub(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 - x2);\n    }\n\n    /// <summary>\n    /// Computes the product of two integers.\n    /// <see cref=\"OpCode.MUL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Mul(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 * x2);\n    }\n\n    /// <summary>\n    /// Computes the quotient of two integers.\n    /// <see cref=\"OpCode.DIV\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Div(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 / x2);\n    }\n\n    /// <summary>\n    /// Computes the remainder after dividing a by b.\n    /// <see cref=\"OpCode.MOD\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Mod(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 % x2);\n    }\n\n    /// <summary>\n    /// Computes the result of raising a number to the specified power.\n    /// <see cref=\"OpCode.POW\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Pow(ExecutionEngine engine, Instruction instruction)\n    {\n        var exponent = (int)engine.Pop().GetInteger();\n        engine.Limits.AssertShift(exponent);\n        var value = engine.Pop().GetInteger();\n        engine.Push(BigInteger.Pow(value, exponent));\n    }\n\n    /// <summary>\n    /// Returns the square root of a specified number.\n    /// <see cref=\"OpCode.SQRT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Sqrt(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(engine.Pop().GetInteger().Sqrt());\n    }\n\n    /// <summary>\n    /// Computes the modular multiplication of two integers.\n    /// <see cref=\"OpCode.MODMUL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 3, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ModMul(ExecutionEngine engine, Instruction instruction)\n    {\n        var modulus = engine.Pop().GetInteger();\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 * x2 % modulus);\n    }\n\n    /// <summary>\n    /// Computes the modular exponentiation of an integer.\n    /// <see cref=\"OpCode.MODPOW\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 3, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ModPow(ExecutionEngine engine, Instruction instruction)\n    {\n        var modulus = engine.Pop().GetInteger();\n        var exponent = engine.Pop().GetInteger();\n        var value = engine.Pop().GetInteger();\n        var result = exponent == -1\n            ? value.ModInverse(modulus)\n            : BigInteger.ModPow(value, exponent, modulus);\n        engine.Push(result);\n    }\n\n    /// <summary>\n    /// Computes the left shift of an integer.\n    /// <see cref=\"OpCode.SHL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Shl(ExecutionEngine engine, Instruction instruction)\n    {\n        var shift = (int)engine.Pop().GetInteger();\n        engine.Limits.AssertShift(shift);\n        var x = engine.Pop().GetInteger();\n        engine.Push(x << shift);\n    }\n\n    /// <summary>\n    /// Computes the right shift of an integer.\n    /// <see cref=\"OpCode.SHR\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Shr(ExecutionEngine engine, Instruction instruction)\n    {\n        var shift = (int)engine.Pop().GetInteger();\n        engine.Limits.AssertShift(shift);\n        var x = engine.Pop().GetInteger();\n        engine.Push(x >> shift);\n    }\n\n    /// <summary>\n    /// If the input is 0 or 1, it is flipped. Otherwise the output will be 0.\n    /// <see cref=\"OpCode.NOT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Not(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop().GetBoolean();\n        engine.Push(!x);\n    }\n\n    /// <summary>\n    /// Computes the logical AND of the top two stack items and pushes the result onto the stack.\n    /// <see cref=\"OpCode.BOOLAND\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void BoolAnd(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetBoolean();\n        var x1 = engine.Pop().GetBoolean();\n        engine.Push(x1 && x2);\n    }\n\n    /// <summary>\n    /// Computes the logical OR of the top two stack items and pushes the result onto the stack.\n    /// <see cref=\"OpCode.BOOLOR\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void BoolOr(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetBoolean();\n        var x1 = engine.Pop().GetBoolean();\n        engine.Push(x1 || x2);\n    }\n\n    /// <summary>\n    /// Determines whether the top stack item is not zero and pushes the result onto the stack.\n    /// <see cref=\"OpCode.NZ\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Nz(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop().GetInteger();\n        engine.Push(!x.IsZero);\n    }\n\n    /// <summary>\n    /// Determines whether the top two stack items are equal and pushes the result onto the stack.\n    /// <see cref=\"OpCode.NUMEQUAL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NumEqual(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 == x2);\n    }\n\n    /// <summary>\n    /// Determines whether the top two stack items are not equal and pushes the result onto the stack.\n    /// <see cref=\"OpCode.NUMNOTEQUAL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NumNotEqual(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(x1 != x2);\n    }\n\n    /// <summary>\n    /// Determines whether the two integer at the top of the stack, x1 are less than x2, and pushes the result onto the stack.\n    /// <see cref=\"OpCode.LT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Lt(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop();\n        var x1 = engine.Pop();\n        if (x1.IsNull || x2.IsNull)\n            engine.Push(false);\n        else\n            engine.Push(x1.GetInteger() < x2.GetInteger());\n    }\n\n    /// <summary>\n    /// Determines whether the two integer at the top of the stack, x1 are less than or equal to x2, and pushes the result onto the stack.\n    /// <see cref=\"OpCode.LE\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Le(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop();\n        var x1 = engine.Pop();\n        if (x1.IsNull || x2.IsNull)\n            engine.Push(false);\n        else\n            engine.Push(x1.GetInteger() <= x2.GetInteger());\n    }\n\n    /// <summary>\n    /// Determines whether the two integer at the top of the stack, x1 are greater than x2, and pushes the result onto the stack.\n    /// <see cref=\"OpCode.GT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Gt(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop();\n        var x1 = engine.Pop();\n        if (x1.IsNull || x2.IsNull)\n            engine.Push(false);\n        else\n            engine.Push(x1.GetInteger() > x2.GetInteger());\n    }\n\n    /// <summary>\n    /// Determines whether the two integer at the top of the stack, x1 are greater than or equal to x2, and pushes the result onto the stack.\n    /// <see cref=\"OpCode.GE\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Ge(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop();\n        var x1 = engine.Pop();\n        if (x1.IsNull || x2.IsNull)\n            engine.Push(false);\n        else\n            engine.Push(x1.GetInteger() >= x2.GetInteger());\n    }\n\n    /// <summary>\n    /// Computes the minimum of the top two stack items and pushes the result onto the stack.\n    /// <see cref=\"OpCode.MIN\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Min(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(BigInteger.Min(x1, x2));\n    }\n\n    /// <summary>\n    /// Computes the maximum of the top two stack items and pushes the result onto the stack.\n    /// <see cref=\"OpCode.MAX\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Max(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetInteger();\n        var x1 = engine.Pop().GetInteger();\n        engine.Push(BigInteger.Max(x1, x2));\n    }\n\n    /// <summary>\n    /// Determines whether the top stack item is within the range specified by the next two top stack items\n    /// and pushes the result onto the stack.\n    /// <see cref=\"OpCode.WITHIN\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 3, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Within(ExecutionEngine engine, Instruction instruction)\n    {\n        var b = engine.Pop().GetInteger();\n        var a = engine.Pop().GetInteger();\n        var x = engine.Pop().GetInteger();\n        engine.Push(a <= x && x < b);\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.Push.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.Push.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\npartial class JumpTable\n{\n    /// <summary>\n    /// Pushes an 8-bit signed integer onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHINT8\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushInt8(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(new BigInteger(instruction.Operand.Span));\n    }\n\n    /// <summary>\n    /// Pushes an 16-bit signed integer onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHINT16\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushInt16(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(new BigInteger(instruction.Operand.Span));\n    }\n\n    /// <summary>\n    /// Pushes an 32-bit signed integer onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHINT32\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushInt32(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(new BigInteger(instruction.Operand.Span));\n    }\n\n    /// <summary>\n    /// Pushes an 64-bit signed integer onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHINT64\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushInt64(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(new BigInteger(instruction.Operand.Span));\n    }\n\n    /// <summary>\n    /// Pushes an 128-bit signed integer onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHINT128\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushInt128(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(new BigInteger(instruction.Operand.Span));\n    }\n\n    /// <summary>\n    /// Pushes an 256-bit signed integer onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHINT256\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushInt256(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(new BigInteger(instruction.Operand.Span));\n    }\n\n    /// <summary>\n    /// Pushes a boolean value of true onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushT(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(StackItem.True);\n    }\n\n    /// <summary>\n    /// Pushes a boolean value of false onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHF\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushF(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(StackItem.False);\n    }\n\n    /// <summary>\n    /// Pushes the address of the specified instruction onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHA\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushA(ExecutionEngine engine, Instruction instruction)\n    {\n        var position = checked(engine.CurrentContext!.InstructionPointer + instruction.TokenI32);\n        if (position < 0 || position > engine.CurrentContext.Script.Length)\n            throw new InvalidOperationException($\"Bad pointer address(Instruction instruction) {position}\");\n        engine.Push(new Pointer(engine.CurrentContext.Script, position));\n    }\n\n    /// <summary>\n    /// Pushes a null onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHNULL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushNull(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(StackItem.Null);\n    }\n\n    /// <summary>\n    /// Pushes a byte array with a length prefix onto the evaluation stack.\n    /// The length of the array is 1 byte.\n    /// <see cref=\"OpCode.PUSHDATA1\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushData1(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Limits.AssertMaxItemSize(instruction.Operand.Length);\n        engine.Push(instruction.Operand);\n    }\n\n    /// <summary>\n    /// Pushes a byte array with a length prefix onto the evaluation stack.\n    /// The length of the array is 1 bytes.\n    /// <see cref=\"OpCode.PUSHDATA2\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushData2(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Limits.AssertMaxItemSize(instruction.Operand.Length);\n        engine.Push(instruction.Operand);\n    }\n\n    /// <summary>\n    /// Pushes a byte array with a length prefix onto the evaluation stack.\n    /// The length of the array is 4 bytes.\n    /// <see cref=\"OpCode.PUSHDATA4\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushData4(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Limits.AssertMaxItemSize(instruction.Operand.Length);\n        engine.Push(instruction.Operand);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of -1 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSHM1\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void PushM1(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(-1);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 0 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH0\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push0(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(0);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 1 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH1\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push1(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(1);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 2 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH2\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push2(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(2);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 3 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH3\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push3(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(3);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 4 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH4\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push4(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(4);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 5 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH5\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push5(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(5);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 6 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH6\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push6(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(6);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 7 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH7\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push7(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(7);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 8 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH8\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push8(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(8);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 9 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH9\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push9(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(9);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 10 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH10\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push10(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(10);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 11 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH11\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push11(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(11);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 12 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH12\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push12(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(12);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 13 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH13\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push13(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(13);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 14 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH14\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push14(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(14);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 15 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH15\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push15(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(15);\n    }\n\n    /// <summary>\n    /// Pushes the integer value of 16 onto the evaluation stack.\n    /// <see cref=\"OpCode.PUSH16\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Push16(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(16);\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.Slot.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.Slot.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\npartial class JumpTable\n{\n    /// <summary>\n    /// Initializes the static field slot in the current execution context.\n    /// <see cref=\"OpCode.INITSSLOT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void InitSSlot(ExecutionEngine engine, Instruction instruction)\n    {\n        if (engine.CurrentContext!.StaticFields != null)\n            throw new InvalidOperationException($\"{instruction.OpCode} cannot be executed twice.\");\n        if (instruction.TokenU8 == 0)\n            throw new InvalidOperationException($\"The operand {instruction.TokenU8} is invalid for OpCode.{instruction.OpCode}.\");\n        engine.CurrentContext.StaticFields = new Slot(instruction.TokenU8, engine.ReferenceCounter);\n    }\n\n    /// <summary>\n    /// Initializes the local variable slot or the argument slot in the current execution context.\n    /// <see cref=\"OpCode.INITSLOT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void InitSlot(ExecutionEngine engine, Instruction instruction)\n    {\n        if (engine.CurrentContext!.LocalVariables != null || engine.CurrentContext.Arguments != null)\n            throw new InvalidOperationException($\"{instruction.OpCode} cannot be executed twice.\");\n        if (instruction.TokenU16 == 0)\n            throw new InvalidOperationException($\"The operand {instruction.TokenU16} is invalid for OpCode.{instruction.OpCode}.\");\n        if (instruction.TokenU8 > 0)\n        {\n            engine.CurrentContext.LocalVariables = new Slot(instruction.TokenU8, engine.ReferenceCounter);\n        }\n        if (instruction.TokenU8_1 > 0)\n        {\n            var items = new StackItem[instruction.TokenU8_1];\n            for (var i = 0; i < instruction.TokenU8_1; i++)\n            {\n                items[i] = engine.Pop();\n            }\n            engine.CurrentContext.Arguments = new Slot(items, engine.ReferenceCounter);\n        }\n    }\n\n    /// <summary>\n    /// Loads the value at index 0 from the static field slot onto the evaluation stack.\n    /// <see cref=\"OpCode.LDSFLD0\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdSFld0(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.StaticFields, 0);\n    }\n\n    /// <summary>\n    /// Loads the value at index 1 from the static field slot onto the evaluation stack.\n    /// <see cref=\"OpCode.LDSFLD1\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdSFld1(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.StaticFields, 1);\n    }\n\n    /// <summary>\n    /// Loads the value at index 2 from the static field slot onto the evaluation stack.\n    /// <see cref=\"OpCode.LDSFLD2\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdSFld2(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.StaticFields, 2);\n    }\n\n    /// <summary>\n    /// Loads the value at index 3 from the static field slot onto the evaluation stack.\n    /// <see cref=\"OpCode.LDSFLD3\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdSFld3(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.StaticFields, 3);\n    }\n\n    /// <summary>\n    /// Loads the value at index 4 from the static field slot onto the evaluation stack.\n    /// <see cref=\"OpCode.LDSFLD4\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdSFld4(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.StaticFields, 4);\n    }\n\n    /// <summary>\n    /// Loads the value at index 5 from the static field slot onto the evaluation stack.\n    /// <see cref=\"OpCode.LDSFLD5\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdSFld5(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.StaticFields, 5);\n    }\n\n    /// <summary>\n    /// Loads the value at index 6 from the static field slot onto the evaluation stack.\n    /// <see cref=\"OpCode.LDSFLD6\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdSFld6(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.StaticFields, 6);\n    }\n\n    /// <summary>\n    /// Loads the static field at a specified index onto the evaluation stack.\n    /// The index is represented as a 1-byte unsigned integer.\n    /// <see cref=\"OpCode.LDSFLD\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdSFld(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.StaticFields, instruction.TokenU8);\n    }\n\n    /// <summary>\n    /// Stores the value at index 0 from the evaluation stack into the static field slot.\n    /// <see cref=\"OpCode.STSFLD0\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StSFld0(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.StaticFields, 0);\n    }\n\n    /// <summary>\n    /// Stores the value at index 1 from the evaluation stack into the static field slot.\n    /// <see cref=\"OpCode.STSFLD1\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StSFld1(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.StaticFields, 1);\n    }\n\n    /// <summary>\n    /// Stores the value at index 2 from the evaluation stack into the static field slot.\n    /// <see cref=\"OpCode.STSFLD2\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StSFld2(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.StaticFields, 2);\n    }\n\n    /// <summary>\n    /// Stores the value at index 3 from the evaluation stack into the static field slot.\n    /// <see cref=\"OpCode.STSFLD3\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StSFld3(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.StaticFields, 3);\n    }\n\n    /// <summary>\n    /// Stores the value at index 4 from the evaluation stack into the static field slot.\n    /// <see cref=\"OpCode.STSFLD4\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StSFld4(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.StaticFields, 4);\n    }\n\n    /// <summary>\n    /// Stores the value at index 5 from the evaluation stack into the static field slot.\n    /// <see cref=\"OpCode.STSFLD5\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StSFld5(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.StaticFields, 5);\n    }\n\n    /// <summary>\n    /// Stores the value at index 6 from the evaluation stack into the static field slot.\n    /// <see cref=\"OpCode.STSFLD6\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StSFld6(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.StaticFields, 6);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the static field list at a specified index.\n    /// The index is represented as a 1-byte unsigned integer.\n    /// <see cref=\"OpCode.STSFLD\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StSFld(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.StaticFields, instruction.TokenU8);\n    }\n\n    /// <summary>\n    /// Loads the local variable at index 0 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDLOC0\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdLoc0(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.LocalVariables, 0);\n    }\n\n    /// <summary>\n    /// Loads the local variable at index 1 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDLOC1\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdLoc1(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.LocalVariables, 1);\n    }\n\n    /// <summary>\n    /// Loads the local variable at index 2 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDLOC2\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdLoc2(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.LocalVariables, 2);\n    }\n\n    /// <summary>\n    /// Loads the local variable at index 3 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDLOC3\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdLoc3(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.LocalVariables, 3);\n    }\n\n    /// <summary>\n    /// Loads the local variable at index 4 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDLOC4\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdLoc4(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.LocalVariables, 4);\n    }\n\n    /// <summary>\n    /// Loads the local variable at index 5 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDLOC5\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdLoc5(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.LocalVariables, 5);\n    }\n\n    /// <summary>\n    /// Loads the local variable at index 6 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDLOC6\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdLoc6(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.LocalVariables, 6);\n    }\n\n    /// <summary>\n    /// Loads the local variable at a specified index onto the evaluation stack.\n    /// The index is represented as a 1-byte unsigned integer.\n    /// <see cref=\"OpCode.LDLOC\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdLoc(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.LocalVariables, instruction.TokenU8);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 0.\n    /// <see cref=\"OpCode.STLOC0\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StLoc0(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.LocalVariables, 0);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 1.\n    /// <see cref=\"OpCode.STLOC1\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StLoc1(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.LocalVariables, 1);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 2.\n    /// <see cref=\"OpCode.STLOC2\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StLoc2(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.LocalVariables, 2);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 3.\n    /// <see cref=\"OpCode.STLOC3\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StLoc3(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.LocalVariables, 3);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 4.\n    /// <see cref=\"OpCode.STLOC4\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StLoc4(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.LocalVariables, 4);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 5.\n    /// <see cref=\"OpCode.STLOC5\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StLoc5(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.LocalVariables, 5);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 6.\n    /// <see cref=\"OpCode.STLOC6\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StLoc6(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.LocalVariables, 6);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at a specified index.\n    /// The index is represented as a 1-byte unsigned integer.\n    /// <see cref=\"OpCode.STLOC\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StLoc(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.LocalVariables, instruction.TokenU8);\n    }\n\n    /// <summary>\n    /// Loads the argument at index 0 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDARG0\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdArg0(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.Arguments, 0);\n    }\n\n    /// <summary>\n    /// Loads the argument at index 1 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDARG1\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdArg1(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.Arguments, 1);\n    }\n\n    /// <summary>\n    /// Loads the argument at index 2 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDARG2\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdArg2(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.Arguments, 2);\n    }\n\n    /// <summary>\n    /// Loads the argument at index 3 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDARG3\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdArg3(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.Arguments, 3);\n    }\n\n    /// <summary>\n    /// Loads the argument at index 4 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDARG4\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdArg4(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.Arguments, 4);\n    }\n\n    /// <summary>\n    /// Loads the argument at index 5 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDARG5\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdArg5(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.Arguments, 5);\n    }\n\n    /// <summary>\n    /// Loads the argument at index 6 onto the evaluation stack.\n    /// <see cref=\"OpCode.LDARG6\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdArg6(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.Arguments, 6);\n    }\n\n    /// <summary>\n    /// Loads the argument at a specified index onto the evaluation stack.\n    /// The index is represented as a 1-byte unsigned integer.\n    /// <see cref=\"OpCode.LDARG\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void LdArg(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteLoadFromSlot(engine, engine.CurrentContext!.Arguments, instruction.TokenU8);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 0.\n    /// <see cref=\"OpCode.STARG0\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StArg0(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.Arguments, 0);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 1.\n    /// <see cref=\"OpCode.STARG1\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StArg1(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.Arguments, 1);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 2.\n    /// <see cref=\"OpCode.STARG2\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StArg2(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.Arguments, 2);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 3.\n    /// <see cref=\"OpCode.STARG3\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StArg3(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.Arguments, 3);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 4.\n    /// <see cref=\"OpCode.STARG4\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StArg4(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.Arguments, 4);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 5.\n    /// <see cref=\"OpCode.STARG5\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StArg5(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.Arguments, 5);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 6.\n    /// <see cref=\"OpCode.STARG6\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StArg6(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.Arguments, 6);\n    }\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at a specified index.\n    /// The index is represented as a 1-byte unsigned integer.\n    /// <see cref=\"OpCode.STARG\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void StArg(ExecutionEngine engine, Instruction instruction)\n    {\n        ExecuteStoreToSlot(engine, engine.CurrentContext!.Arguments, instruction.TokenU8);\n    }\n\n    #region Execute methods\n\n    /// <summary>\n    /// Executes the store operation into the specified slot at the given index.\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"slot\">The slot to store the value.</param>\n    /// <param name=\"index\">The index within the slot.</param>\n    public virtual void ExecuteStoreToSlot(ExecutionEngine engine, Slot? slot, int index)\n    {\n        if (slot is null)\n            throw new InvalidOperationException(\"Slot has not been initialized.\");\n        if (index < 0 || index >= slot.Count)\n            throw new InvalidOperationException($\"Index out of range when storing to slot: {index}, {index}/[0, {slot.Count}).\");\n        slot[index] = engine.Pop();\n    }\n\n    /// <summary>\n    /// Executes the load operation from the specified slot at the given index onto the evaluation stack.\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"slot\">The slot to load the value from.</param>\n    /// <param name=\"index\">The index within the slot.</param>\n    public virtual void ExecuteLoadFromSlot(ExecutionEngine engine, Slot? slot, int index)\n    {\n        if (slot is null)\n            throw new InvalidOperationException(\"Slot has not been initialized.\");\n        if (index < 0 || index >= slot.Count)\n            throw new InvalidOperationException($\"Index out of range when loading from slot: {index}, {index}/[0, {slot.Count}).\");\n        engine.Push(slot[index]);\n    }\n\n    #endregion\n}\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.Splice.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.Splice.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing Buffer = Neo.VM.Types.Buffer;\n\nnamespace Neo.VM;\n\npartial class JumpTable\n{\n    /// <summary>\n    /// Creates a new buffer with the specified length and pushes it onto the evaluation stack.\n    /// <see cref=\"OpCode.NEWBUFFER\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void NewBuffer(ExecutionEngine engine, Instruction instruction)\n    {\n        int length = (int)engine.Pop().GetInteger();\n        engine.Limits.AssertMaxItemSize(length);\n        engine.Push(new Buffer(length));\n    }\n\n    /// <summary>\n    /// Copies a specified number of bytes from one buffer to another buffer.\n    /// <see cref=\"OpCode.MEMCPY\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 5, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Memcpy(ExecutionEngine engine, Instruction instruction)\n    {\n        int count = (int)engine.Pop().GetInteger();\n        if (count < 0)\n            throw new InvalidOperationException($\"The count can not be negative for {nameof(OpCode.MEMCPY)}, count: {count}.\");\n        int si = (int)engine.Pop().GetInteger();\n        if (si < 0)\n            throw new InvalidOperationException($\"The source index can not be negative for {nameof(OpCode.MEMCPY)}, index: {si}.\");\n        ReadOnlySpan<byte> src = engine.Pop().GetSpan();\n        if (checked(si + count) > src.Length)\n            throw new InvalidOperationException($\"The source index + count is out of range for {nameof(OpCode.MEMCPY)}, index: {si}, count: {count}, {si}/[0, {src.Length}].\");\n        int di = (int)engine.Pop().GetInteger();\n        if (di < 0)\n            throw new InvalidOperationException($\"The destination index can not be negative for {nameof(OpCode.MEMCPY)}, index: {si}.\");\n        Buffer dst = engine.Pop<Buffer>();\n        if (checked(di + count) > dst.Size)\n            throw new InvalidOperationException($\"The destination index + count is out of range for {nameof(OpCode.MEMCPY)}, index: {di}, count: {count}, {di}/[0, {dst.Size}].\");\n        // TODO: check if we can optimize the memcpy by using peek instead of dup then pop\n        src.Slice(si, count).CopyTo(dst.InnerBuffer.Span[di..]);\n    }\n\n    /// <summary>\n    /// Concatenates two buffers and pushes the result onto the evaluation stack.\n    /// The result is the first pushed item concatenated with the second pushed item.\n    /// <see cref=\"OpCode.CAT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Cat(ExecutionEngine engine, Instruction instruction)\n    {\n        var x2 = engine.Pop().GetSpan();\n        var x1 = engine.Pop().GetSpan();\n        int length = x1.Length + x2.Length;\n        engine.Limits.AssertMaxItemSize(length);\n        Buffer result = new(length, false);\n        x1.CopyTo(result.InnerBuffer.Span);\n        x2.CopyTo(result.InnerBuffer.Span[x1.Length..]);\n        engine.Push(result);\n    }\n\n    /// <summary>\n    /// Extracts a sub-buffer from the specified buffer and pushes it onto the evaluation stack.\n    /// <see cref=\"OpCode.SUBSTR\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 3, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void SubStr(ExecutionEngine engine, Instruction instruction)\n    {\n        int count = (int)engine.Pop().GetInteger();\n        if (count < 0)\n            throw new InvalidOperationException($\"The count can not be negative for {nameof(OpCode.SUBSTR)}, count: {count}.\");\n        int index = (int)engine.Pop().GetInteger();\n        if (index < 0)\n            throw new InvalidOperationException($\"The index can not be negative for {nameof(OpCode.SUBSTR)}, index: {index}.\");\n        var x = engine.Pop().GetSpan();\n        if (checked(index + count) > x.Length)\n            throw new InvalidOperationException($\"The index + count is out of range for {nameof(OpCode.SUBSTR)}, index: {index}, count: {count}, {index + count}/[0, {x.Length}].\");\n        Buffer result = new(count, false);\n        x.Slice(index, count).CopyTo(result.InnerBuffer.Span);\n        engine.Push(result);\n    }\n\n    /// <summary>\n    /// Extracts a specified number of characters from the left side of the buffer and pushes them onto the evaluation stack.\n    /// <see cref=\"OpCode.LEFT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Left(ExecutionEngine engine, Instruction instruction)\n    {\n        int count = (int)engine.Pop().GetInteger();\n        if (count < 0)\n            throw new InvalidOperationException($\"The count can not be negative for {nameof(OpCode.LEFT)}, count: {count}.\");\n        var x = engine.Pop().GetSpan();\n        if (count > x.Length)\n            throw new InvalidOperationException($\"The count is out of range for {nameof(OpCode.LEFT)}, {count}/[0, {x.Length}].\");\n        Buffer result = new(count, false);\n        x[..count].CopyTo(result.InnerBuffer.Span);\n        engine.Push(result);\n    }\n\n    /// <summary>\n    /// Extracts a specified number of characters from the right side of the buffer and pushes them onto the evaluation stack.\n    /// <see cref=\"OpCode.RIGHT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Right(ExecutionEngine engine, Instruction instruction)\n    {\n        int count = (int)engine.Pop().GetInteger();\n        if (count < 0)\n            throw new InvalidOperationException($\"The count can not be negative for {nameof(OpCode.RIGHT)}, count: {count}.\");\n        var x = engine.Pop().GetSpan();\n        if (count > x.Length)\n            throw new InvalidOperationException($\"The count is out of range for {nameof(OpCode.RIGHT)}, {count}/[0, {x.Length}].\");\n        Buffer result = new(count, false);\n        x[^count..^0].CopyTo(result.InnerBuffer.Span);\n        engine.Push(result);\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.Stack.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.Stack.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\npartial class JumpTable\n{\n    /// <summary>\n    /// Pushes the number of stack items in the evaluation stack onto the stack.\n    /// <see cref=\"OpCode.DEPTH\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 0, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Depth(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(engine.CurrentContext!.EvaluationStack.Count);\n    }\n\n    /// <summary>\n    /// Removes the top item from the evaluation stack.\n    /// <see cref=\"OpCode.DROP\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Drop(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Pop();\n    }\n\n    /// <summary>\n    /// Removes the second-to-top stack item.\n    /// <see cref=\"OpCode.NIP\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Nip(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.CurrentContext!.EvaluationStack.Remove<StackItem>(1);\n    }\n\n    /// <summary>\n    /// Removes the n-th item from the top of the evaluation stack.\n    /// <see cref=\"OpCode.XDROP\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void XDrop(ExecutionEngine engine, Instruction instruction)\n    {\n        var n = (int)engine.Pop().GetInteger();\n        if (n < 0)\n            throw new InvalidOperationException($\"The negative value {n} is invalid for OpCode.{instruction.OpCode}.\");\n        engine.CurrentContext!.EvaluationStack.Remove<StackItem>(n);\n    }\n\n    /// <summary>\n    /// Clears all items from the evaluation stack.\n    /// <see cref=\"OpCode.CLEAR\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Clear(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.CurrentContext!.EvaluationStack.Clear();\n    }\n\n    /// <summary>\n    /// Duplicates the item on the top of the evaluation stack.\n    /// <see cref=\"OpCode.DUP\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 0, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Dup(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(engine.Peek());\n    }\n\n    /// <summary>\n    /// Copies the second item from the top of the evaluation stack and pushes the copy onto the stack.\n    /// <see cref=\"OpCode.OVER\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 0, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Over(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.Push(engine.Peek(1));\n    }\n\n    /// <summary>\n    /// Copies the nth item from the top of the evaluation stack and pushes the copy onto the stack.\n    /// <see cref=\"OpCode.PICK\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Pick(ExecutionEngine engine, Instruction instruction)\n    {\n        var n = (int)engine.Pop().GetInteger();\n        if (n < 0)\n            throw new InvalidOperationException($\"The negative value {n} is invalid for OpCode.{instruction.OpCode}.\");\n        engine.Push(engine.Peek(n));\n    }\n\n    /// <summary>\n    /// Copies the top item on the evaluation stack and inserts the copy between the first and second items.\n    /// <see cref=\"OpCode.TUCK\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Tuck(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.CurrentContext!.EvaluationStack.Insert(2, engine.Peek());\n    }\n\n    /// <summary>\n    /// Swaps the top two items on the evaluation stack.\n    /// <see cref=\"OpCode.SWAP\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 0, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Swap(ExecutionEngine engine, Instruction instruction)\n    {\n        var stack = engine.CurrentContext!.EvaluationStack;\n        if (stack.Count < 2)\n            throw new ArgumentOutOfRangeException($\"Swap index is out of stack bounds: 1/{stack.Count}\");\n        stack.Swap(0, 1);\n    }\n\n    /// <summary>\n    /// Left rotates the top three items on the evaluation stack.\n    /// <see cref=\"OpCode.ROT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 0, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Rot(ExecutionEngine engine, Instruction instruction)\n    {\n        // ROT: [a, b, c] -> [b, c, a] (c is top)\n        // Equivalent to: swap(1,2), swap(0,1)\n        var stack = engine.CurrentContext!.EvaluationStack;\n        if (stack.Count < 3)\n            throw new ArgumentOutOfRangeException($\"Swap index is out of stack bounds: 2/{stack.Count}\");\n        stack.Swap(1, 2);\n        stack.Swap(0, 1);\n    }\n\n    /// <summary>\n    /// The item n back in the stack is moved to the top.\n    /// <see cref=\"OpCode.ROLL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Roll(ExecutionEngine engine, Instruction instruction)\n    {\n        var n = (int)engine.Pop().GetInteger();\n        if (n < 0)\n            throw new InvalidOperationException($\"The negative value {n} is invalid for OpCode.{instruction.OpCode}.\");\n        if (n == 0) return;\n        var x = engine.CurrentContext!.EvaluationStack.Remove<StackItem>(n);\n        engine.Push(x);\n    }\n\n    /// <summary>\n    /// Reverses the order of the top 3 items on the evaluation stack.\n    /// <see cref=\"OpCode.REVERSE3\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Reverse3(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.CurrentContext!.EvaluationStack.Reverse(3);\n    }\n\n    /// <summary>\n    /// Reverses the order of the top 4 items on the evaluation stack.\n    /// <see cref=\"OpCode.REVERSE4\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Reverse4(ExecutionEngine engine, Instruction instruction)\n    {\n        engine.CurrentContext!.EvaluationStack.Reverse(4);\n    }\n\n    /// <summary>\n    /// Reverses the order of the top n items on the evaluation stack.\n    /// <see cref=\"OpCode.REVERSEN\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void ReverseN(ExecutionEngine engine, Instruction instruction)\n    {\n        var n = (int)engine.Pop().GetInteger();\n        engine.CurrentContext!.EvaluationStack.Reverse(n);\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.Types.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.Types.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\npartial class JumpTable\n{\n    /// <summary>\n    /// Determines whether the item on top of the evaluation stack is null.\n    /// <see cref=\"OpCode.ISNULL\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void IsNull(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop();\n        engine.Push(x.IsNull);\n    }\n\n    /// <summary>\n    /// Determines whether the item on top of the evaluation stack has a specified type.\n    /// <see cref=\"OpCode.ISTYPE\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void IsType(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop();\n        var type = (StackItemType)instruction.TokenU8;\n#if NET5_0_OR_GREATER\n        if (type == StackItemType.Any || !Enum.IsDefined(type))\n#else\n        if (type == StackItemType.Any || !Enum.IsDefined(typeof(StackItemType), type))\n#endif\n            throw new InvalidOperationException($\"Invalid type: {type}\");\n        engine.Push(x.Type == type);\n    }\n\n    /// <summary>\n    /// Converts the item on top of the evaluation stack to a specified type.\n    /// <see cref=\"OpCode.CONVERT\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 1</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void Convert(ExecutionEngine engine, Instruction instruction)\n    {\n        var x = engine.Pop();\n        engine.Push(x.ConvertTo((StackItemType)instruction.TokenU8));\n    }\n\n    /// <summary>\n    /// Aborts execution with a specified message.\n    /// <see cref=\"OpCode.ABORTMSG\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 1, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void AbortMsg(ExecutionEngine engine, Instruction instruction)\n    {\n        var msg = engine.Pop().GetString();\n        throw new Exception($\"{OpCode.ABORTMSG} is executed. Reason: {msg}\");\n    }\n\n    /// <summary>\n    /// Asserts a condition with a specified message, throwing an exception if the condition is false.\n    /// <see cref=\"OpCode.ASSERTMSG\"/>\n    /// </summary>\n    /// <param name=\"engine\">The execution engine.</param>\n    /// <param name=\"instruction\">The instruction being executed.</param>\n    /// <remarks>Pop 2, Push 0</remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public virtual void AssertMsg(ExecutionEngine engine, Instruction instruction)\n    {\n        var msg = engine.Pop().GetString();\n        var x = engine.Pop().GetBoolean();\n        if (!x)\n            throw new Exception($\"{OpCode.ASSERTMSG} is executed with false result. Reason: {msg}\");\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/JumpTable/JumpTable.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JumpTable.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\npublic partial class JumpTable\n{\n    /// <summary>\n    /// Default JumpTable\n    /// </summary>\n    public static readonly JumpTable Default = new();\n\n    public delegate void DelAction(ExecutionEngine engine, Instruction instruction);\n    protected readonly DelAction[] Table = new DelAction[byte.MaxValue];\n\n    public DelAction this[OpCode opCode]\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get => Table[(byte)opCode];\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        set { Table[(byte)opCode] = value; }\n    }\n\n    /// <summary>\n    /// Jump table constructor\n    /// </summary>\n    /// <exception cref=\"InvalidOperationException\">Throw an exception if the opcode was already set</exception>\n    public JumpTable()\n    {\n        // Fill defined\n\n        foreach (var mi in GetType().GetMethods())\n        {\n            if (Enum.TryParse<OpCode>(mi.Name, true, out var opCode))\n            {\n                if (Table[(byte)opCode] is not null)\n                {\n                    throw new InvalidOperationException($\"Opcode {opCode} is already defined.\");\n                }\n\n#if NET5_0_OR_GREATER\n                Table[(byte)opCode] = mi.CreateDelegate<DelAction>(this);\n#else\n                Table[(byte)opCode] = (DelAction)mi.CreateDelegate(typeof(DelAction), this);\n#endif\n            }\n        }\n\n        // Fill with undefined\n\n        for (var x = 0; x < Table.Length; x++)\n        {\n            if (Table[x] is not null) continue;\n\n            Table[x] = InvalidOpcode;\n        }\n    }\n\n    public virtual void InvalidOpcode(ExecutionEngine engine, Instruction instruction)\n    {\n        throw new InvalidOperationException($\"Opcode {instruction.OpCode} is undefined.\");\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Neo.VM.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Copyright>2015-2025 The Neo Project</Copyright>\n    <Description>Neo virtual machine</Description>\n    <VersionPrefix>3.9.3</VersionPrefix>\n    <Authors>The Neo Project</Authors>\n    <TargetFrameworks>netstandard2.1;net10.0</TargetFrameworks>\n    <LangVersion>latest</LangVersion>\n    <PackageTags>NEO;AntShares;Blockchain;Smart Contract;VM</PackageTags>\n    <PackageProjectUrl>https://github.com/neo-project/neo-vm</PackageProjectUrl>\n    <PackageLicenseExpression>MIT</PackageLicenseExpression>\n    <RepositoryType>git</RepositoryType>\n    <RepositoryUrl>https://github.com/neo-project/neo-vm.git</RepositoryUrl>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <Nullable>enable</Nullable>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.IO.Hashing\" Version=\"10.0.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <InternalsVisibleTo Include=\"$(AssemblyName).Benchmarks\" />\n    <InternalsVisibleTo Include=\"$(AssemblyName).Tests\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Neo.VM/OpCode.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// OpCode.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents the opcode of an <see cref=\"Instruction\"/>.\n/// </summary>\npublic enum OpCode : byte\n{\n    #region Constants\n\n    /// <summary>\n    /// Pushes a 1-byte signed integer onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    PUSHINT8 = 0x00,\n\n    /// <summary>\n    /// Pushes a 2-bytes signed integer onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 2)]\n    PUSHINT16 = 0x01,\n\n    /// <summary>\n    /// Pushes a 4-bytes signed integer onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    PUSHINT32 = 0x02,\n\n    /// <summary>\n    /// Pushes an 8-bytes signed integer onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 8)]\n    PUSHINT64 = 0x03,\n\n    /// <summary>\n    /// Pushes a 16-bytes signed integer onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 16)]\n    PUSHINT128 = 0x04,\n\n    /// <summary>\n    /// Pushes a 32-bytes signed integer onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 32)]\n    PUSHINT256 = 0x05,\n\n    /// <summary>\n    /// Pushes the boolean value <see langword=\"true\"/> onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSHT = 0x08,\n\n    /// <summary>\n    /// Pushes the boolean value <see langword=\"false\"/> onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSHF = 0x09,\n\n    /// <summary>\n    /// Converts the 4-bytes offset to an <see cref=\"Pointer\"/>, and pushes it onto the stack.\n    /// <para>\n    /// The execution will be faulted if the current position + offset is out of script range[0, script.Length).\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    PUSHA = 0x0A,\n\n    /// <summary>\n    /// The item <see langword=\"null\"/> is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSHNULL = 0x0B,\n\n    /// <summary>\n    /// The next byte contains the number of bytes to be pushed onto the stack.\n    /// The data format: <c>|1-byte unsigned size|data|</c>.\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(SizePrefix = 1)]\n    PUSHDATA1 = 0x0C,\n\n    /// <summary>\n    /// The next two bytes contain the number of bytes to be pushed onto the stack.\n    /// The data format: <c>|2-byte little-endian unsigned size|data|</c>.\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(SizePrefix = 2)]\n    PUSHDATA2 = 0x0D,\n\n    /// <summary>\n    /// The next four bytes contain the number of bytes to be pushed onto the stack.\n    /// The data format: <c>|4-byte little-endian unsigned size|data|</c>.\n    /// <para>\n    /// The execution will be faulted if the datasize is out of MaxItemSize.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(SizePrefix = 4)]\n    PUSHDATA4 = 0x0E,\n\n    /// <summary>\n    /// The number -1 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSHM1 = 0x0F,\n\n    /// <summary>\n    /// The number 0 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH0 = 0x10,\n\n    /// <summary>\n    /// The number 1 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH1 = 0x11,\n\n    /// <summary>\n    /// The number 2 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH2 = 0x12,\n\n    /// <summary>\n    /// The number 3 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH3 = 0x13,\n\n    /// <summary>\n    /// The number 4 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH4 = 0x14,\n\n    /// <summary>\n    /// The number 5 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH5 = 0x15,\n\n    /// <summary>\n    /// The number 6 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH6 = 0x16,\n\n    /// <summary>\n    /// The number 7 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH7 = 0x17,\n\n    /// <summary>\n    /// The number 8 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH8 = 0x18,\n\n    /// <summary>\n    /// The number 9 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH9 = 0x19,\n\n    /// <summary>\n    /// The number 10 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH10 = 0x1A,\n\n    /// <summary>\n    /// The number 11 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH11 = 0x1B,\n\n    /// <summary>\n    /// The number 12 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH12 = 0x1C,\n\n    /// <summary>\n    /// The number 13 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH13 = 0x1D,\n\n    /// <summary>\n    /// The number 14 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH14 = 0x1E,\n\n    /// <summary>\n    /// The number 15 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH15 = 0x1F,\n\n    /// <summary>\n    /// The number 16 is pushed onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PUSH16 = 0x20,\n\n    #endregion\n\n    #region Flow control\n\n    /// <summary>\n    /// The <see cref=\"NOP\"/> operation does nothing. It is intended to fill in space if opcodes are patched.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    NOP = 0x21,\n\n    /// <summary>\n    /// Unconditionally transfers control to a target instruction.\n    /// The target instruction is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// <para>\n    /// The execution will be faulted if the target offset is out of script range[0, script.Length).\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    JMP = 0x22,\n\n    /// <summary>\n    /// Unconditionally transfers control to a target instruction.\n    /// The target instruction is represented as a 4-bytes little-endian signed offset from the beginning of the current instruction.\n    /// <para>\n    /// The execution will be faulted if the target offset is out of script range[0, script.Length).\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    JMP_L = 0x23,\n\n    /// <summary>\n    /// Transfers control to a target instruction if the value is true value (true, non-null, non-zero).\n    /// The target instruction is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// <para>\n    /// The execution will be faulted if the target offset is out of script range[0, script.Length).\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    JMPIF = 0x24,\n\n    /// <summary>\n    /// Transfers control to a target instruction if the value is true value (true, non-null, non-zero).\n    /// The target instruction is represented as a 4-bytes little-endian signed offset from the beginning of the current instruction.\n    /// <para>\n    /// The execution will be faulted if the target offset is out of script range[0, script.Length).\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    JMPIF_L = 0x25,\n\n    /// <summary>\n    /// Transfers control to a target instruction if the value is false value (false, null, zero).\n    /// The target instruction is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// <para>\n    /// If the target offset is out of script range[0, script.Length), the execution will be faulted.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    JMPIFNOT = 0x26,\n\n    /// <summary>\n    /// Transfers control to a target instruction if the value is false value (false, null, zero).\n    /// The target instruction is represented as a 4-bytes little-endian signed offset from the beginning of the current instruction.\n    /// <para>\n    /// The execution will be faulted if the target offset is out of script range[0, script.Length).\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    JMPIFNOT_L = 0x27,\n\n    /// <summary>\n    /// Transfers control to a target instruction if the top two items are equal.\n    /// The target instruction is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot convert to integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    JMPEQ = 0x28,\n\n    /// <summary>\n    /// Transfers control to a target instruction if the top two items are equal.\n    /// The target instruction is represented as a 4-bytes signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot convert to an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    JMPEQ_L = 0x29,\n\n    /// <summary>\n    /// Transfers control to a target instruction when the top two items are not equal.\n    /// The target instruction is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot convert to an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    JMPNE = 0x2A,\n\n    /// <summary>\n    /// Transfers control to a target instruction when the top two items are not equal.\n    /// The target instruction is represented as a 4-bytes signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot convert to an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    JMPNE_L = 0x2B,\n\n    /// <summary>\n    /// Transfers control to a target instruction if first pushed item(the second in the stack) is greater than the second pushed item.\n    /// The target instruction is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot represent as an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    JMPGT = 0x2C,\n\n    /// <summary>\n    /// Transfers control to a target instruction if first pushed item(the second in the stack) is greater than the second pushed item.\n    /// The target instruction is represented as a 4-bytes signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot represent as an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    JMPGT_L = 0x2D,\n\n    /// <summary>\n    /// Transfers control to a target instruction if first pushed item(the second in the stack) is greater than or equal to the second pushed item.\n    /// The target instruction is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot represent as an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    JMPGE = 0x2E,\n\n    /// <summary>\n    /// Transfers control to a target instruction if first pushed item(the second in the stack) is greater than or equal to the second pushed item.\n    /// The target instruction is represented as a 4-bytes signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot represent as an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    JMPGE_L = 0x2F,\n\n    /// <summary>\n    /// Transfers control to a target instruction if first pushed item(the second in the stack) is less than the second pushed item.\n    /// The target instruction is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot represent as an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    JMPLT = 0x30,\n\n    /// <summary>\n    /// Transfers control to a target instruction if first pushed item(the second in the stack) is less than the second pushed item.\n    /// The target instruction is represented as a 4-bytes signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot represent as an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    JMPLT_L = 0x31,\n\n    /// <summary>\n    /// Transfers control to a target instruction if first pushed item(the second in the stack) is less than or equal to the second pushed item.\n    /// The target instruction is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot represent as an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    JMPLE = 0x32,\n\n    /// <summary>\n    /// Transfers control to a target instruction if first pushed item(the second in the stack) is less than or equal to the second pushed item.\n    /// The target instruction is represented as a 4-bytes signed offset from the beginning of the current instruction.\n    /// \n    /// If any item is not an integer, it will be converted to an integer then compared.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the target offset is out of script range[0, script.Length).\n    ///  2. One or both of items cannot represent as an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    JMPLE_L = 0x33,\n\n    /// <summary>\n    /// Calls the function at the target address which is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// \n    /// <para>\n    /// The execution will be faulted if the target address is out of script range[0, script.Length).\n    /// </para>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    CALL = 0x34,\n\n    /// <summary>\n    /// Calls the function at the target address which is represented as a 4-bytes little-endian signed offset from the beginning of the current instruction.\n    /// \n    /// <para>\n    /// The execution will be faulted if the target address is out of script range[0, script.Length).\n    /// </para>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    CALL_L = 0x35,\n\n    /// <summary>\n    /// Pop the pointer of a function from the stack, and call the function.\n    /// \n    /// <para>\n    /// The execution will be faulted if the pointer is not from the current script or not a valid pointer.\n    /// </para>\n    /// </summary>\n    CALLA = 0x36,\n\n    /// <summary>\n    /// Calls the function which is described by the token.\n    /// </summary>\n    [OperandSize(Size = 2)]\n    CALLT = 0x37,\n\n    /// <summary>\n    /// It turns the vm state to FAULT immediately, and cannot be caught.\n    /// \n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    ABORT = 0x38,\n\n    /// <summary>\n    /// Pop the top value of the stack. If it's false value (false, null, zero), exit vm execution and set vm state to FAULT.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    ASSERT = 0x39,\n\n    /// <summary>\n    /// Pop the top value of the stack, and throw it.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    THROW = 0x3A,\n\n    /// <summary>\n    /// TRY CatchOffset(sbyte) FinallyOffset(sbyte). If there's no catch body, set CatchOffset 0. If there's no finally body, set FinallyOffset 0.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. `catch` and `finally` are not provided both.\n    ///  2. the `try` can not be nested more than `MaxTryNestingDepth`.\n    ///  3. the `catch` or `finally` offset is out of script range[0, script.Length).\n    /// </para>\n    /// </summary>\n    [OperandSize(Size = 2)]\n    TRY = 0x3B,\n\n    /// <summary>\n    /// TRY_L CatchOffset(int) FinallyOffset(int). If there's no catch body, set CatchOffset 0. If there's no finally body, set FinallyOffset 0.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. `catch` and `finally` are not provided both.\n    ///  2. the `try` can not be nested more than `MaxTryNestingDepth`.\n    ///  3. the `catch` or `finally` offset is out of script range[0, script.Length).\n    /// </para>\n    /// </summary>\n    [OperandSize(Size = 8)]\n    TRY_L = 0x3C,\n\n    /// <summary>\n    /// Ensures that the appropriate surrounding finally blocks are executed.\n    /// And then unconditionally transfers control to the specific target instruction,\n    /// which is represented as a 1-byte signed offset from the beginning of the current instruction.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the corresponding `try` is not provided.\n    ///  2. the end offset is out of script range[0, script.Length).\n    /// </para>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    ENDTRY = 0x3D,\n\n    /// <summary>\n    /// Ensures that the appropriate surrounding finally blocks are executed.\n    /// And then unconditionally transfers control to the specific target instruction,\n    /// which is represented as a 4-byte little-endian signed offset from the beginning of the current instruction.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the corresponding `try` is not provided.\n    ///  2. the end offset is out of script range[0, script.Length).\n    /// </para>\n    /// </summary>\n    [OperandSize(Size = 4)]\n    ENDTRY_L = 0x3E,\n\n    /// <summary>\n    /// End finally, If no exception happen or be catched, vm will jump to the target instruction of ENDTRY/ENDTRY_L.\n    /// Otherwise, vm will rethrow the exception to upper layer.\n    /// <para>\n    /// The execution will be faulted if the corresponding `try` is not provided.\n    /// </para>\n    /// </summary>\n    ENDFINALLY = 0x3F,\n\n    /// <summary>\n    /// Returns from the current method.\n    /// </summary>\n    RET = 0x40,\n\n    /// <summary>\n    /// Calls to an interop service.\n    /// </summary>\n    [OperandSize(Size = 4)]\n    SYSCALL = 0x41,\n\n    #endregion\n\n    #region Stack\n\n    /// <summary>\n    /// Pushes the number of stack items onto the stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    DEPTH = 0x43,\n\n    /// <summary>\n    /// Removes the top stack item.\n    ///\n    /// <example> a b c -> a b </example>\n    /// <para>\n    /// The execution will be faulted if the stack is empty.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    DROP = 0x45,\n\n    /// <summary>\n    /// Removes the second-to-top stack item.\n    ///\n    /// <example> a b c -> a c </example>\n    /// <para>\n    /// The execution will be faulted if the stack has less than 2 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    NIP = 0x46,\n\n    /// <summary>\n    /// The item n back in the main stack is removed. The top item indicates the number of items to be removed.\n    /// If the top item is not an integer, it will be converted to an integer.\n    /// \n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The top item cannot convert to an integer.\n    ///  2. The stack has less than n+1 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: n+1 item(s)\n    /// </remarks>\n    /// </summary>\n    XDROP = 0x48,\n\n    /// <summary>\n    /// Clear the stack\n    /// </summary>\n    CLEAR = 0x49,\n\n    /// <summary>\n    /// Duplicates the top stack item.\n    ///\n    /// <example> a b c -> a b c c </example>\n    /// <para>\n    /// The execution will be faulted if the stack is empty.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    DUP = 0x4A,\n\n    /// <summary>\n    /// Copies the second-to-top stack item to the top.\n    ///\n    /// <example> a b c -> a b c b </example>\n    /// <para>\n    /// The execution will be faulted if the stack has less than 2 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    OVER = 0x4B,\n\n    /// <summary>\n    /// The item n back in the stack is copied to the top. The top item indicates the index of the item to be copied.\n    /// If the top item is not an integer, it will be converted to an integer.\n    ///\n    /// <example> a b c d 2 -> a b c d b\n    ///  index => 3[2]1 0\n    /// </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The top item cannot convert to an integer.\n    ///  2. The stack has less than n+1 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    PICK = 0x4D,\n\n    /// <summary>\n    /// The item at the top of the stack is copied and inserted before the second-to-top item.\n    ///\n    /// <example> a b c -> a c b c </example>\n    /// <para>\n    /// The execution will be faulted if the stack has less than 2 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    TUCK = 0x4E,\n\n    /// <summary>\n    /// The top two items on the stack are swapped.\n    ///\n    /// <example> a b -> b a</example>\n    /// <para>\n    /// The execution will be faulted if the stack has less than 2 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    SWAP = 0x50,\n\n    /// <summary>\n    /// The top three items on the stack are rotated to the left.\n    ///\n    /// <example> a b c -> b c a</example>\n    /// <para>\n    /// The execution will be faulted if the stack has less than 3 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    ROT = 0x51,\n\n    /// <summary>\n    /// The item n back in the stack is moved to the top. The top item indicates the index of the item to be moved.\n    /// If the top item is not an integer, it will be converted to an integer.\n    ///\n    /// <example>a b c d 2 -> a c d b\n    /// index => 3[2]1 0\n    /// </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The top item cannot convert to an integer.\n    ///  2. The stack has less than n+1 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    ROLL = 0x52,\n\n    /// <summary>\n    /// Reverse the order of the top 3 items on the stack.\n    ///\n    /// <example> a b c -> c b a</example>\n    /// <para>\n    /// The execution will be faulted if the stack has less than 3 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    REVERSE3 = 0x53,\n\n    /// <summary>\n    /// Reverse the order of the top 4 items on the stack.\n    ///\n    /// <example> a b c d -> d c b a</example>\n    /// <para>\n    /// The execution will be faulted if the stack has less than 4 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    REVERSE4 = 0x54,\n\n    /// <summary>\n    /// Pop the number N on the stack, and reverse the order of the top N items on the stack.\n    /// If the top item is not an integer, it will be converted to an integer.\n    /// \n    /// <example> a b c d 3 -> a d c b </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The top item cannot convert to an integer.\n    ///  2. The stack has less than n+1 items.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    REVERSEN = 0x55,\n\n    #endregion\n\n    #region Slot\n\n    /// <summary>\n    /// Initialize the static field list for the current execution context.\n    /// \n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The static field list for the current execution context has been initialized.\n    ///  2. The operand is 0.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    INITSSLOT = 0x56,\n\n    /// <summary>\n    /// Initialize the argument slot and/or the local variable list for the current execution context.\n    /// It has two uint8 operands: The first is the number of local variables, and the second is the number of arguments.\n    /// Two operands cannot both be 0.\n    /// \n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The argument slot and/or the local variable list for the current execution context has been initialized.\n    ///  2. Two operands are both 0.\n    /// </para>\n    /// </summary>\n    [OperandSize(Size = 2)]\n    INITSLOT = 0x57,\n\n    /// <summary>\n    /// Loads the static field at index 0 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDSFLD0 = 0x58,\n\n    /// <summary>\n    /// Loads the static field at index 1 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDSFLD1 = 0x59,\n\n    /// <summary>\n    /// Loads the static field at index 2 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDSFLD2 = 0x5A,\n\n    /// <summary>\n    /// Loads the static field at index 3 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDSFLD3 = 0x5B,\n\n    /// <summary>\n    /// Loads the static field at index 4 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDSFLD4 = 0x5C,\n\n    /// <summary>\n    /// Loads the static field at index 5 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDSFLD5 = 0x5D,\n\n    /// <summary>\n    /// Loads the static field at index 6 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDSFLD6 = 0x5E,\n\n    /// <summary>\n    /// Loads the static field at a specified index onto the evaluation stack.\n    /// The index is represented as a 1-byte unsigned integer.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    LDSFLD = 0x5F,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the static field list at index 0.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STSFLD0 = 0x60,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the static field list at index 1.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STSFLD1 = 0x61,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the static field list at index 2.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STSFLD2 = 0x62,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the static field list at index 3.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STSFLD3 = 0x63,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the static field list at index 4.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STSFLD4 = 0x64,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the static field list at index 5.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STSFLD5 = 0x65,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the static field list at index 6.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STSFLD6 = 0x66,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the static field list at a specified index.\n    /// The index is represented as a 1-byte unsigned integer.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    STSFLD = 0x67,\n\n    /// <summary>\n    /// Loads the local variable at index 0 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDLOC0 = 0x68,\n\n    /// <summary>\n    /// Loads the local variable at index 1 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDLOC1 = 0x69,\n\n    /// <summary>\n    /// Loads the local variable at index 2 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDLOC2 = 0x6A,\n\n    /// <summary>\n    /// Loads the local variable at index 3 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDLOC3 = 0x6B,\n\n    /// <summary>\n    /// Loads the local variable at index 4 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDLOC4 = 0x6C,\n\n    /// <summary>\n    /// Loads the local variable at index 5 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDLOC5 = 0x6D,\n\n    /// <summary>\n    /// Loads the local variable at index 6 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDLOC6 = 0x6E,\n\n    /// <summary>\n    /// Loads the local variable at a specified index onto the evaluation stack.\n    /// The index is represented as a 1-byte unsigned integer.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    LDLOC = 0x6F,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 0.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STLOC0 = 0x70,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 1.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STLOC1 = 0x71,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 2.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STLOC2 = 0x72,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 3.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STLOC3 = 0x73,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 4.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STLOC4 = 0x74,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 5.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STLOC5 = 0x75,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at index 6.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STLOC6 = 0x76,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the local variable list at a specified index.\n    /// The index is represented as a 1-byte unsigned integer.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    STLOC = 0x77,\n\n    /// <summary>\n    /// Loads the argument at index 0 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDARG0 = 0x78,\n\n    /// <summary>\n    /// Loads the argument at index 1 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDARG1 = 0x79,\n\n    /// <summary>\n    /// Loads the argument at index 2 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDARG2 = 0x7A,\n\n    /// <summary>\n    /// Loads the argument at index 3 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDARG3 = 0x7B,\n\n    /// <summary>\n    /// Loads the argument at index 4 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDARG4 = 0x7C,\n\n    /// <summary>\n    /// Loads the argument at index 5 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDARG5 = 0x7D,\n\n    /// <summary>\n    /// Loads the argument at index 6 onto the evaluation stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    LDARG6 = 0x7E,\n\n    /// <summary>\n    /// Loads the argument at a specified index onto the evaluation stack.\n    /// The index is represented as a 1-byte unsigned integer.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    LDARG = 0x7F,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 0.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STARG0 = 0x80,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 1.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STARG1 = 0x81,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 2.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STARG2 = 0x82,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 3.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STARG3 = 0x83,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 4.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STARG4 = 0x84,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 5.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STARG5 = 0x85,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at index 6.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    STARG6 = 0x86,\n\n    /// <summary>\n    /// Stores the value on top of the evaluation stack in the argument slot at a specified index.\n    /// The index is represented as a 1-byte unsigned integer.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    STARG = 0x87,\n\n    #endregion\n\n    #region Splice\n\n    /// <summary>\n    /// Creates a new <see cref=\"Buffer\"/> and pushes it onto the stack, and the top item is the length of the buffer.\n    /// If the top item is not an integer, it will be converted to an integer.\n    ///\n    /// <example> new Buffer(a) </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The top item cannot be converted to an integer.\n    ///  2. The length is negative or exceeds the maximum item size.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    NEWBUFFER = 0x88,\n\n    /// <summary>\n    /// Copies a range of bytes from one <see cref=\"Buffer\"/> to another.\n    /// Using this opcode will require to dup the destination buffer.\n    /// If the destination start index, source start index or count is not an integer, it will be converted to an integer.\n    ///\n    /// <example> c[d..e].CopyTo(a[b..]); </example>\n    ///\n    /// <para>\n    /// The top 5 items in the stack are(The `count` item is the top item):\n    /// <c> | destination buffer | destination start index | source buffer | source start index | count </c>.\n    /// </para>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the destination start index, source start index or count cannot be converted to integer.\n    ///  2. The destination start index, source start index or count is negative(or converted value is negative).\n    ///  3. The destination start index + count is out of the destination buffer range.\n    ///  4. The source start index + count is out of the source buffer range.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 5 item(s)\n    /// </remarks>\n    /// </summary>\n    MEMCPY = 0x89,\n\n    /// <summary>\n    /// Concatenates two items as a buffer. The result is the first pushed item concatenated with the second pushed item(the top item).\n    /// If item is not a buffer, it will be converted to a buffer(bytes) and then concatenated.\n    ///\n    /// <example> a.concat(b) </example>\n    ///\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the total length exceeds the maximum item size.\n    ///  2. One or both items cannot be converted to a buffer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    CAT = 0x8B,\n\n    /// <summary>\n    /// Pushes a sub-buffer from the source buffer onto the evaluation stack.\n    /// The first pushed item is the source buffer, the second pushed item is the start index, the third pushed item is the count(the top item).\n    /// If the start index or count is not an integer, it will be converted to an integer.\n    /// If the source buffer is not a buffer, it will be converted to a buffer(bytes).\n    ///\n    /// <example> a[b..c] </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The start index or count cannot be converted to integer.\n    ///  2. The source buffer cannot be converted to buffer(bytes).\n    ///  3. The start index or count is negative(or converted value is negative).\n    ///  4. The start index + count is out of the source buffer range.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 3 item(s)\n    /// </remarks>\n    /// </summary>\n    SUBSTR = 0x8C,\n\n    /// <summary>\n    /// Keeps only characters left of the specified point in a buffer.\n    /// The first pushed item is the source buffer, the second pushed item is the count(the top item).\n    /// If the count is not an integer, it will be converted to an integer.\n    /// If the source buffer is not a buffer, it will be converted to a buffer(bytes).\n    ///\n    /// <example> a[..b] </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The count cannot be converted to integer.\n    ///  2. The source buffer cannot be converted to buffer(bytes).\n    ///  3. The count is negative(or converted value is negative) or out of the source buffer range.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    LEFT = 0x8D,\n\n    /// <summary>\n    /// Keeps only characters right of the specified point in a buffer.\n    /// The first pushed item is the source buffer, the second pushed item is the count(the top item).\n    /// If the count is not an integer, it will be converted to an integer.\n    /// If the source buffer is not a buffer, it will be converted to a buffer(bytes).\n    ///\n    /// <example> a[^b..^0] </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The count cannot be converted to integer.\n    ///  2. The source buffer cannot be converted to buffer(bytes).\n    ///  3. The count is negative(or converted value is negative) or out of the source buffer range.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    RIGHT = 0x8E,\n\n    #endregion\n\n    #region Bitwise logic\n\n    /// <summary>\n    /// Pops the top stack item and pushes the result of flipping all the bits in the item.\n    /// If the item is not an integer, it will be converted to an integer.\n    ///\n    /// <example> ~a </example>\n    /// <para>\n    /// The execution will be faulted if the item cannot be converted to integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    INVERT = 0x90,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the result of the boolean and between each bit in the items.\n    /// If the items are not integers, they will be converted to integers.\n    ///\n    /// <example> a&amp;b </example>\n    /// <para>\n    /// The execution will be faulted if the items cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    AND = 0x91,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the result of the boolean or between each bit in the items.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a|b </example>\n    /// <para>\n    /// The execution will be faulted if the items cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    OR = 0x92,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the result of the boolean exclusive or between each bit in the items.\n    /// If the items are not integers, they will be converted to integers.\n    ///\n    /// <example> a^b </example>\n    /// <para>\n    /// The execution will be faulted if the items cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    XOR = 0x93,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if the items are exactly equal, false otherwise.\n    ///\n    /// <example> a.Equals(b) </example>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    EQUAL = 0x97,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if the items are not equal, false otherwise.\n    ///\n    /// <example> !a.Equals(b) </example>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    NOTEQUAL = 0x98,\n\n    #endregion\n\n    #region Arithmetic\n\n    /// <summary>\n    /// Pops the top stack item and pushes the sign of the item.\n    /// If the item is negative, push -1; if positive, push 1; if zero, push 0.\n    /// If the item is not an integer, it will be converted to an integer.\n    /// \n    /// <example> a.Sign </example>\n    /// <para>\n    /// The execution will be faulted if the item cannot be converted to an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    SIGN = 0x99,\n\n    /// <summary>\n    /// Pops the top stack item and pushes the absolute value of the item.\n    /// If the item is not an integer, it will be converted to an integer.\n    ///\n    /// <example> abs(a) </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the item cannot be converted to an integer.\n    ///  2. the item is the minimum integer value.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    ABS = 0x9A,\n\n    /// <summary>\n    /// Pops the top stack item and pushes the negation of the item.\n    /// If the input is not an integer, it will be converted to an integer.\n    ///\n    /// <example> -a </example>\n    /// <para>\n    /// The execution will be faulted if the item cannot be converted to an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    NEGATE = 0x9B,\n\n    /// <summary>\n    /// Pops the top stack item and pushes the result of adding 1 to the item.\n    /// If the input is not an integer, it will be converted to an integer.\n    ///\n    /// <example> a+1 </example>\n    /// <para>\n    /// The execution will be faulted if the item cannot be converted to an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    INC = 0x9C,\n\n    /// <summary>\n    /// Pops the top stack item and pushes the result of subtracting 1 from the item.\n    /// If the input is not an integer, it will be converted to an integer.\n    ///\n    /// <example> a-1 </example>\n    /// <para>\n    /// The execution will be faulted if the item cannot be converted to an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    DEC = 0x9D,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the result of adding the first pushed item to the second pushed item(the top item).\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a+b </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    ADD = 0x9E,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the result of subtracting the second pushed item(the top item) from the first pushed item.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a-b </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    SUB = 0x9F,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the result of multiplying the first pushed item by the second pushed item(the top item).\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a*b </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    MUL = 0xA0,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the result of dividing the first pushed item by the second pushed item(the top item).\n    /// The first pushed item is the dividend, the second pushed item is the divisor(the top item).\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a/b </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the inputs cannot be converted to integers.\n    ///  2. the divisor is zero.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    DIV = 0xA1,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the remainder after dividing a by b.\n    /// The first pushed item is the dividend, the second pushed item is the divisor(the top item).\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a%b </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the inputs cannot be converted to integers.\n    ///  2. the divisor is zero.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    MOD = 0xA2,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the result of raising value to the exponent power.\n    /// The first pushed item is the exponent, the second pushed item is the value(the top item).\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a^b </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    POW = 0xA3,\n\n    /// <summary>\n    /// Pops the top stack item and pushes the square root of the item.\n    /// If the input is not an integer, it will be converted to an integer.\n    ///\n    /// <example> sqrt(a) </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the input cannot be converted to an integer.\n    ///  2. the input is negative.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    SQRT = 0xA4,\n\n    /// <summary>\n    /// Performs modulus division on a number multiplied by another number.\n    /// The third pushed item is the modulus.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a*b%c </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the inputs cannot be converted to integers.\n    ///  2. the modulus is zero.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 3 item(s)\n    /// </remarks>\n    /// </summary>\n    MODMUL = 0xA5,\n\n    /// <summary>\n    /// Performs modulus division on a number raised to the power of another number.\n    /// If the exponent is -1, it will have the calculation of the modular inverse.\n    ///\n    /// The third pushed item is the modulus, the second pushed item is the exponent, the first pushed item is the value(the top item).\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> modpow(a, b, c) </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the inputs cannot be converted to integers.\n    ///  2. the modulus is zero.\n    ///  3. the exponent is negative and not -1.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 3 item(s)\n    /// </remarks>\n    /// </summary>\n    MODPOW = 0xA6,\n\n    /// <summary>\n    /// Pops the top two stack items and shifts the first pushed item left by the second pushed item(the top item) bits, preserving sign.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a&lt;&lt;b </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the inputs cannot be converted to integers.\n    ///  2. the shift amount is negative or out of the limit.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    SHL = 0xA8,\n\n    /// <summary>\n    /// Pops the top two stack items and shifts the first pushed item right by the second pushed item(the top item) bits, preserving sign.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> a>>b </example>\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the inputs cannot be converted to integers.\n    ///  2. the shift amount is negative or out of the limit.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    SHR = 0xA9,\n\n    /// <summary>\n    /// Pushes true if the input is false value (false, null, zero), false otherwise.\n    ///\n    /// <example> !a </example>\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    NOT = 0xAA,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if both items are true value (true, not null, not zero), false otherwise.\n    ///\n    /// <example> b &amp;&amp; a </example>\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    BOOLAND = 0xAB,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if either item is true value (true, not null, not zero), false otherwise.\n    ///\n    /// <example> b || a </example>\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    BOOLOR = 0xAC,\n\n    /// <summary>\n    /// Pops the top stack item and pushes true if the item is not 0, false otherwise.\n    /// If the input is not an integer, it will be converted to an integer.\n    ///\n    /// <example> a != 0 </example>\n    /// <para>\n    /// The execution will be faulted if the input cannot be converted to an integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    NZ = 0xB1,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if the items are equal in number, false otherwise.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> b == a </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    NUMEQUAL = 0xB3,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if the items are not equal in number, false otherwise.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> b != a </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    NUMNOTEQUAL = 0xB4,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if the first pushed item is less than the second pushed item(the top item), false otherwise.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> b>a </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    LT = 0xB5,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if the first pushed item is less than or equal to the second pushed item(the top item), false otherwise.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> b>=a </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    LE = 0xB6,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if the first pushed item is greater than the second pushed item(the top item), false otherwise.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> b>a </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    GT = 0xB7,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes true if the first pushed item is greater than or equal to the second pushed item(the top item), false otherwise.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> b>=a </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    GE = 0xB8,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the minimum of the two items.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> min(a, b) </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    MIN = 0xB9,\n\n    /// <summary>\n    /// Pops the top two stack items and pushes the maximum of the two items.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> max(a, b) </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    MAX = 0xBA,\n\n    /// <summary>\n    /// Pops the top three stack items and pushes true if the first pushed item is within the specified range [left, right), false otherwise.\n    /// If the inputs are not integers, they will be converted to integers.\n    ///\n    /// <example> x within [left, right) </example>\n    /// <para>\n    /// The execution will be faulted if the inputs cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 3 item(s)\n    /// </remarks>\n    /// </summary>\n    WITHIN = 0xBB,\n\n    #endregion\n\n    #region Compound-type\n\n    /// <summary>\n    /// A value n is taken from top of main stack.\n    /// The next n*2 items on main stack are removed, put inside n-sized map and this map is put on top of the main stack.\n    /// If the top item is not an integer, it will be converted to an integer.\n    ///\n    /// <example> | value2 | key2 | value1 | key1 | 2 | -> | map{key1 = value1, key2 = value2} | </example>\n    /// The key should be primitive type and if there are the same key, the last one will be used.\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the top item cannot be converted to integers.\n    ///  2. Any key is not a primitive type.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2n+1 item(s)\n    /// </remarks>\n    /// </summary>\n    PACKMAP = 0xBE,\n\n    /// <summary>\n    /// A value n is taken from top of main stack.\n    /// The next n items on main stack are removed, put inside n-sized struct and this struct is put on top of the main stack.\n    /// If the top item is not an integer, it will be converted to an integer.\n    ///\n    /// <para>\n    /// The execution will be faulted if the top item cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: n+1 item(s)\n    /// </remarks>\n    /// </summary>\n    PACKSTRUCT = 0xBF,\n\n    /// <summary>\n    /// A value n is taken from top of main stack.\n    /// The next n items on main stack are removed, put inside n-sized array and this array is put on top of the main stack.\n    /// If the top item is not an integer, it will be converted to an integer.\n    ///\n    /// <para>\n    /// The execution will be faulted if the top item cannot be converted to integers.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: n+1 item(s)\n    /// </remarks>\n    /// </summary>\n    PACK = 0xC0,\n\n    /// <summary>\n    /// A collection is removed from top of the main stack.\n    /// Its elements are put on top of the main stack (in reverse order) and the collection size is also put on the main stack.\n    ///\n    /// <remarks>\n    ///     Push: 2n+1 or n+1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    UNPACK = 0xC1,\n\n    /// <summary>\n    /// An empty array (with size 0) is put on top of the main stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    NEWARRAY0 = 0xC2,\n\n    /// <summary>\n    /// A value n is taken from top of main stack. A null-filled array with size n is put on top of the main stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    NEWARRAY = 0xC3,\n\n    /// <summary>\n    /// An array of type T with size n filled with the default value of type T(false, 0, empty string or null) is put on top of the main stack.\n    /// If the top item is not an integer, it will be converted to an integer.\n    ///\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. the top item cannot be converted to integer.\n    ///  2. the type operand is not a valid stack item type.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    NEWARRAY_T = 0xC4,\n\n    /// <summary>\n    /// An empty struct (with size 0) is put on top of the main stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    NEWSTRUCT0 = 0xC5,\n\n    /// <summary>\n    /// A value n is taken from top of main stack. A null-filled struct with size n is put on top of the main stack.\n    /// If the top item is not an integer, it will be converted to an integer.\n    ///\n    /// <para>\n    /// The execution will be faulted if the top item cannot be converted to integer.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    NEWSTRUCT = 0xC6,\n\n    /// <summary>\n    /// A empty map is created and put on top of the main stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 0 item(s)\n    /// </remarks>\n    /// </summary>\n    NEWMAP = 0xC8,\n\n    /// <summary>\n    /// Pop the top item and push its size. The top item should be an array, map, buffer or primitive type.\n    /// If the top item is an array or map, push its count.\n    /// If the top item is a buffer or primitive type, push its size(in bytes).\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    SIZE = 0xCA,\n\n    /// <summary>\n    /// An input index n (or key) and an array (map, buffer or string) are removed from the top of the main stack.\n    /// Pushes true to the stack if array[n](map[key], or the n-th byte of buffer/string) exist, and false otherwise.\n    ///\n    /// If the target is an array, buffer or string, the index will be converted to an integer.\n    /// The index is the second pushed item(the top item), and the tartget is the first pushed item.\n    ///\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The target is an array, buffer or string and the index cannot be converted to integer or is out of range.\n    ///  2. The target is a map and the key is not a primitive type.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    HASKEY = 0xCB,\n\n    /// <summary>\n    /// A map is taken from top of the main stack. The keys of this map are put on top of the main stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    KEYS = 0xCC,\n\n    /// <summary>\n    /// An array or map is taken from top of the main stack. The values of this array or map are put on top of the main stack.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    VALUES = 0xCD,\n\n    /// <summary>\n    /// An input index n (or key) and an array (map, buffer or primitive type) are taken from main stack.\n    /// Element array[n], or map[n], or buffer[n], or the n-th byte of primitive type(converted to integer) is put on top of the main stack.\n    ///\n    /// If the target is an array, buffer or primitive type, the index will be converted to an integer.\n    /// The index is the second pushed item(the top item), and the tartget is the first pushed item.\n    ///\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The target is an array, buffer or primitive type and the index cannot be converted to integer or is out of range.\n    ///  2. The target is a map and the key is not a primitive type.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    PICKITEM = 0xCE,\n\n    /// <summary>\n    /// The item on top of main stack is removed and appended to the second item on top of the main stack.\n    /// When we use this opcode, we should dup the second item on top of the main stack before using it.\n    ///\n    /// <example> a a b -> a.concat(b)</example>\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    APPEND = 0xCF,\n\n    /// <summary>\n    /// A value, index n (or key) and an array (or buffer, map) are taken from main stack.\n    /// Attribution array[n] = value (or buffer[n] = value, map[key] = value) is performed.\n    /// \n    /// The `value` is the third pushed item(the top item), the `n` or `key` is the second pushed item, and target is the first pushed item.\n    /// If the target is an array or buffer, the index will be converted to an integer.\n    /// If the tartget is a buffer, the value should within [-128, 255].\n    /// \n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 3 item(s)\n    /// </remarks>\n    /// </summary>\n    SETITEM = 0xD0,\n\n    /// <summary>\n    /// An array or buffer is removed from the top of the main stack and its elements are reversed.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    REVERSEITEMS = 0xD1,\n\n    /// <summary>\n    /// An input index n (or key) and an array (or map)are removed from the top of the main stack.\n    /// Element array[n] (or map[key]) is removed.\n    ///\n    /// The index or key is the second pushed item(the top item), and the array or map is the first pushed item.\n    /// If the target is an array, the index will be converted to an integer.\n    ///\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The target is an array and the index cannot be converted to integer or is out of range.\n    ///  2. The target is a map and the key is not a primitive type.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    REMOVE = 0xD2,\n\n    /// <summary>\n    /// Remove all the items from the compound-type.\n    /// Using this opcode will need to dup the compound-type before using it.\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    CLEARITEMS = 0xD3,\n\n    /// <summary>\n    /// Remove the last element from an array, and push it onto the stack.\n    /// Using this opcode will need to dup the array before using it.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    POPITEM = 0xD4,\n\n    #endregion\n\n    #region Types\n\n    /// <summary>\n    /// Pop the top item and push a bool value indicating whether the item is null.\n    ///\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    ISNULL = 0xD8,\n\n    /// <summary>\n    /// Pop the top item and push a bool value indicating whether the item is of the specified type.\n    ///\n    /// <para>\n    /// The execution will be faulted if the type operand(uint8) is invalid.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    ISTYPE = 0xD9,\n\n    /// <summary>\n    /// Pop the top item and convert it to the specified type, then push the converted item.\n    ///\n    /// <para>\n    /// The execution will be faulted if:\n    ///  1. The top item cannot convert to the specified type.\n    ///  2. The type operand(uint8) is invalid.\n    /// </para>\n    /// <remarks>\n    ///     Push: 1 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    [OperandSize(Size = 1)]\n    CONVERT = 0xDB,\n\n    #endregion\n\n    #region Extensions\n\n    /// <summary>\n    /// Pops the top stack item. Then, turns the vm state to FAULT immediately, and cannot be caught.\n    /// The top stack value is used as reason. The top item should be string or can be converted to string.\n    ///\n    /// <example>new Exception(a)</example>\n    ///\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 1 item(s)\n    /// </remarks>\n    /// </summary>\n    ABORTMSG = 0xE0,\n\n    /// <summary>\n    /// Pops the top two stack items.\n    /// If the second-to-top stack value is false value (false, null, zero), exits the vm execution and sets the vm state to FAULT.\n    /// In this case, the top stack value is used as reason for the exit. Otherwise, it is ignored.\n    ///\n    /// The top item should be string or can be converted to string.\n    ///\n    /// <para>\n    /// The execution will be faulted if the top item is not string or cannot be converted to string.\n    /// </para>\n    /// <remarks>\n    ///     Push: 0 item(s)\n    ///     Pop: 2 item(s)\n    /// </remarks>\n    /// </summary>\n    ASSERTMSG = 0xE1\n\n    #endregion\n}\n"
  },
  {
    "path": "src/Neo.VM/OperandSizeAttribute.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// OperandSizeAttribute.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Indicates the operand length of an <see cref=\"OpCode\"/>.\n/// </summary>\n[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]\npublic class OperandSizeAttribute : Attribute\n{\n    /// <summary>\n    /// When it is greater than 0, indicates the size of the operand.\n    /// </summary>\n    public int Size { get; set; }\n\n    /// <summary>\n    /// When it is greater than 0, indicates the size prefix of the operand.\n    /// </summary>\n    public int SizePrefix { get; set; }\n}\n"
  },
  {
    "path": "src/Neo.VM/RCVersion.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// RCVersion.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nnamespace Neo.VM;\n\npublic enum RCVersion\n{\n    V1 = 0,\n    V2 = 1,\n}\n"
  },
  {
    "path": "src/Neo.VM/ReferenceCounter.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ReferenceCounter.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.StronglyConnectedComponents;\nusing Neo.VM.Types;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Used for reference counting of objects in the VM.\n/// </summary>\npublic sealed class ReferenceCounter : IReferenceCounter\n{\n    private readonly ExecutionEngineLimits _limits;\n    // If set to true, all items will be tracked regardless of their type.\n    private const bool TrackAllItems = false;\n\n    // Stores items that are being tracked for references.\n    // Only CompoundType and Buffer items are tracked.\n    private readonly HashSet<StackItem> _trackedItems = new(ReferenceEqualityComparer.Instance);\n\n    // Stores items that have zero references.\n    private readonly HashSet<StackItem> _zeroReferred = new(ReferenceEqualityComparer.Instance);\n\n    // Caches strongly connected components for optimization.\n    private LinkedList<HashSet<StackItem>>? _cachedComponents;\n\n    // Keeps the total count of references.\n    private int _referencesCount = 0;\n\n    public RCVersion Version { get; } = RCVersion.V1;\n\n    /// <inheritdoc/>\n    public int Count => _referencesCount;\n\n    public ReferenceCounter(ExecutionEngineLimits? limits = null)\n    {\n        _limits = limits ?? ExecutionEngineLimits.Default;\n    }\n\n    /// <summary>\n    /// Determines if an item needs to be tracked based on its type.\n    /// </summary>\n    /// <param name=\"item\">The item to check.</param>\n    /// <returns>True if the item needs to be tracked, otherwise false.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static bool NeedTrack(StackItem item)\n    {\n        // Track all items if TrackAllItems is true.\n#pragma warning disable CS0162\n        if (TrackAllItems) return true;\n#pragma warning restore CS0162\n\n        // Track the item if it is a CompoundType or Buffer.\n        if (item is CompoundType or Buffer) return true;\n        return false;\n    }\n\n    /// <inheritdoc/>\n    public void AddReference(StackItem item, CompoundType parent)\n    {\n        // Increment the reference count.\n        _referencesCount++;\n\n        // If the item doesn't need to be tracked, return early.\n        // Only track CompoundType and Buffer items.\n        if (!NeedTrack(item)) return;\n\n        // Invalidate the cached components since the tracked items are changing.\n        _cachedComponents = null;\n\n        // Add the item to the set of tracked items.\n        _trackedItems.Add(item);\n\n        // Initialize the ObjectReferences dictionary if it is null.\n        item.ObjectReferences ??= new Dictionary<CompoundType, StackItem.ObjectReferenceEntry>(ReferenceEqualityComparer.Instance);\n\n        // Add the parent to the item's ObjectReferences dictionary and increment its reference count.\n        if (!item.ObjectReferences.TryGetValue(parent, out var pEntry))\n        {\n            pEntry = new StackItem.ObjectReferenceEntry(parent);\n            item.ObjectReferences.Add(parent, pEntry);\n        }\n        pEntry.References++;\n    }\n\n    /// <inheritdoc/>\n    public void AddStackReference(StackItem item, int count = 1)\n    {\n        // Increment the reference count by the specified count.\n        _referencesCount += count;\n\n        // If the item doesn't need to be tracked, return early.\n        if (!NeedTrack(item)) return;\n\n        // Add the item to the set of tracked items and to the cached components if needed.\n        if (_trackedItems.Add(item))\n            _cachedComponents?.AddLast(new HashSet<StackItem>(ReferenceEqualityComparer.Instance) { item });\n\n        // Increment the item's stack references by the specified count.\n        item.StackReferences += count;\n\n        // Remove the item from the _zeroReferred set since it now has references.\n        _zeroReferred.Remove(item);\n    }\n\n    /// <inheritdoc/>\n    public void AddZeroReferred(StackItem item)\n    {\n        // Add the item to the _zeroReferred set.\n        _zeroReferred.Add(item);\n\n        // If the item doesn't need to be tracked, return early.\n        if (!NeedTrack(item)) return;\n\n        // Add the item to the cached components and the set of tracked items.\n        _cachedComponents?.AddLast(new HashSet<StackItem>(ReferenceEqualityComparer.Instance) { item });\n        _trackedItems.Add(item);\n    }\n\n    /// <inheritdoc/>\n    public void CheckPostExecution()\n    {\n        if (Count < _limits.MaxStackSize) return;\n        if (CheckZeroReferred() > _limits.MaxStackSize)\n            throw new System.InvalidOperationException($\"MaxStackSize exceed: {Count}/{_limits.MaxStackSize}\");\n    }\n\n    /// <summary>\n    /// Checks and processes items that have zero references.\n    ///\n    /// This method is used to check items in the zero-referred list and clean up those that are no longer needed.\n    /// It uses Tarjan's algorithm to find strongly connected components and remove those with no references.\n    ///\n    /// Use this method periodically to clean up items with zero references and free up memory.\n    /// </summary>\n    /// <returns>The current reference count.</returns>\n    public int CheckZeroReferred()\n    {\n        // If there are items with zero references, process them.\n        if (_zeroReferred.Count > 0)\n        {\n            // Clear the zero_referred set since we are going to process all of them.\n            _zeroReferred.Clear();\n\n            // If cached components are null, we need to recompute the strongly connected components (SCCs).\n            if (_cachedComponents is null)\n            {\n                // Create a new Tarjan object and invoke it to find all SCCs in the tracked_items graph.\n                Tarjan tarjan = new(_trackedItems);\n                _cachedComponents = tarjan.Invoke();\n            }\n\n            // Reset all tracked items' Tarjan algorithm-related fields (DFN, LowLink, and OnStack).\n            foreach (StackItem item in _trackedItems)\n                item.Reset();\n\n            // Process each SCC in the cached_components list.\n            for (var node = _cachedComponents.First; node != null;)\n            {\n                var component = node.Value;\n                bool onStack = false;\n\n                // Check if any item in the SCC is still on the stack.\n                foreach (StackItem item in component)\n                {\n                    // An item is considered 'on stack' if it has stack references or if its parent items are still on stack.\n                    if (item.StackReferences > 0 || item.ObjectReferences?.Values.Any(p => p.References > 0 && p.Item.OnStack) == true)\n                    {\n                        onStack = true;\n                        break;\n                    }\n                }\n\n                // If any item in the component is on stack, mark all items in the component as on stack.\n                if (onStack)\n                {\n                    foreach (StackItem item in component)\n                        item.OnStack = true;\n                    node = node.Next;\n                }\n                else\n                {\n                    // Otherwise, remove the component and clean up the items.\n                    foreach (StackItem item in component)\n                    {\n                        _trackedItems.Remove(item);\n\n                        // If the item is a CompoundType, adjust the reference count and clean up its sub-items.\n                        if (item is CompoundType compound)\n                        {\n                            // Decrease the reference count by the number of sub-items.\n                            _referencesCount -= compound.SubItemsCount;\n                            foreach (StackItem subitem in compound.SubItems)\n                            {\n                                // Skip sub-items that are in the same component or don't need tracking.\n                                if (component.Contains(subitem)) continue;\n                                if (!NeedTrack(subitem)) continue;\n\n                                // Remove the parent reference from the sub-item.\n                                subitem.ObjectReferences!.Remove(compound);\n                            }\n                        }\n\n                        // Perform cleanup for the item.\n                        item.Cleanup();\n                    }\n\n                    // Move to the next component and remove the current one from the cached_components list.\n                    var nodeToRemove = node;\n                    node = node.Next;\n                    _cachedComponents.Remove(nodeToRemove);\n                }\n            }\n        }\n\n        // Return the current total reference count.\n        return _referencesCount;\n    }\n\n    /// <inheritdoc/>\n    public void RemoveReference(StackItem item, CompoundType parent)\n    {\n        // Decrement the reference count.\n        _referencesCount--;\n\n        // If the item doesn't need to be tracked, return early.\n        if (!NeedTrack(item)) return;\n\n        // Invalidate the cached components since the tracked items are changing.\n        _cachedComponents = null;\n\n        // Decrement the reference count for the parent in the item's ObjectReferences dictionary.\n        item.ObjectReferences![parent].References--;\n\n        // If the item has no stack references, add it to the zero_referred set.\n        if (item.StackReferences == 0)\n            _zeroReferred.Add(item);\n    }\n\n    /// <inheritdoc/>\n    public void RemoveStackReference(StackItem item)\n    {\n        // Decrement the reference count.\n        _referencesCount--;\n\n        // If the item doesn't need to be tracked, return early.\n        if (!NeedTrack(item)) return;\n\n        // Decrement the item's stack references and add it to the zero_referred set if it has no references.\n        if (--item.StackReferences == 0)\n            _zeroReferred.Add(item);\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/ReferenceCounterV2.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ReferenceCounterV2.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Used for reference counting of objects in the VM.\n/// </summary>\npublic sealed class ReferenceCounterV2 : IReferenceCounter\n{\n    public RCVersion Version { get; } = RCVersion.V2;\n\n    private readonly ExecutionEngineLimits _limits;\n\n    // Keeps the total count of references.\n    private int _referencesCount = 0;\n\n    /// <inheritdoc/>\n    public int Count => _referencesCount;\n\n    public ReferenceCounterV2(ExecutionEngineLimits? limits = null)\n    {\n        _limits = limits ?? ExecutionEngineLimits.Default;\n    }\n\n    /// <inheritdoc/>\n    public void AddReference(StackItem item, CompoundType parent)\n    {\n        throw new NotSupportedException();\n    }\n\n    /// <inheritdoc/>\n    public void AddStackReference(StackItem item, int count = 1)\n    {\n        // Increment the reference count by the specified count.\n        _referencesCount += count;\n\n        if (item is CompoundType compoundType)\n        {\n            // Increment the item's stack references by the specified count.\n            compoundType.StackReferences += count;\n\n            if (compoundType.StackReferences == count)\n            {\n                foreach (var subItem in compoundType.SubItems)\n                {\n                    AddStackReference(subItem);\n                }\n            }\n        }\n    }\n\n    /// <inheritdoc/>\n    public void AddZeroReferred(StackItem item)\n    {\n        throw new NotSupportedException();\n    }\n\n    /// <inheritdoc/>\n    public void CheckPostExecution()\n    {\n        if (Count > _limits.MaxStackSize)\n            throw new InvalidOperationException($\"MaxStackSize exceed: {Count}/{_limits.MaxStackSize}\");\n    }\n\n    /// <inheritdoc/>\n    public int CheckZeroReferred()\n    {\n        throw new NotSupportedException();\n    }\n\n    /// <inheritdoc/>\n    public void RemoveReference(StackItem item, CompoundType parent)\n    {\n        throw new NotSupportedException();\n    }\n\n    /// <inheritdoc/>\n    public void RemoveStackReference(StackItem item)\n    {\n        // Decrease the reference count.\n        _referencesCount--;\n\n        if (item is CompoundType compoundType)\n        {\n            // Decrease the item's stack references.\n            compoundType.StackReferences--;\n\n            if (compoundType.StackReferences == 0)\n            {\n                foreach (var subItem in compoundType.SubItems)\n                {\n                    RemoveStackReference(subItem);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/ReferenceEqualityComparer.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ReferenceEqualityComparer.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\n#if !NET5_0_OR_GREATER\n// https://github.dev/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/ReferenceEqualityComparer.cs\npublic sealed class ReferenceEqualityComparer : IEqualityComparer<object?>, System.Collections.IEqualityComparer\n{\n    private ReferenceEqualityComparer() { }\n\n    public static ReferenceEqualityComparer Instance { get; } = new ReferenceEqualityComparer();\n\n    public new bool Equals(object? x, object? y) => ReferenceEquals(x, y);\n\n    public int GetHashCode(object? obj) => RuntimeHelpers.GetHashCode(obj!);\n}\n#endif\n"
  },
  {
    "path": "src/Neo.VM/Script.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Script.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents the script executed in the VM.\n/// </summary>\n[DebuggerDisplay(\"Length={Length}\")]\npublic class Script\n{\n    private int _hashCode = 0;\n    private readonly ReadOnlyMemory<byte> _value;\n    private readonly bool _strictMode;\n    private readonly Dictionary<int, Instruction> _instructions = [];\n\n    /// <summary>\n    /// Empty script\n    /// </summary>\n    public static Script Empty { get; } = new Script(ReadOnlyMemory<byte>.Empty);\n\n    /// <summary>\n    /// The length of the script.\n    /// </summary>\n    public int Length { get; }\n\n    /// <summary>\n    /// Gets the <see cref=\"OpCode\"/> at the specified index.\n    /// </summary>\n    /// <param name=\"index\">The index to locate.</param>\n    /// <returns>The <see cref=\"OpCode\"/> at the specified index.</returns>\n    public OpCode this[int index]\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            return (OpCode)_value.Span[index];\n        }\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Script\"/> class.\n    /// </summary>\n    /// <param name=\"script\">The bytecodes of the script.</param>\n    public Script(ReadOnlyMemory<byte> script) : this(script, false)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Script\"/> class.\n    /// </summary>\n    /// <param name=\"script\">The bytecodes of the script.</param>\n    /// <param name=\"strictMode\">\n    /// Indicates whether strict mode is enabled.\n    /// In strict mode, the script will be checked, but the loading speed will be slower.\n    /// </param>\n    /// <exception cref=\"BadScriptException\">In strict mode, the script was found to contain bad instructions.</exception>\n    public Script(ReadOnlyMemory<byte> script, bool strictMode)\n    {\n        _value = script;\n        Length = _value.Length;\n        if (strictMode)\n        {\n            for (var ip = 0; ip < script.Length; ip += GetInstruction(ip).Size) { }\n            foreach (var (ip, instruction) in _instructions)\n            {\n                switch (instruction.OpCode)\n                {\n                    case OpCode.JMP:\n                    case OpCode.JMPIF:\n                    case OpCode.JMPIFNOT:\n                    case OpCode.JMPEQ:\n                    case OpCode.JMPNE:\n                    case OpCode.JMPGT:\n                    case OpCode.JMPGE:\n                    case OpCode.JMPLT:\n                    case OpCode.JMPLE:\n                    case OpCode.CALL:\n                    case OpCode.ENDTRY:\n                        if (!_instructions.ContainsKey(checked(ip + instruction.TokenI8)))\n                            throw new BadScriptException($\"ip: {ip}, opcode: {instruction.OpCode}\");\n                        break;\n                    case OpCode.PUSHA:\n                    case OpCode.JMP_L:\n                    case OpCode.JMPIF_L:\n                    case OpCode.JMPIFNOT_L:\n                    case OpCode.JMPEQ_L:\n                    case OpCode.JMPNE_L:\n                    case OpCode.JMPGT_L:\n                    case OpCode.JMPGE_L:\n                    case OpCode.JMPLT_L:\n                    case OpCode.JMPLE_L:\n                    case OpCode.CALL_L:\n                    case OpCode.ENDTRY_L:\n                        if (!_instructions.ContainsKey(checked(ip + instruction.TokenI32)))\n                            throw new BadScriptException($\"ip: {ip}, opcode: {instruction.OpCode}\");\n                        break;\n                    case OpCode.TRY:\n                        if (!_instructions.ContainsKey(checked(ip + instruction.TokenI8)))\n                            throw new BadScriptException($\"ip: {ip}, opcode: {instruction.OpCode}\");\n                        if (!_instructions.ContainsKey(checked(ip + instruction.TokenI8_1)))\n                            throw new BadScriptException($\"ip: {ip}, opcode: {instruction.OpCode}\");\n                        break;\n                    case OpCode.TRY_L:\n                        if (!_instructions.ContainsKey(checked(ip + instruction.TokenI32)))\n                            throw new BadScriptException($\"ip: {ip}, opcode: {instruction.OpCode}\");\n                        if (!_instructions.ContainsKey(checked(ip + instruction.TokenI32_1)))\n                            throw new BadScriptException($\"ip: {ip}, opcode: {instruction.OpCode}\");\n                        break;\n                    case OpCode.NEWARRAY_T:\n                    case OpCode.ISTYPE:\n                    case OpCode.CONVERT:\n                        var type = (StackItemType)instruction.TokenU8;\n#if NET5_0_OR_GREATER\n                        if (!Enum.IsDefined(type))\n#else\n                        if (!Enum.IsDefined(typeof(StackItemType), type))\n#endif\n                            throw new BadScriptException();\n                        if (instruction.OpCode != OpCode.NEWARRAY_T && type == StackItemType.Any)\n                            throw new BadScriptException($\"ip: {ip}, opcode: {instruction.OpCode}\");\n                        break;\n                }\n            }\n        }\n        _strictMode = strictMode;\n    }\n\n    /// <summary>\n    /// Get the <see cref=\"Instruction\"/> at the specified position.\n    /// </summary>\n    /// <param name=\"ip\">The position to get the <see cref=\"Instruction\"/>.</param>\n    /// <returns>The <see cref=\"Instruction\"/> at the specified position.</returns>\n    /// <exception cref=\"ArgumentException\">In strict mode, the <see cref=\"Instruction\"/> was not found at the specified position.</exception>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public Instruction GetInstruction(int ip)\n    {\n        if (!_instructions.TryGetValue(ip, out var instruction))\n        {\n#if NET5_0_OR_GREATER\n            ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(ip, Length);\n#else\n            if (ip >= Length) throw new ArgumentOutOfRangeException(nameof(ip));\n#endif\n            if (_strictMode) throw new ArgumentException($\"Instruction not found at position {ip} in strict mode.\", nameof(ip));\n            instruction = new Instruction(_value, ip);\n            _instructions.Add(ip, instruction);\n        }\n        return instruction;\n    }\n\n    public static implicit operator ReadOnlyMemory<byte>(Script script) => script._value;\n    public static implicit operator Script(ReadOnlyMemory<byte> script) => new(script);\n    public static implicit operator Script(byte[] script) => new(script);\n\n    public override int GetHashCode()\n    {\n        if (_hashCode == 0)\n        {\n            _hashCode = HashCode.Combine(_value.Span.XxHash3_32());\n        }\n        return _hashCode;\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/ScriptBuilder.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ScriptBuilder.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.IO;\nusing System.Numerics;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// A helper class for building scripts.\n/// </summary>\npublic class ScriptBuilder : IDisposable\n{\n    private readonly MemoryStream _stream;\n    private readonly BinaryWriter _writer;\n\n    /// <summary>\n    /// The length of the script.\n    /// </summary>\n    public int Length => (int)_stream.Position;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ScriptBuilder\"/> class.\n    /// </summary>\n    /// <param name=\"initialCapacity\">The initial capacity of the script.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"initialCapacity\"/> is negative.\n    /// </exception>\n    public ScriptBuilder(int initialCapacity = 0)\n    {\n        if (initialCapacity < 0)\n            throw new ArgumentOutOfRangeException(nameof(initialCapacity), \"cannot be negative\");\n        _stream = new MemoryStream(initialCapacity);\n        _writer = new BinaryWriter(_stream);\n    }\n\n    public void Dispose()\n    {\n        _writer.Dispose();\n        _stream.Dispose();\n        GC.SuppressFinalize(this);\n    }\n\n    /// <summary>\n    /// Emits an <see cref=\"Instruction\"/> with the specified <see cref=\"OpCode\"/> and operand.\n    /// </summary>\n    /// <param name=\"opcode\">The <see cref=\"OpCode\"/> to be emitted.</param>\n    /// <param name=\"operand\">The operand to be emitted.</param>\n    /// <returns>A reference to this instance after the emit operation has completed.</returns>\n    public ScriptBuilder Emit(OpCode opcode, ReadOnlySpan<byte> operand = default)\n    {\n        _writer.Write((byte)opcode);\n        _writer.Write(operand);\n        return this;\n    }\n\n    /// <summary>\n    /// Emits a call <see cref=\"Instruction\"/> with the specified offset.\n    /// </summary>\n    /// <param name=\"offset\">The offset to be called.</param>\n    /// <returns>A reference to this instance after the emit operation has completed.</returns>\n    public ScriptBuilder EmitCall(int offset)\n    {\n        if (offset < sbyte.MinValue || offset > sbyte.MaxValue)\n            return Emit(OpCode.CALL_L, BitConverter.GetBytes(offset));\n        else\n            return Emit(OpCode.CALL, new[] { (byte)offset });\n    }\n\n    /// <summary>\n    /// Emits a jump <see cref=\"Instruction\"/> with the specified offset.\n    /// </summary>\n    /// <param name=\"opcode\">The <see cref=\"OpCode\"/> to be emitted. It must be a jump <see cref=\"OpCode\"/></param>\n    /// <param name=\"offset\">The offset to jump.</param>\n    /// <returns>A reference to this instance after the emit operation has completed.</returns>\n    public ScriptBuilder EmitJump(OpCode opcode, int offset)\n    {\n        if (opcode < OpCode.JMP || opcode > OpCode.JMPLE_L)\n            throw new ArgumentOutOfRangeException(nameof(opcode));\n        if ((int)opcode % 2 == 0 && (offset < sbyte.MinValue || offset > sbyte.MaxValue))\n            opcode += 1;\n        if ((int)opcode % 2 == 0)\n            return Emit(opcode, new[] { (byte)offset });\n        else\n            return Emit(opcode, BitConverter.GetBytes(offset));\n    }\n\n    /// <summary>\n    /// Emits a push <see cref=\"Instruction\"/> with the specified number.\n    /// </summary>\n    /// <param name=\"value\">The number to be pushed.</param>\n    /// <returns>A reference to this instance after the emit operation has completed.</returns>\n    public ScriptBuilder EmitPush(BigInteger value)\n    {\n        if (value >= -1 && value <= 16) return Emit(OpCode.PUSH0 + (byte)(int)value);\n        Span<byte> buffer = stackalloc byte[32];\n        if (!value.TryWriteBytes(buffer, out int bytesWritten, isUnsigned: false, isBigEndian: false))\n            throw new ArgumentOutOfRangeException(nameof(value));\n        return bytesWritten switch\n        {\n            1 => Emit(OpCode.PUSHINT8, PadRight(buffer, bytesWritten, 1, value.Sign < 0)),\n            2 => Emit(OpCode.PUSHINT16, PadRight(buffer, bytesWritten, 2, value.Sign < 0)),\n            <= 4 => Emit(OpCode.PUSHINT32, PadRight(buffer, bytesWritten, 4, value.Sign < 0)),\n            <= 8 => Emit(OpCode.PUSHINT64, PadRight(buffer, bytesWritten, 8, value.Sign < 0)),\n            <= 16 => Emit(OpCode.PUSHINT128, PadRight(buffer, bytesWritten, 16, value.Sign < 0)),\n            <= 32 => Emit(OpCode.PUSHINT256, PadRight(buffer, bytesWritten, 32, value.Sign < 0)),\n            _ => throw new ArgumentOutOfRangeException(nameof(value), \"Invalid value: BigInteger is too large\"),\n        };\n    }\n\n    /// <summary>\n    /// Emits a push <see cref=\"Instruction\"/> with the specified boolean value.\n    /// </summary>\n    /// <param name=\"value\">The value to be pushed.</param>\n    /// <returns>A reference to this instance after the emit operation has completed.</returns>\n    public ScriptBuilder EmitPush(bool value)\n    {\n        return Emit(value ? OpCode.PUSHT : OpCode.PUSHF);\n    }\n\n    /// <summary>\n    /// Emits a push <see cref=\"Instruction\"/> with the specified data.\n    /// </summary>\n    /// <param name=\"data\">The data to be pushed.</param>\n    /// <returns>A reference to this instance after the emit operation has completed.</returns>\n    public ScriptBuilder EmitPush(ReadOnlySpan<byte> data)\n    {\n        if (data.Length < 0x100)\n        {\n            Emit(OpCode.PUSHDATA1);\n            _writer.Write((byte)data.Length);\n            _writer.Write(data);\n        }\n        else if (data.Length < 0x10000)\n        {\n            Emit(OpCode.PUSHDATA2);\n            _writer.Write((ushort)data.Length);\n            _writer.Write(data);\n        }\n        else// if (data.Length < 0x100000000L)\n        {\n            Emit(OpCode.PUSHDATA4);\n            _writer.Write(data.Length);\n            _writer.Write(data);\n        }\n        return this;\n    }\n\n    /// <summary>\n    /// Emits a push <see cref=\"Instruction\"/> with the specified <see cref=\"string\"/>.\n    /// </summary>\n    /// <param name=\"data\">The <see cref=\"string\"/> to be pushed.</param>\n    /// <returns>A reference to this instance after the emit operation has completed.</returns>\n    public ScriptBuilder EmitPush(string data)\n    {\n        return EmitPush(data.ToStrictUtf8Bytes());\n    }\n\n    /// <summary>\n    /// Emits raw script.\n    /// </summary>\n    /// <param name=\"script\">The raw script to be emitted.</param>\n    /// <returns>A reference to this instance after the emit operation has completed.</returns>\n    public ScriptBuilder EmitRaw(ReadOnlySpan<byte> script = default)\n    {\n        _writer.Write(script);\n        return this;\n    }\n\n    /// <summary>\n    /// Emits an <see cref=\"Instruction\"/> with <see cref=\"OpCode.SYSCALL\"/>.\n    /// </summary>\n    /// <param name=\"api\">The operand of <see cref=\"OpCode.SYSCALL\"/>.</param>\n    /// <returns>A reference to this instance after the emit operation has completed.</returns>\n    public ScriptBuilder EmitSysCall(uint api)\n    {\n        return Emit(OpCode.SYSCALL, BitConverter.GetBytes(api));\n    }\n\n    /// <summary>\n    /// Converts the value of this instance to a byte array.\n    /// </summary>\n    /// <returns>A byte array contains the script.</returns>\n    public byte[] ToArray()\n    {\n        _writer.Flush();\n        return _stream.ToArray();\n    }\n\n    private static ReadOnlySpan<byte> PadRight(Span<byte> buffer, int dataLength, int padLength, bool negative)\n    {\n        byte pad = negative ? (byte)0xff : (byte)0;\n        for (int x = dataLength; x < padLength; x++)\n            buffer[x] = pad;\n        return buffer[..padLength];\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Slot.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Slot.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System.Collections;\nusing System.Collections.Generic;\nusing Array = System.Array;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Used to store local variables, arguments and static fields in the VM.\n/// </summary>\npublic class Slot : IReadOnlyList<StackItem>\n{\n    private readonly IReferenceCounter _referenceCounter;\n    private readonly StackItem[] _items;\n\n    /// <summary>\n    /// Gets the item at the specified index in the slot.\n    /// </summary>\n    /// <param name=\"index\">The zero-based index of the item to get.</param>\n    /// <returns>The item at the specified index in the slot.</returns>\n    public StackItem this[int index]\n    {\n        get\n        {\n            return _items[index];\n        }\n        internal set\n        {\n            ref var oldValue = ref _items[index];\n            _referenceCounter.RemoveStackReference(oldValue);\n            oldValue = value;\n            _referenceCounter.AddStackReference(value);\n        }\n    }\n\n    /// <summary>\n    /// Gets the number of items in the slot.\n    /// </summary>\n    public int Count => _items.Length;\n\n    /// <summary>\n    /// Creates a slot containing the specified items.\n    /// </summary>\n    /// <param name=\"items\">The items to be contained.</param>\n    /// <param name=\"referenceCounter\">The reference counter to be used.</param>\n    public Slot(StackItem[] items, IReferenceCounter referenceCounter)\n    {\n        _referenceCounter = referenceCounter;\n        _items = items;\n        foreach (StackItem item in items)\n            referenceCounter.AddStackReference(item);\n    }\n\n    /// <summary>\n    /// Create a slot of the specified size.\n    /// </summary>\n    /// <param name=\"count\">Indicates the number of items contained in the slot.</param>\n    /// <param name=\"referenceCounter\">The reference counter to be used.</param>\n    public Slot(int count, IReferenceCounter referenceCounter)\n    {\n        _referenceCounter = referenceCounter;\n        _items = new StackItem[count];\n        Array.Fill(_items, StackItem.Null);\n        referenceCounter.AddStackReference(StackItem.Null, count);\n    }\n\n    internal void ClearReferences()\n    {\n        foreach (StackItem item in _items)\n            _referenceCounter.RemoveStackReference(item);\n    }\n\n    IEnumerator<StackItem> IEnumerable<StackItem>.GetEnumerator()\n    {\n        foreach (StackItem item in _items) yield return item;\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return _items.GetEnumerator();\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/StronglyConnectedComponents/Tarjan.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Tarjan.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections.Generic;\nusing T = Neo.VM.Types.StackItem;\n\nnamespace Neo.VM.StronglyConnectedComponents;\n\nclass Tarjan\n{\n    private readonly IEnumerable<T> vertexs;\n    private readonly LinkedList<HashSet<T>> components = new();\n    private readonly Stack<T> stack = new();\n    private int index = 0;\n\n    public Tarjan(IEnumerable<T> vertexs)\n    {\n        this.vertexs = vertexs;\n    }\n\n    public LinkedList<HashSet<T>> Invoke()\n    {\n        foreach (var v in vertexs)\n        {\n            if (v.DFN < 0)\n            {\n                StrongConnectNonRecursive(v);\n            }\n        }\n        return components;\n    }\n\n    private void StrongConnect(T v)\n    {\n        v.DFN = v.LowLink = ++index;\n        stack.Push(v);\n        v.OnStack = true;\n\n        foreach (T w in v.Successors)\n        {\n            if (w.DFN < 0)\n            {\n                StrongConnect(w);\n                v.LowLink = Math.Min(v.LowLink, w.LowLink);\n            }\n            else if (w.OnStack)\n            {\n                v.LowLink = Math.Min(v.LowLink, w.DFN);\n            }\n        }\n\n        if (v.LowLink == v.DFN)\n        {\n            HashSet<T> scc = new(ReferenceEqualityComparer.Instance);\n            T w;\n            do\n            {\n                w = stack.Pop();\n                w.OnStack = false;\n                scc.Add(w);\n            } while (v != w);\n            components.AddLast(scc);\n        }\n    }\n\n    private void StrongConnectNonRecursive(T v)\n    {\n        Stack<(T node, T?, IEnumerator<T>?, int)> sstack = new();\n        sstack.Push((v, null, null, 0));\n        while (sstack.TryPop(out var state))\n        {\n            v = state.node;\n            var (_, w, s, n) = state;\n            switch (n)\n            {\n                case 0:\n                    v.DFN = v.LowLink = ++index;\n                    stack.Push(v);\n                    v.OnStack = true;\n                    s = v.Successors.GetEnumerator();\n                    goto case 2;\n                case 1:\n                    v.LowLink = Math.Min(v.LowLink, w!.LowLink);\n                    goto case 2;\n                case 2:\n                    while (s!.MoveNext())\n                    {\n                        w = s.Current;\n                        if (w.DFN < 0)\n                        {\n                            sstack.Push((v, w, s, 1));\n                            v = w;\n                            goto case 0;\n                        }\n                        else if (w.OnStack)\n                        {\n                            v.LowLink = Math.Min(v.LowLink, w.DFN);\n                        }\n                    }\n                    if (v.LowLink == v.DFN)\n                    {\n                        HashSet<T> scc = new(ReferenceEqualityComparer.Instance);\n                        do\n                        {\n                            w = stack.Pop();\n                            w.OnStack = false;\n                            scc.Add(w);\n                        } while (v != w);\n                        components.AddLast(scc);\n                    }\n                    break;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/Array.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Array.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents an array or a complex object in the VM.\n/// </summary>\npublic class Array : CompoundType, IReadOnlyList<StackItem>\n{\n    protected readonly List<StackItem> InnerList;\n\n    /// <summary>\n    /// Get or set item in the array.\n    /// </summary>\n    /// <param name=\"index\">The index of the item in the array.</param>\n    /// <returns>The item at the specified index.</returns>\n    public StackItem this[int index]\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get => InnerList[index];\n        set\n        {\n            if (IsReadOnly) throw new InvalidOperationException(\"The object is readonly.\");\n            ReferenceCounter?.RemoveReference(InnerList[index], this);\n            InnerList[index] = value;\n            if (ReferenceCounter != null && value is CompoundType { ReferenceCounter: null })\n            {\n                throw new InvalidOperationException(\"Can not set a CompoundType without a ReferenceCounter.\");\n            }\n\n            ReferenceCounter?.AddReference(value, this);\n        }\n    }\n\n    /// <summary>\n    /// The number of items in the array.\n    /// </summary>\n    public override int Count => InnerList.Count;\n    public override IEnumerable<StackItem> SubItems => InnerList;\n    public override int SubItemsCount => InnerList.Count;\n    public override StackItemType Type => StackItemType.Array;\n\n    /// <summary>\n    /// Create an array containing the specified items.\n    /// </summary>\n    /// <param name=\"items\">The items to be included in the array.</param>\n    public Array(IEnumerable<StackItem>? items = null)\n        : this(null, items)\n    {\n    }\n\n    /// <summary>\n    /// Create an array containing the specified items. And make the array use the specified <see cref=\"IReferenceCounter\"/>.\n    /// </summary>\n    /// <param name=\"referenceCounter\">The <see cref=\"IReferenceCounter\"/> to be used by this array.</param>\n    /// <param name=\"items\">The items to be included in the array.</param>\n    public Array(IReferenceCounter? referenceCounter, IEnumerable<StackItem>? items = null)\n        : base(referenceCounter)\n    {\n        InnerList = items switch\n        {\n            null => new List<StackItem>(),\n            List<StackItem> list => list,\n            _ => new List<StackItem>(items)\n        };\n\n        if (referenceCounter?.Version != RCVersion.V1) return;\n\n        foreach (var item in InnerList)\n        {\n            if (item is CompoundType { ReferenceCounter: null })\n            {\n                throw new InvalidOperationException(\"Can not set a CompoundType without a ReferenceCounter.\");\n            }\n\n            referenceCounter.AddReference(item, this);\n        }\n    }\n\n    /// <summary>\n    /// Add a new item at the end of the array.\n    /// </summary>\n    /// <param name=\"item\">The item to be added.</param>\n    public void Add(StackItem item)\n    {\n        if (IsReadOnly) throw new InvalidOperationException(\"The array is readonly, can not add item.\");\n        InnerList.Add(item);\n\n        if (ReferenceCounter == null) return;\n\n        if (item is CompoundType { ReferenceCounter: null })\n        {\n            throw new InvalidOperationException(\"Can not set a CompoundType without a ReferenceCounter.\");\n        }\n        ReferenceCounter.AddReference(item, this);\n    }\n\n    public override void Clear()\n    {\n        if (IsReadOnly) throw new InvalidOperationException(\"The array is readonly, can not clear.\");\n        if (ReferenceCounter is not null)\n            foreach (StackItem item in InnerList)\n                ReferenceCounter.RemoveReference(item, this);\n        InnerList.Clear();\n    }\n\n    public override StackItem ConvertTo(StackItemType type)\n    {\n        if (Type == StackItemType.Array && type == StackItemType.Struct)\n            return new Struct(ReferenceCounter, new List<StackItem>(InnerList));\n        return base.ConvertTo(type);\n    }\n\n    internal sealed override StackItem DeepCopy(Dictionary<StackItem, StackItem> refMap, bool asImmutable)\n    {\n        if (refMap.TryGetValue(this, out StackItem? mappedItem)) return mappedItem;\n        Array result = this is Struct ? new Struct(ReferenceCounter) : new Array(ReferenceCounter);\n        refMap.Add(this, result);\n        foreach (StackItem item in InnerList)\n            result.Add(item.DeepCopy(refMap, asImmutable));\n        result.IsReadOnly = IsReadOnly || asImmutable;\n        return result;\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n\n    public IEnumerator<StackItem> GetEnumerator()\n    {\n        return InnerList.GetEnumerator();\n    }\n\n    /// <summary>\n    /// Remove the item at the specified index.\n    /// </summary>\n    /// <param name=\"index\">The index of the item to be removed.</param>\n    public void RemoveAt(int index)\n    {\n        if (IsReadOnly) throw new InvalidOperationException(\"The array is readonly, can not remove item.\");\n        ReferenceCounter?.RemoveReference(InnerList[index], this);\n        InnerList.RemoveAt(index);\n    }\n\n    /// <summary>\n    /// Reverse all items in the array.\n    /// </summary>\n    public void Reverse()\n    {\n        if (IsReadOnly) throw new InvalidOperationException(\"The array is readonly, can not reverse.\");\n        InnerList.Reverse();\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/Boolean.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Boolean.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Diagnostics;\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents a boolean (<see langword=\"true\" /> or <see langword=\"false\" />) value in the VM.\n/// </summary>\n[DebuggerDisplay(\"Type={GetType().Name}, Value={value}\")]\npublic class Boolean : PrimitiveType\n{\n    private static readonly ReadOnlyMemory<byte> TRUE = new byte[] { 1 };\n    private static readonly ReadOnlyMemory<byte> FALSE = new byte[] { 0 };\n\n    private readonly bool value;\n\n    public override ReadOnlyMemory<byte> Memory => value ? TRUE : FALSE;\n    public override int Size => sizeof(bool);\n    public override StackItemType Type => StackItemType.Boolean;\n\n    /// <summary>\n    /// Create a new VM object representing the boolean type.\n    /// </summary>\n    /// <param name=\"value\">The initial value of the object.</param>\n    internal Boolean(bool value)\n    {\n        this.value = value;\n    }\n\n    public override bool Equals(StackItem? other)\n    {\n        if (ReferenceEquals(this, other)) return true;\n        if (other is Boolean b) return value == b.value;\n        return false;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public override bool GetBoolean()\n    {\n        return value;\n    }\n\n    public override int GetHashCode()\n    {\n        return HashCode.Combine(value);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public override BigInteger GetInteger()\n    {\n        return value ? BigInteger.One : BigInteger.Zero;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Boolean(bool value)\n    {\n        return value ? True : False;\n    }\n\n    public override string ToString()\n    {\n        return value.ToString();\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/Buffer.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Buffer.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Buffers;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Numerics;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents a memory block that can be used for reading and writing in the VM.\n/// </summary>\n[DebuggerDisplay(\"Type={GetType().Name}, Value={System.Convert.ToHexString(GetSpan())}\")]\npublic class Buffer : StackItem\n{\n    /// <summary>\n    /// The internal byte array used to store the actual data.\n    /// </summary>\n    public readonly Memory<byte> InnerBuffer;\n\n    /// <summary>\n    /// The size of the buffer.\n    /// </summary>\n    public int Size => InnerBuffer.Length;\n    public override StackItemType Type => StackItemType.Buffer;\n\n    private readonly byte[] _buffer;\n    private bool _keep_alive = false;\n\n    /// <summary>\n    /// Create a buffer of the specified size.\n    /// </summary>\n    /// <param name=\"size\">The size of this buffer.</param>\n    /// <param name=\"zeroInitialize\">Indicates whether the created buffer is zero-initialized.</param>\n    public Buffer(int size, bool zeroInitialize = true)\n    {\n        _buffer = ArrayPool<byte>.Shared.Rent(size);\n        InnerBuffer = new Memory<byte>(_buffer, 0, size);\n        if (zeroInitialize) InnerBuffer.Span.Clear();\n    }\n\n    /// <summary>\n    /// Create a buffer with the specified data.\n    /// </summary>\n    /// <param name=\"data\">The data to be contained in this buffer.</param>\n    public Buffer(ReadOnlySpan<byte> data) : this(data.Length, false)\n    {\n        data.CopyTo(InnerBuffer.Span);\n    }\n\n    internal override void Cleanup()\n    {\n        if (!_keep_alive)\n            ArrayPool<byte>.Shared.Return(_buffer, clearArray: false);\n    }\n\n    public void KeepAlive()\n    {\n        _keep_alive = true;\n    }\n\n    public override StackItem ConvertTo(StackItemType type)\n    {\n        switch (type)\n        {\n            case StackItemType.Integer:\n                if (InnerBuffer.Length > Integer.MaxSize)\n                    throw new InvalidCastException();\n                return new BigInteger(InnerBuffer.Span);\n            case StackItemType.ByteString:\n#if NET5_0_OR_GREATER\n                byte[] clone = GC.AllocateUninitializedArray<byte>(InnerBuffer.Length);\n#else\n                byte[] clone = new byte[InnerBuffer.Length];\n#endif\n                InnerBuffer.CopyTo(clone);\n                return clone;\n            default:\n                return base.ConvertTo(type);\n        }\n    }\n\n    internal override StackItem DeepCopy(Dictionary<StackItem, StackItem> refMap, bool asImmutable)\n    {\n        if (refMap.TryGetValue(this, out StackItem? mappedItem)) return mappedItem;\n        StackItem result = asImmutable ? new ByteString(InnerBuffer.ToArray()) : new Buffer(InnerBuffer.Span);\n        refMap.Add(this, result);\n        return result;\n    }\n\n    public override bool GetBoolean()\n    {\n        return true;\n    }\n\n    public override ReadOnlySpan<byte> GetSpan()\n    {\n        return InnerBuffer.Span;\n    }\n\n    public override string ToString()\n    {\n        return GetSpan().TryToStrictUtf8String(out var str)\n            ? $\"(\\\"{str}\\\")\"\n            : $\"(\\\"Base64: {Convert.ToBase64String(GetSpan())}\\\")\";\n    }\n\n    public override int GetHashCode() => throw new NotSupportedException(\"Mutable buffer does not support GetHashCode.\");\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/ByteString.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ByteString.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Diagnostics;\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents an immutable memory block in the VM.\n/// </summary>\n[DebuggerDisplay(\"Type={GetType().Name}, Value={System.Convert.ToHexString(GetSpan())}\")]\npublic class ByteString : PrimitiveType\n{\n    /// <summary>\n    /// An empty <see cref=\"ByteString\"/>.\n    /// </summary>\n    public static readonly ByteString Empty = ReadOnlyMemory<byte>.Empty;\n\n    public override ReadOnlyMemory<byte> Memory { get; }\n    public override StackItemType Type => StackItemType.ByteString;\n\n    /// <summary>\n    /// Create a new <see cref=\"ByteString\"/> with the specified data.\n    /// </summary>\n    /// <param name=\"data\">The data to be contained in this <see cref=\"ByteString\"/>.</param>\n    public ByteString(ReadOnlyMemory<byte> data)\n    {\n        Memory = data;\n    }\n\n    private bool Equals(ByteString other)\n    {\n        return GetSpan().SequenceEqual(other.GetSpan());\n    }\n\n    public override bool Equals(StackItem? other)\n    {\n        if (ReferenceEquals(this, other)) return true;\n        if (other is not ByteString b) return false;\n        return Equals(b);\n    }\n\n    internal override bool Equals(StackItem? other, ExecutionEngineLimits limits)\n    {\n        uint maxComparableSize = limits.MaxComparableSize;\n        return Equals(other, ref maxComparableSize);\n    }\n\n    internal bool Equals(StackItem? other, ref uint limits)\n    {\n        if (Size > limits || limits == 0)\n            throw new InvalidOperationException($\"The operand exceeds the maximum comparable size, {Size}/{limits}.\");\n        uint comparedSize = 1;\n        try\n        {\n            if (other is not ByteString b) return false;\n            comparedSize = Math.Max((uint)Math.Max(Size, b.Size), comparedSize);\n            if (ReferenceEquals(this, b)) return true;\n            if (b.Size > limits)\n                throw new InvalidOperationException($\"The operand exceeds the maximum comparable size, {b.Size}/{limits}.\");\n            return Equals(b);\n        }\n        finally\n        {\n            limits -= comparedSize;\n        }\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public override bool GetBoolean()\n    {\n        if (Size > Integer.MaxSize) throw new InvalidCastException();\n        return Unsafe.NotZero(GetSpan());\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public override BigInteger GetInteger()\n    {\n        if (Size > Integer.MaxSize) throw new InvalidCastException($\"Can not convert {nameof(ByteString)} to an integer, MaxSize of {nameof(Integer)} is exceeded: {Size}/{Integer.MaxSize}.\");\n        return new BigInteger(GetSpan());\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator ReadOnlyMemory<byte>(ByteString value)\n    {\n        return value.Memory;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator ReadOnlySpan<byte>(ByteString value)\n    {\n        return value.Memory.Span;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator ByteString(byte[] value)\n    {\n        return new ByteString(value);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator ByteString(ReadOnlyMemory<byte> value)\n    {\n        return new ByteString(value);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator ByteString(string value)\n    {\n        return new ByteString(value.ToStrictUtf8Bytes());\n    }\n\n    public override string ToString()\n    {\n        return GetSpan().TryToStrictUtf8String(out var str)\n            ? $\"\\\"{str}\\\"\"\n            : $\"\\\"Base64: {Convert.ToBase64String(GetSpan())}\\\"\";\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/CompoundType.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// CompoundType.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// The base class for complex types in the VM.\n/// </summary>\n[DebuggerDisplay(\"Type={GetType().Name}, Count={Count}, Id={System.Collections.Generic.ReferenceEqualityComparer.Instance.GetHashCode(this)}\")]\npublic abstract class CompoundType : StackItem\n{\n    /// <summary>\n    /// The reference counter used to count the items in the VM object.\n    /// </summary>\n    protected internal readonly IReferenceCounter? ReferenceCounter;\n\n    /// <summary>\n    /// Create a new <see cref=\"CompoundType\"/> with the specified reference counter.\n    /// </summary>\n    /// <param name=\"referenceCounter\">The reference counter to be used.</param>\n    protected CompoundType(IReferenceCounter? referenceCounter = null)\n    {\n        if (referenceCounter?.Version == RCVersion.V1)\n        {\n            ReferenceCounter = referenceCounter;\n            referenceCounter.AddZeroReferred(this);\n        }\n        else\n        {\n            ReferenceCounter = null;\n        }\n    }\n\n    /// <summary>\n    /// The number of items in this VM object.\n    /// </summary>\n    public abstract int Count { get; }\n\n    public abstract IEnumerable<StackItem> SubItems { get; }\n\n    public abstract int SubItemsCount { get; }\n\n    public bool IsReadOnly { get; protected set; }\n\n    /// <summary>\n    /// Remove all items from the VM object.\n    /// </summary>\n    public abstract void Clear();\n\n    internal abstract override StackItem DeepCopy(Dictionary<StackItem, StackItem> refMap, bool asImmutable);\n\n    public sealed override bool GetBoolean()\n    {\n        return true;\n    }\n\n    public override int GetHashCode() => throw new NotSupportedException(\"Mutable compound type does not support GetHashCode.\");\n\n    public override string ToString()\n    {\n        return Count.ToString();\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/Integer.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Integer.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Diagnostics;\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents an integer value in the VM.\n/// </summary>\n[DebuggerDisplay(\"Type={GetType().Name}, Value={value}\")]\npublic class Integer : PrimitiveType\n{\n    /// <summary>\n    /// The maximum size of an integer in bytes.\n    /// </summary>\n    public const int MaxSize = 32;\n\n    /// <summary>\n    /// Represents the number 0.\n    /// </summary>\n    public static readonly Integer Zero = 0;\n    private readonly BigInteger value;\n\n    public override ReadOnlyMemory<byte> Memory => value.IsZero ? ReadOnlyMemory<byte>.Empty : value.ToByteArray();\n    public override int Size { get; }\n    public override StackItemType Type => StackItemType.Integer;\n\n    /// <summary>\n    /// Create an integer with the specified value.\n    /// </summary>\n    /// <param name=\"value\">The value of the integer.</param>\n    public Integer(BigInteger value)\n    {\n        if (value.IsZero)\n        {\n            Size = 0;\n        }\n        else\n        {\n            Size = value.GetByteCount();\n            if (Size > MaxSize) throw new ArgumentException($\"Integer size {Size} bytes exceeds maximum allowed size of {MaxSize} bytes.\", nameof(value));\n        }\n        this.value = value;\n    }\n\n    public override bool Equals(StackItem? other)\n    {\n        if (ReferenceEquals(this, other)) return true;\n        if (other is Integer i) return value == i.value;\n        return false;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public override bool GetBoolean()\n    {\n        return !value.IsZero;\n    }\n\n    public override int GetHashCode()\n    {\n        return HashCode.Combine(value);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public override BigInteger GetInteger()\n    {\n        return value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Integer(sbyte value)\n    {\n        return (BigInteger)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Integer(byte value)\n    {\n        return (BigInteger)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Integer(short value)\n    {\n        return (BigInteger)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Integer(ushort value)\n    {\n        return (BigInteger)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Integer(int value)\n    {\n        return (BigInteger)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Integer(uint value)\n    {\n        return (BigInteger)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Integer(long value)\n    {\n        return (BigInteger)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Integer(ulong value)\n    {\n        return (BigInteger)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator Integer(BigInteger value)\n    {\n        return new Integer(value);\n    }\n\n    public override string ToString()\n    {\n        return value.ToString();\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/InteropInterface.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// InteropInterface.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents an interface used to interoperate with the outside of the the VM.\n/// </summary>\n[DebuggerDisplay(\"Type={GetType().Name}, Value={_object}\")]\npublic class InteropInterface : StackItem\n{\n    private readonly object _object;\n\n    public override StackItemType Type => StackItemType.InteropInterface;\n\n    /// <summary>\n    /// Create an interoperability interface that wraps the specified <see cref=\"object\"/>.\n    /// </summary>\n    /// <param name=\"value\">The wrapped <see cref=\"object\"/>.</param>\n    public InteropInterface(object value)\n    {\n        _object = value ?? throw new ArgumentNullException(nameof(value));\n    }\n\n    public override bool Equals(StackItem? other)\n    {\n        if (ReferenceEquals(this, other)) return true;\n        if (other is InteropInterface i) return _object.Equals(i._object);\n        return false;\n    }\n\n    public override bool GetBoolean()\n    {\n        return true;\n    }\n\n    public override int GetHashCode()\n    {\n        return HashCode.Combine(_object);\n    }\n\n    public override T GetInterface<T>()\n    {\n        if (_object is T t) return t;\n        throw new InvalidCastException($\"This {nameof(InteropInterface)} can't be casted to type {typeof(T)}.\");\n    }\n\n    public override string ToString()\n    {\n        return _object.ToString() ?? \"NULL\";\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/Map.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Map.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents an ordered collection of key-value pairs in the VM.\n/// </summary>\npublic class Map : CompoundType, IReadOnlyDictionary<PrimitiveType, StackItem>\n{\n    /// <summary>\n    /// Indicates the maximum size of keys in bytes.\n    /// </summary>\n    public const int MaxKeySize = 64;\n\n#if NET5_0_OR_GREATER\n    private readonly OrderedDictionary<PrimitiveType, StackItem> dictionary = new();\n#else\n    private readonly Collections.OrderedDictionary<PrimitiveType, StackItem> dictionary = new();\n#endif\n\n    /// <summary>\n    /// Gets or sets the element that has the specified key in the map.\n    /// </summary>\n    /// <param name=\"key\">The key to locate.</param>\n    /// <returns>The element that has the specified key in the map.</returns>\n    public StackItem this[PrimitiveType key]\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get\n        {\n            if (key.Size > MaxKeySize)\n                throw new ArgumentException($\"Key size {key.Size} bytes exceeds maximum allowed size of {MaxKeySize} bytes.\", nameof(key));\n            return dictionary[key];\n        }\n        set\n        {\n            if (key.Size > MaxKeySize)\n                throw new ArgumentException($\"Key size {key.Size} bytes exceeds maximum allowed size of {MaxKeySize} bytes.\", nameof(key));\n            if (IsReadOnly) throw new InvalidOperationException(\"The map is readonly, can not set value.\");\n            if (ReferenceCounter != null)\n            {\n                if (dictionary.TryGetValue(key, out StackItem? old_value))\n                    ReferenceCounter.RemoveReference(old_value, this);\n                else\n                    ReferenceCounter.AddReference(key, this);\n                if (value is CompoundType { ReferenceCounter: null })\n                {\n                    throw new InvalidOperationException(\"Can not set a Map without a ReferenceCounter.\");\n                }\n                ReferenceCounter.AddReference(value, this);\n            }\n            dictionary[key] = value;\n        }\n    }\n\n    public override int Count => dictionary.Count;\n\n    /// <summary>\n    /// Gets an enumerable collection that contains the keys in the map.\n    /// </summary>\n    public IEnumerable<PrimitiveType> Keys => dictionary.Keys;\n\n    public override IEnumerable<StackItem> SubItems => Keys.Concat(Values);\n\n    public override int SubItemsCount => dictionary.Count * 2;\n\n    public override StackItemType Type => StackItemType.Map;\n\n    /// <summary>\n    /// Gets an enumerable collection that contains the values in the map.\n    /// </summary>\n    public IEnumerable<StackItem> Values => dictionary.Values;\n\n    /// <summary>\n    /// Create a new map with the specified reference counter.\n    /// </summary>\n    /// <param name=\"referenceCounter\">The reference counter to be used.</param>\n    public Map(IReferenceCounter? referenceCounter = null)\n        : base(referenceCounter)\n    {\n    }\n\n    /// <summary>\n    /// Create a new map with the specified dictionary and reference counter.\n    /// </summary>\n    /// <param name=\"dictionary\">Dictionary</param>\n    /// <param name=\"referenceCounter\">Reference Counter</param>\n    public Map(IEnumerable<KeyValuePair<PrimitiveType, StackItem>> dictionary, IReferenceCounter? referenceCounter = null)\n        : this(referenceCounter)\n    {\n        foreach (var (k, v) in dictionary)\n        {\n            this[k] = v;\n        }\n    }\n\n    public override void Clear()\n    {\n        if (IsReadOnly) throw new InvalidOperationException(\"The map is readonly, can not clear.\");\n        if (ReferenceCounter != null)\n            foreach (var pair in dictionary)\n            {\n                ReferenceCounter.RemoveReference(pair.Key, this);\n                ReferenceCounter.RemoveReference(pair.Value, this);\n            }\n        dictionary.Clear();\n    }\n\n    /// <summary>\n    /// Determines whether the map contains an element that has the specified key.\n    /// </summary>\n    /// <param name=\"key\">The key to locate.</param>\n    /// <returns>\n    /// <see langword=\"true\" /> if the map contains an element that has the specified key;\n    /// otherwise, <see langword=\"false\" />.\n    /// </returns>\n    public bool ContainsKey(PrimitiveType key)\n    {\n        if (key.Size > MaxKeySize)\n            throw new ArgumentException($\"Key size {key.Size} bytes exceeds maximum allowed size of {MaxKeySize} bytes.\", nameof(key));\n        return dictionary.ContainsKey(key);\n    }\n\n    internal override StackItem DeepCopy(Dictionary<StackItem, StackItem> refMap, bool asImmutable)\n    {\n        if (refMap.TryGetValue(this, out StackItem? mappedItem)) return mappedItem;\n        Map result = new(ReferenceCounter);\n        refMap.Add(this, result);\n        foreach (var (k, v) in dictionary)\n            result[k] = v.DeepCopy(refMap, asImmutable);\n        result.IsReadOnly = IsReadOnly || asImmutable;\n        return result;\n    }\n\n    IEnumerator<KeyValuePair<PrimitiveType, StackItem>> IEnumerable<KeyValuePair<PrimitiveType, StackItem>>.GetEnumerator()\n    {\n        return ((IDictionary<PrimitiveType, StackItem>)dictionary).GetEnumerator();\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return ((IDictionary<PrimitiveType, StackItem>)dictionary).GetEnumerator();\n    }\n\n    /// <summary>\n    /// Removes the element with the specified key from the map.\n    /// </summary>\n    /// <param name=\"key\">The key of the element to remove.</param>\n    /// <returns>\n    /// <see cref=\"StackItem\"/> if the element is successfully removed;\n    /// otherwise, <see langword=\"null\"/>.\n    /// </returns>\n    public StackItem? Remove(PrimitiveType key)\n    {\n        if (key.Size > MaxKeySize)\n            throw new ArgumentException($\"Can not remove key from map, MaxKeySize of {nameof(Map)} is exceeded: {key.Size}/{MaxKeySize}.\", nameof(key));\n        if (IsReadOnly) throw new InvalidOperationException(\"The map is readonly, can not remove key.\");\n        if (!dictionary.Remove(key, out StackItem? oldValue))\n            return null;\n        ReferenceCounter?.RemoveReference(key, this);\n        ReferenceCounter?.RemoveReference(oldValue, this);\n        return oldValue;\n    }\n\n    /// <summary>\n    /// Gets the value that is associated with the specified key.\n    /// </summary>\n    /// <param name=\"key\">The key to locate.</param>\n    /// <param name=\"value\">\n    /// When this method returns, the value associated with the specified key, if the key is found;\n    /// otherwise, <see langword=\"null\"/>.\n    /// </param>\n    /// <returns>\n    /// <see langword=\"true\" /> if the map contains an element that has the specified key;\n    /// otherwise, <see langword=\"false\"/>.\n    /// </returns>\n#if NET5_0_OR_GREATER\n    public bool TryGetValue(PrimitiveType key, [MaybeNullWhen(false)] out StackItem value)\n#else\n    public bool TryGetValue(PrimitiveType key, out StackItem value)\n#endif\n    {\n        if (key.Size > MaxKeySize)\n            throw new ArgumentException($\"Key size {key.Size} bytes exceeds maximum allowed size of {MaxKeySize} bytes.\", nameof(key));\n        return dictionary.TryGetValue(key, out value);\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/Null.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Null.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents <see langword=\"null\"/> in the VM.\n/// </summary>\npublic class Null : StackItem\n{\n    public override StackItemType Type => StackItemType.Any;\n\n    internal Null() { }\n\n    public override StackItem ConvertTo(StackItemType type)\n    {\n#if NET5_0_OR_GREATER\n        if (type == StackItemType.Any || !Enum.IsDefined(type))\n#else\n        if (type == StackItemType.Any || !Enum.IsDefined(typeof(StackItemType), type))\n#endif\n            throw new InvalidCastException($\"Type {nameof(Null)} can't be converted to StackItemType: {type}\");\n        return this;\n    }\n\n    public override bool Equals(StackItem? other)\n    {\n        if (ReferenceEquals(this, other)) return true;\n        return other is Null;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public override bool GetBoolean()\n    {\n        return false;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public override int GetHashCode()\n    {\n        return 0;\n    }\n\n    [return: MaybeNull]\n    public override T GetInterface<T>()\n    {\n        return default;\n    }\n\n    public override string? GetString()\n    {\n        return null;\n    }\n\n    public override string ToString()\n    {\n        return \"NULL\";\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/Pointer.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Pointer.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents the instruction pointer in the VM, used as the target of jump instructions.\n/// </summary>\n[DebuggerDisplay(\"Type={GetType().Name}, Position={Position}\")]\npublic class Pointer : StackItem\n{\n    /// <summary>\n    /// The <see cref=\"VM.Script\"/> object containing this pointer.\n    /// </summary>\n    public Script Script { get; }\n\n    /// <summary>\n    /// The position of the pointer in the script.\n    /// </summary>\n    public int Position { get; }\n\n    public override StackItemType Type => StackItemType.Pointer;\n\n    /// <summary>\n    /// Create a code pointer with the specified script and position.\n    /// </summary>\n    /// <param name=\"script\">The <see cref=\"VM.Script\"/> object containing this pointer.</param>\n    /// <param name=\"position\">The position of the pointer in the script.</param>\n    public Pointer(Script script, int position)\n    {\n        Script = script;\n        Position = position;\n    }\n\n    public override bool Equals(StackItem? other)\n    {\n        if (other == this) return true;\n        if (other is Pointer p) return Position == p.Position && Script == p.Script;\n        return false;\n    }\n\n    public override bool GetBoolean()\n    {\n        return true;\n    }\n\n    public override int GetHashCode()\n    {\n        return HashCode.Combine(Script.GetHashCode(), Position);\n    }\n\n    public override string ToString()\n    {\n        return Position.ToString();\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/PrimitiveType.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// PrimitiveType.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// The base class for primitive types in the VM.\n/// </summary>\npublic abstract class PrimitiveType : StackItem\n{\n    public abstract ReadOnlyMemory<byte> Memory { get; }\n\n    /// <summary>\n    /// The size of the VM object in bytes.\n    /// </summary>\n    public virtual int Size => Memory.Length;\n\n    public override StackItem ConvertTo(StackItemType type)\n    {\n        if (type == Type) return this;\n        return type switch\n        {\n            StackItemType.Integer => GetInteger(),\n            StackItemType.ByteString => Memory,\n            StackItemType.Buffer => new Buffer(GetSpan()),\n            _ => base.ConvertTo(type)\n        };\n    }\n\n    internal sealed override StackItem DeepCopy(Dictionary<StackItem, StackItem> refMap, bool asImmutable)\n    {\n        return this;\n    }\n\n    public abstract override bool Equals(StackItem? other);\n\n    public sealed override ReadOnlySpan<byte> GetSpan()\n    {\n        return Memory.Span;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(sbyte value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(byte value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(short value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(ushort value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(int value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(uint value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(long value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(ulong value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(BigInteger value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(bool value)\n    {\n        return (Boolean)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(byte[] value)\n    {\n        return (ByteString)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(ReadOnlyMemory<byte> value)\n    {\n        return (ByteString)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator PrimitiveType(string value)\n    {\n        return (ByteString)value;\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/StackItem.Vertex.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// StackItem.Vertex.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Neo.VM.Types;\n\npartial class StackItem\n{\n    /// <summary>\n    /// Represents an entry for an object reference.\n    ///\n    /// This class is used to keep track of references from compound types to other <see cref=\"CompoundType\"/> or <see cref=\"Buffer\"/>.\n    /// It contains the referenced item and the number of references to it.\n    ///\n    /// Use this class to manage references from compound types to their child items.\n    /// <remarks>\n    /// This is used to track references numbers from the same parent to the same child.\n    /// This is used for the purpose of determining strongly connect components.\n    /// </remarks>\n    /// </summary>\n    internal class ObjectReferenceEntry\n    {\n        /// <summary>\n        /// The referenced StackItem.\n        /// </summary>\n        public StackItem Item;\n\n        /// <summary>\n        /// The number of references to the StackItem.\n        /// </summary>\n        public int References;\n\n        /// <summary>\n        /// Initializes a new instance of the ObjectReferenceEntry class with the specified StackItem.\n        /// </summary>\n        /// <param name=\"item\">The referenced StackItem.</param>\n        public ObjectReferenceEntry(StackItem item) => Item = item;\n    }\n\n    /// <summary>\n    /// The number of references to this StackItem from the evaluation stack.\n    ///\n    /// This field tracks how many times this item is referenced by the evaluation stack.\n    /// It is incremented when the item is pushed onto the stack and decremented when it is popped off.\n    ///\n    /// Use this field to manage stack references and determine when an item is no longer needed.\n    /// </summary>\n    internal int StackReferences = 0;\n\n    /// <summary>\n    /// Indicates whether this <see cref=\"StackItem\"/> is referenced from any VM stack roots.\n    /// </summary>\n    internal bool IsStackReferenced => StackReferences != 0;\n\n    /// <summary>\n    /// A dictionary mapping compound types to their object reference entries.\n    ///\n    /// This dictionary is used to track references from compound types to their child items.\n    /// It allows efficient lookup and management of references.\n    ///\n    /// Use this dictionary to manage references from compound types to their children.\n    /// <remarks>Only <see cref=\"CompoundType\"/> and <see cref=\"Buffer\"/> will be assigned an <see cref=\"ObjectReferences\"/>,\n    /// other types will be null.</remarks>\n    /// </summary>\n    internal Dictionary<CompoundType, ObjectReferenceEntry>? ObjectReferences;\n\n    /// <summary>\n    /// Depth-First Number for Tarjan's algorithm.\n    /// </summary>\n    internal int DFN = -1;\n\n    /// <summary>\n    /// Low-link value for Tarjan's algorithm.\n    /// </summary>\n    internal int LowLink = 0;\n\n    /// <summary>\n    /// Stack Item hashcode\n    /// </summary>\n    protected int _hashCode = 0;\n\n    /// <summary>\n    /// Indicates whether the item is currently on the stack for Tarjan's algorithm.\n    ///\n    /// <remarks>\n    /// This should only be used for Tarjan algorithm, it can not be used to indicate\n    /// whether an item is on the stack or not since it can still be false if a value is\n    /// on the stack but the algorithm is not yet running.\n    /// </remarks>\n    /// </summary>\n    internal bool OnStack = false;\n\n    /// <summary>\n    /// Returns the successors of the current item based on object references.\n    ///\n    /// This property provides an enumerable of StackItems that are referenced by this item.\n    /// It is used by Tarjan's algorithm to find strongly connected components.\n    ///\n    /// Use this property when you need to iterate over the successors of a StackItem.\n    /// </summary>\n    internal IEnumerable<StackItem> Successors => ObjectReferences?.Values.Where(p => p.References > 0).Select(p => p.Item) ?? System.Array.Empty<StackItem>();\n\n    /// <summary>\n    /// Resets the strongly connected components-related fields.\n    ///\n    /// This method resets the DFN, LowLink, and OnStack fields to their default values.\n    /// It is used before running Tarjan's algorithm to ensure a clean state.\n    ///\n    /// Use this method to reset the state of a StackItem for strongly connected components analysis.\n    /// </summary>\n    internal void Reset() => (DFN, LowLink, OnStack) = (-1, 0, false);\n\n    /// <summary>\n    /// Generates a hash code based on the item's span.\n    ///\n    /// This method provides a hash code for the StackItem based on its byte span.\n    /// It is used for efficient storage and retrieval in hash-based collections.\n    ///\n    /// Use this method when you need a hash code for a StackItem.\n    /// </summary>\n    /// <returns>The hash code for the StackItem.</returns>\n    public override int GetHashCode()\n    {\n        if (_hashCode == 0)\n        {\n            _hashCode = HashCode.Combine(Type, GetSpan().XxHash3_32());\n        }\n        return _hashCode;\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/StackItem.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// StackItem.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// The base class for all types in the VM.\n/// </summary>\npublic abstract partial class StackItem : IEquatable<StackItem>\n{\n    [ThreadStatic]\n    private static Boolean? tls_true;\n\n    /// <summary>\n    /// Represents <see langword=\"true\"/> in the VM.\n    /// </summary>\n    public static Boolean True\n    {\n        get\n        {\n            tls_true ??= new(true);\n            return tls_true;\n        }\n    }\n\n    [ThreadStatic]\n    private static Boolean? tls_false;\n\n    /// <summary>\n    /// Represents <see langword=\"false\"/> in the VM.\n    /// </summary>\n    public static Boolean False\n    {\n        get\n        {\n            tls_false ??= new(false);\n            return tls_false;\n        }\n    }\n\n    [ThreadStatic]\n    private static Null? tls_null;\n\n    /// <summary>\n    /// Represents <see langword=\"null\"/> in the VM.\n    /// </summary>\n    public static StackItem Null\n    {\n        get\n        {\n            tls_null ??= new();\n            return tls_null;\n        }\n    }\n\n    /// <summary>\n    /// Indicates whether the object is <see cref=\"Null\"/>.\n    /// </summary>\n    public bool IsNull => this is Null;\n\n    /// <summary>\n    /// The type of this VM object.\n    /// </summary>\n    public abstract StackItemType Type { get; }\n\n    /// <summary>\n    /// Convert the VM object to the specified type.\n    /// </summary>\n    /// <param name=\"type\">The type to be converted to.</param>\n    /// <returns>The converted object.</returns>\n    public virtual StackItem ConvertTo(StackItemType type)\n    {\n        if (type == Type) return this;\n        if (type == StackItemType.Boolean) return GetBoolean();\n        throw new InvalidCastException();\n    }\n\n    internal virtual void Cleanup()\n    {\n    }\n\n    /// <summary>\n    /// Copy the object and all its children.\n    /// </summary>\n    /// <returns>The copied object.</returns>\n    public StackItem DeepCopy(bool asImmutable = false)\n    {\n        return DeepCopy(new(ReferenceEqualityComparer.Instance), asImmutable);\n    }\n\n    internal virtual StackItem DeepCopy(Dictionary<StackItem, StackItem> refMap, bool asImmutable)\n    {\n        return this;\n    }\n\n    public sealed override bool Equals(object? obj)\n    {\n        if (ReferenceEquals(this, obj)) return true;\n        if (obj is StackItem item) return Equals(item);\n        return false;\n    }\n\n    public virtual bool Equals(StackItem? other)\n    {\n        return ReferenceEquals(this, other);\n    }\n\n    internal virtual bool Equals(StackItem? other, ExecutionEngineLimits limits)\n    {\n        return Equals(other);\n    }\n\n    /// <summary>\n    /// Wrap the specified <see cref=\"object\"/> and return an <see cref=\"InteropInterface\"/> containing the <see cref=\"object\"/>.\n    /// </summary>\n    /// <param name=\"value\">The wrapped <see cref=\"object\"/>.</param>\n    /// <returns></returns>\n    public static StackItem FromInterface(object? value)\n    {\n        if (value is null) return Null;\n        return new InteropInterface(value);\n    }\n\n    /// <summary>\n    /// Get the boolean value represented by the VM object.\n    /// </summary>\n    /// <returns>The boolean value represented by the VM object.</returns>\n    public abstract bool GetBoolean();\n\n    /// <summary>\n    /// Get the integer value represented by the VM object.\n    /// </summary>\n    /// <returns>The integer value represented by the VM object.</returns>\n    public virtual BigInteger GetInteger()\n    {\n        throw new InvalidCastException();\n    }\n\n    /// <summary>\n    /// Get the <see cref=\"object\"/> wrapped by this interface and convert it to the specified type.\n    /// </summary>\n    /// <typeparam name=\"T\">The type to convert to.</typeparam>\n    /// <returns>The wrapped <see cref=\"object\"/>.</returns>\n    [return: MaybeNull]\n    public virtual T GetInterface<T>() where T : notnull\n    {\n        throw new InvalidCastException();\n    }\n\n    /// <summary>\n    /// Get the readonly span used to read the VM object data.\n    /// </summary>\n    /// <returns></returns>\n    public virtual ReadOnlySpan<byte> GetSpan()\n    {\n        throw new InvalidCastException();\n    }\n\n    /// <summary>\n    /// Get the <see cref=\"string\"/> value represented by the VM object.\n    /// </summary>\n    /// <returns>The <see cref=\"string\"/> value represented by the VM object.</returns>\n    public virtual string? GetString()\n    {\n        return GetSpan().ToStrictUtf8String();\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(sbyte value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(byte value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(short value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(ushort value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(int value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(uint value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(long value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(ulong value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(BigInteger value)\n    {\n        return (Integer)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(bool value)\n    {\n        return value ? True : False;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(byte[] value)\n    {\n        return (ByteString)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(ReadOnlyMemory<byte> value)\n    {\n        return (ByteString)value;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static implicit operator StackItem(string value)\n    {\n        return (ByteString)value;\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/StackItemType.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// StackItemType.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// An enumeration representing the types in the VM.\n/// </summary>\npublic enum StackItemType : byte\n{\n    /// <summary>\n    /// Represents any type.\n    /// </summary>\n    Any = 0x00,\n\n    /// <summary>\n    /// Represents a code pointer.\n    /// </summary>\n    Pointer = 0x10,\n\n    /// <summary>\n    /// Represents the boolean (<see langword=\"true\" /> or <see langword=\"false\" />) type.\n    /// </summary>\n    Boolean = 0x20,\n\n    /// <summary>\n    /// Represents an integer.\n    /// </summary>\n    Integer = 0x21,\n\n    /// <summary>\n    /// Represents an immutable memory block.\n    /// </summary>\n    ByteString = 0x28,\n\n    /// <summary>\n    /// Represents a memory block that can be used for reading and writing.\n    /// </summary>\n    Buffer = 0x30,\n\n    /// <summary>\n    /// Represents an array or a complex object.\n    /// </summary>\n    Array = 0x40,\n\n    /// <summary>\n    /// Represents a structure.\n    /// </summary>\n    Struct = 0x41,\n\n    /// <summary>\n    /// Represents an ordered collection of key-value pairs.\n    /// </summary>\n    Map = 0x48,\n\n    /// <summary>\n    /// Represents an interface used to interoperate with the outside of the the VM.\n    /// </summary>\n    InteropInterface = 0x60,\n}\n"
  },
  {
    "path": "src/Neo.VM/Types/Struct.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Struct.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Neo.VM.Types;\n\n/// <summary>\n/// Represents a structure in the VM.\n/// </summary>\npublic class Struct : Array\n{\n    public override StackItemType Type => StackItemType.Struct;\n\n    /// <summary>\n    /// Create a structure with the specified fields.\n    /// </summary>\n    /// <param name=\"fields\">The fields to be included in the structure.</param>\n    public Struct(IEnumerable<StackItem>? fields = null)\n        : this(null, fields)\n    {\n    }\n\n    /// <summary>\n    /// Create a structure with the specified fields. And make the structure use the specified <see cref=\"IReferenceCounter\"/>.\n    /// </summary>\n    /// <param name=\"referenceCounter\">The <see cref=\"IReferenceCounter\"/> to be used by this structure.</param>\n    /// <param name=\"fields\">The fields to be included in the structure.</param>\n    public Struct(IReferenceCounter? referenceCounter, IEnumerable<StackItem>? fields = null)\n        : base(referenceCounter, fields)\n    {\n    }\n\n    /// <summary>\n    /// Create a new structure with the same content as this structure. All nested structures will be copied by value.\n    /// </summary>\n    /// <param name=\"limits\">Execution engine limits</param>\n    /// <returns>The copied structure.</returns>\n    public Struct Clone(ExecutionEngineLimits limits)\n    {\n        int count = (int)(limits.MaxStackSize - 1);\n        Struct result = new(ReferenceCounter);\n        Queue<Struct> queue = new();\n        queue.Enqueue(result);\n        queue.Enqueue(this);\n        while (queue.Count > 0)\n        {\n            Struct a = queue.Dequeue();\n            Struct b = queue.Dequeue();\n            foreach (StackItem item in b)\n            {\n                count--;\n                if (count < 0) throw new InvalidOperationException(\"Beyond struct subitem clone limits!\");\n                if (item is Struct sb)\n                {\n                    Struct sa = new(ReferenceCounter);\n                    a.Add(sa);\n                    queue.Enqueue(sa);\n                    queue.Enqueue(sb);\n                }\n                else\n                {\n                    a.Add(item);\n                }\n            }\n        }\n        return result;\n    }\n\n    public override StackItem ConvertTo(StackItemType type)\n    {\n        if (type == StackItemType.Array)\n            return new Array(ReferenceCounter, new List<StackItem>(InnerList));\n        return base.ConvertTo(type);\n    }\n\n    public override bool Equals(StackItem? other)\n    {\n        throw new NotSupportedException();\n    }\n\n    internal override bool Equals(StackItem? other, ExecutionEngineLimits limits)\n    {\n        if (other is not Struct s) return false;\n        Stack<StackItem> stack1 = new();\n        Stack<StackItem> stack2 = new();\n        stack1.Push(this);\n        stack2.Push(s);\n        uint count = limits.MaxStackSize;\n        uint maxComparableSize = limits.MaxComparableSize;\n        while (stack1.Count > 0)\n        {\n            if (count-- == 0)\n                throw new InvalidOperationException(\"Too many struct items to compare in struct comparison.\");\n            StackItem a = stack1.Pop();\n            StackItem b = stack2.Pop();\n            if (a is ByteString byteString)\n            {\n                if (!byteString.Equals(b, ref maxComparableSize)) return false;\n            }\n            else\n            {\n                if (maxComparableSize == 0)\n                    throw new InvalidOperationException(\"The operand exceeds the maximum comparable size in struct comparison.\");\n                maxComparableSize -= 1;\n                if (a is Struct sa)\n                {\n                    if (ReferenceEquals(a, b)) continue;\n                    if (b is not Struct sb) return false;\n                    if (sa.Count != sb.Count) return false;\n                    foreach (StackItem item in sa)\n                        stack1.Push(item);\n                    foreach (StackItem item in sb)\n                        stack2.Push(item);\n                }\n                else\n                {\n                    if (!a.Equals(b)) return false;\n                }\n            }\n        }\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Unsafe.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Unsafe.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Runtime.CompilerServices;\n\nnamespace Neo.VM;\n\nunsafe static class Unsafe\n{\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool NotZero(ReadOnlySpan<byte> x)\n    {\n        int len = x.Length;\n        if (len == 0) return false;\n        fixed (byte* xp = x)\n        {\n            long* xlp = (long*)xp;\n            for (; len >= 8; len -= 8)\n            {\n                if (*xlp != 0) return true;\n                xlp++;\n            }\n            byte* xbp = (byte*)xlp;\n            for (; len > 0; len--)\n            {\n                if (*xbp != 0) return true;\n                xbp++;\n            }\n        }\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/Neo.VM/Utility.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// Utility.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.IO.Hashing;\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\nusing System.Text;\n\nnamespace Neo.VM;\n\nstatic class Utility\n{\n    public static Encoding StrictUTF8 { get; }\n\n    private const int DefaultXxHash3Seed = 40343;\n\n    static Utility()\n    {\n        StrictUTF8 = (Encoding)Encoding.UTF8.Clone();\n        StrictUTF8.DecoderFallback = DecoderFallback.ExceptionFallback;\n        StrictUTF8.EncoderFallback = EncoderFallback.ExceptionFallback;\n    }\n\n    /// <summary>\n    /// Converts a byte span to a strict UTF8 string.\n    /// </summary>\n    /// <param name=\"bytes\">The byte span to convert.</param>\n    /// <param name=\"value\">The converted string.</param>\n    /// <returns>True if the conversion is successful, otherwise false.</returns>\n    public static bool TryToStrictUtf8String(this ReadOnlySpan<byte> bytes, [NotNullWhen(true)] out string? value)\n    {\n        try\n        {\n            value = StrictUTF8.GetString(bytes);\n            return true;\n        }\n        catch\n        {\n            value = default;\n            return false;\n        }\n    }\n\n    /// <summary>\n    /// Converts a byte span to a strict UTF8 string.\n    /// </summary>\n    /// <param name=\"value\">The byte span to convert.</param>\n    /// <returns>The converted string.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static string ToStrictUtf8String(this ReadOnlySpan<byte> value) => StrictUTF8.GetString(value);\n\n    /// <summary>\n    /// Converts a string to a strict UTF8 byte array.\n    /// </summary>\n    /// <param name=\"value\">The string to convert.</param>\n    /// <returns>The converted byte array.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static byte[] ToStrictUtf8Bytes(this string value) => StrictUTF8.GetBytes(value);\n\n    /// <summary>\n    /// Computes the 32-bit hash value for the specified byte array using the xxhash3 algorithm.\n    /// </summary>\n    /// <param name=\"value\">The input to compute the hash code for.</param>\n    /// <param name=\"seed\">The seed used by the xxhash3 algorithm.</param>\n    /// <returns>The computed hash code.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static int XxHash3_32(this ReadOnlySpan<byte> value, long seed = DefaultXxHash3Seed)\n    {\n        return HashCode.Combine(XxHash3.HashToUInt64(value, seed));\n    }\n\n    public static BigInteger ModInverse(this BigInteger value, BigInteger modulus)\n    {\n#if NET5_0_OR_GREATER\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value);\n        ArgumentOutOfRangeException.ThrowIfLessThan(modulus, 2);\n#else\n        if (value <= 0) throw new ArgumentOutOfRangeException(nameof(value));\n        if (modulus < 2) throw new ArgumentOutOfRangeException(nameof(modulus));\n#endif\n        BigInteger r = value, old_r = modulus, s = 1, old_s = 0;\n        while (r > 0)\n        {\n            BigInteger q = old_r / r;\n            (old_r, r) = (r, old_r % r);\n            (old_s, s) = (s, old_s - q * s);\n        }\n        BigInteger result = old_s % modulus;\n        if (result < 0) result += modulus;\n        if (!(value * result % modulus).IsOne) throw new InvalidOperationException();\n        return result;\n    }\n\n    public static BigInteger Sqrt(this BigInteger value)\n    {\n        if (value < 0) throw new InvalidOperationException(\"value can not be negative\");\n        if (value.IsZero) return BigInteger.Zero;\n        if (value < 4) return BigInteger.One;\n\n        var z = value;\n        var x = BigInteger.One << (int)(((value - 1).GetBitLength() + 1) >> 1);\n        while (x < z)\n        {\n            z = x;\n            x = (value / x + x) / 2;\n        }\n\n        return z;\n    }\n\n#if !NET5_0_OR_GREATER\n    static int GetBitLength(this BigInteger i)\n    {\n        byte[] b = i.ToByteArray();\n        return (b.Length - 1) * 8 + BitLen(i.Sign > 0 ? b[^1] : 255 - b[^1]);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    static int BitLen(int w)\n    {\n        return (w < 1 << 15 ? (w < 1 << 7\n            ? (w < 1 << 3 ? (w < 1 << 1\n            ? (w < 1 << 0 ? (w < 0 ? 32 : 0) : 1)\n            : (w < 1 << 2 ? 2 : 3)) : (w < 1 << 5\n            ? (w < 1 << 4 ? 4 : 5)\n            : (w < 1 << 6 ? 6 : 7)))\n            : (w < 1 << 11\n            ? (w < 1 << 9 ? (w < 1 << 8 ? 8 : 9) : (w < 1 << 10 ? 10 : 11))\n            : (w < 1 << 13 ? (w < 1 << 12 ? 12 : 13) : (w < 1 << 14 ? 14 : 15)))) : (w < 1 << 23 ? (w < 1 << 19\n            ? (w < 1 << 17 ? (w < 1 << 16 ? 16 : 17) : (w < 1 << 18 ? 18 : 19))\n            : (w < 1 << 21 ? (w < 1 << 20 ? 20 : 21) : (w < 1 << 22 ? 22 : 23))) : (w < 1 << 27\n            ? (w < 1 << 25 ? (w < 1 << 24 ? 24 : 25) : (w < 1 << 26 ? 26 : 27))\n            : (w < 1 << 29 ? (w < 1 << 28 ? 28 : 29) : (w < 1 << 30 ? 30 : 31)))));\n    }\n#endif\n}\n"
  },
  {
    "path": "src/Neo.VM/VMState.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMState.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Indicates the status of the VM.\n/// </summary>\npublic enum VMState : byte\n{\n    /// <summary>\n    /// Indicates that the execution is in progress or has not yet begun.\n    /// </summary>\n    NONE = 0,\n\n    /// <summary>\n    /// Indicates that the execution has been completed successfully.\n    /// </summary>\n    HALT = 1 << 0,\n\n    /// <summary>\n    /// Indicates that the execution has ended, and an exception that cannot be caught is thrown.\n    /// </summary>\n    FAULT = 1 << 1,\n\n    /// <summary>\n    /// Indicates that a breakpoint is currently being hit.\n    /// </summary>\n    BREAK = 1 << 2,\n}\n"
  },
  {
    "path": "src/Neo.VM/VMUnhandledException.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMUnhandledException.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM.Types;\nusing System;\nusing System.Text;\nusing Array = Neo.VM.Types.Array;\n\nnamespace Neo.VM;\n\n/// <summary>\n/// Represents an unhandled exception in the VM.\n/// Thrown when there is an exception in the VM that is not caught by any script.\n/// </summary>\npublic class VMUnhandledException : Exception\n{\n    /// <summary>\n    /// The unhandled exception in the VM.\n    /// </summary>\n    public StackItem ExceptionObject { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"VMUnhandledException\"/> class.\n    /// </summary>\n    /// <param name=\"ex\">The unhandled exception in the VM.</param>\n    public VMUnhandledException(StackItem ex) : base(GetExceptionMessage(ex))\n    {\n        ExceptionObject = ex;\n    }\n\n    private static string GetExceptionMessage(StackItem e)\n    {\n        StringBuilder sb = new(\"An unhandled exception was thrown.\");\n        ByteString? s = e as ByteString;\n        if (s is null && e is Array array && array.Count > 0)\n            s = array[0] as ByteString;\n        if (s != null)\n        {\n            sb.Append(' ');\n            sb.Append(Encoding.UTF8.GetString(s.GetSpan()));\n        }\n        return sb.ToString();\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Converters/ScriptConverter.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// ScriptConverter.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.Test.Extensions;\nusing Neo.VM;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Linq;\n\nnamespace Neo.Test.Converters;\n\ninternal class ScriptConverter : JsonConverter\n{\n    public override bool CanConvert(Type objectType)\n    {\n        return objectType == typeof(byte[]) || objectType == typeof(string);\n    }\n\n    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n    {\n        switch (reader.TokenType)\n        {\n            case JsonToken.String:\n                {\n                    if (reader.Value is string str)\n                    {\n                        Assert.StartsWith(\"0x\", str, $\"'0x' prefix required for value: '{str}'\");\n                        return str.FromHexString();\n                    }\n                    break;\n                }\n            case JsonToken.Bytes:\n                {\n                    if (reader.Value is byte[] data) return data;\n                    break;\n                }\n            case JsonToken.StartArray:\n                {\n                    using var script = new ScriptBuilder();\n\n                    foreach (var entry in JArray.Load(reader))\n                    {\n                        var mul = 1;\n                        var value = entry.Value<string>();\n\n                        if (Enum.IsDefined(typeof(OpCode), value) && Enum.TryParse<OpCode>(value, out var opCode))\n                        {\n                            for (int x = 0; x < mul; x++)\n                            {\n                                script.Emit(opCode);\n                            }\n                        }\n                        else\n                        {\n                            for (int x = 0; x < mul; x++)\n                            {\n                                Assert.StartsWith(\"0x\", value, $\"'0x' prefix required for value: '{value}'\");\n                                script.EmitRaw(value.FromHexString());\n                            }\n                        }\n                    }\n\n                    return script.ToArray();\n                }\n        }\n\n        throw new FormatException();\n    }\n\n    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n    {\n        if (value is byte[] data)\n        {\n            int ip = 0;\n            var array = new JArray();\n\n            try\n            {\n                for (ip = 0; ip < data.Length;)\n                {\n                    var instruction = new Instruction(data, ip);\n\n                    array.Add(instruction.OpCode.ToString().ToUpperInvariant());\n\n                    // Operand Size\n\n                    if (instruction.Size - 1 - instruction.Operand.Length > 0)\n                    {\n                        array.Add(data.Skip(ip + 1).Take(instruction.Size - 1 - instruction.Operand.Length).ToArray().ToHexString());\n                    }\n\n                    if (!instruction.Operand.IsEmpty)\n                    {\n                        // Data\n\n                        array.Add(instruction.Operand.ToArray().ToHexString());\n                    }\n\n                    ip += instruction.Size;\n                }\n            }\n            catch\n            {\n                // Something was wrong, but maybe it's intentioned\n\n                if (Enum.IsDefined(typeof(OpCode), data[ip]))\n                {\n                    // Check if it was the content and not the opcode\n\n                    array.Add(((OpCode)data[ip]).ToString().ToUpperInvariant());\n                    array.Add(data[(ip + 1)..].ToHexString());\n                }\n                else\n                {\n                    array.Add(data[ip..].ToHexString());\n                }\n            }\n\n            // Write the script\n\n            writer.WriteStartArray();\n            foreach (var entry in array) writer.WriteValue(entry.Value<string>());\n            writer.WriteEndArray();\n\n            // Double check - Ensure that the format is exactly the same\n\n            using var script = new ScriptBuilder();\n\n            foreach (var entry in array)\n            {\n                if (Enum.TryParse<OpCode>(entry.Value<string>(), out var opCode))\n                {\n                    script.Emit(opCode);\n                }\n                else\n                {\n                    script.EmitRaw(entry.Value<string>().FromHexString());\n                }\n            }\n\n            if (script.ToArray().ToHexString() != data.ToHexString())\n            {\n                throw new FormatException();\n            }\n        }\n        else\n        {\n            throw new FormatException();\n        }\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Converters/UppercaseEnum.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UppercaseEnum.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Newtonsoft.Json;\nusing System;\n\nnamespace Neo.Test.Converters;\n\ninternal class UppercaseEnum : JsonConverter\n{\n    public override bool CanConvert(Type objectType)\n    {\n        return objectType.IsEnum;\n    }\n\n    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n    {\n        return Enum.Parse(objectType, reader.Value.ToString(), true);\n    }\n\n    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n    {\n        writer.WriteValue(value.ToString().ToUpperInvariant());\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Extensions/JsonExtensions.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// JsonExtensions.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Converters;\nusing Newtonsoft.Json.Serialization;\n\nnamespace Neo.Test.Extensions;\n\npublic static class JsonExtensions\n{\n    private static readonly JsonSerializerSettings _settings;\n\n    /// <summary>\n    /// Static constructor\n    /// </summary>\n    static JsonExtensions()\n    {\n        _settings = new JsonSerializerSettings\n        {\n            ContractResolver = new CamelCasePropertyNamesContractResolver(),\n            Formatting = Formatting.Indented,\n            NullValueHandling = NullValueHandling.Ignore,\n        };\n\n        _settings.Converters.Add(new StringEnumConverter(new CamelCaseNamingStrategy()));\n    }\n\n    /// <summary>\n    /// Deserialize json to object\n    /// </summary>\n    /// <typeparam name=\"T\">Type</typeparam>\n    /// <param name=\"input\">Json</param>\n    /// <returns>Unit test</returns>\n    public static T DeserializeJson<T>(this string input)\n    {\n        return JsonConvert.DeserializeObject<T>(input, _settings);\n    }\n\n    /// <summary>\n    /// Serialize UT to json\n    /// </summary>\n    /// <param name=\"ut\">Unit test</param>\n    /// <returns>Json</returns>\n    public static string ToJson(this object ut)\n    {\n        return JsonConvert.SerializeObject(ut, _settings);\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Extensions/StringExtensions.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// StringExtensions.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Globalization;\n\nnamespace Neo.Test.Extensions;\n\ninternal static class StringExtensions\n{\n    /// <summary>\n    /// Convert buffer to hex string\n    /// </summary>\n    /// <param name=\"data\">Data</param>\n    /// <returns>Return hex string</returns>\n    public static string ToHexString(this byte[] data)\n    {\n        if (data == null) return \"\";\n\n        var m = data.Length;\n        if (m == 0) return \"\";\n\n        var sb = new char[(m * 2) + 2];\n\n        sb[0] = '0';\n        sb[1] = 'x';\n\n        for (int x = 0, y = 2; x < m; x++, y += 2)\n        {\n            var hex = data[x].ToString(\"x2\");\n\n            sb[y] = hex[0];\n            sb[y + 1] = hex[1];\n        }\n\n        return new string(sb);\n    }\n\n    /// <summary>\n    /// Convert string in Hex format to byte array\n    /// </summary>\n    /// <param name=\"value\">Hexadecimal string</param>\n    /// <returns>Return byte array</returns>\n    public static byte[] FromHexString(this string value)\n    {\n        if (string.IsNullOrEmpty(value))\n            return Array.Empty<byte>();\n        if (value.StartsWith(\"0x\"))\n            value = value[2..];\n        if (value.Length % 2 == 1)\n            throw new FormatException();\n\n        var result = new byte[value.Length / 2];\n        for (var i = 0; i < result.Length; i++)\n            result[i] = byte.Parse(value.Substring(i * 2, 2), NumberStyles.AllowHexSpecifier);\n\n        return result;\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Helpers/RandomHelper.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// RandomHelper.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing System;\nusing System.Threading;\n\nnamespace Neo.Test.Helpers;\n\npublic class RandomHelper\n{\n    private const string _randchars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\n    private static readonly ThreadLocal<Random> _rand = new(() => new Random());\n\n    /// <summary>\n    /// Get random buffer\n    /// </summary>\n    /// <param name=\"length\">Length</param>\n    /// <returns>Buffer</returns>\n    public static byte[] RandBuffer(int length)\n    {\n        var buffer = new byte[length];\n        _rand.Value.NextBytes(buffer);\n        return buffer;\n    }\n\n    /// <summary>\n    /// Get random string\n    /// </summary>\n    /// <param name=\"length\">Length</param>\n    /// <returns>Buffer</returns>\n    public static string RandString(int length)\n    {\n        var stringChars = new char[length];\n\n        for (int i = 0; i < stringChars.Length; i++)\n        {\n            stringChars[i] = _randchars[_rand.Value.Next(_randchars.Length)];\n        }\n\n        return new string(stringChars);\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Neo.VM.Tests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <RootNamespace>Neo.Test</RootNamespace>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <IsPackable>false</IsPackable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"MSTest\" Version=\"4.0.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Neo.VM\\Neo.VM.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"Tests\\**\\*.json\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Properties/AssemblyInfo.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// AssemblyInfo.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\n[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)]\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/GE.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"GE same types\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"GE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"GE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"GE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0,0]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH0\",\n        \"GE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,0]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"GE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0,1]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"GE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [null,1]\",\n      \"script\": [\n        \"PUSHNULL\",\n        \"PUSH1\",\n        \"GE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,null]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSHNULL\",\n        \"GE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"null\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"FAULT test [1,array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY0\",\n        \"GE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ]\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/GT.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"GT same types\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"GT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"GT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"GT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0,0]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH0\",\n        \"GT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,0]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"GT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0,1]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"GT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [null,1]\",\n      \"script\": [\n        \"PUSHNULL\",\n        \"PUSH1\",\n        \"GT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,null]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSHNULL\",\n        \"GT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"null\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"FAULT test [1,array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY0\",\n        \"GT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"GT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ]\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/LE.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"LE same types\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"LE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"LE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"LE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0,0]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH0\",\n        \"LE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,0]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"LE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0,1]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"LE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [null,1]\",\n      \"script\": [\n        \"PUSHNULL\",\n        \"PUSH1\",\n        \"LE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,null]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSHNULL\",\n        \"LE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"null\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"FAULT test [1,array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY0\",\n        \"LE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ]\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/LT.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"LT same types\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"LT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"LT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"LT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0,0]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH0\",\n        \"LT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,0]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"LT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0,1]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"LT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [null,1]\",\n      \"script\": [\n        \"PUSHNULL\",\n        \"PUSH1\",\n        \"LT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,null]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSHNULL\",\n        \"LT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"null\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"FAULT test [1,array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY0\",\n        \"LT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ]\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/MODMUL.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"MODMUL\",\n  \"tests\": [\n    {\n      \"name\": \"Exception - Without items\",\n      \"script\": [\n        \"MODMUL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"MODMUL\",\n                \"evaluationStack\": []\n              }\n            ]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test (8 * 2 % 3)\",\n      \"script\": [\n        \"PUSH8\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"MODMUL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"MODMUL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 8\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test (16 * 2 % 4)\",\n      \"script\": [\n        \"PUSH16\",\n        \"PUSH2\",\n        \"PUSH4\",\n        \"MODMUL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"MODMUL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 16\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test (-3 * 4 % 5)\",\n      \"script\": [\n        \"PUSH3\",\n        \"NEGATE\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"MODMUL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"MODMUL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -2\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test (3 * 4 % -5)\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"NEGATE\",\n        \"MODMUL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"MODMUL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 2\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test (-3 * 4 % -5)\",\n      \"script\": [\n        \"PUSH3\",\n        \"NEGATE\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"NEGATE\",\n        \"MODMUL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"MODMUL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -2\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test (3 * -4 % -5)\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH4\",\n        \"NEGATE\",\n        \"PUSH5\",\n        \"NEGATE\",\n        \"MODMUL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"MODMUL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -4\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -2\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/MODPOW.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"MODPOW\",\n  \"tests\": [\n    {\n      \"name\": \"Exception - Without items\",\n      \"script\": [\n        \"MODPOW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"MODPOW\",\n                \"evaluationStack\": []\n              }\n            ]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test (19 ModInverse 141 = 52)\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x13\",\n        \"PUSHM1\",\n        \"PUSHINT16\",\n        \"0x8d00\",\n        \"MODPOW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"MODPOW\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 141\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 19\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 52\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test (ModPow 19, 2, 141 = 79)\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x13\",\n        \"PUSH2\",\n        \"PUSHINT16\",\n        \"0x8d00\",\n        \"MODPOW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"MODPOW\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 141\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 19\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 79\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"(3 ^ 4) % 5 == 1\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"MODPOW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"MODPOW\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"(-1 ^ 3) % 3 == -1\",\n      \"script\": [\n        \"PUSHM1\",\n        \"PUSH3\",\n        \"PUSH3\",\n        \"MODPOW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"MODPOW\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"(-1 ^ 3) % -3 == -1\",\n      \"script\": [\n        \"PUSHM1\",\n        \"PUSH3\",\n        \"PUSH3\",\n        \"NEGATE\",\n        \"MODPOW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"MODPOW\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -3\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"(-3 ^ 5) % -5 == -3\",\n      \"script\": [\n        \"PUSH3\",\n        \"NEGATE\",\n        \"PUSH5\",\n        \"PUSH5\",\n        \"NEGATE\",\n        \"MODPOW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"MODPOW\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -3\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"(3 ^ 4) % -5 == 1\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"NEGATE\",\n        \"MODPOW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"MODPOW\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"(5 ^ -1) % 4 == 1\",\n      \"script\": [\n        \"PUSH5\",\n        \"PUSHM1\",\n        \"PUSH4\",\n        \"MODPOW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"MODPOW\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/NOT.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"NOT\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With bool\",\n      \"script\": [\n        \"PUSH1\",\n        \"NOT\",\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With integer 0x03\",\n      \"script\": [\n        \"PUSH3\",\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With map\",\n      \"script\": [\n        \"NEWMAP\",\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With array\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With struct\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With byte array 0x0000\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0000\",\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With byte array 0x0001\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0001\",\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0001\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With interop\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/NUMEQUAL.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"NUMEQUAL same types\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Bool,Bool]=true\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Bool,Bool]=false\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"NOT\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer,Integer]=true\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer,Integer]=false\",\n      \"script\": [\n        \"PUSH2\",\n        \"PUSH1\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=Fault\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=fault\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=fault with clone\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=fault without clone\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=fault\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=Fault\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=Fault\",\n      \"script\": [\n        \"NEWMAP\",\n        \"NEWMAP\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=true\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=false same length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000124\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=false different length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=false different length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with clone [Interop,Interop]=fault\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"DUP\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Interop,Interop]=fault\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"NUMEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"NUMEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/NUMNOTEQUAL.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"NUMNOTEQUAL same types\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Bool,Bool]=false\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Bool,Bool]=true\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"NOT\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer,Integer]=false\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer,Integer]=true\",\n      \"script\": [\n        \"PUSH2\",\n        \"PUSH1\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=Fault\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=fault\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=fault with clone\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=fault without clone\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=fault\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=Fault\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=Fault\",\n      \"script\": [\n        \"NEWMAP\",\n        \"NEWMAP\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=false\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=true same length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000124\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=true different length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=true different length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with clone [Interop,Interop]=fault\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"DUP\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Interop,Interop]=fault\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"NUMNOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"NUMNOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/POW.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"POW\",\n  \"tests\": [\n    {\n      \"name\": \"Exception - Without items\",\n      \"script\": [\n        \"POW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"POW\",\n                \"evaluationStack\": []\n              }\n            ]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Exception - With only one item\",\n      \"script\": [\n        \"PUSH1\",\n        \"POW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"POW\",\n                \"evaluationStack\": []\n              }\n            ]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 1\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"POW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 1\",\n      \"script\": [\n        \"PUSH9\",\n        \"PUSH2\",\n        \"POW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 81\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 81\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 1\",\n      \"script\": [\n        \"PUSH2\",\n        \"PUSH9\",\n        \"POW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 512\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 512\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/SHL.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"SHL\",\n  \"tests\": [\n    {\n      \"name\": \"Exception - Above the limit 0 << 257\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0101\",\n        \"SHL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SHL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0101\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Exception - Below the limit 0 << -257\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0xfffe\",\n        \"SHL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SHL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0xFFFE\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Exception - Operand can't be converted to Integer\",\n      \"script\": [\n        \"NEWARRAY0\",\n        \"PUSH0\",\n        \"SHL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SHL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"Array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 0 << 256\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0001\",\n        \"SHL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SHL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0001\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 16 << 4\",\n      \"script\": [\n        \"PUSH16\",\n        \"PUSH4\",\n        \"SHL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SHL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 16\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 256\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 16 << 0\",\n      \"script\": [\n        \"PUSH16\",\n        \"PUSH0\",\n        \"SHL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SHL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 16\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 16\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/SHR.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"SHR\",\n  \"tests\": [\n    {\n      \"name\": \"Exception - Above the limit 0 >> 257\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0101\",\n        \"SHR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SHR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0101\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Exception - Below the limit 0 >> -257\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0xfffe\",\n        \"SHR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SHR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0xFFFE\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Exception - Operand can't be converted to Integer\",\n      \"script\": [\n        \"NEWARRAY0\",\n        \"PUSH0\",\n        \"SHR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SHR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"Array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 0 >> 256\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0001\",\n        \"SHR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SHR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0001\"\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 256 >> 0\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0001\",\n        \"PUSH0\",\n        \"SHR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SHR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0001\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 256\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 4 >> 16\",\n      \"script\": [\n        \"PUSH4\",\n        \"PUSH16\",\n        \"SHR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SHR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 16\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/SIGN.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"SIGN\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With bool\",\n      \"script\": [\n        \"PUSH1\",\n        \"NOT\",\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SIGN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With integer 0x03\",\n      \"script\": [\n        \"PUSH3\",\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"SIGN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With integer -1\",\n      \"script\": [\n        \"PUSHM1\",\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"SIGN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": -1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With map\",\n      \"script\": [\n        \"NEWMAP\",\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"SIGN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With array\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SIGN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With struct\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SIGN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With byte array 0x0000\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0000\",\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"SIGN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With byte array 0x0001\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0001\",\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"SIGN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0001\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With interop\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"SIGN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SIGN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arithmetic/SQRT.json",
    "content": "{\n  \"category\": \"Numeric\",\n  \"name\": \"SQRT\",\n  \"tests\": [\n    {\n      \"name\": \"Exception - Without items\",\n      \"script\": [\n        \"SQRT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"SQRT\",\n                \"evaluationStack\": []\n              }\n            ]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test 1\",\n      \"script\": [\n        \"PUSH1\",\n        \"SQRT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 81\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x51\",\n        \"SQRT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 9\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 9\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 15625\",\n      \"script\": [\n        \"PUSHINT16\",\n        \"0x093d\",\n        \"SQRT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 125\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 125\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 4\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x04\",\n        \"SQRT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 2\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 2\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x02\",\n        \"SQRT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"invocationStack\": [],\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/APPEND.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"APPEND\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"PUSH1\",\n        \"APPEND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without array\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"APPEND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Clone test [Array]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"PUSH5\",\n        \"APPEND\",\n        \"STSFLD0\",\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"LDSFLD0\",\n        \"APPEND\",\n        \"LDSFLD0\",\n        \"PUSH6\",\n        \"APPEND\",\n        \"LDSFLD0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"PUSH0\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"LDSFLD0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Array\",\n                        \"value\": [\n                          {\n                            \"type\": \"Integer\",\n                            \"value\": \"5\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": \"5\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 17,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": \"5\"\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": \"6\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Array\",\n                        \"value\": [\n                          {\n                            \"type\": \"Integer\",\n                            \"value\": \"5\"\n                          },\n                          {\n                            \"type\": \"Integer\",\n                            \"value\": \"6\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": \"5\"\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": \"6\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 6\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"5\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"6\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": \"5\"\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": \"6\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Clone test [Struct]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"PUSH5\",\n        \"APPEND\",\n        \"STSFLD0\",\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"LDSFLD0\",\n        \"APPEND\",\n        \"LDSFLD0\",\n        \"PUSH6\",\n        \"APPEND\",\n        \"LDSFLD0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"PUSH0\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"LDSFLD0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Struct\",\n                        \"value\": [\n                          {\n                            \"type\": \"Integer\",\n                            \"value\": 5\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 17,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 6\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Struct\",\n                        \"value\": [\n                          {\n                            \"type\": \"Integer\",\n                            \"value\": 5\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 6\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 7\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"struct\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 6\n                  }\n                ]\n              },\n              {\n                \"type\": \"struct\",\n                \"value\": [\n                  {\n                    \"type\": \"Struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 6\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array]\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"PUSH5\",\n        \"APPEND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"APPEND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": \"5\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"5\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct]\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"PUSH5\",\n        \"APPEND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"APPEND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": \"5\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"struct\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"5\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/CLEARITEMS.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"CLEARITEMS\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"CLEARITEMS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type\",\n      \"script\": [\n        \"PUSH2\",\n        \"CLEARITEMS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PACK\",\n        \"DUP\",\n        \"CLEARITEMS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 0\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": []\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map]\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH0\",\n        \"SETITEM\",\n        \"DUP\",\n        \"CLEARITEMS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Map\",\n                \"value\": {}\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/HASKEY.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"HASKEY\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"HASKEY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong key type\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"NEWMAP\",\n        \"HASKEY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"HASKEY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"Array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PACKSTRUCT\",\n        \"PUSH0\",\n        \"HASKEY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"HASKEY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"Struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"integer\",\n                        \"value\": 1\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWBUFFER\",\n        \"PUSH0\",\n        \"HASKEY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"NEWMAP\",\n        \"DUP\",\n        \"STSFLD0\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"PUSH3\",\n        \"HASKEY\",\n        \"DROP\",\n        \"LDSFLD0\",\n        \"PUSH1\",\n        \"HASKEY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"HASKEY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {\n                      \"0x01\": {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      }\n                    }\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {\n                      \"0x01\": {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      }\n                    }\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 11,\n                \"nextInstruction\": \"DROP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {\n                      \"0x01\": {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      }\n                    }\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Overflow index [Array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"PUSHINT64\",\n        \"0x0000008000000000\",\n        \"HASKEY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Underflow index [Array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"PUSHINT64\",\n        \"0xffffff7fffffffff\",\n        \"HASKEY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Check key size [Map]\",\n      \"script\": [\n        \"NEWMAP\",\n        \"PUSHINT8\",\n        \"0x41\",\n        \"NEWBUFFER\",\n        \"CONVERT\",\n        \"0x28\",\n        \"HASKEY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepinto\",\n            \"stepinto\",\n            \"stepinto\",\n            \"stepinto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"HASKEY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepinto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"HASKEY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ]\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/KEYS.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"KEYS\",\n  \"tests\": [\n    {\n      \"name\": \"Keys in map\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH0\",\n        \"SETITEM\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"SETITEM\",\n        \"KEYS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Invalid StackItem [Integer!=Map]\",\n      \"script\": [\n        \"PUSH0\",\n        \"KEYS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/NEWARRAY.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"NEWARRAY\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"NEWARRAY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With wrong type\",\n      \"script\": [\n        \"NEWMAP\",\n        \"NEWARRAY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With negative push\",\n      \"script\": [\n        \"PUSHM1\",\n        \"NEWARRAY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      },\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Clone Struct to Array\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH5\",\n        \"SETITEM\",\n        \"NEWARRAY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"NEWARRAY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/NEWARRAY0.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"NEWARRAY0\",\n  \"tests\": [\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"NEWARRAY0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": []\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/NEWARRAY_T.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"NEWARRAY_T\",\n  \"tests\": [\n    {\n      \"name\": \"Real test [Any]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Pointer]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x10\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x21\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x28\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x30\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x40\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x41\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x48\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [InteropInterface]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x60\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Array\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/NEWMAP.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"NEWMAP\",\n  \"tests\": [\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"NEWMAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"map\",\n                \"value\": {}\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/NEWSTRUCT.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"NEWSTRUCT\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"NEWSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With wrong type\",\n      \"script\": [\n        \"NEWMAP\",\n        \"NEWSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With negative push\",\n      \"script\": [\n        \"PUSHM1\",\n        \"NEWSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      },\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"struct\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Clone Array to Struct\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH5\",\n        \"SETITEM\",\n        \"NEWSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"NEWSTRUCT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/NEWSTRUCT0.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"NEWSTRUCT0\",\n  \"tests\": [\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"NEWSTRUCT0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Struct\",\n                \"value\": []\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/PACK.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"PACK\",\n  \"tests\": [\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH5\",\n        \"PUSH6\",\n        \"PUSH2\",\n        \"PACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 6\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Not enough size\",\n      \"script\": [\n        \"PUSH5\",\n        \"PUSH2\",\n        \"PACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Map]\",\n      \"script\": [\n        \"NEWMAP\",\n        \"PACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"PACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Struct]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"PACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without items\",\n      \"script\": [\n        \"PACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/PACKMAP.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"PACKMAP\",\n  \"tests\": [\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH5\",\n        \"PUSH6\",\n        \"PUSH1\",\n        \"PACKMAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Map\",\n                \"value\": {\n                  \"0x06\": {\n                    \"type\": \"Integer\",\n                    \"value\": \"5\"\n                  }\n                }\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Not enough size\",\n      \"script\": [\n        \"PUSH5\",\n        \"PUSH1\",\n        \"PACKMAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Map]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"NEWMAP\",\n        \"PACKMAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"PACKMAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Struct]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"PACKMAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without items\",\n      \"script\": [\n        \"PACKMAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/PACKSTRUCT.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"PACK\",\n  \"tests\": [\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH5\",\n        \"PUSH6\",\n        \"PUSH2\",\n        \"PACKSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"struct\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 6\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Not enough size\",\n      \"script\": [\n        \"PUSH5\",\n        \"PUSH2\",\n        \"PACKSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Map]\",\n      \"script\": [\n        \"NEWMAP\",\n        \"PACKSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"PACKSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Struct]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"PACKSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without items\",\n      \"script\": [\n        \"PACKSTRUCT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/PICKITEM.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"PICKITEM\",\n  \"tests\": [\n    {\n      \"name\": \"Wrong array\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH0\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong key type\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"NEWMAP\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"PICKITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Out of bounds [Array]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY\",\n        \"PUSH3\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"PICKITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      },\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Out of bounds [Struct]\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWSTRUCT\",\n        \"PUSH3\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"PICKITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      },\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH3\",\n        \"NEWARRAY\",\n        \"STSFLD0\",\n        \"LDSFLD0\",\n        \"PUSH0\",\n        \"PUSH1\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"PUSH2\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 19,\n                \"nextInstruction\": \"PICKITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 3\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 3\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 6\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 20,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 3\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH3\",\n        \"NEWSTRUCT\",\n        \"STSFLD0\",\n        \"LDSFLD0\",\n        \"PUSH0\",\n        \"PUSH1\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"PUSH2\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 19,\n                \"nextInstruction\": \"PICKITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 3\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 3\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 6\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 20,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 3\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"OutOfBounds with -1 [ByteString]\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0102\",\n        \"PUSHM1\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"PICKITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0102\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"OutOfBounds with more than length [ByteString]\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0102\",\n        \"PUSH4\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"PICKITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0102\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString]\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0102\",\n        \"PUSH0\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"PICKITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0102\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer]\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0102\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSH0\",\n        \"PICKITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"PICKITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x0102\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/POPITEM.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"POPITEM\",\n  \"tests\": [\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PACK\",\n        \"DUP\",\n        \"POPITEM\",\n        \"DROP\",\n        \"DROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"POPITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 0\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 0\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"DROP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"DROP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/REMOVE.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"REMOVE\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"PUSH1\",\n        \"REMOVE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without array\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"REMOVE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong key\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWMAP\",\n        \"REMOVE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Out of bounds\",\n      \"script\": [\n        \"PUSH6\",\n        \"PUSH5\",\n        \"PUSH2\",\n        \"PACK\",\n        \"PUSH2\",\n        \"REMOVE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH6\",\n        \"PUSH5\",\n        \"PUSH2\",\n        \"PACK\",\n        \"STSFLD0\",\n        \"LDSFLD0\",\n        \"PUSH0\",\n        \"REMOVE\",\n        \"LDSFLD0\",\n        \"UNPACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 9,\n                \"nextInstruction\": \"REMOVE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 6\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 6\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"LDSFLD0\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 6\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 6\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"PUSH5\",\n        \"APPEND\",\n        \"STSFLD0\",\n        \"LDSFLD0\",\n        \"PUSH0\",\n        \"REMOVE\",\n        \"LDSFLD0\",\n        \"UNPACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"REMOVE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 11,\n                \"nextInstruction\": \"LDSFLD0\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/REVERSEITEMS.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"REVERSEITEMS\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"REVERSEITEMS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without Array\",\n      \"script\": [\n        \"PUSH9\",\n        \"REVERSEITEMS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array]\",\n      \"script\": [\n        \"PUSH9\",\n        \"PUSH8\",\n        \"PUSH2\",\n        \"PACK\",\n        \"DUP\",\n        \"REVERSEITEMS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 9\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 8\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 9\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 8\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer]\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x03\",\n        \"0x010203\",\n        \"CONVERT\",\n        \"0x30\",\n        \"DUP\",\n        \"REVERSEITEMS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x030201\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/SETITEM.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"SETITEM\",\n  \"tests\": [\n    {\n      \"name\": \"Map in key\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWMAP\",\n        \"PUSH0\",\n        \"SETITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"SETITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without array\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH0\",\n        \"PUSH0\",\n        \"SETITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"SETITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"SETITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Out of bounds [Array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"PUSH1\",\n        \"PUSH5\",\n        \"SETITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"SETITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Out of bounds [Struct]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"PUSH1\",\n        \"PUSH5\",\n        \"SETITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"SETITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"NEWMAP\",\n        \"DUP\",\n        \"STSFLD0\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"SETITEM\",\n        \"LDSFLD0\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"SETITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"LDSFLD0\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {\n                      \"0x01\": {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      }\n                    }\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 9,\n                \"nextInstruction\": \"PUSH3\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {\n                      \"0x01\": {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      }\n                    }\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {\n                      \"0x01\": {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      }\n                    }\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {\n                      \"0x01\": {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      },\n                      \"0x03\": {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    }\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {\n                      \"0x01\": {\n                        \"type\": \"Integer\",\n                        \"value\": 2\n                      },\n                      \"0x03\": {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    }\n                  }\n                ]\n              }\n            ],\n            \"refs\": 6\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"map\",\n                \"value\": {\n                  \"0x01\": {\n                    \"type\": \"Integer\",\n                    \"value\": 2\n                  },\n                  \"0x03\": {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  }\n                }\n              }\n            ],\n            \"refs\": 5\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH5\",\n        \"SETITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SETITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH5\",\n        \"SETITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SETITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"struct\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Clone test [Array]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH5\",\n        \"SETITEM\",\n        \"STSFLD0\",\n        \"LDSFLD0\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH4\",\n        \"SETITEM\",\n        \"LDSFLD0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"STSFLD0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 11,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 14,\n                \"nextInstruction\": \"LDSFLD0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 15,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  }\n                ]\n              },\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Clone test [Struct]\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH5\",\n        \"SETITEM\",\n        \"STSFLD0\",\n        \"LDSFLD0\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH4\",\n        \"SETITEM\",\n        \"LDSFLD0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"STSFLD0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 11,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 14,\n                \"nextInstruction\": \"LDSFLD0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 15,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"struct\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  }\n                ]\n              },\n              {\n                \"type\": \"struct\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer]\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0102\",\n        \"CONVERT\",\n        \"0x30\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH5\",\n        \"SETITEM\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 9,\n                \"nextInstruction\": \"SETITEM\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x0102\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x0102\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x0502\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/SIZE.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"SIZE\",\n  \"tests\": [\n    {\n      \"name\": \"Wrong type SYSCALL[0x77777777]+SIZE\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"SIZE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"SIZE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without PUSH+SIZE\",\n      \"script\": [\n        \"SIZE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with ByteString\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01\",\n        \"0x00\",\n        \"SIZE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with Buffer\",\n      \"script\": [\n        \"PUSH10\",\n        \"NEWBUFFER\",\n        \"SIZE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 10\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with array\",\n      \"script\": [\n        \"PUSH3\",\n        \"NEWARRAY\",\n        \"SIZE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with struct\",\n      \"script\": [\n        \"PUSH3\",\n        \"NEWSTRUCT\",\n        \"SIZE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with map\",\n      \"script\": [\n        \"NEWMAP\",\n        \"SIZE\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/UNPACK.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"UNPACK\",\n  \"tests\": [\n    {\n      \"name\": \"Without array\",\n      \"script\": [\n        \"PUSH10\",\n        \"UNPACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"UNPACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"PUSH5\",\n        \"PUSH6\",\n        \"PUSH2\",\n        \"PACK\",\n        \"UNPACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"UNPACK\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 6\n                      },\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 6\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 6\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 5\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With map\",\n      \"script\": [\n        \"PUSH5\",\n        \"PUSH6\",\n        \"PUSH1\",\n        \"PACKMAP\",\n        \"UNPACK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 6\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 5\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Arrays/VALUES.json",
    "content": "{\n  \"category\": \"Arrays\",\n  \"name\": \"VALUES\",\n  \"tests\": [\n    {\n      \"name\": \"No StackItem\",\n      \"script\": [\n        \"KEYS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Invalid StackItem [Integer != (Map|Array|Struct)]\",\n      \"script\": [\n        \"PUSH0\",\n        \"KEYS\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Values in map\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH2\",\n        \"SETITEM\",\n        \"PUSH1\",\n        \"PUSH4\",\n        \"SETITEM\",\n        \"VALUES\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 4\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Simple values in array\",\n      \"script\": [\n        \"PUSH2\",\n        \"NEWARRAY_T\",\n        \"0x00\",\n        \"VALUES\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Compound value in array [inner struct]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH2\",\n        \"NEWSTRUCT\",\n        \"SETITEM\",\n        \"VALUES\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      },\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Compound value in array [inner map]\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"PUSH0\",\n        \"NEWMAP\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH1\",\n        \"SETITEM\",\n        \"SETITEM\",\n        \"VALUES\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {\n                      \"\": {\n                        \"type\": \"Integer\",\n                        \"value\": 1\n                      }\n                    }\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/BitwiseLogic/AND.json",
    "content": "{\n  \"category\": \"Bitwise Logic\",\n  \"name\": \"AND\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [true,true]=1\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [false,true]=0\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"NOT\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,1]=1\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,2]=0\",\n      \"script\": [\n        \"PUSH2\",\n        \"PUSH1\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=FAULT\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=FAULT\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=FAULT\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=11911212070228631137091015067172167745536\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"11911212070228631137091015067172167745536\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": \"11911212070228631137091015067172167745536\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=10890364969465815746700891244876863111168\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000124\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"10890364969465815746700891244876863111168\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": \"10890364969465815746700891244876863111168\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=0\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with clone [Interop,Interop]=FAULT\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"DUP\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=FAULT\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSHDATA1\",\n        \"0x01BB\",\n        \"CONVERT\",\n        \"0x30\",\n        \"AND\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"AND\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/BitwiseLogic/EQUAL.json",
    "content": "{\n  \"category\": \"Bitwise Logic\",\n  \"name\": \"EQUAL same types\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Bool,Bool]=true\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Bool,Bool]=false\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"NOT\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer,Integer]=true\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer,Integer]=false\",\n      \"script\": [\n        \"PUSH2\",\n        \"PUSH1\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=true\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=false\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=true with clone\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=true without clone\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=false\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=true\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=false\",\n      \"script\": [\n        \"NEWMAP\",\n        \"NEWMAP\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=true\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=false same length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000124\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=false different length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=false different length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with clone [Interop,Interop]=true\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"DUP\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Interop,Interop]=false\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=false\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSHDATA1\",\n        \"0x01BB\",\n        \"CONVERT\",\n        \"0x30\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=false\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=true\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"DUP\",\n        \"EQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"EQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/BitwiseLogic/INVERT.json",
    "content": "{\n  \"category\": \"Bitwise Logic\",\n  \"name\": \"INVERT\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With 0\",\n      \"script\": [\n        \"PUSH0\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": -1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [true]=-2\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -2\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [false]=-1\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"NOT\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1]=-2\",\n      \"script\": [\n        \"PUSH1\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -2\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [2]=-3\",\n      \"script\": [\n        \"PUSH2\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": -3\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array]=FAULT\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct]=FAULT\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map]=FAULT\",\n      \"script\": [\n        \"NEWMAP\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString]=-11911212070228631137091015067172167745537\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 19,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 20,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"-11911212070228631137091015067172167745537\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": \"-11911212070228631137091015067172167745537\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString]=-12251494437149569600554389674603935956993\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000124\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 19,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000124\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 20,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"-12251494437149569600554389674603935956993\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": \"-12251494437149569600554389674603935956993\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with clone [Interop]=FAULT\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=FAULT\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSHDATA1\",\n        \"0x01BB\",\n        \"CONVERT\",\n        \"0x30\",\n        \"INVERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"INVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/BitwiseLogic/NOTEQUAL.json",
    "content": "{\n  \"category\": \"Bitwise Logic\",\n  \"name\": \"NOTEQUAL\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer,Integer]=false\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer,Integer]=true\",\n      \"script\": [\n        \"PUSH2\",\n        \"PUSH1\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=false\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=true\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=false with clone\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=false without clone\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=true\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Null\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=false\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=true\",\n      \"script\": [\n        \"NEWMAP\",\n        \"NEWMAP\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=false\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=true same length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000124\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=true different length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=true different length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with clone [Interop,Interop]=false\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"DUP\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Interop,Interop]=true\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=true\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSHDATA1\",\n        \"0x01BB\",\n        \"CONVERT\",\n        \"0x30\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=true\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=false\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"DUP\",\n        \"NOTEQUAL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"NOTEQUAL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/BitwiseLogic/OR.json",
    "content": "{\n  \"category\": \"Bitwise Logic\",\n  \"name\": \"OR\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [true,true]=1\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [false,true]=1\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"NOT\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,1]=1\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,2]=3\",\n      \"script\": [\n        \"PUSH2\",\n        \"PUSH1\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=FAULT\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=FAULT\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=FAULT\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=11911212070228631137091015067172167745536\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"11911212070228631137091015067172167745536\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": \"11911212070228631137091015067172167745536\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=13272341537912384990944513496899240591360\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000124\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"13272341537912384990944513496899240591360\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": \"13272341537912384990944513496899240591360\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=11959069470373746643343180651838589370368\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"11959069470373746643343180651838589370368\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": \"11959069470373746643343180651838589370368\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with clone [Interop,Interop]=FAULT\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"DUP\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=FAULT\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSHDATA1\",\n        \"0x01BB\",\n        \"CONVERT\",\n        \"0x30\",\n        \"OR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"OR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/BitwiseLogic/XOR.json",
    "content": "{\n  \"category\": \"Bitwise Logic\",\n  \"name\": \"XOR\",\n  \"tests\": [\n    {\n      \"name\": \"Without two pushes\",\n      \"script\": [\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [true,true]=0\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [false,true]=1\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"PUSH0\",\n        \"NOT\",\n        \"NOT\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": false\n                  },\n                  {\n                    \"type\": \"boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,1]=0\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1,2]=3\",\n      \"script\": [\n        \"PUSH2\",\n        \"PUSH1\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Array,Array]=FAULT\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Struct,Struct]=FAULT\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  },\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Map,Map]=FAULT\",\n      \"script\": [\n        \"NEWMAP\",\n        \"DUP\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=0\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=2381976568446569244243622252022377480192\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000124\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 39,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"2381976568446569244243622252022377480192\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": \"2381976568446569244243622252022377480192\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [ByteString,ByteString]=11959069470373746643343180651838589370368\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x11\",\n        \"0x0000000000000000000000000000000123\",\n        \"PUSHDATA1\",\n        \"0x10\",\n        \"0x00000000000000000000000000000124\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 37,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00000000000000000000000000000124\"\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0000000000000000000000000000000123\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 38,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"11959069470373746643343180651838589370368\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": \"11959069470373746643343180651838589370368\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with clone [Interop,Interop]=FAULT\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"DUP\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"DUP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  },\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Buffer,Buffer]=FAULT\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSHDATA1\",\n        \"0x01BB\",\n        \"CONVERT\",\n        \"0x30\",\n        \"XOR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"XOR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/ABORT.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"ABORT\",\n  \"tests\": [\n    {\n      \"name\": \"Basic Test\",\n      \"script\": [\n        \"ABORT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/ABORTMSG.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"ABORTMSG\",\n  \"tests\": [\n    {\n      \"name\": \"Basic Test\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x03\",\n        \"0x4e454f\",\n        \"ABORTMSG\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"exceptionMessage\": \"ABORTMSG is executed. Reason: NEO\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/ASSERT.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"ASSERT\",\n  \"tests\": [\n    {\n      \"name\": \"Fault Test\",\n      \"script\": [\n        \"PUSH0\",\n        \"ASSERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Halt Test\",\n      \"script\": [\n        \"PUSH1\",\n        \"ASSERT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/ASSERTMSG.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"ASSERTMSG\",\n  \"tests\": [\n    {\n      \"name\": \"Fault Test\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSHDATA1\",\n        \"0x04\",\n        \"0x4641494c\",\n        \"ASSERTMSG\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"exceptionMessage\": \"ASSERTMSG is executed with false result. Reason: FAIL\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Halt Test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSHDATA1\",\n        \"0x04\",\n        \"0x50415353\",\n        \"ASSERTMSG\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/CALL.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"CALL\",\n  \"tests\": [\n    {\n      \"name\": \"Error negative\",\n      \"script\": [\n        \"CALL\",\n        \"0xFF00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Error out of bounds\",\n      \"script\": [\n        \"CALL\",\n        \"0x0A\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"CALL\",\n        \"0x03\",\n        \"RET\",\n        \"PUSH0\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"PUSH0\"\n              },\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              },\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/CALLA.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"CALLA\",\n  \"tests\": [\n    {\n      \"name\": \"Wrong type\",\n      \"script\": [\n        \"PUSH2\",\n        \"CALLA\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"CALLA\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSHA\",\n        \"0x07000000\",\n        \"CALLA\",\n        \"RET\",\n        \"PUSH0\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"CALLA\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"pointer\",\n                    \"value\": 7\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"PUSH0\"\n              },\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              },\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/CALL_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"CALL_L\",\n  \"tests\": [\n    {\n      \"name\": \"Error negative\",\n      \"script\": [\n        \"CALL_L\",\n        \"0x000000FF\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Error out of bounds\",\n      \"script\": [\n        \"CALL_L\",\n        \"0x0A000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"CALL_L\",\n        \"0x06000000\",\n        \"RET\",\n        \"PUSH0\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"PUSH0\"\n              },\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              },\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMP.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMP\",\n  \"tests\": [\n    {\n      \"name\": \"Out of range [<0]\",\n      \"script\": [\n        \"JMP\",\n        \"0xff\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Out of range [>length]\",\n      \"script\": [\n        \"JMP\",\n        \"0x7f\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"JMP\",\n        \"0x02\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPEQ.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPEQ\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPEQ\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPEQ\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPEQ\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPEQ\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPEQ\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPEQ\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPEQ\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPEQ\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPEQ_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPEQ_L\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPEQ_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPEQ_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPEQ_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPEQ_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPEQ_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPEQ_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPEQ_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPEQ_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPGE.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPGE\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPGE\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPGE\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPGE\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPGE\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPGE\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPGE_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPGE_L\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPGE_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPGE_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPGE_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGE_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPGE_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGE_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPGE_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGE_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPGT.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPGT\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPGT\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPGT\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPGT\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPGT\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPGT\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPGT_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPGT_L\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPGT_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPGT_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPGT_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGT_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPGT_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGT_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPGT_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPGT_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPIF.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPIF\",\n  \"tests\": [\n    {\n      \"name\": \"Without items\",\n      \"script\": [\n        \"JMPIF\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1]\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPIF\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"JMPIF\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0]\",\n      \"script\": [\n        \"PUSH0\",\n        \"JMPIF\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"JMPIF\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPIFNOT.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPIFNOT\",\n  \"tests\": [\n    {\n      \"name\": \"Without items\",\n      \"script\": [\n        \"JMPIFNOT\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1]\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPIFNOT\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"JMPIFNOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0]\",\n      \"script\": [\n        \"PUSH0\",\n        \"JMPIFNOT\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"JMPIFNOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPIFNOT_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPIFNOT_L\",\n  \"tests\": [\n    {\n      \"name\": \"Without items\",\n      \"script\": [\n        \"JMPIFNOT_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1]\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPIFNOT_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"JMPIFNOT_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0]\",\n      \"script\": [\n        \"PUSH0\",\n        \"JMPIFNOT_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"JMPIFNOT_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPIF_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPIF_L\",\n  \"tests\": [\n    {\n      \"name\": \"Without items\",\n      \"script\": [\n        \"JMPIF_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [1]\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPIF_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"JMPIF_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [0]\",\n      \"script\": [\n        \"PUSH0\",\n        \"JMPIF_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"JMPIF_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPLE.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPLE\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPLE\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPLE\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPLE\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPLE\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPLE\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPLE_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPLE_L\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPLE_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPLE_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPLE_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLE_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPLE_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLE_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPLE_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLE_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPLT.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPLT\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPLT\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPLT\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPLT\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPLT\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPLT\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPLT_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPLT_L\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPLT_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPLT_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPLT_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLT_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPLT_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLT_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPLT_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPLT_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPNE.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPNE\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPNE\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPNE\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPNE\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPNE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPNE\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPNE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPNE\",\n        \"0x03\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPNE\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMPNE_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMPNE_L\",\n  \"tests\": [\n    {\n      \"name\": \"Without all items\",\n      \"script\": [\n        \"JMPNE_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without one\",\n      \"script\": [\n        \"PUSH1\",\n        \"JMPNE_L\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [>]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"JMPNE_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH0\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPNE_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [==]\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"JMPNE_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPNE_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [<]\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"JMPNE_L\",\n        \"0x06000000\",\n        \"NOP\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"JMPNE_L\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/JMP_L.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"JMP_L\",\n  \"tests\": [\n    {\n      \"name\": \"Out of range [<0]\",\n      \"script\": [\n        \"JMP_L\",\n        \"0xffffffff\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Out of range [>length]\",\n      \"script\": [\n        \"JMP_L\",\n        \"0xffffff7f\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"JMP_L\",\n        \"0x05000000\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/NOP.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"NOP\",\n  \"tests\": [\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"NOP\",\n        \"NOP\",\n        \"NOP\",\n        \"NOP\",\n        \"NOP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"NOP\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/RET.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"RET\",\n  \"tests\": [\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/SYSCALL.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"SYSCALL\",\n  \"tests\": [\n    {\n      \"name\": \"Syscall that does not exist\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong script\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x2a537973\",\n        \"DEPTH\",\n        \"CALL_L\",\n        \"0x6d2e0000\",\n        \"PUSHDATA1\",\n        \"0x457865637574696f6e456e67696e652e476574536372697074436f6e7461696e6572\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [IMessageProvider]\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"interop\",\n                    \"value\": \"Object\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"interop\",\n                \"value\": \"Object\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong script\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0xfdffff00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong script\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0xfeffffff\",\n        \"0xff\",\n        \"PUSH0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong script\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0xffffffff\",\n        \"0xffffffffff\",\n        \"PUSH0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/THROW.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"THROW\",\n  \"tests\": [\n    {\n      \"name\": \"Fault Test\",\n      \"script\": [\n        \"PUSH0\",\n        \"THROW\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH\",\n  \"tests\": [\n    {\n      \"name\": \"try catch with syscall exception\",\n      \"script\": [\n        \"TRY\",\n        \"0x0a00\",\n        \"SYSCALL\",\n        \"0xdeaddead\",\n        \"ENDTRY\",\n        \"0x05\",\n        \"PUSH1\",\n        \"ENDTRY\",\n        \"0x02\",\n        \"PUSH2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 11,\n                \"nextInstruction\": \"ENDTRY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x6572726f72\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"ByteString\",\n                \"value\": \"0x6572726f72\"\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"try catch without exception\",\n      \"script\": [\n        \"TRY\",\n        \"0x0600\",\n        \"PUSH0\",\n        \"ENDTRY\",\n        \"0x05\",\n        \"PUSH3\",\n        \"ENDTRY\",\n        \"0x02\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 9,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"try catch with exception\",\n      \"script\": [\n        \"TRY\",\n        \"0x0700\",\n        \"PUSH0\",\n        \"THROW\",\n        \"ENDTRY\",\n        \"0x05\",\n        \"PUSH1\",\n        \"ENDTRY\",\n        \"0x02\",\n        \"PUSH2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"PUSH2\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try catch finally without exception\",\n      \"script\": [\n        \"TRY\",\n        \"0x080a\",\n        \"PUSH0\",\n        \"ENDTRY\",\n        \"0x08\",\n        \"RET\",\n        \"PUSH2\",\n        \"ENDTRY\",\n        \"0x04\",\n        \"PUSH3\",\n        \"ENDFINALLY\",\n        \"PUSH4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"PUSH3\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 12,\n                \"nextInstruction\": \"PUSH4\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY10.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try + finally without ENDTRY\",\n      \"script\": [\n        \"TRY\",\n        \"0x0003\",\n        \"ENDFINALLY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY2.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try catch finally with exception\",\n      \"script\": [\n        \"TRY\",\n        \"0x080C\",\n        \"PUSH0\",\n        \"THROW\",\n        \"ENDTRY\",\n        \"0x06\",\n        \"RET\",\n        \"PUSH1\",\n        \"ENDTRY\",\n        \"0x02\",\n        \"RET\",\n        \"PUSH2\",\n        \"ENDFINALLY\",\n        \"PUSH3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 12,\n                \"nextInstruction\": \"PUSH2\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 11,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY3.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try{ try{ throw }catch{ }}catch{ }finally{ }\",\n      \"script\": [\n        \"TRY\",\n        \"0x0e13\",\n        \"TRY\",\n        \"0x0700\",\n        \"PUSH0\",\n        \"THROW\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH1\",\n        \"ENDTRY\",\n        \"0x02\",\n        \"ENDTRY\",\n        \"0x02\",\n        \"RET\",\n        \"PUSH2\",\n        \"ENDTRY\",\n        \"0x04\",\n        \"PUSH3\",\n        \"ENDFINALLY\",\n        \"PUSH4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"ENDTRY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 15,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY4.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try{ try{ throw }catch{ throw } }catch{ }finally{ }\",\n      \"script\": [\n        \"TRY\",\n        \"0x1014\",\n        \"TRY\",\n        \"0x0700\",\n        \"PUSH0\",\n        \"THROW\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH1\",\n        \"THROW\",\n        \"ENDTRY\",\n        \"0x04\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH2\",\n        \"ENDTRY\",\n        \"0x02\",\n        \"RET\",\n        \"PUSH3\",\n        \"ENDFINALLY\",\n        \"PUSH4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"PUSH1\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 16,\n                \"nextInstruction\": \"PUSH2\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 19,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY5.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try{ assert false }catch{ push2 }finally{ push3 }\",\n      \"script\": [\n        \"TRY\",\n        \"0x0608\",\n        \"PUSH0\",\n        \"ASSERT\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH2\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH3\",\n        \"ENDFINALLY\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY6.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try{ abort }catch{ push2 }finally{ push3 }\",\n      \"script\": [\n        \"TRY\",\n        \"0x0507\",\n        \"ABORT\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH2\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH3\",\n        \"ENDFINALLY\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY7.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try{ throw }catch{ abort }finally{ push3 }\",\n      \"script\": [\n        \"TRY\",\n        \"0x070a\",\n        \"PUSH0\",\n        \"THROW\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"ABORT\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH3\",\n        \"ENDFINALLY\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"ABORT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY8.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try{ throw }catch{ throw }finally{ push3 }\",\n      \"script\": [\n        \"TRY\",\n        \"0x070b\",\n        \"PUSH0\",\n        \"THROW\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH2\",\n        \"THROW\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH3\",\n        \"ENDFINALLY\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"PUSH2\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 11,\n                \"nextInstruction\": \"PUSH3\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 12,\n                \"nextInstruction\": \"ENDFINALLY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_CATCH_FINALLY9.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_CATCH_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try{ PUSH0, call A: PUSH1 { call B: PUSH2 throw an exception } }catch{ PUSH3 }\",\n      \"script\": [\n        \"TRY\",\n        \"0x0f00\",\n        \"PUSH0\",\n        \"CALL\",\n        \"0x03\",\n        \"RET\",\n        \"PUSH1\",\n        \"CALL\",\n        \"0x02\",\n        \"PUSH2\",\n        \"THROW\",\n        \"RET\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"PUSH3\",\n        \"ENDTRY\",\n        \"0x02\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 15,\n                \"nextInstruction\": \"PUSH3\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 18,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Control/TRY_FINALLY.json",
    "content": "{\n  \"category\": \"Control\",\n  \"name\": \"TRY_FINALLY\",\n  \"tests\": [\n    {\n      \"name\": \"try finally with exception\",\n      \"script\": [\n        \"TRY\",\n        \"0x0009\",\n        \"PUSH0\",\n        \"THROW\",\n        \"ENDTRY\",\n        \"0x01\",\n        \"JMP\",\n        \"0x03\",\n        \"PUSH1\",\n        \"ENDFINALLY\",\n        \"PUSH2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 9,\n                \"nextInstruction\": \"PUSH1\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Push/PUSHA.json",
    "content": "{\n  \"category\": \"Push\",\n  \"name\": \"PUSHA\",\n  \"tests\": [\n    {\n      \"name\": \"Out of range [-1]\",\n      \"script\": [\n        \"PUSHA\",\n        \"0xffffffff\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Out of range [>length]\",\n      \"script\": [\n        \"PUSHA\",\n        \"0xffffff7f\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSHA\",\n        \"0x00000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"pointer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [=length]\",\n      \"script\": [\n        \"PUSHA\",\n        \"0x05000000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"pointer\",\n                \"value\": 5\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Push/PUSHDATA1.json",
    "content": "{\n  \"category\": \"Push\",\n  \"name\": \"PUSHDATA1\",\n  \"tests\": [\n    {\n      \"name\": \"Good definition\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x04\",\n        \"0x01020304\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"ByteString\",\n                \"value\": \"0x01020304\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without enough length\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x0501020304\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Push/PUSHDATA2.json",
    "content": "{\n  \"category\": \"Push\",\n  \"name\": \"PUSHDATA2\",\n  \"tests\": [\n    {\n      \"name\": \"Good definition\",\n      \"script\": [\n        \"PUSHDATA2\",\n        \"0x0400\",\n        \"0x01020304\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"ByteString\",\n                \"value\": \"0x01020304\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without enough length\",\n      \"script\": [\n        \"PUSHDATA2\",\n        \"0x050001020304\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Push/PUSHDATA4.json",
    "content": "{\n  \"category\": \"Push\",\n  \"name\": \"PUSHDATA4\",\n  \"tests\": [\n    {\n      \"name\": \"More length than script\",\n      \"script\": [\n        \"PUSHDATA4\",\n        \"0x00080000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Negative length\",\n      \"script\": [\n        \"PUSHDATA4\",\n        \"0xffffffff\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Good definition\",\n      \"script\": [\n        \"PUSHDATA4\",\n        \"0x04000000\",\n        \"0x01020304\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"ByteString\",\n                \"value\": \"0x01020304\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without enough length\",\n      \"script\": [\n        \"PUSHDATA4\",\n        \"0x0500000001020304\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Max length (Parse Instruction Error)\",\n      \"script\": [\n        \"PUSHDATA4\",\n        \"0x01001000\",\n        \"0xFF\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Push/PUSHINT8_to_PUSHINT256.json",
    "content": "{\n  \"category\": \"Push\",\n  \"name\": \"PUSHINT8 to PUSHINT256\",\n  \"tests\": [\n    {\n      \"name\": \"Basic Test\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0xff\",\n        \"PUSHINT16\",\n        \"0xfeff\",\n        \"PUSHINT32\",\n        \"0xfdffffff\",\n        \"PUSHINT64\",\n        \"0xfcffffffffffffff\",\n        \"PUSHINT128\",\n        \"0xfbffffffffffffffffffffffffffffff\",\n        \"PUSHINT256\",\n        \"0xfaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": -6\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": -5\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": -4\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": -3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": -2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": -1\n              }\n            ],\n            \"refs\": 6\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Push/PUSHM1_to_PUSH16.json",
    "content": "{\n  \"category\": \"Push\",\n  \"name\": \"From PUSHM1 to PUSH16 [-1 to 16]\",\n  \"tests\": [\n    {\n      \"name\": \"Basic Test\",\n      \"script\": [\n        \"PUSHM1\",\n        \"PUSH0\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"PUSH6\",\n        \"PUSH7\",\n        \"PUSH8\",\n        \"PUSH9\",\n        \"PUSH10\",\n        \"PUSH11\",\n        \"PUSH12\",\n        \"PUSH13\",\n        \"PUSH14\",\n        \"PUSH15\",\n        \"PUSH16\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 18,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 16\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 15\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 14\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 13\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 12\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 11\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 10\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 9\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 8\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 7\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 6\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 18\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 16\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 15\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 14\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 13\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 12\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 11\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 10\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 9\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 8\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 7\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 6\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 5\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 4\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": -1\n              }\n            ],\n            \"refs\": 18\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Push/PUSHNULL.json",
    "content": "{\n  \"category\": \"Push\",\n  \"name\": \"PUSHNULL\",\n  \"tests\": [\n    {\n      \"name\": \"Good definition\",\n      \"script\": [\n        \"PUSHNULL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"null\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/INITSLOT.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"INITSLOT\",\n  \"tests\": [\n    {\n      \"name\": \"Without enough items\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0101\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without 0 items\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0000\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [LocalVariables]\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"localVariables\": [\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Arguments]\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"arguments\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [LocalVariables + Arguments]\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0101\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"localVariables\": [\n                  {\n                    \"type\": \"Null\"\n                  }\n                ],\n                \"arguments\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Initialize twice\",\n      \"script\": [\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0101\",\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0101\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"PUSH0\",\n                \"localVariables\": [\n                  {\n                    \"type\": \"Null\"\n                  }\n                ],\n                \"arguments\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/INITSSLOT.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"INITSSLOT\",\n  \"tests\": [\n    {\n      \"name\": \"Without 0 items\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Initialize twice\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"INITSSLOT\",\n        \"0x02\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"INITSSLOT\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDARG.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDARG\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDARG\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"LDARG\",\n        \"0x01\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"LDARG\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDARG0.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDARG0\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDARG0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"LDARG0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDARG1.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDARG1\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDARG1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"LDARG1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"INITSLOT\",\n        \"0x0002\",\n        \"LDARG1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDARG2.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDARG2\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDARG2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"LDARG2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"INITSLOT\",\n        \"0x0003\",\n        \"LDARG2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDARG3.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDARG3\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDARG3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"LDARG3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"INITSLOT\",\n        \"0x0004\",\n        \"LDARG3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDARG4.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDARG4\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDARG4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"LDARG4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"INITSLOT\",\n        \"0x0005\",\n        \"LDARG4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDARG5.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDARG5\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDARG5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"LDARG5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"PUSH6\",\n        \"INITSLOT\",\n        \"0x0006\",\n        \"LDARG5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDARG6.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDARG6\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDARG6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"LDARG6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"PUSH6\",\n        \"PUSH7\",\n        \"INITSLOT\",\n        \"0x0007\",\n        \"LDARG6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDLOC.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDLOC\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDLOC\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"LDLOC\",\n        \"0x01\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"PUSH1\",\n        \"STLOC\",\n        \"0x00\",\n        \"LDLOC\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDLOC0.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDLOC0\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDLOC0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"PUSH1\",\n        \"STLOC0\",\n        \"LDLOC0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDLOC1.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDLOC1\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDLOC1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"LDLOC1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0200\",\n        \"PUSH1\",\n        \"STLOC1\",\n        \"LDLOC1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDLOC2.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDLOC2\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDLOC2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"LDLOC2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0300\",\n        \"PUSH1\",\n        \"STLOC2\",\n        \"LDLOC2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDLOC3.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDLOC3\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDLOC3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"LDLOC3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0400\",\n        \"PUSH1\",\n        \"STLOC3\",\n        \"LDLOC3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDLOC4.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDLOC4\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDLOC4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"LDLOC4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0500\",\n        \"PUSH1\",\n        \"STLOC4\",\n        \"LDLOC4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDLOC5.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDLOC5\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDLOC5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"LDLOC5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0600\",\n        \"PUSH1\",\n        \"STLOC5\",\n        \"LDLOC5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDLOC6.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDLOC6\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDLOC6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"LDLOC6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0700\",\n        \"PUSH1\",\n        \"STLOC6\",\n        \"LDLOC6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDSFLD.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDSFLD\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDSFLD\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"LDSFLD\",\n        \"0x01\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH1\",\n        \"STSFLD\",\n        \"0x00\",\n        \"LDSFLD\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDSFLD0.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDSFLD0\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDSFLD0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH1\",\n        \"STSFLD0\",\n        \"LDSFLD0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDSFLD1.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDSFLD1\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDSFLD1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"LDSFLD1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x02\",\n        \"PUSH1\",\n        \"STSFLD1\",\n        \"LDSFLD1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDSFLD2.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDSFLD2\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDSFLD2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"LDSFLD2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x03\",\n        \"PUSH1\",\n        \"STSFLD2\",\n        \"LDSFLD2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDSFLD3.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDSFLD3\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDSFLD3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"LDSFLD3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x04\",\n        \"PUSH1\",\n        \"STSFLD3\",\n        \"LDSFLD3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDSFLD4.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDSFLD4\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDSFLD4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"LDSFLD4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x05\",\n        \"PUSH1\",\n        \"STSFLD4\",\n        \"LDSFLD4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDSFLD5.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDSFLD5\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDSFLD5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"LDSFLD5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x06\",\n        \"PUSH1\",\n        \"STSFLD5\",\n        \"LDSFLD5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/LDSFLD6.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"LDSFLD6\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"LDSFLD6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"LDSFLD6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x07\",\n        \"PUSH1\",\n        \"STSFLD6\",\n        \"LDSFLD6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STARG.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STARG\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"PUSH1\",\n        \"STARG\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"PUSH1\",\n        \"STARG\",\n        \"0x01\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"PUSH0\",\n        \"STARG\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"arguments\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STARG0.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STARG0\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"PUSH1\",\n        \"STARG0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"PUSH1\",\n        \"STARG0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"arguments\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STARG1.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STARG1\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"PUSH1\",\n        \"STARG1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"PUSH1\",\n        \"STARG1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"INITSLOT\",\n        \"0x0002\",\n        \"PUSH0\",\n        \"STARG1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"arguments\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STARG2.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STARG2\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"PUSH1\",\n        \"STARG2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"PUSH1\",\n        \"STARG2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"INITSLOT\",\n        \"0x0003\",\n        \"PUSH0\",\n        \"STARG2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"arguments\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STARG3.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STARG3\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"PUSH1\",\n        \"STARG3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"PUSH1\",\n        \"STARG3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"INITSLOT\",\n        \"0x0004\",\n        \"PUSH0\",\n        \"STARG3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"arguments\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STARG4.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STARG4\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"PUSH1\",\n        \"STARG4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"PUSH1\",\n        \"STARG4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"INITSLOT\",\n        \"0x0005\",\n        \"PUSH0\",\n        \"STARG4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"arguments\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 4\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STARG5.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STARG5\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"PUSH1\",\n        \"STARG5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"PUSH1\",\n        \"STARG5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"PUSH6\",\n        \"INITSLOT\",\n        \"0x0006\",\n        \"PUSH0\",\n        \"STARG5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"arguments\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 4\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 5\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STARG6.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STARG6\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"PUSH1\",\n        \"STARG6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"PUSH0\",\n        \"INITSLOT\",\n        \"0x0001\",\n        \"PUSH1\",\n        \"STARG6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PUSH5\",\n        \"PUSH6\",\n        \"PUSH7\",\n        \"INITSLOT\",\n        \"0x0007\",\n        \"PUSH0\",\n        \"STARG6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"arguments\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 4\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 5\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 6\n              },\n              {\n                \"type\": \"Integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STLOC.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STLOC\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"STLOC\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without enough items\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"PUSH2\",\n        \"STLOC\",\n        \"0x01\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0100\",\n        \"PUSH1\",\n        \"STLOC\",\n        \"0x00\",\n        \"LDLOC\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"LDLOC\",\n                \"localVariables\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STSFLD.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STSFLD\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"STSFLD\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"STSFLD\",\n        \"0x01\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH1\",\n        \"STSFLD\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STSFLD0.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STSFLD0\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"STSFLD0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSH1\",\n        \"STSFLD0\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STSFLD1.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STSFLD1\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"STSFLD1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"STSFLD1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x02\",\n        \"PUSH1\",\n        \"STSFLD1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STSFLD2.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STSFLD2\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"STSFLD2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"STSFLD2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x03\",\n        \"PUSH1\",\n        \"STSFLD2\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STSFLD3.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STSFLD3\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"STSFLD3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"STSFLD3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x04\",\n        \"PUSH1\",\n        \"STSFLD3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STSFLD4.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STSFLD4\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"STSFLD4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"STSFLD4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x05\",\n        \"PUSH1\",\n        \"STSFLD4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STSFLD5.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STSFLD5\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"STSFLD5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"STSFLD5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x06\",\n        \"PUSH1\",\n        \"STSFLD5\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 6\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Slot/STSFLD6.json",
    "content": "{\n  \"category\": \"Slot\",\n  \"name\": \"STSFLD6\",\n  \"tests\": [\n    {\n      \"name\": \"Without slot\",\n      \"script\": [\n        \"STSFLD6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index out of range\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"STSFLD6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x07\",\n        \"PUSH1\",\n        \"STSFLD6\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Null\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 7\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Splice/CAT.json",
    "content": "{\n  \"category\": \"Splice\",\n  \"name\": \"CAT\",\n  \"tests\": [\n    {\n      \"name\": \"Max Item Length\",\n      \"script\": [\n        \"INITSLOT\",\n        \"0x0200\",\n        \"PUSHINT32\",\n        \"0x00000100\",\n        \"STLOC0\",\n        \"PUSH1\",\n        \"STLOC1\",\n        \"PUSHDATA2\",\n        \"0x1000\",\n        \"0x000102030405060708090A0B0C0D0E0F\",\n        \"PUSHDATA2\",\n        \"0x1000\",\n        \"0x000102030405060708090A0B0C0D0E0F\",\n        \"CAT\",\n        \"LDLOC1\",\n        \"INC\",\n        \"STLOC1\",\n        \"LDLOC1\",\n        \"LDLOC0\",\n        \"LT\",\n        \"JMPIF_L\",\n        \"0xE6FFFFFF\",\n        \"PUSHDATA1\",\n        \"0x01\",\n        \"0x00\",\n        \"CAT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Map,ByteString]\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWMAP\",\n        \"CAT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [ByteString,Map]\",\n      \"script\": [\n        \"NEWMAP\",\n        \"PUSH0\",\n        \"CAT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong push\",\n      \"script\": [\n        \"CAT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01\",\n        \"0x01\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0203\",\n        \"CAT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x010203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x010203\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"CAT int(0) with empty ByteString\",\n      \"script\": [\n        \"PUSH1\",\n        \"DEC\",\n        \"PUSH0\",\n        \"CAT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"CAT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"CAT 0x01 with empty ByteString\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH0\",\n        \"CAT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"CAT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x01\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"CAT empty ByteString with 0x01\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH1\",\n        \"CAT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"CAT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x01\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"CAT Buffers\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01AA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"PUSHDATA1\",\n        \"0x01BB\",\n        \"CONVERT\",\n        \"0x30\",\n        \"INITSLOT\",\n        \"0x0002\",\n        \"LDARG1\",\n        \"LDARG0\",\n        \"CAT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 10,\n                \"nextInstruction\": \"INITSLOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"LDARG1\",\n                \"arguments\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 15,\n                \"nextInstruction\": \"CAT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ],\n                \"arguments\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 16,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAABB\"\n                  }\n                ],\n                \"arguments\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xBB\"\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0xAA\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Splice/LEFT.json",
    "content": "{\n  \"category\": \"Splice\",\n  \"name\": \"LEFT\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"PUSH11\",\n        \"LEFT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Map]\",\n      \"script\": [\n        \"PUSH4\",\n        \"NEWMAP\",\n        \"LEFT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"LEFT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Negative value\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x03\",\n        \"0x010203\",\n        \"PUSHM1\",\n        \"LEFT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"LEFT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x010203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Overflow string\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x03\",\n        \"0x010203\",\n        \"PUSH4\",\n        \"LEFT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"LEFT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x010203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x03\",\n        \"0x010203\",\n        \"PUSH2\",\n        \"LEFT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"LEFT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x010203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x0102\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x0102\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Splice/MEMCPY.json",
    "content": "{\n  \"category\": \"Splice\",\n  \"name\": \"MEMCPY\",\n  \"tests\": [\n    {\n      \"name\": \"Max Item Length\",\n      \"script\": [\n        \"PUSH4\",\n        \"NEWBUFFER\",\n        \"PUSHINT32\",\n        \"0x00001000\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x1111\",\n        \"PUSH0\",\n        \"PUSH2\",\n        \"MEMCPY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"MEMCPY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x1111\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1048576\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x00000000\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Negative di\",\n      \"script\": [\n        \"PUSH4\",\n        \"NEWBUFFER\",\n        \"PUSHM1\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x1111\",\n        \"PUSH0\",\n        \"PUSH2\",\n        \"MEMCPY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 9,\n                \"nextInstruction\": \"MEMCPY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x1111\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x00000000\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Negative si\",\n      \"script\": [\n        \"PUSH4\",\n        \"NEWBUFFER\",\n        \"PUSHINT32\",\n        \"0x00001000\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x1111\",\n        \"PUSHM1\",\n        \"PUSH2\",\n        \"MEMCPY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"MEMCPY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x1111\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1048576\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x00000000\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Negative n\",\n      \"script\": [\n        \"PUSH4\",\n        \"NEWBUFFER\",\n        \"PUSHINT32\",\n        \"0x00001000\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x1111\",\n        \"PUSH0\",\n        \"PUSHM1\",\n        \"MEMCPY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"MEMCPY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x1111\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1048576\n                  },\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x00000000\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Array]\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"PUSHINT32\",\n        \"0x00001000\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x1111\",\n        \"PUSH0\",\n        \"PUSH2\",\n        \"MEMCPY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\",\n            \"StepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"MEMCPY\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x1111\"\n                  },\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 1048576\n                  },\n                  {\n                    \"type\": \"Array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 5\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"No push\",\n      \"script\": [\n        \"MEMCPY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH4\",\n        \"NEWBUFFER\",\n        \"DUP\",\n        \"PUSH1\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x1111\",\n        \"PUSH0\",\n        \"PUSH2\",\n        \"MEMCPY\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x00111100\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Splice/NEWBUFFER.json",
    "content": "{\n  \"category\": \"Splice\",\n  \"name\": \"NEWBUFFER\",\n  \"tests\": [\n    {\n      \"name\": \"Max Item Length\",\n      \"script\": [\n        \"PUSHINT256\",\n        \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\",\n        \"NEWBUFFER\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 33,\n                \"nextInstruction\": \"NEWBUFFER\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": \"57896044618658097711785492504343953926634992332820282019728792003956564819967\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"-1 Length\",\n      \"script\": [\n        \"PUSHM1\",\n        \"NEWBUFFER\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"NEWBUFFER\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": -1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Array]\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"NEWBUFFER\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NEWBUFFER\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"No push\",\n      \"script\": [\n        \"NEWBUFFER\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [Integer]\",\n      \"script\": [\n        \"PUSH10\",\n        \"NEWBUFFER\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x00000000000000000000\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Splice/RIGHT.json",
    "content": "{\n  \"category\": \"Splice\",\n  \"name\": \"RIGHT\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"PUSH11\",\n        \"RIGHT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type [Map]\",\n      \"script\": [\n        \"PUSH4\",\n        \"NEWMAP\",\n        \"RIGHT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RIGHT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Negative value\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x03\",\n        \"0x010203\",\n        \"PUSHM1\",\n        \"RIGHT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RIGHT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x010203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Overflow string\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x03\",\n        \"0x010203\",\n        \"PUSH4\",\n        \"RIGHT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RIGHT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x010203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x03\",\n        \"0x010203\",\n        \"PUSH2\",\n        \"RIGHT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RIGHT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x010203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x0203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x0203\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test [whole input]\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x03\",\n        \"0x010203\",\n        \"PUSH3\",\n        \"RIGHT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RIGHT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x010203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 7,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Buffer\",\n                    \"value\": \"0x010203\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x010203\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Splice/SUBSTR.json",
    "content": "{\n  \"category\": \"Splice\",\n  \"name\": \"SUBSTR\",\n  \"tests\": [\n    {\n      \"name\": \"Without 3 items\",\n      \"script\": [\n        \"PUSH2\",\n        \"PUSH3\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SUBSTR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With negative count\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH0\",\n        \"PUSHM1\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"SUBSTR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With map as string\",\n      \"script\": [\n        \"NEWMAP\",\n        \"PUSH0\",\n        \"PUSH0\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"SUBSTR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With map as count\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSH0\",\n        \"NEWMAP\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"SUBSTR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With map as index\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWMAP\",\n        \"PUSH0\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"SUBSTR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With negative index\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSHM1\",\n        \"PUSH0\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"SUBSTR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Overflow string index\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0001\",\n        \"PUSH9\",\n        \"PUSH2\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"SUBSTR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 9\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x0001\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Overflow string count\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x0a\",\n        \"0x00010203040506070809\",\n        \"PUSH2\",\n        \"PUSH9\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 14,\n                \"nextInstruction\": \"SUBSTR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 9\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00010203040506070809\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x0a\",\n        \"0x00010203040506070809\",\n        \"PUSH2\",\n        \"PUSH1\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 14,\n                \"nextInstruction\": \"SUBSTR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x00010203040506070809\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x02\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Integer overflow Test\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0xff\",\n        \"0x414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141\",\n        \"PUSHDATA1\",\n        \"0x04\",\n        \"0xfd000000\",\n        \"PUSHDATA1\",\n        \"0x04\",\n        \"0x03ffff7f\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Count Exceed Range Test\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x0a\",\n        \"0x00010203040506070809\",\n        \"PUSH2\",\n        \"PUSHINT32\",\n        \"0x7FFFFFFF\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Index Exceed Range Test\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x0a\",\n        \"0x00010203040506070809\",\n        \"PUSHINT32\",\n        \"0x7FFFFFFF\",\n        \"PUSH2\",\n        \"SUBSTR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/CLEAR.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"CLEAR\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"CLEAR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With push\",\n      \"script\": [\n        \"PUSH2\",\n        \"CLEAR\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"CLEAR\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/DEPTH.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"DEPTH\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"DEPTH\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With push\",\n      \"script\": [\n        \"PUSH2\",\n        \"DEPTH\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"DEPTH\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"3xDEPTH\",\n      \"script\": [\n        \"DEPTH\",\n        \"DEPTH\",\n        \"DEPTH\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"DEPTH\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"DEPTH\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 0\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/DROP.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"DROP\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"DROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"PUSH5\",\n        \"DROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"DROP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/NIP.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"NIP\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"NIP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without two stack items\",\n      \"script\": [\n        \"PUSH5\",\n        \"NIP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"NIP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH0\",\n        \"PUSHDATA1\",\n        \"0x09\",\n        \"0x000000000000000000\",\n        \"NOT\",\n        \"NIP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 13,\n                \"nextInstruction\": \"NIP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 14,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/OVER.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"OVER\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"OVER\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"OVER\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"OVER\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 2 items\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"OVER\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"OVER\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 3 items\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"OVER\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"OVER\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 4\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/PICK.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"PICK\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"PICK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Pick outside\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"PICK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"PICK\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Less than 0\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSHM1\",\n        \"PICK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"PICK\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"NEWMAP\",\n        \"PICK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"PICK\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH2\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PICK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"PICK\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 4\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 0\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH2\",\n        \"PUSH1\",\n        \"PUSH0\",\n        \"PICK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"PICK\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 4\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/REVERSE3.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"REVERSE3\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"REVERSE3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With push\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"REVERSE3\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"REVERSE3\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/REVERSE4.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"REVERSE4\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"REVERSE4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With push\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"REVERSE4\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"REVERSE4\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 4\n              }\n            ],\n            \"refs\": 4\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/REVERSEN.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"REVERSEN\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"REVERSEN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"N = -1\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSHM1\",\n        \"REVERSEN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"N < DEPTH\",\n      \"script\": [\n        \"PUSH1\",\n        \"REVERSEN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Reverse 0 item\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH0\",\n        \"REVERSEN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"REVERSEN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Reverse 3 items\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH3\",\n        \"REVERSEN\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"REVERSEN\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/ROLL.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"ROLL\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"ROLL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With -1\",\n      \"script\": [\n        \"PUSHM1\",\n        \"ROLL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Pick outside\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH4\",\n        \"ROLL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"ROLL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 4\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Less than 0\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSHM1\",\n        \"ROLL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"ROLL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": -1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With 0\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"PUSH0\",\n        \"ROLL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"ROLL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong type\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"NEWMAP\",\n        \"ROLL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"ROLL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH2\",\n        \"PUSH1\",\n        \"PUSH2\",\n        \"ROLL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"ROLL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/ROT.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"ROT\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"ROT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"ROT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"ROT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With 2 items\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"ROT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"ROT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 3 items\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"ROT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"ROT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/SWAP.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"SWAP\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"SWAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With one push\",\n      \"script\": [\n        \"PUSH0\",\n        \"SWAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"SWAP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 2 items\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"SWAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"SWAP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test with 3 items\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"SWAP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"SWAP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/TUCK.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"TUCK\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"TUCK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Outside\",\n      \"script\": [\n        \"PUSH0\",\n        \"TUCK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"TUCK\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test - Last item\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"TUCK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"TUCK\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH2\",\n        \"PUSH3\",\n        \"TUCK\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"TUCK\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 4\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Stack/XDROP.json",
    "content": "{\n  \"category\": \"Stack\",\n  \"name\": \"XDROP\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"XDROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With -1\",\n      \"script\": [\n        \"PUSHM1\",\n        \"XDROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Overflow drop\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH2\",\n        \"PUSH1\",\n        \"PUSH3\",\n        \"XDROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"XDROP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Wrong index type [Map]\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH2\",\n        \"PUSH1\",\n        \"NEWMAP\",\n        \"XDROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"XDROP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"map\",\n                    \"value\": {}\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Real test\",\n      \"script\": [\n        \"PUSH3\",\n        \"PUSH2\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"XDROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"XDROP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 4\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Types/CONVERT.json",
    "content": "{\n  \"category\": \"Types\",\n  \"name\": \"CONVERT\",\n  \"tests\": [\n    {\n      \"name\": \"Null to Buffer\",\n      \"script\": [\n        \"PUSHNULL\",\n        \"CONVERT\",\n        \"0x30\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"CONVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"null\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Null to Boolean\",\n      \"script\": [\n        \"PUSHNULL\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"CONVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"null\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Struct to Array\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWSTRUCT\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH5\",\n        \"SETITEM\",\n        \"CONVERT\",\n        \"0x40\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"CONVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"array\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Struct to Boolean\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWSTRUCT\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"CONVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"struct\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Array to Boolean\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWARRAY\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"CONVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": []\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Array to Struct\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH5\",\n        \"SETITEM\",\n        \"CONVERT\",\n        \"0x41\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"CONVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 5\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"struct\",\n                \"value\": [\n                  {\n                    \"type\": \"Integer\",\n                    \"value\": 5\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Array to Integer\",\n      \"script\": [\n        \"PUSH1\",\n        \"NEWARRAY\",\n        \"DUP\",\n        \"PUSH0\",\n        \"PUSH4\",\n        \"SETITEM\",\n        \"CONVERT\",\n        \"0x21\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"CONVERT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"array\",\n                    \"value\": [\n                      {\n                        \"type\": \"Integer\",\n                        \"value\": 4\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Integer to ByteString\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x0A\",\n        \"CONVERT\",\n        \"0x28\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"ByteString\",\n                \"value\": \"0x0A\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Integer to Boolean\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x0A\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Integer to Boolean\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x00\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Integer to Boolean\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x01\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Integer to Buffer\",\n      \"script\": [\n        \"PUSHINT8\",\n        \"0x0A\",\n        \"CONVERT\",\n        \"0x30\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x0A\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ByteString to Buffer\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x0A\",\n        \"0x00000000000000000000\",\n        \"CONVERT\",\n        \"0x30\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Buffer\",\n                \"value\": \"0x00000000000000000000\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ByteString to Integer\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0A0B\",\n        \"CONVERT\",\n        \"0x21\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 2826\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ByteString to Boolean\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0A0B\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ByteString to Boolean\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0000\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ByteString to Boolean\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0001\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ByteString to Boolean\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01\",\n        \"0x01\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Buffer to ByteString\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x0A\",\n        \"0x00000000000000000000\",\n        \"CONVERT\",\n        \"0x30\",\n        \"CONVERT\",\n        \"0x28\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"ByteString\",\n                \"value\": \"0x00000000000000000000\"\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Buffer to Boolean\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01\",\n        \"0x00\",\n        \"CONVERT\",\n        \"0x30\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Buffer to Boolean\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01\",\n        \"0x02\",\n        \"CONVERT\",\n        \"0x30\",\n        \"CONVERT\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Buffer to Integer\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0102\",\n        \"CONVERT\",\n        \"0x30\",\n        \"CONVERT\",\n        \"0x21\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Integer\",\n                \"value\": 513\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Buffer to Integer (Exceed)\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x21\",\n        \"0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n        \"CONVERT\",\n        \"0x30\",\n        \"CONVERT\",\n        \"0x21\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Buffer to Any\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0102\",\n        \"CONVERT\",\n        \"0x30\",\n        \"CONVERT\",\n        \"0x00\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Buffer to Interop\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0102\",\n        \"CONVERT\",\n        \"0x30\",\n        \"CONVERT\",\n        \"0x60\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ByteString to non-defined\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x01\",\n        \"0xAA\",\n        \"CONVERT\",\n        \"0xFF\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Array to non-defined\",\n      \"script\": [\n        \"NEWARRAY0\",\n        \"CONVERT\",\n        \"0xFF\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Struct to non-defined\",\n      \"script\": [\n        \"NEWSTRUCT0\",\n        \"CONVERT\",\n        \"0xFF\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Null to non-defined\",\n      \"script\": [\n        \"PUSHNULL\",\n        \"CONVERT\",\n        \"0xFF\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Types/ISNULL.json",
    "content": "{\n  \"category\": \"Types\",\n  \"name\": \"ISNULL\",\n  \"tests\": [\n    {\n      \"name\": \"Without push\",\n      \"script\": [\n        \"ISNULL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Good definition\",\n      \"script\": [\n        \"PUSHNULL\",\n        \"ISNULL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"ISNULL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"With empty ByteString\",\n      \"script\": [\n        \"PUSH0\",\n        \"ISNULL\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"ISNULL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/OpCodes/Types/ISTYPE.json",
    "content": "{\n  \"category\": \"Types\",\n  \"name\": \"ISTYPE\",\n  \"tests\": [\n    {\n      \"name\": \"Array\",\n      \"script\": [\n        \"NEWARRAY0\",\n        \"ISTYPE\",\n        \"0x40\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Buffer\",\n      \"script\": [\n        \"PUSH0\",\n        \"NEWBUFFER\",\n        \"ISTYPE\",\n        \"0x30\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ByteString\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x00\",\n        \"ISTYPE\",\n        \"0x28\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Integer\",\n      \"script\": [\n        \"PUSH0\",\n        \"ISTYPE\",\n        \"0x21\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"InteropInterface\",\n      \"script\": [\n        \"SYSCALL\",\n        \"0x77777777\",\n        \"ISTYPE\",\n        \"0x60\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Map\",\n      \"script\": [\n        \"NEWMAP\",\n        \"ISTYPE\",\n        \"0x48\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Null\",\n      \"script\": [\n        \"PUSHNULL\",\n        \"ISTYPE\",\n        \"0x20\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": false\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Pointer\",\n      \"script\": [\n        \"PUSHA\",\n        \"0x00000000\",\n        \"ISTYPE\",\n        \"0x10\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Struct\",\n      \"script\": [\n        \"NEWSTRUCT0\",\n        \"ISTYPE\",\n        \"0x41\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"Execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"Boolean\",\n                \"value\": true\n              }\n            ],\n            \"refs\": 1\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/Others/Debugger.json",
    "content": "{\n  \"category\": \"Others\",\n  \"name\": \"Debugger\",\n  \"tests\": [\n    {\n      \"name\": \"Step Into\",\n      \"script\": [\n        \"PUSH1\",\n        \"CALL\",\n        \"0x04\",\n        \"PUSH3\",\n        \"RET\",\n        \"PUSH2\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 0,\n                \"nextInstruction\": \"PUSH1\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"CALL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 5,\n                \"nextInstruction\": \"PUSH2\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              },\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"PUSH3\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 6,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              },\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"PUSH3\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"PUSH3\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Step Out\",\n      \"script\": [\n        \"PUSH1\",\n        \"CALL\",\n        \"0x04\",\n        \"PUSH3\",\n        \"RET\",\n        \"PUSH2\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 0,\n                \"nextInstruction\": \"PUSH1\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"CALL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepOut\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Step Over\",\n      \"script\": [\n        \"PUSH1\",\n        \"CALL\",\n        \"0x04\",\n        \"PUSH3\",\n        \"RET\",\n        \"PUSH2\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 0,\n                \"nextInstruction\": \"PUSH1\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"CALL\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepOver\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"PUSH3\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepOver\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 3\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 2\n                  },\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1\n                  }\n                ]\n              }\n            ],\n            \"refs\": 3\n          }\n        },\n        {\n          \"actions\": [\n            \"stepOver\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Execute\",\n      \"script\": [\n        \"PUSH1\",\n        \"CALL\",\n        \"0x04\",\n        \"PUSH3\",\n        \"RET\",\n        \"PUSH2\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 0,\n                \"nextInstruction\": \"PUSH1\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"resultStack\": [\n              {\n                \"type\": \"integer\",\n                \"value\": 3\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 2\n              },\n              {\n                \"type\": \"integer\",\n                \"value\": 1\n              }\n            ],\n            \"refs\": 3\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/Others/Init.json",
    "content": "{\n  \"category\": \"Others\",\n  \"name\": \"Init\",\n  \"tests\": [\n    {\n      \"name\": \"Init script\",\n      \"script\": [\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 0,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Init script\",\n      \"script\": [\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/Others/InvocationLimits.json",
    "content": "{\n  \"category\": \"Limits\",\n  \"name\": \"Invocation limits\",\n  \"tests\": [\n    {\n      \"name\": \"More than 1024 ExecutionContext\",\n      \"script\": [\n        \"INITSSLOT\",\n        \"0x01\",\n        \"PUSHDATA1\",\n        \"0x02\",\n        \"0x0004\",\n        \"INC\",\n        \"STSFLD0\",\n        \"LDSFLD0\",\n        \"DEC\",\n        \"DUP\",\n        \"STSFLD0\",\n        \"JMPIFNOT\",\n        \"0x04\",\n        \"CALL\",\n        \"0xfa\",\n        \"RET\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"LDSFLD0\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1025\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 12,\n                \"nextInstruction\": \"JMPIFNOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1024\n                  }\n                ],\n                \"staticFields\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1024\n                  }\n                ]\n              }\n            ],\n            \"refs\": 2\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\",\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 8,\n                \"nextInstruction\": \"LDSFLD0\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1024\n                  }\n                ]\n              },\n              {\n                \"instructionPointer\": 16,\n                \"nextInstruction\": \"RET\",\n                \"staticFields\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 1024\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/Others/OtherCases.json",
    "content": "{\n  \"category\": \"Limits\",\n  \"name\": \"OtherCases\",\n  \"tests\": [\n    {\n      \"name\": \"Wrong script\",\n      \"script\": [\n        \"0xff\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Without script\",\n      \"script\": [],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/Others/ScriptLogic.json",
    "content": "{\n  \"category\": \"Others\",\n  \"name\": \"ScriptLogic\",\n  \"tests\": [\n    {\n      \"name\": \"Script logic\",\n      \"script\": [\n        \"PUSH0\",\n        \"NOT\",\n        \"NOT\",\n        \"DROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 1,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"integer\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 2,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": true\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 3,\n                \"nextInstruction\": \"DROP\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"Boolean\",\n                    \"value\": false\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 4,\n                \"nextInstruction\": \"RET\"\n              }\n            ],\n            \"refs\": 0\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/Others/StackItemLimits.json",
    "content": "{\n  \"category\": \"Limits\",\n  \"name\": \"Stack item limits [StackItemLimits] [StackItemLimits] [StackItemLimits]\",\n  \"tests\": [\n    {\n      \"name\": \"Max boolean ByteString\",\n      \"script\": [\n        \"PUSHDATA1\",\n        \"0x21\",\n        \"0x000000000000000000000000000000000000000000000000000000000000000000\",\n        \"NOT\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"BREAK\",\n            \"invocationStack\": [\n              {\n                \"instructionPointer\": 35,\n                \"nextInstruction\": \"NOT\",\n                \"evaluationStack\": [\n                  {\n                    \"type\": \"ByteString\",\n                    \"value\": \"0x000000000000000000000000000000000000000000000000000000000000000000\"\n                  }\n                ]\n              }\n            ],\n            \"refs\": 1\n          }\n        },\n        {\n          \"actions\": [\n            \"stepInto\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Max items with PUSHDATA (2048+1)\",\n      \"script\": [\n        \"PUSHINT16\",\n        \"0x0004\",\n        \"NEWARRAY\",\n        \"UNPACK\",\n        \"PUSHINT16\",\n        \"0xfe03\",\n        \"NEWARRAY\",\n        \"UNPACK\",\n        \"PUSHDATA1\",\n        \"0x01\",\n        \"0x01\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Tests/Others/StackLimits.json",
    "content": "{\n  \"category\": \"Limits\",\n  \"name\": \"Stack limits [StackLimits] [StackLimits] [StackLimits]\",\n  \"tests\": [\n    {\n      \"name\": \"Good: 2048 PUSH1 + 2048 DROP\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\",\n        \"DROP\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"HALT\",\n            \"refs\": 0\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"Bad: 2049 PUSH1\",\n      \"script\": [\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\",\n        \"PUSH1\"\n      ],\n      \"steps\": [\n        {\n          \"actions\": [\n            \"execute\"\n          ],\n          \"result\": {\n            \"state\": \"FAULT\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Types/TestEngine.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// TestEngine.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.VM;\nusing Neo.VM.Types;\nusing System;\n\nnamespace Neo.Test.Types;\n\npublic class TestEngine : ExecutionEngine\n{\n    public Exception FaultException { get; private set; }\n\n    public TestEngine() : base(ComposeJumpTable()) { }\n\n    public TestEngine(IReferenceCounter referenceCounter, ExecutionEngineLimits limits) : base(ComposeJumpTable(), referenceCounter, limits) { }\n\n    private static JumpTable ComposeJumpTable()\n    {\n        var jumpTable = new JumpTable();\n        jumpTable[OpCode.SYSCALL] = OnSysCall;\n        return jumpTable;\n    }\n\n    private static void OnSysCall(ExecutionEngine engine, Instruction instruction)\n    {\n        uint method = instruction.TokenU32;\n\n        if (method == 0x77777777)\n        {\n            engine.CurrentContext.EvaluationStack.Push(StackItem.FromInterface(new object()));\n            return;\n        }\n\n        if (method == 0xaddeadde)\n        {\n            engine.JumpTable.ExecuteThrow(engine, \"error\");\n            return;\n        }\n\n        throw new Exception();\n    }\n\n    protected override void OnFault(Exception ex)\n    {\n        FaultException = ex;\n        base.OnFault(ex);\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Types/VMUT.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMUT.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Newtonsoft.Json;\n\nnamespace Neo.Test.Types;\n\npublic class VMUT\n{\n    [JsonProperty]\n    public string Category { get; set; }\n\n    [JsonProperty]\n    public string Name { get; set; }\n\n    [JsonProperty]\n    public VMUTEntry[] Tests { get; set; }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Types/VMUTActionType.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMUTActionType.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nnamespace Neo.Test.Types;\n\npublic enum VMUTActionType\n{\n    Execute,\n\n    // Steps\n\n    StepInto,\n    StepOut,\n    StepOver,\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Types/VMUTEntry.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMUTEntry.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.Test.Converters;\nusing Newtonsoft.Json;\n\nnamespace Neo.Test.Types;\n\npublic class VMUTEntry\n{\n    [JsonProperty(Order = 1)]\n    public string Name { get; set; }\n\n    [JsonProperty(Order = 2), JsonConverter(typeof(ScriptConverter))]\n    public byte[] Script { get; set; }\n\n    [JsonProperty(Order = 3)]\n    public VMUTStep[] Steps { get; set; }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Types/VMUTExecutionContextState.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMUTExecutionContextState.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.Test.Converters;\nusing Neo.VM;\nusing Newtonsoft.Json;\n\nnamespace Neo.Test.Types;\n\npublic class VMUTExecutionContextState\n{\n    [JsonProperty]\n    public int InstructionPointer { get; set; }\n\n    [JsonProperty, JsonConverter(typeof(UppercaseEnum))]\n    public OpCode NextInstruction { get; set; }\n\n    // Stacks\n\n    [JsonProperty]\n    public VMUTStackItem[] EvaluationStack { get; set; }\n\n    // Slots\n\n    [JsonProperty]\n    public VMUTStackItem[] StaticFields { get; set; }\n\n    [JsonProperty]\n    public VMUTStackItem[] Arguments { get; set; }\n\n    [JsonProperty]\n    public VMUTStackItem[] LocalVariables { get; set; }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Types/VMUTExecutionEngineState.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMUTExecutionEngineState.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Neo.Test.Converters;\nusing Neo.VM;\nusing Newtonsoft.Json;\n\nnamespace Neo.Test.Types;\n\npublic class VMUTExecutionEngineState\n{\n    [JsonProperty, JsonConverter(typeof(UppercaseEnum))]\n    public VMState State { get; set; }\n\n    [JsonProperty]\n    public VMUTStackItem[] ResultStack { get; set; }\n\n    [JsonProperty]\n    public VMUTExecutionContextState[] InvocationStack { get; set; }\n\n    [JsonProperty]\n    public string ExceptionMessage { get; set; }\n\n    [JsonProperty]\n    public int? Refs { get; set; }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Types/VMUTStackItem.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMUTStackItem.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Neo.Test.Types;\n\npublic class VMUTStackItem\n{\n    [JsonProperty]\n    public VMUTStackItemType Type { get; set; }\n\n    [JsonProperty]\n    public JToken Value { get; set; }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Types/VMUTStackItemType.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMUTStackItemType.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nnamespace Neo.Test.Types;\n\npublic enum VMUTStackItemType\n{\n    /// <summary>\n    /// Null\n    /// </summary>\n    Null,\n\n    /// <summary>\n    /// An address of function\n    /// </summary>\n    Pointer,\n\n    /// <summary>\n    /// Boolean (true,false)\n    /// </summary>\n    Boolean,\n\n    /// <summary>\n    /// ByteString\n    /// </summary>\n    ByteString,\n\n    /// <summary>\t\n    /// ByteString as UTF8 string\t\n    /// </summary>\n    String,\n\n    /// <summary>\n    /// Mutable byte array\n    /// </summary>\n    Buffer,\n\n    /// <summary>\n    /// InteropInterface\n    /// </summary>\n    Interop,\n\n    /// <summary>\n    /// BigInteger\n    /// </summary>\n    Integer,\n\n    /// <summary>\n    /// Array\n    /// </summary>\n    Array,\n\n    /// <summary>\n    /// Struct\n    /// </summary>\n    Struct,\n\n    /// <summary>\n    /// Map\n    /// </summary>\n    Map\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/Types/VMUTStep.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMUTStep.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Newtonsoft.Json;\n\nnamespace Neo.Test.Types;\n\npublic class VMUTStep\n{\n    [JsonProperty]\n    public string Name { get; set; }\n\n    [JsonProperty]\n    public VMUTActionType[] Actions { get; set; }\n\n    [JsonProperty]\n    public VMUTExecutionEngineState Result { get; set; }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_Debugger.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_Debugger.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_Debugger\n{\n    [TestMethod]\n    public void TestBreakPoint()\n    {\n        using ExecutionEngine engine = new();\n        using ScriptBuilder script = new();\n        script.Emit(OpCode.NOP);\n        script.Emit(OpCode.NOP);\n        script.Emit(OpCode.NOP);\n        script.Emit(OpCode.NOP);\n\n        engine.LoadScript(script.ToArray());\n\n        Debugger debugger = new(engine);\n\n        Assert.IsFalse(debugger.RemoveBreakPoint(engine.CurrentContext.Script, 3));\n\n        Assert.AreEqual(OpCode.NOP, engine.CurrentContext.NextInstruction.OpCode);\n\n        debugger.AddBreakPoint(engine.CurrentContext.Script, 2);\n        debugger.AddBreakPoint(engine.CurrentContext.Script, 3);\n        debugger.Execute();\n        Assert.AreEqual(OpCode.NOP, engine.CurrentContext.NextInstruction.OpCode);\n        Assert.AreEqual(2, engine.CurrentContext.InstructionPointer);\n        Assert.AreEqual(VMState.BREAK, engine.State);\n\n        Assert.IsTrue(debugger.RemoveBreakPoint(engine.CurrentContext.Script, 2));\n        Assert.IsFalse(debugger.RemoveBreakPoint(engine.CurrentContext.Script, 2));\n        Assert.IsTrue(debugger.RemoveBreakPoint(engine.CurrentContext.Script, 3));\n        Assert.IsFalse(debugger.RemoveBreakPoint(engine.CurrentContext.Script, 3));\n        debugger.Execute();\n        Assert.AreEqual(VMState.HALT, engine.State);\n    }\n\n    [TestMethod]\n    public void TestWithoutBreakPoints()\n    {\n        using ExecutionEngine engine = new();\n        using ScriptBuilder script = new();\n        script.Emit(OpCode.NOP);\n        script.Emit(OpCode.NOP);\n        script.Emit(OpCode.NOP);\n        script.Emit(OpCode.NOP);\n\n        engine.LoadScript(script.ToArray());\n\n        Debugger debugger = new(engine);\n\n        Assert.AreEqual(OpCode.NOP, engine.CurrentContext.NextInstruction.OpCode);\n\n        debugger.Execute();\n\n        Assert.IsNull(engine.CurrentContext);\n        Assert.AreEqual(VMState.HALT, engine.State);\n    }\n\n    [TestMethod]\n    public void TestWithoutDebugger()\n    {\n        using ExecutionEngine engine = new();\n        using ScriptBuilder script = new();\n        script.Emit(OpCode.NOP);\n        script.Emit(OpCode.NOP);\n        script.Emit(OpCode.NOP);\n        script.Emit(OpCode.NOP);\n\n        engine.LoadScript(script.ToArray());\n\n        Assert.AreEqual(OpCode.NOP, engine.CurrentContext.NextInstruction.OpCode);\n\n        engine.Execute();\n\n        Assert.IsNull(engine.CurrentContext);\n        Assert.AreEqual(VMState.HALT, engine.State);\n    }\n\n    [TestMethod]\n    public void TestStepOver()\n    {\n        using ExecutionEngine engine = new();\n        using ScriptBuilder script = new();\n        /* ┌     CALL\n           │  ┌> NOT\n           │  │  RET\n           └> │  PUSH0\n            └─┘  RET */\n        script.EmitCall(4);\n        script.Emit(OpCode.NOT);\n        script.Emit(OpCode.RET);\n        script.Emit(OpCode.PUSH0);\n        script.Emit(OpCode.RET);\n\n        engine.LoadScript(script.ToArray());\n\n        Debugger debugger = new(engine);\n\n        Assert.AreEqual(OpCode.NOT, engine.CurrentContext.NextInstruction.OpCode);\n        Assert.AreEqual(VMState.BREAK, debugger.StepOver());\n        Assert.AreEqual(2, engine.CurrentContext.InstructionPointer);\n        Assert.AreEqual(VMState.BREAK, engine.State);\n        Assert.AreEqual(OpCode.RET, engine.CurrentContext.NextInstruction.OpCode);\n\n        debugger.Execute();\n\n        Assert.IsTrue(engine.ResultStack.Pop().GetBoolean());\n        Assert.AreEqual(VMState.HALT, engine.State);\n\n        // Test step over again\n\n        Assert.AreEqual(VMState.HALT, debugger.StepOver());\n        Assert.AreEqual(VMState.HALT, engine.State);\n    }\n\n    [TestMethod]\n    public void TestStepInto()\n    {\n        using ExecutionEngine engine = new();\n        using ScriptBuilder script = new();\n        /* ┌     CALL\n           │  ┌> NOT\n           │  │  RET\n           └> │  PUSH0\n            └─┘  RET */\n        script.EmitCall(4);\n        script.Emit(OpCode.NOT);\n        script.Emit(OpCode.RET);\n        script.Emit(OpCode.PUSH0);\n        script.Emit(OpCode.RET);\n\n        engine.LoadScript(script.ToArray());\n\n        Debugger debugger = new(engine);\n\n        var context = engine.CurrentContext;\n\n        Assert.AreEqual(context, engine.CurrentContext);\n        Assert.AreEqual(context, engine.EntryContext);\n        Assert.AreEqual(OpCode.NOT, engine.CurrentContext.NextInstruction.OpCode);\n\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n\n        Assert.AreNotEqual(context, engine.CurrentContext);\n        Assert.AreEqual(context, engine.EntryContext);\n        Assert.AreEqual(OpCode.RET, engine.CurrentContext.NextInstruction.OpCode);\n\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n\n        Assert.AreEqual(context, engine.CurrentContext);\n        Assert.AreEqual(context, engine.EntryContext);\n        Assert.AreEqual(OpCode.RET, engine.CurrentContext.NextInstruction.OpCode);\n\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(VMState.HALT, debugger.StepInto());\n\n        Assert.IsTrue(engine.ResultStack.Pop().GetBoolean());\n        Assert.AreEqual(VMState.HALT, engine.State);\n\n        // Test step into again\n\n        Assert.AreEqual(VMState.HALT, debugger.StepInto());\n        Assert.AreEqual(VMState.HALT, engine.State);\n    }\n\n    [TestMethod]\n    public void TestBreakPointStepOver()\n    {\n        using ExecutionEngine engine = new();\n        using ScriptBuilder script = new();\n        /* ┌     CALL\n           │  ┌> NOT\n           │  │  RET\n           └>X│  PUSH0\n             └┘  RET */\n        script.EmitCall(4);\n        script.Emit(OpCode.NOT);\n        script.Emit(OpCode.RET);\n        script.Emit(OpCode.PUSH0);\n        script.Emit(OpCode.RET);\n\n        engine.LoadScript(script.ToArray());\n\n        Debugger debugger = new(engine);\n\n        Assert.AreEqual(OpCode.NOT, engine.CurrentContext.NextInstruction.OpCode);\n\n        debugger.AddBreakPoint(engine.CurrentContext.Script, 5);\n        Assert.AreEqual(VMState.BREAK, debugger.StepOver());\n\n        Assert.IsNull(engine.CurrentContext.NextInstruction);\n        Assert.AreEqual(5, engine.CurrentContext.InstructionPointer);\n        Assert.AreEqual(VMState.BREAK, engine.State);\n\n        debugger.Execute();\n\n        Assert.IsTrue(engine.ResultStack.Pop().GetBoolean());\n        Assert.AreEqual(VMState.HALT, engine.State);\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_EvaluationStack.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_EvaluationStack.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.Test.Extensions;\nusing Neo.VM;\nusing Neo.VM.Types;\nusing System;\nusing System.Collections;\nusing System.Linq;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_EvaluationStack\n{\n    private static EvaluationStack CreateOrderedStack(int count)\n    {\n        var check = new Integer[count];\n        var stack = new EvaluationStack(new ReferenceCounter());\n\n        for (int x = 1; x <= count; x++)\n        {\n            stack.Push(x);\n            check[x - 1] = x;\n        }\n\n        Assert.AreEqual(count, stack.Count);\n        CollectionAssert.AreEqual(check, stack.ToArray());\n\n        return stack;\n    }\n\n    public static IEnumerable GetEnumerable(IEnumerator enumerator)\n    {\n        while (enumerator.MoveNext()) yield return enumerator.Current;\n    }\n\n    [TestMethod]\n    public void TestClear()\n    {\n        var stack = CreateOrderedStack(3);\n        stack.Clear();\n        Assert.AreEqual(0, stack.Count);\n    }\n\n    [TestMethod]\n    public void TestCopyTo()\n    {\n        var stack = CreateOrderedStack(3);\n        var copy = new EvaluationStack(new ReferenceCounter());\n\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => stack.CopyTo(copy, -2));\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => stack.CopyTo(copy, 4));\n\n        stack.CopyTo(copy, 0);\n\n        Assert.AreEqual(3, stack.Count);\n        Assert.AreEqual(0, copy.Count);\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, stack.ToArray());\n\n        stack.CopyTo(copy, -1);\n\n        Assert.AreEqual(3, stack.Count);\n        Assert.AreEqual(3, copy.Count);\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, stack.ToArray());\n\n        // Test IEnumerable\n\n        var enumerable = (IEnumerable)copy;\n        var enumerator = enumerable.GetEnumerator();\n\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, GetEnumerable(enumerator).Cast<Integer>().ToArray());\n\n        copy.CopyTo(stack, 2);\n\n        Assert.AreEqual(5, stack.Count);\n        Assert.AreEqual(3, copy.Count);\n\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3, 2, 3 }, stack.ToArray());\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, copy.ToArray());\n    }\n\n    [TestMethod]\n    public void TestMoveTo()\n    {\n        var stack = CreateOrderedStack(3);\n        var other = new EvaluationStack(new ReferenceCounter());\n\n        stack.MoveTo(other, 0);\n\n        Assert.AreEqual(3, stack.Count);\n        Assert.AreEqual(0, other.Count);\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, stack.ToArray());\n\n        stack.MoveTo(other, -1);\n\n        Assert.AreEqual(0, stack.Count);\n        Assert.AreEqual(3, other.Count);\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, other.ToArray());\n\n        // Test IEnumerable\n\n        var enumerable = (IEnumerable)other;\n        var enumerator = enumerable.GetEnumerator();\n\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, GetEnumerable(enumerator).Cast<Integer>().ToArray());\n\n        other.MoveTo(stack, 2);\n\n        Assert.AreEqual(2, stack.Count);\n        Assert.AreEqual(1, other.Count);\n\n        CollectionAssert.AreEqual(new Integer[] { 2, 3 }, stack.ToArray());\n        CollectionAssert.AreEqual(new Integer[] { 1 }, other.ToArray());\n    }\n\n    [TestMethod]\n    public void TestInsertPeek()\n    {\n        var stack = new EvaluationStack(new ReferenceCounter());\n\n        stack.Insert(0, 3);\n        stack.Insert(1, 1);\n        stack.Insert(1, 2);\n\n        Assert.ThrowsExactly<InvalidOperationException>(() => stack.Insert(4, 2));\n\n        Assert.AreEqual(3, stack.Count);\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, stack.ToArray());\n\n        Assert.AreEqual(3, stack.Peek(0));\n        Assert.AreEqual(2, stack.Peek(1));\n        Assert.AreEqual(1, stack.Peek(-1));\n\n        Assert.ThrowsExactly<InvalidOperationException>(() => _ = stack.Peek(-4));\n    }\n\n    [TestMethod]\n    public void TestPopPush()\n    {\n        var stack = CreateOrderedStack(3);\n\n        Assert.AreEqual(3, stack.Pop());\n        Assert.AreEqual(2, stack.Pop());\n        Assert.AreEqual(1, stack.Pop());\n\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = stack.Pop());\n\n        stack = CreateOrderedStack(3);\n\n        Assert.IsTrue(stack.Pop<Integer>().Equals(3));\n        Assert.IsTrue(stack.Pop<Integer>().Equals(2));\n        Assert.IsTrue(stack.Pop<Integer>().Equals(1));\n\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = stack.Pop<Integer>());\n    }\n\n    [TestMethod]\n    public void TestRemove()\n    {\n        var stack = CreateOrderedStack(3);\n\n        Assert.IsTrue(stack.Remove<Integer>(0).Equals(3));\n        Assert.IsTrue(stack.Remove<Integer>(0).Equals(2));\n        Assert.IsTrue(stack.Remove<Integer>(-1).Equals(1));\n\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = stack.Remove<Integer>(0));\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = stack.Remove<Integer>(-1));\n    }\n\n    [TestMethod]\n    public void TestReverse()\n    {\n        var stack = CreateOrderedStack(3);\n\n        stack.Reverse(3);\n        Assert.IsTrue(stack.Pop<Integer>().Equals(1));\n        Assert.IsTrue(stack.Pop<Integer>().Equals(2));\n        Assert.IsTrue(stack.Pop<Integer>().Equals(3));\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = stack.Pop<Integer>().Equals(0));\n\n        stack = CreateOrderedStack(3);\n\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => stack.Reverse(-1));\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => stack.Reverse(4));\n\n        stack.Reverse(1);\n        Assert.IsTrue(stack.Pop<Integer>().Equals(3));\n        Assert.IsTrue(stack.Pop<Integer>().Equals(2));\n        Assert.IsTrue(stack.Pop<Integer>().Equals(1));\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = stack.Pop<Integer>().Equals(0));\n    }\n\n    [TestMethod]\n    public void TestEvaluationStackPrint()\n    {\n        var stack = new EvaluationStack(new ReferenceCounter());\n\n        stack.Insert(0, 3);\n        stack.Insert(1, 1);\n        stack.Insert(2, \"test\");\n        stack.Insert(3, true);\n\n        Assert.AreEqual(\"[Boolean(True), ByteString(\\\"test\\\"), Integer(1), Integer(3)]\", stack.ToString());\n    }\n\n    [TestMethod]\n    public void TestPrintInvalidUTF8()\n    {\n        var stack = new EvaluationStack(new ReferenceCounter());\n        stack.Insert(0, \"4CC95219999D421243C8161E3FC0F4290C067845\".FromHexString());\n        Assert.AreEqual(\"[ByteString(\\\"Base64: TMlSGZmdQhJDyBYeP8D0KQwGeEU=\\\")]\", stack.ToString());\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_ExecutionContext.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_ExecutionContext.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_ExecutionContext\n{\n    class TestState\n    {\n        public bool Flag = false;\n    }\n\n    [TestMethod]\n    public void TestStateTest()\n    {\n        var context = new ExecutionContext(Array.Empty<byte>(), -1, new ReferenceCounter());\n\n        // Test factory\n\n        var flag = context.GetState(() => new TestState() { Flag = true });\n        Assert.IsTrue(flag.Flag);\n\n        flag.Flag = false;\n\n        flag = context.GetState(() => new TestState() { Flag = true });\n        Assert.IsFalse(flag.Flag);\n\n        // Test new\n\n        var stack = context.GetState<Stack<int>>();\n        Assert.IsEmpty(stack);\n        stack.Push(100);\n        stack = context.GetState<Stack<int>>();\n        Assert.AreEqual(100, stack.Pop());\n        stack.Push(100);\n\n        // Test clone\n\n        var copy = context.Clone();\n        var copyStack = copy.GetState<Stack<int>>();\n        Assert.HasCount(1, copyStack);\n        copyStack.Push(200);\n        copyStack = context.GetState<Stack<int>>();\n        Assert.AreEqual(200, copyStack.Pop());\n        Assert.AreEqual(100, copyStack.Pop());\n        copyStack.Push(200);\n\n        stack = context.GetState<Stack<int>>();\n        Assert.AreEqual(200, stack.Pop());\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_ReferenceCounter.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_ReferenceCounter.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\nusing Neo.VM.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.Numerics;\nusing Array = Neo.VM.Types.Array;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_ReferenceCounter\n{\n    [TestMethod]\n    public void TestCircularReferences()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.INITSSLOT, new byte[] { 1 }); //{}|{null}:1\n        sb.EmitPush(0); //{0}|{null}:2\n        sb.Emit(OpCode.NEWARRAY); //{A[]}|{null}:2\n        sb.Emit(OpCode.DUP); //{A[],A[]}|{null}:3\n        sb.Emit(OpCode.DUP); //{A[],A[],A[]}|{null}:4\n        sb.Emit(OpCode.APPEND); //{A[A]}|{null}:3\n        sb.Emit(OpCode.DUP); //{A[A],A[A]}|{null}:4\n        sb.EmitPush(0); //{A[A],A[A],0}|{null}:5\n        sb.Emit(OpCode.NEWARRAY); //{A[A],A[A],B[]}|{null}:5\n        sb.Emit(OpCode.STSFLD0); //{A[A],A[A]}|{B[]}:4\n        sb.Emit(OpCode.LDSFLD0); //{A[A],A[A],B[]}|{B[]}:5\n        sb.Emit(OpCode.APPEND); //{A[A,B]}|{B[]}:4\n        sb.Emit(OpCode.LDSFLD0); //{A[A,B],B[]}|{B[]}:5\n        sb.EmitPush(0); //{A[A,B],B[],0}|{B[]}:6\n        sb.Emit(OpCode.NEWARRAY); //{A[A,B],B[],C[]}|{B[]}:6\n        sb.Emit(OpCode.TUCK); //{A[A,B],C[],B[],C[]}|{B[]}:7\n        sb.Emit(OpCode.APPEND); //{A[A,B],C[]}|{B[C]}:6\n        sb.EmitPush(0); //{A[A,B],C[],0}|{B[C]}:7\n        sb.Emit(OpCode.NEWARRAY); //{A[A,B],C[],D[]}|{B[C]}:7\n        sb.Emit(OpCode.TUCK); //{A[A,B],D[],C[],D[]}|{B[C]}:8\n        sb.Emit(OpCode.APPEND); //{A[A,B],D[]}|{B[C[D]]}:7\n        sb.Emit(OpCode.LDSFLD0); //{A[A,B],D[],B[C]}|{B[C[D]]}:8\n        sb.Emit(OpCode.APPEND); //{A[A,B]}|{B[C[D[B]]]}:7\n        sb.Emit(OpCode.PUSHNULL); //{A[A,B],null}|{B[C[D[B]]]}:8\n        sb.Emit(OpCode.STSFLD0); //{A[A,B[C[D[B]]]]}|{null}:7\n        sb.Emit(OpCode.DUP); //{A[A,B[C[D[B]]]],A[A,B]}|{null}:8\n        sb.EmitPush(1); //{A[A,B[C[D[B]]]],A[A,B],1}|{null}:9\n        sb.Emit(OpCode.REMOVE); //{A[A]}|{null}:3\n        sb.Emit(OpCode.STSFLD0); //{}|{A[A]}:2\n        sb.Emit(OpCode.RET); //{}:0\n\n        using ExecutionEngine engine = new();\n        Debugger debugger = new(engine);\n        engine.LoadScript(sb.ToArray());\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(1, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(2, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(2, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(3, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(4, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(3, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(4, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(5, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(5, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(4, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(5, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(4, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(5, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(6, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(6, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(7, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(6, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(7, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(7, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(8, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(7, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(8, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(7, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(8, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(7, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(8, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(9, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(6, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(5, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.HALT, debugger.Execute());\n        Assert.AreEqual(4, engine.ReferenceCounter.Count);\n    }\n\n    [TestMethod]\n    public void TestRemoveReferrer()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.INITSSLOT, new byte[] { 1 }); //{}|{null}:1\n        sb.EmitPush(0); //{0}|{null}:2\n        sb.Emit(OpCode.NEWARRAY); //{A[]}|{null}:2\n        sb.Emit(OpCode.DUP); //{A[],A[]}|{null}:3\n        sb.EmitPush(0); //{A[],A[],0}|{null}:4\n        sb.Emit(OpCode.NEWARRAY); //{A[],A[],B[]}|{null}:4\n        sb.Emit(OpCode.STSFLD0); //{A[],A[]}|{B[]}:3\n        sb.Emit(OpCode.LDSFLD0); //{A[],A[],B[]}|{B[]}:4\n        sb.Emit(OpCode.APPEND); //{A[B]}|{B[]}:3\n        sb.Emit(OpCode.DROP); //{}|{B[]}:1\n        sb.Emit(OpCode.RET); //{}:0\n\n        using ExecutionEngine engine = new();\n        Debugger debugger = new(engine);\n        engine.LoadScript(sb.ToArray());\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(1, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(2, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(2, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(3, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(4, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(4, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(3, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(4, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(3, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.BREAK, debugger.StepInto());\n        Assert.AreEqual(1, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.HALT, debugger.Execute());\n        Assert.AreEqual(0, engine.ReferenceCounter.Count);\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferredWithArray()\n    {\n        using ScriptBuilder sb = new();\n\n        sb.EmitPush(ExecutionEngineLimits.Default.MaxStackSize - 1);\n        sb.Emit(OpCode.NEWARRAY);\n\n        // Good with MaxStackSize\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual((int)ExecutionEngineLimits.Default.MaxStackSize, engine.ReferenceCounter.Count);\n        }\n\n        // Fault with MaxStackSize+1\n\n        sb.Emit(OpCode.PUSH1);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.FAULT, engine.Execute());\n            Assert.AreEqual((int)ExecutionEngineLimits.Default.MaxStackSize + 1, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred()\n    {\n        using ScriptBuilder sb = new();\n\n        for (int x = 0; x < ExecutionEngineLimits.Default.MaxStackSize; x++)\n            sb.Emit(OpCode.PUSH1);\n\n        // Good with MaxStackSize\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual((int)ExecutionEngineLimits.Default.MaxStackSize, engine.ReferenceCounter.Count);\n        }\n\n        // Fault with MaxStackSize+1\n\n        sb.Emit(OpCode.PUSH1);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.FAULT, engine.Execute());\n            Assert.AreEqual((int)ExecutionEngineLimits.Default.MaxStackSize + 1, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_PopItemArray()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.POPITEM);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Array(engine.ReferenceCounter, new StackItem[] { 42 }));\n            Assert.AreEqual(2, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(1, engine.ResultStack.Count);\n\n            Assert.AreEqual(1, engine.ReferenceCounter.Count);\n\n            engine.ResultStack.Pop(); // pop Array from stack.\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_Append()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.APPEND);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Array(engine.ReferenceCounter, new StackItem[] { }));\n            engine.Push(new Integer(42));\n            Assert.AreEqual(2, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(0, engine.ResultStack.Count);\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_DupAppend()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.DUP);\n        sb.Emit(OpCode.PUSH0);\n        sb.Emit(OpCode.APPEND);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Array(engine.ReferenceCounter, new StackItem[] { }));\n            Assert.AreEqual(1, engine.ReferenceCounter.Count);\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(1, engine.ResultStack.Count);\n\n            Assert.AreEqual(2, engine.ReferenceCounter.Count);\n\n            engine.ResultStack.Pop(); // pop Array from stack.\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_SetItemMap()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.SETITEM);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Map(engine.ReferenceCounter));\n            engine.Push(new Integer(0));\n            engine.Push(new Integer(100500));\n            Assert.AreEqual(3, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(0, engine.ResultStack.Count);\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_DupSetItemMap()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.DUP);\n        sb.Emit(OpCode.PUSH0);\n        sb.Emit(OpCode.PUSH1);\n        sb.Emit(OpCode.SETITEM);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Map(engine.ReferenceCounter));\n            Assert.AreEqual(1, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(1, engine.ResultStack.Count);\n\n            Assert.AreEqual(3, engine.ReferenceCounter.Count);\n\n            engine.ResultStack.Pop(); // pop Map from stack.\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_SetItemArray()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.SETITEM);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Array(engine.ReferenceCounter, new StackItem[] { 42 }));\n            engine.Push(new Integer(0));\n            engine.Push(new Array(engine.ReferenceCounter, new StackItem[] { 42 }));\n            Assert.AreEqual(5, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(0, engine.ResultStack.Count);\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_RemoveArray()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.REMOVE);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Array(engine.ReferenceCounter, new StackItem[] { 42 }));\n            engine.Push(new Integer(0));\n            Assert.AreEqual(3, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(0, engine.ResultStack.Count);\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_RemoveStruct()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.REMOVE);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Struct(engine.ReferenceCounter, new StackItem[] { 42 }));\n            engine.Push(new Integer(0));\n            Assert.AreEqual(3, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(0, engine.ResultStack.Count);\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_RemoveMap()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.REMOVE);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Map(engine.ReferenceCounter) { [new Integer(0)] = StackItem.True });\n            engine.Push(new Integer(0));\n            Assert.AreEqual(4, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(0, engine.ResultStack.Count);\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_DupRemoveArray()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.DUP);\n        sb.Emit(OpCode.PUSH0);\n        sb.Emit(OpCode.REMOVE);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Array(engine.ReferenceCounter, new StackItem[] { 42 }));\n            Assert.AreEqual(2, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(1, engine.ResultStack.Count);\n\n            Assert.AreEqual(1, engine.ReferenceCounter.Count);\n        }\n    }\n\n\n    [TestMethod]\n    public void TestCheckZeroReferred_DupRemoveStruct()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.DUP);\n        sb.Emit(OpCode.PUSH0);\n        sb.Emit(OpCode.REMOVE);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Struct(engine.ReferenceCounter, new StackItem[] { 42 }));\n            Assert.AreEqual(2, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(1, engine.ResultStack.Count);\n\n            Assert.AreEqual(1, engine.ReferenceCounter.Count);\n        }\n    }\n\n\n    [TestMethod]\n    public void TestCheckZeroReferred_DupRemoveMap()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.DUP);\n        sb.Emit(OpCode.PUSH0);\n        sb.Emit(OpCode.REMOVE);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Map(engine.ReferenceCounter) { [new Integer(0)] = StackItem.True });\n            Assert.AreEqual(3, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(1, engine.ResultStack.Count);\n\n            Assert.AreEqual(1, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_ClearItemsArray()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.CLEARITEMS);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Array(engine.ReferenceCounter, new StackItem[] { 42 }));\n            Assert.AreEqual(2, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(0, engine.ResultStack.Count);\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_ClearItemsStruct()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.CLEARITEMS);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Struct(engine.ReferenceCounter, new StackItem[] { 42 }));\n            Assert.AreEqual(2, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(0, engine.ResultStack.Count);\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_ClearItemsMap()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.CLEARITEMS);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Map(engine.ReferenceCounter) { [new Integer(0)] = StackItem.True });\n            Assert.AreEqual(3, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(0, engine.ResultStack.Count);\n\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_DupClearItemsArray()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.DUP);\n        sb.Emit(OpCode.CLEARITEMS);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Array(engine.ReferenceCounter, new StackItem[] { 42 }));\n            Assert.AreEqual(2, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(1, engine.ResultStack.Count);\n\n            Assert.AreEqual(1, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_DupClearItemsStruct()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.DUP);\n        sb.Emit(OpCode.CLEARITEMS);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Struct(engine.ReferenceCounter, new StackItem[] { 42 }));\n            Assert.AreEqual(2, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(1, engine.ResultStack.Count);\n\n            Assert.AreEqual(1, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_DupClearItemsMap()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.DUP);\n        sb.Emit(OpCode.CLEARITEMS);\n\n        using (ExecutionEngine engine = new())\n        {\n            engine.LoadScript(sb.ToArray());\n            Assert.AreEqual(0, engine.ReferenceCounter.Count);\n\n            engine.Push(new Map(engine.ReferenceCounter) { [new Integer(0)] = StackItem.True });\n            Assert.AreEqual(3, engine.ReferenceCounter.Count);\n\n            Assert.AreEqual(VMState.HALT, engine.Execute());\n            Assert.AreEqual(1, engine.ResultStack.Count);\n\n            Assert.AreEqual(1, engine.ReferenceCounter.Count);\n        }\n    }\n\n    [TestMethod]\n    public void TestArrayNoPush()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.RET);\n        using ExecutionEngine engine = new(null, new ReferenceCounter(), ExecutionEngineLimits.Default);\n        engine.LoadScript(sb.ToArray());\n        Assert.AreEqual(0, engine.ReferenceCounter.Count);\n        Array array = new(engine.ReferenceCounter, new StackItem[] { 1, 2, 3, 4 });\n        Assert.AreEqual(array.Count, engine.ReferenceCounter.Count);\n        Assert.AreEqual(VMState.HALT, engine.Execute());\n        Assert.AreEqual(array.Count, engine.ReferenceCounter.Count);\n    }\n\n    [TestMethod]\n    public void TestInvalidReferenceStackItem()\n    {\n        var reference = new ReferenceCounter();\n        var arr = new Array(reference);\n        var arr2 = new Array();\n\n        for (var i = 0; i < 10; i++)\n        {\n            arr2.Add(i);\n        }\n\n        Assert.ThrowsExactly<InvalidOperationException>(() => arr.Add(arr2));\n    }\n\n    [TestMethod]\n    public void TestCheckPostExecution()\n    {\n        foreach (var refCounter in new IReferenceCounter[] { new ReferenceCounter(), new ReferenceCounterV2() })\n        {\n            for (int i = 0; i < ExecutionEngineLimits.Default.MaxStackSize; i++)\n            {\n                refCounter.AddStackReference(StackItem.Null);\n            }\n            refCounter.CheckPostExecution();\n            refCounter.AddStackReference(StackItem.Null);\n            Assert.ThrowsExactly<InvalidOperationException>(() => refCounter.CheckPostExecution());\n        }\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_ReferenceCounterComprehensive.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_ReferenceCounterComprehensive.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\nusing Neo.VM.Types;\nusing Array = Neo.VM.Types.Array;\nusing Buffer = Neo.VM.Types.Buffer;\n\nnamespace Neo.Test;\n\n/// <summary>\n/// Comprehensive unit tests for ReferenceCounter to ensure behavioral consistency\n/// when switching to a new RC implementation.\n///\n/// Test Categories:\n/// 1. Basic Stack Reference Operations\n/// 2. Object Reference Operations (CompoundType relationships)\n/// 3. Zero-Referred Item Management\n/// 4. Circular Reference Detection (Tarjan SCC)\n/// 5. Mixed Reference Scenarios\n/// 6. Edge Cases and Boundary Conditions\n/// 7. Type-Specific Tracking (Array, Map, Struct, Buffer)\n/// 8. Cache Invalidation Scenarios\n/// </summary>\n[TestClass]\npublic class UT_ReferenceCounterComprehensive\n{\n    #region 1. Basic Stack Reference Operations\n\n    [TestMethod]\n    public void TestAddStackReference_SingleItem_CountIncreases()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        Assert.AreEqual(0, rc.Count);\n        rc.AddStackReference(array);\n        Assert.AreEqual(1, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestAddStackReference_MultipleCount_CountIncreasesCorrectly()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array, 5);\n        Assert.AreEqual(5, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestRemoveStackReference_SingleItem_CountDecreases()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array, 3);\n        Assert.AreEqual(3, rc.Count);\n\n        rc.RemoveStackReference(array);\n        Assert.AreEqual(2, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestStackReference_NonTrackedType_CountStillChanges()\n    {\n        var rc = new ReferenceCounter();\n        StackItem intItem = 42; // Integer - not tracked\n\n        rc.AddStackReference(intItem);\n        Assert.AreEqual(1, rc.Count);\n\n        rc.RemoveStackReference(intItem);\n        Assert.AreEqual(0, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestStackReference_Buffer_IsTracked()\n    {\n        var rc = new ReferenceCounter();\n        var buffer = new Buffer(10);\n\n        rc.AddStackReference(buffer);\n        Assert.AreEqual(1, rc.Count);\n\n        rc.AddStackReference(buffer);\n        Assert.AreEqual(2, rc.Count);\n    }\n\n    #endregion\n\n    #region 2. Object Reference Operations\n\n    [TestMethod]\n    public void TestAddReference_ParentChild_CountIncreases()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n        Assert.AreEqual(1, rc.Count);\n\n        rc.AddReference(child, parent);\n        Assert.AreEqual(2, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestRemoveReference_ParentChild_CountDecreases()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n        rc.AddReference(child, parent);\n        Assert.AreEqual(2, rc.Count);\n\n        rc.RemoveReference(child, parent);\n        Assert.AreEqual(1, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestAddReference_MultipleParents_TracksCorrectly()\n    {\n        var rc = new ReferenceCounter();\n        var parent1 = new Array(rc);\n        var parent2 = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent1);\n        rc.AddStackReference(parent2);\n        rc.AddReference(child, parent1);\n        rc.AddReference(child, parent2);\n\n        Assert.AreEqual(4, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestAddReference_SameParentMultipleTimes_TracksCorrectly()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n        rc.AddReference(child, parent);\n        rc.AddReference(child, parent);\n        rc.AddReference(child, parent);\n\n        Assert.AreEqual(4, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestAddReference_NonTrackedChild_CountStillIncreases()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        StackItem intChild = 42;\n\n        rc.AddStackReference(parent);\n        rc.AddReference(intChild, parent);\n\n        Assert.AreEqual(2, rc.Count);\n    }\n\n    #endregion\n\n    #region 3. Zero-Referred Item Management\n\n    [TestMethod]\n    public void TestAddZeroReferred_AddsToTracking()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        // Array constructor calls AddZeroReferred\n        // CheckZeroReferred should clean it up since it has no references\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_WithStackReference_NotCleaned()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        int count = rc.CheckZeroReferred();\n\n        Assert.AreEqual(1, count);\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_NoZeroItems_ReturnsCurrentCount()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        rc.AddStackReference(array);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(2, count);\n    }\n\n    [TestMethod]\n    public void TestRemoveStackReference_ToZero_AddsToZeroReferred()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        Assert.AreEqual(1, rc.Count);\n\n        rc.RemoveStackReference(array);\n        // Item should be in zero-referred list now\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count); // Cleaned up\n    }\n\n    #endregion\n\n    #region 4. Circular Reference Detection\n\n    [TestMethod]\n    public void TestCircularReference_SelfReference_CleanedUp()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        array.Add(array); // Self-reference\n\n        Assert.AreEqual(2, rc.Count);\n\n        rc.RemoveStackReference(array);\n        int count = rc.CheckZeroReferred();\n\n        // Self-referencing array should be cleaned up\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestCircularReference_TwoItems_CleanedUp()\n    {\n        var rc = new ReferenceCounter();\n        var array1 = new Array(rc);\n        var array2 = new Array(rc);\n\n        rc.AddStackReference(array1);\n        rc.AddStackReference(array2);\n\n        array1.Add(array2);\n        array2.Add(array1);\n\n        Assert.AreEqual(4, rc.Count);\n\n        rc.RemoveStackReference(array1);\n        rc.RemoveStackReference(array2);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestCircularReference_ThreeItems_CleanedUp()\n    {\n        var rc = new ReferenceCounter();\n        var a = new Array(rc);\n        var b = new Array(rc);\n        var c = new Array(rc);\n\n        rc.AddStackReference(a);\n\n        a.Add(b);\n        b.Add(c);\n        c.Add(a); // Creates cycle: a -> b -> c -> a\n\n        rc.RemoveStackReference(a);\n        int count = rc.CheckZeroReferred();\n\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestCircularReference_PartiallyReachable_NotCleanedUp()\n    {\n        var rc = new ReferenceCounter();\n        var root = new Array(rc);\n        var a = new Array(rc);\n        var b = new Array(rc);\n\n        rc.AddStackReference(root);\n\n        root.Add(a);\n        a.Add(b);\n        b.Add(a); // Cycle between a and b, but reachable from root\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(4, count); // root + a + b + reference from root to a\n    }\n\n    [TestMethod]\n    public void TestCircularReference_ComplexGraph_CleanedUpCorrectly()\n    {\n        var rc = new ReferenceCounter();\n        var arrays = new Array[5];\n\n        for (int i = 0; i < 5; i++)\n        {\n            arrays[i] = new Array(rc);\n            rc.AddStackReference(arrays[i]);\n        }\n\n        // Create complex graph: 0->1, 1->2, 2->3, 3->4, 4->0, 2->0\n        arrays[0].Add(arrays[1]);\n        arrays[1].Add(arrays[2]);\n        arrays[2].Add(arrays[3]);\n        arrays[3].Add(arrays[4]);\n        arrays[4].Add(arrays[0]);\n        arrays[2].Add(arrays[0]);\n\n        // Remove all stack references\n        for (int i = 0; i < 5; i++)\n        {\n            rc.RemoveStackReference(arrays[i]);\n        }\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    #endregion\n\n    #region 5. Mixed Reference Scenarios\n\n    [TestMethod]\n    public void TestMixedReferences_StackAndObject()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n        rc.AddStackReference(child);\n        parent.Add(child);\n\n        Assert.AreEqual(3, rc.Count);\n\n        rc.RemoveStackReference(child);\n        int count = rc.CheckZeroReferred();\n\n        // Child still reachable through parent\n        Assert.AreEqual(2, count);\n    }\n\n    [TestMethod]\n    public void TestMixedReferences_RemoveParentFirst()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n        parent.Add(child);\n\n        rc.RemoveStackReference(parent);\n        int count = rc.CheckZeroReferred();\n\n        // Both should be cleaned up\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestMixedReferences_NestedArrays()\n    {\n        var rc = new ReferenceCounter();\n        var level1 = new Array(rc);\n        var level2 = new Array(rc);\n        var level3 = new Array(rc);\n\n        rc.AddStackReference(level1);\n        level1.Add(level2);\n        level2.Add(level3);\n\n        Assert.AreEqual(3, rc.Count);\n\n        rc.RemoveStackReference(level1);\n        int count = rc.CheckZeroReferred();\n\n        Assert.AreEqual(0, count);\n    }\n\n    #endregion\n\n    #region 6. Edge Cases and Boundary Conditions\n\n    [TestMethod]\n    public void TestEmptyReferenceCounter_CountIsZero()\n    {\n        var rc = new ReferenceCounter();\n        Assert.AreEqual(0, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_EmptyCounter_ReturnsZero()\n    {\n        var rc = new ReferenceCounter();\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestCheckZeroReferred_CalledMultipleTimes_Idempotent()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n\n        int count1 = rc.CheckZeroReferred();\n        int count2 = rc.CheckZeroReferred();\n        int count3 = rc.CheckZeroReferred();\n\n        Assert.AreEqual(count1, count2);\n        Assert.AreEqual(count2, count3);\n    }\n\n    [TestMethod]\n    public void TestLargeNumberOfItems()\n    {\n        var rc = new ReferenceCounter();\n        var arrays = new Array[100];\n\n        for (int i = 0; i < 100; i++)\n        {\n            arrays[i] = new Array(rc);\n            rc.AddStackReference(arrays[i]);\n        }\n\n        Assert.AreEqual(100, rc.Count);\n\n        for (int i = 0; i < 100; i++)\n        {\n            rc.RemoveStackReference(arrays[i]);\n        }\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestDeepNesting()\n    {\n        var rc = new ReferenceCounter();\n        var root = new Array(rc);\n        rc.AddStackReference(root);\n\n        var current = root;\n        for (int i = 0; i < 50; i++)\n        {\n            var next = new Array(rc);\n            current.Add(next);\n            current = next;\n        }\n\n        Assert.AreEqual(51, rc.Count); // root + 50 nested\n\n        rc.RemoveStackReference(root);\n        int count = rc.CheckZeroReferred();\n\n        Assert.AreEqual(0, count);\n    }\n\n    #endregion\n\n    #region 7. Type-Specific Tracking\n\n    [TestMethod]\n    public void TestArray_TrackedCorrectly()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        Assert.AreEqual(1, rc.Count);\n\n        array.Add(1);\n        array.Add(2);\n        array.Add(3);\n\n        Assert.AreEqual(4, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestMap_TrackedCorrectly()\n    {\n        var rc = new ReferenceCounter();\n        var map = new Map(rc);\n\n        rc.AddStackReference(map);\n        Assert.AreEqual(1, rc.Count);\n\n        map[(ByteString)\"key1\"] = 1;\n        map[(ByteString)\"key2\"] = 2;\n\n        // Map tracks both keys and values\n        Assert.AreEqual(5, rc.Count); // 1 (map) + 2 keys + 2 values\n    }\n\n    [TestMethod]\n    public void TestStruct_TrackedCorrectly()\n    {\n        var rc = new ReferenceCounter();\n        var s = new Struct(rc);\n\n        rc.AddStackReference(s);\n        Assert.AreEqual(1, rc.Count);\n\n        s.Add(1);\n        s.Add(2);\n\n        Assert.AreEqual(3, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestBuffer_TrackedCorrectly()\n    {\n        var rc = new ReferenceCounter();\n        var buffer = new Buffer(10);\n\n        rc.AddStackReference(buffer);\n        Assert.AreEqual(1, rc.Count);\n\n        rc.RemoveStackReference(buffer);\n        int count = rc.CheckZeroReferred();\n\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestNestedCompoundTypes()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n        var map = new Map(rc);\n        var s = new Struct(rc);\n\n        rc.AddStackReference(array);\n\n        array.Add(map);\n        map[(ByteString)\"struct\"] = s;\n        s.Add(42);\n\n        // array(1) + map(1) + key(1) + struct(1) + int(1) = 5\n        Assert.AreEqual(5, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestArray_Clear_RemovesReferences()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        array.Add(1);\n        array.Add(2);\n        array.Add(3);\n\n        Assert.AreEqual(4, rc.Count);\n\n        array.Clear();\n        Assert.AreEqual(1, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestArray_RemoveAt_RemovesReference()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        array.Add(1);\n        array.Add(2);\n        array.Add(3);\n\n        Assert.AreEqual(4, rc.Count);\n\n        array.RemoveAt(1);\n        Assert.AreEqual(3, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestArray_SetItem_UpdatesReferences()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        array.Add(1);\n\n        Assert.AreEqual(2, rc.Count);\n\n        array[0] = 2; // Replace item\n        Assert.AreEqual(2, rc.Count); // Count should remain same\n    }\n\n    [TestMethod]\n    public void TestMap_RemoveKey_RemovesReferences()\n    {\n        var rc = new ReferenceCounter();\n        var map = new Map(rc);\n\n        rc.AddStackReference(map);\n        map[(ByteString)\"key\"] = 42;\n\n        Assert.AreEqual(3, rc.Count); // map + key + value\n\n        map.Remove((ByteString)\"key\");\n        Assert.AreEqual(1, rc.Count); // only map\n    }\n\n    [TestMethod]\n    public void TestMap_Clear_RemovesAllReferences()\n    {\n        var rc = new ReferenceCounter();\n        var map = new Map(rc);\n\n        rc.AddStackReference(map);\n        map[(ByteString)\"key1\"] = 1;\n        map[(ByteString)\"key2\"] = 2;\n\n        Assert.AreEqual(5, rc.Count);\n\n        map.Clear();\n        Assert.AreEqual(1, rc.Count);\n    }\n\n    #endregion\n\n    #region 8. Cache Invalidation Scenarios\n\n    [TestMethod]\n    public void TestCacheInvalidation_AddReference()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n        rc.AddStackReference(child);\n\n        // First check builds cache\n        rc.CheckZeroReferred();\n\n        // Add reference should invalidate cache\n        parent.Add(child);\n\n        rc.RemoveStackReference(parent);\n        rc.RemoveStackReference(child);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestCacheInvalidation_RemoveReference()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n        parent.Add(child);\n\n        rc.CheckZeroReferred();\n\n        // Remove child from parent\n        parent.RemoveAt(0);\n\n        rc.RemoveStackReference(parent);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    #endregion\n\n    #region 9. VM Integration Tests\n\n    [TestMethod]\n    public void TestVMIntegration_SimpleScript()\n    {\n        using ScriptBuilder sb = new();\n        sb.EmitPush(0);\n        sb.Emit(OpCode.NEWARRAY);\n        sb.Emit(OpCode.DROP);\n        sb.Emit(OpCode.RET);\n\n        using ExecutionEngine engine = new();\n        engine.LoadScript(sb.ToArray());\n\n        Assert.AreEqual(VMState.HALT, engine.Execute());\n        Assert.AreEqual(0, engine.ReferenceCounter.Count);\n    }\n\n    [TestMethod]\n    public void TestVMIntegration_ArrayWithItems()\n    {\n        using ScriptBuilder sb = new();\n        sb.EmitPush(3);\n        sb.Emit(OpCode.NEWARRAY);\n\n        using ExecutionEngine engine = new();\n        engine.LoadScript(sb.ToArray());\n\n        Assert.AreEqual(VMState.HALT, engine.Execute());\n        // Array + 3 null items on stack\n        Assert.AreEqual(4, engine.ReferenceCounter.Count);\n    }\n\n    [TestMethod]\n    public void TestVMIntegration_NestedArrays()\n    {\n        using ScriptBuilder sb = new();\n        sb.EmitPush(1);\n        sb.Emit(OpCode.NEWARRAY); // Create outer array\n        sb.Emit(OpCode.DUP);\n        sb.EmitPush(0);\n        sb.EmitPush(0);\n        sb.Emit(OpCode.NEWARRAY); // Create inner array\n        sb.Emit(OpCode.SETITEM); // outer[0] = inner\n\n        using ExecutionEngine engine = new();\n        engine.LoadScript(sb.ToArray());\n\n        Assert.AreEqual(VMState.HALT, engine.Execute());\n        // Outer array + inner array\n        Assert.AreEqual(2, engine.ReferenceCounter.Count);\n    }\n\n    [TestMethod]\n    public void TestVMIntegration_MapOperations()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.NEWMAP);\n        sb.Emit(OpCode.DUP);\n        sb.EmitPush(\"key\");\n        sb.EmitPush(42);\n        sb.Emit(OpCode.SETITEM);\n\n        using ExecutionEngine engine = new();\n        engine.LoadScript(sb.ToArray());\n\n        Assert.AreEqual(VMState.HALT, engine.Execute());\n        // Map + key + value\n        Assert.AreEqual(3, engine.ReferenceCounter.Count);\n    }\n\n    [TestMethod]\n    public void TestVMIntegration_StructClone()\n    {\n        using ScriptBuilder sb = new();\n        sb.EmitPush(2);\n        sb.Emit(OpCode.NEWSTRUCT);\n        sb.Emit(OpCode.DUP);\n        sb.EmitPush(0);\n        sb.EmitPush(100);\n        sb.Emit(OpCode.SETITEM);\n        sb.Emit(OpCode.DUP);\n        sb.EmitPush(1);\n        sb.EmitPush(200);\n        sb.Emit(OpCode.SETITEM);\n\n        using ExecutionEngine engine = new();\n        engine.LoadScript(sb.ToArray());\n\n        Assert.AreEqual(VMState.HALT, engine.Execute());\n        // Struct + 2 values\n        Assert.AreEqual(3, engine.ReferenceCounter.Count);\n    }\n\n    #endregion\n\n    #region 10. Slot Integration Tests\n\n    [TestMethod]\n    public void TestSlot_InitializesWithNullReferences()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.INITSLOT, new byte[] { 3, 0 }); // 3 local variables\n\n        using ExecutionEngine engine = new();\n        engine.LoadScript(sb.ToArray());\n\n        Assert.AreEqual(VMState.HALT, engine.Execute());\n        // Null is not tracked (not CompoundType or Buffer), so count is 0\n        // This verifies that non-tracked types don't affect the reference count\n        Assert.AreEqual(0, engine.ReferenceCounter.Count);\n    }\n\n    [TestMethod]\n    public void TestSlot_SetAndGet()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.INITSLOT, new byte[] { 1, 0 });\n        sb.EmitPush(0);\n        sb.Emit(OpCode.NEWARRAY);\n        sb.Emit(OpCode.STLOC0);\n        sb.Emit(OpCode.LDLOC0);\n\n        using ExecutionEngine engine = new();\n        engine.LoadScript(sb.ToArray());\n\n        Assert.AreEqual(VMState.HALT, engine.Execute());\n        // Array in slot (1 ref) + array on stack (1 ref) = 2 stack refs for same array\n        // But the array itself is only counted once per stack reference\n        // After execution: array is on stack (1 ref from stack)\n        Assert.AreEqual(1, engine.ReferenceCounter.Count);\n    }\n\n    [TestMethod]\n    public void TestStaticSlot_PersistsAcrossContexts()\n    {\n        using ScriptBuilder sb = new();\n        sb.Emit(OpCode.INITSSLOT, new byte[] { 1 });\n        sb.EmitPush(0);\n        sb.Emit(OpCode.NEWARRAY);\n        sb.Emit(OpCode.STSFLD0);\n        sb.Emit(OpCode.LDSFLD0);\n\n        using ExecutionEngine engine = new();\n        engine.LoadScript(sb.ToArray());\n\n        Assert.AreEqual(VMState.HALT, engine.Execute());\n        // Array on stack (1 ref) - static slot is cleared after execution\n        Assert.AreEqual(1, engine.ReferenceCounter.Count);\n    }\n\n    #endregion\n\n    #region 11. Stress Tests\n\n    [TestMethod]\n    public void TestStress_ManySmallArrays()\n    {\n        var rc = new ReferenceCounter();\n        var arrays = new Array[1000];\n\n        for (int i = 0; i < 1000; i++)\n        {\n            arrays[i] = new Array(rc);\n            rc.AddStackReference(arrays[i]);\n        }\n\n        Assert.AreEqual(1000, rc.Count);\n\n        for (int i = 0; i < 1000; i++)\n        {\n            rc.RemoveStackReference(arrays[i]);\n        }\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestStress_ComplexInterconnectedGraph()\n    {\n        var rc = new ReferenceCounter();\n        var arrays = new Array[20];\n\n        for (int i = 0; i < 20; i++)\n        {\n            arrays[i] = new Array(rc);\n            rc.AddStackReference(arrays[i]);\n        }\n\n        // Create complex interconnections\n        for (int i = 0; i < 20; i++)\n        {\n            arrays[i].Add(arrays[(i + 1) % 20]);\n            arrays[i].Add(arrays[(i + 5) % 20]);\n        }\n\n        // Remove all stack references\n        for (int i = 0; i < 20; i++)\n        {\n            rc.RemoveStackReference(arrays[i]);\n        }\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestStress_RepeatedCheckZeroReferred()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n\n        for (int i = 0; i < 100; i++)\n        {\n            int count = rc.CheckZeroReferred();\n            Assert.AreEqual(1, count);\n        }\n    }\n\n    #endregion\n\n    #region 12. Behavioral Consistency Tests\n\n    [TestMethod]\n    public void TestBehavior_AddRemoveSymmetry()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        for (int i = 0; i < 10; i++)\n        {\n            rc.AddStackReference(array);\n        }\n\n        Assert.AreEqual(10, rc.Count);\n\n        for (int i = 0; i < 10; i++)\n        {\n            rc.RemoveStackReference(array);\n        }\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestBehavior_ObjectReferenceSymmetry()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n\n        for (int i = 0; i < 5; i++)\n        {\n            rc.AddReference(child, parent);\n        }\n\n        Assert.AreEqual(6, rc.Count);\n\n        for (int i = 0; i < 5; i++)\n        {\n            rc.RemoveReference(child, parent);\n        }\n\n        rc.RemoveStackReference(parent);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    [TestMethod]\n    public void TestBehavior_CountNeverNegative()\n    {\n        var rc = new ReferenceCounter();\n\n        // Even with no items, count should be 0\n        Assert.AreEqual(0, rc.Count);\n\n        var array = new Array(rc);\n        rc.AddStackReference(array);\n        rc.RemoveStackReference(array);\n\n        // After cleanup\n        rc.CheckZeroReferred();\n        Assert.IsGreaterThanOrEqualTo(0, rc.Count);\n    }\n\n    [TestMethod]\n    public void TestBehavior_DeterministicCleanup()\n    {\n        // Run the same scenario multiple times to ensure deterministic behavior\n        for (int run = 0; run < 10; run++)\n        {\n            var rc = new ReferenceCounter();\n            var a = new Array(rc);\n            var b = new Array(rc);\n            var c = new Array(rc);\n\n            rc.AddStackReference(a);\n            a.Add(b);\n            b.Add(c);\n            c.Add(a);\n\n            rc.RemoveStackReference(a);\n            int count = rc.CheckZeroReferred();\n\n            Assert.AreEqual(0, count, $\"Run {run} failed\");\n        }\n    }\n\n    #endregion\n\n    #region 13. Additional Code Path Coverage Tests\n\n    /// <summary>\n    /// Tests AddStackReference when item already exists in _trackedItems\n    /// and _cachedComponents is not null (line 100-101)\n    /// </summary>\n    [TestMethod]\n    public void TestAddStackReference_ExistingItem_CachedComponentsNotNull()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        // First CheckZeroReferred builds _cachedComponents\n        rc.CheckZeroReferred();\n\n        // Add another stack reference to existing item - should not add to cached components again\n        rc.AddStackReference(array);\n        Assert.AreEqual(2, rc.Count);\n\n        // Verify cleanup still works correctly\n        rc.RemoveStackReference(array);\n        rc.RemoveStackReference(array);\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests AddStackReference removing item from _zeroReferred (line 107)\n    /// </summary>\n    [TestMethod]\n    public void TestAddStackReference_RemovesFromZeroReferred()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        // Array is in _zeroReferred after construction\n        // Adding stack reference should remove it from _zeroReferred\n        rc.AddStackReference(array);\n\n        // Remove and check - should be added back to _zeroReferred\n        rc.RemoveStackReference(array);\n\n        // Add again - should remove from _zeroReferred again\n        rc.AddStackReference(array);\n\n        // Now cleanup should not remove the array\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(1, count);\n    }\n\n    /// <summary>\n    /// Tests AddZeroReferred with non-tracked type (line 117)\n    /// </summary>\n    [TestMethod]\n    public void TestAddZeroReferred_NonTrackedType()\n    {\n        var rc = new ReferenceCounter();\n        StackItem intItem = 42;\n\n        // Directly call AddZeroReferred on non-tracked type\n        rc.AddZeroReferred(intItem);\n\n        // Should not affect count since it's not tracked\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests AddZeroReferred when _cachedComponents exists (line 120)\n    /// </summary>\n    [TestMethod]\n    public void TestAddZeroReferred_WithCachedComponents()\n    {\n        var rc = new ReferenceCounter();\n        var array1 = new Array(rc);\n\n        rc.AddStackReference(array1);\n        // Build cached components\n        rc.CheckZeroReferred();\n\n        // Create new array - AddZeroReferred is called in constructor\n        // This should add to _cachedComponents\n        var array2 = new Array(rc);\n        rc.AddStackReference(array2);\n\n        // Both should be tracked\n        Assert.AreEqual(2, rc.Count);\n\n        rc.RemoveStackReference(array1);\n        rc.RemoveStackReference(array2);\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests RemoveReference with non-tracked type (line 223)\n    /// </summary>\n    [TestMethod]\n    public void TestRemoveReference_NonTrackedType()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        StackItem intChild = 42;\n\n        rc.AddStackReference(parent);\n        rc.AddReference(intChild, parent);\n        Assert.AreEqual(2, rc.Count);\n\n        // Remove reference to non-tracked type\n        rc.RemoveReference(intChild, parent);\n        Assert.AreEqual(1, rc.Count);\n    }\n\n    /// <summary>\n    /// Tests RemoveReference when item still has stack references (line 232-233)\n    /// Item should NOT be added to _zeroReferred\n    /// </summary>\n    [TestMethod]\n    public void TestRemoveReference_ItemStillHasStackReferences()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n        rc.AddStackReference(child); // Child has stack reference\n        rc.AddReference(child, parent);\n\n        Assert.AreEqual(3, rc.Count);\n\n        // Remove object reference - child still has stack reference\n        rc.RemoveReference(child, parent);\n        Assert.AreEqual(2, rc.Count);\n\n        // Child should NOT be in _zeroReferred, so CheckZeroReferred should not clean it\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(2, count); // Both parent and child still exist\n    }\n\n    /// <summary>\n    /// Tests RemoveStackReference when item still has references (line 246-247)\n    /// Item should NOT be added to _zeroReferred\n    /// </summary>\n    [TestMethod]\n    public void TestRemoveStackReference_ItemStillHasStackReferences()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array, 3); // Add 3 stack references\n        Assert.AreEqual(3, rc.Count);\n\n        rc.RemoveStackReference(array); // Remove 1, still has 2\n        Assert.AreEqual(2, rc.Count);\n\n        // Array should NOT be in _zeroReferred\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(2, count); // Array still exists with 2 refs\n    }\n\n    /// <summary>\n    /// Tests CheckZeroReferred reusing existing _cachedComponents (line 142)\n    /// </summary>\n    [TestMethod]\n    public void TestCheckZeroReferred_ReusesCachedComponents()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n\n        // First call builds _cachedComponents\n        rc.CheckZeroReferred();\n\n        // Add to _zeroReferred without invalidating cache\n        // (RemoveStackReference to 0 adds to _zeroReferred but doesn't invalidate cache)\n        rc.RemoveStackReference(array);\n\n        // Second call should reuse _cachedComponents\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests CheckZeroReferred with CompoundType containing non-tracked subitems (line 193)\n    /// </summary>\n    [TestMethod]\n    public void TestCheckZeroReferred_CompoundTypeWithNonTrackedSubitems()\n    {\n        var rc = new ReferenceCounter();\n        var array = new Array(rc);\n\n        rc.AddStackReference(array);\n        array.Add(1);  // Integer - not tracked\n        array.Add(2);  // Integer - not tracked\n        array.Add(3);  // Integer - not tracked\n\n        Assert.AreEqual(4, rc.Count);\n\n        rc.RemoveStackReference(array);\n        int count = rc.CheckZeroReferred();\n\n        // All should be cleaned up, including non-tracked subitems\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests Buffer cleanup (item.Cleanup() call at line 201)\n    /// </summary>\n    [TestMethod]\n    public void TestCheckZeroReferred_BufferCleanup()\n    {\n        var rc = new ReferenceCounter();\n        var buffer = new Buffer(100);\n\n        rc.AddStackReference(buffer);\n        Assert.AreEqual(1, rc.Count);\n\n        rc.RemoveStackReference(buffer);\n        int count = rc.CheckZeroReferred();\n\n        // Buffer should be cleaned up (returned to ArrayPool)\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests that subitems in same component are skipped during cleanup (line 192)\n    /// </summary>\n    [TestMethod]\n    public void TestCheckZeroReferred_SubitemsInSameComponent()\n    {\n        var rc = new ReferenceCounter();\n        var a = new Array(rc);\n        var b = new Array(rc);\n\n        rc.AddStackReference(a);\n\n        // Create mutual references - they will be in same SCC\n        a.Add(b);\n        b.Add(a);\n\n        Assert.AreEqual(3, rc.Count);\n\n        rc.RemoveStackReference(a);\n        int count = rc.CheckZeroReferred();\n\n        // Both should be cleaned up together\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests OnStack propagation through parent references (line 163)\n    /// </summary>\n    [TestMethod]\n    public void TestCheckZeroReferred_OnStackPropagation()\n    {\n        var rc = new ReferenceCounter();\n        var root = new Array(rc);\n        var child1 = new Array(rc);\n        var child2 = new Array(rc);\n\n        rc.AddStackReference(root);\n\n        root.Add(child1);\n        child1.Add(child2);\n        child2.Add(child1); // Cycle between child1 and child2\n\n        // root -> child1 <-> child2\n        // child1 and child2 form a cycle, but are reachable from root\n\n        int count = rc.CheckZeroReferred();\n\n        // All should remain because they're reachable from root\n        Assert.AreEqual(4, count);\n    }\n\n    /// <summary>\n    /// Tests multiple SCCs with different reachability\n    /// </summary>\n    [TestMethod]\n    public void TestCheckZeroReferred_MultipleSCCs()\n    {\n        var rc = new ReferenceCounter();\n\n        // SCC 1: reachable from stack\n        var root = new Array(rc);\n        var a = new Array(rc);\n        rc.AddStackReference(root);\n        root.Add(a);\n        a.Add(root); // Cycle\n\n        // SCC 2: not reachable\n        var b = new Array(rc);\n        var c = new Array(rc);\n        rc.AddStackReference(b);\n        rc.AddStackReference(c);\n        b.Add(c);\n        c.Add(b); // Cycle\n\n        // Remove stack refs from SCC 2\n        rc.RemoveStackReference(b);\n        rc.RemoveStackReference(c);\n\n        int count = rc.CheckZeroReferred();\n\n        // SCC 1 should remain: root(1 stack ref) + a(1 obj ref from root) + root(1 obj ref from a) = 3\n        // SCC 2 should be cleaned (0)\n        Assert.AreEqual(3, count);\n    }\n\n    /// <summary>\n    /// Tests Map with CompoundType values that need cleanup\n    /// </summary>\n    [TestMethod]\n    public void TestCheckZeroReferred_MapWithCompoundValues()\n    {\n        var rc = new ReferenceCounter();\n        var map = new Map(rc);\n        var innerArray = new Array(rc);\n\n        rc.AddStackReference(map);\n        map[(ByteString)\"arr\"] = innerArray;\n        innerArray.Add(42);\n\n        // map(1) + key(1) + innerArray(1) + int(1) = 4\n        Assert.AreEqual(4, rc.Count);\n\n        rc.RemoveStackReference(map);\n        int count = rc.CheckZeroReferred();\n\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests Struct with nested Struct\n    /// </summary>\n    [TestMethod]\n    public void TestCheckZeroReferred_NestedStructs()\n    {\n        var rc = new ReferenceCounter();\n        var outer = new Struct(rc);\n        var inner = new Struct(rc);\n\n        rc.AddStackReference(outer);\n        outer.Add(inner);\n        inner.Add(100);\n        inner.Add(200);\n\n        // outer(1) + inner(1) + 100(1) + 200(1) = 4\n        Assert.AreEqual(4, rc.Count);\n\n        rc.RemoveStackReference(outer);\n        int count = rc.CheckZeroReferred();\n\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests that ObjectReferences dictionary is properly initialized\n    /// </summary>\n    [TestMethod]\n    public void TestAddReference_InitializesObjectReferences()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n\n        // First AddReference should initialize ObjectReferences\n        rc.AddReference(child, parent);\n\n        // Second AddReference to same parent should reuse existing entry\n        rc.AddReference(child, parent);\n\n        Assert.AreEqual(3, rc.Count);\n\n        // Cleanup\n        rc.RemoveReference(child, parent);\n        rc.RemoveReference(child, parent);\n        rc.RemoveStackReference(parent);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests interleaved operations - verifies complex sequences work correctly\n    /// </summary>\n    [TestMethod]\n    public void TestInterleavedOperations()\n    {\n        var rc = new ReferenceCounter();\n\n        // Create arrays with proper lifecycle management\n        var a = new Array(rc);\n        var b = new Array(rc);\n        var c = new Array(rc);\n\n        // Add stack references\n        rc.AddStackReference(a);\n        rc.AddStackReference(b);\n\n        // a contains c\n        a.Add(c);\n\n        // Verify state\n        Assert.AreEqual(3, rc.Count); // a(1) + b(1) + c(1)\n\n        // Check doesn't change anything since all are reachable\n        rc.CheckZeroReferred();\n        Assert.AreEqual(3, rc.Count);\n\n        // Remove a's stack reference - but c is still referenced by a\n        rc.RemoveStackReference(a);\n\n        // a and c should be cleaned up since a has no stack ref\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(1, count); // Only b remains\n\n        // Final cleanup\n        rc.RemoveStackReference(b);\n        count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Tests that Reset() is called on all tracked items\n    /// </summary>\n    [TestMethod]\n    public void TestCheckZeroReferred_ResetsAllItems()\n    {\n        var rc = new ReferenceCounter();\n        var a = new Array(rc);\n        var b = new Array(rc);\n        var c = new Array(rc);\n\n        rc.AddStackReference(a);\n        rc.AddStackReference(b);\n        a.Add(c);\n\n        // First check\n        rc.CheckZeroReferred();\n\n        // Modify graph\n        b.Add(c);\n\n        // Second check - all items should be reset\n        rc.CheckZeroReferred();\n\n        // Cleanup\n        rc.RemoveStackReference(a);\n        rc.RemoveStackReference(b);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Removes a child referenced by multiple parents; cleanup should only happen after the last referrer is removed.\n    /// </summary>\n    [TestMethod]\n    public void TestRemoveReference_LastParentTriggersCleanup()\n    {\n        var rc = new ReferenceCounter();\n        var parent1 = new Array(rc);\n        var parent2 = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent1);\n        rc.AddStackReference(parent2);\n        parent1.Add(child);\n        parent2.Add(child);\n\n        Assert.AreEqual(4, rc.Count);\n\n        parent1.RemoveAt(0);\n        parent2.RemoveAt(0);\n\n        rc.RemoveStackReference(parent1);\n        rc.RemoveStackReference(parent2);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Multiple references from the same parent should keep the child alive until all references are removed.\n    /// </summary>\n    [TestMethod]\n    public void TestMultipleReferencesFromSameParentRequireAllRemovals()\n    {\n        var rc = new ReferenceCounter();\n        var parent = new Array(rc);\n        var child = new Array(rc);\n\n        rc.AddStackReference(parent);\n        parent.Add(child);\n        parent.Add(child);\n\n        Assert.AreEqual(3, rc.Count);\n\n        parent.RemoveAt(0);\n        Assert.AreEqual(2, rc.Count);\n\n        // One reference remains from parent to child, so cleanup should not remove it yet.\n        rc.CheckZeroReferred();\n        Assert.AreEqual(2, rc.Count);\n\n        parent.RemoveAt(0);\n        rc.RemoveStackReference(parent);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Buffers tracked as map values should be cleaned with their parent container.\n    /// </summary>\n    [TestMethod]\n    public void TestBufferUsedAsMapValueCleanup()\n    {\n        var rc = new ReferenceCounter();\n        var map = new Map(rc);\n        var key = (ByteString)\"key\";\n        var value = new Buffer(8);\n\n        rc.AddStackReference(map);\n        map[key] = value;\n\n        Assert.AreEqual(3, rc.Count);\n\n        map.Remove(key);\n        rc.RemoveStackReference(map);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    /// <summary>\n    /// Slot indexer should replace references atomically, decrementing the old item and incrementing the new one.\n    /// </summary>\n    [TestMethod]\n    public void TestSlotUpdateReplacesReferences()\n    {\n        var rc = new ReferenceCounter();\n        var slot = new Slot(1, rc);\n        var first = new Array(rc);\n        var second = new Array(rc);\n\n        // Constructor adds a stack reference for Null\n        Assert.AreEqual(1, rc.Count);\n\n        slot[0] = first;\n        Assert.AreEqual(1, rc.Count);\n\n        slot[0] = second;\n        Assert.AreEqual(1, rc.Count);\n\n        int count = rc.CheckZeroReferred();\n        Assert.AreEqual(1, count);\n\n        rc.RemoveStackReference(second);\n        count = rc.CheckZeroReferred();\n        Assert.AreEqual(0, count);\n    }\n\n    #endregion\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_Script.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_Script.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\nusing System;\nusing System.Text;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_Script\n{\n    [TestMethod]\n    public void TestConversion()\n    {\n        byte[] rawScript;\n        using (var builder = new ScriptBuilder())\n        {\n            builder.Emit(OpCode.PUSH0);\n            builder.Emit(OpCode.CALL, new byte[] { 0x00, 0x01 });\n            builder.EmitSysCall(123);\n\n            rawScript = builder.ToArray();\n        }\n\n        var script = new Script(rawScript);\n\n        ReadOnlyMemory<byte> scriptConversion = script;\n        Assert.AreEqual(rawScript, scriptConversion);\n    }\n\n    [TestMethod]\n    public void TestStrictMode()\n    {\n        var rawScript = new byte[] { (byte)OpCode.PUSH0, 0xFF };\n        Assert.ThrowsExactly<BadScriptException>(() => _ = new Script(rawScript, true));\n\n        var script = new Script(rawScript, false);\n        Assert.AreEqual(2, script.Length);\n\n        rawScript = new byte[] { (byte)OpCode.PUSHDATA1 };\n        Assert.ThrowsExactly<BadScriptException>(() => _ = new Script(rawScript, true));\n\n        rawScript = new byte[] { (byte)OpCode.PUSHDATA2 };\n        Assert.ThrowsExactly<BadScriptException>(() => _ = new Script(rawScript, true));\n\n        rawScript = new byte[] { (byte)OpCode.PUSHDATA4 };\n        Assert.ThrowsExactly<BadScriptException>(() => _ = new Script(rawScript, true));\n    }\n\n    [TestMethod]\n    public void TestParse()\n    {\n        Script script;\n\n        using (var builder = new ScriptBuilder())\n        {\n            builder.Emit(OpCode.PUSH0);\n            builder.Emit(OpCode.CALL_L, new byte[] { 0x00, 0x01, 0x00, 0x00 });\n            builder.EmitSysCall(123);\n\n            script = new Script(builder.ToArray());\n        }\n\n        Assert.AreEqual(11, script.Length);\n\n        var ins = script.GetInstruction(0);\n\n        Assert.AreEqual(OpCode.PUSH0, ins.OpCode);\n        Assert.IsTrue(ins.Operand.IsEmpty);\n        Assert.AreEqual(1, ins.Size);\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => { var x = ins.TokenI16; });\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => { var x = ins.TokenU32; });\n\n        ins = script.GetInstruction(1);\n\n        Assert.AreEqual(OpCode.CALL_L, ins.OpCode);\n        CollectionAssert.AreEqual(new byte[] { 0x00, 0x01, 0x00, 0x00 }, ins.Operand.ToArray());\n        Assert.AreEqual(5, ins.Size);\n        Assert.AreEqual(256, ins.TokenI32);\n        Assert.AreEqual(Encoding.ASCII.GetString(new byte[] { 0x00, 0x01, 0x00, 0x00 }), ins.TokenString);\n\n        ins = script.GetInstruction(6);\n\n        Assert.AreEqual(OpCode.SYSCALL, ins.OpCode);\n        CollectionAssert.AreEqual(new byte[] { 123, 0x00, 0x00, 0x00 }, ins.Operand.ToArray());\n        Assert.AreEqual(5, ins.Size);\n        Assert.AreEqual(123, ins.TokenI16);\n        Assert.AreEqual(Encoding.ASCII.GetString(new byte[] { 123, 0x00, 0x00, 0x00 }), ins.TokenString);\n        Assert.AreEqual(123U, ins.TokenU32);\n\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = script.GetInstruction(100));\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_ScriptBuilder.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_ScriptBuilder.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.Test.Extensions;\nusing Neo.Test.Helpers;\nusing Neo.VM;\nusing System;\nusing System.Linq;\nusing System.Numerics;\nusing System.Text;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_ScriptBuilder\n{\n    [TestMethod]\n    public void TestEmit()\n    {\n        using (ScriptBuilder script = new())\n        {\n            Assert.AreEqual(0, script.Length);\n            script.Emit(OpCode.NOP);\n            Assert.AreEqual(1, script.Length);\n\n            CollectionAssert.AreEqual(new byte[] { 0x21 }, script.ToArray());\n        }\n\n        using (ScriptBuilder script = new())\n        {\n            script.Emit(OpCode.NOP, new byte[] { 0x66 });\n            CollectionAssert.AreEqual(new byte[] { 0x21, 0x66 }, script.ToArray());\n        }\n    }\n\n    [TestMethod]\n    public void TestNullAndEmpty()\n    {\n        using ScriptBuilder script = new();\n\n        ReadOnlySpan<byte> span = null;\n        script.EmitPush(span);\n\n        span = [];\n        script.EmitPush(span);\n\n        CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHDATA1, 0, (byte)OpCode.PUSHDATA1, 0 }, script.ToArray());\n    }\n\n    [TestMethod]\n    public void TestBigInteger()\n    {\n        using (ScriptBuilder script = new())\n        {\n            Assert.AreEqual(0, script.Length);\n            script.EmitPush(-100000);\n            Assert.AreEqual(5, script.Length);\n\n            CollectionAssert.AreEqual(new byte[] { 2, 96, 121, 254, 255 }, script.ToArray());\n        }\n\n        using (ScriptBuilder script = new())\n        {\n            Assert.AreEqual(0, script.Length);\n            script.EmitPush(100000);\n            Assert.AreEqual(5, script.Length);\n\n            CollectionAssert.AreEqual(new byte[] { 2, 160, 134, 1, 0 }, script.ToArray());\n        }\n    }\n\n    [TestMethod]\n    public void TestEmitSysCall()\n    {\n        using ScriptBuilder script = new();\n        script.EmitSysCall(0xE393C875);\n        CollectionAssert.AreEqual(new byte[] { (byte)OpCode.SYSCALL, 0x75, 0xC8, 0x93, 0xE3 }.ToArray(), script.ToArray());\n    }\n\n    [TestMethod]\n    public void TestEmitCall()\n    {\n        using (ScriptBuilder script = new())\n        {\n            script.EmitCall(0);\n            CollectionAssert.AreEqual(new[] { (byte)OpCode.CALL, (byte)0 }, script.ToArray());\n        }\n        using (ScriptBuilder script = new())\n        {\n            script.EmitCall(12345);\n            CollectionAssert.AreEqual(new[] { (byte)OpCode.CALL_L }.Concat(BitConverter.GetBytes(12345)).ToArray(), script.ToArray());\n        }\n        using (ScriptBuilder script = new())\n        {\n            script.EmitCall(-12345);\n            CollectionAssert.AreEqual(new[] { (byte)OpCode.CALL_L }.Concat(BitConverter.GetBytes(-12345)).ToArray(), script.ToArray());\n        }\n    }\n\n    [TestMethod]\n    public void TestEmitJump()\n    {\n        var offset_i8 = sbyte.MaxValue;\n        var offset_i32 = int.MaxValue;\n\n        foreach (OpCode op in Enum.GetValues<OpCode>())\n        {\n            using ScriptBuilder script = new();\n            if (op < OpCode.JMP || op > OpCode.JMPLE_L)\n            {\n                Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = script.EmitJump(op, offset_i8));\n                Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = script.EmitJump(op, offset_i32));\n            }\n            else\n            {\n                script.EmitJump(op, offset_i8);\n                script.EmitJump(op, offset_i32);\n                if ((int)op % 2 == 0)\n                    CollectionAssert.AreEqual(new[] { (byte)op, (byte)offset_i8, (byte)(op + 1) }.Concat(BitConverter.GetBytes(offset_i32)).ToArray(), script.ToArray());\n                else\n                    CollectionAssert.AreEqual(new[] { (byte)op }.Concat(BitConverter.GetBytes((int)offset_i8)).Concat(new[] { (byte)op }).Concat(BitConverter.GetBytes(offset_i32)).ToArray(), script.ToArray());\n            }\n        }\n\n        offset_i8 = sbyte.MinValue;\n        offset_i32 = int.MinValue;\n\n        foreach (OpCode op in Enum.GetValues<OpCode>())\n        {\n            using ScriptBuilder script = new();\n            if (op < OpCode.JMP || op > OpCode.JMPLE_L)\n            {\n                Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = script.EmitJump(op, offset_i8));\n                Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = script.EmitJump(op, offset_i32));\n            }\n            else\n            {\n                script.EmitJump(op, offset_i8);\n                script.EmitJump(op, offset_i32);\n                if ((int)op % 2 == 0)\n                    CollectionAssert.AreEqual(new[] { (byte)op, (byte)offset_i8, (byte)(op + 1) }.Concat(BitConverter.GetBytes(offset_i32)).ToArray(), script.ToArray());\n                else\n                    CollectionAssert.AreEqual(new[] { (byte)op }.Concat(BitConverter.GetBytes((int)offset_i8)).Concat(new[] { (byte)op }).Concat(BitConverter.GetBytes(offset_i32)).ToArray(), script.ToArray());\n            }\n        }\n    }\n\n    [TestMethod]\n    public void TestEmitPushBigInteger()\n    {\n        // Test small integers (-1 to 16)\n        for (var i = -1; i <= 16; i++)\n        {\n            using ScriptBuilder script = new();\n            script.EmitPush(new BigInteger(i));\n            CollectionAssert.AreEqual(new[] { (byte)(OpCode.PUSH0 + (byte)i) }, script.ToArray());\n        }\n\n        // Test -1\n        Assert.AreEqual(\"0x0f\", new ScriptBuilder().EmitPush(BigInteger.MinusOne).ToArray().ToHexString());\n\n        // Test edge cases for different sizes\n        // PUSHINT8\n        Assert.AreEqual(\"0x0080\", new ScriptBuilder().EmitPush(sbyte.MinValue).ToArray().ToHexString());\n        Assert.AreEqual(\"0x007f\", new ScriptBuilder().EmitPush(sbyte.MaxValue).ToArray().ToHexString());\n\n        // PUSHINT16\n        Assert.AreEqual(\"0x010080\", new ScriptBuilder().EmitPush(short.MinValue).ToArray().ToHexString());\n        Assert.AreEqual(\"0x01ff7f\", new ScriptBuilder().EmitPush(short.MaxValue).ToArray().ToHexString());\n\n        // PUSHINT32\n        Assert.AreEqual(\"0x0200000080\", new ScriptBuilder().EmitPush(int.MinValue).ToArray().ToHexString());\n        Assert.AreEqual(\"0x02ffffff7f\", new ScriptBuilder().EmitPush(int.MaxValue).ToArray().ToHexString());\n\n        // PUSHINT64\n        Assert.AreEqual(\"0x030000000000000080\", new ScriptBuilder().EmitPush(long.MinValue).ToArray().ToHexString());\n        Assert.AreEqual(\"0x03ffffffffffffff7f\", new ScriptBuilder().EmitPush(long.MaxValue).ToArray().ToHexString());\n\n        // PUSHINT128\n        Assert.AreEqual(\"0x04ffffffffffffffff0000000000000000\", new ScriptBuilder().EmitPush(new BigInteger(ulong.MaxValue)).ToArray().ToHexString());\n        Assert.AreEqual(\"0x0400000000000000000100000000000000\", new ScriptBuilder().EmitPush(new BigInteger(ulong.MaxValue) + 1).ToArray().ToHexString());\n\n        // PUSHINT256, case from https://en.wikipedia.org/wiki/256-bit_computing#:~:text=The%20range%20of%20a%20signed,%2C%E2%80%8B819%2C%E2%80%8B967.\n        Assert.AreEqual(\"0x050000000000000000000000000000000000000000000000000000000000000080\",\n            new ScriptBuilder().EmitPush(BigInteger.Parse(\"-57896044618658097711785492504343953926634992332820282019728792003956564819968\")).ToArray().ToHexString());\n\n        Assert.AreEqual(\"0x05ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\",\n            new ScriptBuilder().EmitPush(BigInteger.Parse(\"57896044618658097711785492504343953926634992332820282019728792003956564819967\")).ToArray().ToHexString());\n\n        // Test exceeding 256-bit value (2^256)\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = new ScriptBuilder().EmitPush(BigInteger.Parse(\"115792089237316195423570985008687907853269984665640564039457584007913129639936\")));\n\n        // Test negative numbers\n        Assert.AreEqual(\"0x00fe\", new ScriptBuilder().EmitPush(new BigInteger(-2)).ToArray().ToHexString());\n        Assert.AreEqual(\"0x0100ff\", new ScriptBuilder().EmitPush(new BigInteger(-256)).ToArray().ToHexString());\n\n        // Test numbers that are exactly at the boundary\n        Assert.AreEqual(\"0x04ffffffffffffffff0000000000000000\", new ScriptBuilder().EmitPush(BigInteger.Parse(\"18446744073709551615\")).ToArray().ToHexString());\n        Assert.AreEqual(\"0x0400000000000000000100000000000000\", new ScriptBuilder().EmitPush(BigInteger.Parse(\"18446744073709551616\")).ToArray().ToHexString());\n\n        // Test very large negative number\n        Assert.AreEqual(\"0x040000000000000000ffffffffffffffff\", new ScriptBuilder().EmitPush(BigInteger.Parse(\"-18446744073709551616\")).ToArray().ToHexString());\n\n        // Test exception for too large BigInteger\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => _ = new ScriptBuilder().EmitPush(\n            BigInteger.Parse(\"115792089237316195423570985008687907853269984665640564039457584007913129639937\")));\n    }\n\n    [TestMethod]\n    public void TestEmitPushBool()\n    {\n        using (ScriptBuilder script = new())\n        {\n            script.EmitPush(true);\n            CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHT }, script.ToArray());\n        }\n\n        using (ScriptBuilder script = new())\n        {\n            script.EmitPush(false);\n            CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHF }, script.ToArray());\n        }\n    }\n\n    [TestMethod]\n    public void TestEmitPushReadOnlySpan()\n    {\n        using ScriptBuilder script = new();\n        var data = new byte[] { 0x01, 0x02 };\n        script.EmitPush(new ReadOnlySpan<byte>(data));\n\n        CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHDATA1, (byte)data.Length }.Concat(data).ToArray(), script.ToArray());\n    }\n\n    [TestMethod]\n    public void TestEmitPushByteArray()\n    {\n        using (ScriptBuilder script = new())\n        {\n            script.EmitPush((byte[])null);\n            CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHDATA1, 0 }, script.ToArray());\n        }\n\n        using (ScriptBuilder script = new())\n        {\n            var data = RandomHelper.RandBuffer(0x4C);\n\n            script.EmitPush(data);\n            CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHDATA1, (byte)data.Length }.Concat(data).ToArray(), script.ToArray());\n        }\n\n        using (ScriptBuilder script = new())\n        {\n            var data = RandomHelper.RandBuffer(0x100);\n\n            script.EmitPush(data);\n            CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHDATA2 }.Concat(BitConverter.GetBytes((short)data.Length)).Concat(data).ToArray(), script.ToArray());\n        }\n\n        using (ScriptBuilder script = new())\n        {\n            var data = RandomHelper.RandBuffer(0x10000);\n\n            script.EmitPush(data);\n            CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHDATA4 }.Concat(BitConverter.GetBytes(data.Length)).Concat(data).ToArray(), script.ToArray());\n        }\n    }\n\n    [TestMethod]\n    public void TestEmitPushString()\n    {\n        using (ScriptBuilder script = new())\n        {\n            Assert.ThrowsExactly<ArgumentNullException>(() => _ = script.EmitPush((string)null));\n        }\n\n        using (ScriptBuilder script = new())\n        {\n            var data = RandomHelper.RandString(0x4C);\n\n            script.EmitPush(data);\n            CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHDATA1, (byte)data.Length }.Concat(Encoding.UTF8.GetBytes(data)).ToArray(), script.ToArray());\n        }\n\n        using (ScriptBuilder script = new())\n        {\n            var data = RandomHelper.RandString(0x100);\n\n            script.EmitPush(data);\n            CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHDATA2 }.Concat(BitConverter.GetBytes((short)data.Length)).Concat(Encoding.UTF8.GetBytes(data)).ToArray(), script.ToArray());\n        }\n\n        using (ScriptBuilder script = new())\n        {\n            var data = RandomHelper.RandString(0x10000);\n\n            script.EmitPush(data);\n            CollectionAssert.AreEqual(new byte[] { (byte)OpCode.PUSHDATA4 }.Concat(BitConverter.GetBytes(data.Length)).Concat(Encoding.UTF8.GetBytes(data)).ToArray(), script.ToArray());\n        }\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_Slot.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_Slot.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\nusing Neo.VM.Types;\nusing System;\nusing System.Collections;\nusing System.Linq;\nusing System.Numerics;\nusing Array = System.Array;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_Slot\n{\n    private static Slot CreateOrderedSlot(int count)\n    {\n        var check = new Integer[count];\n\n        for (int x = 1; x <= count; x++)\n        {\n            check[x - 1] = x;\n        }\n\n        var slot = new Slot(check, new ReferenceCounter());\n\n        Assert.AreEqual(count, slot.Count);\n        CollectionAssert.AreEqual(check, slot.ToArray());\n\n        return slot;\n    }\n\n    public static IEnumerable GetEnumerable(IEnumerator enumerator)\n    {\n        while (enumerator.MoveNext()) yield return enumerator.Current;\n    }\n\n    [TestMethod]\n    public void TestGet()\n    {\n        var slot = CreateOrderedSlot(3);\n\n        Assert.IsTrue(slot[0] is Integer item0 && item0.Equals(1));\n        Assert.IsTrue(slot[1] is Integer item1 && item1.Equals(2));\n        Assert.IsTrue(slot[2] is Integer item2 && item2.Equals(3));\n        Assert.ThrowsExactly<IndexOutOfRangeException>(() => _ = slot[3] is Integer item3);\n    }\n\n    [TestMethod]\n    public void TestEnumerable()\n    {\n        var slot = CreateOrderedSlot(3);\n\n        BigInteger i = 1;\n        foreach (var item in slot)\n        {\n            Assert.AreEqual(item.GetInteger(), i);\n            i++;\n        }\n\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, slot.ToArray());\n\n        // Test IEnumerable\n\n        var enumerable = (IEnumerable)slot;\n        var enumerator = enumerable.GetEnumerator();\n\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, GetEnumerable(enumerator).Cast<Integer>().ToArray());\n\n        Assert.AreEqual(3, slot.Count);\n\n        CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, slot.ToArray());\n\n        // Empty\n\n        slot = CreateOrderedSlot(0);\n\n        CollectionAssert.AreEqual(Array.Empty<Integer>(), slot.ToArray());\n\n        // Test IEnumerable\n\n        enumerable = slot;\n        enumerator = enumerable.GetEnumerator();\n\n        CollectionAssert.AreEqual(Array.Empty<Integer>(), GetEnumerable(enumerator).Cast<Integer>().ToArray());\n\n        Assert.AreEqual(0, slot.Count);\n\n        CollectionAssert.AreEqual(Array.Empty<Integer>(), slot.ToArray());\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_StackItem.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_StackItem.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\nusing Neo.VM.Types;\nusing System.Numerics;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_StackItem\n{\n    [TestMethod]\n    public void TestCircularReference()\n    {\n        var itemA = new Struct { true, false };\n        var itemB = new Struct { true, false };\n        var itemC = new Struct { false, false };\n\n        itemA[1] = itemA;\n        itemB[1] = itemB;\n        itemC[1] = itemC;\n\n        Assert.ThrowsExactly<System.InvalidOperationException>(() => itemA.Equals(itemB, ExecutionEngineLimits.Default));\n        Assert.ThrowsExactly<System.InvalidOperationException>(() => itemA.Equals(itemC, ExecutionEngineLimits.Default));\n    }\n\n    [TestMethod]\n    public void TestHashCode()\n    {\n        StackItem itemA = \"NEO\";\n        StackItem itemB = \"NEO\";\n        StackItem itemC = \"SmartEconomy\";\n\n        Assert.AreEqual(itemB.GetHashCode(), itemA.GetHashCode());\n        Assert.AreNotEqual(itemC.GetHashCode(), itemA.GetHashCode());\n\n        itemA = new Buffer(1);\n        itemB = new Buffer(1);\n        itemC = new Buffer(2);\n\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemA.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemB.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemC.GetHashCode());\n\n        itemA = new byte[] { 1, 2, 3 };\n        itemB = new byte[] { 1, 2, 3 };\n        itemC = new byte[] { 5, 6 };\n\n        Assert.AreEqual(itemB.GetHashCode(), itemA.GetHashCode());\n        Assert.AreNotEqual(itemC.GetHashCode(), itemA.GetHashCode());\n\n        itemA = true;\n        itemB = true;\n        itemC = false;\n\n        Assert.AreEqual(itemB.GetHashCode(), itemA.GetHashCode());\n        Assert.AreNotEqual(itemC.GetHashCode(), itemA.GetHashCode());\n\n        itemA = 1;\n        itemB = 1;\n        itemC = 123;\n\n        Assert.AreEqual(itemB.GetHashCode(), itemA.GetHashCode());\n        Assert.AreNotEqual(itemC.GetHashCode(), itemA.GetHashCode());\n\n        itemA = new Null();\n        itemB = new Null();\n\n        Assert.AreEqual(itemB.GetHashCode(), itemA.GetHashCode());\n\n        itemA = new Array { true, false, 0 };\n        itemB = new Array { true, false, 0 };\n        itemC = new Array { true, false, 1 };\n\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemA.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemB.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemC.GetHashCode());\n\n        itemA = new Struct { true, false, 0 };\n        itemB = new Struct { true, false, 0 };\n        itemC = new Struct { true, false, 1 };\n\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemA.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemB.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemC.GetHashCode());\n\n        itemA = new Map { [true] = false, [0] = 1 };\n        itemB = new Map { [true] = false, [0] = 1 };\n        itemC = new Map { [true] = false, [0] = 2 };\n\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemA.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemB.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemC.GetHashCode());\n\n        // Test CompoundType GetHashCode for subitems\n        var junk = new Array { true, false, 0 };\n        itemA = new Map { [true] = junk, [0] = junk };\n        itemB = new Map { [true] = junk, [0] = junk };\n        itemC = new Map { [true] = junk, [0] = 2 };\n\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemA.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemB.GetHashCode());\n        Assert.ThrowsExactly<System.NotSupportedException>(() => itemC.GetHashCode());\n\n        itemA = new InteropInterface(123);\n        itemB = new InteropInterface(123);\n        itemC = new InteropInterface(124);\n\n        Assert.AreEqual(itemB.GetHashCode(), itemA.GetHashCode());\n        Assert.AreNotEqual(itemC.GetHashCode(), itemA.GetHashCode());\n\n        var script = new Script(System.Array.Empty<byte>());\n        itemA = new Pointer(script, 123);\n        itemB = new Pointer(script, 123);\n        itemC = new Pointer(script, 1234);\n\n        Assert.AreEqual(itemB.GetHashCode(), itemA.GetHashCode());\n        Assert.AreNotEqual(itemC.GetHashCode(), itemA.GetHashCode());\n    }\n\n    [TestMethod]\n    public void TestNull()\n    {\n        StackItem nullItem = System.Array.Empty<byte>();\n        Assert.AreNotEqual(StackItem.Null, nullItem);\n\n        nullItem = new Null();\n        Assert.AreEqual(StackItem.Null, nullItem);\n    }\n\n    [TestMethod]\n    public void TestEqual()\n    {\n        StackItem itemA = \"NEO\";\n        StackItem itemB = \"NEO\";\n        StackItem itemC = \"SmartEconomy\";\n        StackItem itemD = \"Smarteconomy\";\n        StackItem itemE = \"smarteconomy\";\n\n        Assert.IsTrue(itemA.Equals(itemB));\n        Assert.IsFalse(itemA.Equals(itemC));\n        Assert.IsFalse(itemC.Equals(itemD));\n        Assert.IsFalse(itemD.Equals(itemE));\n        Assert.IsFalse(itemA.Equals(new object()));\n    }\n\n    [TestMethod]\n    public void TestCast()\n    {\n        // Signed byte\n\n        StackItem item = sbyte.MaxValue;\n\n        Assert.IsInstanceOfType<Integer>(item);\n        Assert.AreEqual(new BigInteger(sbyte.MaxValue), ((Integer)item).GetInteger());\n\n        // Unsigned byte\n\n        item = byte.MaxValue;\n\n        Assert.IsInstanceOfType<Integer>(item);\n        Assert.AreEqual(new BigInteger(byte.MaxValue), ((Integer)item).GetInteger());\n\n        // Signed short\n\n        item = short.MaxValue;\n\n        Assert.IsInstanceOfType<Integer>(item);\n        Assert.AreEqual(new BigInteger(short.MaxValue), ((Integer)item).GetInteger());\n\n        // Unsigned short\n\n        item = ushort.MaxValue;\n\n        Assert.IsInstanceOfType<Integer>(item);\n        Assert.AreEqual(new BigInteger(ushort.MaxValue), ((Integer)item).GetInteger());\n\n        // Signed integer\n\n        item = int.MaxValue;\n\n        Assert.IsInstanceOfType<Integer>(item);\n        Assert.AreEqual(new BigInteger(int.MaxValue), ((Integer)item).GetInteger());\n\n        // Unsigned integer\n\n        item = uint.MaxValue;\n\n        Assert.IsInstanceOfType<Integer>(item);\n        Assert.AreEqual(new BigInteger(uint.MaxValue), ((Integer)item).GetInteger());\n\n        // Signed long\n\n        item = long.MaxValue;\n\n        Assert.IsInstanceOfType<Integer>(item);\n        Assert.AreEqual(new BigInteger(long.MaxValue), ((Integer)item).GetInteger());\n\n        // Unsigned long\n\n        item = ulong.MaxValue;\n\n        Assert.IsInstanceOfType<Integer>(item);\n        Assert.AreEqual(new BigInteger(ulong.MaxValue), ((Integer)item).GetInteger());\n\n        // BigInteger\n\n        item = BigInteger.MinusOne;\n\n        Assert.IsInstanceOfType<Integer>(item);\n        Assert.AreEqual(new BigInteger(-1), ((Integer)item).GetInteger());\n\n        // Boolean\n\n        item = true;\n\n        Assert.IsInstanceOfType<Boolean>(item);\n        Assert.IsTrue(item.GetBoolean());\n\n        // ByteString\n\n        item = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 };\n\n        Assert.IsInstanceOfType<ByteString>(item);\n        CollectionAssert.AreEqual(new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 }, item.GetSpan().ToArray());\n    }\n\n    [TestMethod]\n    public void TestDeepCopy()\n    {\n        Array a = new()\n        {\n            true,\n            1,\n            new byte[] { 1 },\n            StackItem.Null,\n            new Buffer(new byte[] { 1 }),\n            new Map { [0] = 1, [2] = 3 },\n            new Struct { 1, 2, 3 }\n        };\n        a.Add(a);\n        Array aa = (Array)a.DeepCopy();\n        Assert.AreNotEqual(a, aa);\n        Assert.AreSame(aa, aa[^1]);\n        Assert.IsTrue(a[^2].Equals(aa[^2], ExecutionEngineLimits.Default));\n        Assert.AreNotSame(a[^2], aa[^2]);\n    }\n\n    [TestMethod]\n    public void TestMapRemove()\n    {\n        var key = 1;\n        var value = \"test\";\n        Map map = new()\n        {\n            [key] = value,\n        };\n\n        var removed = map.Remove(key);\n        Assert.AreEqual(value, removed);\n        Assert.IsFalse(map.ContainsKey(key));\n\n        removed = map.Remove(key);\n        Assert.IsNull(removed);\n\n        var bigKey = new ByteString(new byte[65]);\n        Assert.ThrowsExactly<System.ArgumentException>(() => map.Remove(bigKey));\n\n        var readonlyMap = (Map)map.DeepCopy(true);\n        Assert.ThrowsExactly<System.InvalidOperationException>(() => readonlyMap.Remove(key));\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_Struct.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_Struct.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\nusing Neo.VM.Types;\nusing System;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_Struct\n{\n    private readonly Struct @struct;\n\n    public UT_Struct()\n    {\n        @struct = new Struct { 1 };\n        for (int i = 0; i < 20000; i++)\n            @struct = new Struct { @struct };\n    }\n\n    [TestMethod]\n    public void TestClone()\n    {\n        Struct s1 = new() { 1, new Struct { 2 } };\n        Struct s2 = s1.Clone(ExecutionEngineLimits.Default);\n        s1[0] = 3;\n        Assert.AreEqual(1, s2[0]);\n        ((Struct)s1[1])[0] = 3;\n        Assert.AreEqual(2, ((Struct)s2[1])[0]);\n        Assert.ThrowsExactly<InvalidOperationException>(() => _ = @struct.Clone(ExecutionEngineLimits.Default));\n    }\n\n    [TestMethod]\n    public void TestEquals()\n    {\n        Struct s1 = new() { 1, new Struct { 2 } };\n        Struct s2 = new() { 1, new Struct { 2 } };\n        Assert.IsTrue(s1.Equals(s2, ExecutionEngineLimits.Default));\n        Struct s3 = new() { 1, new Struct { 3 } };\n        Assert.IsFalse(s1.Equals(s3, ExecutionEngineLimits.Default));\n        Assert.ThrowsExactly<InvalidOperationException>(() => _ = @struct.Equals(@struct.Clone(ExecutionEngineLimits.Default), ExecutionEngineLimits.Default));\n    }\n\n    [TestMethod]\n    public void TestEqualsDos()\n    {\n        var payloadStr = new string('h', 65535);\n        Struct s1 = new();\n        Struct s2 = new();\n        for (int i = 0; i < 2; i++)\n        {\n            s1.Add(payloadStr);\n            s2.Add(payloadStr);\n        }\n        Assert.ThrowsExactly<InvalidOperationException>(() => _ = s1.Equals(s2, ExecutionEngineLimits.Default));\n\n        for (int i = 0; i < 1000; i++)\n        {\n            s1.Add(payloadStr);\n            s2.Add(payloadStr);\n        }\n        Assert.ThrowsExactly<InvalidOperationException>(() => _ = s1.Equals(s2, ExecutionEngineLimits.Default));\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_Unsafe.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_Unsafe.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_Unsafe\n{\n    [TestMethod]\n    public void NotZero()\n    {\n        Assert.IsFalse(Unsafe.NotZero(System.Array.Empty<byte>()));\n        Assert.IsFalse(Unsafe.NotZero(new byte[4]));\n        Assert.IsFalse(Unsafe.NotZero(new byte[8]));\n        Assert.IsFalse(Unsafe.NotZero(new byte[11]));\n\n        Assert.IsTrue(Unsafe.NotZero(new byte[4] { 0x00, 0x00, 0x00, 0x01 }));\n        Assert.IsTrue(Unsafe.NotZero(new byte[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }));\n        Assert.IsTrue(Unsafe.NotZero(new byte[11] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }));\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_Utility.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_Utility.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.VM;\nusing System;\nusing System.Numerics;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_Utility\n{\n    [TestMethod]\n    public void SqrtTest()\n    {\n        Assert.ThrowsExactly<InvalidOperationException>(() => BigInteger.MinusOne.Sqrt());\n\n        Assert.AreEqual(BigInteger.Zero, BigInteger.Zero.Sqrt());\n        Assert.AreEqual(new BigInteger(1), new BigInteger(1).Sqrt());\n        Assert.AreEqual(new BigInteger(1), new BigInteger(2).Sqrt());\n        Assert.AreEqual(new BigInteger(1), new BigInteger(3).Sqrt());\n        Assert.AreEqual(new BigInteger(2), new BigInteger(4).Sqrt());\n        Assert.AreEqual(new BigInteger(9), new BigInteger(81).Sqrt());\n    }\n\n    [TestMethod]\n    public void ModInverseTest()\n    {\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => BigInteger.One.ModInverse(BigInteger.Zero));\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => BigInteger.One.ModInverse(BigInteger.One));\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => BigInteger.Zero.ModInverse(BigInteger.Zero));\n        Assert.ThrowsExactly<ArgumentOutOfRangeException>(() => BigInteger.Zero.ModInverse(BigInteger.One));\n        Assert.ThrowsExactly<InvalidOperationException>(() => new BigInteger(ushort.MaxValue).ModInverse(byte.MaxValue));\n\n        Assert.AreEqual(new BigInteger(52), new BigInteger(19).ModInverse(141));\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/UT_VMJson.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// UT_VMJson.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.Test.Extensions;\nusing Neo.Test.Types;\nusing System;\nusing System.IO;\nusing System.Text;\n\nnamespace Neo.Test;\n\n[TestClass]\npublic class UT_VMJson : VMJsonTestBase\n{\n    [TestMethod]\n    public void TestOthers() => TestJson(\"./Tests/Others\");\n\n    [TestMethod]\n    public void TestOpCodesArrays() => TestJson(\"./Tests/OpCodes/Arrays\");\n\n    [TestMethod]\n    public void TestOpCodesStack() => TestJson(\"./Tests/OpCodes/Stack\");\n\n    [TestMethod]\n    public void TestOpCodesSlot() => TestJson(\"./Tests/OpCodes/Slot\");\n\n    [TestMethod]\n    public void TestOpCodesSplice() => TestJson(\"./Tests/OpCodes/Splice\");\n\n    [TestMethod]\n    public void TestOpCodesControl() => TestJson(\"./Tests/OpCodes/Control\");\n\n    [TestMethod]\n    public void TestOpCodesPush() => TestJson(\"./Tests/OpCodes/Push\");\n\n    [TestMethod]\n    public void TestOpCodesArithmetic() => TestJson(\"./Tests/OpCodes/Arithmetic\");\n\n    [TestMethod]\n    public void TestOpCodesBitwiseLogic() => TestJson(\"./Tests/OpCodes/BitwiseLogic\");\n\n    [TestMethod]\n    public void TestOpCodesTypes() => TestJson(\"./Tests/OpCodes/Types\");\n\n    private static void TestJson(string path)\n    {\n        foreach (var file in Directory.GetFiles(path, \"*.json\", SearchOption.AllDirectories))\n        {\n            Console.WriteLine($\"Processing file '{file}'\");\n\n            var realFile = Path.GetFullPath(file);\n            var json = File.ReadAllText(realFile, Encoding.UTF8);\n            var ut = json.DeserializeJson<VMUT>();\n\n            Assert.IsFalse(string.IsNullOrEmpty(ut.Name), \"Name is required\");\n\n            if (json != ut.ToJson().Replace(\"\\r\\n\", \"\\n\"))\n            {\n                // Format json\n\n                Console.WriteLine($\"The file '{realFile}' was optimized\");\n                //File.WriteAllText(realFile, ut.ToJson().Replace(\"\\r\\n\", \"\\n\"), Encoding.UTF8);\n            }\n\n            try\n            {\n                ExecuteTest(ut);\n            }\n            catch (Exception ex)\n            {\n                throw new AggregateException(\"Error in file: \" + realFile, ex);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "tests/Neo.VM.Tests/VMJsonTestBase.cs",
    "content": "// Copyright (C) 2015-2026 The Neo Project.\n//\n// VMJsonTestBase.cs file belongs to the neo project and is free\n// software distributed under the MIT software license, see the\n// accompanying file LICENSE in the main directory of the\n// repository or http://www.opensource.org/licenses/mit-license.php\n// for more details.\n//\n// Redistribution and use in source and binary forms with or without\n// modifications are permitted.\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Neo.Test.Extensions;\nusing Neo.Test.Types;\nusing Neo.VM;\nusing Neo.VM.Types;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Array = Neo.VM.Types.Array;\nusing Boolean = Neo.VM.Types.Boolean;\nusing Buffer = Neo.VM.Types.Buffer;\n\nnamespace Neo.Test;\n\npublic abstract class VMJsonTestBase\n{\n    /// <summary>\n    /// Execute this test\n    /// </summary>\n    /// <param name=\"ut\">Test</param>\n    public static void ExecuteTest(VMUT ut)\n    {\n        foreach (var test in ut.Tests)\n        {\n            Assert.IsFalse(string.IsNullOrEmpty(test.Name), \"Name is required\");\n\n            foreach (var refCounter in new IReferenceCounter[] { new ReferenceCounter(), new ReferenceCounterV2() })\n            {\n                using TestEngine engine = new TestEngine(refCounter, ExecutionEngineLimits.Default);\n                Debugger debugger = new(engine);\n\n                if (test.Script.Length > 0)\n                {\n                    engine.LoadScript(test.Script);\n                }\n\n                // Execute Steps\n\n                if (test.Steps != null)\n                {\n                    foreach (var step in test.Steps)\n                    {\n                        // Actions\n\n                        if (step.Actions != null) foreach (var run in step.Actions)\n                        {\n                            switch (run)\n                            {\n                                case VMUTActionType.Execute: debugger.Execute(); break;\n                                case VMUTActionType.StepInto: debugger.StepInto(); break;\n                                case VMUTActionType.StepOut: debugger.StepOut(); break;\n                                case VMUTActionType.StepOver: debugger.StepOver(); break;\n                            }\n                        }\n\n                        // Review results\n\n                        var add = string.IsNullOrEmpty(step.Name) ? \"\" : \"-\" + step.Name;\n\n                        AssertResult(step.Result, engine, $\"{ut.Category}-{ut.Name}-{test.Name}{add}: \");\n                    }\n                }\n            }\n        }\n    }\n\n    /// <summary>\n    /// Assert result\n    /// </summary>\n    /// <param name=\"engine\">Engine</param>\n    /// <param name=\"result\">Result</param>\n    /// <param name=\"message\">Message</param>\n    private static void AssertResult(VMUTExecutionEngineState result, TestEngine engine, string message)\n    {\n        AssertAreEqual(result.State.ToString().ToLowerInvariant(), engine.State.ToString().ToLowerInvariant(), message + \"State is different\");\n        if (result.Refs != null && engine.ReferenceCounter.Version == RCVersion.V2)\n            AssertAreEqual(result.Refs, engine.ReferenceCounter.Count, message + \"Refs are different\");\n        if (engine.State == VMState.FAULT)\n        {\n            if (result.ExceptionMessage != null)\n            {\n                AssertAreEqual(result.ExceptionMessage, engine.FaultException.Message, message + \" [Exception]\");\n            }\n            return;\n        }\n        AssertResult(result.InvocationStack, engine.InvocationStack, message + \" [Invocation stack]\");\n        AssertResult(result.ResultStack, engine.ResultStack, message + \" [Result stack] \");\n    }\n\n    /// <summary>\n    /// Assert invocation stack\n    /// </summary>\n    /// <param name=\"stack\">Stack</param>\n    /// <param name=\"result\">Result</param>\n    /// <param name=\"message\">Message</param>\n    private static void AssertResult(VMUTExecutionContextState[] result, Stack<ExecutionContext> stack, string message)\n    {\n        AssertAreEqual(result == null ? 0 : result.Length, stack.Count, message + \"Stack is different\");\n\n        int x = 0;\n        foreach (var context in stack)\n        {\n            var opcode = context.InstructionPointer >= context.Script.Length ? OpCode.RET : context.Script[context.InstructionPointer];\n\n            AssertAreEqual(result[x].NextInstruction, opcode, message + \"Next instruction is different\");\n            AssertAreEqual(result[x].InstructionPointer, context.InstructionPointer, message + \"Instruction pointer is different\");\n\n            // Check stack\n\n            AssertResult(result[x].EvaluationStack, context.EvaluationStack, message + \" [EvaluationStack]\");\n\n            // Check slots\n\n            AssertResult(result[x].Arguments, context.Arguments, message + \" [Arguments]\");\n            AssertResult(result[x].LocalVariables, context.LocalVariables, message + \" [LocalVariables]\");\n            AssertResult(result[x].StaticFields, context.StaticFields, message + \" [StaticFields]\");\n\n            x++;\n        }\n    }\n\n    /// <summary>\n    /// Assert result stack\n    /// </summary>\n    /// <param name=\"stack\">Stack</param>\n    /// <param name=\"result\">Result</param>\n    /// <param name=\"message\">Message</param>\n    private static void AssertResult(VMUTStackItem[] result, EvaluationStack stack, string message)\n    {\n        AssertAreEqual(stack.Count, result == null ? 0 : result.Length, message + \"Stack is different\");\n\n        for (int x = 0, max = stack.Count; x < max; x++)\n        {\n            AssertAreEqual(ItemToJson(stack.Peek(x)).ToString(Formatting.None), PrepareJsonItem(result[x]).ToString(Formatting.None), message + \"Stack item is different\");\n        }\n    }\n\n    /// <summary>\n    /// Assert result slot\n    /// </summary>\n    /// <param name=\"slot\">Slot</param>\n    /// <param name=\"result\">Result</param>\n    /// <param name=\"message\">Message</param>\n    private static void AssertResult(VMUTStackItem[] result, Slot slot, string message)\n    {\n        AssertAreEqual(slot == null ? 0 : slot.Count, result == null ? 0 : result.Length, message + \"Slot is different\");\n\n        for (int x = 0, max = slot == null ? 0 : slot.Count; x < max; x++)\n        {\n            AssertAreEqual(ItemToJson(slot[x]).ToString(Formatting.None), PrepareJsonItem(result[x]).ToString(Formatting.None), message + \"Stack item is different\");\n        }\n    }\n\n    private static JObject PrepareJsonItem(VMUTStackItem item)\n    {\n        var ret = new JObject\n        {\n            [\"type\"] = item.Type.ToString(),\n            [\"value\"] = item.Value\n        };\n\n        switch (item.Type)\n        {\n            case VMUTStackItemType.Null:\n                {\n                    ret[\"type\"] = VMUTStackItemType.Null.ToString();\n                    ret.Remove(\"value\");\n                    break;\n                }\n            case VMUTStackItemType.Pointer:\n                {\n                    ret[\"type\"] = VMUTStackItemType.Pointer.ToString();\n                    ret[\"value\"] = item.Value.Value<int>();\n                    break;\n                }\n            case VMUTStackItemType.String:\n                {\n                    // Easy access\n\n                    ret[\"type\"] = VMUTStackItemType.ByteString.ToString();\n                    ret[\"value\"] = Encoding.UTF8.GetBytes(item.Value.Value<string>());\n                    break;\n                }\n            case VMUTStackItemType.ByteString:\n            case VMUTStackItemType.Buffer:\n                {\n                    var value = ret[\"value\"].Value<string>();\n                    Assert.IsTrue(string.IsNullOrEmpty(value) || value.StartsWith(\"0x\"), $\"'0x' prefix required for value: '{value}'\");\n                    ret[\"value\"] = value.FromHexString();\n                    break;\n                }\n            case VMUTStackItemType.Integer:\n                {\n                    // Ensure format\n\n                    ret[\"value\"] = ret[\"value\"].Value<string>();\n                    break;\n                }\n            case VMUTStackItemType.Struct:\n            case VMUTStackItemType.Array:\n                {\n                    var array = (JArray)ret[\"value\"];\n\n                    for (int x = 0, m = array.Count; x < m; x++)\n                    {\n                        array[x] = PrepareJsonItem(JsonConvert.DeserializeObject<VMUTStackItem>(array[x].ToString()));\n                    }\n\n                    ret[\"value\"] = array;\n                    break;\n                }\n            case VMUTStackItemType.Map:\n                {\n                    var obj = (JObject)ret[\"value\"];\n\n                    foreach (var prop in obj.Properties())\n                    {\n                        obj[prop.Name] = PrepareJsonItem(JsonConvert.DeserializeObject<VMUTStackItem>(prop.Value.ToString()));\n                    }\n\n                    ret[\"value\"] = obj;\n                    break;\n                }\n        }\n\n        return ret;\n    }\n\n    private static JObject ItemToJson(StackItem item)\n    {\n        if (item == null) return null;\n\n        JToken value;\n        string type = item.GetType().Name;\n\n        switch (item)\n        {\n            case Null _:\n                {\n                    return new JObject\n                    {\n                        [\"type\"] = type,\n                    };\n                }\n            case Pointer p:\n                {\n                    return new JObject\n                    {\n                        [\"type\"] = type,\n                        [\"value\"] = p.Position\n                    };\n                }\n            case Boolean v: value = new JValue(v.GetBoolean()); break;\n            case Integer v: value = new JValue(v.GetInteger().ToString()); break;\n            case ByteString v: value = new JValue(v.GetSpan().ToArray()); break;\n            case Buffer v: value = new JValue(v.InnerBuffer.ToArray()); break;\n            //case VM.Types.Struct v:\n            case Array v:\n                {\n                    var jarray = new JArray();\n\n                    foreach (var entry in v)\n                    {\n                        jarray.Add(ItemToJson(entry));\n                    }\n\n                    value = jarray;\n                    break;\n                }\n            case Map v:\n                {\n                    var jdic = new JObject();\n\n                    foreach (var entry in v)\n                    {\n                        jdic.Add(entry.Key.GetSpan().ToArray().ToHexString(), ItemToJson(entry.Value));\n                    }\n\n                    value = jdic;\n                    break;\n                }\n            case InteropInterface v:\n                {\n                    type = \"Interop\";\n                    var obj = v.GetInterface<object>();\n\n                    value = obj.GetType().Name.ToString();\n                    break;\n                }\n            default: throw new NotImplementedException();\n        }\n\n        return new JObject\n        {\n            [\"type\"] = type,\n            [\"value\"] = value\n        };\n    }\n\n    /// <summary>\n    /// Assert with message\n    /// </summary>\n    /// <param name=\"expected\">A</param>\n    /// <param name=\"actual\">B</param>\n    /// <param name=\"message\">Message</param>\n    private static void AssertAreEqual(object expected, object actual, string message)\n    {\n        if (expected is byte[] ba) expected = ba.ToHexString().ToUpperInvariant();\n        if (actual is byte[] bb) actual = bb.ToHexString().ToUpperInvariant();\n\n        if (expected.ToJson() != actual.ToJson())\n        {\n            throw new Exception(message +\n                $\"{Environment.NewLine}Expected:{Environment.NewLine + expected.ToString() + Environment.NewLine}Actual:{Environment.NewLine + actual.ToString()}\");\n        }\n    }\n}\n"
  }
]