{
  "_format": "hh-sol-artifact-1",
  "contractName": "AmmAdapterMock",
  "sourceName": "contracts/mocks/integrations/AmmAdapterMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC20[]",
          "name": "_poolTokens",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "approvedToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolAmountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256[]",
          "name": "minAmountsOut",
          "type": "uint256[]"
        }
      ],
      "name": "exitPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "tokenOut",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "poolAmountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minAmountOut",
          "type": "uint256"
        }
      ],
      "name": "exitswapPoolAmountIn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_components",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_maxTokensIn",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_minLiquidity",
          "type": "uint256"
        }
      ],
      "name": "getProvideLiquidityCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_calldata",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_maxTokenIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minLiquidity",
          "type": "uint256"
        }
      ],
      "name": "getProvideLiquiditySingleAssetCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_calldata",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_components",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_minTokensOut",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_liquidity",
          "type": "uint256"
        }
      ],
      "name": "getRemoveLiquidityCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_calldata",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_minTokenOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_liquidity",
          "type": "uint256"
        }
      ],
      "name": "getRemoveLiquiditySingleAssetCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_calldata",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getSpenderAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "name": "isValidPool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolAmountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256[]",
          "name": "maxAmountsIn",
          "type": "uint256[]"
        }
      ],
      "name": "joinPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "poolAmountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxAmountIn",
          "type": "uint256"
        }
      ],
      "name": "joinswapPoolAmountOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        }
      ],
      "name": "mintTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "poolTokens",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "returnLessThanMinimum",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "setApprovedToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setMintLessThanMinimum",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162001d0138038062001d01833981810160405260208110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82518660208202830111640100000000821117156200008c57600080fd5b82525081516020918201928201910280838360005b83811015620000bb578181015183820152602001620000a1565b505050509050016040525050506040518060400160405280600a81526020016920a6a6a0b230b83a32b960b11b81525060405180604001604052806003815260200162414d4d60e81b81525081600390805190602001906200011f92919062000162565b5080516200013590600490602084019062000162565b50506005805460ff191660121790555080516200015a906006906020840190620001e7565b505062000294565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e39291506200024d565b5090565b8280548282559060005260206000209081019282156200023f579160200282015b828111156200023f57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000208565b50620001e39291506200026d565b6200026a91905b80821115620001e3576000815560010162000254565b90565b6200026a91905b80821115620001e35780546001600160a01b031916815560010162000274565b611a5d80620002a46000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80635f5d556b116100f9578063a457c2d711610097578063bab4625911610071578063bab46259146108d4578063dced1a5a146108dc578063dd62ed3e146108f9578063e9bdbcb814610927576101a9565b8063a457c2d714610807578063a9059cbb14610833578063b02f0b731461085f576101a9565b806370a08231116100d357806370a082311461078f5780637896d467146107b55780637fdefdad146107bd57806395d89b41146107ff576101a9565b80635f5d556b1461066a5780636d06dfa01461071b5780636d3188f81461074d576101a9565b8063395093511161016657806346ab38f11161014057806346ab38f1146104e45780634827e1e7146105165780634aa91574146105ed5780634f69c0d4146105f5576101a9565b8063395093511461031b578063449a52f81461034757806346313c9c14610375576101a9565b806306fdde03146101ae578063095ea7b31461022b5780630e8edd861461026b57806318160ddd146102ad57806323b872dd146102c7578063313ce567146102fd575b600080fd5b6101b661094d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b0381351690602001356109e3565b604080519115158252519081900360200190f35b6102916004803603602081101561028157600080fd5b50356001600160a01b0316610a00565b604080516001600160a01b039092168252519081900360200190f35b6102b5610a05565b60408051918252519081900360200190f35b610257600480360360608110156102dd57600080fd5b506001600160a01b03813581169160208101359091169060400135610a0b565b610305610a98565b6040805160ff9092168252519081900360200190f35b6102576004803603604081101561033157600080fd5b506001600160a01b038135169060200135610aa1565b6103736004803603604081101561035d57600080fd5b506001600160a01b038135169060200135610af5565b005b61044c600480360360a081101561038b57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156103be57600080fd5b8201836020820111156103d057600080fd5b803590602001918460208302840111600160201b831117156103f157600080fd5b919390929091602081019035600160201b81111561040e57600080fd5b82018360208201111561042057600080fd5b803590602001918460208302840111600160201b8311171561044157600080fd5b919350915035610b03565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156104a757818101518382015260200161048f565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610373600480360360608110156104fa57600080fd5b506001600160a01b038135169060208101359060400135610bd0565b61044c600480360360a081101561052c57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561055f57600080fd5b82018360208201111561057157600080fd5b803590602001918460208302840111600160201b8311171561059257600080fd5b919390929091602081019035600160201b8111156105af57600080fd5b8201836020820111156105c157600080fd5b803590602001918460208302840111600160201b831117156105e257600080fd5b919350915035610c77565b610373610d44565b6103736004803603604081101561060b57600080fd5b81359190810190604081016020820135600160201b81111561062c57600080fd5b82018360208201111561063e57600080fd5b803590602001918460208302840111600160201b8311171561065f57600080fd5b509092509050610d58565b6102576004803603604081101561068057600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156106aa57600080fd5b8201836020820111156106bc57600080fd5b803590602001918460208302840111600160201b831117156106dd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610e66945050505050565b6103736004803603606081101561073157600080fd5b506001600160a01b038135169060208101359060400135610e98565b61044c600480360360a081101561076357600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135610f3c565b6102b5600480360360208110156107a557600080fd5b50356001600160a01b0316611002565b61025761101d565b61044c600480360360a08110156107d357600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611026565b6101b66110ec565b6102576004803603604081101561081d57600080fd5b506001600160a01b03813516906020013561114d565b6102576004803603604081101561084957600080fd5b506001600160a01b0381351690602001356111bb565b6103736004803603604081101561087557600080fd5b81359190810190604081016020820135600160201b81111561089657600080fd5b8201836020820111156108a857600080fd5b803590602001918460208302840111600160201b831117156108c957600080fd5b5090925090506111cf565b6102916112c2565b610291600480360360208110156108f257600080fd5b50356112d6565b6102b56004803603604081101561090f57600080fd5b506001600160a01b03813581169160200135166112fd565b6103736004803603602081101561093d57600080fd5b50356001600160a01b0316611328565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b5050505050905090565b60006109f76109f0611350565b8484611354565b50600192915050565b503090565b60025490565b6000610a18848484611440565b610a8e84610a24611350565b610a8985604051806060016040528060288152602001611971602891396001600160a01b038a16600090815260016020526040812090610a62611350565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6115a716565b611354565b5060019392505050565b60055460ff1690565b60006109f7610aae611350565b84610a898560016000610abf611350565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61163e16565b610aff8282611698565b5050565b6000806060610b4589898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610e6692505050565b50606084878760405160240180848152602001806020018281038252848482818152602001925060200280828437600083820181905260408051601f909301601f199081169095018381039095018352939093526020810180516001600160e01b03166313da703560e21b179052309b50919950909750505050505050509750975097945050505050565b610bda3383611794565b60075460009060ff16610bed5781610bf2565b600182035b6040805163a9059cbb60e01b81523360048201526024810183905290519192506001600160a01b0386169163a9059cbb916044808201926020929091908290030181600087803b158015610c4557600080fd5b505af1158015610c59573d6000803e3d6000fd5b505050506040513d6020811015610c6f57600080fd5b505050505050565b6000806060610cb989898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610e6692505050565b50606084878760405160240180848152602001806020018281038252848482818152602001925060200280828437600083820181905260408051601f909301601f199081169095018381039095018352939093526020810180516001600160e01b031663b02f0b7360e01b179052309b50919950909750505050505050509750975097945050505050565b6007805460ff19811660ff90911615179055565b60005b81811015610e3b5760068181548110610d7057fe5b6000918252602090912001546001600160a01b03166323b872dd3330868686818110610d9857fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015610e0757600080fd5b505af1158015610e1b573d6000803e3d6000fd5b505050506040513d6020811015610e3157600080fd5b5050600101610d5b565b5060075460009060ff16610e4f5783610e54565b600184035b9050610e603382611698565b50505050565b60006001600160a01b038316301480610e9157506007546001600160a01b0384811661010090920416145b9392505050565b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b038516916323b872dd9160648083019260209291908290030181600087803b158015610eed57600080fd5b505af1158015610f01573d6000803e3d6000fd5b505050506040513d6020811015610f1757600080fd5b505060075460009060ff16610f2c5782610e54565b506000198201610e603382611698565b6040805160018082528183019092526000918291606091829190602080830190803683370190505090508681600081518110610f7457fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610f9e8882610e66565b5050604080516001600160a01b03881660248201526044810186905260648082018890528251808303909101815260849091019091526020810180516001600160e01b031663036836fd60e51b179052309350600092509050955095509592505050565b6001600160a01b031660009081526020819052604090205490565b60075460ff1681565b604080516001808252818301909252600091829160609182919060208083019080368337019050509050868160008151811061105e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506110888882610e66565b5050604080516001600160a01b03881660248201526044810186905260648082018890528251808303909101815260849091019091526020810180516001600160e01b03166346ab38f160e01b179052309350600092509050955095509592505050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109d95780601f106109ae576101008083540402835291602001916109d9565b60006109f761115a611350565b84610a8985604051806060016040528060258152602001611a036025913960016000611184611350565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6115a716565b60006109f76111c8611350565b8484611440565b6111d93384611794565b60005b81811015610e605760075460009060ff16611209578383838181106111fd57fe5b90506020020135611220565b600184848481811061121757fe5b90506020020135035b90506006828154811061122f57fe5b60009182526020808320909101546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b039092169363a9059cbb9360448084019491939192918390030190829087803b15801561128d57600080fd5b505af11580156112a1573d6000803e3d6000fd5b505050506040513d60208110156112b757600080fd5b5050506001016111dc565b60075461010090046001600160a01b031681565b600681815481106112e357fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b3390565b6001600160a01b0383166113995760405162461bcd60e51b81526004018080602001828103825260248152602001806119df6024913960400191505060405180910390fd5b6001600160a01b0382166113de5760405162461bcd60e51b81526004018080602001828103825260228152602001806119296022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114855760405162461bcd60e51b81526004018080602001828103825260258152602001806119ba6025913960400191505060405180910390fd5b6001600160a01b0382166114ca5760405162461bcd60e51b81526004018080602001828103825260238152602001806118e46023913960400191505060405180910390fd5b6114d583838361189c565b6115188160405180606001604052806026815260200161194b602691396001600160a01b038616600090815260208190526040902054919063ffffffff6115a716565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461154d908263ffffffff61163e16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156116365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115fb5781810151838201526020016115e3565b50505050905090810190601f1680156116285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610e91576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0382166116f3576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6116ff6000838361189c565b600254611712908263ffffffff61163e16565b6002556001600160a01b03821660009081526020819052604090205461173e908263ffffffff61163e16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166117d95760405162461bcd60e51b81526004018080602001828103825260218152602001806119996021913960400191505060405180910390fd5b6117e58260008361189c565b61182881604051806060016040528060228152602001611907602291396001600160a01b038516600090815260208190526040902054919063ffffffff6115a716565b6001600160a01b038316600090815260208190526040902055600254611854908263ffffffff6118a116565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b6000610e9183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115a756fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220893cf92f8000bb49e1d3e1e09ede79af036072f1327dc1e9200ef6f106d98b5864736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80635f5d556b116100f9578063a457c2d711610097578063bab4625911610071578063bab46259146108d4578063dced1a5a146108dc578063dd62ed3e146108f9578063e9bdbcb814610927576101a9565b8063a457c2d714610807578063a9059cbb14610833578063b02f0b731461085f576101a9565b806370a08231116100d357806370a082311461078f5780637896d467146107b55780637fdefdad146107bd57806395d89b41146107ff576101a9565b80635f5d556b1461066a5780636d06dfa01461071b5780636d3188f81461074d576101a9565b8063395093511161016657806346ab38f11161014057806346ab38f1146104e45780634827e1e7146105165780634aa91574146105ed5780634f69c0d4146105f5576101a9565b8063395093511461031b578063449a52f81461034757806346313c9c14610375576101a9565b806306fdde03146101ae578063095ea7b31461022b5780630e8edd861461026b57806318160ddd146102ad57806323b872dd146102c7578063313ce567146102fd575b600080fd5b6101b661094d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b0381351690602001356109e3565b604080519115158252519081900360200190f35b6102916004803603602081101561028157600080fd5b50356001600160a01b0316610a00565b604080516001600160a01b039092168252519081900360200190f35b6102b5610a05565b60408051918252519081900360200190f35b610257600480360360608110156102dd57600080fd5b506001600160a01b03813581169160208101359091169060400135610a0b565b610305610a98565b6040805160ff9092168252519081900360200190f35b6102576004803603604081101561033157600080fd5b506001600160a01b038135169060200135610aa1565b6103736004803603604081101561035d57600080fd5b506001600160a01b038135169060200135610af5565b005b61044c600480360360a081101561038b57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156103be57600080fd5b8201836020820111156103d057600080fd5b803590602001918460208302840111600160201b831117156103f157600080fd5b919390929091602081019035600160201b81111561040e57600080fd5b82018360208201111561042057600080fd5b803590602001918460208302840111600160201b8311171561044157600080fd5b919350915035610b03565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156104a757818101518382015260200161048f565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610373600480360360608110156104fa57600080fd5b506001600160a01b038135169060208101359060400135610bd0565b61044c600480360360a081101561052c57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561055f57600080fd5b82018360208201111561057157600080fd5b803590602001918460208302840111600160201b8311171561059257600080fd5b919390929091602081019035600160201b8111156105af57600080fd5b8201836020820111156105c157600080fd5b803590602001918460208302840111600160201b831117156105e257600080fd5b919350915035610c77565b610373610d44565b6103736004803603604081101561060b57600080fd5b81359190810190604081016020820135600160201b81111561062c57600080fd5b82018360208201111561063e57600080fd5b803590602001918460208302840111600160201b8311171561065f57600080fd5b509092509050610d58565b6102576004803603604081101561068057600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156106aa57600080fd5b8201836020820111156106bc57600080fd5b803590602001918460208302840111600160201b831117156106dd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610e66945050505050565b6103736004803603606081101561073157600080fd5b506001600160a01b038135169060208101359060400135610e98565b61044c600480360360a081101561076357600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135610f3c565b6102b5600480360360208110156107a557600080fd5b50356001600160a01b0316611002565b61025761101d565b61044c600480360360a08110156107d357600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611026565b6101b66110ec565b6102576004803603604081101561081d57600080fd5b506001600160a01b03813516906020013561114d565b6102576004803603604081101561084957600080fd5b506001600160a01b0381351690602001356111bb565b6103736004803603604081101561087557600080fd5b81359190810190604081016020820135600160201b81111561089657600080fd5b8201836020820111156108a857600080fd5b803590602001918460208302840111600160201b831117156108c957600080fd5b5090925090506111cf565b6102916112c2565b610291600480360360208110156108f257600080fd5b50356112d6565b6102b56004803603604081101561090f57600080fd5b506001600160a01b03813581169160200135166112fd565b6103736004803603602081101561093d57600080fd5b50356001600160a01b0316611328565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b5050505050905090565b60006109f76109f0611350565b8484611354565b50600192915050565b503090565b60025490565b6000610a18848484611440565b610a8e84610a24611350565b610a8985604051806060016040528060288152602001611971602891396001600160a01b038a16600090815260016020526040812090610a62611350565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6115a716565b611354565b5060019392505050565b60055460ff1690565b60006109f7610aae611350565b84610a898560016000610abf611350565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61163e16565b610aff8282611698565b5050565b6000806060610b4589898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610e6692505050565b50606084878760405160240180848152602001806020018281038252848482818152602001925060200280828437600083820181905260408051601f909301601f199081169095018381039095018352939093526020810180516001600160e01b03166313da703560e21b179052309b50919950909750505050505050509750975097945050505050565b610bda3383611794565b60075460009060ff16610bed5781610bf2565b600182035b6040805163a9059cbb60e01b81523360048201526024810183905290519192506001600160a01b0386169163a9059cbb916044808201926020929091908290030181600087803b158015610c4557600080fd5b505af1158015610c59573d6000803e3d6000fd5b505050506040513d6020811015610c6f57600080fd5b505050505050565b6000806060610cb989898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610e6692505050565b50606084878760405160240180848152602001806020018281038252848482818152602001925060200280828437600083820181905260408051601f909301601f199081169095018381039095018352939093526020810180516001600160e01b031663b02f0b7360e01b179052309b50919950909750505050505050509750975097945050505050565b6007805460ff19811660ff90911615179055565b60005b81811015610e3b5760068181548110610d7057fe5b6000918252602090912001546001600160a01b03166323b872dd3330868686818110610d9857fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015610e0757600080fd5b505af1158015610e1b573d6000803e3d6000fd5b505050506040513d6020811015610e3157600080fd5b5050600101610d5b565b5060075460009060ff16610e4f5783610e54565b600184035b9050610e603382611698565b50505050565b60006001600160a01b038316301480610e9157506007546001600160a01b0384811661010090920416145b9392505050565b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b038516916323b872dd9160648083019260209291908290030181600087803b158015610eed57600080fd5b505af1158015610f01573d6000803e3d6000fd5b505050506040513d6020811015610f1757600080fd5b505060075460009060ff16610f2c5782610e54565b506000198201610e603382611698565b6040805160018082528183019092526000918291606091829190602080830190803683370190505090508681600081518110610f7457fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610f9e8882610e66565b5050604080516001600160a01b03881660248201526044810186905260648082018890528251808303909101815260849091019091526020810180516001600160e01b031663036836fd60e51b179052309350600092509050955095509592505050565b6001600160a01b031660009081526020819052604090205490565b60075460ff1681565b604080516001808252818301909252600091829160609182919060208083019080368337019050509050868160008151811061105e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506110888882610e66565b5050604080516001600160a01b03881660248201526044810186905260648082018890528251808303909101815260849091019091526020810180516001600160e01b03166346ab38f160e01b179052309350600092509050955095509592505050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109d95780601f106109ae576101008083540402835291602001916109d9565b60006109f761115a611350565b84610a8985604051806060016040528060258152602001611a036025913960016000611184611350565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6115a716565b60006109f76111c8611350565b8484611440565b6111d93384611794565b60005b81811015610e605760075460009060ff16611209578383838181106111fd57fe5b90506020020135611220565b600184848481811061121757fe5b90506020020135035b90506006828154811061122f57fe5b60009182526020808320909101546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b039092169363a9059cbb9360448084019491939192918390030190829087803b15801561128d57600080fd5b505af11580156112a1573d6000803e3d6000fd5b505050506040513d60208110156112b757600080fd5b5050506001016111dc565b60075461010090046001600160a01b031681565b600681815481106112e357fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b3390565b6001600160a01b0383166113995760405162461bcd60e51b81526004018080602001828103825260248152602001806119df6024913960400191505060405180910390fd5b6001600160a01b0382166113de5760405162461bcd60e51b81526004018080602001828103825260228152602001806119296022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114855760405162461bcd60e51b81526004018080602001828103825260258152602001806119ba6025913960400191505060405180910390fd5b6001600160a01b0382166114ca5760405162461bcd60e51b81526004018080602001828103825260238152602001806118e46023913960400191505060405180910390fd5b6114d583838361189c565b6115188160405180606001604052806026815260200161194b602691396001600160a01b038616600090815260208190526040902054919063ffffffff6115a716565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461154d908263ffffffff61163e16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156116365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115fb5781810151838201526020016115e3565b50505050905090810190601f1680156116285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610e91576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0382166116f3576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6116ff6000838361189c565b600254611712908263ffffffff61163e16565b6002556001600160a01b03821660009081526020819052604090205461173e908263ffffffff61163e16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166117d95760405162461bcd60e51b81526004018080602001828103825260218152602001806119996021913960400191505060405180910390fd5b6117e58260008361189c565b61182881604051806060016040528060228152602001611907602291396001600160a01b038516600090815260208190526040902054919063ffffffff6115a716565b6001600160a01b038316600090815260208190526040902055600254611854908263ffffffff6118a116565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b6000610e9183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115a756fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220893cf92f8000bb49e1d3e1e09ede79af036072f1327dc1e9200ef6f106d98b5864736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
