{
    "schemaVersion": "2.0.0",
    "contractName": "TestERC20Bridge",
    "compilerOutput": {
        "abi": [
            {
                "inputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "constructor"
            },
            {
                "anonymous": false,
                "inputs": [
                    {
                        "indexed": false,
                        "internalType": "address",
                        "name": "tokenAddress",
                        "type": "address"
                    },
                    {
                        "indexed": false,
                        "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": "bridgeData",
                        "type": "bytes"
                    }
                ],
                "name": "BridgeWithdrawTo",
                "type": "event"
            },
            {
                "anonymous": false,
                "inputs": [
                    {
                        "indexed": false,
                        "internalType": "address",
                        "name": "inputToken",
                        "type": "address"
                    },
                    {
                        "indexed": false,
                        "internalType": "address",
                        "name": "outputToken",
                        "type": "address"
                    },
                    {
                        "indexed": false,
                        "internalType": "uint256",
                        "name": "inputTokenAmount",
                        "type": "uint256"
                    },
                    {
                        "indexed": false,
                        "internalType": "uint256",
                        "name": "outputTokenAmount",
                        "type": "uint256"
                    },
                    {
                        "indexed": false,
                        "internalType": "address",
                        "name": "from",
                        "type": "address"
                    },
                    {
                        "indexed": false,
                        "internalType": "address",
                        "name": "to",
                        "type": "address"
                    }
                ],
                "name": "ERC20BridgeTransfer",
                "type": "event"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "internalType": "address",
                        "name": "tokenAddress",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "from",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "to",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bytes",
                        "name": "bridgeData",
                        "type": "bytes"
                    }
                ],
                "name": "bridgeTransferFrom",
                "outputs": [
                    {
                        "internalType": "bytes4",
                        "name": "",
                        "type": "bytes4"
                    }
                ],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "internalType": "address",
                        "name": "owner",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "balance",
                        "type": "uint256"
                    }
                ],
                "name": "setTestTokenBalance",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "testToken",
                "outputs": [
                    {
                        "internalType": "contract TestERC20BridgeToken",
                        "name": "",
                        "type": "address"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            }
        ],
        "devdoc": {
            "details": "Test bridge contract.",
            "methods": {}
        },
        "evm": {
            "bytecode": {
                "linkReferences": {},
                "object": "0x608060405234801561001057600080fd5b5060405161001d9061005f565b604051809103906000f080158015610039573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b039290921691909117905561006c565b6101f4806105f783390190565b61057c8061007b6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80636895179d14610046578063c2df82e614610064578063f00f7f3c14610084575b600080fd5b61004e610099565b60405161005b9190610518565b60405180910390f35b610077610072366004610302565b6100b5565b60405161005b91906104eb565b6100976100923660046103ac565b6101ae565b005b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60007fe582f09d0025aaaa7e39a07c8e91adca9693044506741961ac06eb37ea7080b18787878787876040516100f096959493929190610440565b60405180910390a16000606080610109858701876103d6565b925092509250815160001461012057815160208301fd5b6040517f342dff5a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b169063342dff5a90610174908b9087906004016104c5565b600060405180830381600087803b15801561018e57600080fd5b505af11580156101a2573d6000803e3d6000fd5b50505050805160208201f35b6000546040517fe30443bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e30443bc9061020690859085906004016104c5565b600060405180830381600087803b15801561022057600080fd5b505af1158015610234573d6000803e3d6000fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461026057600080fd5b92915050565b600082601f830112610276578081fd5b813567ffffffffffffffff8082111561028d578283fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011682010181811083821117156102cb578485fd5b6040528281529250828483016020018610156102e657600080fd5b8260208601602083013760006020848301015250505092915050565b60008060008060008060a0878903121561031a578182fd5b610324888861023c565b9550610333886020890161023c565b9450610342886040890161023c565b935060608701359250608087013567ffffffffffffffff80821115610365578384fd5b8189018a601f820112610376578485fd5b8035925081831115610386578485fd5b8a6020848301011115610397578485fd5b979a9699509497509295602001949293505050565b600080604083850312156103be578182fd5b6103c8848461023c565b946020939093013593505050565b6000806000606084860312156103ea578283fd5b83359250602084013567ffffffffffffffff80821115610408578384fd5b61041487838801610266565b93506040860135915080821115610429578283fd5b5061043686828701610266565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff8089168352808816602084015280871660408401525084606083015260a060808301528260a0830152828460c084013781830160c090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010195945050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9190911681526020019056fea365627a7a723158200cf0ed85032cf250dd5d01a11743cf676b4306a1a05e6a1b008a4e160328eaa86c6578706572696d656e74616cf564736f6c63430005110040608060405234801561001057600080fd5b506101d4806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063342dff5a1461004657806370a082311461005b578063e30443bc14610084575b600080fd5b61005961005436600461014c565b610097565b005b61006e61006936600461012a565b6100af565b60405161007b9190610188565b60405180910390f35b610059610092366004610176565b6100d7565b6100ab82826100a5856100af565b016100d7565b5050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260208190526040902055565b803573ffffffffffffffffffffffffffffffffffffffff8116811461012457600080fd5b92915050565b60006020828403121561013b578081fd5b6101458383610100565b9392505050565b6000806040838503121561015e578081fd5b6101688484610100565b946020939093013593505050565b6000806040838503121561015e578182fd5b9081526020019056fea365627a7a723158200fbd0b00859ecd9d755e8e8febb35a9ad28504db97151b9c27f6d6a67cfe626a6c6578706572696d656e74616cf564736f6c63430005110040",
                "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1D SWAP1 PUSH2 0x5F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x39 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x6C JUMP JUMPDEST PUSH2 0x1F4 DUP1 PUSH2 0x5F7 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x57C DUP1 PUSH2 0x7B PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6895179D EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xC2DF82E6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0xF00F7F3C EQ PUSH2 0x84 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x518 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0x302 JUMP JUMPDEST PUSH2 0xB5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x4EB JUMP JUMPDEST PUSH2 0x97 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x3AC JUMP JUMPDEST PUSH2 0x1AE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xE582F09D0025AAAA7E39A07C8E91ADCA9693044506741961AC06EB37EA7080B1 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD PUSH2 0xF0 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x109 DUP6 DUP8 ADD DUP8 PUSH2 0x3D6 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP2 MLOAD PUSH1 0x0 EQ PUSH2 0x120 JUMPI DUP2 MLOAD PUSH1 0x20 DUP4 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x342DFF5A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x342DFF5A SWAP1 PUSH2 0x174 SWAP1 DUP12 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4C5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE30443BC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xE30443BC SWAP1 PUSH2 0x206 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4C5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x234 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x276 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x28D JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP6 ADD AND DUP3 ADD ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x2CB JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE SWAP3 POP DUP3 DUP5 DUP4 ADD PUSH1 0x20 ADD DUP7 LT ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x31A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x324 DUP9 DUP9 PUSH2 0x23C JUMP JUMPDEST SWAP6 POP PUSH2 0x333 DUP9 PUSH1 0x20 DUP10 ADD PUSH2 0x23C JUMP JUMPDEST SWAP5 POP PUSH2 0x342 DUP9 PUSH1 0x40 DUP10 ADD PUSH2 0x23C JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x365 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP10 ADD DUP11 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x376 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x386 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP11 PUSH1 0x20 DUP5 DUP4 ADD ADD GT ISZERO PUSH2 0x397 JUMPI DUP5 DUP6 REVERT JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x20 ADD SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3BE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x3C8 DUP5 DUP5 PUSH2 0x23C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3EA JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x408 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x414 DUP8 DUP4 DUP9 ADD PUSH2 0x266 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x429 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x436 DUP7 DUP3 DUP8 ADD PUSH2 0x266 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND DUP4 MSTORE DUP1 DUP9 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP8 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP5 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE DUP3 PUSH1 0xA0 DUP4 ADD MSTORE DUP3 DUP5 PUSH1 0xC0 DUP5 ADD CALLDATACOPY DUP2 DUP4 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 0xC CREATE 0xED DUP6 SUB 0x2C CALLCODE POP 0xDD 0x5D ADD LOG1 OR NUMBER 0xCF PUSH8 0x6B4306A1A05E6A1B STOP DUP11 0x4E AND SUB 0x28 0xEA 0xA8 PUSH13 0x6578706572696D656E74616CF5 PUSH5 0x736F6C6343 STOP SDIV GT STOP BLOCKHASH PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D4 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x342DFF5A EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xE30443BC EQ PUSH2 0x84 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x14C JUMP JUMPDEST PUSH2 0x97 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x6E PUSH2 0x69 CALLDATASIZE PUSH1 0x4 PUSH2 0x12A JUMP JUMPDEST PUSH2 0xAF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7B SWAP2 SWAP1 PUSH2 0x188 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x59 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x176 JUMP JUMPDEST PUSH2 0xD7 JUMP JUMPDEST PUSH2 0xAB DUP3 DUP3 PUSH2 0xA5 DUP6 PUSH2 0xAF JUMP JUMPDEST ADD PUSH2 0xD7 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13B JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x145 DUP4 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x15E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x168 DUP5 DUP5 PUSH2 0x100 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x15E JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 0xF 0xBD SIGNEXTEND STOP DUP6 SWAP15 0xCD SWAP14 PUSH22 0x5E8E8FEBB35A9AD28504DB97151B9C27F6D6A67CFE62 PUSH11 0x6C6578706572696D656E74 PUSH2 0x6CF5 PUSH5 0x736F6C6343 STOP SDIV GT STOP BLOCKHASH ",
                "sourceMap": "1245:1451:53:-;;;1497:76;8:9:-1;5:2;;;30:1;27;20:12;5:2;1497:76:53;1540:26;;;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1528:9:53;:38;;-1:-1:-1;;;;;;1528:38:53;-1:-1:-1;;;;;1528:38:53;;;;;;;;;;1245:1451;;;;;;;;;;:::o;:::-;;;;;;;"
            },
            "deployedBytecode": {
                "linkReferences": {},
                "object": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80636895179d14610046578063c2df82e614610064578063f00f7f3c14610084575b600080fd5b61004e610099565b60405161005b9190610518565b60405180910390f35b610077610072366004610302565b6100b5565b60405161005b91906104eb565b6100976100923660046103ac565b6101ae565b005b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60007fe582f09d0025aaaa7e39a07c8e91adca9693044506741961ac06eb37ea7080b18787878787876040516100f096959493929190610440565b60405180910390a16000606080610109858701876103d6565b925092509250815160001461012057815160208301fd5b6040517f342dff5a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b169063342dff5a90610174908b9087906004016104c5565b600060405180830381600087803b15801561018e57600080fd5b505af11580156101a2573d6000803e3d6000fd5b50505050805160208201f35b6000546040517fe30443bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e30443bc9061020690859085906004016104c5565b600060405180830381600087803b15801561022057600080fd5b505af1158015610234573d6000803e3d6000fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461026057600080fd5b92915050565b600082601f830112610276578081fd5b813567ffffffffffffffff8082111561028d578283fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011682010181811083821117156102cb578485fd5b6040528281529250828483016020018610156102e657600080fd5b8260208601602083013760006020848301015250505092915050565b60008060008060008060a0878903121561031a578182fd5b610324888861023c565b9550610333886020890161023c565b9450610342886040890161023c565b935060608701359250608087013567ffffffffffffffff80821115610365578384fd5b8189018a601f820112610376578485fd5b8035925081831115610386578485fd5b8a6020848301011115610397578485fd5b979a9699509497509295602001949293505050565b600080604083850312156103be578182fd5b6103c8848461023c565b946020939093013593505050565b6000806000606084860312156103ea578283fd5b83359250602084013567ffffffffffffffff80821115610408578384fd5b61041487838801610266565b93506040860135915080821115610429578283fd5b5061043686828701610266565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff8089168352808816602084015280871660408401525084606083015260a060808301528260a0830152828460c084013781830160c090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010195945050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9190911681526020019056fea365627a7a723158200cf0ed85032cf250dd5d01a11743cf676b4306a1a05e6a1b008a4e160328eaa86c6578706572696d656e74616cf564736f6c63430005110040",
                "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6895179D EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xC2DF82E6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0xF00F7F3C EQ PUSH2 0x84 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x518 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0x302 JUMP JUMPDEST PUSH2 0xB5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x4EB JUMP JUMPDEST PUSH2 0x97 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x3AC JUMP JUMPDEST PUSH2 0x1AE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xE582F09D0025AAAA7E39A07C8E91ADCA9693044506741961AC06EB37EA7080B1 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD PUSH2 0xF0 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x109 DUP6 DUP8 ADD DUP8 PUSH2 0x3D6 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP2 MLOAD PUSH1 0x0 EQ PUSH2 0x120 JUMPI DUP2 MLOAD PUSH1 0x20 DUP4 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x342DFF5A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x342DFF5A SWAP1 PUSH2 0x174 SWAP1 DUP12 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4C5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE30443BC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xE30443BC SWAP1 PUSH2 0x206 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4C5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x234 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x276 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x28D JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP6 ADD AND DUP3 ADD ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x2CB JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE SWAP3 POP DUP3 DUP5 DUP4 ADD PUSH1 0x20 ADD DUP7 LT ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x31A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x324 DUP9 DUP9 PUSH2 0x23C JUMP JUMPDEST SWAP6 POP PUSH2 0x333 DUP9 PUSH1 0x20 DUP10 ADD PUSH2 0x23C JUMP JUMPDEST SWAP5 POP PUSH2 0x342 DUP9 PUSH1 0x40 DUP10 ADD PUSH2 0x23C JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x365 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP10 ADD DUP11 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x376 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x386 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP11 PUSH1 0x20 DUP5 DUP4 ADD ADD GT ISZERO PUSH2 0x397 JUMPI DUP5 DUP6 REVERT JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x20 ADD SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3BE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x3C8 DUP5 DUP5 PUSH2 0x23C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3EA JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x408 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x414 DUP8 DUP4 DUP9 ADD PUSH2 0x266 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x429 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x436 DUP7 DUP3 DUP8 ADD PUSH2 0x266 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND DUP4 MSTORE DUP1 DUP9 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP8 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP5 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE DUP3 PUSH1 0xA0 DUP4 ADD MSTORE DUP3 DUP5 PUSH1 0xC0 DUP5 ADD CALLDATACOPY DUP2 DUP4 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 0xC CREATE 0xED DUP6 SUB 0x2C CALLCODE POP 0xDD 0x5D ADD LOG1 OR NUMBER 0xCF PUSH8 0x6B4306A1A05E6A1B STOP DUP11 0x4E AND SUB 0x28 0xEA 0xA8 PUSH13 0x6578706572696D656E74616CF5 PUSH5 0x736F6C6343 STOP SDIV GT STOP BLOCKHASH ",
                "sourceMap": "1245:1451:53:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1245:1451:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1296:37;;;:::i;:::-;;;;;;;;;;;;;;;;1720:974;;;;;;;;;:::i;:::-;;;;;;;;1579:135;;;;;;;;;:::i;:::-;;1296:37;;;;;;:::o;1720:974::-;1919:6;1946:130;1976:12;2002:4;2020:2;2036:6;2056:10;;1946:130;;;;;;;;;;;;;;;;;;;;2134:21;2169:23;;2242:46;;;;2253:10;2242:46;;;2120:168;;;;;;2346:10;:17;2367:1;2346:22;2342:113;;2431:10;2425:17;2418:4;2406:10;2402:21;2395:48;2393:52;2520:65;;;;;:45;;;;;;:65;;2566:2;;2570:14;;2520:65;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2520:65:53;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2520:65:53;;;;2674:10;2668:17;2661:4;2649:10;2645:21;2638:48;1579:135;1671:9;;:36;;;;;:9;;;;;:20;;:36;;1692:5;;1699:7;;1671:36;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1671:36:53;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1671:36:53;;;;1579:135;;:::o;5:130:-1:-;72:20;;7221:42;7210:54;;8003:35;;7993:2;;8052:1;;8042:12;7993:2;57:78;;;;;501:432;;598:3;591:4;583:6;579:17;575:27;565:2;;-1:-1;;606:12;565:2;653:6;640:20;6465:18;;6457:6;6454:30;6451:2;;;-1:-1;;6487:12;6451:2;6125;6119:9;6628:4;6560:9;591:4;6545:6;6541:17;6537:33;6155:6;6151:17;;6262:6;6250:10;6247:22;6465:18;6214:10;6211:34;6208:62;6205:2;;;-1:-1;;6273:12;6205:2;6125;6292:22;741:21;;;666:69;-1:-1;666:69;841:16;;;6628:4;841:16;838:25;-1:-1;835:2;;;876:1;;866:12;835:2;7767:6;6628:4;783:6;779:17;6628:4;817:5;813:16;7744:30;7823:1;6628:4;7814:6;817:5;7805:16;;7798:27;;;;558:375;;;;;1213:867;;;;;;;1404:3;1392:9;1383:7;1379:23;1375:33;1372:2;;;-1:-1;;1411:12;1372:2;1473:53;1518:7;1494:22;1473:53;;;1463:63;;1581:53;1626:7;1563:2;1606:9;1602:22;1581:53;;;1571:63;;1689:53;1734:7;1671:2;1714:9;1710:22;1689:53;;;1679:63;;1779:2;1822:9;1818:22;1143:20;1787:63;;1915:3;1904:9;1900:19;1887:33;1940:18;;1932:6;1929:30;1926:2;;;-1:-1;;1962:12;1926:2;2047:6;2036:9;2032:22;270:3;263:4;255:6;251:17;247:27;237:2;;-1:-1;;278:12;237:2;321:6;308:20;298:30;;1940:18;340:6;337:30;334:2;;;-1:-1;;370:12;334:2;465:3;1563:2;445:17;406:6;431:32;;428:41;425:2;;;-1:-1;;472:12;425:2;1366:714;;;;-1:-1;1366:714;;-1:-1;1366:714;;1563:2;402:17;;1990:74;;-1:-1;;;1366:714;2087:366;;;2208:2;2196:9;2187:7;2183:23;2179:32;2176:2;;;-1:-1;;2214:12;2176:2;2276:53;2321:7;2297:22;2276:53;;;2266:63;2366:2;2405:22;;;;1143:20;;-1:-1;;;2170:283;2460:681;;;;2607:2;2595:9;2586:7;2582:23;2578:32;2575:2;;;-1:-1;;2613:12;2575:2;1020:6;1007:20;2665:62;;2792:2;2781:9;2777:18;2764:32;2816:18;;2808:6;2805:30;2802:2;;;-1:-1;;2838:12;2802:2;2868:58;2918:7;2909:6;2898:9;2894:22;2868:58;;;2858:68;;2991:2;2980:9;2976:18;2963:32;2949:46;;2816:18;3007:6;3004:30;3001:2;;;-1:-1;;3037:12;3001:2;;3067:58;3117:7;3108:6;3097:9;3093:22;3067:58;;;3057:68;;;2569:572;;;;;;4141:763;;7221:42;;6901:5;7210:54;3226:3;3219:37;7221:42;6901:5;7210:54;4564:2;4553:9;4549:18;3219:37;7221:42;6901:5;7210:54;4647:2;4636:9;4632:18;3219:37;;4002:5;4730:2;4719:9;4715:18;3973:36;4399:3;4767;4756:9;4752:19;4745:49;6765:6;4399:3;4388:9;4384:19;6753;7767:6;7762:3;6793:14;4388:9;6793:14;7744:30;7805:16;;;6793:14;7805:16;;;7798:27;;;;7927:2;7907:14;;;7923:7;7903:28;3660:39;;;4370:534;-1:-1;;;;;4370:534;4911:320;7221:42;7210:54;;;;3219:37;;5217:2;5202:18;;3973:36;5055:2;5040:18;;5026:205;5569:209;6991:66;6980:78;;;;3337:36;;5685:2;5670:18;;5656:122;5785:271;7221:42;7210:54;;;;3813:79;;5932:2;5917:18;;5903:153"
            }
        }
    },
    "sourceTreeHashHex": "0xaa8c17cc787a0d347ba5bc464d0bdf47d1eff30744e90363e4eca5b8f0702e2c",
    "sources": {
        "./TestERC20Bridge.sol": {
            "id": 53,
            "content": "/*\n\n  Copyright 2019 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\npragma experimental ABIEncoderV2;\n\nimport \"../src/interfaces/IERC20Bridge.sol\";\n\n\n/// @dev Test bridge token\ncontract TestERC20BridgeToken {\n    mapping (address => uint256) private _balances;\n\n    function addBalance(address owner, int256 amount)\n        external\n    {\n        setBalance(owner, uint256(int256(balanceOf(owner)) + amount));\n    }\n\n    function setBalance(address owner, uint256 balance)\n        public\n    {\n        _balances[owner] = balance;\n    }\n\n    function balanceOf(address owner)\n        public\n        view\n        returns (uint256)\n    {\n        return _balances[owner];\n    }\n}\n\n\n/// @dev Test bridge contract.\ncontract TestERC20Bridge is\n    IERC20Bridge\n{\n    TestERC20BridgeToken public testToken;\n\n    event BridgeWithdrawTo(\n        address tokenAddress,\n        address from,\n        address to,\n        uint256 amount,\n        bytes bridgeData\n    );\n\n    constructor() public {\n        testToken = new TestERC20BridgeToken();\n    }\n\n    function setTestTokenBalance(address owner, uint256 balance)\n        external\n    {\n        testToken.setBalance(owner, balance);\n    }\n\n    function bridgeTransferFrom(\n        address tokenAddress,\n        address from,\n        address to,\n        uint256 amount,\n        bytes calldata bridgeData\n    )\n        external\n        returns (bytes4)\n    {\n        emit BridgeWithdrawTo(\n            tokenAddress,\n            from,\n            to,\n            amount,\n            bridgeData\n        );\n        // Unpack the bridgeData.\n        (\n            int256 transferAmount,\n            bytes memory revertData,\n            bytes memory returnData\n        ) = abi.decode(bridgeData, (int256, bytes, bytes));\n\n        // If `revertData` is set, revert.\n        if (revertData.length != 0) {\n            assembly { revert(add(revertData, 0x20), mload(revertData)) }\n        }\n        // Increase `to`'s balance by `transferAmount`.\n        TestERC20BridgeToken(tokenAddress).addBalance(to, transferAmount);\n        // Return `returnData`.\n        assembly { return(add(returnData, 0x20), mload(returnData)) }\n    }\n}\n"
        },
        "../src/interfaces/IERC20Bridge.sol": {
            "id": 39,
            "content": "/*\n\n  Copyright 2019 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\n\ncontract IERC20Bridge {\n\n    /// @dev Result of a successful bridge call.\n    bytes4 constant internal BRIDGE_SUCCESS = 0xdc1600f3;\n\n    /// @dev Emitted when a trade occurs.\n    /// @param inputToken The token the bridge is converting from.\n    /// @param outputToken The token the bridge is converting to.\n    /// @param inputTokenAmount Amount of input token.\n    /// @param outputTokenAmount Amount of output token.\n    /// @param from The `from` address in `bridgeTransferFrom()`\n    /// @param to The `to` address in `bridgeTransferFrom()`\n    event ERC20BridgeTransfer(\n        address inputToken,\n        address outputToken,\n        uint256 inputTokenAmount,\n        uint256 outputTokenAmount,\n        address from,\n        address to\n    );\n\n    /// @dev Transfers `amount` of the ERC20 `tokenAddress` from `from` to `to`.\n    /// @param tokenAddress The address of the ERC20 token to transfer.\n    /// @param from Address to transfer asset from.\n    /// @param to Address to transfer asset to.\n    /// @param amount Amount of asset to transfer.\n    /// @param bridgeData Arbitrary asset data needed by the bridge contract.\n    /// @return success The magic bytes `0xdc1600f3` if successful.\n    function bridgeTransferFrom(\n        address tokenAddress,\n        address from,\n        address to,\n        uint256 amount,\n        bytes calldata bridgeData\n    )\n        external\n        returns (bytes4 success);\n}\n"
        }
    },
    "sourceCodes": {
        "./TestERC20Bridge.sol": "/*\n\n  Copyright 2019 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\npragma experimental ABIEncoderV2;\n\nimport \"../src/interfaces/IERC20Bridge.sol\";\n\n\n/// @dev Test bridge token\ncontract TestERC20BridgeToken {\n    mapping (address => uint256) private _balances;\n\n    function addBalance(address owner, int256 amount)\n        external\n    {\n        setBalance(owner, uint256(int256(balanceOf(owner)) + amount));\n    }\n\n    function setBalance(address owner, uint256 balance)\n        public\n    {\n        _balances[owner] = balance;\n    }\n\n    function balanceOf(address owner)\n        public\n        view\n        returns (uint256)\n    {\n        return _balances[owner];\n    }\n}\n\n\n/// @dev Test bridge contract.\ncontract TestERC20Bridge is\n    IERC20Bridge\n{\n    TestERC20BridgeToken public testToken;\n\n    event BridgeWithdrawTo(\n        address tokenAddress,\n        address from,\n        address to,\n        uint256 amount,\n        bytes bridgeData\n    );\n\n    constructor() public {\n        testToken = new TestERC20BridgeToken();\n    }\n\n    function setTestTokenBalance(address owner, uint256 balance)\n        external\n    {\n        testToken.setBalance(owner, balance);\n    }\n\n    function bridgeTransferFrom(\n        address tokenAddress,\n        address from,\n        address to,\n        uint256 amount,\n        bytes calldata bridgeData\n    )\n        external\n        returns (bytes4)\n    {\n        emit BridgeWithdrawTo(\n            tokenAddress,\n            from,\n            to,\n            amount,\n            bridgeData\n        );\n        // Unpack the bridgeData.\n        (\n            int256 transferAmount,\n            bytes memory revertData,\n            bytes memory returnData\n        ) = abi.decode(bridgeData, (int256, bytes, bytes));\n\n        // If `revertData` is set, revert.\n        if (revertData.length != 0) {\n            assembly { revert(add(revertData, 0x20), mload(revertData)) }\n        }\n        // Increase `to`'s balance by `transferAmount`.\n        TestERC20BridgeToken(tokenAddress).addBalance(to, transferAmount);\n        // Return `returnData`.\n        assembly { return(add(returnData, 0x20), mload(returnData)) }\n    }\n}\n",
        "../src/interfaces/IERC20Bridge.sol": "/*\n\n  Copyright 2019 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\n\ncontract IERC20Bridge {\n\n    /// @dev Result of a successful bridge call.\n    bytes4 constant internal BRIDGE_SUCCESS = 0xdc1600f3;\n\n    /// @dev Emitted when a trade occurs.\n    /// @param inputToken The token the bridge is converting from.\n    /// @param outputToken The token the bridge is converting to.\n    /// @param inputTokenAmount Amount of input token.\n    /// @param outputTokenAmount Amount of output token.\n    /// @param from The `from` address in `bridgeTransferFrom()`\n    /// @param to The `to` address in `bridgeTransferFrom()`\n    event ERC20BridgeTransfer(\n        address inputToken,\n        address outputToken,\n        uint256 inputTokenAmount,\n        uint256 outputTokenAmount,\n        address from,\n        address to\n    );\n\n    /// @dev Transfers `amount` of the ERC20 `tokenAddress` from `from` to `to`.\n    /// @param tokenAddress The address of the ERC20 token to transfer.\n    /// @param from Address to transfer asset from.\n    /// @param to Address to transfer asset to.\n    /// @param amount Amount of asset to transfer.\n    /// @param bridgeData Arbitrary asset data needed by the bridge contract.\n    /// @return success The magic bytes `0xdc1600f3` if successful.\n    function bridgeTransferFrom(\n        address tokenAddress,\n        address from,\n        address to,\n        uint256 amount,\n        bytes calldata bridgeData\n    )\n        external\n        returns (bytes4 success);\n}\n"
    },
    "compiler": {
        "name": "solc",
        "version": "0.5.17+commit.d19bba13",
        "settings": {
            "remappings": [
                "@0x/contracts-utils=/home/runner/work/protocol/protocol/contracts/asset-proxy/node_modules/@0x/contracts-utils",
                "@0x/contracts-erc1155=/home/runner/work/protocol/protocol/contracts/asset-proxy/node_modules/@0x/contracts-erc1155",
                "@0x/contracts-erc20=/home/runner/work/protocol/protocol/contracts/asset-proxy/node_modules/@0x/contracts-erc20",
                "@0x/contracts-exchange-libs=/home/runner/work/protocol/protocol/contracts/asset-proxy/node_modules/@0x/contracts-exchange-libs"
            ],
            "optimizer": {
                "enabled": true,
                "runs": 1000000,
                "details": {
                    "yul": true,
                    "deduplicate": true,
                    "cse": true,
                    "constantOptimizer": true
                }
            },
            "outputSelection": {
                "*": {
                    "*": [
                        "abi",
                        "devdoc",
                        "evm.bytecode.object",
                        "evm.bytecode.sourceMap",
                        "evm.deployedBytecode.object",
                        "evm.deployedBytecode.sourceMap"
                    ]
                }
            },
            "evmVersion": "istanbul"
        }
    },
    "chains": {}
}
