[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "AuthorizedOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Burned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Minted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "RevokedOperator", "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": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Sent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "accountSnapshots", "outputs": [ { "internalType": "uint128", "name": "fromBlock", "type": "uint128" }, { "internalType": "uint128", "name": "value", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "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": "operator", "type": "address" } ], "name": "authorizeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint128", "name": "_blockNumber", "type": "uint128" } ], "name": "balanceOfAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "defaultOperators", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "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": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [], "name": "granularity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "isOperatorFor", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" }, { "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "operatorBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "operatorSend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "revokeOperator", "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": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "send", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "_blockNumber", "type": "uint128" } ], "name": "totalSupplyAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "totalSupplySnapshots", "outputs": [ { "internalType": "uint128", "name": "fromBlock", "type": "uint128" }, { "internalType": "uint128", "name": "value", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b50604080518082018252600a8152692427a829102a37b5b2b760b11b60208083019182528351808501855260048152632427a82960e11b81830152845160008152918201909452825192939290916200006e91600391906200037f565b508151620000849060049060208501906200037f565b5080516200009a90600590602084019062000404565b5060005b600554811015620000fa5760016006600060058481548110620000bd57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790556001016200009e565b50604080516a22a9219b9b9baa37b5b2b760a91b8152815190819003600b0181206329965a1d60e01b82523060048301819052602483019190915260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad24916329965a1d91606480830192600092919082900301818387803b1580156200017957600080fd5b505af11580156200018e573d6000803e3d6000fd5b5050604080516922a92199182a37b5b2b760b11b8152815190819003600a0181206329965a1d60e01b82523060048301819052602483019190915260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad2493506329965a1d9250606480830192600092919082900301818387803b1580156200020f57600080fd5b505af115801562000224573d6000803e3d6000fd5b50505050505050620002406000801b336200024660201b60201c565b620004ae565b6200025b82826001600160e01b036200025f16565b5050565b600082815260208181526040909120620002849183906200328e620002e1821b17901c565b156200025b576200029d6001600160e01b036200030a16565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000301836001600160a01b0384166001600160e01b036200030f16565b90505b92915050565b335b90565b60006200032683836001600160e01b036200036716565b6200035e5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000304565b50600062000304565b60009081526001919091016020526040902054151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003c257805160ff1916838001178555620003f2565b82800160010185558215620003f2579182015b82811115620003f2578251825591602001919060010190620003d5565b50620004009291506200046a565b5090565b8280548282559060005260206000209081019282156200045c579160200282015b828111156200045c57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000425565b506200040092915062000487565b6200030c91905b8082111562000400576000815560010162000471565b6200030c91905b80821115620004005780546001600160a01b03191681556001016200048e565b61399480620004be6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063959b8c3f1161010f578063d547741f116100a2578063f772a09211610071578063f772a09214610a58578063fad8b32a14610aa3578063fc673c4f14610ad6578063fe9d930314610c25576101f0565b8063d547741f1461085a578063d95b637114610893578063dcdc7dd0146108ce578063dd62ed3e14610a1d576101f0565b8063a9059cbb116100de578063a9059cbb146107df578063b7d78b1a14610818578063ca15c87314610835578063d539139314610852576101f0565b8063959b8c3f146106d457806395d89b41146107075780639bd9bbc61461070f578063a217fddf146107d7576101f0565b8063313ce5671161018757806370a082311161015657806370a08231146105ed5780639010d07c1461062057806391d148541461066c578063947975d9146106a5576101f0565b8063313ce5671461043457806336568abe14610452578063556f0dc71461048b57806362ad1b8314610493576101f0565b806323b872dd116101c357806323b872dd14610331578063248a9ca3146103745780632497aee6146103915780632f2ff15d146103f9576101f0565b806306e48538146101f557806306fdde031461024d578063095ea7b3146102ca57806318160ddd14610317575b600080fd5b6101fd610cd2565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610239578181015183820152602001610221565b505050509050019250505060405180910390f35b610255610d41565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028f578181015183820152602001610277565b50505050905090810190601f1680156102bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610303600480360360408110156102e057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610dec565b604080519115158252519081900360200190f35b61031f610e10565b60408051918252519081900360200190f35b6103036004803603606081101561034757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e16565b61031f6004803603602081101561038a57600080fd5b5035610ff4565b6103ca600480360360408110156103a757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611009565b604080516fffffffffffffffffffffffffffffffff938416815291909216602082015281519081900390910190f35b6104326004803603604081101561040f57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661105f565b005b61043c6110e5565b6040805160ff9092168252519081900360200190f35b6104326004803603604081101561046857600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166110ea565b61031f61117f565b610432600480360360a08110156104a957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156104f157600080fd5b82018360208201111561050357600080fd5b8035906020019184600183028401116401000000008311171561052557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561057857600080fd5b82018360208201111561058a57600080fd5b803590602001918460018302840111640100000000831117156105ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611184945050505050565b61031f6004803603602081101561060357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611200565b6106436004803603604081101561063657600080fd5b5080359060200135611228565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103036004803603604081101561068257600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661124d565b61031f600480360360208110156106bb57600080fd5b50356fffffffffffffffffffffffffffffffff1661126b565b610432600480360360208110156106ea57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611278565b610255611475565b6104326004803603606081101561072557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561076257600080fd5b82018360208201111561077457600080fd5b8035906020019184600183028401116401000000008311171561079657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506114f4945050505050565b61031f61151e565b610303600480360360408110156107f557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611523565b6103ca6004803603602081101561082e57600080fd5b5035611623565b61031f6004803603602081101561084b57600080fd5b503561166b565b61031f611682565b6104326004803603604081101561087057600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166116b7565b610303600480360360408110156108a957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661172a565b610432600480360360808110156108e457600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561092157600080fd5b82018360208201111561093357600080fd5b8035906020019184600183028401116401000000008311171561095557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156109a857600080fd5b8201836020820111156109ba57600080fd5b803590602001918460018302840111640100000000831117156109dc57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061180c945050505050565b61031f60048036036040811015610a3357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166118af565b61031f60048036036040811015610a6e57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff1690602001356fffffffffffffffffffffffffffffffff166118e7565b61043260048036036020811015610ab957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611916565b61043260048036036080811015610aec57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691602081013591810190606081016040820135640100000000811115610b2957600080fd5b820183602082011115610b3b57600080fd5b80359060200191846001830284011164010000000083111715610b5d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050640100000000811115610bb057600080fd5b820183602082011115610bc257600080fd5b80359060200191846001830284011164010000000083111715610be457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b13945050505050565b61043260048036036040811015610c3b57600080fd5b81359190810190604081016020820135640100000000811115610c5d57600080fd5b820183602082011115610c6f57600080fd5b80359060200191846001830284011164010000000083111715610c9157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b85945050505050565b60606005805480602002602001604051908101604052809291908181526020018280548015610d3757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610d0c575b5050505050905090565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d375780601f10610dc057610100808354040283529160200191610d37565b820191906000526020600020905b815481529060010190602001808311610dce57509395945050505050565b600080610df7611ba7565b9050610e04818585611bab565b60019150505b92915050565b60025490565b600073ffffffffffffffffffffffffffffffffffffffff8316610e84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061384b6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416610ef0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138c46026913960400191505060405180910390fd5b6000610efa611ba7565b9050610f28818686866040518060200160405280600081525060405180602001604052806000815250611cf2565b610f54818686866040518060200160405280600081525060405180602001604052806000815250611fc8565b610fbb8582610fb68660405180606001604052806029815260200161389b6029913973ffffffffffffffffffffffffffffffffffffffff808c166000908152600960209081526040808320938b1683529290522054919063ffffffff61226316565b611bab565b610fe98186868660405180602001604052806000815250604051806020016040528060008152506000612314565b506001949350505050565b60009081526020819052604090206002015490565b600a602052816000526040600020818154811061102257fe5b6000918252602090912001546fffffffffffffffffffffffffffffffff808216935070010000000000000000000000000000000090910416905082565b6000828152602081905260409020600201546110829061107d611ba7565b61124d565b6110d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806136ca602f913960400191505060405180910390fd5b6110e18282612669565b5050565b601290565b6110f2611ba7565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613930602f913960400191505060405180910390fd5b6110e182826126f2565b600190565b61119561118f611ba7565b8661172a565b6111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061386f602c913960400191505060405180910390fd5b6111f98585858585600161277b565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6000828152602081905260408120611246908363ffffffff6128a016565b9392505050565b6000828152602081905260408120611246908363ffffffff6128ac16565b6000610e0a600b836128ce565b8073ffffffffffffffffffffffffffffffffffffffff16611297611ba7565b73ffffffffffffffffffffffffffffffffffffffff161415611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806137896024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205460ff161561139f576008600061133e611ba7565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091851681529252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055611411565b6001600760006113ad611ba7565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091861681529252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555b611419611ba7565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d375780601f10610dc057610100808354040283529160200191610d37565b6115196114ff611ba7565b84848460405180602001604052806000815250600161277b565b505050565b600081565b600073ffffffffffffffffffffffffffffffffffffffff8316611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061384b6024913960400191505060405180910390fd5b600061159b611ba7565b90506115c9818286866040518060200160405280600081525060405180602001604052806000815250611cf2565b6115f5818286866040518060200160405280600081525060405180602001604052806000815250611fc8565b610e048182868660405180602001604052806000815250604051806020016040528060008152506000612314565b600b818154811061163057fe5b6000918252602090912001546fffffffffffffffffffffffffffffffff80821692507001000000000000000000000000000000009091041682565b6000818152602081905260408120610e0a90612ada565b604080517f4d494e5445525f524f4c450000000000000000000000000000000000000000008152905190819003600b01902081565b6000828152602081905260409020600201546116d59061107d611ba7565b611175576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806137ad6030913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806117c9575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205460ff1680156117c9575073ffffffffffffffffffffffffffffffffffffffff80831660009081526008602090815260408083209387168352929052205460ff16155b8061124657505073ffffffffffffffffffffffffffffffffffffffff90811660009081526007602090815260408083209490931682529290925290205460ff1690565b604080517f4d494e5445525f524f4c450000000000000000000000000000000000000000008152905190819003600b019020611848903361124d565b61189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061367d602b913960400191505060405180910390fd5b6118a984848484612ae5565b50505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260096020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a6020526040812061124690836128ce565b61191e611ba7565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137dd6021913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205460ff1615611a46576001600860006119de611ba7565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091861681529252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055611aaf565b60076000611a52611ba7565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091851681529252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b611ab7611ba7565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b611b24611b1e611ba7565b8561172a565b611b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061386f602c913960400191505060405180910390fd5b6118a984848484612dab565b6110e1611b90611ba7565b838360405180602001604052806000815250612dab565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316611c17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806136f96025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611c83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061390d6023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260096020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b604080517faabbb8ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe89560248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b158015611d9c57600080fd5b505afa158015611db0573d6000803e3d6000fd5b505050506040513d6020811015611dc657600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff811615611fbf578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ef4578181015183820152602001611edc565b50505050905090810190601f168015611f215780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611f54578181015183820152602001611f3c565b50505050905090810190601f168015611f815780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b158015611fa657600080fd5b505af1158015611fba573d6000803e3d6000fd5b505050505b50505050505050565b611fd486868686613059565b612024836040518060600160405280602781526020016137406027913973ffffffffffffffffffffffffffffffffffffffff8816600090815260016020526040902054919063ffffffff61226316565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600160205260408082209390935590861681522054612066908463ffffffff6131de16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612159578181015183820152602001612141565b50505050905090810190601f1680156121865780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156121b95781810151838201526020016121a1565b50505050905090810190601f1680156121e65780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a48373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050565b6000818484111561230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122d15781810151838201526020016122b9565b50505050905090810190601f1680156122fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b604080517faabbb8ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b1580156123be57600080fd5b505afa1580156123d2573d6000803e3d6000fd5b505050506040513d60208110156123e857600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8116156125e4578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156125155781810151838201526020016124fd565b50505050905090810190601f1680156125425780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561257557818101518382015260200161255d565b50505050905090810190601f1680156125a25780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156125c757600080fd5b505af11580156125db573d6000803e3d6000fd5b5050505061265f565b811561265f576126098673ffffffffffffffffffffffffffffffffffffffff16613252565b1561265f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001806137fe604d913960600191505060405180910390fd5b5050505050505050565b6000828152602081905260409020612687908263ffffffff61328e16565b156110e157612694611ba7565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081905260409020612710908263ffffffff6132b016565b156110e15761271d611ba7565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b73ffffffffffffffffffffffffffffffffffffffff86166127e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061371e6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff851661286957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000612873611ba7565b9050612883818888888888611cf2565b612891818888888888611fc8565b611fbf81888888888888612314565b600061124683836132d2565b60006112468373ffffffffffffffffffffffffffffffffffffffff8416613350565b8154600090806128e2576000915050610e0a565b8360018203815481106128f157fe5b6000918252602090912001546fffffffffffffffffffffffffffffffff908116908416106129635783600182038154811061292857fe5b60009182526020909120015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169150610e0a9050565b8360008154811061297057fe5b6000918252602090912001546fffffffffffffffffffffffffffffffff90811690841610156129a3576000915050610e0a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b81811115612a92576000600260018385010104905060008782815481106129ec57fe5b6000918252602090912001546fffffffffffffffffffffffffffffffff90811691508716811415612a6257878281548110612a2357fe5b60009182526020909120015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169550610e0a945050505050565b866fffffffffffffffffffffffffffffffff16811015612a8457819350612a8b565b6001820392505b50506129c9565b858281548110612a9e57fe5b60009182526020909120015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169695505050505050565b6000610e0a82613368565b73ffffffffffffffffffffffffffffffffffffffff8416612b6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000612b71611ba7565b9050612b808160008787613059565b600254612b93908563ffffffff6131de16565b60025573ffffffffffffffffffffffffffffffffffffffff8516600090815260016020526040902054612bcc908563ffffffff6131de16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c20816000878787876001612314565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612cb9578181015183820152602001612ca1565b50505050905090810190601f168015612ce65780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612d19578181015183820152602001612d01565b50505050905090810190601f168015612d465780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a360408051858152905173ffffffffffffffffffffffffffffffffffffffff8716916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050505050565b73ffffffffffffffffffffffffffffffffffffffff8416612e17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137676022913960400191505060405180910390fd5b6000612e21611ba7565b9050612e3281866000878787611cf2565b612e3f8186600087613059565b612e8f846040518060600160405280602381526020016138ea6023913973ffffffffffffffffffffffffffffffffffffffff8816600090815260016020526040902054919063ffffffff61226316565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260016020526040902055600254612ec8908563ffffffff61336c16565b6002819055508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612f67578181015183820152602001612f4f565b50505050905090810190601f168015612f945780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612fc7578181015183820152602001612faf565b50505050905090810190601f168015612ff45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a360408051858152905160009173ffffffffffffffffffffffffffffffffffffffff8816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050505050565b73ffffffffffffffffffffffffffffffffffffffff83166130d15773ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090206130bb906130b6836130aa86611200565b9063ffffffff6131de16565b6133ae565b6130cc600b6130b6836130aa610e10565b6118a9565b73ffffffffffffffffffffffffffffffffffffffff821661313f5773ffffffffffffffffffffffffffffffffffffffff83166000908152600a6020526040902061312e906130b68361312287611200565b9063ffffffff61336c16565b6130cc600b6130b683613122610e10565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118a95773ffffffffffffffffffffffffffffffffffffffff83166000908152600a602052604090206131a8906130b68361312287611200565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090206118a9906130b6836130aa86611200565b60008282018381101561124657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061328657508115155b949350505050565b60006112468373ffffffffffffffffffffffffffffffffffffffff841661354e565b60006112468373ffffffffffffffffffffffffffffffffffffffff8416613598565b8154600090821061332e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806136a86022913960400191505060405180910390fd5b82600001828154811061333d57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600061124683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612263565b6fffffffffffffffffffffffffffffffff81111561342d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f63617374696e67206f766572666c6f7700000000000000000000000000000000604482015290519081900360640190fd5b815480158061346757504383600183038154811061344757fe5b6000918252602090912001546fffffffffffffffffffffffffffffffff16105b156134fd5760408051808201909152436fffffffffffffffffffffffffffffffff90811682528381166020808401918252865460018101885560008881529190912093519301805491517fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169383169390931782167001000000000000000000000000000000009190921602179055611519565b8183600183038154811061350d57fe5b600091825260209091200180546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055505050565b600061355a8383613350565b61359057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e0a565b506000610e0a565b600081815260018301602052604081205480156136725783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80830191908101906000908790839081106135e957fe5b906000526020600020015490508087600001848154811061360657fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061363657fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610e0a565b6000915050610e0a56fe486f7072546f6b656e3a2063616c6c657220646f6573206e6f742068617665206d696e74657220726f6c65456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744552433737373a20617070726f76652066726f6d20746865207a65726f20616464726573734552433737373a2073656e642066726f6d20746865207a65726f20616464726573734552433737373a207472616e7366657220616d6f756e7420657863656564732062616c616e63654552433737373a206275726e2066726f6d20746865207a65726f20616464726573734552433737373a20617574686f72697a696e672073656c66206173206f70657261746f72416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b654552433737373a207265766f6b696e672073656c66206173206f70657261746f724552433737373a20746f6b656e20726563697069656e7420636f6e747261637420686173206e6f20696d706c656d656e74657220666f7220455243373737546f6b656e73526563697069656e744552433737373a207472616e7366657220746f20746865207a65726f20616464726573734552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f7220666f7220686f6c6465724552433737373a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654552433737373a207472616e736665722066726f6d20746865207a65726f20616464726573734552433737373a206275726e20616d6f756e7420657863656564732062616c616e63654552433737373a20617070726f766520746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220390a28fa8069140ab3fa17935c1941cfa66495f73b64d3262a85cb032eb768e764736f6c63430006060033