[ { "inputs": [ { "internalType": "contract IbcDispatcher", "name": "_dispatcher", "type": "address" }, { "internalType": "string", "name": "tokenName_", "type": "string" }, { "internalType": "string", "name": "tokenSymbol_", "type": "string" }, { "internalType": "uint256", "name": "tokenSupply_", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ChannelNotFound", "type": "error" }, { "inputs": [], "name": "UnsupportedVersion", "type": "error" }, { "inputs": [], "name": "notIbcDispatcher", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "ackPackets", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "channelId", "type": "bytes32" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "bridgeTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "connectedChannels", "outputs": [ { "internalType": "bytes32", "name": "channelId", "type": "bytes32" }, { "internalType": "bytes32", "name": "cpChannelId", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint8", "name": "ordering", "type": "uint8" }, { "internalType": "bool", "name": "feeEnabled", "type": "bool" }, { "internalType": "string[]", "name": "connectionHops", "type": "string[]" }, { "internalType": "string", "name": "counterpartyPortId", "type": "string" } ], "name": "createChannel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "dispatcher", "outputs": [ { "internalType": "contract IbcDispatcher", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getConnectedChannels", "outputs": [ { "components": [ { "internalType": "bytes32", "name": "channelId", "type": "bytes32" }, { "internalType": "bytes32", "name": "cpChannelId", "type": "bytes32" } ], "internalType": "struct CustomChanIbcApp.ChannelMapping[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "src", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "dest", "type": "tuple" }, { "internalType": "uint64", "name": "sequence", "type": "uint64" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "components": [ { "internalType": "uint64", "name": "revision_number", "type": "uint64" }, { "internalType": "uint64", "name": "revision_height", "type": "uint64" } ], "internalType": "struct Height", "name": "timeoutHeight", "type": "tuple" }, { "internalType": "uint64", "name": "timeoutTimestamp", "type": "uint64" } ], "internalType": "struct IbcPacket", "name": "", "type": "tuple" }, { "components": [ { "internalType": "bool", "name": "success", "type": "bool" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "internalType": "struct AckPacket", "name": "ack", "type": "tuple" } ], "name": "onAcknowledgementPacket", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "channelId", "type": "bytes32" }, { "internalType": "bytes32", "name": "counterpartyChannelId", "type": "bytes32" }, { "internalType": "string", "name": "counterpartyVersion", "type": "string" } ], "name": "onChanOpenAck", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "name": "onChanOpenConfirm", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "enum ChannelOrder", "name": "", "type": "uint8" }, { "internalType": "string[]", "name": "", "type": "string[]" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" } ], "name": "onChanOpenInit", "outputs": [ { "internalType": "string", "name": "selectedVersion", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum ChannelOrder", "name": "", "type": "uint8" }, { "internalType": "string[]", "name": "", "type": "string[]" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "bytes32", "name": "counterpartyChannelId", "type": "bytes32" }, { "internalType": "string", "name": "counterpartyVersion", "type": "string" } ], "name": "onChanOpenTry", "outputs": [ { "internalType": "string", "name": "selectedVersion", "type": "string" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "channelId", "type": "bytes32" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "onCloseIbcChannel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "src", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "dest", "type": "tuple" }, { "internalType": "uint64", "name": "sequence", "type": "uint64" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "components": [ { "internalType": "uint64", "name": "revision_number", "type": "uint64" }, { "internalType": "uint64", "name": "revision_height", "type": "uint64" } ], "internalType": "struct Height", "name": "timeoutHeight", "type": "tuple" }, { "internalType": "uint64", "name": "timeoutTimestamp", "type": "uint64" } ], "internalType": "struct IbcPacket", "name": "packet", "type": "tuple" } ], "name": "onRecvPacket", "outputs": [ { "components": [ { "internalType": "bool", "name": "success", "type": "bool" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "internalType": "struct AckPacket", "name": "ackPacket", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "src", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "dest", "type": "tuple" }, { "internalType": "uint64", "name": "sequence", "type": "uint64" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "components": [ { "internalType": "uint64", "name": "revision_number", "type": "uint64" }, { "internalType": "uint64", "name": "revision_height", "type": "uint64" } ], "internalType": "struct Height", "name": "timeoutHeight", "type": "tuple" }, { "internalType": "uint64", "name": "timeoutTimestamp", "type": "uint64" } ], "internalType": "struct IbcPacket", "name": "packet", "type": "tuple" } ], "name": "onTimeoutPacket", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "recvedPackets", "outputs": [ { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "src", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "dest", "type": "tuple" }, { "internalType": "uint64", "name": "sequence", "type": "uint64" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "components": [ { "internalType": "uint64", "name": "revision_number", "type": "uint64" }, { "internalType": "uint64", "name": "revision_height", "type": "uint64" } ], "internalType": "struct Height", "name": "timeoutHeight", "type": "tuple" }, { "internalType": "uint64", "name": "timeoutTimestamp", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "supportedVersions", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "timeoutPackets", "outputs": [ { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "src", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "portId", "type": "string" }, { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "internalType": "struct IbcEndpoint", "name": "dest", "type": "tuple" }, { "internalType": "uint64", "name": "sequence", "type": "uint64" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "components": [ { "internalType": "uint64", "name": "revision_number", "type": "uint64" }, { "internalType": "uint64", "name": "revision_height", "type": "uint64" } ], "internalType": "struct Height", "name": "timeoutHeight", "type": "tuple" }, { "internalType": "uint64", "name": "timeoutTimestamp", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "channelId", "type": "bytes32" } ], "name": "triggerChannelClose", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IbcDispatcher", "name": "_dispatcher", "type": "address" } ], "name": "updateDispatcher", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string[]", "name": "_supportedVersions", "type": "string[]" } ], "name": "updateSupportedVersions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60e0604052600360a0908152620312e360ec1b60c05260809081526200002a906006906001620001e4565b503480156200003857600080fd5b5060405162003598380380620035988339810160408190526200005b9162000383565b828285806200006a33620000c7565b600180546001600160a01b0319166001600160a01b039290921691909117905550600a620000998382620004a5565b50600b620000a88282620004a5565b505050620000bd33826200011760201b60201c565b5050505062000599565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216620001725760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b806009600082825462000186919062000571565b90915550506001600160a01b0382166000818152600760209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b8280548282559060005260206000209081019282156200022f579160200282015b828111156200022f57825182906200021e9082620004a5565b509160200191906001019062000205565b506200023d92915062000241565b5090565b808211156200023d57600062000258828262000262565b5060010162000241565b508054620002709062000415565b6000825580601f1062000281575050565b601f016020900490600052602060002090810190620002a19190620002a4565b50565b5b808211156200023d5760008155600101620002a5565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002e357600080fd5b81516001600160401b0380821115620003005762000300620002bb565b604051601f8301601f19908116603f011681019082821181831017156200032b576200032b620002bb565b81604052838152602092508660208588010111156200034957600080fd5b600091505b838210156200036d57858201830151818301840152908201906200034e565b6000602085830101528094505050505092915050565b600080600080608085870312156200039a57600080fd5b84516001600160a01b0381168114620003b257600080fd5b60208601519094506001600160401b0380821115620003d057600080fd5b620003de88838901620002d1565b94506040870151915080821115620003f557600080fd5b506200040487828801620002d1565b606096909601519497939650505050565b600181811c908216806200042a57607f821691505b6020821081036200044b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001df576000816000526020600020601f850160051c810160208610156200047c5750805b601f850160051c820191505b818110156200049d5782815560010162000488565b505050505050565b81516001600160401b03811115620004c157620004c1620002bb565b620004d981620004d2845462000415565b8462000451565b602080601f831160018114620005115760008415620004f85750858301515b600019600386901b1c1916600185901b1785556200049d565b600085815260208120601f198616915b82811015620005425788860151825594840194600190910190840162000521565b5085821015620005615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200059357634e487b7160e01b600052601160045260246000fd5b92915050565b612fef80620005a96000396000f3fe6080604052600436106101fd5760003560e01c80637a9ccc4b1161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e14610617578063e847e28014610637578063f12b758a14610657578063f2fde38b14610677578063fad28a241461069757600080fd5b8063a9059cbb14610582578063b802d4e8146105a2578063bb3f9f8d146105c2578063cb7e9057146105f757600080fd5b80638fde04c7116100dc5780638fde04c71461050d578063901b5fa41461052d57806395d89b411461054d578063a457c2d71461056257600080fd5b80637a9ccc4b1461047b5780637d6221841461049b5780637e1d42b5146104bb5780638da5cb5b146104db57600080fd5b806342af119811610190578063558850ac1161015f578063558850ac146103d05780635fe39e0d146103f0578063602f98341461041057806370a0823114610430578063715018a61461046657600080fd5b806342af11981461032f5780634bdb5597146103515780634dcc0aa6146103715780634eeb73911461039e57600080fd5b806323b872dd116101cc57806323b872dd146102a5578063313ce567146102c557806339509351146102e15780634252ae9b1461030157600080fd5b806306fdde0314610209578063095ea7b31461023457806314a8cde81461026457806318160ddd1461028657600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021e6106b7565b60405161022b9190611d43565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611d72565b610749565b604051901515815260200161022b565b34801561027057600080fd5b50610279610763565b60405161022b9190611d9e565b34801561029257600080fd5b506009545b60405190815260200161022b565b3480156102b157600080fd5b506102546102c0366004611ded565b6107d6565b3480156102d157600080fd5b506040516012815260200161022b565b3480156102ed57600080fd5b506102546102fc366004611d72565b6107fa565b34801561030d57600080fd5b5061032161031c366004611e2e565b61081c565b60405161022b929190611e47565b34801561033b57600080fd5b5061034f61034a366004611e62565b6108d8565b005b34801561035d57600080fd5b5061021e61036c366004612067565b610902565b34801561037d57600080fd5b5061039161038c3660046121cc565b610948565b60405161022b91906122b4565b3480156103aa57600080fd5b506103be6103b9366004611e2e565b610afa565b60405161022b96959493929190612304565b3480156103dc57600080fd5b5061034f6103eb366004611e2e565b610d52565b3480156103fc57600080fd5b5061034f61040b366004612379565b610dbb565b34801561041c57600080fd5b5061034f61042b3660046123e3565b610e7b565b34801561043c57600080fd5b5061029761044b366004611e62565b6001600160a01b031660009081526007602052604090205490565b34801561047257600080fd5b5061034f610eec565b34801561048757600080fd5b5061021e61049636600461245b565b610f00565b3480156104a757600080fd5b5061021e6104b6366004611e2e565b610f38565b3480156104c757600080fd5b5061034f6104d63660046124e5565b610fe4565b3480156104e757600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161022b565b34801561051957600080fd5b5061034f61052836600461254f565b611081565b34801561053957600080fd5b5061034f610548366004612591565b6110a0565b34801561055957600080fd5b5061021e611134565b34801561056e57600080fd5b5061025461057d366004611d72565b611143565b34801561058e57600080fd5b5061025461059d366004611d72565b6111c3565b3480156105ae57600080fd5b5061034f6105bd366004612659565b6111d1565b3480156105ce57600080fd5b506105e26105dd366004611e2e565b61125e565b6040805192835260208301919091520161022b565b34801561060357600080fd5b506001546104f5906001600160a01b031681565b34801561062357600080fd5b506102976106323660046126a1565b61128c565b34801561064357600080fd5b5061034f6106523660046126cf565b6112b7565b34801561066357600080fd5b506103be610672366004611e2e565b6112ee565b34801561068357600080fd5b5061034f610692366004611e62565b6112fe565b3480156106a357600080fd5b5061034f6106b2366004611e2e565b611377565b6060600a80546106c690612721565b80601f01602080910402602001604051908101604052809291908181526020018280546106f290612721565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b6000336107578185856113a2565b60019150505b92915050565b60606005805480602002602001604051908101604052809291908181526020016000905b828210156107cd57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610787565b50505050905090565b6000336107e48582856114c6565b6107ef858585611540565b506001949350505050565b60003361075781858561080d838361128c565b610817919061276b565b6113a2565b6003818154811061082c57600080fd5b60009182526020909120600290910201805460018201805460ff90921693509061085590612721565b80601f016020809104026020016040519081016040528092919081815260200182805461088190612721565b80156108ce5780601f106108a3576101008083540402835291602001916108ce565b820191906000526020600020905b8154815290600101906020018083116108b157829003601f168201915b5050505050905082565b6108e06116eb565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546060906001600160a01b03163314610930576040516321bf7f4960e01b815260040160405180910390fd5b61093c86858585611745565b98975050505050505050565b6040805180820190915260008152606060208201526001546001600160a01b03163314610988576040516321bf7f4960e01b815260040160405180910390fd5b600280546001810182556000919091528251805184926008027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace019190829081906109d390826127e3565b506020918201516001909101558201518051600283019081906109f690826127e3565b5060209190910151600190910155604082015160048201805467ffffffffffffffff19166001600160401b0390921691909117905560608201516005820190610a3f90826127e3565b50608082015180516006830180546020938401516001600160401b03908116600160401b026fffffffffffffffffffffffffffffffff199092169381169390931717905560a090930151600790920180549290931667ffffffffffffffff1992909216919091179091556060830151805160009283928392610ac7929082018101910161289c565b925092509250610ad782826118a3565b50506040805180820190915260018152606084015160208201529150505b919050565b60048181548110610b0a57600080fd5b906000526020600020906008020160009150905080600001604051806040016040529081600082018054610b3d90612721565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6990612721565b8015610bb65780601f10610b8b57610100808354040283529160200191610bb6565b820191906000526020600020905b815481529060010190602001808311610b9957829003601f168201915b505050505081526020016001820154815250509080600201604051806040016040529081600082018054610be990612721565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1590612721565b8015610c625780601f10610c3757610100808354040283529160200191610c62565b820191906000526020600020905b815481529060010190602001808311610c4557829003601f168201915b505050918352505060019190910154602090910152600482015460058301805492936001600160401b0390921692610c9990612721565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc590612721565b8015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b50506040805180820190915260068601546001600160401b038082168352600160401b909104811660208301526007909601549495909416925088915050565b610d5a6116eb565b600154604051638b24b4cb60e01b8152600481018390526001600160a01b0390911690638b24b4cb90602401600060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b5050505050565b6001546001600160a01b03163314610de6576040516321bf7f4960e01b815260040160405180910390fd5b6000805b600554811015610e5c578560058281548110610e0857610e086128df565b90600052602060002090600202016000015403610e545760058181548110610e3257610e326128df565b6000918252602082206002909102018181556001908101919091559150610e5c565b600101610dea565b5080610db457604051630781f76560e21b815260040160405180910390fd5b6001546001600160a01b03163314610ea6576040516321bf7f4960e01b815260040160405180910390fd5b6004805460018101825560009190915281906008027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01610ee78282612b57565b505050565b610ef46116eb565b610efe6000611964565b565b6001546060906001600160a01b03163314610f2e576040516321bf7f4960e01b815260040160405180910390fd5b61093c83836119b4565b60068181548110610f4857600080fd5b906000526020600020016000915090508054610f6390612721565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8f90612721565b8015610fdc5780601f10610fb157610100808354040283529160200191610fdc565b820191906000526020600020905b815481529060010190602001808311610fbf57829003601f168201915b505050505081565b6001546001600160a01b0316331461100f576040516321bf7f4960e01b815260040160405180910390fd5b6003805460018101825560009190915281906002027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016110508282612cd3565b506000905080806110646020850185612915565b8101906110719190611ded565b925092509250610db48382611a7c565b6110896116eb565b805161109c906006906020840190611c40565b5050565b6110a86116eb565b6001546001600160a01b031663418925b7898960ff8a1660028111156110d0576110d0612db8565b89898989896040518963ffffffff1660e01b81526004016110f8989796959493929190612df7565b600060405180830381600087803b15801561111257600080fd5b505af1158015611126573d6000803e3d6000fd5b505050505050505050505050565b6060600b80546106c690612721565b60003381611151828661128c565b9050838110156111b65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6107ef82868684036113a2565b600033610757818585611540565b6001600160a01b038316331461121d5760405162461bcd60e51b81526020600482015260116024820152704f6e6c792066726f6d206164647265737360781b60448201526064016111ad565b604080516001600160a01b0385811660208301528416818301526060808201849052825180830390910181526080909101909152610db485618ca083611bb0565b6005818154811061126e57600080fd5b60009182526020909120600290910201805460019091015490915082565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6001546001600160a01b031633146112e2576040516321bf7f4960e01b815260040160405180910390fd5b610db484848484611745565b60028181548110610b0a57600080fd5b6113066116eb565b6001600160a01b03811661136b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016111ad565b61137481611964565b50565b6001546001600160a01b03163314611374576040516321bf7f4960e01b815260040160405180910390fd5b6001600160a01b0383166114045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016111ad565b6001600160a01b0382166114655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016111ad565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006114d2848461128c565b9050600019811461153a578181101561152d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016111ad565b61153a84848484036113a2565b50505050565b6001600160a01b0383166115a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016111ad565b6001600160a01b0382166116065760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016111ad565b6001600160a01b0383166000908152600760205260409020548181101561167e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016111ad565b6001600160a01b0380851660008181526007602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116de9086815260200190565b60405180910390a361153a565b6000546001600160a01b03163314610efe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016111ad565b606060005b6006548110156118815760068181548110611767576117676128df565b906000526020600020016040516020016117819190612eea565b6040516020818303038152906040528051906020012084846040516020016117aa929190612f60565b60405160208183030381529060405280519060200120036118795760408051808201825287815260208082018881526005805460018101825560009190915283517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060029092029182015590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1909101558251601f8701829004820281018201909352858352909190869086908190840183828082843760009201919091525092955061189b945050505050565b60010161174a565b5060405163b01318a560e01b815260040160405180910390fd5b949350505050565b6001600160a01b0382166118f95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016111ad565b806009600082825461190b919061276b565b90915550506001600160a01b0382166000818152600760209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060005b60065481101561188157600681815481106119d6576119d66128df565b906000526020600020016040516020016119f09190612eea565b604051602081830303815290604052805190602001208484604051602001611a19929190612f60565b6040516020818303038152906040528051906020012003611a745783838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092945061075d9350505050565b6001016119b9565b6001600160a01b038216611adc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016111ad565b6001600160a01b03821660009081526007602052604090205481811015611b505760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016111ad565b6001600160a01b03831660008181526007602090815260408083208686039055600980548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000611bc56001600160401b0384164261276b565b611bd390633b9aca00612f70565b6001546040516330f8455760e21b81529192506001600160a01b03169063c3e1155c90611c0890879086908690600401612f87565b600060405180830381600087803b158015611c2257600080fd5b505af1158015611c36573d6000803e3d6000fd5b5050505050505050565b828054828255906000526020600020908101928215611c86579160200282015b82811115611c865782518290611c7690826127e3565b5091602001919060010190611c60565b50611c92929150611c96565b5090565b80821115611c92576000611caa8282611cb3565b50600101611c96565b508054611cbf90612721565b6000825580601f10611ccf575050565b601f01602090049060005260206000209081019061137491905b80821115611c925760008155600101611ce9565b6000815180845260005b81811015611d2357602081850181015186830182015201611d07565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611d566020830184611cfd565b9392505050565b6001600160a01b038116811461137457600080fd5b60008060408385031215611d8557600080fd5b8235611d9081611d5d565b946020939093013593505050565b602080825282518282018190526000919060409081850190868401855b82811015611de057815180518552860151868501529284019290850190600101611dbb565b5091979650505050505050565b600080600060608486031215611e0257600080fd5b8335611e0d81611d5d565b92506020840135611e1d81611d5d565b929592945050506040919091013590565b600060208284031215611e4057600080fd5b5035919050565b821515815260406020820152600061189b6040830184611cfd565b600060208284031215611e7457600080fd5b8135611d5681611d5d565b803560038110610af557600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611ec657611ec6611e8e565b60405290565b60405160c081016001600160401b0381118282101715611ec657611ec6611e8e565b604051601f8201601f191681016001600160401b0381118282101715611f1657611f16611e8e565b604052919050565b600082601f830112611f2f57600080fd5b81356001600160401b03811115611f4857611f48611e8e565b611f5b601f8201601f1916602001611eee565b818152846020838601011115611f7057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112611f9e57600080fd5b813560206001600160401b0380831115611fba57611fba611e8e565b8260051b611fc9838201611eee565b9384528581018301938381019088861115611fe357600080fd5b84880192505b8583101561093c578235848111156120015760008081fd5b61200f8a87838c0101611f1e565b8352509184019190840190611fe9565b60008083601f84011261203157600080fd5b5081356001600160401b0381111561204857600080fd5b60208301915083602082850101111561206057600080fd5b9250929050565b600080600080600080600060c0888a03121561208257600080fd5b61208b88611e7f565b965060208801356001600160401b03808211156120a757600080fd5b6120b38b838c01611f8d565b975060408a0135965060608a01359150808211156120d057600080fd5b6120dc8b838c01611f1e565b955060808a0135945060a08a01359150808211156120f957600080fd5b506121068a828b0161201f565b989b979a50959850939692959293505050565b60006040828403121561212b57600080fd5b612133611ea4565b905081356001600160401b0381111561214b57600080fd5b61215784828501611f1e565b8252506020820135602082015292915050565b6001600160401b038116811461137457600080fd5b8035610af58161216a565b60006040828403121561219c57600080fd5b6121a4611ea4565b905081356121b18161216a565b815260208201356121c18161216a565b602082015292915050565b6000602082840312156121de57600080fd5b81356001600160401b03808211156121f557600080fd5b9083019060e0828603121561220957600080fd5b612211611ecc565b82358281111561222057600080fd5b61222c87828601612119565b82525060208301358281111561224157600080fd5b61224d87828601612119565b60208301525061225f6040840161217f565b604082015260608301358281111561227657600080fd5b61228287828601611f1e565b606083015250612295866080850161218a565b60808201526122a660c0840161217f565b60a082015295945050505050565b602081528151151560208201526000602083015160408084015261189b6060840182611cfd565b60008151604084526122f06040850182611cfd565b602093840151949093019390935250919050565b60e08152600061231760e08301896122db565b828103602084015261232981896122db565b90506001600160401b038088166040850152838203606085015261234d8288611cfd565b92508086511660808501528060208701511660a085015280851660c08501525050979650505050505050565b6000806000806060858703121561238f57600080fd5b8435935060208501356001600160401b038111156123ac57600080fd5b6123b88782880161201f565b9598909750949560400135949350505050565b600060e082840312156123dd57600080fd5b50919050565b6000602082840312156123f557600080fd5b81356001600160401b0381111561240b57600080fd5b61189b848285016123cb565b60008083601f84011261242957600080fd5b5081356001600160401b0381111561244057600080fd5b6020830191508360208260051b850101111561206057600080fd5b60008060008060008060006080888a03121561247657600080fd5b61247f88611e7f565b965060208801356001600160401b038082111561249b57600080fd5b6124a78b838c01612417565b909850965060408a01359150808211156124c057600080fd5b6124cc8b838c0161201f565b909650945060608a01359150808211156120f957600080fd5b600080604083850312156124f857600080fd5b82356001600160401b038082111561250f57600080fd5b61251b868387016123cb565b9350602085013591508082111561253157600080fd5b5083016040818603121561254457600080fd5b809150509250929050565b60006020828403121561256157600080fd5b81356001600160401b0381111561257757600080fd5b61189b84828501611f8d565b801515811461137457600080fd5b60008060008060008060008060a0898b0312156125ad57600080fd5b88356001600160401b03808211156125c457600080fd5b6125d08c838d0161201f565b909a50985060208b0135915060ff821682146125eb57600080fd5b90965060408a0135906125fd82612583565b90955060608a0135908082111561261357600080fd5b61261f8c838d01612417565b909650945060808b013591508082111561263857600080fd5b506126458b828c0161201f565b999c989b5096995094979396929594505050565b6000806000806080858703121561266f57600080fd5b84359350602085013561268181611d5d565b9250604085013561269181611d5d565b9396929550929360600135925050565b600080604083850312156126b457600080fd5b82356126bf81611d5d565b9150602083013561254481611d5d565b600080600080606085870312156126e557600080fd5b843593506020850135925060408501356001600160401b0381111561270957600080fd5b6127158782880161201f565b95989497509550505050565b600181811c9082168061273557607f821691505b6020821081036123dd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561075d5761075d612755565b601f821115610ee7576000816000526020600020601f850160051c810160208610156127a75750805b601f850160051c820191505b818110156127c6578281556001016127b3565b505050505050565b600019600383901b1c191660019190911b1790565b81516001600160401b038111156127fc576127fc611e8e565b6128108161280a8454612721565b8461277e565b602080601f83116001811461283f576000841561282d5750858301515b61283785826127ce565b8655506127c6565b600085815260208120601f198616915b8281101561286e5788860151825594840194600190910190840161284f565b508582101561288c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000806000606084860312156128b157600080fd5b83516128bc81611d5d565b60208501519093506128cd81611d5d565b80925050604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261290b57600080fd5b9190910192915050565b6000808335601e1984360301811261292c57600080fd5b8301803591506001600160401b0382111561294657600080fd5b60200191503681900382131561206057600080fd5b6129658283612915565b6001600160401b0381111561297c5761297c611e8e565b6129908161298a8554612721565b8561277e565b6000601f8211600181146129be57600083156129ac5750838201355b6129b684826127ce565b865550612a18565b600085815260209020601f19841690835b828110156129ef57868501358255602094850194600190920191016129cf565b5084821015612a0c5760001960f88660031b161c19848701351681555b505060018360011b0185555b50505050602082013560018201555050565b6000813561075d8161216a565b6001600160401b03831115612a4e57612a4e611e8e565b612a6283612a5c8354612721565b8361277e565b6000601f841160018114612a905760008515612a7e5750838201355b612a8886826127ce565b845550610db4565b600083815260209020601f19861690835b82811015612ac15786850135825560209485019460019092019101612aa1565b5086821015612ade5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135612afb8161216a565b815467ffffffffffffffff19166001600160401b038216178255506020820135612b248161216a565b81546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff00000000000000001617905550565b612b6182836128f5565b612b6b8182612915565b6001600160401b03811115612b8257612b82611e8e565b612b9681612b908654612721565b8661277e565b6000601f821160018114612bc45760008315612bb25750838201355b612bbc84826127ce565b875550612c1e565b600086815260209020601f19841690835b82811015612bf55786850135825560209485019460019092019101612bd5565b5084821015612c125760001960f88660031b161c19848701351681555b505060018360011b0186555b505050506020810135600183015550612c46612c3d60208401846128f5565b6002830161295b565b612c76612c5560408401612a2a565b600483016001600160401b0382166001600160401b03198254161781555050565b612c836060830183612915565b612c91818360058601612a37565b5050612ca36080830160068301612af0565b61109c612cb260c08401612a2a565b600783016001600160401b0382166001600160401b03198254161781555050565b8135612cde81612583565b815490151560ff1660ff199190911617815560018082016020612d0385820186612915565b6001600160401b03811115612d1a57612d1a611e8e565b612d2881612b908654612721565b6000601f821160018114612d565760008315612d445750838201355b612d4e84826127ce565b875550612dad565b600086815260209020601f19841690835b82811015612d845786850135825593870193908901908701612d67565b5084821015612da15760001960f88660031b161c19848701351681555b505060018360011b0186555b505050505050505050565b634e487b7160e01b600052602160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60a081526000612e0b60a083018a8c612dce565b602060038a10612e2b57634e487b7160e01b600052602160045260246000fd5b8381018a905288151560408501528382036060850152868252818101600588901b830182018960005b8a811015612ec357858303601f190184528135368d9003601e19018112612e7a57600080fd5b8c0185810190356001600160401b03811115612e9557600080fd5b803603821315612ea457600080fd5b612eaf858284612dce565b958701959450505090840190600101612e54565b50508581036080870152612ed881888a612dce565b9e9d5050505050505050505050505050565b6000808354612ef881612721565b60018281168015612f105760018114612f2557612f54565b60ff1984168752821515830287019450612f54565b8760005260208060002060005b85811015612f4b5781548a820152908401908201612f32565b50505082870194505b50929695505050505050565b8183823760009101908152919050565b808202811582820484141761075d5761075d612755565b838152606060208201526000612fa06060830185611cfd565b90506001600160401b038316604083015294935050505056fea264697066735822122022c8975e439837ef22bc69db42b30f689b168c137353d53a542b6965bdb7511964736f6c634300081700330000000000000000000000008957494ccd4b085133e9a8d3600b766427d4976a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000000000000000000000000003444149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034441490000000000000000000000000000000000000000000000000000000000