[ { "inputs": [ { "internalType": "uint256", "name": "_minGasToStore", "type": "uint256" }, { "internalType": "address", "name": "_layerZeroEndpoint", "type": "address" }, { "internalType": "uint256", "name": "_startMintId", "type": "uint256" }, { "internalType": "uint256", "name": "_endMintId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "_hashedPayload", "type": "bytes32" } ], "name": "CreditCleared", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "_hashedPayload", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "CreditStored", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "_reason", "type": "bytes" } ], "name": "MessageFailed", "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": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": true, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": true, "internalType": "address", "name": "_toAddress", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" } ], "name": "ReceiveFromChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "_payloadHash", "type": "bytes32" } ], "name": "RetryMessageSuccess", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": true, "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" } ], "name": "SendToChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_dstChainIdToBatchLimit", "type": "uint256" } ], "name": "SetDstChainIdToBatchLimit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_dstChainIdToTransferGas", "type": "uint256" } ], "name": "SetDstChainIdToTransferGas", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "_type", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_minDstGas", "type": "uint256" } ], "name": "SetMinDstGas", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_minGasToTransferAndStore", "type": "uint256" } ], "name": "SetMinGasToTransferAndStore", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "precrime", "type": "address" } ], "name": "SetPrecrime", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "SetTrustedRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "SetTrustedRemoteAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_PAYLOAD_SIZE_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FUNCTION_TYPE_SEND", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "clearCredits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "dstChainIdToBatchLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "dstChainIdToTransferGas", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" }, { "internalType": "bool", "name": "_useZro", "type": "bool" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "estimateSendBatchFee", "outputs": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "zroFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "bool", "name": "_useZro", "type": "bool" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "estimateSendFee", "outputs": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "zroFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "failedMessages", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "forceResumeReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" } ], "name": "getConfig", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" } ], "name": "getTrustedRemoteAddress", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "isTrustedRemote", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lzEndpoint", "outputs": [ { "internalType": "contract ILayerZeroEndpoint", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "lzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "maxMintId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "minDstGasLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minGasToTransferAndStore", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextMintId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "nonblockingLzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "payloadSizeLimitLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "precrime", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "retryMessage", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" }, { "internalType": "address payable", "name": "_refundAddress", "type": "address" }, { "internalType": "address", "name": "_zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "sendBatchFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address payable", "name": "_refundAddress", "type": "address" }, { "internalType": "address", "name": "_zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "sendFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" }, { "internalType": "bytes", "name": "_config", "type": "bytes" } ], "name": "setConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_dstChainIdToBatchLimit", "type": "uint256" } ], "name": "setDstChainIdToBatchLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_dstChainIdToTransferGas", "type": "uint256" } ], "name": "setDstChainIdToTransferGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_fee", "type": "uint256" } ], "name": "setFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint16", "name": "_packetType", "type": "uint16" }, { "internalType": "uint256", "name": "_minGas", "type": "uint256" } ], "name": "setMinDstGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minGasToTransferAndStore", "type": "uint256" } ], "name": "setMinGasToTransferAndStore", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_size", "type": "uint256" } ], "name": "setPayloadSizeLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_precrime", "type": "address" } ], "name": "setPrecrime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setReceiveVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setSendVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "setTrustedRemote", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "setTrustedRemoteAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "storedCredits", "outputs": [ { "internalType": "uint16", "name": "srcChainId", "type": "uint16" }, { "internalType": "address", "name": "toAddress", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bool", "name": "creditsRemain", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "trustedRemoteLookup", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdrawETH", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
60a06040523480156200001157600080fd5b5060405162004c8638038062004c868339810160408190526200003491620001a8565b604051806040016040528060078152602001663d35ab37ba32b960c91b815250604051806040016040528060058152602001642b37ba32b960d91b81525085858585858585858383838380806200009a620000946200015460201b60201c565b62000158565b6001600160a01b0316608052506001600655816200010a5760405162461bcd60e51b8152602060048201526024808201527f6d696e476173546f5472616e73666572416e6453746f7265206d7573742062656044820152630203e20360e41b606482015260840160405180910390fd5b50600755600b6200011c83826200029a565b50600c6200012b82826200029a565b505050601195909555505050601255505065886c98b76000601355506200036695505050505050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060008060808587031215620001bf57600080fd5b845160208601519094506001600160a01b0381168114620001df57600080fd5b6040860151606090960151949790965092505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200022057607f821691505b6020821081036200024157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029557600081815260208120601f850160051c81016020861015620002705750805b601f850160051c820191505b8181101562000291578281556001016200027c565b5050505b505050565b81516001600160401b03811115620002b657620002b6620001f5565b620002ce81620002c784546200020b565b8462000247565b602080601f831160018114620003065760008415620002ed5750858301515b600019600386901b1c1916600185901b17855562000291565b600085815260208120601f198616915b82811015620003375788860151825594840194600190910190840162000316565b5085821015620003565787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516148cc620003ba6000396000818161092e01528181610b4a01528181610e4e015281816110d20152818161133101528181611c170152818161212601528181612259015261323201526148cc6000f3fe6080604052600436106103755760003560e01c80638cfd8f5c116101d1578063c446183411610102578063e086e5ec116100a0578063f23536411161006f578063f235364114610aba578063f2fde38b14610ada578063f5ecbdbc14610afa578063fa25f9b614610b1a57600080fd5b8063e086e5ec14610a4f578063e1d4c87014610a64578063e985e9c514610a7a578063eb8d72b714610a9a57600080fd5b8063d12473a5116100dc578063d12473a5146109e6578063d1deba1f14610a06578063ddca3f4314610a19578063df2a5b3b14610a2f57600080fd5b8063c446183414610990578063c87b56dd146109a6578063cbed8b9c146109c657600080fd5b8063a22cb4651161016f578063af3fb21c11610149578063af3fb21c146108f4578063b353aaa71461091c578063b88d4fde14610950578063baf3292d1461097057600080fd5b8063a22cb465146108a1578063a6c3d165146108c1578063ab3ffb93146108e157600080fd5b8063950c8a74116101ab578063950c8a741461082c57806395d89b411461084c5780639ea5d6b1146108615780639f38369a1461088157600080fd5b80638cfd8f5c146107b65780638da5cb5b146107ee5780638ffa1f2a1461080c57600080fd5b80633f1f4fa4116102ab5780636352211e116102495780636aa99da3116102235780636aa99da31461074b57806370a0823114610761578063715018a6146107815780637533d7881461079657600080fd5b80636352211e146106eb57806366ad5c8a1461070b57806369fe0e2d1461072b57600080fd5b8063482881901161028557806348288190146106465780634ac3f4ff1461065c57806351905636146106895780635b8c41e61461069c57600080fd5b80633f1f4fa4146105cb57806342842e0e1461060657806342d65a8d1461062657600080fd5b80630df374831161031857806322a3ecf9116102f257806322a3ecf9146104d357806323b872dd146105565780632a205e3d146105765780633d8b38f6146105ab57600080fd5b80630df374831461048b57806310ddb137146104ab5780631249c58b146104cb57600080fd5b806307e0db171161035457806307e0db17146103f3578063081812fc14610413578063095ea7b31461044b5780630b4cad4c1461046b57600080fd5b80621d35671461037a57806301ffc9a71461039c57806306fdde03146103d1575b600080fd5b34801561038657600080fd5b5061039a610395366004613794565b610b47565b005b3480156103a857600080fd5b506103bc6103b736600461383d565b610d78565b60405190151581526020015b60405180910390f35b3480156103dd57600080fd5b506103e6610d9b565b6040516103c891906138aa565b3480156103ff57600080fd5b5061039a61040e3660046138bd565b610e2d565b34801561041f57600080fd5b5061043361042e3660046138d8565b610eb6565b6040516001600160a01b0390911681526020016103c8565b34801561045757600080fd5b5061039a610466366004613911565b610edd565b34801561047757600080fd5b5061039a6104863660046138d8565b610ff2565b34801561049757600080fd5b5061039a6104a636600461393d565b611092565b3480156104b757600080fd5b5061039a6104c63660046138bd565b6110b1565b61039a611109565b3480156104df57600080fd5b506105276104ee3660046138d8565b600a6020526000908152604090208054600182015460029092015461ffff821692620100009092046001600160a01b0316919060ff1684565b6040805161ffff90951685526001600160a01b03909316602085015291830152151560608201526080016103c8565b34801561056257600080fd5b5061039a610571366004613959565b6111d3565b34801561058257600080fd5b50610596610591366004613a6d565b611205565b604080519283526020830191909152016103c8565b3480156105b757600080fd5b506103bc6105c6366004613afb565b61122b565b3480156105d757600080fd5b506105f86105e63660046138bd565b60036020526000908152604090205481565b6040519081526020016103c8565b34801561061257600080fd5b5061039a610621366004613959565b6112f7565b34801561063257600080fd5b5061039a610641366004613afb565b611312565b34801561065257600080fd5b506105f860075481565b34801561066857600080fd5b506105f86106773660046138bd565b60086020526000908152604090205481565b61039a610697366004613b4d565b611398565b3480156106a857600080fd5b506105f86106b7366004613c06565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b3480156106f757600080fd5b506104336107063660046138d8565b6113af565b34801561071757600080fd5b5061039a610726366004613794565b61140f565b34801561073757600080fd5b5061039a6107463660046138d8565b6114eb565b34801561075757600080fd5b506105f860115481565b34801561076d57600080fd5b506105f861077c366004613c63565b6114f8565b34801561078d57600080fd5b5061039a61157e565b3480156107a257600080fd5b506103e66107b13660046138bd565b611592565b3480156107c257600080fd5b506105f86107d1366004613c80565b600260209081526000928352604080842090915290825290205481565b3480156107fa57600080fd5b506000546001600160a01b0316610433565b34801561081857600080fd5b5061039a610827366004613cb3565b61162c565b34801561083857600080fd5b50600454610433906001600160a01b031681565b34801561085857600080fd5b506103e6611874565b34801561086d57600080fd5b5061039a61087c36600461393d565b611883565b34801561088d57600080fd5b506103e661089c3660046138bd565b61193a565b3480156108ad57600080fd5b5061039a6108bc366004613ce7565b611a50565b3480156108cd57600080fd5b5061039a6108dc366004613afb565b611a5f565b61039a6108ef366004613d9c565b611ae8565b34801561090057600080fd5b50610909600181565b60405161ffff90911681526020016103c8565b34801561092857600080fd5b506104337f000000000000000000000000000000000000000000000000000000000000000081565b34801561095c57600080fd5b5061039a61096b366004613e51565b611af7565b34801561097c57600080fd5b5061039a61098b366004613c63565b611b2f565b34801561099c57600080fd5b506105f861271081565b3480156109b257600080fd5b506103e66109c13660046138d8565b611b85565b3480156109d257600080fd5b5061039a6109e1366004613ebc565b611bf8565b3480156109f257600080fd5b5061039a610a0136600461393d565b611c8d565b61039a610a14366004613794565b611d3d565b348015610a2557600080fd5b506105f860135481565b348015610a3b57600080fd5b5061039a610a4a366004613f2a565b611f53565b348015610a5b57600080fd5b506103bc612005565b348015610a7057600080fd5b506105f860125481565b348015610a8657600080fd5b506103bc610a95366004613f66565b61205f565b348015610aa657600080fd5b5061039a610ab5366004613afb565b61208d565b348015610ac657600080fd5b50610596610ad5366004613f9f565b6120e7565b348015610ae657600080fd5b5061039a610af5366004613c63565b6121b2565b348015610b0657600080fd5b506103e6610b15366004614018565b612228565b348015610b2657600080fd5b506105f8610b353660046138bd565b60096020526000908152604090205481565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610bc45760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526001602052604081208054610be290614065565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0e90614065565b8015610c5b5780601f10610c3057610100808354040283529160200191610c5b565b820191906000526020600020905b815481529060010190602001808311610c3e57829003601f168201915b50505050509050805186869050148015610c76575060008151115b8015610c9e575080516020820120604051610c94908890889061409f565b6040518091039020145b610cf95760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b6064820152608401610bbb565b610d6f8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152506122db92505050565b50505050505050565b60006001600160e01b031982161580610d955750610d9582612354565b92915050565b6060600b8054610daa90614065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd690614065565b8015610e235780601f10610df857610100808354040283529160200191610e23565b820191906000526020600020905b815481529060010190602001808311610e0657829003601f168201915b5050505050905090565b610e35612394565b6040516307e0db1760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307e0db17906024015b600060405180830381600087803b158015610e9b57600080fd5b505af1158015610eaf573d6000803e3d6000fd5b5050505050565b6000610ec1826123ee565b506000908152600f60205260409020546001600160a01b031690565b6000610ee8826113af565b9050806001600160a01b0316836001600160a01b031603610f555760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610bbb565b336001600160a01b0382161480610f715750610f71813361205f565b610fe35760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610bbb565b610fed838361243e565b505050565b610ffa612394565b600081116110565760405162461bcd60e51b8152602060048201526024808201527f6d696e476173546f5472616e73666572416e6453746f7265206d7573742062656044820152630203e20360e41b6064820152608401610bbb565b60078190556040518181527ffebbc4f8bb9ec2313950c718d43123124b15778efda4c1f1d529de2995b4f34d906020015b60405180910390a150565b61109a612394565b61ffff909116600090815260036020526040902055565b6110b9612394565b6040516310ddb13760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906310ddb13790602401610e81565b601254601154111561115d5760405162461bcd60e51b815260206004820152601f60248201527f7a6b566f7465723a206d6178206d696e74206c696d69742072656163686564006044820152606401610bbb565b6013543410156111af5760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f756768204554482073656e743a20636865636b206665652e006044820152606401610bbb565b6011805490819060006111c1836140c5565b91905055506111d033826124ac565b50565b6111de335b826124c6565b6111fa5760405162461bcd60e51b8152600401610bbb906140de565b610fed838383612524565b60008061121d878761121688612688565b87876120e7565b915091509550959350505050565b61ffff83166000908152600160205260408120805482919061124c90614065565b80601f016020809104026020016040519081016040528092919081815260200182805461127890614065565b80156112c55780601f1061129a576101008083540402835291602001916112c5565b820191906000526020600020905b8154815290600101906020018083116112a857829003601f168201915b5050505050905083836040516112dc92919061409f565b60405180910390208180519060200120149150509392505050565b610fed83838360405180602001604052806000815250611af7565b61131a612394565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d9061136a90869086908690600401614154565b600060405180830381600087803b15801561138457600080fd5b505af1158015610d6f573d6000803e3d6000fd5b610d6f8787876113a788612688565b8787876126d3565b6000818152600d60205260408120546001600160a01b031680610d955760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610bbb565b33301461146d5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610bbb565b6114e38686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152899350915087908790819084018382808284376000920191909152506128a792505050565b505050505050565b6114f3612394565b601355565b60006001600160a01b0382166115625760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610bbb565b506001600160a01b03166000908152600e602052604090205490565b611586612394565b61159060006129fe565b565b600160205260009081526040902080546115ab90614065565b80601f01602080910402602001604051908101604052809291908181526020018280546115d790614065565b80156116245780601f106115f957610100808354040283529160200191611624565b820191906000526020600020905b81548152906001019060200180831161160757829003601f168201915b505050505081565b611634612a4e565b80516020808301919091206000818152600a90925260409091206002015460ff166116955760405162461bcd60e51b81526020600482015260116024820152701b9bc818dc99591a5d1cc81cdd1bdc9959607a1b6044820152606401610bbb565b6000828060200190518101906116ab91906141b7565b6000848152600a6020526040812080546001909101549294509092506116e79161ffff8216916201000090046001600160a01b03169085612aa7565b6000848152600a6020526040902060010154909150811161175c5760405162461bcd60e51b815260206004820152602960248201527f6e6f7420656e6f7567682067617320746f2070726f6365737320637265646974604482015268103a3930b739b332b960b91b6064820152608401610bbb565b815181036117d3576000838152600a602052604080822080546001600160b01b031916815560018101929092556002909101805460ff19169055517fd7be02b8dd0d27bd0517a9cb4d7469ce27df4313821ae5ec1ff69acc594ba233906117c69085815260200190565b60405180910390a1611867565b604080516080810182526000858152600a6020818152848320805461ffff80821687526001600160a01b03620100008084048216868a019081529989018b8152600160608b01818152998f90529790965297519851169096026001600160b01b03199091169690951695909517939093178455915191830191909155516002909101805491151560ff199092169190911790555b5050506111d06001600655565b6060600c8054610daa90614065565b61188b612394565b600081116118e65760405162461bcd60e51b815260206004820152602260248201527f647374436861696e4964546f42617463684c696d6974206d757374206265203e604482015261020360f41b6064820152608401610bbb565b61ffff8216600081815260086020908152604091829020849055815192835282018390527f7315f7654d594ead24a30160ed9ba2d23247f543016b918343591e93d7afdb6d91015b60405180910390a15050565b61ffff811660009081526001602052604081208054606092919061195d90614065565b80601f016020809104026020016040519081016040528092919081815260200182805461198990614065565b80156119d65780601f106119ab576101008083540402835291602001916119d6565b820191906000526020600020905b8154815290600101906020018083116119b957829003601f168201915b505050505090508051600003611a2e5760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610bbb565b611a49600060148351611a419190614271565b839190612af3565b9392505050565b611a5b338383612c00565b5050565b611a67612394565b818130604051602001611a7c93929190614284565b60408051601f1981840301815291815261ffff8516600090815260016020522090611aa790826142f0565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611adb93929190614154565b60405180910390a1505050565b610d6f878787878787876126d3565b611b0133836124c6565b611b1d5760405162461bcd60e51b8152600401610bbb906140de565b611b2984848484612cce565b50505050565b611b37612394565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b90602001611087565b6060611b90826123ee565b6000611ba760408051602081019091526000815290565b90506000815111611bc75760405180602001604052806000815250611a49565b80611bd184612d01565b604051602001611be29291906143af565b6040516020818303038152906040529392505050565b611c00612394565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c90611c5490889088908890889088906004016143de565b600060405180830381600087803b158015611c6e57600080fd5b505af1158015611c82573d6000803e3d6000fd5b505050505050505050565b611c95612394565b60008111611cf15760405162461bcd60e51b815260206004820152602360248201527f647374436861696e4964546f5472616e73666572476173206d7573742062652060448201526203e20360ec1b6064820152608401610bbb565b61ffff8216600081815260096020908152604091829020849055815192835282018390527fc46df2983228ac2d9754e94a0d565e6671665dc8ad38602bc8e544f0685a29fb910161192e565b61ffff86166000908152600560205260408082209051611d60908890889061409f565b90815260408051602092819003830190206001600160401b03871660009081529252902054905080611de05760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610bbb565b808383604051611df192919061409f565b604051809103902014611e505760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610bbb565b61ffff87166000908152600560205260408082209051611e73908990899061409f565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252611f0b918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152506128a792505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051611f42959493929190614417565b60405180910390a150505050505050565b611f5b612394565b60008111611fa35760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610bbb565b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611adb565b600061200f612394565b604051600090339047908381818185875af1925050503d8060008114612051576040519150601f19603f3d011682016040523d82523d6000602084013e612056565b606091505b50909250505090565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205460ff1690565b612095612394565b61ffff831660009081526001602052604090206120b3828483614452565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611adb93929190614154565b600080600086866040516020016120ff92919061454c565b60408051601f198184030181529082905263040a7bb160e41b825291506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090612163908b90309086908b908b9060040161457a565b6040805180830381865afa15801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a391906145ce565b92509250509550959350505050565b6121ba612394565b6001600160a01b03811661221f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbb565b6111d0816129fe565b604051633d7b2f6f60e21b815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5ecbdbc90608401600060405180830381865afa1580156122a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122d091908101906145f2565b90505b949350505050565b60008061233e5a60966366ad5c8a60e01b898989896040516024016123039493929190614626565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915230929190612d93565b91509150816114e3576114e38686868685612e1d565b60006001600160e01b031982166380ac58cd60e01b148061238557506001600160e01b03198216635b5e139f60e01b145b80610d955750610d9582612eba565b6000546001600160a01b031633146115905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbb565b6123f781612eef565b6111d05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610bbb565b6000818152600f6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612473826113af565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611a5b828260405180602001604052806000815250612f0c565b6000806124d2836113af565b9050806001600160a01b0316846001600160a01b031614806124f957506124f9818561205f565b806122d35750836001600160a01b031661251284610eb6565b6001600160a01b031614949350505050565b826001600160a01b0316612537826113af565b6001600160a01b03161461255d5760405162461bcd60e51b8152600401610bbb90614664565b6001600160a01b0382166125bf5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbb565b826001600160a01b03166125d2826113af565b6001600160a01b0316146125f85760405162461bcd60e51b8152600401610bbb90614664565b6000818152600f6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600e8552838620805460001901905590871680865283862080546001019055868652600d90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106126c2576126c26146a9565b602090810291909101015292915050565b600084511161271a5760405162461bcd60e51b8152602060048201526013602482015272746f6b656e4964735b5d20697320656d70747960681b6044820152606401610bbb565b83516001148061273e575061ffff8616600090815260086020526040902054845111155b6127955760405162461bcd60e51b815260206004820152602260248201527f62617463682073697a65206578636565647320647374206261746368206c696d6044820152611a5d60f21b6064820152608401610bbb565b60005b84518110156127d8576127c68888888885815181106127b9576127b96146a9565b6020026020010151612f3f565b806127d0816140c5565b915050612798565b50600085856040516020016127ee92919061454c565b6040516020818303038152906040529050612833876001848851600960008d61ffff1661ffff1681526020019081526020016000205461282e91906146bf565b61302a565b612841878286868634613109565b8560405161284f91906146d6565b6040518091039020886001600160a01b03168861ffff167fe1b87c47fdeb4f9cbadbca9df3af7aba453bb6e501075d0440d88125b711522a8860405161289591906146f2565b60405180910390a45050505050505050565b600080828060200190518101906128be91906141b7565b6014820151919350915060006128d688838386612aa7565b905082518110156129aa5784516020808701919091206040805160808101825261ffff808d1682526001600160a01b038088168387019081528385018881526001606086018181526000898152600a909a529887902095518654935190941662010000026001600160b01b03199093169390941692909217178355519082015592516002909301805493151560ff199094169390931790925590517f10e0b70d256bccc84b7027506978bd8b68984a870788b93b479def144c839ad7906129a09083908990614705565b60405180910390a1505b816001600160a01b0316876040516129c291906146d6565b60405180910390208961ffff167f5b821db8a46f8ecbe1941ba2f51cfeea9643268b56631f70d45e2a745d9902658660405161289591906146f2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600260065403612aa05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bbb565b6002600655565b6000825b82518110156122d0576007545a106122d057612ae18686858481518110612ad457612ad46146a9565b60200260200101516132ae565b80612aeb816140c5565b915050612aab565b606081612b0181601f61471e565b1015612b405760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610bbb565b612b4a828461471e565b84511015612b8e5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610bbb565b606082158015612bad5760405191506000825260208201604052612bf7565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612be6578051835260209283019201612bce565b5050858452601f01601f1916604052505b50949350505050565b816001600160a01b0316836001600160a01b031603612c615760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610bbb565b6001600160a01b03838116600081815260106020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612cd9848484612524565b612ce58484848461330e565b611b295760405162461bcd60e51b8152600401610bbb90614731565b60606000612d0e8361340c565b60010190506000816001600160401b03811115612d2d57612d2d61399a565b6040519080825280601f01601f191660200182016040528015612d57576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612d6157509392505050565b6000606060008060008661ffff166001600160401b03811115612db857612db861399a565b6040519080825280601f01601f191660200182016040528015612de2576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115612e04578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff16815260200190815260200160002085604051612e4e91906146d6565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c90612eab9087908790879087908790614783565b60405180910390a15050505050565b60006001600160e01b031982166322bac5d960e01b1480610d9557506301ffc9a760e01b6001600160e01b0319831614610d95565b6000908152600d60205260409020546001600160a01b0316151590565b612f1683836134e4565b612f23600084848461330e565b610fed5760405162461bcd60e51b8152600401610bbb90614731565b612f48336111d8565b612fab5760405162461bcd60e51b815260206004820152602e60248201527f4f4e46543732313a2073656e642063616c6c6572206973206e6f74206f776e6560448201526d1c881b9bdc88185c1c1c9bdd995960921b6064820152608401610bbb565b836001600160a01b0316612fbe826113af565b6001600160a01b03161461301f5760405162461bcd60e51b815260206004820152602260248201527f4f4e46543732313a2073656e642066726f6d20696e636f7272656374206f776e60448201526132b960f11b6064820152608401610bbb565b611b29843083612524565b600061303583613651565b61ffff80871660009081526002602090815260408083209389168352929052908120549192509061306790849061471e565b9050600081116130b95760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f74207365740000000000006044820152606401610bbb565b808210156114e35760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f7700000000006044820152606401610bbb565b61ffff86166000908152600160205260408120805461312790614065565b80601f016020809104026020016040519081016040528092919081815260200182805461315390614065565b80156131a05780601f10613175576101008083540402835291602001916131a0565b820191906000526020600020905b81548152906001019060200180831161318357829003601f168201915b5050505050905080516000036132115760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610bbb565b61321c8787516136ad565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5803100908490613273908b9086908c908c908c908c906004016147d5565b6000604051808303818588803b15801561328c57600080fd5b505af11580156132a0573d6000803e3d6000fd5b505050505050505050505050565b6132b781612eef565b15806132e357506132c781612eef565b80156132e35750306132d8826113af565b6001600160a01b0316145b6132ec57600080fd5b6132f581612eef565b61330357610fed82826124ac565b610fed308383612524565b60006001600160a01b0384163b1561340457604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061335290339089908890889060040161483c565b6020604051808303816000875af192505050801561338d575060408051601f3d908101601f1916820190925261338a91810190614879565b60015b6133ea573d8080156133bb576040519150601f19603f3d011682016040523d82523d6000602084013e6133c0565b606091505b5080516000036133e25760405162461bcd60e51b8152600401610bbb90614731565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506122d3565b5060016122d3565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061344b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613477576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061349557662386f26fc10000830492506010015b6305f5e10083106134ad576305f5e100830492506008015b61271083106134c157612710830492506004015b606483106134d3576064830492506002015b600a8310610d955760010192915050565b6001600160a01b03821661353a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610bbb565b61354381612eef565b156135905760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610bbb565b61359981612eef565b156135e65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610bbb565b6001600160a01b0382166000818152600e6020908152604080832080546001019055848352600d90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006022825110156136a55760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c69642061646170746572506172616d73000000006044820152606401610bbb565b506022015190565b61ffff8216600090815260036020526040812054908190036136ce57506127105b80821115610fed5760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610bbb565b803561ffff8116811461373057600080fd5b919050565b60008083601f84011261374757600080fd5b5081356001600160401b0381111561375e57600080fd5b60208301915083602082850101111561377657600080fd5b9250929050565b80356001600160401b038116811461373057600080fd5b600080600080600080608087890312156137ad57600080fd5b6137b68761371e565b955060208701356001600160401b03808211156137d257600080fd5b6137de8a838b01613735565b90975095508591506137f260408a0161377d565b9450606089013591508082111561380857600080fd5b5061381589828a01613735565b979a9699509497509295939492505050565b6001600160e01b0319811681146111d057600080fd5b60006020828403121561384f57600080fd5b8135611a4981613827565b60005b8381101561387557818101518382015260200161385d565b50506000910152565b6000815180845261389681602086016020860161385a565b601f01601f19169290920160200192915050565b602081526000611a49602083018461387e565b6000602082840312156138cf57600080fd5b611a498261371e565b6000602082840312156138ea57600080fd5b5035919050565b6001600160a01b03811681146111d057600080fd5b8035613730816138f1565b6000806040838503121561392457600080fd5b823561392f816138f1565b946020939093013593505050565b6000806040838503121561395057600080fd5b61392f8361371e565b60008060006060848603121561396e57600080fd5b8335613979816138f1565b92506020840135613989816138f1565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156139d8576139d861399a565b604052919050565b60006001600160401b038211156139f9576139f961399a565b50601f01601f191660200190565b600082601f830112613a1857600080fd5b8135613a2b613a26826139e0565b6139b0565b818152846020838601011115613a4057600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461373057600080fd5b600080600080600060a08688031215613a8557600080fd5b613a8e8661371e565b945060208601356001600160401b0380821115613aaa57600080fd5b613ab689838a01613a07565b955060408801359450613acb60608901613a5d565b93506080880135915080821115613ae157600080fd5b50613aee88828901613a07565b9150509295509295909350565b600080600060408486031215613b1057600080fd5b613b198461371e565b925060208401356001600160401b03811115613b3457600080fd5b613b4086828701613735565b9497909650939450505050565b600080600080600080600060e0888a031215613b6857600080fd5b8735613b73816138f1565b9650613b816020890161371e565b955060408801356001600160401b0380821115613b9d57600080fd5b613ba98b838c01613a07565b965060608a0135955060808a01359150613bc2826138f1565b90935060a089013590613bd4826138f1565b90925060c08901359080821115613bea57600080fd5b50613bf78a828b01613a07565b91505092959891949750929550565b600080600060608486031215613c1b57600080fd5b613c248461371e565b925060208401356001600160401b03811115613c3f57600080fd5b613c4b86828701613a07565b925050613c5a6040850161377d565b90509250925092565b600060208284031215613c7557600080fd5b8135611a49816138f1565b60008060408385031215613c9357600080fd5b613c9c8361371e565b9150613caa6020840161371e565b90509250929050565b600060208284031215613cc557600080fd5b81356001600160401b03811115613cdb57600080fd5b6122d384828501613a07565b60008060408385031215613cfa57600080fd5b8235613d05816138f1565b9150613caa60208401613a5d565b60006001600160401b03821115613d2c57613d2c61399a565b5060051b60200190565b600082601f830112613d4757600080fd5b81356020613d57613a2683613d13565b82815260059290921b84018101918181019086841115613d7657600080fd5b8286015b84811015613d915780358352918301918301613d7a565b509695505050505050565b600080600080600080600060e0888a031215613db757600080fd5b8735613dc2816138f1565b9650613dd06020890161371e565b955060408801356001600160401b0380821115613dec57600080fd5b613df88b838c01613a07565b965060608a0135915080821115613e0e57600080fd5b613e1a8b838c01613d36565b955060808a01359150613e2c826138f1565b819450613e3b60a08b01613906565b935060c08a0135915080821115613bea57600080fd5b60008060008060808587031215613e6757600080fd5b8435613e72816138f1565b93506020850135613e82816138f1565b92506040850135915060608501356001600160401b03811115613ea457600080fd5b613eb087828801613a07565b91505092959194509250565b600080600080600060808688031215613ed457600080fd5b613edd8661371e565b9450613eeb6020870161371e565b93506040860135925060608601356001600160401b03811115613f0d57600080fd5b613f1988828901613735565b969995985093965092949392505050565b600080600060608486031215613f3f57600080fd5b613f488461371e565b9250613f566020850161371e565b9150604084013590509250925092565b60008060408385031215613f7957600080fd5b8235613f84816138f1565b91506020830135613f94816138f1565b809150509250929050565b600080600080600060a08688031215613fb757600080fd5b613fc08661371e565b945060208601356001600160401b0380821115613fdc57600080fd5b613fe889838a01613a07565b95506040880135915080821115613ffe57600080fd5b61400a89838a01613d36565b9450613acb60608901613a5d565b6000806000806080858703121561402e57600080fd5b6140378561371e565b93506140456020860161371e565b92506040850135614055816138f1565b9396929550929360600135925050565b600181811c9082168061407957607f821691505b60208210810361409957634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b6000600182016140d7576140d76140af565b5060010190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff841681526040602082015260006122d060408301848661412b565b600082601f83011261418357600080fd5b8151614191613a26826139e0565b8181528460208386010111156141a657600080fd5b6122d382602083016020870161385a565b600080604083850312156141ca57600080fd5b82516001600160401b03808211156141e157600080fd5b6141ed86838701614172565b935060209150818501518181111561420457600080fd5b85019050601f8101861361421757600080fd5b8051614225613a2682613d13565b81815260059190911b8201830190838101908883111561424457600080fd5b928401925b8284101561426257835182529284019290840190614249565b80955050505050509250929050565b81810381811115610d9557610d956140af565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b601f821115610fed57600081815260208120601f850160051c810160208610156142d15750805b601f850160051c820191505b818110156114e3578281556001016142dd565b81516001600160401b038111156143095761430961399a565b61431d816143178454614065565b846142aa565b602080601f831160018114614352576000841561433a5750858301515b600019600386901b1c1916600185901b1785556114e3565b600085815260208120601f198616915b8281101561438157888601518255948401946001909101908401614362565b508582101561439f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600083516143c181846020880161385a565b8351908301906143d581836020880161385a565b01949350505050565b600061ffff80881683528087166020840152508460408301526080606083015261440c60808301848661412b565b979650505050505050565b61ffff8616815260806020820152600061443560808301868861412b565b6001600160401b0394909416604083015250606001529392505050565b6001600160401b038311156144695761446961399a565b61447d836144778354614065565b836142aa565b6000601f8411600181146144b157600085156144995750838201355b600019600387901b1c1916600186901b178355610eaf565b600083815260209020601f19861690835b828110156144e257868501358255602094850194600190920191016144c2565b50868210156144ff5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081518084526020808501945080840160005b8381101561454157815187529582019590820190600101614525565b509495945050505050565b60408152600061455f604083018561387e565b82810360208401526145718185614511565b95945050505050565b61ffff861681526001600160a01b038516602082015260a0604082018190526000906145a89083018661387e565b841515606084015282810360808401526145c2818561387e565b98975050505050505050565b600080604083850312156145e157600080fd5b505080516020909101519092909150565b60006020828403121561460457600080fd5b81516001600160401b0381111561461a57600080fd5b6122d384828501614172565b61ffff85168152608060208201526000614643608083018661387e565b6001600160401b0385166040840152828103606084015261440c818561387e565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610d9557610d956140af565b600082516146e881846020870161385a565b9190910192915050565b602081526000611a496020830184614511565b8281526040602082015260006122d3604083018461387e565b80820180821115610d9557610d956140af565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b61ffff8616815260a0602082015260006147a060a083018761387e565b6001600160401b038616604084015282810360608401526147c1818661387e565b905082810360808401526145c2818561387e565b61ffff8716815260c0602082015260006147f260c083018861387e565b8281036040840152614804818861387e565b6001600160a01b0387811660608601528616608085015283810360a0850152905061482f818561387e565b9998505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061486f9083018461387e565b9695505050505050565b60006020828403121561488b57600080fd5b8151611a498161382756fea26469706673582212201c01da39da97bc305df420cd11c263fff1b6b5504d5a3bd1fd433b7a90f50ca664736f6c634300081300330000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd700000000000000000000000000000000000000000000000000000000003d090100000000000000000000000000000000000000000000000000000000004c4b40