{
  "_format": "hh-sol-artifact-1",
  "contractName": "MultiSigWallet",
  "sourceName": "contracts/MultiSigWallet.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "AddedOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "transactionId",
          "type": "uint256"
        }
      ],
      "name": "ApprovalRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "threshold",
          "type": "uint8"
        }
      ],
      "name": "ChangedThreshold",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "transactionId",
          "type": "uint256"
        }
      ],
      "name": "ExecutionFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Received",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "RemovedOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "transactionId",
          "type": "uint256"
        }
      ],
      "name": "TransactionApproved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "transactionId",
          "type": "uint256"
        }
      ],
      "name": "TransactionExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "transactionId",
          "type": "uint256"
        }
      ],
      "name": "TransactionSubmitted",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAX_OWNER",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "_threshold",
          "type": "uint8"
        }
      ],
      "name": "addOwnerWithThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "approvals",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_txnId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_threshold",
          "type": "uint8"
        }
      ],
      "name": "changeThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "checkOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_txnId",
          "type": "uint256"
        }
      ],
      "name": "executeTransaction",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_txnId",
          "type": "uint256"
        }
      ],
      "name": "getApprovalCount",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "count",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOwners",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getThreshold",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_pending",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "_executed",
          "type": "bool"
        }
      ],
      "name": "getTransactionCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_owners",
          "type": "address[]"
        },
        {
          "internalType": "uint8",
          "name": "_required",
          "type": "uint8"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_txnId",
          "type": "uint256"
        }
      ],
      "name": "isConfirmed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "status",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_txnId",
          "type": "uint256"
        }
      ],
      "name": "revokeApproval",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum Types.Operation",
          "name": "operation",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "submitTransaction",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "txnId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "prevOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "swapOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "tokensReceived",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "transactionCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transactions",
      "outputs": [
        {
          "internalType": "enum Types.Operation",
          "name": "operation",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint8",
          "name": "approval",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "executed",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061211e806100206000396000f3fe6080604052600436106101435760003560e01c8063b1e130fc116100b6578063bc197c811161006f578063bc197c8114610427578063e0e3671c14610456578063e318b52b14610476578063e75235b814610496578063ee22610b146104ae578063f23a6e61146104ce57600080fd5b8063b1e130fc1461035d578063b759f9541461037d578063b77bf6001461039d578063b7f3358d146103b3578063b91a667f146103d3578063ba7e7cab146103f357600080fd5b806372688111116101085780637268811114610267578063784547a71461028e5780638dbcc2e0146102ae5780639ace38c2146102ce578063a0e67e2b14610300578063ab2850da1461032257600080fd5b806223de291461018457806301ffc9a7146101ab578063150b7a02146101e05780632bbdea4e14610219578063547415251461023957600080fd5b3661017f5760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b34801561019057600080fd5b506101a961019f366004611a09565b5050505050505050565b005b3480156101b757600080fd5b506101cb6101c6366004611d46565b6104fb565b60405190151581526020015b60405180910390f35b3480156101ec57600080fd5b506102006101fb366004611b47565b61054d565b6040516001600160e01b031990911681526020016101d7565b34801561022557600080fd5b506101a9610234366004611c5c565b61055f565b34801561024557600080fd5b50610259610254366004611d1d565b610633565b6040519081526020016101d7565b34801561027357600080fd5b5061027c603281565b60405160ff90911681526020016101d7565b34801561029a57600080fd5b506101cb6102a9366004611e2b565b6106bc565b3480156102ba57600080fd5b506102596102c9366004611d6e565b6106f0565b3480156102da57600080fd5b506102ee6102e9366004611e2b565b610711565b6040516101d796959493929190611ecc565b34801561030c57600080fd5b506103156107e1565b6040516101d79190611e7f565b34801561032e57600080fd5b506101cb61033d366004611e43565b600460209081526000928352604080842090915290825290205460ff1681565b34801561036957600080fd5b506101a9610378366004611e2b565b6108eb565b34801561038957600080fd5b506101a9610398366004611e2b565b610a6e565b3480156103a957600080fd5b5061025960055481565b3480156103bf57600080fd5b506101a96103ce366004611e65565b610bed565b3480156103df57600080fd5b506101a96103ee366004611c2a565b610cdb565b3480156103ff57600080fd5b5061027c61040e366004611e2b565b6000908152600360208190526040909120015460ff1690565b34801561043357600080fd5b50610200610442366004611ab1565b63bc197c8160e01b98975050505050505050565b34801561046257600080fd5b506101cb6104713660046119a6565b610e65565b34801561048257600080fd5b506101a96104913660046119c7565b610e9d565b3480156104a257600080fd5b5060025460ff1661027c565b3480156104ba57600080fd5b506101cb6104c9366004611e2b565b611102565b3480156104da57600080fd5b506102006104e9366004611bb4565b63f23a6e6160e01b9695505050505050565b60006001600160e01b03198216630271189760e51b148061052c57506001600160e01b03198216630a85bd0160e11b145b8061054757506001600160e01b031982166301ffc9a760e01b145b92915050565b630a85bd0160e11b5b95945050505050565b60025462010000900460ff1661058057600254610100900460ff1615610584565b303b155b6105ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b60025462010000900460ff16158015610611576002805462ffff001916620101001790555b61061b8383611366565b801561062e576002805462ff0000191690555b505050565b6000805b6005548110156106b557838015610666575060008181526003602081905260409091200154610100900460ff16155b806106905750828015610690575060008181526003602081905260409091200154610100900460ff165b156106a3578161069f81612081565b9250505b806106ad81612081565b915050610637565b5092915050565b60006106ca60025460ff1690565b60009283526003602081905260409093209092015460ff92831692169190911015919050565b60006106fe858585856115f8565b905061070981610a6e565b949350505050565b60036020526000908152604090208054600182015460028301805460ff8416946101009094046001600160a01b031693919061074c90612046565b80601f016020809104026020016040519081016040528092919081815260200182805461077890612046565b80156107c55780601f1061079a576101008083540402835291602001916107c5565b820191906000526020600020905b8154815290600101906020018083116107a857829003601f168201915b5050506003909301549192505060ff8082169161010090041686565b6060600060015467ffffffffffffffff81111561080e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610837578160200160208202803683370190505b506001600090815260208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d549192506001600160a01b03909116905b6001548110156108e357818382815181106108a157634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920181019190915292811660009081529283905260409092205490911690806108db81612081565b915050610876565b509092915050565b336108f581610e65565b6109115760405162461bcd60e51b81526004016105e390611f73565b60008281526004602090815260408083203380855292529091205483919060ff1661097e5760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206265656e20617070726f7665642062792074686973206f776e65720060448201526064016105e3565b600084815260036020819052604090912001548490610100900460ff16156109e25760405162461bcd60e51b81526020600482015260176024820152761d1c985b9cd858dd1a5bdb881a5cc8195e1958dd5d1959604a1b60448201526064016105e3565b6000858152600360208190526040822001805460ff1691610a0283612029565b825460ff9182166101009390930a9283029190920219909116179055506000858152600460209081526040808320338085529252808320805460ff191690555187927f3e776e19fc0f05c1b8270744b61c5729d5d1a5d8dded1bfb81e3979e257edd5991a35050505050565b33610a7881610e65565b610a945760405162461bcd60e51b81526004016105e390611f73565b816005548110610ae65760405162461bcd60e51b815260206004820152601860248201527f7472616e73616374696f6e206973206e6f74206578697374000000000000000060448201526064016105e3565b60008381526004602090815260408083203380855292529091205484919060ff1615610b545760405162461bcd60e51b815260206004820152601f60248201527f686173206265656e20617070726f7665642062792074686973206f776e65720060448201526064016105e3565b6000858152600360208190526040822001805460ff1691610b748361209c565b825460ff9182166101009390930a9283029190920219909116179055506000858152600460209081526040808320338085529252808320805460ff191660011790555187927f7b19c08b12f940ea76949b68d355070966056a862ad2c1aa6676ecbcc9538a6191a3610be585611102565b505050505050565b610bf56117ad565b6001548160ff161115610c4a5760405162461bcd60e51b815260206004820152601d60248201527f7468726573686f6c64206973206d6f7265207468616e206f776e65727300000060448201526064016105e3565b60018160ff161015610c935760405162461bcd60e51b815260206004820152601260248201527130ba103632b0b9ba1037b7329037bbb732b960711b60448201526064016105e3565b6002805460ff191660ff83169081179091556040519081527fa1a39f4ff110596455f47a4a25db50c3662a86ffdb67875e4291c2efde959f1d9060200160405180910390a150565b610ce36117ad565b6001600160a01b03821615801590610d0457506001600160a01b0382163014155b8015610d1a57506001600160a01b038216600114155b610d625760405162461bcd60e51b81526020600482015260196024820152786e6f7420616c6c6f776564206f776e6572206164647265737360381b60448201526064016105e3565b6001600160a01b038281166000908152602081905260409020541615610d9a5760405162461bcd60e51b81526004016105e390611faa565b600060208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03858116808552604085208054929093166001600160a01b03199283161790925560018085528354909116909117909155805491610e0883612081565b90915550506040516001600160a01b03831681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a160025460ff828116911614610e6157610e6181610bed565b5050565b60006001600160a01b0382166001148015906105475750506001600160a01b0390811660009081526020819052604090205416151590565b610ea56117ad565b6001600160a01b03811615801590610ec657506001600160a01b0381163014155b8015610edc57506001600160a01b038116600114155b610f285760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206e6577206f776e657220616464726573730000000000000060448201526064016105e3565b6001600160a01b038181166000908152602081905260409020541615610f605760405162461bcd60e51b81526004016105e390611faa565b6001600160a01b03821615801590610f8257506001600160a01b038216600114155b610fce5760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206f6c64206f776e657220616464726573730000000000000060448201526064016105e3565b6001600160a01b0383811660009081526020819052604090205481169083161461103a5760405162461bcd60e51b815260206004820152601e60248201527f6e6f7420636f72726573706f6e6420746f20746865206f6c644f776e6572000060448201526064016105e3565b6001600160a01b03828116600081815260208181526040808320805487871680865283862080549289166001600160a01b0319938416179055968a1685528285208054821690971790965592849052825490941690915591519081527ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf910160405180910390a16040516001600160a01b03821681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a1505050565b60003361110e81610e65565b61112a5760405162461bcd60e51b81526004016105e390611f73565b60008381526004602090815260408083203380855292529091205484919060ff166111975760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206265656e20617070726f7665642062792074686973206f776e65720060448201526064016105e3565b600085815260036020819052604090912001548590610100900460ff16156111fb5760405162461bcd60e51b81526020600482015260176024820152761d1c985b9cd858dd1a5bdb881a5cc8195e1958dd5d1959604a1b60448201526064016105e3565b611204866106bc565b1561135d576000868152600360205260409020805460018201546002830180546112d99360ff8116936101009091046001600160a01b031692909161124890612046565b80601f016020809104026020016040519081016040528092919081815260200182805461127490612046565b80156112c15780601f10611296576101008083540402835291602001916112c1565b820191906000526020600020905b8154815290600101906020018083116112a457829003601f168201915b50505050506109c45a6112d49190612012565b6117f3565b955085156113225760038101805461ff00191661010017905560405187907f15ed165a284872ea7017f03df402a0cadfbfab588320ffaf83f160c2f82781c790600090a261135b565b60038101805461ff001916905560405187907f492fd70ea712c765647b1676dbd9ea071e027174bc0cbbdb721f33658880271e90600090a25b505b50505050919050565b60025460ff16156113b95760405162461bcd60e51b815260206004820152601760248201527f63616e206f6e6c792062652063616c6c6564206f6e636500000000000000000060448201526064016105e3565b81518160ff16111561140d5760405162461bcd60e51b815260206004820152601d60248201527f7468726573686f6c64206973206d6f7265207468616e206f776e65727300000060448201526064016105e3565b60018160ff1610156114565760405162461bcd60e51b815260206004820152601260248201527130ba103632b0b9ba1037b7329037bbb732b960711b60448201526064016105e3565b600160005b83518110156115b157600084828151811061148657634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006001600160a01b0316816001600160a01b0316141580156114bc57506001600160a01b0381163014155b80156114da5750826001600160a01b0316816001600160a01b031614155b80156114f057506001600160a01b038116600114155b6115385760405162461bcd60e51b81526020600482015260196024820152786e6f7420616c6c6f776564206f776e6572206164647265737360381b60448201526064016105e3565b6001600160a01b0381811660009081526020819052604090205416156115705760405162461bcd60e51b81526004016105e390611faa565b6001600160a01b03928316600090815260208190526040902080546001600160a01b03191693821693909317909255806115a981612081565b91505061145b565b506001600160a01b03166000908152602081905260409020805460016001600160a01b0319909116811790915591519091556002805460ff191660ff909216919091179055565b6000836001600160a01b0381166116515760405162461bcd60e51b815260206004820152601c60248201527f746869732061646472657373206973207a65726f20616464726573730000000060448201526064016105e3565b60056000815461166090612081565b91905081905591506040518060c0016040528087600181111561169357634e487b7160e01b600052602160045260246000fd5b81526001600160a01b03871660208083019190915260408083018890526060830187905260006080840181905260a09093018390528583526003909152902081518154829060ff1916600183818111156116fd57634e487b7160e01b600052602160045260246000fd5b021790555060208281015182546001600160a01b0390911661010002610100600160a81b0319909116178255604083015160018301556060830151805161174a9260028501920190611846565b5060808201516003909101805460a09093015115156101000261ffff1990931660ff9092169190911791909117905560405182907fd0b5d9eac097410294ec9f2cee7cd185cf31ab46babf3dfdbeac8b222b03f2d190600090a250949350505050565b3330146117f15760405162461bcd60e51b81526020600482015260126024820152711c995c5d5a5c9959081cd95b198818d85b1b60721b60448201526064016105e3565b565b60008086600181111561181657634e487b7160e01b600052602160045260246000fd5b141561183057600080845160208601878987f19050610556565b6000808451602086018886f49695505050505050565b82805461185290612046565b90600052602060002090601f01602090048101928261187457600085556118ba565b82601f1061188d57805160ff19168380011785556118ba565b828001600101855582156118ba579182015b828111156118ba57825182559160200191906001019061189f565b506118c69291506118ca565b5090565b5b808211156118c657600081556001016118cb565b80356001600160a01b03811681146118f657600080fd5b919050565b60008083601f84011261190c578182fd5b50813567ffffffffffffffff811115611923578182fd5b6020830191508360208260051b850101111561193e57600080fd5b9250929050565b803580151581146118f657600080fd5b60008083601f840112611966578182fd5b50813567ffffffffffffffff81111561197d578182fd5b60208301915083602082850101111561193e57600080fd5b803560ff811681146118f657600080fd5b6000602082840312156119b7578081fd5b6119c0826118df565b9392505050565b6000806000606084860312156119db578182fd5b6119e4846118df565b92506119f2602085016118df565b9150611a00604085016118df565b90509250925092565b60008060008060008060008060c0898b031215611a24578384fd5b611a2d896118df565b9750611a3b60208a016118df565b9650611a4960408a016118df565b955060608901359450608089013567ffffffffffffffff80821115611a6c578586fd5b611a788c838d01611955565b909650945060a08b0135915080821115611a90578384fd5b50611a9d8b828c01611955565b999c989b5096995094979396929594505050565b60008060008060008060008060a0898b031215611acc578384fd5b611ad5896118df565b9750611ae360208a016118df565b9650604089013567ffffffffffffffff80821115611aff578586fd5b611b0b8c838d016118fb565b909850965060608b0135915080821115611b23578586fd5b611b2f8c838d016118fb565b909650945060808b0135915080821115611a90578384fd5b600080600080600060808688031215611b5e578081fd5b611b67866118df565b9450611b75602087016118df565b935060408601359250606086013567ffffffffffffffff811115611b97578182fd5b611ba388828901611955565b969995985093965092949392505050565b60008060008060008060a08789031215611bcc578182fd5b611bd5876118df565b9550611be3602088016118df565b94506040870135935060608701359250608087013567ffffffffffffffff811115611c0c578283fd5b611c1889828a01611955565b979a9699509497509295939492505050565b60008060408385031215611c3c578182fd5b611c45836118df565b9150611c5360208401611995565b90509250929050565b60008060408385031215611c6e578182fd5b823567ffffffffffffffff80821115611c85578384fd5b818501915085601f830112611c98578384fd5b8135602082821115611cac57611cac6120d2565b8160051b9250611cbd818401611fe1565b8281528181019085830185870184018b1015611cd7578889fd5b8896505b84871015611d0057611cec816118df565b835260019690960195918301918301611cdb565b509650611d109050878201611995565b9450505050509250929050565b60008060408385031215611d2f578182fd5b611d3883611945565b9150611c5360208401611945565b600060208284031215611d57578081fd5b81356001600160e01b0319811681146119c0578182fd5b60008060008060808587031215611d83578182fd5b843560028110611d91578283fd5b93506020611da08682016118df565b935060408601359250606086013567ffffffffffffffff80821115611dc3578384fd5b818801915088601f830112611dd6578384fd5b813581811115611de857611de86120d2565b611dfa601f8201601f19168501611fe1565b91508082528984828501011115611e0f578485fd5b8084840185840137810190920192909252939692955090935050565b600060208284031215611e3c578081fd5b5035919050565b60008060408385031215611e55578182fd5b82359150611c53602084016118df565b600060208284031215611e76578081fd5b6119c082611995565b6020808252825182820181905260009190848201906040850190845b81811015611ec05783516001600160a01b031683529284019291840191600101611e9b565b50909695505050505050565b600060028810611eea57634e487b7160e01b81526021600452602481fd5b878252602060018060a01b0388168184015286604084015260c0606084015285518060c0850152825b81811015611f2f5787810183015185820160e001528201611f13565b81811115611f40578360e083870101525b50601f01601f1916830160e0019150611f609050608083018560ff169052565b82151560a0830152979650505050505050565b60208082526018908201527f6973206e6f74206f6e65206f6620746865206f776e6572730000000000000000604082015260600190565b60208082526017908201527f6475706c6963617465206f776e65722061646472657373000000000000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561200a5761200a6120d2565b604052919050565b600082821015612024576120246120bc565b500390565b600060ff82168061203c5761203c6120bc565b6000190192915050565b600181811c9082168061205a57607f821691505b6020821081141561207b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612095576120956120bc565b5060010190565b600060ff821660ff8114156120b3576120b36120bc565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122011a4e7f360d5c5573340e56bd28ae38d45a4d0b3e4399baa321463a224b87d7764736f6c63430008040033",
  "deployedBytecode": "0x6080604052600436106101435760003560e01c8063b1e130fc116100b6578063bc197c811161006f578063bc197c8114610427578063e0e3671c14610456578063e318b52b14610476578063e75235b814610496578063ee22610b146104ae578063f23a6e61146104ce57600080fd5b8063b1e130fc1461035d578063b759f9541461037d578063b77bf6001461039d578063b7f3358d146103b3578063b91a667f146103d3578063ba7e7cab146103f357600080fd5b806372688111116101085780637268811114610267578063784547a71461028e5780638dbcc2e0146102ae5780639ace38c2146102ce578063a0e67e2b14610300578063ab2850da1461032257600080fd5b806223de291461018457806301ffc9a7146101ab578063150b7a02146101e05780632bbdea4e14610219578063547415251461023957600080fd5b3661017f5760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b34801561019057600080fd5b506101a961019f366004611a09565b5050505050505050565b005b3480156101b757600080fd5b506101cb6101c6366004611d46565b6104fb565b60405190151581526020015b60405180910390f35b3480156101ec57600080fd5b506102006101fb366004611b47565b61054d565b6040516001600160e01b031990911681526020016101d7565b34801561022557600080fd5b506101a9610234366004611c5c565b61055f565b34801561024557600080fd5b50610259610254366004611d1d565b610633565b6040519081526020016101d7565b34801561027357600080fd5b5061027c603281565b60405160ff90911681526020016101d7565b34801561029a57600080fd5b506101cb6102a9366004611e2b565b6106bc565b3480156102ba57600080fd5b506102596102c9366004611d6e565b6106f0565b3480156102da57600080fd5b506102ee6102e9366004611e2b565b610711565b6040516101d796959493929190611ecc565b34801561030c57600080fd5b506103156107e1565b6040516101d79190611e7f565b34801561032e57600080fd5b506101cb61033d366004611e43565b600460209081526000928352604080842090915290825290205460ff1681565b34801561036957600080fd5b506101a9610378366004611e2b565b6108eb565b34801561038957600080fd5b506101a9610398366004611e2b565b610a6e565b3480156103a957600080fd5b5061025960055481565b3480156103bf57600080fd5b506101a96103ce366004611e65565b610bed565b3480156103df57600080fd5b506101a96103ee366004611c2a565b610cdb565b3480156103ff57600080fd5b5061027c61040e366004611e2b565b6000908152600360208190526040909120015460ff1690565b34801561043357600080fd5b50610200610442366004611ab1565b63bc197c8160e01b98975050505050505050565b34801561046257600080fd5b506101cb6104713660046119a6565b610e65565b34801561048257600080fd5b506101a96104913660046119c7565b610e9d565b3480156104a257600080fd5b5060025460ff1661027c565b3480156104ba57600080fd5b506101cb6104c9366004611e2b565b611102565b3480156104da57600080fd5b506102006104e9366004611bb4565b63f23a6e6160e01b9695505050505050565b60006001600160e01b03198216630271189760e51b148061052c57506001600160e01b03198216630a85bd0160e11b145b8061054757506001600160e01b031982166301ffc9a760e01b145b92915050565b630a85bd0160e11b5b95945050505050565b60025462010000900460ff1661058057600254610100900460ff1615610584565b303b155b6105ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b60025462010000900460ff16158015610611576002805462ffff001916620101001790555b61061b8383611366565b801561062e576002805462ff0000191690555b505050565b6000805b6005548110156106b557838015610666575060008181526003602081905260409091200154610100900460ff16155b806106905750828015610690575060008181526003602081905260409091200154610100900460ff165b156106a3578161069f81612081565b9250505b806106ad81612081565b915050610637565b5092915050565b60006106ca60025460ff1690565b60009283526003602081905260409093209092015460ff92831692169190911015919050565b60006106fe858585856115f8565b905061070981610a6e565b949350505050565b60036020526000908152604090208054600182015460028301805460ff8416946101009094046001600160a01b031693919061074c90612046565b80601f016020809104026020016040519081016040528092919081815260200182805461077890612046565b80156107c55780601f1061079a576101008083540402835291602001916107c5565b820191906000526020600020905b8154815290600101906020018083116107a857829003601f168201915b5050506003909301549192505060ff8082169161010090041686565b6060600060015467ffffffffffffffff81111561080e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610837578160200160208202803683370190505b506001600090815260208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d549192506001600160a01b03909116905b6001548110156108e357818382815181106108a157634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920181019190915292811660009081529283905260409092205490911690806108db81612081565b915050610876565b509092915050565b336108f581610e65565b6109115760405162461bcd60e51b81526004016105e390611f73565b60008281526004602090815260408083203380855292529091205483919060ff1661097e5760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206265656e20617070726f7665642062792074686973206f776e65720060448201526064016105e3565b600084815260036020819052604090912001548490610100900460ff16156109e25760405162461bcd60e51b81526020600482015260176024820152761d1c985b9cd858dd1a5bdb881a5cc8195e1958dd5d1959604a1b60448201526064016105e3565b6000858152600360208190526040822001805460ff1691610a0283612029565b825460ff9182166101009390930a9283029190920219909116179055506000858152600460209081526040808320338085529252808320805460ff191690555187927f3e776e19fc0f05c1b8270744b61c5729d5d1a5d8dded1bfb81e3979e257edd5991a35050505050565b33610a7881610e65565b610a945760405162461bcd60e51b81526004016105e390611f73565b816005548110610ae65760405162461bcd60e51b815260206004820152601860248201527f7472616e73616374696f6e206973206e6f74206578697374000000000000000060448201526064016105e3565b60008381526004602090815260408083203380855292529091205484919060ff1615610b545760405162461bcd60e51b815260206004820152601f60248201527f686173206265656e20617070726f7665642062792074686973206f776e65720060448201526064016105e3565b6000858152600360208190526040822001805460ff1691610b748361209c565b825460ff9182166101009390930a9283029190920219909116179055506000858152600460209081526040808320338085529252808320805460ff191660011790555187927f7b19c08b12f940ea76949b68d355070966056a862ad2c1aa6676ecbcc9538a6191a3610be585611102565b505050505050565b610bf56117ad565b6001548160ff161115610c4a5760405162461bcd60e51b815260206004820152601d60248201527f7468726573686f6c64206973206d6f7265207468616e206f776e65727300000060448201526064016105e3565b60018160ff161015610c935760405162461bcd60e51b815260206004820152601260248201527130ba103632b0b9ba1037b7329037bbb732b960711b60448201526064016105e3565b6002805460ff191660ff83169081179091556040519081527fa1a39f4ff110596455f47a4a25db50c3662a86ffdb67875e4291c2efde959f1d9060200160405180910390a150565b610ce36117ad565b6001600160a01b03821615801590610d0457506001600160a01b0382163014155b8015610d1a57506001600160a01b038216600114155b610d625760405162461bcd60e51b81526020600482015260196024820152786e6f7420616c6c6f776564206f776e6572206164647265737360381b60448201526064016105e3565b6001600160a01b038281166000908152602081905260409020541615610d9a5760405162461bcd60e51b81526004016105e390611faa565b600060208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03858116808552604085208054929093166001600160a01b03199283161790925560018085528354909116909117909155805491610e0883612081565b90915550506040516001600160a01b03831681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a160025460ff828116911614610e6157610e6181610bed565b5050565b60006001600160a01b0382166001148015906105475750506001600160a01b0390811660009081526020819052604090205416151590565b610ea56117ad565b6001600160a01b03811615801590610ec657506001600160a01b0381163014155b8015610edc57506001600160a01b038116600114155b610f285760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206e6577206f776e657220616464726573730000000000000060448201526064016105e3565b6001600160a01b038181166000908152602081905260409020541615610f605760405162461bcd60e51b81526004016105e390611faa565b6001600160a01b03821615801590610f8257506001600160a01b038216600114155b610fce5760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206f6c64206f776e657220616464726573730000000000000060448201526064016105e3565b6001600160a01b0383811660009081526020819052604090205481169083161461103a5760405162461bcd60e51b815260206004820152601e60248201527f6e6f7420636f72726573706f6e6420746f20746865206f6c644f776e6572000060448201526064016105e3565b6001600160a01b03828116600081815260208181526040808320805487871680865283862080549289166001600160a01b0319938416179055968a1685528285208054821690971790965592849052825490941690915591519081527ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf910160405180910390a16040516001600160a01b03821681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a1505050565b60003361110e81610e65565b61112a5760405162461bcd60e51b81526004016105e390611f73565b60008381526004602090815260408083203380855292529091205484919060ff166111975760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206265656e20617070726f7665642062792074686973206f776e65720060448201526064016105e3565b600085815260036020819052604090912001548590610100900460ff16156111fb5760405162461bcd60e51b81526020600482015260176024820152761d1c985b9cd858dd1a5bdb881a5cc8195e1958dd5d1959604a1b60448201526064016105e3565b611204866106bc565b1561135d576000868152600360205260409020805460018201546002830180546112d99360ff8116936101009091046001600160a01b031692909161124890612046565b80601f016020809104026020016040519081016040528092919081815260200182805461127490612046565b80156112c15780601f10611296576101008083540402835291602001916112c1565b820191906000526020600020905b8154815290600101906020018083116112a457829003601f168201915b50505050506109c45a6112d49190612012565b6117f3565b955085156113225760038101805461ff00191661010017905560405187907f15ed165a284872ea7017f03df402a0cadfbfab588320ffaf83f160c2f82781c790600090a261135b565b60038101805461ff001916905560405187907f492fd70ea712c765647b1676dbd9ea071e027174bc0cbbdb721f33658880271e90600090a25b505b50505050919050565b60025460ff16156113b95760405162461bcd60e51b815260206004820152601760248201527f63616e206f6e6c792062652063616c6c6564206f6e636500000000000000000060448201526064016105e3565b81518160ff16111561140d5760405162461bcd60e51b815260206004820152601d60248201527f7468726573686f6c64206973206d6f7265207468616e206f776e65727300000060448201526064016105e3565b60018160ff1610156114565760405162461bcd60e51b815260206004820152601260248201527130ba103632b0b9ba1037b7329037bbb732b960711b60448201526064016105e3565b600160005b83518110156115b157600084828151811061148657634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006001600160a01b0316816001600160a01b0316141580156114bc57506001600160a01b0381163014155b80156114da5750826001600160a01b0316816001600160a01b031614155b80156114f057506001600160a01b038116600114155b6115385760405162461bcd60e51b81526020600482015260196024820152786e6f7420616c6c6f776564206f776e6572206164647265737360381b60448201526064016105e3565b6001600160a01b0381811660009081526020819052604090205416156115705760405162461bcd60e51b81526004016105e390611faa565b6001600160a01b03928316600090815260208190526040902080546001600160a01b03191693821693909317909255806115a981612081565b91505061145b565b506001600160a01b03166000908152602081905260409020805460016001600160a01b0319909116811790915591519091556002805460ff191660ff909216919091179055565b6000836001600160a01b0381166116515760405162461bcd60e51b815260206004820152601c60248201527f746869732061646472657373206973207a65726f20616464726573730000000060448201526064016105e3565b60056000815461166090612081565b91905081905591506040518060c0016040528087600181111561169357634e487b7160e01b600052602160045260246000fd5b81526001600160a01b03871660208083019190915260408083018890526060830187905260006080840181905260a09093018390528583526003909152902081518154829060ff1916600183818111156116fd57634e487b7160e01b600052602160045260246000fd5b021790555060208281015182546001600160a01b0390911661010002610100600160a81b0319909116178255604083015160018301556060830151805161174a9260028501920190611846565b5060808201516003909101805460a09093015115156101000261ffff1990931660ff9092169190911791909117905560405182907fd0b5d9eac097410294ec9f2cee7cd185cf31ab46babf3dfdbeac8b222b03f2d190600090a250949350505050565b3330146117f15760405162461bcd60e51b81526020600482015260126024820152711c995c5d5a5c9959081cd95b198818d85b1b60721b60448201526064016105e3565b565b60008086600181111561181657634e487b7160e01b600052602160045260246000fd5b141561183057600080845160208601878987f19050610556565b6000808451602086018886f49695505050505050565b82805461185290612046565b90600052602060002090601f01602090048101928261187457600085556118ba565b82601f1061188d57805160ff19168380011785556118ba565b828001600101855582156118ba579182015b828111156118ba57825182559160200191906001019061189f565b506118c69291506118ca565b5090565b5b808211156118c657600081556001016118cb565b80356001600160a01b03811681146118f657600080fd5b919050565b60008083601f84011261190c578182fd5b50813567ffffffffffffffff811115611923578182fd5b6020830191508360208260051b850101111561193e57600080fd5b9250929050565b803580151581146118f657600080fd5b60008083601f840112611966578182fd5b50813567ffffffffffffffff81111561197d578182fd5b60208301915083602082850101111561193e57600080fd5b803560ff811681146118f657600080fd5b6000602082840312156119b7578081fd5b6119c0826118df565b9392505050565b6000806000606084860312156119db578182fd5b6119e4846118df565b92506119f2602085016118df565b9150611a00604085016118df565b90509250925092565b60008060008060008060008060c0898b031215611a24578384fd5b611a2d896118df565b9750611a3b60208a016118df565b9650611a4960408a016118df565b955060608901359450608089013567ffffffffffffffff80821115611a6c578586fd5b611a788c838d01611955565b909650945060a08b0135915080821115611a90578384fd5b50611a9d8b828c01611955565b999c989b5096995094979396929594505050565b60008060008060008060008060a0898b031215611acc578384fd5b611ad5896118df565b9750611ae360208a016118df565b9650604089013567ffffffffffffffff80821115611aff578586fd5b611b0b8c838d016118fb565b909850965060608b0135915080821115611b23578586fd5b611b2f8c838d016118fb565b909650945060808b0135915080821115611a90578384fd5b600080600080600060808688031215611b5e578081fd5b611b67866118df565b9450611b75602087016118df565b935060408601359250606086013567ffffffffffffffff811115611b97578182fd5b611ba388828901611955565b969995985093965092949392505050565b60008060008060008060a08789031215611bcc578182fd5b611bd5876118df565b9550611be3602088016118df565b94506040870135935060608701359250608087013567ffffffffffffffff811115611c0c578283fd5b611c1889828a01611955565b979a9699509497509295939492505050565b60008060408385031215611c3c578182fd5b611c45836118df565b9150611c5360208401611995565b90509250929050565b60008060408385031215611c6e578182fd5b823567ffffffffffffffff80821115611c85578384fd5b818501915085601f830112611c98578384fd5b8135602082821115611cac57611cac6120d2565b8160051b9250611cbd818401611fe1565b8281528181019085830185870184018b1015611cd7578889fd5b8896505b84871015611d0057611cec816118df565b835260019690960195918301918301611cdb565b509650611d109050878201611995565b9450505050509250929050565b60008060408385031215611d2f578182fd5b611d3883611945565b9150611c5360208401611945565b600060208284031215611d57578081fd5b81356001600160e01b0319811681146119c0578182fd5b60008060008060808587031215611d83578182fd5b843560028110611d91578283fd5b93506020611da08682016118df565b935060408601359250606086013567ffffffffffffffff80821115611dc3578384fd5b818801915088601f830112611dd6578384fd5b813581811115611de857611de86120d2565b611dfa601f8201601f19168501611fe1565b91508082528984828501011115611e0f578485fd5b8084840185840137810190920192909252939692955090935050565b600060208284031215611e3c578081fd5b5035919050565b60008060408385031215611e55578182fd5b82359150611c53602084016118df565b600060208284031215611e76578081fd5b6119c082611995565b6020808252825182820181905260009190848201906040850190845b81811015611ec05783516001600160a01b031683529284019291840191600101611e9b565b50909695505050505050565b600060028810611eea57634e487b7160e01b81526021600452602481fd5b878252602060018060a01b0388168184015286604084015260c0606084015285518060c0850152825b81811015611f2f5787810183015185820160e001528201611f13565b81811115611f40578360e083870101525b50601f01601f1916830160e0019150611f609050608083018560ff169052565b82151560a0830152979650505050505050565b60208082526018908201527f6973206e6f74206f6e65206f6620746865206f776e6572730000000000000000604082015260600190565b60208082526017908201527f6475706c6963617465206f776e65722061646472657373000000000000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561200a5761200a6120d2565b604052919050565b600082821015612024576120246120bc565b500390565b600060ff82168061203c5761203c6120bc565b6000190192915050565b600181811c9082168061205a57607f821691505b6020821081141561207b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612095576120956120bc565b5060010190565b600060ff821660ff8114156120b3576120b36120bc565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122011a4e7f360d5c5573340e56bd28ae38d45a4d0b3e4399baa321463a224b87d7764736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
