[ { "inputs": [ { "internalType": "address", "name": "_lzEndpoint", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidDelegate", "type": "error" }, { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, { "inputs": [], "name": "InvalidLocalDecimals", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "options", "type": "bytes" } ], "name": "InvalidOptions", "type": "error" }, { "inputs": [], "name": "LzTokenUnavailable", "type": "error" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" } ], "name": "NoPeer", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "msgValue", "type": "uint256" } ], "name": "NotEnoughNative", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "OnlyEndpoint", "type": "error" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" } ], "name": "OnlyPeer", "type": "error" }, { "inputs": [], "name": "OnlySelf", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "result", "type": "bytes" } ], "name": "SimulationResult", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amountLD", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" } ], "name": "SlippageExceeded", "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": [ { "components": [ { "internalType": "uint32", "name": "eid", "type": "uint32" }, { "internalType": "uint16", "name": "msgType", "type": "uint16" }, { "internalType": "bytes", "name": "options", "type": "bytes" } ], "indexed": false, "internalType": "struct EnforcedOptionParam[]", "name": "_enforcedOptions", "type": "tuple[]" } ], "name": "EnforcedOptionSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "inspector", "type": "address" } ], "name": "MsgInspectorSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "guid", "type": "bytes32" }, { "indexed": false, "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "indexed": true, "internalType": "address", "name": "toAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountReceivedLD", "type": "uint256" } ], "name": "OFTReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "guid", "type": "bytes32" }, { "indexed": false, "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "indexed": true, "internalType": "address", "name": "fromAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountSentLD", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountReceivedLD", "type": "uint256" } ], "name": "OFTSent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "eid", "type": "uint32" }, { "indexed": false, "internalType": "bytes32", "name": "peer", "type": "bytes32" } ], "name": "PeerSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "preCrimeAddress", "type": "address" } ], "name": "PreCrimeSet", "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": "SEND", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SEND_AND_CALL", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "origin", "type": "tuple" } ], "name": "allowInitializePath", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [], "name": "approvalRequired", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_eid", "type": "uint32" }, { "internalType": "uint16", "name": "_msgType", "type": "uint16" }, { "internalType": "bytes", "name": "_extraOptions", "type": "bytes" } ], "name": "combineOptions", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimalConversionRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "endpoint", "outputs": [ { "internalType": "contract ILayerZeroEndpointV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" }, { "internalType": "uint16", "name": "msgType", "type": "uint16" } ], "name": "enforcedOptions", "outputs": [ { "internalType": "bytes", "name": "enforcedOption", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "", "type": "tuple" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "address", "name": "_sender", "type": "address" } ], "name": "isComposeMsgSender", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_eid", "type": "uint32" }, { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } ], "name": "isPeer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidityPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lubricating", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "_origin", "type": "tuple" }, { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "address", "name": "_executor", "type": "address" }, { "internalType": "bytes", "name": "_extraData", "type": "bytes" } ], "name": "lzReceive", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "origin", "type": "tuple" }, { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "bytes32", "name": "guid", "type": "bytes32" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "address", "name": "executor", "type": "address" }, { "internalType": "bytes", "name": "message", "type": "bytes" }, { "internalType": "bytes", "name": "extraData", "type": "bytes" } ], "internalType": "struct InboundPacket[]", "name": "_packets", "type": "tuple[]" } ], "name": "lzReceiveAndRevert", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "_origin", "type": "tuple" }, { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "address", "name": "_executor", "type": "address" }, { "internalType": "bytes", "name": "_extraData", "type": "bytes" } ], "name": "lzReceiveSimulate", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "msgInspector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_recipients", "type": "address[]" }, { "internalType": "uint256[]", "name": "_values", "type": "uint256[]" } ], "name": "multiTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "", "type": "uint32" }, { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "nextNonce", "outputs": [ { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oApp", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oAppVersion", "outputs": [ { "internalType": "uint64", "name": "senderVersion", "type": "uint64" }, { "internalType": "uint64", "name": "receiverVersion", "type": "uint64" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "oftVersion", "outputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }, { "internalType": "uint64", "name": "version", "type": "uint64" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" } ], "name": "peers", "outputs": [ { "internalType": "bytes32", "name": "peer", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "preCrime", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "internalType": "bytes32", "name": "to", "type": "bytes32" }, { "internalType": "uint256", "name": "amountLD", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" }, { "internalType": "bytes", "name": "extraOptions", "type": "bytes" }, { "internalType": "bytes", "name": "composeMsg", "type": "bytes" }, { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } ], "internalType": "struct SendParam", "name": "_sendParam", "type": "tuple" } ], "name": "quoteOFT", "outputs": [ { "components": [ { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" }, { "internalType": "uint256", "name": "maxAmountLD", "type": "uint256" } ], "internalType": "struct OFTLimit", "name": "oftLimit", "type": "tuple" }, { "components": [ { "internalType": "int256", "name": "feeAmountLD", "type": "int256" }, { "internalType": "string", "name": "description", "type": "string" } ], "internalType": "struct OFTFeeDetail[]", "name": "oftFeeDetails", "type": "tuple[]" }, { "components": [ { "internalType": "uint256", "name": "amountSentLD", "type": "uint256" }, { "internalType": "uint256", "name": "amountReceivedLD", "type": "uint256" } ], "internalType": "struct OFTReceipt", "name": "oftReceipt", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "internalType": "bytes32", "name": "to", "type": "bytes32" }, { "internalType": "uint256", "name": "amountLD", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" }, { "internalType": "bytes", "name": "extraOptions", "type": "bytes" }, { "internalType": "bytes", "name": "composeMsg", "type": "bytes" }, { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } ], "internalType": "struct SendParam", "name": "_sendParam", "type": "tuple" }, { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } ], "name": "quoteSend", "outputs": [ { "components": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "lzTokenFee", "type": "uint256" } ], "internalType": "struct MessagingFee", "name": "msgFee", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "internalType": "bytes32", "name": "to", "type": "bytes32" }, { "internalType": "uint256", "name": "amountLD", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" }, { "internalType": "bytes", "name": "extraOptions", "type": "bytes" }, { "internalType": "bytes", "name": "composeMsg", "type": "bytes" }, { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } ], "internalType": "struct SendParam", "name": "_sendParam", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "lzTokenFee", "type": "uint256" } ], "internalType": "struct MessagingFee", "name": "_fee", "type": "tuple" }, { "internalType": "address", "name": "_refundAddress", "type": "address" } ], "name": "send", "outputs": [ { "components": [ { "internalType": "bytes32", "name": "guid", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" }, { "components": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "lzTokenFee", "type": "uint256" } ], "internalType": "struct MessagingFee", "name": "fee", "type": "tuple" } ], "internalType": "struct MessagingReceipt", "name": "msgReceipt", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "amountSentLD", "type": "uint256" }, { "internalType": "uint256", "name": "amountReceivedLD", "type": "uint256" } ], "internalType": "struct OFTReceipt", "name": "oftReceipt", "type": "tuple" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegate", "type": "address" } ], "name": "setDelegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "eid", "type": "uint32" }, { "internalType": "uint16", "name": "msgType", "type": "uint16" }, { "internalType": "bytes", "name": "options", "type": "bytes" } ], "internalType": "struct EnforcedOptionParam[]", "name": "_enforcedOptions", "type": "tuple[]" } ], "name": "setEnforcedOptions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_liquidityPool", "type": "address" } ], "name": "setLiquidityPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_state", "type": "bool" } ], "name": "setLubricating", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_msgInspector", "type": "address" } ], "name": "setMsgInspector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_eid", "type": "uint32" }, { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } ], "name": "setPeer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_preCrime", "type": "address" } ], "name": "setPreCrime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sharedDecimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "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": "value", "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": "value", "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" } ]
60c06040526001600a60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620070b2380380620070b2833981810160405281019062000052919062000a51565b6040518060400160405280600681526020017f58484f4e455900000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f58484e590000000000000000000000000000000000000000000000000000000081525083838383620000d26200036660201b60201c565b8484818181818d600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200014e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000145919062000aa9565b60405180910390fd5b6200015f816200036f60201b60201c565b508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001fb576040517fb586360400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60805173ffffffffffffffffffffffffffffffffffffffff1663ca5eb5e1826040518263ffffffff1660e01b815260040162000238919062000aa9565b600060405180830381600087803b1580156200025357600080fd5b505af115801562000268573d6000803e3d6000fd5b5050505050505050620002806200043360201b60201c565b60ff168360ff161015620002c0576040517f1e9714b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620002d06200043360201b60201c565b83620002dd919062000b02565b600a620002eb919062000c9c565b60a08181525050505050816008908162000306919062000f5d565b50806009908162000318919062000f5d565b505050505050506200035e33620003346200036660201b60201c565b600a62000342919062000c9c565b62bebc2062000352919062001044565b6200043c60201b60201c565b50506200129c565b60006006905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006006905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004b15760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620004a8919062000aa9565b60405180910390fd5b620004c560008383620004c960201b60201c565b5050565b620004dc8383836200074260201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff16600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603620005ff57620005436200097560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620005b75750620005886200097560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b620005f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f09062001116565b60405180910390fd5b6200073d565b600a60009054906101000a900460ff168015620006575750620006276200097560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015620006b25750600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156200073c57620006c86200036660201b60201c565b600a620006d6919062000c9c565b6207a120620006e6919062001044565b620006f7836200099e60201b60201c565b11156200073b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073290620011d4565b60405180910390fd5b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620007985780600760008282546200078b9190620011f6565b9250508190555062000870565b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000828578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200081f9392919062001242565b60405180910390fd5b818103600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008bb578060076000828254039250508190555062000909565b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200096891906200127f565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a1982620009ec565b9050919050565b62000a2b8162000a0c565b811462000a3757600080fd5b50565b60008151905062000a4b8162000a20565b92915050565b6000806040838503121562000a6b5762000a6a620009e7565b5b600062000a7b8582860162000a3a565b925050602062000a8e8582860162000a3a565b9150509250929050565b62000aa38162000a0c565b82525050565b600060208201905062000ac0600083018462000a98565b92915050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b0f8262000ac6565b915062000b1c8362000ac6565b9250828203905060ff81111562000b385762000b3762000ad3565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111562000b9d5780860481111562000b755762000b7462000ad3565b5b600185161562000b855780820291505b808102905062000b958562000b3e565b945062000b55565b94509492505050565b60008262000bb8576001905062000c8b565b8162000bc8576000905062000c8b565b816001811462000be1576002811462000bec5762000c22565b600191505062000c8b565b60ff84111562000c015762000c0062000ad3565b5b8360020a91508482111562000c1b5762000c1a62000ad3565b5b5062000c8b565b5060208310610133831016604e8410600b841016171562000c5c5782820a90508381111562000c565762000c5562000ad3565b5b62000c8b565b62000c6b848484600162000b4b565b9250905081840481111562000c855762000c8462000ad3565b5b81810290505b9392505050565b6000819050919050565b600062000ca98262000c92565b915062000cb68362000ac6565b925062000ce57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ba6565b905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d6f57607f821691505b60208210810362000d855762000d8462000d27565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000def7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000db0565b62000dfb868362000db0565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000e3e62000e3862000e328462000c92565b62000e13565b62000c92565b9050919050565b6000819050919050565b62000e5a8362000e1d565b62000e7262000e698262000e45565b84845462000dbd565b825550505050565b600090565b62000e8962000e7a565b62000e9681848462000e4f565b505050565b5b8181101562000ebe5762000eb260008262000e7f565b60018101905062000e9c565b5050565b601f82111562000f0d5762000ed78162000d8b565b62000ee28462000da0565b8101602085101562000ef2578190505b62000f0a62000f018562000da0565b83018262000e9b565b50505b505050565b600082821c905092915050565b600062000f326000198460080262000f12565b1980831691505092915050565b600062000f4d838362000f1f565b9150826002028217905092915050565b62000f688262000ced565b67ffffffffffffffff81111562000f845762000f8362000cf8565b5b62000f90825462000d56565b62000f9d82828562000ec2565b600060209050601f83116001811462000fd5576000841562000fc0578287015190505b62000fcc858262000f3f565b8655506200103c565b601f19841662000fe58662000d8b565b60005b828110156200100f5784890151825560018201915060208501945060208101905062000fe8565b868310156200102f57848901516200102b601f89168262000f1f565b8355505b6001600288020188555050505b505050505050565b6000620010518262000c92565b91506200105e8362000c92565b92508282026200106e8162000c92565b9150828204841483151762001088576200108762000ad3565b5b5092915050565b600082825260208201905092915050565b7f50617469656e6365202d2054726164696e67204e6f742053746172746564205960008201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b6000620010fe6023836200108f565b91506200110b82620010a0565b604082019050919050565b600060208201905081810360008301526200113181620010ef565b9050919050565b7f4a7573742067657474696e67207761726d65642075702c206c696d6974206f6660008201527f203530302c3030302058484e59207065722077616c6c657420756e74696c204c60208201527f75627269636174696f6e20697320636f6d706c65746521000000000000000000604082015250565b6000620011bc6057836200108f565b9150620011c98262001138565b606082019050919050565b60006020820190508181036000830152620011ef81620011ad565b9050919050565b6000620012038262000c92565b9150620012108362000c92565b92508282019050808211156200122b576200122a62000ad3565b5b92915050565b6200123c8162000c92565b82525050565b600060608201905062001259600083018662000a98565b62001268602083018562001231565b62001277604083018462001231565b949350505050565b600060208201905062001296600083018462001231565b92915050565b60805160a051615da36200130f60003960008181611397015281816128df01528181612900015281816129aa0152612ce1015260008181610d430152818161115301528181611a5a01528181611f48015281816123900152818161260601528181612e550152612f500152615da36000f3fe6080604052600436106102885760003560e01c806370a082311161015a578063b98bd070116100c1578063d045a0dc1161007a578063d045a0dc14610a12578063d424388514610a2e578063dd62ed3e14610a57578063f2fde38b14610a94578063fc0c546a14610abd578063ff7bd03d14610ae857610288565b8063b98bd070146108f9578063bb0b6a5314610922578063bc70b3541461095f578063bd815db01461099c578063c7c7f5b3146109b8578063ca5eb5e1146109e957610288565b806395afda0c1161011357806395afda0c146107e557806395d89b4114610810578063963efcaa1461083b5780639f68b96414610866578063a9059cbb14610891578063b731ea0a146108ce57610288565b806370a08231146106c1578063715018a6146106fe5780637d25a05e1461071557806382413eac14610752578063857749b01461078f5780638da5cb5b146107ba57610288565b80631f5e1334116101fe57806352ae2879116101b757806352ae28791461059d5780635535d461146105c85780635a0dfe4d146106055780635e280f1114610642578063665a11ca1461066d5780636fc1b31e1461069857610288565b80631f5e13341461047b57806323b872dd146104a6578063313ce567146104e35780633400288b1461050e5780633b6f743b146105375780634bc3e7db1461057457610288565b806313137d651161025057806313137d6514610388578063134d4f25146103a4578063156a0d0f146103cf57806317442b70146103fb57806318160ddd146104275780631e89d5451461045257610288565b8063018770201461028d57806306fdde03146102b6578063095ea7b3146102e15780630d35b4151461031e578063111ecdad1461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613646565b610b25565b005b3480156102c257600080fd5b506102cb610b71565b6040516102d89190613703565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061375b565b610c03565b60405161031591906137b6565b60405180910390f35b34801561032a57600080fd5b50610345600480360381019061034091906137f5565b610c26565b60405161035493929190613a0d565b60405180910390f35b34801561036957600080fd5b50610372610d04565b60405161037f9190613a5a565b60405180910390f35b6103a2600480360381019061039d9190613b2f565b610d2a565b005b3480156103b057600080fd5b506103b9610e4c565b6040516103c69190613c08565b60405180910390f35b3480156103db57600080fd5b506103e4610e51565b6040516103f2929190613c81565b60405180910390f35b34801561040757600080fd5b50610410610e7f565b60405161041e929190613caa565b60405180910390f35b34801561043357600080fd5b5061043c610e8e565b6040516104499190613ce2565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190613efe565b610e98565b005b34801561048757600080fd5b50610490610f39565b60405161049d9190613c08565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190613f76565b610f3e565b6040516104da91906137b6565b60405180910390f35b3480156104ef57600080fd5b506104f8610f6d565b6040516105059190613fe5565b60405180910390f35b34801561051a57600080fd5b506105356004803603810190610530919061403c565b610f76565b005b34801561054357600080fd5b5061055e600480360381019061055991906140a8565b610fdf565b60405161056b9190614133565b60405180910390f35b34801561058057600080fd5b5061059b6004803603810190610596919061414e565b61104b565b005b3480156105a957600080fd5b506105b2611070565b6040516105bf9190613a5a565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906141a7565b611078565b6040516105fc919061423c565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061403c565b611125565b60405161063991906137b6565b60405180910390f35b34801561064e57600080fd5b50610657611151565b60405161066491906142bd565b60405180910390f35b34801561067957600080fd5b50610682611175565b60405161068f9190613a5a565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190613646565b61119b565b005b3480156106cd57600080fd5b506106e860048036038101906106e39190613646565b61121e565b6040516106f59190613ce2565b60405180910390f35b34801561070a57600080fd5b50610713611267565b005b34801561072157600080fd5b5061073c6004803603810190610737919061403c565b61127b565b60405161074991906142d8565b60405180910390f35b34801561075e57600080fd5b50610779600480360381019061077491906142f3565b611283565b60405161078691906137b6565b60405180910390f35b34801561079b57600080fd5b506107a46112be565b6040516107b19190613fe5565b60405180910390f35b3480156107c657600080fd5b506107cf6112c7565b6040516107dc9190613a5a565b60405180910390f35b3480156107f157600080fd5b506107fa6112f0565b60405161080791906137b6565b60405180910390f35b34801561081c57600080fd5b50610825611303565b6040516108329190613703565b60405180910390f35b34801561084757600080fd5b50610850611395565b60405161085d9190613ce2565b60405180910390f35b34801561087257600080fd5b5061087b6113b9565b60405161088891906137b6565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b3919061375b565b6113be565b6040516108c591906137b6565b60405180910390f35b3480156108da57600080fd5b506108e36113e1565b6040516108f09190613a5a565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b91906143bd565b611407565b005b34801561092e57600080fd5b506109496004803603810190610944919061440a565b61158a565b6040516109569190614446565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190614461565b6115a2565b604051610993919061423c565b60405180910390f35b6109b660048036038101906109b1919061452b565b61176c565b005b6109d260048036038101906109cd9190614597565b611945565b6040516109e0929190614695565b60405180910390f35b3480156109f557600080fd5b50610a106004803603810190610a0b9190613646565b611a50565b005b610a2c6004803603810190610a279190613b2f565b611ae6565b005b348015610a3a57600080fd5b50610a556004803603810190610a509190613646565b611b63565b005b348015610a6357600080fd5b50610a7e6004803603810190610a7991906146be565b611be6565b604051610a8b9190613ce2565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab69190613646565b611c6d565b005b348015610ac957600080fd5b50610ad2611cf3565b604051610adf9190613a5a565b60405180910390f35b348015610af457600080fd5b50610b0f6004803603810190610b0a91906146fe565b611cfb565b604051610b1c91906137b6565b60405180910390f35b610b2d611d3c565b80600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060088054610b809061475a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bac9061475a565b8015610bf95780601f10610bce57610100808354040283529160200191610bf9565b820191906000526020600020905b815481529060010190602001808311610bdc57829003601f168201915b5050505050905090565b600080610c0e611dc3565b9050610c1b818585611dcb565b600191505092915050565b610c2e613538565b6060610c38613552565b60008067ffffffffffffffff801690506040518060400160405280838152602001828152509450600067ffffffffffffffff811115610c7a57610c79613cfd565b5b604051908082528060200260200182016040528015610cb357816020015b610ca061356c565b815260200190600190039081610c985790505b509350600080610cde886040013589606001358a6000016020810190610cd9919061440a565b611ddd565b915091506040518060400160405280838152602001828152509450505050509193909250565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dba57336040517f91ac5e4f000000000000000000000000000000000000000000000000000000008152600401610db19190613a5a565b60405180910390fd5b8660200135610dda886000016020810190610dd5919061440a565b611e3d565b14610e3457866000016020810190610df2919061440a565b87602001356040517fc26bebcc000000000000000000000000000000000000000000000000000000008152600401610e2b92919061479a565b60405180910390fd5b610e4387878787878787611eb2565b50505050505050565b600281565b6000807f02e49c2c000000000000000000000000000000000000000000000000000000006001915091509091565b60008060016002915091509091565b6000600754905090565b8051825114610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed39061480f565b60405180910390fd5b60005b8251811015610f3457610f26838281518110610efe57610efd61482f565b5b6020026020010151838381518110610f1957610f1861482f565b5b60200260200101516113be565b508080600101915050610edf565b505050565b600181565b600080610f49611dc3565b9050610f56858285612048565b610f618585856120dc565b60019150509392505050565b60006006905090565b610f7e611d3c565b80600160008463ffffffff1663ffffffff168152602001908152602001600020819055507f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b8282604051610fd392919061479a565b60405180910390a15050565b610fe7613586565b600061100e84604001358560600135866000016020810190611009919061440a565b611ddd565b91505060008061101e86846121d0565b91509150611040866000016020810190611038919061440a565b838388612386565b935050505092915050565b611053611d3c565b80600a60006101000a81548160ff02191690831515021790555050565b600030905090565b60036020528160005260406000206020528060005260406000206000915091505080546110a49061475a565b80601f01602080910402602001604051908101604052809291908181526020018280546110d09061475a565b801561111d5780601f106110f25761010080835404028352916020019161111d565b820191906000526020600020905b81548152906001019060200180831161110057829003601f168201915b505050505081565b600081600160008563ffffffff1663ffffffff1681526020019081526020016000205414905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111a3611d3c565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197816040516112139190613a5a565b60405180910390a150565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61126f611d3c565b6112796000612469565b565b600092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050949350505050565b60006006905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900460ff1681565b6060600980546113129061475a565b80601f016020809104026020016040519081016040528092919081815260200182805461133e9061475a565b801561138b5780601f106113605761010080835404028352916020019161138b565b820191906000526020600020905b81548152906001019060200180831161136e57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600090565b6000806113c9611dc3565b90506113d68185856120dc565b600191505092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61140f611d3c565b60005b8282905081101561154c576114598383838181106114335761143261482f565b5b9050602002810190611445919061486d565b80604001906114549190614895565b61252d565b82828281811061146c5761146b61482f565b5b905060200281019061147e919061486d565b806040019061148d9190614895565b600360008686868181106114a4576114a361482f565b5b90506020028101906114b6919061486d565b60000160208101906114c8919061440a565b63ffffffff1663ffffffff16815260200190815260200160002060008686868181106114f7576114f661482f565b5b9050602002810190611509919061486d565b602001602081019061151b91906148f8565b61ffff1661ffff168152602001908152602001600020918261153e929190614ad2565b508080600101915050611412565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b674828260405161157e929190614def565b60405180910390a15050565b60016020528060005260406000206000915090505481565b60606000600360008763ffffffff1663ffffffff16815260200190815260200160002060008661ffff1661ffff16815260200190815260200160002080546115e99061475a565b80601f01602080910402602001604051908101604052809291908181526020018280546116159061475a565b80156116625780601f1061163757610100808354040283529160200191611662565b820191906000526020600020905b81548152906001019060200180831161164557829003601f168201915b5050505050905060008151036116bf5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050915050611764565b600084849050036116d35780915050611764565b60028484905010611725576116e8848461252d565b80848460029080926116fc93929190614e1d565b60405160200161170e93929190614eb9565b604051602081830303815290604052915050611764565b83836040517f9a6d49cd00000000000000000000000000000000000000000000000000000000815260040161175b929190614f0c565b60405180910390fd5b949350505050565b60005b82829050811015611894573683838381811061178e5761178d61482f565b5b90506020028101906117a09190614f30565b90506117c88160000160000160208101906117bb919061440a565b8260000160200135611125565b6117d25750611887565b3073ffffffffffffffffffffffffffffffffffffffff1663d045a0dc8260c00135836000018460a001358580610100019061180d9190614895565b8760e00160208101906118209190613646565b888061012001906118319190614895565b6040518963ffffffff1660e01b8152600401611853979695949392919061500d565b6000604051808303818588803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505050505b808060010191505061176f565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa1580156118e0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906119099190615118565b6040517f8351eea700000000000000000000000000000000000000000000000000000000815260040161193c919061423c565b60405180910390fd5b61194d6135a0565b611955613552565b60008061197e33886040013589606001358a6000016020810190611979919061440a565b6125a7565b9150915060008061198f89846121d0565b915091506119c28960000160208101906119a9919061440a565b83838b8036038101906119bc91906151b6565b8b6125d0565b955060405180604001604052808581526020018481525094503373ffffffffffffffffffffffffffffffffffffffff1686600001517f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a8b6000016020810190611a2b919061440a565b8787604051611a3c939291906151e3565b60405180910390a350505050935093915050565b611a58611d3c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca5eb5e1826040518263ffffffff1660e01b8152600401611ab19190613a5a565b600060405180830381600087803b158015611acb57600080fd5b505af1158015611adf573d6000803e3d6000fd5b5050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b4b576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b5a878787878787876126ec565b50505050505050565b611b6b611d3c565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776081604051611bdb9190613a5a565b60405180910390a150565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c75611d3c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ce75760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611cde9190613a5a565b60405180910390fd5b611cf081612469565b50565b600030905090565b6000816020013560016000846000016020810190611d19919061440a565b63ffffffff1663ffffffff16815260200190815260200160002054149050919050565b611d44611dc3565b73ffffffffffffffffffffffffffffffffffffffff16611d626112c7565b73ffffffffffffffffffffffffffffffffffffffff1614611dc157611d85611dc3565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611db89190613a5a565b60405180910390fd5b565b600033905090565b611dd88383836001612704565b505050565b600080611de9856128db565b915081905083811015611e355780846040517f71c4efed000000000000000000000000000000000000000000000000000000008152600401611e2c92919061521a565b60405180910390fd5b935093915050565b600080600160008463ffffffff1663ffffffff1681526020019081526020016000205490506000801b8103611ea957826040517ff6ff4fb7000000000000000000000000000000000000000000000000000000008152600401611ea09190615243565b60405180910390fd5b80915050919050565b6000611ec6611ec1878761293b565b612967565b90506000611ef882611ee0611edb8a8a612974565b6129a6565b8b6000016020810190611ef3919061440a565b6129e5565b9050611f0487876129fb565b15611fda576000611f448a6040016020810190611f21919061525e565b8b6000016020810190611f34919061440a565b84611f3f8c8c612a0f565b612a72565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637cb59012848b6000856040518563ffffffff1660e01b8152600401611fa694939291906152c6565b600060405180830381600087803b158015611fc057600080fd5b505af1158015611fd4573d6000803e3d6000fd5b50505050505b8173ffffffffffffffffffffffffffffffffffffffff16887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c8b6000016020810190612026919061440a565b84604051612035929190615312565b60405180910390a3505050505050505050565b60006120548484611be6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120d657818110156120c6578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016120bd9392919061533b565b60405180910390fd5b6120d584848484036000612704565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361214e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016121459190613a5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121c05760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016121b79190613a5a565b60405180910390fd5b6121cb838383612aa4565b505050565b606080600061223e85602001356121e686612cdd565b878060a001906121f69190614895565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612d12565b8092508194505050600081612254576001612257565b60025b905061228586600001602081019061226f919061440a565b828880608001906122809190614895565b6115a2565b9250600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237d57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663043a78eb85856040518363ffffffff1660e01b815260040161233a929190615372565b602060405180830381865afa158015612357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237b91906153be565b505b50509250929050565b61238e613586565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016123ea89611e3d565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b815260040161241f9291906154b0565b6040805180830381865afa15801561243b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245f9190615545565b9050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000828260009060029261254393929190614e1d565b9061254e919061559e565b60f01c9050600361ffff168161ffff16146125a25782826040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401612599929190614f0c565b60405180910390fd5b505050565b6000806125b5858585611ddd565b80925081935050506125c78683612d81565b94509492505050565b6125d86135a0565b60006125e78460000151612e03565b9050600084602001511115612604576126038460200151612e51565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016126618c611e3d565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161269d9291906154b0565b60806040518083038185885af11580156126bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126e0919061568b565b91505095945050505050565b6126fb87878787878787611eb2565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127765760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161276d9190613a5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127e85760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016127df9190613a5a565b60405180910390fd5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156128d5578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516128cc9190613ce2565b60405180910390a35b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008361292a9190615716565b6129349190615747565b9050919050565b60008282600090602060ff169261295493929190614e1d565b9061295f9190615789565b905092915050565b60008160001c9050919050565b60008282602060ff1690602860ff169261299093929190614e1d565b9061299b9190615814565b60c01c905092915050565b60007f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff166129de9190615747565b9050919050565b60006129f18484612f9b565b8290509392505050565b6000602860ff168383905011905092915050565b60608282602860ff16908092612a2793929190614e1d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905092915050565b606084848484604051602001612a8b9493929190615900565b6040516020818303038152906040529050949350505050565b612aaf83838361301d565b600073ffffffffffffffffffffffffffffffffffffffff16600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612bbc57612b0d6112c7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b785750612b496112c7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b612bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bae906159bc565b60405180910390fd5b612cd8565b600a60009054906101000a900460ff168015612c0b5750612bdb6112c7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c655750600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612cd757612c72610f6d565b600a612c7e9190615b0f565b6207a120612c8c9190615747565b612c958361121e565b1115612cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccd90615bf2565b60405180910390fd5b5b5b505050565b60007f000000000000000000000000000000000000000000000000000000000000000082612d0b9190615716565b9050919050565b6060600080835111905080612d48578484604051602001612d34929190615c33565b604051602081830303815290604052612d77565b8484612d5333613245565b85604051602001612d679493929190615c5f565b6040516020818303038152906040525b9150935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612df35760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401612dea9190613a5a565b60405180910390fd5b612dff82600083612aa4565b5050565b6000813414612e4957346040517f9f704120000000000000000000000000000000000000000000000000000000008152600401612e409190613ce2565b60405180910390fd5b819050919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee29190615cbe565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612f4a576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f97337f0000000000000000000000000000000000000000000000000000000000000000848473ffffffffffffffffffffffffffffffffffffffff16613268909392919063ffffffff16565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361300d5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016130049190613a5a565b60405180910390fd5b61301960008383612aa4565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361306f5780600760008282546130639190615ceb565b92505081905550613144565b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130fc578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016130f39392919061533b565b60405180910390fd5b818103600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361318d57806007600082825403925050819055506131db565b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132389190613ce2565b60405180910390a3505050565b60008173ffffffffffffffffffffffffffffffffffffffff1660001b9050919050565b6132e4848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161329d93929190615d1f565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506132ea565b50505050565b6000613315828473ffffffffffffffffffffffffffffffffffffffff1661338190919063ffffffff16565b9050600081511415801561333a57508080602001905181019061333891906153be565b155b1561337c57826040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016133739190613a5a565b60405180910390fd5b505050565b606061338f83836000613397565b905092915050565b6060814710156133de57306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016133d59190613a5a565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516134079190615d56565b60006040518083038185875af1925050503d8060008114613444576040519150601f19603f3d011682016040523d82523d6000602084013e613449565b606091505b5091509150613459868383613464565b925050509392505050565b60608261347957613474826134f3565b6134eb565b600082511480156134a1575060008473ffffffffffffffffffffffffffffffffffffffff163b145b156134e357836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016134da9190613a5a565b60405180910390fd5b8190506134ec565b5b9392505050565b6000815111156135065780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051806040016040528060008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060008152602001606081525090565b604051806040016040528060008152602001600081525090565b604051806060016040528060008019168152602001600067ffffffffffffffff1681526020016135ce613586565b81525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613613826135e8565b9050919050565b61362381613608565b811461362e57600080fd5b50565b6000813590506136408161361a565b92915050565b60006020828403121561365c5761365b6135de565b5b600061366a84828501613631565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136ad578082015181840152602081019050613692565b60008484015250505050565b6000601f19601f8301169050919050565b60006136d582613673565b6136df818561367e565b93506136ef81856020860161368f565b6136f8816136b9565b840191505092915050565b6000602082019050818103600083015261371d81846136ca565b905092915050565b6000819050919050565b61373881613725565b811461374357600080fd5b50565b6000813590506137558161372f565b92915050565b60008060408385031215613772576137716135de565b5b600061378085828601613631565b925050602061379185828601613746565b9150509250929050565b60008115159050919050565b6137b08161379b565b82525050565b60006020820190506137cb60008301846137a7565b92915050565b600080fd5b600060e082840312156137ec576137eb6137d1565b5b81905092915050565b60006020828403121561380b5761380a6135de565b5b600082013567ffffffffffffffff811115613829576138286135e3565b5b613835848285016137d6565b91505092915050565b61384781613725565b82525050565b604082016000820151613863600085018261383e565b506020820151613876602085018261383e565b50505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b6138bb816138a8565b82525050565b600082825260208201905092915050565b60006138dd82613673565b6138e781856138c1565b93506138f781856020860161368f565b613900816136b9565b840191505092915050565b600060408301600083015161392360008601826138b2565b506020830151848203602086015261393b82826138d2565b9150508091505092915050565b6000613954838361390b565b905092915050565b6000602082019050919050565b60006139748261387c565b61397e8185613887565b93508360208202850161399085613898565b8060005b858110156139cc57848403895281516139ad8582613948565b94506139b88361395c565b925060208a01995050600181019050613994565b50829750879550505050505092915050565b6040820160008201516139f4600085018261383e565b506020820151613a07602085018261383e565b50505050565b600060a082019050613a22600083018661384d565b8181036040830152613a348185613969565b9050613a4360608301846139de565b949350505050565b613a5481613608565b82525050565b6000602082019050613a6f6000830184613a4b565b92915050565b600060608284031215613a8b57613a8a6137d1565b5b81905092915050565b6000819050919050565b613aa781613a94565b8114613ab257600080fd5b50565b600081359050613ac481613a9e565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613aef57613aee613aca565b5b8235905067ffffffffffffffff811115613b0c57613b0b613acf565b5b602083019150836001820283011115613b2857613b27613ad4565b5b9250929050565b600080600080600080600060e0888a031215613b4e57613b4d6135de565b5b6000613b5c8a828b01613a75565b9750506060613b6d8a828b01613ab5565b965050608088013567ffffffffffffffff811115613b8e57613b8d6135e3565b5b613b9a8a828b01613ad9565b955095505060a0613bad8a828b01613631565b93505060c088013567ffffffffffffffff811115613bce57613bcd6135e3565b5b613bda8a828b01613ad9565b925092505092959891949750929550565b600061ffff82169050919050565b613c0281613beb565b82525050565b6000602082019050613c1d6000830184613bf9565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c5881613c23565b82525050565b600067ffffffffffffffff82169050919050565b613c7b81613c5e565b82525050565b6000604082019050613c966000830185613c4f565b613ca36020830184613c72565b9392505050565b6000604082019050613cbf6000830185613c72565b613ccc6020830184613c72565b9392505050565b613cdc81613725565b82525050565b6000602082019050613cf76000830184613cd3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613d35826136b9565b810181811067ffffffffffffffff82111715613d5457613d53613cfd565b5b80604052505050565b6000613d676135d4565b9050613d738282613d2c565b919050565b600067ffffffffffffffff821115613d9357613d92613cfd565b5b602082029050602081019050919050565b6000613db7613db284613d78565b613d5d565b90508083825260208201905060208402830185811115613dda57613dd9613ad4565b5b835b81811015613e035780613def8882613631565b845260208401935050602081019050613ddc565b5050509392505050565b600082601f830112613e2257613e21613aca565b5b8135613e32848260208601613da4565b91505092915050565b600067ffffffffffffffff821115613e5657613e55613cfd565b5b602082029050602081019050919050565b6000613e7a613e7584613e3b565b613d5d565b90508083825260208201905060208402830185811115613e9d57613e9c613ad4565b5b835b81811015613ec65780613eb28882613746565b845260208401935050602081019050613e9f565b5050509392505050565b600082601f830112613ee557613ee4613aca565b5b8135613ef5848260208601613e67565b91505092915050565b60008060408385031215613f1557613f146135de565b5b600083013567ffffffffffffffff811115613f3357613f326135e3565b5b613f3f85828601613e0d565b925050602083013567ffffffffffffffff811115613f6057613f5f6135e3565b5b613f6c85828601613ed0565b9150509250929050565b600080600060608486031215613f8f57613f8e6135de565b5b6000613f9d86828701613631565b9350506020613fae86828701613631565b9250506040613fbf86828701613746565b9150509250925092565b600060ff82169050919050565b613fdf81613fc9565b82525050565b6000602082019050613ffa6000830184613fd6565b92915050565b600063ffffffff82169050919050565b61401981614000565b811461402457600080fd5b50565b60008135905061403681614010565b92915050565b60008060408385031215614053576140526135de565b5b600061406185828601614027565b925050602061407285828601613ab5565b9150509250929050565b6140858161379b565b811461409057600080fd5b50565b6000813590506140a28161407c565b92915050565b600080604083850312156140bf576140be6135de565b5b600083013567ffffffffffffffff8111156140dd576140dc6135e3565b5b6140e9858286016137d6565b92505060206140fa85828601614093565b9150509250929050565b60408201600082015161411a600085018261383e565b50602082015161412d602085018261383e565b50505050565b60006040820190506141486000830184614104565b92915050565b600060208284031215614164576141636135de565b5b600061417284828501614093565b91505092915050565b61418481613beb565b811461418f57600080fd5b50565b6000813590506141a18161417b565b92915050565b600080604083850312156141be576141bd6135de565b5b60006141cc85828601614027565b92505060206141dd85828601614192565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b600061420e826141e7565b61421881856141f2565b935061422881856020860161368f565b614231816136b9565b840191505092915050565b600060208201905081810360008301526142568184614203565b905092915050565b6000819050919050565b600061428361427e614279846135e8565b61425e565b6135e8565b9050919050565b600061429582614268565b9050919050565b60006142a78261428a565b9050919050565b6142b78161429c565b82525050565b60006020820190506142d260008301846142ae565b92915050565b60006020820190506142ed6000830184613c72565b92915050565b60008060008060a0858703121561430d5761430c6135de565b5b600061431b87828801613a75565b945050606085013567ffffffffffffffff81111561433c5761433b6135e3565b5b61434887828801613ad9565b9350935050608061435b87828801613631565b91505092959194509250565b60008083601f84011261437d5761437c613aca565b5b8235905067ffffffffffffffff81111561439a57614399613acf565b5b6020830191508360208202830111156143b6576143b5613ad4565b5b9250929050565b600080602083850312156143d4576143d36135de565b5b600083013567ffffffffffffffff8111156143f2576143f16135e3565b5b6143fe85828601614367565b92509250509250929050565b6000602082840312156144205761441f6135de565b5b600061442e84828501614027565b91505092915050565b61444081613a94565b82525050565b600060208201905061445b6000830184614437565b92915050565b6000806000806060858703121561447b5761447a6135de565b5b600061448987828801614027565b945050602061449a87828801614192565b935050604085013567ffffffffffffffff8111156144bb576144ba6135e3565b5b6144c787828801613ad9565b925092505092959194509250565b60008083601f8401126144eb576144ea613aca565b5b8235905067ffffffffffffffff81111561450857614507613acf565b5b60208301915083602082028301111561452457614523613ad4565b5b9250929050565b60008060208385031215614542576145416135de565b5b600083013567ffffffffffffffff8111156145605761455f6135e3565b5b61456c858286016144d5565b92509250509250929050565b60006040828403121561458e5761458d6137d1565b5b81905092915050565b6000806000608084860312156145b0576145af6135de565b5b600084013567ffffffffffffffff8111156145ce576145cd6135e3565b5b6145da868287016137d6565b93505060206145eb86828701614578565b92505060606145fc86828701613631565b9150509250925092565b61460f81613a94565b82525050565b61461e81613c5e565b82525050565b60408201600082015161463a600085018261383e565b50602082015161464d602085018261383e565b50505050565b6080820160008201516146696000850182614606565b50602082015161467c6020850182614615565b50604082015161468f6040850182614624565b50505050565b600060c0820190506146aa6000830185614653565b6146b760808301846139de565b9392505050565b600080604083850312156146d5576146d46135de565b5b60006146e385828601613631565b92505060206146f485828601613631565b9150509250929050565b600060608284031215614714576147136135de565b5b600061472284828501613a75565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061477257607f821691505b6020821081036147855761478461472b565b5b50919050565b61479481614000565b82525050565b60006040820190506147af600083018561478b565b6147bc6020830184614437565b9392505050565b7f45524332303a206d756c74695472616e73666572206d69736d61746368000000600082015250565b60006147f9601d8361367e565b9150614804826147c3565b602082019050919050565b60006020820190508181036000830152614828816147ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000823560016060038336030381126148895761488861485e565b5b80830191505092915050565b600080833560016020038436030381126148b2576148b161485e565b5b80840192508235915067ffffffffffffffff8211156148d4576148d3614863565b5b6020830192506001820236038313156148f0576148ef614868565b5b509250929050565b60006020828403121561490e5761490d6135de565b5b600061491c84828501614192565b91505092915050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026149927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614955565b61499c8683614955565b95508019841693508086168417925050509392505050565b60006149cf6149ca6149c584613725565b61425e565b613725565b9050919050565b6000819050919050565b6149e9836149b4565b6149fd6149f5826149d6565b848454614962565b825550505050565b600090565b614a12614a05565b614a1d8184846149e0565b505050565b5b81811015614a4157614a36600082614a0a565b600181019050614a23565b5050565b601f821115614a8657614a5781614930565b614a6084614945565b81016020851015614a6f578190505b614a83614a7b85614945565b830182614a22565b50505b505050565b600082821c905092915050565b6000614aa960001984600802614a8b565b1980831691505092915050565b6000614ac28383614a98565b9150826002028217905092915050565b614adc8383614925565b67ffffffffffffffff811115614af557614af4613cfd565b5b614aff825461475a565b614b0a828285614a45565b6000601f831160018114614b395760008415614b27578287013590505b614b318582614ab6565b865550614b99565b601f198416614b4786614930565b60005b82811015614b6f57848901358255600182019150602085019450602081019050614b4a565b86831015614b8c5784890135614b88601f891682614a98565b8355505b6001600288020188555050505b50505050505050565b600082825260208201905092915050565b6000819050919050565b6000614bcc6020840184614027565b905092915050565b614bdd81614000565b82525050565b6000614bf26020840184614192565b905092915050565b614c0381613beb565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112614c3557614c34614c13565b5b83810192508235915060208301925067ffffffffffffffff821115614c5d57614c5c614c09565b5b600182023603831315614c7357614c72614c0e565b5b509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000614ca78385614c7b565b9350614cb4838584614c8c565b614cbd836136b9565b840190509392505050565b600060608301614cdb6000840184614bbd565b614ce86000860182614bd4565b50614cf66020840184614be3565b614d036020860182614bfa565b50614d116040840184614c18565b8583036040870152614d24838284614c9b565b925050508091505092915050565b6000614d3e8383614cc8565b905092915050565b600082356001606003833603038112614d6257614d61614c13565b5b82810191505092915050565b6000602082019050919050565b6000614d878385614ba2565b935083602084028501614d9984614bb3565b8060005b87811015614ddd578484038952614db48284614d46565b614dbe8582614d32565b9450614dc983614d6e565b925060208a01995050600181019050614d9d565b50829750879450505050509392505050565b60006020820190508181036000830152614e0a818486614d7b565b90509392505050565b600080fd5b600080fd5b60008085851115614e3157614e30614e13565b5b83861115614e4257614e41614e18565b5b6001850283019150848603905094509492505050565b600081905092915050565b6000614e6e826141e7565b614e788185614e58565b9350614e8881856020860161368f565b80840191505092915050565b6000614ea08385614e58565b9350614ead838584614c8c565b82840190509392505050565b6000614ec58286614e63565b9150614ed2828486614e94565b9150819050949350505050565b6000614eeb83856141f2565b9350614ef8838584614c8c565b614f01836136b9565b840190509392505050565b60006020820190508181036000830152614f27818486614edf565b90509392505050565b60008235600161014003833603038112614f4d57614f4c61485e565b5b80830191505092915050565b6000614f686020840184613ab5565b905092915050565b614f7981613c5e565b8114614f8457600080fd5b50565b600081359050614f9681614f70565b92915050565b6000614fab6020840184614f87565b905092915050565b60608201614fc46000830183614bbd565b614fd16000850182614bd4565b50614fdf6020830183614f59565b614fec6020850182614606565b50614ffa6040830183614f9c565b6150076040850182614615565b50505050565b600060e082019050615022600083018a614fb3565b61502f6060830189614437565b8181036080830152615042818789614edf565b905061505160a0830186613a4b565b81810360c0830152615064818486614edf565b905098975050505050505050565b600080fd5b600067ffffffffffffffff82111561509257615091613cfd565b5b61509b826136b9565b9050602081019050919050565b60006150bb6150b684615077565b613d5d565b9050828152602081018484840111156150d7576150d6615072565b5b6150e284828561368f565b509392505050565b600082601f8301126150ff576150fe613aca565b5b815161510f8482602086016150a8565b91505092915050565b60006020828403121561512e5761512d6135de565b5b600082015167ffffffffffffffff81111561514c5761514b6135e3565b5b615158848285016150ea565b91505092915050565b600080fd5b60006040828403121561517c5761517b615161565b5b6151866040613d5d565b9050600061519684828501613746565b60008301525060206151aa84828501613746565b60208301525092915050565b6000604082840312156151cc576151cb6135de565b5b60006151da84828501615166565b91505092915050565b60006060820190506151f8600083018661478b565b6152056020830185613cd3565b6152126040830184613cd3565b949350505050565b600060408201905061522f6000830185613cd3565b61523c6020830184613cd3565b9392505050565b6000602082019050615258600083018461478b565b92915050565b600060208284031215615274576152736135de565b5b600061528284828501614f87565b91505092915050565b6000819050919050565b60006152b06152ab6152a68461528b565b61425e565b613beb565b9050919050565b6152c081615295565b82525050565b60006080820190506152db6000830187613a4b565b6152e86020830186614437565b6152f560408301856152b7565b81810360608301526153078184614203565b905095945050505050565b6000604082019050615327600083018561478b565b6153346020830184613cd3565b9392505050565b60006060820190506153506000830186613a4b565b61535d6020830185613cd3565b61536a6040830184613cd3565b949350505050565b6000604082019050818103600083015261538c8185614203565b905081810360208301526153a08184614203565b90509392505050565b6000815190506153b88161407c565b92915050565b6000602082840312156153d4576153d36135de565b5b60006153e2848285016153a9565b91505092915050565b60006153f6826141e7565b6154008185614c7b565b935061541081856020860161368f565b615419816136b9565b840191505092915050565b61542d8161379b565b82525050565b600060a08301600083015161544b6000860182614bd4565b50602083015161545e6020860182614606565b506040830151848203604086015261547682826153eb565b9150506060830151848203606086015261549082826153eb565b91505060808301516154a56080860182615424565b508091505092915050565b600060408201905081810360008301526154ca8185615433565b90506154d96020830184613a4b565b9392505050565b6000815190506154ef8161372f565b92915050565b60006040828403121561550b5761550a615161565b5b6155156040613d5d565b90506000615525848285016154e0565b6000830152506020615539848285016154e0565b60208301525092915050565b60006040828403121561555b5761555a6135de565b5b6000615569848285016154f5565b91505092915050565b60007fffff00000000000000000000000000000000000000000000000000000000000082169050919050565b60006155aa8383614925565b826155b58135615572565b925060028210156155f5576155f07fffff00000000000000000000000000000000000000000000000000000000000083600203600802614955565b831692505b505092915050565b60008151905061560c81613a9e565b92915050565b60008151905061562181614f70565b92915050565b60006080828403121561563d5761563c615161565b5b6156476060613d5d565b90506000615657848285016155fd565b600083015250602061566b84828501615612565b602083015250604061567f848285016154f5565b60408301525092915050565b6000608082840312156156a1576156a06135de565b5b60006156af84828501615627565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061572182613725565b915061572c83613725565b92508261573c5761573b6156b8565b5b828204905092915050565b600061575282613725565b915061575d83613725565b925082820261576b81613725565b91508282048414831517615782576157816156e7565b5b5092915050565b60006157958383614925565b826157a08135613a94565b925060208210156157e0576157db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802614955565b831692505b505092915050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b60006158208383614925565b8261582b81356157e8565b9250600882101561586b576158667fffffffffffffffff00000000000000000000000000000000000000000000000083600803600802614955565b831692505b505092915050565b60008160c01b9050919050565b600061588b82615873565b9050919050565b6158a361589e82613c5e565b615880565b82525050565b60008160e01b9050919050565b60006158c1826158a9565b9050919050565b6158d96158d482614000565b6158b6565b82525050565b6000819050919050565b6158fa6158f582613725565b6158df565b82525050565b600061590c8287615892565b60088201915061591c82866158c8565b60048201915061592c82856158e9565b60208201915061593c8284614e63565b915081905095945050505050565b7f50617469656e6365202d2054726164696e67204e6f742053746172746564205960008201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b60006159a660238361367e565b91506159b18261594a565b604082019050919050565b600060208201905081810360008301526159d581615999565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115615a3357808604811115615a0f57615a0e6156e7565b5b6001851615615a1e5780820291505b8081029050615a2c856159dc565b94506159f3565b94509492505050565b600082615a4c5760019050615b08565b81615a5a5760009050615b08565b8160018114615a705760028114615a7a57615aa9565b6001915050615b08565b60ff841115615a8c57615a8b6156e7565b5b8360020a915084821115615aa357615aa26156e7565b5b50615b08565b5060208310610133831016604e8410600b8410161715615ade5782820a905083811115615ad957615ad86156e7565b5b615b08565b615aeb84848460016159e9565b92509050818404811115615b0257615b016156e7565b5b81810290505b9392505050565b6000615b1a82613725565b9150615b2583613fc9565b9250615b527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615a3c565b905092915050565b7f4a7573742067657474696e67207761726d65642075702c206c696d6974206f6660008201527f203530302c3030302058484e59207065722077616c6c657420756e74696c204c60208201527f75627269636174696f6e20697320636f6d706c65746521000000000000000000604082015250565b6000615bdc60578361367e565b9150615be782615b5a565b606082019050919050565b60006020820190508181036000830152615c0b81615bcf565b9050919050565b6000819050919050565b615c2d615c2882613a94565b615c12565b82525050565b6000615c3f8285615c1c565b602082019150615c4f8284615892565b6008820191508190509392505050565b6000615c6b8287615c1c565b602082019150615c7b8286615892565b600882019150615c8b8285615c1c565b602082019150615c9b8284614e63565b915081905095945050505050565b600081519050615cb88161361a565b92915050565b600060208284031215615cd457615cd36135de565b5b6000615ce284828501615ca9565b91505092915050565b6000615cf682613725565b9150615d0183613725565b9250828201905080821115615d1957615d186156e7565b5b92915050565b6000606082019050615d346000830186613a4b565b615d416020830185613a4b565b615d4e6040830184613cd3565b949350505050565b6000615d628284614e63565b91508190509291505056fea264697066735822122030f3091f0dc26a8e1e81486cd038c6042b802b505bd4924b88be146220d8b9ce64736f6c634300081600330000000000000000000000001a44076050125825900e736c501f859c50fe728c000000000000000000000000b583651c2024bb7f1227eb52cbc5b752d6361830