{
  "_format": "hh-sol-artifact-1",
  "contractName": "RelayerProxyHub",
  "sourceName": "contracts/core/connext/helpers/RelayerProxyHub.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_connext",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spokeConnector",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_gelatoRelayer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_feeCollector",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rootManager",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyOwner_notOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyProposed_notProposedOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_noProposal",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "updated",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        }
      ],
      "name": "ConnextChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "updated",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        }
      ],
      "name": "FeeCollectorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "name": "FundsDeducted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "name": "FundsReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "updated",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        }
      ],
      "name": "GelatoRelayerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "proposedOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipProposed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "RelayerAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "RelayerRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "rootManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldRootManager",
          "type": "address"
        }
      ],
      "name": "RootManagerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "updated",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        }
      ],
      "name": "SpokeConnectorChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptProposedOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_relayer",
          "type": "address"
        }
      ],
      "name": "addRelayer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowedRelayer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connext",
      "outputs": [
        {
          "internalType": "contract IConnext",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "originDomain",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "destinationDomain",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "canonicalDomain",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "delegate",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "receiveLocal",
                  "type": "bool"
                },
                {
                  "internalType": "bytes",
                  "name": "callData",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "slippage",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "originSender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "bridgedAmt",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "normalizedIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "canonicalId",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct TransferInfo",
              "name": "params",
              "type": "tuple"
            },
            {
              "internalType": "address[]",
              "name": "routers",
              "type": "address[]"
            },
            {
              "internalType": "bytes[]",
              "name": "routerSignatures",
              "type": "bytes[]"
            },
            {
              "internalType": "address",
              "name": "sequencer",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "sequencerSignature",
              "type": "bytes"
            }
          ],
          "internalType": "struct ExecuteArgs",
          "name": "_args",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "_fee",
          "type": "uint256"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "transferId",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeCollector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gelatoRelayer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_connectors",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_messageFees",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "_encodedData",
          "type": "bytes[]"
        },
        {
          "internalType": "uint256",
          "name": "_relayerFee",
          "type": "uint256"
        }
      ],
      "name": "propagate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newlyProposed",
          "type": "address"
        }
      ],
      "name": "proposeNewOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposed",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposedTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "message",
              "type": "bytes"
            },
            {
              "internalType": "bytes32[32]",
              "name": "path",
              "type": "bytes32[32]"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "internalType": "struct ISpokeConnector.Proof[]",
          "name": "_proofs",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes32",
          "name": "_aggregateRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[32]",
          "name": "_aggregatePath",
          "type": "bytes32[32]"
        },
        {
          "internalType": "uint256",
          "name": "_aggregateIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_fee",
          "type": "uint256"
        }
      ],
      "name": "proveAndProcess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_relayer",
          "type": "address"
        }
      ],
      "name": "removeRelayer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounced",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rootManager",
      "outputs": [
        {
          "internalType": "contract IRootManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_encodedData",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_messageFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_relayerFee",
          "type": "uint256"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_connext",
          "type": "address"
        }
      ],
      "name": "setConnext",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_feeCollector",
          "type": "address"
        }
      ],
      "name": "setFeeCollector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_gelatoRelayer",
          "type": "address"
        }
      ],
      "name": "setGelatoRelayer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_rootManager",
          "type": "address"
        }
      ],
      "name": "setRootManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_spokeConnector",
          "type": "address"
        }
      ],
      "name": "setSpokeConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "spokeConnector",
      "outputs": [
        {
          "internalType": "contract ISpokeConnector",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200217c3803806200217c8339810160408190526200003491620003de565b60016003558484848462000048336200009f565b620000538462000104565b6200005e836200016d565b6200006982620001d6565b62000074816200023f565b6200007f82620002a8565b5050505062000094816200035860201b60201c565b50505050506200044e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600654604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600754604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604090205460ff1615620002fe5760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b604482015260640160405180910390fd5b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c5910160405180910390a150565b600954604080516001600160a01b03808516825290921660208301527f3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487910160405180910390a1600980546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b0381168114620003d957600080fd5b919050565b600080600080600060a08688031215620003f757600080fd5b6200040286620003c1565b94506200041260208701620003c1565b93506200042260408701620003c1565b92506200043260608701620003c1565b91506200044260808701620003c1565b90509295509295909350565b611d1e806200045e6000396000f3fe6080604052600436106101855760003560e01c80639f645a03116100d1578063d232c2201161008a578063dd39f00d11610064578063dd39f00d14610497578063de4b0548146104b7578063e79457f1146104d7578063f0a67eba146104f757600080fd5b8063d232c22014610438578063d9ef0bee14610457578063db2056351461047757600080fd5b80639f645a0314610385578063a42dce80146103a5578063b1f8100d146103c5578063c415b95c146103e5578063c5b350df14610405578063d1851c921461041a57600080fd5b80636a42b8f81161013e5780638da5cb5b116101185780638da5cb5b146103075780638efed127146103255780639a2652db146103455780639cadce001461036557600080fd5b80636a42b8f8146102a45780636eba787f146102ba578063715018a6146102f257600080fd5b80632f55b98d146101c95780633ccfd60b1461020e5780633cf52ffb146102255780634d6f2013146102445780635e21966a1461026457806360f0a5ac1461028457600080fd5b366101c457604080513481524760208201527f063d07ee72a7483b8e07ca09054bb686775c5c030f945dde3823a5257a0a93eb910160405180910390a1005b600080fd5b3480156101d557600080fd5b506101f96101e4366004611359565b60086020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561021a57600080fd5b50610223610517565b005b34801561023157600080fd5b506002545b604051908152602001610205565b34801561025057600080fd5b5061022361025f366004611359565b610588565b34801561027057600080fd5b5061022361027f366004611359565b6105f0565b34801561029057600080fd5b5061022361029f366004611359565b61064b565b3480156102b057600080fd5b5062093a80610236565b3480156102c657600080fd5b506004546102da906001600160a01b031681565b6040516001600160a01b039091168152602001610205565b3480156102fe57600080fd5b506102236106a6565b34801561031357600080fd5b506000546001600160a01b03166102da565b34801561033157600080fd5b5061023661034036600461137b565b610758565b34801561035157600080fd5b506102236103603660046114c8565b61081d565b34801561037157600080fd5b506007546102da906001600160a01b031681565b34801561039157600080fd5b506102236103a0366004611359565b610952565b3480156103b157600080fd5b506102236103c0366004611359565b6109ad565b3480156103d157600080fd5b506102236103e0366004611359565b610a08565b3480156103f157600080fd5b506005546102da906001600160a01b031681565b34801561041157600080fd5b50610223610aa9565b34801561042657600080fd5b506001546001600160a01b03166102da565b34801561044457600080fd5b506000546001600160a01b0316156101f9565b34801561046357600080fd5b506102236104723660046115e2565b610b19565b34801561048357600080fd5b506009546102da906001600160a01b031681565b3480156104a357600080fd5b506102236104b2366004611359565b610bf9565b3480156104c357600080fd5b506006546102da906001600160a01b031681565b3480156104e357600080fd5b506102236104f2366004611630565b610c54565b34801561050357600080fd5b50610223610512366004611359565b610d08565b6000546001600160a01b03163314610542576040516311a8a1bb60e31b815260040160405180910390fd5b61054a610d63565b476105553382610dbc565b60408051828152476020820152600080516020611cc9833981519152910160405180910390a1506105866001600355565b565b6000546001600160a01b031633146105b3576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166105e35760405162461bcd60e51b81526004016105da906116a8565b60405180910390fd5b6105ec82610ed5565b5050565b6000546001600160a01b0316331461061b576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166106425760405162461bcd60e51b81526004016105da906116a8565b6105ec82610f3e565b6000546001600160a01b03163314610676576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661069d5760405162461bcd60e51b81526004016105da906116a8565b6105ec82610fa7565b6000546001600160a01b031633146106d1576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106e391906116dd565b11610701576040516324e0285f60e21b815260040160405180910390fd5b60025460000361072457604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b03161561074e576040516323295ef960e01b815260040160405180910390fd5b6105866000611050565b3360009081526008602052604081205460ff166107875760405162461bcd60e51b81526004016105da906116f0565b61078f610d63565b6006546040516331f1f3e960e11b81526001600160a01b03909116906363e3e7d2906107bf908690600401611892565b6020604051808303816000875af11580156107de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108029190611a85565b905061080d826110b5565b6108176001600355565b92915050565b3360009081526008602052604090205460ff1661084c5760405162461bcd60e51b81526004016105da906116f0565b610854610d63565b600085815b818163ffffffff16101561089b5786868263ffffffff1681811061087f5761087f611a9e565b90506020020135836108919190611ab4565b9250600101610859565b5060095460405163412e12db60e01b81526001600160a01b039091169063412e12db9084906108d6908c908c908c908c908c90600401611b55565b6000604051808303818588803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b505060408051868152476020820152600080516020611cc9833981519152945001915061092d9050565b60405180910390a161093e836110b5565b505061094a6001600355565b505050505050565b6000546001600160a01b0316331461097d576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166109a45760405162461bcd60e51b81526004016105da906116a8565b6105ec8261110f565b6000546001600160a01b031633146109d8576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166109ff5760405162461bcd60e51b81526004016105da906116a8565b6105ec82611178565b6000546001600160a01b03163314610a33576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610a51575060025415155b15610a6f576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b03808316911603610a9d57604051634a2fb73f60e11b815260040160405180910390fd5b610aa6816111e1565b50565b6001546001600160a01b03163314610ad4576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610ae691906116dd565b11610b04576040516324e0285f60e21b815260040160405180910390fd5b600154610586906001600160a01b0316611050565b3360009081526008602052604090205460ff16610b485760405162461bcd60e51b81526004016105da906116f0565b610b50610d63565b600754604051630aec6b9f60e21b81526001600160a01b0390911690632bb1ae7c908490610b82908790600401611be9565b6000604051808303818588803b158015610b9b57600080fd5b505af1158015610baf573d6000803e3d6000fd5b505060408051868152476020820152600080516020611cc98339815191529450019150610bd99050565b60405180910390a1610bea816110b5565b610bf46001600355565b505050565b6000546001600160a01b03163314610c24576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610c4b5760405162461bcd60e51b81526004016105da906116a8565b6105ec8261122f565b3360009081526008602052604090205460ff16610c835760405162461bcd60e51b81526004016105da906116f0565b610c8b610d63565b60075460405163508a109b60e01b81526001600160a01b039091169063508a109b90610cc39089908990899089908990600401611c06565b600060405180830381600087803b158015610cdd57600080fd5b505af1158015610cf1573d6000803e3d6000fd5b50505050610cfe816110b5565b61094a6001600355565b6000546001600160a01b03163314610d33576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610d5a5760405162461bcd60e51b81526004016105da906116a8565b6105ec826112d4565b600260035403610db55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105da565b6002600355565b80471015610e0c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016105da565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e59576040519150601f19603f3d011682016040523d82523d6000602084013e610e5e565b606091505b5050905080610bf45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016105da565b600654604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604090205460ff16610ff85760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b60448201526064016105da565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b91015b60405180910390a150565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6004546001600160a01b031633036110e2576005546110dd906001600160a01b031682610dbc565b6110ec565b6110ec3382610dbc565b60408051828152476020820152600080516020611cc98339815191529101611045565b600754604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6001600160a01b03811660009081526008602052604090205460ff16156112805760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b60448201526064016105da565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c59101611045565b600954604080516001600160a01b03808516825290921660208301527f3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487910160405180910390a1600980546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461135457600080fd5b919050565b60006020828403121561136b57600080fd5b6113748261133d565b9392505050565b6000806040838503121561138e57600080fd5b823567ffffffffffffffff8111156113a557600080fd5b830160a081860312156113b757600080fd5b946020939093013593505050565b60008083601f8401126113d757600080fd5b50813567ffffffffffffffff8111156113ef57600080fd5b6020830191508360208260051b850101111561140a57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561145057611450611411565b604052919050565b600082601f83011261146957600080fd5b813567ffffffffffffffff81111561148357611483611411565b611496601f8201601f1916602001611427565b8181528460208386010111156114ab57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080608087890312156114e157600080fd5b67ffffffffffffffff80883511156114f857600080fd5b6115058989358a016113c5565b90975095506020888101358281111561151d57600080fd5b6115298b828c016113c5565b90975095505060408901358281111561154157600080fd5b8901601f81018b1361155257600080fd5b80358381111561156457611564611411565b8060051b611573848201611427565b918252828101840191848101908e84111561158d57600080fd5b85850192505b838310156115c75786833511156115a957600080fd5b6115b88f878535880101611458565b82529185019190850190611593565b80985050505050505050606087013590509295509295509295565b6000806000606084860312156115f757600080fd5b833567ffffffffffffffff81111561160e57600080fd5b61161a86828701611458565b9660208601359650604090950135949350505050565b600080600080600080610480878903121561164a57600080fd5b863567ffffffffffffffff81111561166157600080fd5b61166d89828a016113c5565b9097509550506020870135935061044087018881111561168c57600080fd5b9598949750929560408101953594610460909101359350915050565b602080825260059082015264656d70747960d81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610817576108176116c7565b60208082526008908201526710b932b630bcb2b960c11b604082015260600190565b803563ffffffff8116811461135457600080fd5b8035801515811461135457600080fd5b6000808335601e1984360301811261174d57600080fd5b830160208101925035905067ffffffffffffffff81111561176d57600080fd5b80360382131561140a57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126117bc57600080fd5b830160208101925035905067ffffffffffffffff8111156117dc57600080fd5b8060051b360382131561140a57600080fd5b8183526000602080850194508260005b8581101561182a576001600160a01b036118178361133d565b16875295820195908201906001016117fe565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156118855782840389526118668288611736565b61187186828461177c565b9a87019a955050509084019060010161184f565b5091979650505050505050565b602081526000823561019e198436030181126118ad57600080fd5b60a0602084015283016118d060c084016118c683611712565b63ffffffff169052565b6118dc60208201611712565b63ffffffff1660e08401526118f360408201611712565b6101006119078186018363ffffffff169052565b6119136060840161133d565b915061012061192c818701846001600160a01b03169052565b6119386080850161133d565b9250610140611951818801856001600160a01b03169052565b61195d60a08601611726565b935061016061196f8189018615159052565b61197c60c0870187611736565b95506101a061018081818c01526119986102608c01898561177c565b975060e0890135828c01526119ae878a0161133d565b6001600160a01b03166101c08c0152948801356101e08b0152505090850135610200880152840135610220870152830135610240860152506119f360208601866117a5565b9250601f1980868403016040870152611a0d8385846117ee565b9350611a1c60408801886117a5565b9350915080868503016060870152611a35848484611835565b9350611a436060880161133d565b6001600160a01b03811660808801529250611a616080880188611736565b93509150808685030160a087015250611a7b83838361177c565b9695505050505050565b600060208284031215611a9757600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610817576108176116c7565b6000815180845260005b81811015611aed57602081850181015186830182015201611ad1565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611885578284038952611b43848351611ac7565b98850198935090840190600101611b2b565b6060808252810185905260008660808301825b88811015611b96576001600160a01b03611b818461133d565b16825260209283019290910190600101611b68565b5083810360208501528581526001600160fb1b03861115611bb657600080fd5b8560051b9150818760208301370182810360209081016040850152611bdd90820185611b0d565b98975050505050505050565b6020815260006113746020830184611ac7565b6104008183375050565b6104608082528101859052600061048080830190600588901b8401018883805b8a811015611c9c5786840361047f190185528235368d900361043e19018112611c4d578283fd5b8c01610440611c5c8280611736565b828852611c6c838901828461177c565b92505050602061040081840182890137610420928301359690920195909552948501949290920191600101611c26565b5050508092505050846020830152611cb76040830185611bfc565b82610440830152969550505050505056fe9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b18a264697066735822122014f71e96141f67772d3ba2104742e471ad55639e79fa6fd5cad0bc2b6637fd8c64736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106101855760003560e01c80639f645a03116100d1578063d232c2201161008a578063dd39f00d11610064578063dd39f00d14610497578063de4b0548146104b7578063e79457f1146104d7578063f0a67eba146104f757600080fd5b8063d232c22014610438578063d9ef0bee14610457578063db2056351461047757600080fd5b80639f645a0314610385578063a42dce80146103a5578063b1f8100d146103c5578063c415b95c146103e5578063c5b350df14610405578063d1851c921461041a57600080fd5b80636a42b8f81161013e5780638da5cb5b116101185780638da5cb5b146103075780638efed127146103255780639a2652db146103455780639cadce001461036557600080fd5b80636a42b8f8146102a45780636eba787f146102ba578063715018a6146102f257600080fd5b80632f55b98d146101c95780633ccfd60b1461020e5780633cf52ffb146102255780634d6f2013146102445780635e21966a1461026457806360f0a5ac1461028457600080fd5b366101c457604080513481524760208201527f063d07ee72a7483b8e07ca09054bb686775c5c030f945dde3823a5257a0a93eb910160405180910390a1005b600080fd5b3480156101d557600080fd5b506101f96101e4366004611359565b60086020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561021a57600080fd5b50610223610517565b005b34801561023157600080fd5b506002545b604051908152602001610205565b34801561025057600080fd5b5061022361025f366004611359565b610588565b34801561027057600080fd5b5061022361027f366004611359565b6105f0565b34801561029057600080fd5b5061022361029f366004611359565b61064b565b3480156102b057600080fd5b5062093a80610236565b3480156102c657600080fd5b506004546102da906001600160a01b031681565b6040516001600160a01b039091168152602001610205565b3480156102fe57600080fd5b506102236106a6565b34801561031357600080fd5b506000546001600160a01b03166102da565b34801561033157600080fd5b5061023661034036600461137b565b610758565b34801561035157600080fd5b506102236103603660046114c8565b61081d565b34801561037157600080fd5b506007546102da906001600160a01b031681565b34801561039157600080fd5b506102236103a0366004611359565b610952565b3480156103b157600080fd5b506102236103c0366004611359565b6109ad565b3480156103d157600080fd5b506102236103e0366004611359565b610a08565b3480156103f157600080fd5b506005546102da906001600160a01b031681565b34801561041157600080fd5b50610223610aa9565b34801561042657600080fd5b506001546001600160a01b03166102da565b34801561044457600080fd5b506000546001600160a01b0316156101f9565b34801561046357600080fd5b506102236104723660046115e2565b610b19565b34801561048357600080fd5b506009546102da906001600160a01b031681565b3480156104a357600080fd5b506102236104b2366004611359565b610bf9565b3480156104c357600080fd5b506006546102da906001600160a01b031681565b3480156104e357600080fd5b506102236104f2366004611630565b610c54565b34801561050357600080fd5b50610223610512366004611359565b610d08565b6000546001600160a01b03163314610542576040516311a8a1bb60e31b815260040160405180910390fd5b61054a610d63565b476105553382610dbc565b60408051828152476020820152600080516020611cc9833981519152910160405180910390a1506105866001600355565b565b6000546001600160a01b031633146105b3576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166105e35760405162461bcd60e51b81526004016105da906116a8565b60405180910390fd5b6105ec82610ed5565b5050565b6000546001600160a01b0316331461061b576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166106425760405162461bcd60e51b81526004016105da906116a8565b6105ec82610f3e565b6000546001600160a01b03163314610676576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661069d5760405162461bcd60e51b81526004016105da906116a8565b6105ec82610fa7565b6000546001600160a01b031633146106d1576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106e391906116dd565b11610701576040516324e0285f60e21b815260040160405180910390fd5b60025460000361072457604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b03161561074e576040516323295ef960e01b815260040160405180910390fd5b6105866000611050565b3360009081526008602052604081205460ff166107875760405162461bcd60e51b81526004016105da906116f0565b61078f610d63565b6006546040516331f1f3e960e11b81526001600160a01b03909116906363e3e7d2906107bf908690600401611892565b6020604051808303816000875af11580156107de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108029190611a85565b905061080d826110b5565b6108176001600355565b92915050565b3360009081526008602052604090205460ff1661084c5760405162461bcd60e51b81526004016105da906116f0565b610854610d63565b600085815b818163ffffffff16101561089b5786868263ffffffff1681811061087f5761087f611a9e565b90506020020135836108919190611ab4565b9250600101610859565b5060095460405163412e12db60e01b81526001600160a01b039091169063412e12db9084906108d6908c908c908c908c908c90600401611b55565b6000604051808303818588803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b505060408051868152476020820152600080516020611cc9833981519152945001915061092d9050565b60405180910390a161093e836110b5565b505061094a6001600355565b505050505050565b6000546001600160a01b0316331461097d576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166109a45760405162461bcd60e51b81526004016105da906116a8565b6105ec8261110f565b6000546001600160a01b031633146109d8576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166109ff5760405162461bcd60e51b81526004016105da906116a8565b6105ec82611178565b6000546001600160a01b03163314610a33576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610a51575060025415155b15610a6f576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b03808316911603610a9d57604051634a2fb73f60e11b815260040160405180910390fd5b610aa6816111e1565b50565b6001546001600160a01b03163314610ad4576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610ae691906116dd565b11610b04576040516324e0285f60e21b815260040160405180910390fd5b600154610586906001600160a01b0316611050565b3360009081526008602052604090205460ff16610b485760405162461bcd60e51b81526004016105da906116f0565b610b50610d63565b600754604051630aec6b9f60e21b81526001600160a01b0390911690632bb1ae7c908490610b82908790600401611be9565b6000604051808303818588803b158015610b9b57600080fd5b505af1158015610baf573d6000803e3d6000fd5b505060408051868152476020820152600080516020611cc98339815191529450019150610bd99050565b60405180910390a1610bea816110b5565b610bf46001600355565b505050565b6000546001600160a01b03163314610c24576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610c4b5760405162461bcd60e51b81526004016105da906116a8565b6105ec8261122f565b3360009081526008602052604090205460ff16610c835760405162461bcd60e51b81526004016105da906116f0565b610c8b610d63565b60075460405163508a109b60e01b81526001600160a01b039091169063508a109b90610cc39089908990899089908990600401611c06565b600060405180830381600087803b158015610cdd57600080fd5b505af1158015610cf1573d6000803e3d6000fd5b50505050610cfe816110b5565b61094a6001600355565b6000546001600160a01b03163314610d33576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610d5a5760405162461bcd60e51b81526004016105da906116a8565b6105ec826112d4565b600260035403610db55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105da565b6002600355565b80471015610e0c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016105da565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e59576040519150601f19603f3d011682016040523d82523d6000602084013e610e5e565b606091505b5050905080610bf45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016105da565b600654604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604090205460ff16610ff85760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b60448201526064016105da565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b91015b60405180910390a150565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6004546001600160a01b031633036110e2576005546110dd906001600160a01b031682610dbc565b6110ec565b6110ec3382610dbc565b60408051828152476020820152600080516020611cc98339815191529101611045565b600754604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6001600160a01b03811660009081526008602052604090205460ff16156112805760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b60448201526064016105da565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c59101611045565b600954604080516001600160a01b03808516825290921660208301527f3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487910160405180910390a1600980546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461135457600080fd5b919050565b60006020828403121561136b57600080fd5b6113748261133d565b9392505050565b6000806040838503121561138e57600080fd5b823567ffffffffffffffff8111156113a557600080fd5b830160a081860312156113b757600080fd5b946020939093013593505050565b60008083601f8401126113d757600080fd5b50813567ffffffffffffffff8111156113ef57600080fd5b6020830191508360208260051b850101111561140a57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561145057611450611411565b604052919050565b600082601f83011261146957600080fd5b813567ffffffffffffffff81111561148357611483611411565b611496601f8201601f1916602001611427565b8181528460208386010111156114ab57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080608087890312156114e157600080fd5b67ffffffffffffffff80883511156114f857600080fd5b6115058989358a016113c5565b90975095506020888101358281111561151d57600080fd5b6115298b828c016113c5565b90975095505060408901358281111561154157600080fd5b8901601f81018b1361155257600080fd5b80358381111561156457611564611411565b8060051b611573848201611427565b918252828101840191848101908e84111561158d57600080fd5b85850192505b838310156115c75786833511156115a957600080fd5b6115b88f878535880101611458565b82529185019190850190611593565b80985050505050505050606087013590509295509295509295565b6000806000606084860312156115f757600080fd5b833567ffffffffffffffff81111561160e57600080fd5b61161a86828701611458565b9660208601359650604090950135949350505050565b600080600080600080610480878903121561164a57600080fd5b863567ffffffffffffffff81111561166157600080fd5b61166d89828a016113c5565b9097509550506020870135935061044087018881111561168c57600080fd5b9598949750929560408101953594610460909101359350915050565b602080825260059082015264656d70747960d81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610817576108176116c7565b60208082526008908201526710b932b630bcb2b960c11b604082015260600190565b803563ffffffff8116811461135457600080fd5b8035801515811461135457600080fd5b6000808335601e1984360301811261174d57600080fd5b830160208101925035905067ffffffffffffffff81111561176d57600080fd5b80360382131561140a57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126117bc57600080fd5b830160208101925035905067ffffffffffffffff8111156117dc57600080fd5b8060051b360382131561140a57600080fd5b8183526000602080850194508260005b8581101561182a576001600160a01b036118178361133d565b16875295820195908201906001016117fe565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156118855782840389526118668288611736565b61187186828461177c565b9a87019a955050509084019060010161184f565b5091979650505050505050565b602081526000823561019e198436030181126118ad57600080fd5b60a0602084015283016118d060c084016118c683611712565b63ffffffff169052565b6118dc60208201611712565b63ffffffff1660e08401526118f360408201611712565b6101006119078186018363ffffffff169052565b6119136060840161133d565b915061012061192c818701846001600160a01b03169052565b6119386080850161133d565b9250610140611951818801856001600160a01b03169052565b61195d60a08601611726565b935061016061196f8189018615159052565b61197c60c0870187611736565b95506101a061018081818c01526119986102608c01898561177c565b975060e0890135828c01526119ae878a0161133d565b6001600160a01b03166101c08c0152948801356101e08b0152505090850135610200880152840135610220870152830135610240860152506119f360208601866117a5565b9250601f1980868403016040870152611a0d8385846117ee565b9350611a1c60408801886117a5565b9350915080868503016060870152611a35848484611835565b9350611a436060880161133d565b6001600160a01b03811660808801529250611a616080880188611736565b93509150808685030160a087015250611a7b83838361177c565b9695505050505050565b600060208284031215611a9757600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610817576108176116c7565b6000815180845260005b81811015611aed57602081850181015186830182015201611ad1565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611885578284038952611b43848351611ac7565b98850198935090840190600101611b2b565b6060808252810185905260008660808301825b88811015611b96576001600160a01b03611b818461133d565b16825260209283019290910190600101611b68565b5083810360208501528581526001600160fb1b03861115611bb657600080fd5b8560051b9150818760208301370182810360209081016040850152611bdd90820185611b0d565b98975050505050505050565b6020815260006113746020830184611ac7565b6104008183375050565b6104608082528101859052600061048080830190600588901b8401018883805b8a811015611c9c5786840361047f190185528235368d900361043e19018112611c4d578283fd5b8c01610440611c5c8280611736565b828852611c6c838901828461177c565b92505050602061040081840182890137610420928301359690920195909552948501949290920191600101611c26565b5050508092505050846020830152611cb76040830185611bfc565b82610440830152969550505050505056fe9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b18a264697066735822122014f71e96141f67772d3ba2104742e471ad55639e79fa6fd5cad0bc2b6637fd8c64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
