{
  "_format": "hh-sol-artifact-1",
  "contractName": "AdvancedERC721Policy",
  "sourceName": "contracts/test/examples/advanced/AdvancedERC721Policy.sol",
  "abi": [
    {
      "inputs": [],
      "name": "AlreadyEnforced",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CannotPostCheckWhenSkipped",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CannotPreCheckWhenSkipped",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MainCheckAlreadyEnforced",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MainCheckNotEnforced",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PreCheckNotEnforced",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TargetAlreadySet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TargetNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TargetOnly",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnsuccessfulCheck",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "subject",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "guarded",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "evidence",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "enum Check",
          "name": "checkType",
          "type": "uint8"
        }
      ],
      "name": "Enforced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "guarded",
          "type": "address"
        }
      ],
      "name": "TargetSet",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ADVANCED_CHECKER",
      "outputs": [
        {
          "internalType": "contract AdvancedChecker",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SKIP_POST",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SKIP_PRE",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "subject",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "evidence",
          "type": "bytes"
        },
        {
          "internalType": "enum Check",
          "name": "checkType",
          "type": "uint8"
        }
      ],
      "name": "enforce",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAppendedBytes",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "appendedBytes",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "guarded",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_guarded",
          "type": "address"
        }
      ],
      "name": "setTarget",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "trait",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052348015600f57600080fd5b503380603557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b603c816041565b50609a565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b610908806100a96000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637b02c3bc1161008c578063b41a4b1911610066578063b41a4b1914610196578063bc971e87146101ab578063ce343deb146101bf578063f2fde38b146101e957600080fd5b80637b02c3bc146101655780638129fc1c146101785780638da5cb5b1461018057600080fd5b80630c691b0c146100d457806314423fde146100fd578063158ef93e14610112578063715018a61461011f57806372f7a03014610127578063776d1a0114610152575b600080fd5b6002546100e890600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b61011061010b366004610665565b6101fc565b005b6000546100e89060ff1681565b610110610239565b60015461013a906001600160a01b031681565b6040516001600160a01b0390911681526020016100f4565b610110610160366004610703565b61024d565b60025461013a906001600160a01b031681565b6101106102f0565b60005461010090046001600160a01b031661013a565b61019e6102f8565b6040516100f4919061076d565b6002546100e890600160a01b900460ff1681565b60408051808201909152600e81526d416476616e63656445524337323160901b602082015261019e565b6101106101f7366004610703565b610307565b6001546001600160a01b0316331461022757604051631f492dbf60e21b815260040160405180910390fd5b6102338484848461034a565b50505050565b6102416104bf565b61024b60006104f2565b565b6102556104bf565b6001600160a01b03811661027c5760405163d92e233d60e01b815260040160405180910390fd5b6001546001600160a01b0316156102a65760405163e0f2d7b160e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a19690600090a250565b61024b61054b565b60606103026105d3565b905090565b61030f6104bf565b6001600160a01b03811661033e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610347816104f2565b50565b600081600281111561035e5761035e610780565b0361039357600254600160a01b900460ff161561038e57604051632d1fd52160e21b815260040160405180910390fd5b6103d7565b60028160028111156103a7576103a7610780565b036103d757600254600160a81b900460ff16156103d75760405163b0ee30f360e01b815260040160405180910390fd5b6002546040516349ccc06f60e11b81526001600160a01b039091169063939980de9061040d9087908790879087906004016107e1565b602060405180830381865afa15801561042a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044e9190610833565b61046b57604051634715494560e01b815260040160405180910390fd5b6001546040516001600160a01b03918216918616907fc7819cb036063a47030dcfe5c7ec9aa238cf78ae59b1d2000fa93abf542b2483906104b19087908790879061084e565b60405180910390a350505050565b6000546001600160a01b0361010090910416331461024b5760405163118cdaa760e01b8152336004820152602401610335565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6105536105de565b600061055d6105d3565b9050600080600080848060200190518101906105799190610879565b935093509350935061058a846104f2565b60028054911515600160a81b0260ff60a81b19931515600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117919091169190911790555050565b6060610302306105ef565b6105e661061e565b61024b336104f2565b60405164ffffffffff602c19833b0116808252602090810190602d908301843c60408101815101604052919050565b60005460ff16156106415760405162dc149f60e41b815260040160405180910390fd5b6000805460ff19166001179055565b6001600160a01b038116811461034757600080fd5b6000806000806060858703121561067b57600080fd5b843561068681610650565b9350602085013567ffffffffffffffff8111156106a257600080fd5b8501601f810187136106b357600080fd5b803567ffffffffffffffff8111156106ca57600080fd5b8760208284010111156106dc57600080fd5b602091909101935091506040850135600381106106f857600080fd5b939692955090935050565b60006020828403121561071557600080fd5b813561072081610650565b9392505050565b6000815180845260005b8181101561074d57602081850181015186830182015201610731565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006107206020830184610727565b634e487b7160e01b600052602160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600381106107dd57634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b03851681526060602082018190526000906108069083018587610796565b905061081560408301846107bf565b95945050505050565b8051801515811461082e57600080fd5b919050565b60006020828403121561084557600080fd5b6107208261081e565b604081526000610862604083018587610796565b905061087160208301846107bf565b949350505050565b6000806000806080858703121561088f57600080fd5b845161089a81610650565b60208601519094506108ab81610650565b92506108b96040860161081e565b91506108c76060860161081e565b90509295919450925056fea2646970667358221220aefd54de78f8a1cf36da609943a490b458235761c09686cfbaf042bcedcbd6f464736f6c634300081c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637b02c3bc1161008c578063b41a4b1911610066578063b41a4b1914610196578063bc971e87146101ab578063ce343deb146101bf578063f2fde38b146101e957600080fd5b80637b02c3bc146101655780638129fc1c146101785780638da5cb5b1461018057600080fd5b80630c691b0c146100d457806314423fde146100fd578063158ef93e14610112578063715018a61461011f57806372f7a03014610127578063776d1a0114610152575b600080fd5b6002546100e890600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b61011061010b366004610665565b6101fc565b005b6000546100e89060ff1681565b610110610239565b60015461013a906001600160a01b031681565b6040516001600160a01b0390911681526020016100f4565b610110610160366004610703565b61024d565b60025461013a906001600160a01b031681565b6101106102f0565b60005461010090046001600160a01b031661013a565b61019e6102f8565b6040516100f4919061076d565b6002546100e890600160a01b900460ff1681565b60408051808201909152600e81526d416476616e63656445524337323160901b602082015261019e565b6101106101f7366004610703565b610307565b6001546001600160a01b0316331461022757604051631f492dbf60e21b815260040160405180910390fd5b6102338484848461034a565b50505050565b6102416104bf565b61024b60006104f2565b565b6102556104bf565b6001600160a01b03811661027c5760405163d92e233d60e01b815260040160405180910390fd5b6001546001600160a01b0316156102a65760405163e0f2d7b160e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a19690600090a250565b61024b61054b565b60606103026105d3565b905090565b61030f6104bf565b6001600160a01b03811661033e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610347816104f2565b50565b600081600281111561035e5761035e610780565b0361039357600254600160a01b900460ff161561038e57604051632d1fd52160e21b815260040160405180910390fd5b6103d7565b60028160028111156103a7576103a7610780565b036103d757600254600160a81b900460ff16156103d75760405163b0ee30f360e01b815260040160405180910390fd5b6002546040516349ccc06f60e11b81526001600160a01b039091169063939980de9061040d9087908790879087906004016107e1565b602060405180830381865afa15801561042a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044e9190610833565b61046b57604051634715494560e01b815260040160405180910390fd5b6001546040516001600160a01b03918216918616907fc7819cb036063a47030dcfe5c7ec9aa238cf78ae59b1d2000fa93abf542b2483906104b19087908790879061084e565b60405180910390a350505050565b6000546001600160a01b0361010090910416331461024b5760405163118cdaa760e01b8152336004820152602401610335565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6105536105de565b600061055d6105d3565b9050600080600080848060200190518101906105799190610879565b935093509350935061058a846104f2565b60028054911515600160a81b0260ff60a81b19931515600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117919091169190911790555050565b6060610302306105ef565b6105e661061e565b61024b336104f2565b60405164ffffffffff602c19833b0116808252602090810190602d908301843c60408101815101604052919050565b60005460ff16156106415760405162dc149f60e41b815260040160405180910390fd5b6000805460ff19166001179055565b6001600160a01b038116811461034757600080fd5b6000806000806060858703121561067b57600080fd5b843561068681610650565b9350602085013567ffffffffffffffff8111156106a257600080fd5b8501601f810187136106b357600080fd5b803567ffffffffffffffff8111156106ca57600080fd5b8760208284010111156106dc57600080fd5b602091909101935091506040850135600381106106f857600080fd5b939692955090935050565b60006020828403121561071557600080fd5b813561072081610650565b9392505050565b6000815180845260005b8181101561074d57602081850181015186830182015201610731565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006107206020830184610727565b634e487b7160e01b600052602160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600381106107dd57634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b03851681526060602082018190526000906108069083018587610796565b905061081560408301846107bf565b95945050505050565b8051801515811461082e57600080fd5b919050565b60006020828403121561084557600080fd5b6107208261081e565b604081526000610862604083018587610796565b905061087160208301846107bf565b949350505050565b6000806000806080858703121561088f57600080fd5b845161089a81610650565b60208601519094506108ab81610650565b92506108b96040860161081e565b91506108c76060860161081e565b90509295919450925056fea2646970667358221220aefd54de78f8a1cf36da609943a490b458235761c09686cfbaf042bcedcbd6f464736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
