[ { "inputs": [ { "internalType": "uint256", "name": "initialSupply_", "type": "uint256" }, { "internalType": "address", "name": "treasuryAddress_", "type": "address" }, { "internalType": "uint8", "name": "sharedDecimals_", "type": "uint8" }, { "internalType": "address", "name": "lzEndpoint_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AdapterParamsMustBeEmpty", "type": "error" }, { "inputs": [], "name": "AmountSDOverflow", "type": "error" }, { "inputs": [], "name": "AmountTooSmall", "type": "error" }, { "inputs": [], "name": "Blacklisted", "type": "error" }, { "inputs": [], "name": "CallerMustBeLzApp", "type": "error" }, { "inputs": [], "name": "CallerMustBeOFTCore", "type": "error" }, { "inputs": [], "name": "GasLimitTooLow", "type": "error" }, { "inputs": [], "name": "InvalidAdapterParams", "type": "error" }, { "inputs": [], "name": "InvalidDestinationChain", "type": "error" }, { "inputs": [], "name": "InvalidEndpointCaller", "type": "error" }, { "inputs": [], "name": "InvalidMinGas", "type": "error" }, { "inputs": [], "name": "InvalidPayload", "type": "error" }, { "inputs": [], "name": "InvalidSourceSendingContract", "type": "error" }, { "inputs": [], "name": "MinGasLimitNotSet", "type": "error" }, { "inputs": [], "name": "NoStoredMessage", "type": "error" }, { "inputs": [], "name": "NoTrustedPathRecord", "type": "error" }, { "inputs": [], "name": "PayloadSizeTooLarge", "type": "error" }, { "inputs": [], "name": "SharedDecimalsMustBeLteDecimals", "type": "error" }, { "inputs": [], "name": "UnknownPacketType", "type": "error" }, { "inputs": [], "name": "ZeroAddress", "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": "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": "_hash", "type": "bytes32" } ], "name": "CallOFTReceivedSuccess", "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": false, "internalType": "address", "name": "_address", "type": "address" } ], "name": "NonContractAddress", "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": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "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": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "SendToChain", "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": "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": false, "internalType": "bool", "name": "_useCustomAdapterParams", "type": "bool" } ], "name": "SetUseCustomAdapterParams", "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": [], "name": "DEFAULT_PAYLOAD_SIZE_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NO_EXTRA_GAS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PT_SEND", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PT_SEND_AND_CALL", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "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": [], "name": "blacklistAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "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": "bytes32", "name": "_from", "type": "bytes32" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "internalType": "uint256", "name": "_gasForCall", "type": "uint256" } ], "name": "callOnOFTReceived", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "circulatingSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "creditedPackets", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "internalType": "uint64", "name": "_dstGasForCall", "type": "uint64" }, { "internalType": "bool", "name": "_useZro", "type": "bool" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "estimateSendAndCallFee", "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": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "internalType": "uint256", "name": "_amount", "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": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "forceResumeReceive", "outputs": [], "stateMutability": "nonpayable", "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": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "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": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "minDstGasLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "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": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "internalType": "uint64", "name": "_dstGasForCall", "type": "uint64" }, { "components": [ { "internalType": "address payable", "name": "refundAddress", "type": "address" }, { "internalType": "address", "name": "zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "adapterParams", "type": "bytes" } ], "internalType": "struct ICommonOFT.LzCallParams", "name": "_callParams", "type": "tuple" } ], "name": "sendAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "components": [ { "internalType": "address payable", "name": "refundAddress", "type": "address" }, { "internalType": "address", "name": "zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "adapterParams", "type": "bytes" } ], "internalType": "struct ICommonOFT.LzCallParams", "name": "_callParams", "type": "tuple" } ], "name": "sendFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_blacklistAddress", "type": "address" } ], "name": "setBlacklistAddress", "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": "uint16", "name": "_packetType", "type": "uint16" }, { "internalType": "uint256", "name": "_minGas", "type": "uint256" } ], "name": "setMinDstGas", "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": "bool", "name": "value", "type": "bool" } ], "name": "setUseBlacklist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_useCustomAdapterParams", "type": "bool" } ], "name": "setUseCustomAdapterParams", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sharedDecimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "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": [], "name": "token", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [], "name": "treasuryAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "trustedRemoteLookup", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "treasuryAddress_", "type": "address" } ], "name": "updateTreasuryAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "useBlacklist", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "useCustomAdapterParams", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
60e06040523480156200001157600080fd5b5060405162005b7138038062005b7183398101604081905262000034916200044c565b6040518060400160405280601581526020017f537761707369636c6520534c55534820546f6b656e0000000000000000000000815250604051806040016040528060058152602001640a698aaa6960db1b8152508383838383838383838381818080620000b0620000aa620001bc60201b60201c565b620001c0565b6001600160a01b0316608052505060ff1660a05250600b9050620000d583826200054b565b50600c620000e482826200054b565b5050506000620000f96200021060201b60201c565b90508060ff168360ff161115620001235760405163498294bf60e01b815260040160405180910390fd5b6200012f83826200062d565b6200013c90600a6200074c565b60c052505050506001600160a01b038816159450849350620001699250505057506001600160a01b038116155b15620001885760405163d92e233d60e01b815260040160405180910390fd5b600e80546001600160a01b0319166001600160a01b038516908117909155620001b2908562000215565b505050506200087e565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601290565b6001600160a01b038216620002705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b6200027e60008383620002eb565b80600a600082825462000292919062000764565b90915550506001600160a01b0382166000818152600860209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600d54600160a01b900460ff166200030257505050565b600d5460408051630338d6c360e41b815290516000926001600160a01b03169163338d6c3091600480830192869291908290030181865afa1580156200034c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200037691908101906200077a565b905060005b815181101562000423578181815181106200039a576200039a6200084c565b60200260200101516001600160a01b0316856001600160a01b03161480620003ef5750818181518110620003d257620003d26200084c565b60200260200101516001600160a01b0316846001600160a01b0316145b156200040e576040516309550c7760e01b815260040160405180910390fd5b806200041a8162000862565b9150506200037b565b5050505050565b505050565b80516001600160a01b03811681146200044757600080fd5b919050565b600080600080608085870312156200046357600080fd5b8451935062000475602086016200042f565b9250604085015160ff811681146200048c57600080fd5b91506200049c606086016200042f565b905092959194509250565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004d257607f821691505b602082108103620004f357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042a57600081815260208120601f850160051c81016020861015620005225750805b601f850160051c820191505b8181101562000543578281556001016200052e565b505050505050565b81516001600160401b03811115620005675762000567620004a7565b6200057f81620005788454620004bd565b84620004f9565b602080601f831160018114620005b757600084156200059e5750858301515b600019600386901b1c1916600185901b17855562000543565b600085815260208120601f198616915b82811015620005e857888601518255948401946001909101908401620005c7565b5085821015620006075787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111562000649576200064962000617565b92915050565b600181815b808511156200069057816000190482111562000674576200067462000617565b808516156200068257918102915b93841c939080029062000654565b509250929050565b600082620006a95750600162000649565b81620006b85750600062000649565b8160018114620006d15760028114620006dc57620006fc565b600191505062000649565b60ff841115620006f057620006f062000617565b50506001821b62000649565b5060208310610133831016604e8410600b841016171562000721575081810a62000649565b6200072d83836200064f565b806000190482111562000744576200074462000617565b029392505050565b60006200075d60ff84168362000698565b9392505050565b8082018082111562000649576200064962000617565b600060208083850312156200078e57600080fd5b82516001600160401b0380821115620007a657600080fd5b818501915085601f830112620007bb57600080fd5b815181811115620007d057620007d0620004a7565b8060051b604051601f19603f83011681018181108582111715620007f857620007f8620004a7565b6040529182528482019250838101850191888311156200081757600080fd5b938501935b82851015620008405762000830856200042f565b845293850193928501926200081c565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000877576200087762000617565b5060010190565b60805160a05160c051615276620008fb60003960008181613450015281816138890152613b68015260006107550152600081816109a701528181610c0901528181610f660152818161104c015281816112c501528181611ac3015281816120a3015281816128450152818161304e0152613a2101526152766000f3fe60806040526004361061038b5760003560e01c80638cfd8f5c116101dc578063c446183411610102578063e6a20ae6116100a0578063ed629c5c1161006f578063ed629c5c14610b99578063f2fde38b14610bb3578063f5ecbdbc14610bd3578063fc0c546a14610bf357600080fd5b8063e6a20ae614610b24578063eab45d9c14610b39578063eaffd49a14610b59578063eb8d72b714610b7957600080fd5b8063cbed8b9c116100dc578063cbed8b9c14610a7e578063d1deba1f14610a9e578063dd62ed3e14610ab1578063df2a5b3b14610b0457600080fd5b8063c446183414610a1b578063c482139414610a31578063c5f956af14610a5157600080fd5b8063a0712d681161017a578063a9059cbb11610149578063a9059cbb14610975578063b353aaa714610995578063b6cb4854146109c9578063baf3292d146109fb57600080fd5b8063a0712d68146108f5578063a457c2d714610915578063a4c51df514610935578063a6c3d1651461095557600080fd5b8063950c8a74116101b6578063950c8a741461084157806395d89b411461086e5780639bdb9812146108835780639f38369a146108d557600080fd5b80638cfd8f5c146107c95780638da5cb5b146108015780639358928b1461082c57600080fd5b80633f1f4fa4116102c1578063695ef6bf1161025f57806376203b481161022e57806376203b4814610710578063841e456114610723578063857749b01461074357806389e5a9001461077757600080fd5b8063695ef6bf1461068557806370a0823114610698578063715018a6146106db5780637533d788146106f057600080fd5b8063447705151161029b57806344770515146105ec5780634c42899a146106015780635b8c41e61461061657806366ad5c8a1461066557600080fd5b80633f1f4fa41461057f57806342966c68146105ac57806342d65a8d146105cc57600080fd5b806318160ddd1161032e578063313ce56711610308578063313ce567146104e8578063365260b41461050a578063395093511461053f5780633d8b38f61461055f57600080fd5b806318160ddd1461048957806320665864146104a857806323b872dd146104c857600080fd5b806307e0db171161036a57806307e0db1714610409578063095ea7b3146104295780630df374831461044957806310ddb1371461046957600080fd5b80621d35671461039057806301ffc9a7146103b257806306fdde03146103e7575b600080fd5b34801561039c57600080fd5b506103b06103ab366004613fac565b610c06565b005b3480156103be57600080fd5b506103d26103cd366004614040565b610e01565b60405190151581526020015b60405180910390f35b3480156103f357600080fd5b506103fc610e9a565b6040516103de91906140f0565b34801561041557600080fd5b506103b0610424366004614103565b610f2c565b34801561043557600080fd5b506103d2610444366004614140565b610fdb565b34801561045557600080fd5b506103b061046436600461416c565b610ff3565b34801561047557600080fd5b506103b0610484366004614103565b611012565b34801561049557600080fd5b50600a545b6040519081526020016103de565b3480156104b457600080fd5b506103b06104c3366004614198565b611090565b3480156104d457600080fd5b506103d26104e33660046141b3565b6110e2565b3480156104f457600080fd5b5060125b60405160ff90911681526020016103de565b34801561051657600080fd5b5061052a6105253660046141f4565b611106565b604080519283526020830191909152016103de565b34801561054b57600080fd5b506103d261055a366004614140565b61115b565b34801561056b57600080fd5b506103d261057a36600461425a565b6111a7565b34801561058b57600080fd5b5061049a61059a366004614103565b60036020526000908152604090205481565b3480156105b857600080fd5b506103b06105c73660046142ad565b611273565b3480156105d857600080fd5b506103b06105e736600461425a565b611280565b3480156105f857600080fd5b5061049a600081565b34801561060d57600080fd5b506104f8600081565b34801561062257600080fd5b5061049a61063136600461438a565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561067157600080fd5b506103b0610680366004613fac565b61132c565b6103b0610693366004614443565b6113e3565b3480156106a457600080fd5b5061049a6106b33660046144b7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205490565b3480156106e757600080fd5b506103b0611450565b3480156106fc57600080fd5b506103fc61070b366004614103565b611464565b6103b061071e3660046144d4565b6114fe565b34801561072f57600080fd5b506103b061073e3660046144b7565b6115ad565b34801561074f57600080fd5b506104f87f000000000000000000000000000000000000000000000000000000000000000081565b34801561078357600080fd5b50600d546107a49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103de565b3480156107d557600080fd5b5061049a6107e4366004614587565b600260209081526000928352604080842090915290825290205481565b34801561080d57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166107a4565b34801561083857600080fd5b5061049a611649565b34801561084d57600080fd5b506004546107a49073ffffffffffffffffffffffffffffffffffffffff1681565b34801561087a57600080fd5b506103fc611659565b34801561088f57600080fd5b506103d261089e36600461438a565b6007602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205460ff1681565b3480156108e157600080fd5b506103fc6108f0366004614103565b611668565b34801561090157600080fd5b506103b06109103660046142ad565b611768565b34801561092157600080fd5b506103d2610930366004614140565b611793565b34801561094157600080fd5b5061052a6109503660046145ba565b611869565b34801561096157600080fd5b506103b061097036600461425a565b6118f8565b34801561098157600080fd5b506103d2610990366004614140565b61199f565b3480156109a157600080fd5b506107a47f000000000000000000000000000000000000000000000000000000000000000081565b3480156109d557600080fd5b50600d546103d29074010000000000000000000000000000000000000000900460ff1681565b348015610a0757600080fd5b506103b0610a163660046144b7565b6119ad565b348015610a2757600080fd5b5061049a61271081565b348015610a3d57600080fd5b506103b0610a4c3660046144b7565b611a2f565b348015610a5d57600080fd5b50600e546107a49073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a8a57600080fd5b506103b0610a99366004614674565b611a7e565b6103b0610aac366004613fac565b611b2e565b348015610abd57600080fd5b5061049a610acc3660046146e3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260096020908152604080832093909416825291909152205490565b348015610b1057600080fd5b506103b0610b1f36600461471c565b611d04565b348015610b3057600080fd5b506104f8600181565b348015610b4557600080fd5b506103b0610b54366004614198565b611da8565b348015610b6557600080fd5b506103b0610b74366004614758565b611e0f565b348015610b8557600080fd5b506103b0610b9436600461425a565b611f4b565b348015610ba557600080fd5b506006546103d29060ff1681565b348015610bbf57600080fd5b506103b0610bce3660046144b7565b611fa5565b348015610bdf57600080fd5b506103fc610bee366004614821565b612059565b348015610bff57600080fd5b50306107a4565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610c75576040517f0d1ad4cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff861660009081526001602052604081208054610c939061486e565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbf9061486e565b8015610d0c5780601f10610ce157610100808354040283529160200191610d0c565b820191906000526020600020905b815481529060010190602001808311610cef57829003601f168201915b5050835193945050505085141580610d2357508051155b80610d4b575080516020820120604051610d4090889088906148bb565b604051809103902014155b15610d82576040517f326bc50200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610df88787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061214e92505050565b50505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1f7ecdf7000000000000000000000000000000000000000000000000000000001480610e9457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600b8054610ea99061486e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed59061486e565b8015610f225780601f10610ef757610100808354040283529160200191610f22565b820191906000526020600020905b815481529060010190602001808311610f0557829003601f168201915b5050505050905090565b610f34612212565b6040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307e0db17906024015b600060405180830381600087803b158015610fc057600080fd5b505af1158015610fd4573d6000803e3d6000fd5b5050505050565b600033610fe9818585612293565b5060019392505050565b610ffb612212565b61ffff909116600090815260036020526040902055565b61101a612212565b6040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906310ddb13790602401610fa6565b611098612212565b600d805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000336110f0858285612447565b6110fb85858561251e565b506001949350505050565b60008061114c8888888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061279f92505050565b91509150965096945050505050565b33600081815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190610fe990829086906111a29087906148fa565b612293565b61ffff8316600090815260016020526040812080548291906111c89061486e565b80601f01602080910402602001604051908101604052809291908181526020018280546111f49061486e565b80156112415780601f1061121657610100808354040283529160200191611241565b820191906000526020600020905b81548152906001019060200180831161122457829003601f168201915b5050505050905083836040516112589291906148bb565b60405180910390208180519060200120149150509392505050565b61127d33826128d1565b50565b611288612212565b6040517f42d65a8d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d906112fe90869086908690600401614956565b600060405180830381600087803b15801561131857600080fd5b505af1158015610df8573d6000803e3d6000fd5b333014611365576040517f1c9f02a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113db8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250612aa092505050565b505050505050565b6113db858585856113f760208701876144b7565b61140760408801602089016144b7565b6114146040890189614974565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250349250612b2f915050565b611458612212565b6114626000612c13565b565b6001602052600090815260409020805461147d9061486e565b80601f01602080910402602001604051908101604052809291908181526020018280546114a99061486e565b80156114f65780601f106114cb576101008083540402835291602001916114f6565b820191906000526020600020905b8154815290600101906020018083116114d957829003601f168201915b505050505081565b6115a28888888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a925061154b91505060208901896144b7565b61155b60408a0160208b016144b7565b61156860408b018b614974565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612c8892505050565b505050505050505050565b6115b5612212565b73ffffffffffffffffffffffffffffffffffffffff8116611602576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611654600a5490565b905090565b6060600c8054610ea99061486e565b61ffff811660009081526001602052604081208054606092919061168b9061486e565b80601f01602080910402602001604051908101604052809291908181526020018280546116b79061486e565b80156117045780601f106116d957610100808354040283529160200191611704565b820191906000526020600020905b8154815290600101906020018083116116e757829003601f168201915b505050505090508051600003611746576040517f039aee5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176160006014835161175991906149d9565b839190612d80565b9392505050565b611770612212565b600e5461127d9073ffffffffffffffffffffffffffffffffffffffff1682612efa565b33600081815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561185c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6110fb8286868403612293565b6000806118e68b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c9081908401838280828437600092019190915250612ffb92505050565b91509150995099975050505050505050565b611900612212565b818130604051602001611915939291906149ec565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815261ffff851660009081526001602052209061195e9082614a6b565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce83838360405161199293929190614956565b60405180910390a1505050565b600033610fe981858561251e565b6119b5612212565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b906020015b60405180910390a150565b611a37612212565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611a86612212565b6040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c90611b009088908890889088908890600401614b85565b600060405180830381600087803b158015611b1a57600080fd5b505af11580156115a2573d6000803e3d6000fd5b61ffff86166000908152600560205260408082209051611b5190889088906148bb565b908152604080516020928190038301902067ffffffffffffffff871660009081529252902054905080611bb0576040517fae5b261400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808383604051611bc19291906148bb565b604051809103902014611c00576040517f7c6953f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff87166000908152600560205260408082209051611c2390899089906148bb565b908152604080516020928190038301812067ffffffffffffffff8916600090815290845282902093909355601f88018290048202830182019052868252611cbc918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250612aa092505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051611cf3959493929190614bbe565b60405180910390a150505050505050565b611d0c612212565b80600003611d46576040517fe4ac3b3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611992565b611db0612212565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527f1584ad594a70cbe1e6515592e1272a987d922b097ead875069cebe8b40c004a490602001611a24565b333014611e48576040517f82a9b08c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e533086866130dc565b93508473ffffffffffffffffffffffffffffffffffffffff168a61ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf86604051611ea291815260200190565b60405180910390a36040517f7fcf35da00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861690637fcf35da908390611f0c908e908e908e908e908e908d908d908d90600401614bfa565b600060405180830381600088803b158015611f2657600080fd5b5087f1158015611f3a573d6000803e3d6000fd5b505050505050505050505050505050565b611f53612212565b61ffff83166000908152600160205260409020611f71828483614c56565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab83838360405161199293929190614956565b611fad612212565b73ffffffffffffffffffffffffffffffffffffffff8116612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401611853565b61127d81612c13565b6040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff808616600483015284166024820152306044820152606481018290526060907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063f5ecbdbc90608401600060405180830381865afa1580156120ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526121459190810190614d70565b95945050505050565b6000806121fc5a60966366ad5c8a60e01b898989896040516024016121769493929190614dde565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915230929190613155565b91509150816113db576113db86868686856131e0565b60005473ffffffffffffffffffffffffffffffffffffffff163314611462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611853565b73ffffffffffffffffffffffffffffffffffffffff8316612335576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401611853565b73ffffffffffffffffffffffffffffffffffffffff82166123d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401611853565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600960209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612518578181101561250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611853565b6125188484848403612293565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166125c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401611853565b73ffffffffffffffffffffffffffffffffffffffff8216612664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401611853565b61266f83838361327e565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604090205481811015612725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401611853565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526008602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127929086815260200190565b60405180910390a3612518565b6000806000612805876127b188613448565b6040805160006020820152602181019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166041830152805160298184030181526049909201905290565b6040517f40a7bb1000000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090612882908b90309086908b908b90600401614e1d565b6040805180830381865afa15801561289e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c29190614e7c565b92509250509550959350505050565b73ffffffffffffffffffffffffffffffffffffffff8216612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401611853565b6129808260008361327e565b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205481811015612a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401611853565b73ffffffffffffffffffffffffffffffffffffffff831660008181526008602090815260408083208686039055600a80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161243a565b505050565b6000612aac82826134b9565b905060ff8116612ac757612ac285858585613539565b610fd4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff821601612afd57612ac2858585856135e3565b6040517ffe3e832700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612b3d8882858161382c565b612b4686613881565b509050612b55898989846138c1565b905080600003612b91576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612ba0886127b184613448565b9050612bb0898288888888613900565b878a73ffffffffffffffffffffffffffffffffffffffff168a61ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a85604051612bfe91815260200190565b60405180910390a45098975050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000612ca18960018467ffffffffffffffff891661382c565b612caa87613881565b509050612cb98a8a8a846138c1565b905080600003612cf5576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612d0c338a612d0585613448565b8a8a613a9d565b9050612d1c8a8287878734613900565b888b73ffffffffffffffffffffffffffffffffffffffff168b61ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a85604051612d6a91815260200190565b60405180910390a4509998505050505050505050565b606081612d8e81601f6148fa565b1015612df6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401611853565b612e0082846148fa565b84511015612e6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401611853565b606082158015612e895760405191506000825260208201604052612ef1565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612ec2578051835260209283019201612eaa565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216612f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611853565b612f836000838361327e565b80600a6000828254612f9591906148fa565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600860209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080600061300e338a612d058b613448565b6040517f40a7bb1000000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906340a7bb109061308b908d90309086908b908b90600401614e1d565b6040805180830381865afa1580156130a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cb9190614e7c565b925092505097509795505050505050565b6000333073ffffffffffffffffffffffffffffffffffffffff86161480159061313157508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561314157613141858285612447565b61314c85858561251e565b50909392505050565b6000606060008060008661ffff1667ffffffffffffffff81111561317b5761317b6142c6565b6040519080825280601f01601f1916602001820160405280156131a5576020820181803683370190505b50905060008087516020890160008d8df191503d9250868311156131c7578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff168152602001908152602001600020856040516132119190614ea0565b90815260408051918290036020908101832067ffffffffffffffff88166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c9061326f9087908790879087908790614ebc565b60405180910390a15050505050565b600d5474010000000000000000000000000000000000000000900460ff166132a557505050565b600d54604080517f338d6c30000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163338d6c3091600480830192869291908290030181865afa158015613314573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261335a9190810190614f0f565b905060005b8151811015610fd45781818151811061337a5761337a614fb5565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806133ff57508181815181106133c8576133c8614fb5565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613436576040517f09550c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061344081614fe4565b91505061335f565b6000806134757f00000000000000000000000000000000000000000000000000000000000000008461504b565b905067ffffffffffffffff811115610e94576040517f6249331a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006134c68260016148fa565b83511015613530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401611853565b50016001015190565b60008061354583613aeb565b909250905073ffffffffffffffffffffffffffffffffffffffff821661356b5761dead91505b600061357682613b61565b9050613583878483613b97565b90508273ffffffffffffffffffffffffffffffffffffffff168761ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf836040516135d291815260200190565b60405180910390a350505050505050565b60008060008060006135f486613baa565b945094509450945094506000600760008b61ffff1661ffff168152602001908152602001600020896040516136299190614ea0565b908152604080516020928190038301902067ffffffffffffffff8b166000908152925281205460ff16915061365d85613b61565b9050816136ea5761366f8b3083613b97565b61ffff8c16600090815260076020526040908190209051919250600191613697908d90614ea0565b908152604080516020928190038301902067ffffffffffffffff8d1660009081529252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555b73ffffffffffffffffffffffffffffffffffffffff86163b61375b5760405173ffffffffffffffffffffffffffffffffffffffff871681527f9aedf5fdba8716db3b6705ca00150643309995d4f818a249ed6dde6677e7792d9060200160405180910390a150505050505050612518565b8a8a8a8a8a8a868a60008a61377a578b67ffffffffffffffff1661377c565b5a5b90506000806137ae5a609663eaffd49a60e01b8e8e8e8d8d8d8d8d60405160240161217698979695949392919061505f565b915091508115613807578751602089012060405161ffff8d16907fb8890edbfc1c74692f527444645f95489c3703cc2df42e4a366f5d06fa6cd884906137f9908e908e9086906150df565b60405180910390a250613814565b6138148b8b8b8b856131e0565b50505050505050505050505050505050505050505050565b60065460ff16156138485761384384848484613c50565b612518565b815115612518576040517f8fadcadb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806138ae7f00000000000000000000000000000000000000000000000000000000000000008461510e565b90506138ba81846149d9565b9150915091565b60003373ffffffffffffffffffffffffffffffffffffffff861681146138ec576138ec868285612447565b6138f686846128d1565b5090949350505050565b61ffff86166000908152600160205260408120805461391e9061486e565b80601f016020809104026020016040519081016040528092919081815260200182805461394a9061486e565b80156139975780601f1061396c57610100808354040283529160200191613997565b820191906000526020600020905b81548152906001019060200180831161397a57829003601f168201915b5050505050905080516000036139d9576040517fb86ac1ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6139e4878751613d03565b6040517fc580310000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c5803100908490613a62908b9086908c908c908c908c90600401615122565b6000604051808303818588803b158015613a7b57600080fd5b505af1158015613a8f573d6000803e3d6000fd5b505050505050505050505050565b60606001858573ffffffffffffffffffffffffffffffffffffffff89168587604051602001613ad196959493929190615196565b604051602081830303815290604052905095945050505050565b60008080613af984826134b9565b60ff16141580613b0b57508251602914155b15613b42576040517f7c6953f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b4d83600d613d5e565b9150613b5a836021613dee565b9050915091565b6000610e947f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416615229565b6000613ba38383612efa565b5092915050565b600080806060816001613bbd87836134b9565b60ff1614613bf7576040517f7c6953f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613c0286600d613d5e565b9350613c0f866021613dee565b9250613c1c866029613e6e565b9450613c29866049613dee565b9050613c456051808851613c3d91906149d9565b889190612d80565b915091939590929450565b6000613c5b83613eee565b61ffff808716600090815260026020908152604080832093891683529290529081205491925090613c8d9084906148fa565b905080600003613cc9576040517f3e7d93aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210156113db576040517fed43c3a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff821660009081526003602052604081205490819003613d2457506127105b80821115612a9b576040517f4416126600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613d6b8260146148fa565b83511015613dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e647300000000000000000000006044820152606401611853565b5001602001516c01000000000000000000000000900490565b6000613dfb8260086148fa565b83511015613e65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7436345f6f75744f66426f756e64730000000000000000000000006044820152606401611853565b50016008015190565b6000613e7b8260206148fa565b83511015613ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e647300000000000000000000006044820152606401611853565b50016020015190565b6000602282511015613f2c576040517fcef80ea300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506022015190565b803561ffff81168114613f4657600080fd5b919050565b60008083601f840112613f5d57600080fd5b50813567ffffffffffffffff811115613f7557600080fd5b602083019150836020828501011115613f8d57600080fd5b9250929050565b803567ffffffffffffffff81168114613f4657600080fd5b60008060008060008060808789031215613fc557600080fd5b613fce87613f34565b9550602087013567ffffffffffffffff80821115613feb57600080fd5b613ff78a838b01613f4b565b909750955085915061400b60408a01613f94565b9450606089013591508082111561402157600080fd5b5061402e89828a01613f4b565b979a9699509497509295939492505050565b60006020828403121561405257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461176157600080fd5b60005b8381101561409d578181015183820152602001614085565b50506000910152565b600081518084526140be816020860160208601614082565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061176160208301846140a6565b60006020828403121561411557600080fd5b61176182613f34565b73ffffffffffffffffffffffffffffffffffffffff8116811461127d57600080fd5b6000806040838503121561415357600080fd5b823561415e8161411e565b946020939093013593505050565b6000806040838503121561417f57600080fd5b61415e83613f34565b80358015158114613f4657600080fd5b6000602082840312156141aa57600080fd5b61176182614188565b6000806000606084860312156141c857600080fd5b83356141d38161411e565b925060208401356141e38161411e565b929592945050506040919091013590565b60008060008060008060a0878903121561420d57600080fd5b61421687613f34565b9550602087013594506040870135935061423260608801614188565b9250608087013567ffffffffffffffff81111561424e57600080fd5b61402e89828a01613f4b565b60008060006040848603121561426f57600080fd5b61427884613f34565b9250602084013567ffffffffffffffff81111561429457600080fd5b6142a086828701613f4b565b9497909650939450505050565b6000602082840312156142bf57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561433c5761433c6142c6565b604052919050565b600067ffffffffffffffff82111561435e5761435e6142c6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561439f57600080fd5b6143a884613f34565b9250602084013567ffffffffffffffff8111156143c457600080fd5b8401601f810186136143d557600080fd5b80356143e86143e382614344565b6142f5565b8181528760208385010111156143fd57600080fd5b8160208401602083013760006020838301015280945050505061442260408501613f94565b90509250925092565b60006060828403121561443d57600080fd5b50919050565b600080600080600060a0868803121561445b57600080fd5b85356144668161411e565b945061447460208701613f34565b93506040860135925060608601359150608086013567ffffffffffffffff81111561449e57600080fd5b6144aa8882890161442b565b9150509295509295909350565b6000602082840312156144c957600080fd5b81356117618161411e565b60008060008060008060008060e0898b0312156144f057600080fd5b88356144fb8161411e565b975061450960208a01613f34565b96506040890135955060608901359450608089013567ffffffffffffffff8082111561453457600080fd5b6145408c838d01613f4b565b909650945084915061455460a08c01613f94565b935060c08b013591508082111561456a57600080fd5b506145778b828c0161442b565b9150509295985092959890939650565b6000806040838503121561459a57600080fd5b6145a383613f34565b91506145b160208401613f34565b90509250929050565b600080600080600080600080600060e08a8c0312156145d857600080fd5b6145e18a613f34565b985060208a0135975060408a0135965060608a013567ffffffffffffffff8082111561460c57600080fd5b6146188d838e01613f4b565b909850965086915061462c60808d01613f94565b955061463a60a08d01614188565b945060c08c013591508082111561465057600080fd5b5061465d8c828d01613f4b565b915080935050809150509295985092959850929598565b60008060008060006080868803121561468c57600080fd5b61469586613f34565b94506146a360208701613f34565b935060408601359250606086013567ffffffffffffffff8111156146c657600080fd5b6146d288828901613f4b565b969995985093965092949392505050565b600080604083850312156146f657600080fd5b82356147018161411e565b915060208301356147118161411e565b809150509250929050565b60008060006060848603121561473157600080fd5b61473a84613f34565b925061474860208501613f34565b9150604084013590509250925092565b6000806000806000806000806000806101008b8d03121561477857600080fd5b6147818b613f34565b995060208b013567ffffffffffffffff8082111561479e57600080fd5b6147aa8e838f01613f4b565b909b5099508991506147be60408e01613f94565b985060608d0135975060808d013591506147d78261411e565b90955060a08c0135945060c08c013590808211156147f457600080fd5b506148018d828e01613f4b565b9150809450508092505060e08b013590509295989b9194979a5092959850565b6000806000806080858703121561483757600080fd5b61484085613f34565b935061484e60208601613f34565b9250604085013561485e8161411e565b9396929550929360600135925050565b600181811c9082168061488257607f821691505b60208210810361443d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610e9457610e946148cb565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61ffff8416815260406020820152600061214560408301848661490d565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126149a957600080fd5b83018035915067ffffffffffffffff8211156149c457600080fd5b602001915036819003821315613f8d57600080fd5b81810381811115610e9457610e946148cb565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b601f821115612a9b57600081815260208120601f850160051c81016020861015614a4c5750805b601f850160051c820191505b818110156113db57828155600101614a58565b815167ffffffffffffffff811115614a8557614a856142c6565b614a9981614a93845461486e565b84614a25565b602080601f831160018114614aec5760008415614ab65750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556113db565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614b3957888601518255948401946001909101908401614b1a565b5085821015614b7557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061ffff808816835280871660208401525084604083015260806060830152614bb360808301848661490d565b979650505050505050565b61ffff86168152608060208201526000614bdc60808301868861490d565b67ffffffffffffffff94909416604083015250606001529392505050565b61ffff8916815260c060208201526000614c1860c08301898b61490d565b67ffffffffffffffff8816604084015286606084015285608084015282810360a0840152614c4781858761490d565b9b9a5050505050505050505050565b67ffffffffffffffff831115614c6e57614c6e6142c6565b614c8283614c7c835461486e565b83614a25565b6000601f841160018114614cd45760008515614c9e5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610fd4565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015614d235786850135825560209485019460019092019101614d03565b5086821015614d5e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b600060208284031215614d8257600080fd5b815167ffffffffffffffff811115614d9957600080fd5b8201601f81018413614daa57600080fd5b8051614db86143e382614344565b818152856020838501011115614dcd57600080fd5b612145826020830160208601614082565b61ffff85168152608060208201526000614dfb60808301866140a6565b67ffffffffffffffff851660408401528281036060840152614bb381856140a6565b61ffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015260a060408201526000614e5660a08301866140a6565b84151560608401528281036080840152614e7081856140a6565b98975050505050505050565b60008060408385031215614e8f57600080fd5b505080516020909101519092909150565b60008251614eb2818460208701614082565b9190910192915050565b61ffff8616815260a060208201526000614ed960a08301876140a6565b67ffffffffffffffff861660408401528281036060840152614efb81866140a6565b90508281036080840152614e7081856140a6565b60006020808385031215614f2257600080fd5b825167ffffffffffffffff80821115614f3a57600080fd5b818501915085601f830112614f4e57600080fd5b815181811115614f6057614f606142c6565b8060051b9150614f718483016142f5565b8181529183018401918481019088841115614f8b57600080fd5b938501935b83851015614e705784519250614fa58361411e565b8282529385019390850190614f90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615015576150156148cb565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261505a5761505a61501c565b500490565b600061010061ffff8b16835280602084015261507d8184018b6140a6565b905067ffffffffffffffff8916604084015287606084015273ffffffffffffffffffffffffffffffffffffffff871660808401528560a084015282810360c08401526150c981866140a6565b9150508260e08301529998505050505050505050565b6060815260006150f260608301866140a6565b67ffffffffffffffff9490941660208301525060400152919050565b60008261511d5761511d61501c565b500690565b61ffff8716815260c06020820152600061513f60c08301886140a6565b828103604084015261515181886140a6565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a0850152905061518981856140a6565b9998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008760f81b16815285600182015260007fffffffffffffffff000000000000000000000000000000000000000000000000808760c01b166021840152856029840152808560c01b166049840152508251615217816051850160208701614082565b91909101605101979650505050505050565b8082028115828204841417610e9457610e946148cb56fea264697066735822122099aad9411188b2924c2b2572696b9e88bdeabdcbb049780acbae9dc1751c037064736f6c634300081300330000000000000000000000000000000000000000000a56fa5b99019a5c800000000000000000000000000000ae0a4fe86d75817d54d8b6d50388301c13f13b7e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7