[ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint256", "name": "initialSupply", "type": "uint256" }, { "internalType": "uint16", "name": "taxNumerator_", "type": "uint16" }, { "internalType": "uint256", "name": "maxTransferAmount_", "type": "uint256" }, { "internalType": "uint32", "name": "limitedTransfersUntil_", "type": "uint32" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "CantReenableTransferLimit", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "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": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "Forbidden", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [], "name": "TransferAmountAboveLimit", "type": "error" }, { "inputs": [], "name": "TransferLimitTooLow", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "UnacceptableReference", "type": "error" }, { "inputs": [], "name": "WithdrawToZeroAddress", "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": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "previousTimestamp", "type": "uint32" }, { "indexed": false, "internalType": "uint32", "name": "newTimestamp", "type": "uint32" } ], "name": "LimitedTransfersUntilUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "maxTransferAmount", "type": "uint256" } ], "name": "MaxTransferAmountUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [], "name": "SupervisedTransfersDisabled", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "consumer", "type": "address" } ], "name": "UpdatedTaxConsumer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "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": "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": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "disableSupervisedTransfers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitedTransfersUntil", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTransferAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supervisedTransfers", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "taxConsumer", "outputs": [ { "internalType": "contract IMemecoinTaxConsumer", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "taxNumerator", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "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": "uint32", "name": "timestamp", "type": "uint32" } ], "name": "updateLimitedTransfersUntil", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxTransferAmount_", "type": "uint256" } ], "name": "updateMaxTransferAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IMemecoinTaxConsumer", "name": "consumer", "type": "address" } ], "name": "updateTaxConsumer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "to", "type": "address" } ], "name": "withdrawCoin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdrawToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6101806040526009805460ff191660011790553480156200001f57600080fd5b5060405162002c0638038062002c068339810160408190526200004291620008e3565b8585858585858580604051806040016040528060018152602001603160f81b8152508888816003908162000077919062000a26565b50600462000086828262000a26565b50620000989150839050600562000257565b61012052620000a981600662000257565b61014052815160208084019190912060e052815190820120610100524660a0526200013760e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05250336200016e7f2a2246aa17eb93eaa9570fca27712522411a4fb0938901fc7da2b666ab8750568262000290565b506200017c60008262000290565b50620001a97f73a70c1e5cb24d88d071f1df63ae336fa3414417ea9c5d0c9d771967cbebc2ab8262000290565b50620001d67fd15ef8fe672396811cb975be7c0bf9b3aca626e7d5873dd33f00021c1e54f0b18262000290565b5061ffff841661016052600a839055600b805463ffffffff191663ffffffff8416908117909155604080516000815260208101929092527ffd7a630a56178cb283a397b70fecc9240aa8c6e9d4a35d127e43a0f2c7c14d6f910160405180910390a162000244818662000342565b5050505050505050505050505062000b6e565b600060208351101562000277576200026f8362000384565b90506200028a565b8162000284848262000a26565b5060ff90505b92915050565b60008281526008602090815260408083206001600160a01b038516845290915281205460ff16620003395760008381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055620002f03390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016200028a565b5060006200028a565b6001600160a01b038216620003725760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b6200038060008383620003c7565b5050565b600080829050601f81511115620003b2578260405163305a27a960e01b815260040162000369919062000af2565b8051620003bf8262000b27565b179392505050565b600954339060ff161562000454576001600160a01b038116600090815260008051602062002ba6833981519152602052604081205460ff16806200043157506001600160a01b038516600090815260008051602062002ba6833981519152602052604090205460ff165b9050806200045257604051631dd2188d60e31b815260040160405180910390fd5b505b600b5463ffffffff16421080156200046e57506000600a54115b80156200048357506001600160a01b03841615155b80156200049857506001600160a01b03831615155b8015620004cc57506001600160a01b038116600090815260008051602062002bc6833981519152602052604090205460ff16155b80156200050057506001600160a01b038416600090815260008051602062002bc6833981519152602052604090205460ff16155b80156200050e5750600a5482115b156200052d57604051637f50d70d60e11b815260040160405180910390fd5b6000806200053e83878787620005fd565b90925090508115620005e857600b546200056c90879064010000000090046001600160a01b031684620006e3565b600b54604051635489b4f760e01b8152600481018490526001600160a01b0385811660248301528881166044830152878116606483015264010000000090920490911690635489b4f790608401600060405180830381600087803b158015620005d457600080fd5b505af1925050508015620005e6575060015b505b620005f5868683620006e3565b505050505050565b6001600160a01b038416600090815260008051602062002be68339815191526020526040812054819060ff16806200065b57506001600160a01b038416600090815260008051602062002be6833981519152602052604090205460ff165b806200068d57506001600160a01b038516600090815260008051602062002be6833981519152602052604090205460ff165b156200069b575081620006da565b600b5460009064010000000090046001600160a01b031615620006c25761016051620006c5565b60005b61ffff16905061271084820204925050508082035b94509492505050565b6001600160a01b0383166200071257806002600082825462000706919062000b4c565b90915550620007869050565b6001600160a01b03831660009081526020819052604090205481811015620007675760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000369565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620007a457600280548290039055620007c3565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200080991815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620008495781810151838201526020016200082f565b50506000910152565b600082601f8301126200086457600080fd5b81516001600160401b038082111562000881576200088162000816565b604051601f8301601f19908116603f01168101908282118183101715620008ac57620008ac62000816565b81604052838152866020858801011115620008c657600080fd5b620008d98460208301602089016200082c565b9695505050505050565b60008060008060008060c08789031215620008fd57600080fd5b86516001600160401b03808211156200091557600080fd5b620009238a838b0162000852565b975060208901519150808211156200093a57600080fd5b506200094989828a0162000852565b95505060408701519350606087015161ffff811681146200096957600080fd5b608088015160a0890151919450925063ffffffff811681146200098b57600080fd5b809150509295509295509295565b600181811c90821680620009ae57607f821691505b602082108103620009cf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a21576000816000526020600020601f850160051c8101602086101562000a005750805b601f850160051c820191505b81811015620005f55782815560010162000a0c565b505050565b81516001600160401b0381111562000a425762000a4262000816565b62000a5a8162000a53845462000999565b84620009d5565b602080601f83116001811462000a92576000841562000a795750858301515b600019600386901b1c1916600185901b178555620005f5565b600085815260208120601f198616915b8281101562000ac35788860151825594840194600190910190840162000aa2565b508582101562000ae25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602081526000825180602084015262000b138160408501602087016200082c565b601f01601f19169190910160400192915050565b80516020808301519190811015620009cf5760001960209190910360031b1b16919050565b808201808211156200028a57634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051611fcb62000bdb6000396000818161051601526118e5015260006110d6015260006110a901526000610f5201526000610f2a01526000610e8501526000610eaf01526000610ed90152611fcb6000f3fe6080604052600436106101f25760003560e01c806379cc67901161010d5780639dca7e4f116100a0578063bd70239b1161006f578063bd70239b146105e8578063d505accf14610608578063d547741f14610628578063d5c9ff5e14610648578063dd62ed3e1461065d57600080fd5b80639dca7e4f1461056b578063a217fddf1461059d578063a9059cbb146105b2578063a9e75723146105d257600080fd5b806394a14756116100dc57806394a14756146104d557806395d89b41146104ef5780639631af0b146105045780639b0fadfe1461054b57600080fd5b806379cc67901461044d5780637ecebe001461046d57806384b0196e1461048d57806391d14854146104b557600080fd5b80632f2ff15d1161018557806342966c681161015457806342966c68146103975780635a73928f146103b757806370a08231146103d757806374ce7e221461040d57600080fd5b80632f2ff15d14610326578063313ce567146103465780633644e5151461036257806336568abe1461037757600080fd5b80630caac510116101c15780630caac5101461029757806318160ddd146102b757806323b872dd146102d6578063248a9ca3146102f657600080fd5b806301e33667146101fe57806301ffc9a71461022057806306fdde0314610255578063095ea7b31461027757600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021e610219366004611c00565b6106a3565b005b34801561022c57600080fd5b5061024061023b366004611c41565b6106bf565b60405190151581526020015b60405180910390f35b34801561026157600080fd5b5061026a6106f6565b60405161024c9190611cbb565b34801561028357600080fd5b50610240610292366004611cce565b610788565b3480156102a357600080fd5b5061021e6102b2366004611cfa565b6107a0565b3480156102c357600080fd5b506002545b60405190815260200161024c565b3480156102e257600080fd5b506102406102f1366004611c00565b610862565b34801561030257600080fd5b506102c8610311366004611d17565b60009081526008602052604090206001015490565b34801561033257600080fd5b5061021e610341366004611d30565b610888565b34801561035257600080fd5b506040516012815260200161024c565b34801561036e57600080fd5b506102c86108ad565b34801561038357600080fd5b5061021e610392366004611d30565b6108bc565b3480156103a357600080fd5b5061021e6103b2366004611d17565b6108f4565b3480156103c357600080fd5b5061021e6103d2366004611cfa565b610901565b3480156103e357600080fd5b506102c86103f2366004611cfa565b6001600160a01b031660009081526020819052604090205490565b34801561041957600080fd5b50600b546104359064010000000090046001600160a01b031681565b6040516001600160a01b03909116815260200161024c565b34801561045957600080fd5b5061021e610468366004611cce565b610919565b34801561047957600080fd5b506102c8610488366004611cfa565b61092e565b34801561049957600080fd5b506104a261094c565b60405161024c9796959493929190611d60565b3480156104c157600080fd5b506102406104d0366004611d30565b610992565b3480156104e157600080fd5b506009546102409060ff1681565b3480156104fb57600080fd5b5061026a6109bd565b34801561051057600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b60405161ffff909116815260200161024c565b34801561055757600080fd5b5061021e610566366004611df9565b6109cc565b34801561057757600080fd5b50600b546105889063ffffffff1681565b60405163ffffffff909116815260200161024c565b3480156105a957600080fd5b506102c8600081565b3480156105be57600080fd5b506102406105cd366004611cce565b610a76565b3480156105de57600080fd5b506102c8600a5481565b3480156105f457600080fd5b5061021e610603366004611d17565b610a84565b34801561061457600080fd5b5061021e610623366004611e1f565b610aff565b34801561063457600080fd5b5061021e610643366004611d30565b610c39565b34801561065457600080fd5b5061021e610c5e565b34801561066957600080fd5b506102c8610678366004611e96565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006106ae81610c9f565b6106b9848484610ca9565b50505050565b60006001600160e01b03198216637965db0b60e01b14806106f057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461070590611ec4565b80601f016020809104026020016040519081016040528092919081815260200182805461073190611ec4565b801561077e5780601f106107535761010080835404028352916020019161077e565b820191906000526020600020905b81548152906001019060200180831161076157829003601f168201915b5050505050905090565b600033610796818585610ce4565b5060019392505050565b60006107ab81610c9f565b6001600160a01b038216158015906107d157506107cf82635489b4f760e01b610cf1565b155b156107ff5760405163193ca27360e31b81526001600160a01b03831660048201526024015b60405180910390fd5b600b8054640100000000600160c01b0319166401000000006001600160a01b038516908102919091179091556040519081527fa424083f0552343a5cc0a1ac5f20c3f597751e9e206320078a8161ec295c20099060200160405180910390a15050565b600033610870858285610d0d565b61087b858585610d85565b60019150505b9392505050565b6000828152600860205260409020600101546108a381610c9f565b6106b98383610de4565b60006108b7610e78565b905090565b6001600160a01b03811633146108e55760405163334bd91960e11b815260040160405180910390fd5b6108ef8282610fa3565b505050565b6108fe3382611010565b50565b600061090c81610c9f565b61091582611046565b5050565b610924823383610d0d565b6109158282611010565b6001600160a01b0381166000908152600760205260408120546106f0565b6000606080600080600060606109606110a2565b6109686110cf565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606004805461070590611ec4565b60006109d781610c9f565b600b5463ffffffff16158015906109f75750600b544263ffffffff909116105b15610a155760405163ea060e6960e01b815260040160405180910390fd5b600b546040805163ffffffff928316815291841660208301527ffd7a630a56178cb283a397b70fecc9240aa8c6e9d4a35d127e43a0f2c7c14d6f910160405180910390a150600b805463ffffffff191663ffffffff92909216919091179055565b600033610796818585610d85565b8015801590610aa657506064610a9960025490565b610aa39190611efe565b81105b15610ac45760405163123a044960e11b815260040160405180910390fd5b600a8190556040518181527fb81a465c2b79d7b689b78d9aaf5a787dd386b73a952be0569f2fbc637aabb8979060200160405180910390a150565b83421115610b235760405163313c898160e11b8152600481018590526024016107f6565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b708c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610bcb826110fc565b90506000610bdb82878787611129565b9050896001600160a01b0316816001600160a01b031614610c22576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016107f6565b610c2d8a8a8a610ce4565b50505050505050505050565b600082815260086020526040902060010154610c5481610c9f565b6106b98383610fa3565b6000610c6981610c9f565b6009805460ff191690556040517f28f85291d19cc67210565c4922335c0220a35646f5ca3c24948953e62f1bfca490600090a150565b6108fe8133611157565b6001600160a01b038316610cd0576040516308c956f960e41b815260040160405180910390fd5b6108ef6001600160a01b0383168483611190565b6108ef83838360016111e2565b6000610cfc836112b7565b8015610881575061088183836112ea565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146106b95781811015610d7657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016107f6565b6106b9848484840360006111e2565b6001600160a01b038316610daf57604051634b637e8f60e11b8152600060048201526024016107f6565b6001600160a01b038216610dd95760405163ec442f0560e01b8152600060048201526024016107f6565b6108ef838383611374565b6000610df08383610992565b610e705760008381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610e283390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016106f0565b5060006106f0565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ed157507f000000000000000000000000000000000000000000000000000000000000000046145b15610efb57507f000000000000000000000000000000000000000000000000000000000000000090565b6108b7604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6000610faf8383610992565b15610e705760008381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016106f0565b6001600160a01b03821661103a57604051634b637e8f60e11b8152600060048201526024016107f6565b61091582600083611374565b6001600160a01b03811661106d576040516308c956f960e41b815260040160405180910390fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610915573d6000803e3d6000fd5b60606108b77f00000000000000000000000000000000000000000000000000000000000000006005611598565b60606108b77f00000000000000000000000000000000000000000000000000000000000000006006611598565b60006106f0611109610e78565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061113b88888888611643565b92509250925061114b8282611712565b50909695505050505050565b6111618282610992565b6109155760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016107f6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526108ef9084906117cb565b6001600160a01b03841661120c5760405163e602df0560e01b8152600060048201526024016107f6565b6001600160a01b03831661123657604051634a1406b160e11b8152600060048201526024016107f6565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156106b957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112a991815260200190565b60405180910390a350505050565b60006112ca826301ffc9a760e01b6112ea565b80156106f057506112e3826001600160e01b03196112ea565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d9150600051905082801561135d575060208210155b80156113695750600081115b979650505050505050565b600954339060ff16156113ff5760006113ad7f73a70c1e5cb24d88d071f1df63ae336fa3414417ea9c5d0c9d771967cbebc2ab83610992565b806113dd57506113dd7f73a70c1e5cb24d88d071f1df63ae336fa3414417ea9c5d0c9d771967cbebc2ab86610992565b9050806113fd57604051631dd2188d60e31b815260040160405180910390fd5b505b600b5463ffffffff164210801561141857506000600a54115b801561142c57506001600160a01b03841615155b801561144057506001600160a01b03831615155b801561147357506114717fd15ef8fe672396811cb975be7c0bf9b3aca626e7d5873dd33f00021c1e54f0b182610992565b155b80156114a657506114a47fd15ef8fe672396811cb975be7c0bf9b3aca626e7d5873dd33f00021c1e54f0b185610992565b155b80156114b35750600a5482115b156114d157604051637f50d70d60e11b815260040160405180910390fd5b6000806114e08387878761182e565b9092509050811561158557600b5461150b90879064010000000090046001600160a01b03168461192a565b600b54604051635489b4f760e01b8152600481018490526001600160a01b0385811660248301528881166044830152878116606483015264010000000090920490911690635489b4f790608401600060405180830381600087803b15801561157257600080fd5b505af1925050508015611583575060015b505b61159086868361192a565b505050505050565b606060ff83146115b2576115ab83611a54565b90506106f0565b8180546115be90611ec4565b80601f01602080910402602001604051908101604052809291908181526020018280546115ea90611ec4565b80156116375780601f1061160c57610100808354040283529160200191611637565b820191906000526020600020905b81548152906001019060200180831161161a57829003601f168201915b505050505090506106f0565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561167e5750600091506003905082611708565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116d2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116fe57506000925060019150829050611708565b9250600091508190505b9450945094915050565b600082600381111561172657611726611f20565b0361172f575050565b600182600381111561174357611743611f20565b036117615760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561177557611775611f20565b036117965760405163fce698f760e01b8152600481018290526024016107f6565b60038260038111156117aa576117aa611f20565b03610915576040516335e2f38360e21b8152600481018290526024016107f6565b60006117e06001600160a01b03841683611a93565b905080516000141580156118055750808060200190518101906118039190611f36565b155b156108ef57604051635274afe760e01b81526001600160a01b03841660048201526024016107f6565b60008061185b7f2a2246aa17eb93eaa9570fca27712522411a4fb0938901fc7da2b666ab87505687610992565b8061188b575061188b7f2a2246aa17eb93eaa9570fca27712522411a4fb0938901fc7da2b666ab87505685610992565b806118bb57506118bb7f2a2246aa17eb93eaa9570fca27712522411a4fb0938901fc7da2b666ab87505686610992565b156118c7575081611921565b600b5460009064010000000090046001600160a01b031615611909577f000000000000000000000000000000000000000000000000000000000000000061190c565b60005b61ffff16905061271084820204925050508082035b94509492505050565b6001600160a01b03831661195557806002600082825461194a9190611f58565b909155506119c79050565b6001600160a01b038316600090815260208190526040902054818110156119a85760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016107f6565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166119e357600280548290039055611a02565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a4791815260200190565b60405180910390a3505050565b60606000611a6183611aa1565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b606061088183836000611ac9565b600060ff8216601f8111156106f057604051632cd44ac360e21b815260040160405180910390fd5b606081471015611aee5760405163cd78605960e01b81523060048201526024016107f6565b600080856001600160a01b03168486604051611b0a9190611f79565b60006040518083038185875af1925050503d8060008114611b47576040519150601f19603f3d011682016040523d82523d6000602084013e611b4c565b606091505b5091509150611b5c868383611b66565b9695505050505050565b606082611b7b57611b7682611bc2565b610881565b8151158015611b9257506001600160a01b0384163b155b15611bbb57604051639996b31560e01b81526001600160a01b03851660048201526024016107f6565b5080610881565b805115611bd25780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b03811681146108fe57600080fd5b600080600060608486031215611c1557600080fd5b8335611c2081611beb565b92506020840135611c3081611beb565b929592945050506040919091013590565b600060208284031215611c5357600080fd5b81356001600160e01b03198116811461088157600080fd5b60005b83811015611c86578181015183820152602001611c6e565b50506000910152565b60008151808452611ca7816020860160208601611c6b565b601f01601f19169290920160200192915050565b6020815260006108816020830184611c8f565b60008060408385031215611ce157600080fd5b8235611cec81611beb565b946020939093013593505050565b600060208284031215611d0c57600080fd5b813561088181611beb565b600060208284031215611d2957600080fd5b5035919050565b60008060408385031215611d4357600080fd5b823591506020830135611d5581611beb565b809150509250929050565b60ff60f81b881681526000602060e06020840152611d8160e084018a611c8f565b8381036040850152611d93818a611c8f565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611de757835183529284019291840191600101611dcb565b50909c9b505050505050505050505050565b600060208284031215611e0b57600080fd5b813563ffffffff8116811461088157600080fd5b600080600080600080600060e0888a031215611e3a57600080fd5b8735611e4581611beb565b96506020880135611e5581611beb565b95506040880135945060608801359350608088013560ff81168114611e7957600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611ea957600080fd5b8235611eb481611beb565b91506020830135611d5581611beb565b600181811c90821680611ed857607f821691505b602082108103611ef857634e487b7160e01b600052602260045260246000fd5b50919050565b600082611f1b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b600060208284031215611f4857600080fd5b8151801515811461088157600080fd5b808201808211156106f057634e487b7160e01b600052601160045260246000fd5b60008251611f8b818460208701611c6b565b919091019291505056fea2646970667358221220f4207e30b438b862b110db4269bb5014bf26ee4112ac5343046f2f57e13531f964736f6c6343000818003395aa34ba7b6b1e6c2a69ce9a2d0b39db1fe3dacc81d71a126e733f13dbff1be2f5dbeec774cef98464200468f1162e0386223e96a932431a783906216cf28cbfde28e05bc42c19f39401886f6e77098b289939162c84a03159fb6a4ecf0728cc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000c9f2c9cd04674edea40000000000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000204fce5e3e2502611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009446f6761746f73686900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004444f474100000000000000000000000000000000000000000000000000000000