{
  "_format": "hh-sol-artifact-1",
  "contractName": "StandardBridgeTester",
  "sourceName": "contracts/test/StandardBridge.t.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_messenger",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "_otherBridge",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "localToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "remoteToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "ERC20BridgeFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "localToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "remoteToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "ERC20BridgeInitiated",
      "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": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "ETHBridgeFinalized",
      "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": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "ETHBridgeInitiated",
      "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": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "MNTBridgeFinalized",
      "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": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "MNTBridgeInitiated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MESSENGER",
      "outputs": [
        {
          "internalType": "contract CrossDomainMessenger",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OTHER_BRIDGE",
      "outputs": [
        {
          "internalType": "contract StandardBridge",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_localToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_remoteToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_minGasLimit",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "bridgeERC20",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_localToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_remoteToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_minGasLimit",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "bridgeERC20To",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "deposits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_localToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_remoteToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "finalizeBridgeERC20",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "finalizeBridgeETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "finalizeBridgeMNT",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_mintableToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_otherToken",
          "type": "address"
        }
      ],
      "name": "isCorrectTokenPair",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "isOptimismMintableERC20",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "messenger",
      "outputs": [
        {
          "internalType": "contract CrossDomainMessenger",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001ec938038062001ec9833981016040819052620000349162000069565b6001600160a01b039182166080521660a052620000a1565b80516001600160a01b03811681146200006457600080fd5b919050565b600080604083850312156200007d57600080fd5b62000088836200004c565b915062000098602084016200004c565b90509250929050565b60805160a051611dbc6200010d600039600081816101dc015281816102ef015281816106ea015261125301526000818161014501528181610276015281816102c501528181610326015281816106c001528181610721015281816109ae01526112150152611dbc6000f3fe6080604052600436106100c05760003560e01c80637438bde7116100745780638f601f661161004e5780638f601f661461021e578063927ede2d14610264578063f407a99e1461029857600080fd5b80637438bde7146101aa5780637f46ddb2146101ca57806387087623146101fe57600080fd5b806339f79774116100a557806339f79774146101015780633cb747bf14610136578063540abf731461018a57600080fd5b80630166a07a146100cc5780631635f5fd146100ee57600080fd5b366100c757005b600080fd5b3480156100d857600080fd5b506100ec6100e73660046118fb565b6102ad565b005b6100ec6100fc366004611993565b6106a8565b34801561010d57600080fd5b5061012161011c366004611a06565b610b7d565b60405190151581526020015b60405180910390f35b34801561014257600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012d565b34801561019657600080fd5b506100ec6101a5366004611a58565b610b92565b3480156101b657600080fd5b506101216101c5366004611acf565b610bd7565b3480156101d657600080fd5b506101657f000000000000000000000000000000000000000000000000000000000000000081565b34801561020a57600080fd5b506100ec610219366004611aec565b610be2565b34801561022a57600080fd5b50610256610239366004611a06565b600360209081526000928352604080842090915290825290205481565b60405190815260200161012d565b34801561027057600080fd5b506101657f000000000000000000000000000000000000000000000000000000000000000081565b6100ec6102a6366004611993565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103cb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b39190611b6f565b73ffffffffffffffffffffffffffffffffffffffff16145b610482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b61048b87610cb6565b156105d95761049a8787610d12565b61054c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610479565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156105bc57600080fd5b505af11580156105d0573d6000803e3d6000fd5b5050505061065b565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a1683529290522054610617908490611bbb565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600360209081526040808320948c168352939052919091209190915561065b908585610e32565b61069f878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f0b92505050565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156107c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae9190611b6f565b73ffffffffffffffffffffffffffffffffffffffff16145b610878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610479565b823414610907576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610479565b3073ffffffffffffffffffffffffffffffffffffffff8516036109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610479565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610479565b610ac985858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f9392505050565b6000610ae6855a8660405180602001604052806000815250611000565b905080610b75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610479565b505050505050565b6000610b898383610d12565b90505b92915050565b61069f87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061101a92505050565b6000610b8c82610cb6565b333b15610c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610479565b610b7586863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061101a92505050565b6000610ce2827f1d1d8b6300000000000000000000000000000000000000000000000000000000611364565b80610b8c5750610b8c827fec4fc8e300000000000000000000000000000000000000000000000000000000611364565b6000610d3e837f1d1d8b6300000000000000000000000000000000000000000000000000000000611364565b15610de7578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db29190611b6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050610b8c565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610f069084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611380565b505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051610f8393929190611c48565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051610ff2929190611c86565b60405180910390a350505050565b600080600080845160208601878a8af19695505050505050565b61102387610cb6565b15611171576110328787610d12565b6110e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610479565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561115457600080fd5b505af1158015611168573d6000803e3d6000fd5b50505050611205565b61119373ffffffffffffffffffffffffffffffffffffffff881686308661148c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a16835292905220546111d1908490611c9f565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600360209081526040808320938b16835292905220555b6112138787878787866114f0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30060007f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b8a8c8b8b8b8a60405160240161129596959493929190611cb7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526113299392918890600401611d12565b600060405180830381600087803b15801561134357600080fd5b505af1158015611357573d6000803e3d6000fd5b5050505050505050505050565b600061136f83611568565b8015610b895750610b8983836115cc565b60006113e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661169b9092919063ffffffff16565b805190915015610f0657808060200190518101906114009190611d5e565b610f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610479565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526114ea9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610e84565b50505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051610f8393929190611c48565b6000611594827f01ffc9a7000000000000000000000000000000000000000000000000000000006115cc565b8015610b8c57506115c5827fffffffff000000000000000000000000000000000000000000000000000000006115cc565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015611684575060208210155b80156116905750600081115b979650505050505050565b60606116aa84846000856116b4565b90505b9392505050565b606082471015611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610479565b73ffffffffffffffffffffffffffffffffffffffff85163b6117c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610479565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117ed9190611d80565b60006040518083038185875af1925050503d806000811461182a576040519150601f19603f3d011682016040523d82523d6000602084013e61182f565b606091505b5091509150611690828286606083156118495750816116ad565b8251156118595782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104799190611d9c565b73ffffffffffffffffffffffffffffffffffffffff811681146118af57600080fd5b50565b60008083601f8401126118c457600080fd5b50813567ffffffffffffffff8111156118dc57600080fd5b6020830191508360208285010111156118f457600080fd5b9250929050565b600080600080600080600060c0888a03121561191657600080fd5b87356119218161188d565b965060208801356119318161188d565b955060408801356119418161188d565b945060608801356119518161188d565b93506080880135925060a088013567ffffffffffffffff81111561197457600080fd5b6119808a828b016118b2565b989b979a50959850939692959293505050565b6000806000806000608086880312156119ab57600080fd5b85356119b68161188d565b945060208601356119c68161188d565b935060408601359250606086013567ffffffffffffffff8111156119e957600080fd5b6119f5888289016118b2565b969995985093965092949392505050565b60008060408385031215611a1957600080fd5b8235611a248161188d565b91506020830135611a348161188d565b809150509250929050565b803563ffffffff81168114611a5357600080fd5b919050565b600080600080600080600060c0888a031215611a7357600080fd5b8735611a7e8161188d565b96506020880135611a8e8161188d565b95506040880135611a9e8161188d565b945060608801359350611ab360808901611a3f565b925060a088013567ffffffffffffffff81111561197457600080fd5b600060208284031215611ae157600080fd5b81356116ad8161188d565b60008060008060008060a08789031215611b0557600080fd5b8635611b108161188d565b95506020870135611b208161188d565b945060408701359350611b3560608801611a3f565b9250608087013567ffffffffffffffff811115611b5157600080fd5b611b5d89828a016118b2565b979a9699509497509295939492505050565b600060208284031215611b8157600080fd5b81516116ad8161188d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611bcd57611bcd611b8c565b500390565b60005b83811015611bed578181015183820152602001611bd5565b838111156114ea5750506000910152565b60008151808452611c16816020860160208601611bd2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000611c7d6060830184611bfe565b95945050505050565b8281526040602082015260006116aa6040830184611bfe565b60008219821115611cb257611cb2611b8c565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152611d0660c0830184611bfe565b98975050505050505050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152608060408201526000611d476080830185611bfe565b905063ffffffff8316606083015295945050505050565b600060208284031215611d7057600080fd5b815180151581146116ad57600080fd5b60008251611d92818460208701611bd2565b9190910192915050565b602081526000610b896020830184611bfe56fea164736f6c634300080f000a",
  "deployedBytecode": "0x6080604052600436106100c05760003560e01c80637438bde7116100745780638f601f661161004e5780638f601f661461021e578063927ede2d14610264578063f407a99e1461029857600080fd5b80637438bde7146101aa5780637f46ddb2146101ca57806387087623146101fe57600080fd5b806339f79774116100a557806339f79774146101015780633cb747bf14610136578063540abf731461018a57600080fd5b80630166a07a146100cc5780631635f5fd146100ee57600080fd5b366100c757005b600080fd5b3480156100d857600080fd5b506100ec6100e73660046118fb565b6102ad565b005b6100ec6100fc366004611993565b6106a8565b34801561010d57600080fd5b5061012161011c366004611a06565b610b7d565b60405190151581526020015b60405180910390f35b34801561014257600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012d565b34801561019657600080fd5b506100ec6101a5366004611a58565b610b92565b3480156101b657600080fd5b506101216101c5366004611acf565b610bd7565b3480156101d657600080fd5b506101657f000000000000000000000000000000000000000000000000000000000000000081565b34801561020a57600080fd5b506100ec610219366004611aec565b610be2565b34801561022a57600080fd5b50610256610239366004611a06565b600360209081526000928352604080842090915290825290205481565b60405190815260200161012d565b34801561027057600080fd5b506101657f000000000000000000000000000000000000000000000000000000000000000081565b6100ec6102a6366004611993565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103cb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b39190611b6f565b73ffffffffffffffffffffffffffffffffffffffff16145b610482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b61048b87610cb6565b156105d95761049a8787610d12565b61054c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610479565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156105bc57600080fd5b505af11580156105d0573d6000803e3d6000fd5b5050505061065b565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a1683529290522054610617908490611bbb565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600360209081526040808320948c168352939052919091209190915561065b908585610e32565b61069f878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f0b92505050565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156107c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae9190611b6f565b73ffffffffffffffffffffffffffffffffffffffff16145b610878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610479565b823414610907576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610479565b3073ffffffffffffffffffffffffffffffffffffffff8516036109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610479565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610479565b610ac985858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f9392505050565b6000610ae6855a8660405180602001604052806000815250611000565b905080610b75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610479565b505050505050565b6000610b898383610d12565b90505b92915050565b61069f87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061101a92505050565b6000610b8c82610cb6565b333b15610c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610479565b610b7586863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061101a92505050565b6000610ce2827f1d1d8b6300000000000000000000000000000000000000000000000000000000611364565b80610b8c5750610b8c827fec4fc8e300000000000000000000000000000000000000000000000000000000611364565b6000610d3e837f1d1d8b6300000000000000000000000000000000000000000000000000000000611364565b15610de7578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db29190611b6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050610b8c565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610f069084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611380565b505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051610f8393929190611c48565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051610ff2929190611c86565b60405180910390a350505050565b600080600080845160208601878a8af19695505050505050565b61102387610cb6565b15611171576110328787610d12565b6110e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610479565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561115457600080fd5b505af1158015611168573d6000803e3d6000fd5b50505050611205565b61119373ffffffffffffffffffffffffffffffffffffffff881686308661148c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a16835292905220546111d1908490611c9f565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600360209081526040808320938b16835292905220555b6112138787878787866114f0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30060007f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b8a8c8b8b8b8a60405160240161129596959493929190611cb7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526113299392918890600401611d12565b600060405180830381600087803b15801561134357600080fd5b505af1158015611357573d6000803e3d6000fd5b5050505050505050505050565b600061136f83611568565b8015610b895750610b8983836115cc565b60006113e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661169b9092919063ffffffff16565b805190915015610f0657808060200190518101906114009190611d5e565b610f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610479565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526114ea9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610e84565b50505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051610f8393929190611c48565b6000611594827f01ffc9a7000000000000000000000000000000000000000000000000000000006115cc565b8015610b8c57506115c5827fffffffff000000000000000000000000000000000000000000000000000000006115cc565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015611684575060208210155b80156116905750600081115b979650505050505050565b60606116aa84846000856116b4565b90505b9392505050565b606082471015611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610479565b73ffffffffffffffffffffffffffffffffffffffff85163b6117c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610479565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117ed9190611d80565b60006040518083038185875af1925050503d806000811461182a576040519150601f19603f3d011682016040523d82523d6000602084013e61182f565b606091505b5091509150611690828286606083156118495750816116ad565b8251156118595782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104799190611d9c565b73ffffffffffffffffffffffffffffffffffffffff811681146118af57600080fd5b50565b60008083601f8401126118c457600080fd5b50813567ffffffffffffffff8111156118dc57600080fd5b6020830191508360208285010111156118f457600080fd5b9250929050565b600080600080600080600060c0888a03121561191657600080fd5b87356119218161188d565b965060208801356119318161188d565b955060408801356119418161188d565b945060608801356119518161188d565b93506080880135925060a088013567ffffffffffffffff81111561197457600080fd5b6119808a828b016118b2565b989b979a50959850939692959293505050565b6000806000806000608086880312156119ab57600080fd5b85356119b68161188d565b945060208601356119c68161188d565b935060408601359250606086013567ffffffffffffffff8111156119e957600080fd5b6119f5888289016118b2565b969995985093965092949392505050565b60008060408385031215611a1957600080fd5b8235611a248161188d565b91506020830135611a348161188d565b809150509250929050565b803563ffffffff81168114611a5357600080fd5b919050565b600080600080600080600060c0888a031215611a7357600080fd5b8735611a7e8161188d565b96506020880135611a8e8161188d565b95506040880135611a9e8161188d565b945060608801359350611ab360808901611a3f565b925060a088013567ffffffffffffffff81111561197457600080fd5b600060208284031215611ae157600080fd5b81356116ad8161188d565b60008060008060008060a08789031215611b0557600080fd5b8635611b108161188d565b95506020870135611b208161188d565b945060408701359350611b3560608801611a3f565b9250608087013567ffffffffffffffff811115611b5157600080fd5b611b5d89828a016118b2565b979a9699509497509295939492505050565b600060208284031215611b8157600080fd5b81516116ad8161188d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611bcd57611bcd611b8c565b500390565b60005b83811015611bed578181015183820152602001611bd5565b838111156114ea5750506000910152565b60008151808452611c16816020860160208601611bd2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000611c7d6060830184611bfe565b95945050505050565b8281526040602082015260006116aa6040830184611bfe565b60008219821115611cb257611cb2611b8c565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152611d0660c0830184611bfe565b98975050505050505050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152608060408201526000611d476080830185611bfe565b905063ffffffff8316606083015295945050505050565b600060208284031215611d7057600080fd5b815180151581146116ad57600080fd5b60008251611d92818460208701611bd2565b9190910192915050565b602081526000610b896020830184611bfe56fea164736f6c634300080f000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
