{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_registry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "NAME",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_contractName",
          "type": "bytes32"
        }
      ],
      "name": "getContractFromRegistry",
      "outputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "22": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
    "40": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/ILicense.sol",
    "44": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IRegistry.sol",
    "86": "contracts/services/ProductService.sol",
    "91": "contracts/shared/WithRegistry.sol"
  },
  "ast": {
    "absolutePath": "contracts/services/ProductService.sol",
    "exportedSymbols": {
      "Context": [
        24074
      ],
      "ILicense": [
        22433
      ],
      "IRegistry": [
        21750
      ],
      "ProductService": [
        14014
      ],
      "WithRegistry": [
        15290
      ]
    },
    "id": 14015,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13938,
        "literals": [
          "solidity",
          "0.8",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:22:86"
      },
      {
        "absolutePath": "contracts/shared/WithRegistry.sol",
        "file": "../shared/WithRegistry.sol",
        "id": 13939,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14015,
        "sourceUnit": 15291,
        "src": "63:36:86",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/ILicense.sol",
        "file": "@etherisc/gif-interface/contracts/modules/ILicense.sol",
        "id": 13940,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14015,
        "sourceUnit": 22434,
        "src": "142:64:86",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
        "file": "@openzeppelin/contracts/utils/Context.sol",
        "id": 13941,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14015,
        "sourceUnit": 24075,
        "src": "208:51:86",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 13942,
              "name": "WithRegistry",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 15290,
              "src": "292:12:86"
            },
            "id": 13943,
            "nodeType": "InheritanceSpecifier",
            "src": "292:12:86"
          },
          {
            "baseName": {
              "id": 13944,
              "name": "Context",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 24074,
              "src": "332:7:86"
            },
            "id": 13945,
            "nodeType": "InheritanceSpecifier",
            "src": "332:7:86"
          }
        ],
        "contractDependencies": [
          15290,
          24074
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 14014,
        "linearizedBaseContracts": [
          14014,
          24074,
          15290
        ],
        "name": "ProductService",
        "nameLocation": "270:14:86",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "functionSelector": "a3f4df7e",
            "id": 13948,
            "mutability": "constant",
            "name": "NAME",
            "nameLocation": "371:4:86",
            "nodeType": "VariableDeclaration",
            "scope": 14014,
            "src": "347:47:86",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 13946,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "347:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "50726f6475637453657276696365",
              "id": 13947,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "378:16:86",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_a0656cfcc1bc970b947aca201a5cc1b43cf3c3649a4b2d6f82968797074fe0b8",
                "typeString": "literal_string \"ProductService\""
              },
              "value": "ProductService"
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 13956,
              "nodeType": "Block",
              "src": "505:2:86",
              "statements": []
            },
            "id": 13957,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 13953,
                    "name": "_registry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13950,
                    "src": "494:9:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13954,
                "modifierName": {
                  "id": 13952,
                  "name": "WithRegistry",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 15290,
                  "src": "481:12:86"
                },
                "nodeType": "ModifierInvocation",
                "src": "481:23:86"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13950,
                  "mutability": "mutable",
                  "name": "_registry",
                  "nameLocation": "470:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 13957,
                  "src": "462:17:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13949,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "462:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "461:19:86"
            },
            "returnParameters": {
              "id": 13955,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "505:0:86"
            },
            "scope": 14014,
            "src": "450:57:86",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13990,
              "nodeType": "Block",
              "src": "533:368:86",
              "statements": [
                {
                  "assignments": [
                    null,
                    13961,
                    13963
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 13961,
                      "mutability": "mutable",
                      "name": "isAuthorized",
                      "nameLocation": "631:12:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 13990,
                      "src": "626:17:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 13960,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "626:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 13963,
                      "mutability": "mutable",
                      "name": "policyFlow",
                      "nameLocation": "653:10:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 13990,
                      "src": "645:18:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 13962,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "645:7:86",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13970,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 13967,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24064,
                          "src": "701:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 13968,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "701:12:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 13964,
                          "name": "_license",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14013,
                          "src": "667:8:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILicense_$22433_$",
                            "typeString": "function () view returns (contract ILicense)"
                          }
                        },
                        "id": 13965,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "667:10:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILicense_$22433",
                          "typeString": "contract ILicense"
                        }
                      },
                      "id": 13966,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getAuthorizationStatus",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22432,
                      "src": "667:33:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$_t_address_$",
                        "typeString": "function (address) view external returns (uint256,bool,address)"
                      }
                    },
                    "id": 13969,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "667:47:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$_t_address_$",
                      "typeString": "tuple(uint256,bool,address)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "624:90:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13972,
                        "name": "isAuthorized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13961,
                        "src": "733:12:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a5052532d3030313a4e4f545f415554484f52495a4544",
                        "id": 13973,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "747:30:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2ea29d619e783380245e9479bc50992b7e9e66d498084c15d9aeb14649a09dc3",
                          "typeString": "literal_string \"ERROR:PRS-001:NOT_AUTHORIZED\""
                        },
                        "value": "ERROR:PRS-001:NOT_AUTHORIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2ea29d619e783380245e9479bc50992b7e9e66d498084c15d9aeb14649a09dc3",
                          "typeString": "literal_string \"ERROR:PRS-001:NOT_AUTHORIZED\""
                        }
                      ],
                      "id": 13971,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "725:7:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "725:53:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13975,
                  "nodeType": "ExpressionStatement",
                  "src": "725:53:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13982,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 13977,
                          "name": "policyFlow",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13963,
                          "src": "796:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 13980,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "818:1:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13979,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "810:7:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 13978,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "810:7:86",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 13981,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "810:10:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "796:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a5052532d3030323a504f4c4943595f464c4f575f4e4f545f5245534f4c564544",
                        "id": 13983,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "821:40:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3481a442355178eff70c53b479d1406dd857fddda3e91ffea746909cf740d5cd",
                          "typeString": "literal_string \"ERROR:PRS-002:POLICY_FLOW_NOT_RESOLVED\""
                        },
                        "value": "ERROR:PRS-002:POLICY_FLOW_NOT_RESOLVED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3481a442355178eff70c53b479d1406dd857fddda3e91ffea746909cf740d5cd",
                          "typeString": "literal_string \"ERROR:PRS-002:POLICY_FLOW_NOT_RESOLVED\""
                        }
                      ],
                      "id": 13976,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "788:7:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "788:74:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13985,
                  "nodeType": "ExpressionStatement",
                  "src": "788:74:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13987,
                        "name": "policyFlow",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13963,
                        "src": "883:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13986,
                      "name": "_delegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13999,
                      "src": "873:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "873:21:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13989,
                  "nodeType": "ExpressionStatement",
                  "src": "873:21:86"
                }
              ]
            },
            "id": 13991,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13958,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "521:2:86"
            },
            "returnParameters": {
              "id": 13959,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "533:0:86"
            },
            "scope": 14014,
            "src": "513:388:86",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13998,
              "nodeType": "Block",
              "src": "1314:835:86",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1333:810:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1586:1:86",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1589:1:86",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "calldatasize",
                                "nodeType": "YulIdentifier",
                                "src": "1592:12:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1592:14:86"
                            }
                          ],
                          "functionName": {
                            "name": "calldatacopy",
                            "nodeType": "YulIdentifier",
                            "src": "1573:12:86"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1573:34:86"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1573:34:86"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "1734:74:86",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "gas",
                                "nodeType": "YulIdentifier",
                                "src": "1761:3:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1761:5:86"
                            },
                            {
                              "name": "implementation",
                              "nodeType": "YulIdentifier",
                              "src": "1768:14:86"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1784:1:86",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "calldatasize",
                                "nodeType": "YulIdentifier",
                                "src": "1787:12:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1787:14:86"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1803:1:86",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1806:1:86",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "delegatecall",
                            "nodeType": "YulIdentifier",
                            "src": "1748:12:86"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1748:60:86"
                        },
                        "variables": [
                          {
                            "name": "result",
                            "nodeType": "YulTypedName",
                            "src": "1738:6:86",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1876:1:86",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1879:1:86",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "returndatasize",
                                "nodeType": "YulIdentifier",
                                "src": "1882:14:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1882:16:86"
                            }
                          ],
                          "functionName": {
                            "name": "returndatacopy",
                            "nodeType": "YulIdentifier",
                            "src": "1861:14:86"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1861:38:86"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1861:38:86"
                      },
                      {
                        "cases": [
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "1994:59:86",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2019:1:86",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "returndatasize",
                                          "nodeType": "YulIdentifier",
                                          "src": "2022:14:86"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2022:16:86"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "revert",
                                      "nodeType": "YulIdentifier",
                                      "src": "2012:6:86"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2012:27:86"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "2012:27:86"
                                }
                              ]
                            },
                            "nodeType": "YulCase",
                            "src": "1987:66:86",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1992:1:86",
                              "type": "",
                              "value": "0"
                            }
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "2074:59:86",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2099:1:86",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "returndatasize",
                                          "nodeType": "YulIdentifier",
                                          "src": "2102:14:86"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2102:16:86"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "return",
                                      "nodeType": "YulIdentifier",
                                      "src": "2092:6:86"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2092:27:86"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "2092:27:86"
                                }
                              ]
                            },
                            "nodeType": "YulCase",
                            "src": "2066:67:86",
                            "value": "default"
                          }
                        ],
                        "expression": {
                          "name": "result",
                          "nodeType": "YulIdentifier",
                          "src": "1920:6:86"
                        },
                        "nodeType": "YulSwitch",
                        "src": "1913:220:86"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 13994,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1768:14:86",
                      "valueSize": 1
                    }
                  ],
                  "id": 13997,
                  "nodeType": "InlineAssembly",
                  "src": "1324:819:86"
                }
              ]
            },
            "documentation": {
              "id": 13992,
              "nodeType": "StructuredDocumentation",
              "src": "908:349:86",
              "text": " @dev Delegates the current call to `implementation`.\n This function does not return to its internal call site, it will return directly to the external caller.\n This function is a 1:1 copy of _delegate from\n https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.6/contracts/proxy/Proxy.sol"
            },
            "id": 13999,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_delegate",
            "nameLocation": "1271:9:86",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13995,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13994,
                  "mutability": "mutable",
                  "name": "implementation",
                  "nameLocation": "1289:14:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 13999,
                  "src": "1281:22:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13993,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1281:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1280:24:86"
            },
            "returnParameters": {
              "id": 13996,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1314:0:86"
            },
            "scope": 14014,
            "src": "1262:887:86",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14012,
              "nodeType": "Block",
              "src": "2208:65:86",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "4c6963656e7365",
                            "id": 14008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2255:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_3b9d03c09d4e108ca3b630bc72507e91ae7da8eb1de63663acbce1d12cfbfb3a",
                              "typeString": "literal_string \"License\""
                            },
                            "value": "License"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_3b9d03c09d4e108ca3b630bc72507e91ae7da8eb1de63663acbce1d12cfbfb3a",
                              "typeString": "literal_string \"License\""
                            }
                          ],
                          "expression": {
                            "id": 14006,
                            "name": "registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15176,
                            "src": "2234:8:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IRegistry_$21750",
                              "typeString": "contract IRegistry"
                            }
                          },
                          "id": 14007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21723,
                          "src": "2234:20:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 14009,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2234:31:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14005,
                      "name": "ILicense",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22433,
                      "src": "2225:8:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ILicense_$22433_$",
                        "typeString": "type(contract ILicense)"
                      }
                    },
                    "id": 14010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2225:41:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILicense_$22433",
                      "typeString": "contract ILicense"
                    }
                  },
                  "functionReturnParameters": 14004,
                  "id": 14011,
                  "nodeType": "Return",
                  "src": "2218:48:86"
                }
              ]
            },
            "id": 14013,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_license",
            "nameLocation": "2164:8:86",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14000,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2172:2:86"
            },
            "returnParameters": {
              "id": 14004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14003,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14013,
                  "src": "2198:8:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ILicense_$22433",
                    "typeString": "contract ILicense"
                  },
                  "typeName": {
                    "id": 14002,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14001,
                      "name": "ILicense",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 22433,
                      "src": "2198:8:86"
                    },
                    "referencedDeclaration": 22433,
                    "src": "2198:8:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILicense_$22433",
                      "typeString": "contract ILicense"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2197:10:86"
            },
            "scope": 14014,
            "src": "2155:118:86",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 14015,
        "src": "261:2015:86"
      }
    ],
    "src": "39:2238:86"
  },
  "bytecode": "60a060405234801561001057600080fd5b506040516104f03803806104f083398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c61045261009e600039600081816101a00152818161023a01526102fe01526104526000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80637b1039991461019b578063a3f4df7e146101df578063a5b25e7114610205575b60008061004c610218565b6001600160a01b031663d3e9c314336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160606040518083038186803b15801561009a57600080fd5b505afa1580156100ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d291906103db565b9250925050816101295760405162461bcd60e51b815260206004820152601c60248201527f4552524f523a5052532d3030313a4e4f545f415554484f52495a45440000000060448201526064015b60405180910390fd5b6001600160a01b03811661018e5760405162461bcd60e51b815260206004820152602660248201527f4552524f523a5052532d3030323a504f4c4943595f464c4f575f4e4f545f524560448201526514d3d315915160d21b6064820152608401610120565b610197816102c1565b5050005b6101c27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f76d50726f647563745365727669636560901b81565b6040519081526020016101d6565b6101c26102133660046103c3565b6102e5565b604051631c2d8fb360e31b8152664c6963656e736560c81b60048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e16c7d989060240160206040518083038186803b15801561028457600080fd5b505afa158015610298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102bc91906103a2565b905090565b3660008037600080366000845af43d6000803e8080156102e0573d6000f35b3d6000fd5b604051631c2d8fb360e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e16c7d989060240160206040518083038186803b15801561034857600080fd5b505afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038091906103a2565b92915050565b80516001600160a01b038116811461039d57600080fd5b919050565b6000602082840312156103b3578081fd5b6103bc82610386565b9392505050565b6000602082840312156103d4578081fd5b5035919050565b6000806000606084860312156103ef578182fd5b8351925060208401518015158114610405578283fd5b915061041360408501610386565b9050925092509256fea2646970667358221220dea479fd732c159d64cfde52f075e1eef6e25609f00918c45982d8e62ff9fb5664736f6c63430008020033",
  "bytecodeSha1": "83dbd8b105893ab8973232724bdfe74c7c142908",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "ProductService",
  "coverageMap": {
    "branches": {
      "22": {},
      "40": {},
      "44": {},
      "86": {
        "ProductService.<fallback>": {
          "6": [
            733,
            745,
            true
          ],
          "7": [
            796,
            820,
            true
          ]
        }
      },
      "91": {}
    },
    "statements": {
      "22": {
        "Context._msgSender": {
          "0": [
            712,
            729
          ]
        }
      },
      "40": {},
      "44": {},
      "86": {
        "ProductService.<fallback>": {
          "1": [
            725,
            778
          ],
          "2": [
            788,
            862
          ],
          "3": [
            873,
            894
          ]
        },
        "ProductService._license": {
          "4": [
            2218,
            2266
          ]
        }
      },
      "91": {
        "WithRegistry.getContractFromRegistry": {
          "5": [
            1494,
            1537
          ]
        }
      }
    }
  },
  "dependencies": [
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Context",
    "etherisc/gif-interface@3b0002a/ILicense",
    "etherisc/gif-interface@3b0002a/IRegistry",
    "WithRegistry"
  ],
  "deployedBytecode": "608060405234801561001057600080fd5b50600436106100415760003560e01c80637b1039991461019b578063a3f4df7e146101df578063a5b25e7114610205575b60008061004c610218565b6001600160a01b031663d3e9c314336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160606040518083038186803b15801561009a57600080fd5b505afa1580156100ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d291906103db565b9250925050816101295760405162461bcd60e51b815260206004820152601c60248201527f4552524f523a5052532d3030313a4e4f545f415554484f52495a45440000000060448201526064015b60405180910390fd5b6001600160a01b03811661018e5760405162461bcd60e51b815260206004820152602660248201527f4552524f523a5052532d3030323a504f4c4943595f464c4f575f4e4f545f524560448201526514d3d315915160d21b6064820152608401610120565b610197816102c1565b5050005b6101c27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f76d50726f647563745365727669636560901b81565b6040519081526020016101d6565b6101c26102133660046103c3565b6102e5565b604051631c2d8fb360e31b8152664c6963656e736560c81b60048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e16c7d989060240160206040518083038186803b15801561028457600080fd5b505afa158015610298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102bc91906103a2565b905090565b3660008037600080366000845af43d6000803e8080156102e0573d6000f35b3d6000fd5b604051631c2d8fb360e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e16c7d989060240160206040518083038186803b15801561034857600080fd5b505afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038091906103a2565b92915050565b80516001600160a01b038116811461039d57600080fd5b919050565b6000602082840312156103b3578081fd5b6103bc82610386565b9392505050565b6000602082840312156103d4578081fd5b5035919050565b6000806000606084860312156103ef578182fd5b8351925060208401518015158114610405578283fd5b915061041360408501610386565b9050925092509256fea2646970667358221220dea479fd732c159d64cfde52f075e1eef6e25609f00918c45982d8e62ff9fb5664736f6c63430008020033",
  "deployedSourceMap": "261:2015:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;626:17;645:18;667:10;:8;:10::i;:::-;-1:-1:-1;;;;;667:33:86;;719:10:22;667:47:86;;-1:-1:-1;;;;;;667:47:86;;;;;;;-1:-1:-1;;;;;1226:32:103;;;667:47:86;;;1208:51:103;1181:18;;667:47:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;624:90;;;;;733:12;725:53;;;;-1:-1:-1;;;725:53:86;;1881:2:103;725:53:86;;;1863:21:103;1920:2;1900:18;;;1893:30;1959;1939:18;;;1932:58;2007:18;;725:53:86;;;;;;;;;-1:-1:-1;;;;;796:24:86;;788:74;;;;-1:-1:-1;;;788:74:86;;2238:2:103;788:74:86;;;2220:21:103;2277:2;2257:18;;;2250:30;2316:34;2296:18;;;2289:62;-1:-1:-1;;;2367:18:103;;;2360:36;2413:19;;788:74:86;2210:228:103;788:74:86;873:21;883:10;873:9;:21::i;:::-;513:388;;261:2015;412:35:91;;;;;;;;-1:-1:-1;;;;;1226:32:103;;;1208:51;;1196:2;1181:18;412:35:91;;;;;;;;347:47:86;;-1:-1:-1;;;347:47:86;;;;;1416:25:103;;;1404:2;1389:18;347:47:86;1371:76:103;1344:200:91;;;;;;:::i;:::-;;:::i;2155:118:86:-;2234:31;;-1:-1:-1;;;2234:31:86;;-1:-1:-1;;;2234:31:86;;;2652:28:103;2198:8:86;;2234;-1:-1:-1;;;;;2234:20:86;;;;2625:18:103;;2234:31:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2218:48;;2155:118;:::o;1262:887::-;1592:14;1589:1;1586;1573:34;1806:1;1803;1787:14;1784:1;1768:14;1761:5;1748:60;1882:16;1879:1;1876;1861:38;1920:6;1987:66;;;;2102:16;2099:1;2092:27;1987:66;2022:16;2019:1;2012:27;1344:200:91;1502:35;;-1:-1:-1;;;1502:35:91;;;;;1416:25:103;;;1465:13:91;;1502:8;-1:-1:-1;;;;;1502:20:91;;;;1389:18:103;;1502:35:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1494:43;1344:200;-1:-1:-1;;1344:200:91:o;14:177:103:-;93:13;;-1:-1:-1;;;;;135:31:103;;125:42;;115:2;;181:1;178;171:12;115:2;74:117;;;:::o;196:218::-;;319:2;307:9;298:7;294:23;290:32;287:2;;;340:6;332;325:22;287:2;368:40;398:9;368:40;:::i;:::-;358:50;277:137;-1:-1:-1;;;277:137:103:o;419:190::-;;531:2;519:9;510:7;506:23;502:32;499:2;;;552:6;544;537:22;499:2;-1:-1:-1;580:23:103;;489:120;-1:-1:-1;489:120:103:o;614:443::-;;;;768:2;756:9;747:7;743:23;739:32;736:2;;;789:6;781;774:22;736:2;823:9;817:16;807:26;;876:2;865:9;861:18;855:25;923:5;916:13;909:21;902:5;899:32;889:2;;950:6;942;935:22;889:2;978:5;-1:-1:-1;1002:49:103;1047:2;1032:18;;1002:49;:::i;:::-;992:59;;726:331;;;;;:::o",
  "language": "Solidity",
  "natspec": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "offset": [
    261,
    2276
  ],
  "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7B103999 EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0xA3F4DF7E EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0xA5B25E71 EQ PUSH2 0x205 JUMPI JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4C PUSH2 0x218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD3E9C314 CALLER PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD2 SWAP2 SWAP1 PUSH2 0x3DB JUMP JUMPDEST SWAP3 POP SWAP3 POP POP DUP2 PUSH2 0x129 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552524F523A5052532D3030313A4E4F545F415554484F52495A454400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x18E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552524F523A5052532D3030323A504F4C4943595F464C4F575F4E4F545F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x14D3D3159151 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x120 JUMP JUMPDEST PUSH2 0x197 DUP2 PUSH2 0x2C1 JUMP JUMPDEST POP POP STOP JUMPDEST PUSH2 0x1C2 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1F7 PUSH14 0x50726F6475637453657276696365 PUSH1 0x90 SHL DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1D6 JUMP JUMPDEST PUSH2 0x1C2 PUSH2 0x213 CALLDATASIZE PUSH1 0x4 PUSH2 0x3C3 JUMP JUMPDEST PUSH2 0x2E5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1C2D8FB3 PUSH1 0xE3 SHL DUP2 MSTORE PUSH7 0x4C6963656E7365 PUSH1 0xC8 SHL PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE16C7D98 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x298 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2BC SWAP2 SWAP1 PUSH2 0x3A2 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x2E0 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1C2D8FB3 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE16C7D98 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x35C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x380 SWAP2 SWAP1 PUSH2 0x3A2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x39D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3B3 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x3BC DUP3 PUSH2 0x386 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D4 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3EF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x405 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP2 POP PUSH2 0x413 PUSH1 0x40 DUP6 ADD PUSH2 0x386 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE LOG4 PUSH26 0xFD732C159D64CFDE52F075E1EEF6E25609F00918C45982D8E62F 0xF9 0xFB JUMP PUSH5 0x736F6C6343 STOP ADDMOD MUL STOP CALLER ",
  "pcMap": {
    "0": {
      "offset": [
        261,
        2276
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x80"
    },
    "2": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "4": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "MSTORE",
      "path": "86"
    },
    "5": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "CALLVALUE",
      "path": "86"
    },
    "6": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "DUP1",
      "path": "86"
    },
    "7": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "8": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x10"
    },
    "11": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "12": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "14": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "DUP1",
      "path": "86"
    },
    "15": {
      "dev": "Cannot send ether to nonpayable function",
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "REVERT",
      "path": "86"
    },
    "16": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "17": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "POP",
      "path": "86"
    },
    "18": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x4"
    },
    "20": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "CALLDATASIZE",
      "path": "86"
    },
    "21": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "LT",
      "path": "86"
    },
    "22": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x41"
    },
    "25": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "26": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "28": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "CALLDATALOAD",
      "path": "86"
    },
    "29": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0xE0"
    },
    "31": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "SHR",
      "path": "86"
    },
    "32": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "DUP1",
      "path": "86"
    },
    "33": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH4",
      "path": "86",
      "value": "0x7B103999"
    },
    "38": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "EQ",
      "path": "86"
    },
    "39": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x19B"
    },
    "42": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "43": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "DUP1",
      "path": "86"
    },
    "44": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH4",
      "path": "86",
      "value": "0xA3F4DF7E"
    },
    "49": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "EQ",
      "path": "86"
    },
    "50": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x1DF"
    },
    "53": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "54": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "DUP1",
      "path": "86"
    },
    "55": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH4",
      "path": "86",
      "value": "0xA5B25E71"
    },
    "60": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "EQ",
      "path": "86"
    },
    "61": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x205"
    },
    "64": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "65": {
      "fn": null,
      "offset": [
        261,
        2276
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "66": {
      "fn": "ProductService.<fallback>",
      "offset": [
        626,
        643
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "68": {
      "fn": "ProductService.<fallback>",
      "offset": [
        645,
        663
      ],
      "op": "DUP1",
      "path": "86"
    },
    "69": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        677
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x4C"
    },
    "72": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        675
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x218"
    },
    "75": {
      "fn": "ProductService.<fallback>",
      "jump": "i",
      "offset": [
        667,
        677
      ],
      "op": "JUMP",
      "path": "86"
    },
    "76": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        677
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "77": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "79": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "81": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "83": {
      "op": "SHL"
    },
    "84": {
      "op": "SUB"
    },
    "85": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        700
      ],
      "op": "AND",
      "path": "86"
    },
    "86": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        700
      ],
      "op": "PUSH4",
      "path": "86",
      "value": "0xD3E9C314"
    },
    "91": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "22",
      "statement": 0
    },
    "92": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "94": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "95": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "97": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "99": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "101": {
      "op": "SHL"
    },
    "102": {
      "op": "SUB"
    },
    "103": {
      "op": "NOT"
    },
    "104": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0xE0"
    },
    "106": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP5",
      "path": "86"
    },
    "107": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "108": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "SHL",
      "path": "86"
    },
    "109": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "AND",
      "path": "86"
    },
    "110": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP2",
      "path": "86"
    },
    "111": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "MSTORE",
      "path": "86"
    },
    "112": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "114": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "116": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "118": {
      "op": "SHL"
    },
    "119": {
      "op": "SUB"
    },
    "120": {
      "op": "SWAP1"
    },
    "121": {
      "op": "SWAP2"
    },
    "122": {
      "op": "AND"
    },
    "123": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x4"
    },
    "125": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP3",
      "path": "86"
    },
    "126": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "ADD",
      "path": "86"
    },
    "127": {
      "op": "MSTORE"
    },
    "128": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "130": {
      "op": "ADD"
    },
    "131": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x60"
    },
    "133": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "135": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "136": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP1",
      "path": "86"
    },
    "137": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP4",
      "path": "86"
    },
    "138": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "SUB",
      "path": "86"
    },
    "139": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP2",
      "path": "86"
    },
    "140": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP7",
      "path": "86"
    },
    "141": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP1",
      "path": "86"
    },
    "142": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "EXTCODESIZE",
      "path": "86"
    },
    "143": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "144": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP1",
      "path": "86"
    },
    "145": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "146": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x9A"
    },
    "149": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "150": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "152": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP1",
      "path": "86"
    },
    "153": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "REVERT",
      "path": "86"
    },
    "154": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "155": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "POP",
      "path": "86"
    },
    "156": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "GAS",
      "path": "86"
    },
    "157": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "STATICCALL",
      "path": "86"
    },
    "158": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "159": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP1",
      "path": "86"
    },
    "160": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "161": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0xAE"
    },
    "164": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "165": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "RETURNDATASIZE",
      "path": "86"
    },
    "166": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "168": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP1",
      "path": "86"
    },
    "169": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "RETURNDATACOPY",
      "path": "86"
    },
    "170": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "RETURNDATASIZE",
      "path": "86"
    },
    "171": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "173": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "REVERT",
      "path": "86"
    },
    "174": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "175": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "POP",
      "path": "86"
    },
    "176": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "POP",
      "path": "86"
    },
    "177": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "POP",
      "path": "86"
    },
    "178": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "POP",
      "path": "86"
    },
    "179": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "181": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "182": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "RETURNDATASIZE",
      "path": "86"
    },
    "183": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x1F"
    },
    "185": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "NOT",
      "path": "86"
    },
    "186": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x1F"
    },
    "188": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP3",
      "path": "86"
    },
    "189": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "ADD",
      "path": "86"
    },
    "190": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "AND",
      "path": "86"
    },
    "191": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP3",
      "path": "86"
    },
    "192": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "ADD",
      "path": "86"
    },
    "193": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP1",
      "path": "86"
    },
    "194": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "196": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "MSTORE",
      "path": "86"
    },
    "197": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "POP",
      "path": "86"
    },
    "198": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "DUP2",
      "path": "86"
    },
    "199": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "ADD",
      "path": "86"
    },
    "200": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "201": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0xD2"
    },
    "204": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "SWAP2",
      "path": "86"
    },
    "205": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "206": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x3DB"
    },
    "209": {
      "fn": "ProductService.<fallback>",
      "jump": "i",
      "offset": [
        667,
        714
      ],
      "op": "JUMP",
      "path": "86"
    },
    "210": {
      "fn": "ProductService.<fallback>",
      "offset": [
        667,
        714
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "211": {
      "fn": "ProductService.<fallback>",
      "offset": [
        624,
        714
      ],
      "op": "SWAP3",
      "path": "86"
    },
    "212": {
      "fn": "ProductService.<fallback>",
      "offset": [
        624,
        714
      ],
      "op": "POP",
      "path": "86"
    },
    "213": {
      "fn": "ProductService.<fallback>",
      "offset": [
        624,
        714
      ],
      "op": "SWAP3",
      "path": "86"
    },
    "214": {
      "fn": "ProductService.<fallback>",
      "offset": [
        624,
        714
      ],
      "op": "POP",
      "path": "86"
    },
    "215": {
      "fn": "ProductService.<fallback>",
      "offset": [
        624,
        714
      ],
      "op": "POP",
      "path": "86"
    },
    "216": {
      "branch": 6,
      "fn": "ProductService.<fallback>",
      "offset": [
        733,
        745
      ],
      "op": "DUP2",
      "path": "86",
      "statement": 1
    },
    "217": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x129"
    },
    "220": {
      "branch": 6,
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "221": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "223": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "224": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "228": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "230": {
      "op": "SHL"
    },
    "231": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "DUP2",
      "path": "86"
    },
    "232": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "MSTORE",
      "path": "86"
    },
    "233": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "235": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x4"
    },
    "237": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "DUP3",
      "path": "86"
    },
    "238": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "ADD",
      "path": "86"
    },
    "239": {
      "op": "MSTORE"
    },
    "240": {
      "op": "PUSH1",
      "value": "0x1C"
    },
    "242": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "244": {
      "op": "DUP3"
    },
    "245": {
      "op": "ADD"
    },
    "246": {
      "op": "MSTORE"
    },
    "247": {
      "op": "PUSH32",
      "value": "0x4552524F523A5052532D3030313A4E4F545F415554484F52495A454400000000"
    },
    "280": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "282": {
      "op": "DUP3"
    },
    "283": {
      "op": "ADD"
    },
    "284": {
      "op": "MSTORE"
    },
    "285": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "287": {
      "op": "ADD"
    },
    "288": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "289": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "291": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "292": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "DUP1",
      "path": "86"
    },
    "293": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "SWAP2",
      "path": "86"
    },
    "294": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "SUB",
      "path": "86"
    },
    "295": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "296": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "REVERT",
      "optimizer_revert": true,
      "path": "86"
    },
    "297": {
      "fn": "ProductService.<fallback>",
      "offset": [
        725,
        778
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "298": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "300": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "302": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "304": {
      "op": "SHL"
    },
    "305": {
      "op": "SUB"
    },
    "306": {
      "fn": "ProductService.<fallback>",
      "offset": [
        796,
        820
      ],
      "op": "DUP2",
      "path": "86",
      "statement": 2
    },
    "307": {
      "branch": 7,
      "fn": "ProductService.<fallback>",
      "offset": [
        796,
        820
      ],
      "op": "AND",
      "path": "86"
    },
    "308": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x18E"
    },
    "311": {
      "branch": 7,
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "312": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "314": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "315": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "319": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "321": {
      "op": "SHL"
    },
    "322": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "DUP2",
      "path": "86"
    },
    "323": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "MSTORE",
      "path": "86"
    },
    "324": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "326": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x4"
    },
    "328": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "DUP3",
      "path": "86"
    },
    "329": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "ADD",
      "path": "86"
    },
    "330": {
      "op": "MSTORE"
    },
    "331": {
      "op": "PUSH1",
      "value": "0x26"
    },
    "333": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "335": {
      "op": "DUP3"
    },
    "336": {
      "op": "ADD"
    },
    "337": {
      "op": "MSTORE"
    },
    "338": {
      "op": "PUSH32",
      "value": "0x4552524F523A5052532D3030323A504F4C4943595F464C4F575F4E4F545F5245"
    },
    "371": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "373": {
      "op": "DUP3"
    },
    "374": {
      "op": "ADD"
    },
    "375": {
      "op": "MSTORE"
    },
    "376": {
      "op": "PUSH6",
      "value": "0x14D3D3159151"
    },
    "383": {
      "op": "PUSH1",
      "value": "0xD2"
    },
    "385": {
      "op": "SHL"
    },
    "386": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "388": {
      "op": "DUP3"
    },
    "389": {
      "op": "ADD"
    },
    "390": {
      "op": "MSTORE"
    },
    "391": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "393": {
      "op": "ADD"
    },
    "394": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x120"
    },
    "397": {
      "op": "JUMP"
    },
    "398": {
      "fn": "ProductService.<fallback>",
      "offset": [
        788,
        862
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "399": {
      "fn": "ProductService.<fallback>",
      "offset": [
        873,
        894
      ],
      "op": "PUSH2",
      "path": "86",
      "statement": 3,
      "value": "0x197"
    },
    "402": {
      "fn": "ProductService.<fallback>",
      "offset": [
        883,
        893
      ],
      "op": "DUP2",
      "path": "86"
    },
    "403": {
      "fn": "ProductService.<fallback>",
      "offset": [
        873,
        882
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x2C1"
    },
    "406": {
      "fn": "ProductService.<fallback>",
      "jump": "i",
      "offset": [
        873,
        894
      ],
      "op": "JUMP",
      "path": "86"
    },
    "407": {
      "fn": "ProductService.<fallback>",
      "offset": [
        873,
        894
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "408": {
      "fn": "ProductService.<fallback>",
      "offset": [
        513,
        901
      ],
      "op": "POP",
      "path": "86"
    },
    "409": {
      "fn": "ProductService.<fallback>",
      "offset": [
        513,
        901
      ],
      "op": "POP",
      "path": "86"
    },
    "410": {
      "offset": [
        261,
        2276
      ],
      "op": "STOP",
      "path": "86"
    },
    "411": {
      "offset": [
        412,
        447
      ],
      "op": "JUMPDEST",
      "path": "91"
    },
    "412": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "PUSH2",
      "path": "91",
      "value": "0x1C2"
    },
    "415": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "PUSH32",
      "path": "91",
      "value": "0x0"
    },
    "448": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "DUP2",
      "path": "91"
    },
    "449": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "JUMP",
      "path": "91"
    },
    "450": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "JUMPDEST",
      "path": "91"
    },
    "451": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x40"
    },
    "453": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "MLOAD",
      "path": "91"
    },
    "454": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "456": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "458": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "460": {
      "op": "SHL"
    },
    "461": {
      "op": "SUB"
    },
    "462": {
      "op": "SWAP1"
    },
    "463": {
      "op": "SWAP2"
    },
    "464": {
      "op": "AND"
    },
    "465": {
      "op": "DUP2"
    },
    "466": {
      "op": "MSTORE"
    },
    "467": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "469": {
      "op": "ADD"
    },
    "470": {
      "offset": [
        412,
        447
      ],
      "op": "JUMPDEST",
      "path": "91"
    },
    "471": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x40"
    },
    "473": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "MLOAD",
      "path": "91"
    },
    "474": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "DUP1",
      "path": "91"
    },
    "475": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "SWAP2",
      "path": "91"
    },
    "476": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "SUB",
      "path": "91"
    },
    "477": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "SWAP1",
      "path": "91"
    },
    "478": {
      "fn": "ProductService.<fallback>",
      "offset": [
        412,
        447
      ],
      "op": "RETURN",
      "path": "91"
    },
    "479": {
      "offset": [
        347,
        394
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "480": {
      "fn": "ProductService.<fallback>",
      "offset": [
        347,
        394
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x1F7"
    },
    "483": {
      "op": "PUSH14",
      "value": "0x50726F6475637453657276696365"
    },
    "498": {
      "op": "PUSH1",
      "value": "0x90"
    },
    "500": {
      "op": "SHL"
    },
    "501": {
      "offset": [
        347,
        394
      ],
      "op": "DUP2",
      "path": "86"
    },
    "502": {
      "fn": "ProductService.<fallback>",
      "offset": [
        347,
        394
      ],
      "op": "JUMP",
      "path": "86"
    },
    "503": {
      "fn": "ProductService.<fallback>",
      "offset": [
        347,
        394
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "504": {
      "fn": "ProductService.<fallback>",
      "offset": [
        347,
        394
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "506": {
      "fn": "ProductService.<fallback>",
      "offset": [
        347,
        394
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "507": {
      "op": "SWAP1"
    },
    "508": {
      "op": "DUP2"
    },
    "509": {
      "op": "MSTORE"
    },
    "510": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "512": {
      "op": "ADD"
    },
    "513": {
      "offset": [
        347,
        394
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x1D6"
    },
    "516": {
      "op": "JUMP"
    },
    "517": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "JUMPDEST",
      "path": "91"
    },
    "518": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "PUSH2",
      "path": "91",
      "value": "0x1C2"
    },
    "521": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "PUSH2",
      "path": "91",
      "value": "0x213"
    },
    "524": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "CALLDATASIZE",
      "path": "91"
    },
    "525": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x4"
    },
    "527": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "PUSH2",
      "path": "91",
      "value": "0x3C3"
    },
    "530": {
      "fn": "WithRegistry.getContractFromRegistry",
      "jump": "i",
      "offset": [
        1344,
        1544
      ],
      "op": "JUMP",
      "path": "91"
    },
    "531": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "JUMPDEST",
      "path": "91"
    },
    "532": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "PUSH2",
      "path": "91",
      "value": "0x2E5"
    },
    "535": {
      "fn": "WithRegistry.getContractFromRegistry",
      "jump": "i",
      "offset": [
        1344,
        1544
      ],
      "op": "JUMP",
      "path": "91"
    },
    "536": {
      "fn": "ProductService._license",
      "offset": [
        2155,
        2273
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "537": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "statement": 4,
      "value": "0x40"
    },
    "539": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "540": {
      "op": "PUSH4",
      "value": "0x1C2D8FB3"
    },
    "545": {
      "op": "PUSH1",
      "value": "0xE3"
    },
    "547": {
      "op": "SHL"
    },
    "548": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP2",
      "path": "86"
    },
    "549": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "MSTORE",
      "path": "86"
    },
    "550": {
      "op": "PUSH7",
      "value": "0x4C6963656E7365"
    },
    "558": {
      "op": "PUSH1",
      "value": "0xC8"
    },
    "560": {
      "op": "SHL"
    },
    "561": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x4"
    },
    "563": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP3",
      "path": "86"
    },
    "564": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "ADD",
      "path": "86"
    },
    "565": {
      "op": "MSTORE"
    },
    "566": {
      "fn": "ProductService._license",
      "offset": [
        2198,
        2206
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "568": {
      "fn": "ProductService._license",
      "offset": [
        2198,
        2206
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "569": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2242
      ],
      "op": "PUSH32",
      "path": "86",
      "value": "0x0"
    },
    "602": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "604": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "606": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "608": {
      "op": "SHL"
    },
    "609": {
      "op": "SUB"
    },
    "610": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2254
      ],
      "op": "AND",
      "path": "86"
    },
    "611": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2254
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "612": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2254
      ],
      "op": "PUSH4",
      "path": "86",
      "value": "0xE16C7D98"
    },
    "617": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2254
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "618": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "620": {
      "op": "ADD"
    },
    "621": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x20"
    },
    "623": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "625": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "626": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP1",
      "path": "86"
    },
    "627": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP4",
      "path": "86"
    },
    "628": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "SUB",
      "path": "86"
    },
    "629": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP2",
      "path": "86"
    },
    "630": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP7",
      "path": "86"
    },
    "631": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP1",
      "path": "86"
    },
    "632": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "EXTCODESIZE",
      "path": "86"
    },
    "633": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "634": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP1",
      "path": "86"
    },
    "635": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "636": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x284"
    },
    "639": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "640": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "642": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP1",
      "path": "86"
    },
    "643": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "REVERT",
      "path": "86"
    },
    "644": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "645": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "POP",
      "path": "86"
    },
    "646": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "GAS",
      "path": "86"
    },
    "647": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "STATICCALL",
      "path": "86"
    },
    "648": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "649": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP1",
      "path": "86"
    },
    "650": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "651": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x298"
    },
    "654": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "655": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "RETURNDATASIZE",
      "path": "86"
    },
    "656": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "658": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP1",
      "path": "86"
    },
    "659": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "RETURNDATACOPY",
      "path": "86"
    },
    "660": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "RETURNDATASIZE",
      "path": "86"
    },
    "661": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "663": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "REVERT",
      "path": "86"
    },
    "664": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "665": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "POP",
      "path": "86"
    },
    "666": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "POP",
      "path": "86"
    },
    "667": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "POP",
      "path": "86"
    },
    "668": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "POP",
      "path": "86"
    },
    "669": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "671": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "MLOAD",
      "path": "86"
    },
    "672": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "RETURNDATASIZE",
      "path": "86"
    },
    "673": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x1F"
    },
    "675": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "NOT",
      "path": "86"
    },
    "676": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x1F"
    },
    "678": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP3",
      "path": "86"
    },
    "679": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "ADD",
      "path": "86"
    },
    "680": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "AND",
      "path": "86"
    },
    "681": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP3",
      "path": "86"
    },
    "682": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "ADD",
      "path": "86"
    },
    "683": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP1",
      "path": "86"
    },
    "684": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x40"
    },
    "686": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "MSTORE",
      "path": "86"
    },
    "687": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "POP",
      "path": "86"
    },
    "688": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "DUP2",
      "path": "86"
    },
    "689": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "ADD",
      "path": "86"
    },
    "690": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "691": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x2BC"
    },
    "694": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "SWAP2",
      "path": "86"
    },
    "695": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "696": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x3A2"
    },
    "699": {
      "fn": "ProductService._license",
      "jump": "i",
      "offset": [
        2234,
        2265
      ],
      "op": "JUMP",
      "path": "86"
    },
    "700": {
      "fn": "ProductService._license",
      "offset": [
        2234,
        2265
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "701": {
      "fn": "ProductService._license",
      "offset": [
        2218,
        2266
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "702": {
      "fn": "ProductService._license",
      "offset": [
        2218,
        2266
      ],
      "op": "POP",
      "path": "86"
    },
    "703": {
      "fn": "ProductService._license",
      "offset": [
        2155,
        2273
      ],
      "op": "SWAP1",
      "path": "86"
    },
    "704": {
      "fn": "ProductService._license",
      "jump": "o",
      "offset": [
        2155,
        2273
      ],
      "op": "JUMP",
      "path": "86"
    },
    "705": {
      "fn": "ProductService._delegate",
      "offset": [
        1262,
        2149
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "706": {
      "fn": "ProductService._delegate",
      "offset": [
        1592,
        1606
      ],
      "op": "CALLDATASIZE",
      "path": "86"
    },
    "707": {
      "fn": "ProductService._delegate",
      "offset": [
        1589,
        1590
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "709": {
      "fn": "ProductService._delegate",
      "offset": [
        1586,
        1587
      ],
      "op": "DUP1",
      "path": "86"
    },
    "710": {
      "fn": "ProductService._delegate",
      "offset": [
        1573,
        1607
      ],
      "op": "CALLDATACOPY",
      "path": "86"
    },
    "711": {
      "fn": "ProductService._delegate",
      "offset": [
        1806,
        1807
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "713": {
      "fn": "ProductService._delegate",
      "offset": [
        1803,
        1804
      ],
      "op": "DUP1",
      "path": "86"
    },
    "714": {
      "fn": "ProductService._delegate",
      "offset": [
        1787,
        1801
      ],
      "op": "CALLDATASIZE",
      "path": "86"
    },
    "715": {
      "fn": "ProductService._delegate",
      "offset": [
        1784,
        1785
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "717": {
      "fn": "ProductService._delegate",
      "offset": [
        1768,
        1782
      ],
      "op": "DUP5",
      "path": "86"
    },
    "718": {
      "fn": "ProductService._delegate",
      "offset": [
        1761,
        1766
      ],
      "op": "GAS",
      "path": "86"
    },
    "719": {
      "fn": "ProductService._delegate",
      "offset": [
        1748,
        1808
      ],
      "op": "DELEGATECALL",
      "path": "86"
    },
    "720": {
      "fn": "ProductService._delegate",
      "offset": [
        1882,
        1898
      ],
      "op": "RETURNDATASIZE",
      "path": "86"
    },
    "721": {
      "fn": "ProductService._delegate",
      "offset": [
        1879,
        1880
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "723": {
      "fn": "ProductService._delegate",
      "offset": [
        1876,
        1877
      ],
      "op": "DUP1",
      "path": "86"
    },
    "724": {
      "fn": "ProductService._delegate",
      "offset": [
        1861,
        1899
      ],
      "op": "RETURNDATACOPY",
      "path": "86"
    },
    "725": {
      "fn": "ProductService._delegate",
      "offset": [
        1920,
        1926
      ],
      "op": "DUP1",
      "path": "86"
    },
    "726": {
      "fn": "ProductService._delegate",
      "offset": [
        1987,
        2053
      ],
      "op": "DUP1",
      "path": "86"
    },
    "727": {
      "fn": "ProductService._delegate",
      "offset": [
        1987,
        2053
      ],
      "op": "ISZERO",
      "path": "86"
    },
    "728": {
      "fn": "ProductService._delegate",
      "offset": [
        1987,
        2053
      ],
      "op": "PUSH2",
      "path": "86",
      "value": "0x2E0"
    },
    "731": {
      "fn": "ProductService._delegate",
      "offset": [
        1987,
        2053
      ],
      "op": "JUMPI",
      "path": "86"
    },
    "732": {
      "fn": "ProductService._delegate",
      "offset": [
        2102,
        2118
      ],
      "op": "RETURNDATASIZE",
      "path": "86"
    },
    "733": {
      "fn": "ProductService._delegate",
      "offset": [
        2099,
        2100
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "735": {
      "fn": "ProductService._delegate",
      "offset": [
        2092,
        2119
      ],
      "op": "RETURN",
      "path": "86"
    },
    "736": {
      "fn": "ProductService._delegate",
      "offset": [
        1987,
        2053
      ],
      "op": "JUMPDEST",
      "path": "86"
    },
    "737": {
      "fn": "ProductService._delegate",
      "offset": [
        2022,
        2038
      ],
      "op": "RETURNDATASIZE",
      "path": "86"
    },
    "738": {
      "fn": "ProductService._delegate",
      "offset": [
        2019,
        2020
      ],
      "op": "PUSH1",
      "path": "86",
      "value": "0x0"
    },
    "740": {
      "fn": "ProductService._delegate",
      "offset": [
        2012,
        2039
      ],
      "op": "REVERT",
      "path": "86"
    },
    "741": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "JUMPDEST",
      "path": "91"
    },
    "742": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "statement": 5,
      "value": "0x40"
    },
    "744": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "MLOAD",
      "path": "91"
    },
    "745": {
      "op": "PUSH4",
      "value": "0x1C2D8FB3"
    },
    "750": {
      "op": "PUSH1",
      "value": "0xE3"
    },
    "752": {
      "op": "SHL"
    },
    "753": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP2",
      "path": "91"
    },
    "754": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "MSTORE",
      "path": "91"
    },
    "755": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x4"
    },
    "757": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP2",
      "path": "91"
    },
    "758": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "ADD",
      "path": "91"
    },
    "759": {
      "op": "DUP3"
    },
    "760": {
      "op": "SWAP1"
    },
    "761": {
      "op": "MSTORE"
    },
    "762": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1465,
        1478
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x0"
    },
    "764": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1465,
        1478
      ],
      "op": "SWAP1",
      "path": "91"
    },
    "765": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1510
      ],
      "op": "PUSH32",
      "path": "91",
      "value": "0x0"
    },
    "798": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "800": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "802": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "804": {
      "op": "SHL"
    },
    "805": {
      "op": "SUB"
    },
    "806": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1522
      ],
      "op": "AND",
      "path": "91"
    },
    "807": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1522
      ],
      "op": "SWAP1",
      "path": "91"
    },
    "808": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1522
      ],
      "op": "PUSH4",
      "path": "91",
      "value": "0xE16C7D98"
    },
    "813": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1522
      ],
      "op": "SWAP1",
      "path": "91"
    },
    "814": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "816": {
      "op": "ADD"
    },
    "817": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x20"
    },
    "819": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x40"
    },
    "821": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "MLOAD",
      "path": "91"
    },
    "822": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP1",
      "path": "91"
    },
    "823": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP4",
      "path": "91"
    },
    "824": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "SUB",
      "path": "91"
    },
    "825": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP2",
      "path": "91"
    },
    "826": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP7",
      "path": "91"
    },
    "827": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP1",
      "path": "91"
    },
    "828": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "EXTCODESIZE",
      "path": "91"
    },
    "829": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "ISZERO",
      "path": "91"
    },
    "830": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP1",
      "path": "91"
    },
    "831": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "ISZERO",
      "path": "91"
    },
    "832": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH2",
      "path": "91",
      "value": "0x348"
    },
    "835": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "JUMPI",
      "path": "91"
    },
    "836": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x0"
    },
    "838": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP1",
      "path": "91"
    },
    "839": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "REVERT",
      "path": "91"
    },
    "840": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "JUMPDEST",
      "path": "91"
    },
    "841": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "POP",
      "path": "91"
    },
    "842": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "GAS",
      "path": "91"
    },
    "843": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "STATICCALL",
      "path": "91"
    },
    "844": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "ISZERO",
      "path": "91"
    },
    "845": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP1",
      "path": "91"
    },
    "846": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "ISZERO",
      "path": "91"
    },
    "847": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH2",
      "path": "91",
      "value": "0x35C"
    },
    "850": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "JUMPI",
      "path": "91"
    },
    "851": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "RETURNDATASIZE",
      "path": "91"
    },
    "852": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x0"
    },
    "854": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP1",
      "path": "91"
    },
    "855": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "RETURNDATACOPY",
      "path": "91"
    },
    "856": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "RETURNDATASIZE",
      "path": "91"
    },
    "857": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x0"
    },
    "859": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "REVERT",
      "path": "91"
    },
    "860": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "JUMPDEST",
      "path": "91"
    },
    "861": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "POP",
      "path": "91"
    },
    "862": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "POP",
      "path": "91"
    },
    "863": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "POP",
      "path": "91"
    },
    "864": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "POP",
      "path": "91"
    },
    "865": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x40"
    },
    "867": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "MLOAD",
      "path": "91"
    },
    "868": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "RETURNDATASIZE",
      "path": "91"
    },
    "869": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x1F"
    },
    "871": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "NOT",
      "path": "91"
    },
    "872": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x1F"
    },
    "874": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP3",
      "path": "91"
    },
    "875": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "ADD",
      "path": "91"
    },
    "876": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "AND",
      "path": "91"
    },
    "877": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP3",
      "path": "91"
    },
    "878": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "ADD",
      "path": "91"
    },
    "879": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP1",
      "path": "91"
    },
    "880": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH1",
      "path": "91",
      "value": "0x40"
    },
    "882": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "MSTORE",
      "path": "91"
    },
    "883": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "POP",
      "path": "91"
    },
    "884": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "DUP2",
      "path": "91"
    },
    "885": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "ADD",
      "path": "91"
    },
    "886": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "SWAP1",
      "path": "91"
    },
    "887": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH2",
      "path": "91",
      "value": "0x380"
    },
    "890": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "SWAP2",
      "path": "91"
    },
    "891": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "SWAP1",
      "path": "91"
    },
    "892": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "PUSH2",
      "path": "91",
      "value": "0x3A2"
    },
    "895": {
      "fn": "WithRegistry.getContractFromRegistry",
      "jump": "i",
      "offset": [
        1502,
        1537
      ],
      "op": "JUMP",
      "path": "91"
    },
    "896": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1502,
        1537
      ],
      "op": "JUMPDEST",
      "path": "91"
    },
    "897": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1494,
        1537
      ],
      "op": "SWAP3",
      "path": "91"
    },
    "898": {
      "fn": "WithRegistry.getContractFromRegistry",
      "offset": [
        1344,
        1544
      ],
      "op": "SWAP2",
      "path": "91"
    },
    "899": {
      "op": "POP"
    },
    "900": {
      "op": "POP"
    },
    "901": {
      "fn": "WithRegistry.getContractFromRegistry",
      "jump": "o",
      "offset": [
        1344,
        1544
      ],
      "op": "JUMP",
      "path": "91"
    },
    "902": {
      "op": "JUMPDEST"
    },
    "903": {
      "op": "DUP1"
    },
    "904": {
      "op": "MLOAD"
    },
    "905": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "907": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "909": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "911": {
      "op": "SHL"
    },
    "912": {
      "op": "SUB"
    },
    "913": {
      "op": "DUP2"
    },
    "914": {
      "op": "AND"
    },
    "915": {
      "op": "DUP2"
    },
    "916": {
      "op": "EQ"
    },
    "917": {
      "op": "PUSH2",
      "value": "0x39D"
    },
    "920": {
      "op": "JUMPI"
    },
    "921": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "923": {
      "op": "DUP1"
    },
    "924": {
      "op": "REVERT"
    },
    "925": {
      "op": "JUMPDEST"
    },
    "926": {
      "op": "SWAP2"
    },
    "927": {
      "op": "SWAP1"
    },
    "928": {
      "op": "POP"
    },
    "929": {
      "jump": "o",
      "op": "JUMP"
    },
    "930": {
      "op": "JUMPDEST"
    },
    "931": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "933": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "935": {
      "op": "DUP3"
    },
    "936": {
      "op": "DUP5"
    },
    "937": {
      "op": "SUB"
    },
    "938": {
      "op": "SLT"
    },
    "939": {
      "op": "ISZERO"
    },
    "940": {
      "op": "PUSH2",
      "value": "0x3B3"
    },
    "943": {
      "op": "JUMPI"
    },
    "944": {
      "op": "DUP1"
    },
    "945": {
      "op": "DUP2"
    },
    "946": {
      "op": "REVERT"
    },
    "947": {
      "op": "JUMPDEST"
    },
    "948": {
      "op": "PUSH2",
      "value": "0x3BC"
    },
    "951": {
      "op": "DUP3"
    },
    "952": {
      "op": "PUSH2",
      "value": "0x386"
    },
    "955": {
      "jump": "i",
      "op": "JUMP"
    },
    "956": {
      "op": "JUMPDEST"
    },
    "957": {
      "op": "SWAP4"
    },
    "958": {
      "op": "SWAP3"
    },
    "959": {
      "op": "POP"
    },
    "960": {
      "op": "POP"
    },
    "961": {
      "op": "POP"
    },
    "962": {
      "jump": "o",
      "op": "JUMP"
    },
    "963": {
      "op": "JUMPDEST"
    },
    "964": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "966": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "968": {
      "op": "DUP3"
    },
    "969": {
      "op": "DUP5"
    },
    "970": {
      "op": "SUB"
    },
    "971": {
      "op": "SLT"
    },
    "972": {
      "op": "ISZERO"
    },
    "973": {
      "op": "PUSH2",
      "value": "0x3D4"
    },
    "976": {
      "op": "JUMPI"
    },
    "977": {
      "op": "DUP1"
    },
    "978": {
      "op": "DUP2"
    },
    "979": {
      "op": "REVERT"
    },
    "980": {
      "op": "JUMPDEST"
    },
    "981": {
      "op": "POP"
    },
    "982": {
      "op": "CALLDATALOAD"
    },
    "983": {
      "op": "SWAP2"
    },
    "984": {
      "op": "SWAP1"
    },
    "985": {
      "op": "POP"
    },
    "986": {
      "jump": "o",
      "op": "JUMP"
    },
    "987": {
      "op": "JUMPDEST"
    },
    "988": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "990": {
      "op": "DUP1"
    },
    "991": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "993": {
      "op": "PUSH1",
      "value": "0x60"
    },
    "995": {
      "op": "DUP5"
    },
    "996": {
      "op": "DUP7"
    },
    "997": {
      "op": "SUB"
    },
    "998": {
      "op": "SLT"
    },
    "999": {
      "op": "ISZERO"
    },
    "1000": {
      "op": "PUSH2",
      "value": "0x3EF"
    },
    "1003": {
      "op": "JUMPI"
    },
    "1004": {
      "op": "DUP2"
    },
    "1005": {
      "op": "DUP3"
    },
    "1006": {
      "op": "REVERT"
    },
    "1007": {
      "op": "JUMPDEST"
    },
    "1008": {
      "op": "DUP4"
    },
    "1009": {
      "op": "MLOAD"
    },
    "1010": {
      "op": "SWAP3"
    },
    "1011": {
      "op": "POP"
    },
    "1012": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1014": {
      "op": "DUP5"
    },
    "1015": {
      "op": "ADD"
    },
    "1016": {
      "op": "MLOAD"
    },
    "1017": {
      "op": "DUP1"
    },
    "1018": {
      "op": "ISZERO"
    },
    "1019": {
      "op": "ISZERO"
    },
    "1020": {
      "op": "DUP2"
    },
    "1021": {
      "op": "EQ"
    },
    "1022": {
      "op": "PUSH2",
      "value": "0x405"
    },
    "1025": {
      "op": "JUMPI"
    },
    "1026": {
      "op": "DUP3"
    },
    "1027": {
      "op": "DUP4"
    },
    "1028": {
      "op": "REVERT"
    },
    "1029": {
      "op": "JUMPDEST"
    },
    "1030": {
      "op": "SWAP2"
    },
    "1031": {
      "op": "POP"
    },
    "1032": {
      "op": "PUSH2",
      "value": "0x413"
    },
    "1035": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1037": {
      "op": "DUP6"
    },
    "1038": {
      "op": "ADD"
    },
    "1039": {
      "op": "PUSH2",
      "value": "0x386"
    },
    "1042": {
      "jump": "i",
      "op": "JUMP"
    },
    "1043": {
      "op": "JUMPDEST"
    },
    "1044": {
      "op": "SWAP1"
    },
    "1045": {
      "op": "POP"
    },
    "1046": {
      "op": "SWAP3"
    },
    "1047": {
      "op": "POP"
    },
    "1048": {
      "op": "SWAP3"
    },
    "1049": {
      "op": "POP"
    },
    "1050": {
      "op": "SWAP3"
    },
    "1051": {
      "jump": "o",
      "op": "JUMP"
    }
  },
  "sha1": "e5b63f6118d92edaf92aeb73f9f0c044a207ae52",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity 0.8.2;\n\nimport \"../shared/WithRegistry.sol\";\n// import \"../shared/CoreController.sol\";\nimport \"@etherisc/gif-interface/contracts/modules/ILicense.sol\";\n\nimport \"@openzeppelin/contracts/utils/Context.sol\";\n\ncontract ProductService is\n    WithRegistry,\n    // CoreController\n    Context\n {\n    bytes32 public constant NAME = \"ProductService\";\n\n    // solhint-disable-next-line no-empty-blocks\n    constructor(address _registry) WithRegistry(_registry) {}\n\n    fallback() external {\n        // getAuthorizationStatus enforces msg.sender to be a registered product\n        (,bool isAuthorized, address policyFlow) = _license().getAuthorizationStatus(_msgSender());\n\n        require(isAuthorized, \"ERROR:PRS-001:NOT_AUTHORIZED\");\n        require(policyFlow != address(0),\"ERROR:PRS-002:POLICY_FLOW_NOT_RESOLVED\");\n\n        _delegate(policyFlow);\n    }\n\n\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     * This function is a 1:1 copy of _delegate from\n     * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.6/contracts/proxy/Proxy.sol\n     */\n    function _delegate(address implementation) internal {\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n    function _license() internal view returns (ILicense) {\n        return ILicense(registry.getContract(\"License\"));\n    }\n\n}\n",
  "sourceMap": "261:2015:86:-:0;;;450:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1300:31:91;;-1:-1:-1;;;;;;1300:31:91;;;261:2015:86;;14:310:103;;137:2;125:9;116:7;112:23;108:32;105:2;;;158:6;150;143:22;105:2;189:16;;-1:-1:-1;;;;;234:31:103;;224:42;;214:2;;285:6;277;270:22;214:2;313:5;95:229;-1:-1:-1;;;95:229:103:o;:::-;261:2015:86;;;;;;;;;;;;",
  "sourcePath": "contracts/services/ProductService.sol",
  "type": "contract"
}