{ "_format": "hh-sol-artifact-1", "contractName": "AIToken", "sourceName": "contracts/AIToken.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "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": [], "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" }, { "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": "bytes32", "name": "receiptHash", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "units", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "attestor", "type": "address" } ], "name": "ReceiptConsumed", "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": [ { "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": "ATTESTOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "COORDINATOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "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": "bytes32", "name": "", "type": "bytes32" } ], "name": "consumedReceipts", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "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": [ { "internalType": "address", "name": "provider", "type": "address" }, { "internalType": "uint256", "name": "units", "type": "uint256" }, { "internalType": "bytes32", "name": "receiptHash", "type": "bytes32" } ], "name": "mintDigest", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "provider", "type": "address" }, { "internalType": "uint256", "name": "units", "type": "uint256" }, { "internalType": "bytes32", "name": "receiptHash", "type": "bytes32" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "mintWithReceipt", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "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": [ { "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": "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" } ], "bytecode": "0x60806040523480156200001157600080fd5b50604051620014833803806200148383398101604081905262000034916200015d565b6040518060400160405280600781526020016620a4aa37b5b2b760c91b8152506040518060400160405280600381526020016210525560ea1b815250816003908162000081919062000236565b50600462000090828262000236565b50620000a291506000905082620000aa565b505062000302565b60008281526005602090815260408083206001600160a01b038516845290915281205460ff16620001535760008381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200010a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000157565b5060005b92915050565b6000602082840312156200017057600080fd5b81516001600160a01b03811681146200018857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001ba57607f821691505b602082108103620001db57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000231576000816000526020600020601f850160051c810160208610156200020c5750805b601f850160051c820191505b818110156200022d5782815560010162000218565b5050505b505050565b81516001600160401b038111156200025257620002526200018f565b6200026a81620002638454620001a5565b84620001e1565b602080601f831160018114620002a25760008415620002895750858301515b600019600386901b1c1916600185901b1785556200022d565b600085815260208120601f198616915b82811015620002d357888601518255948401946001909101908401620002b2565b5085821015620002f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61117180620003126000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806336568abe116100b857806395d89b411161007c57806395d89b41146102bb578063a217fddf146102c3578063a9059cbb146102cb578063d547741f146102de578063dd62ed3e146102f1578063e0e27fa71461032a57600080fd5b806336568abe1461021e57806362723644146102315780636b366cb51461025857806370a082311461027f57806391d14854146102a857600080fd5b8063248a9ca3116100ff578063248a9ca3146101b1578063272a7b79146101d45780632f2ff15d146101e7578063313ce567146101fc578063336c739c1461020b57600080fd5b806301ffc9a71461013c57806306fdde0314610164578063095ea7b31461017957806318160ddd1461018c57806323b872dd1461019e575b600080fd5b61014f61014a366004610e77565b61034d565b60405190151581526020015b60405180910390f35b61016c610384565b60405161015b9190610ea8565b61014f610187366004610f13565b610416565b6002545b60405190815260200161015b565b61014f6101ac366004610f3d565b61042e565b6101906101bf366004610f79565b60009081526005602052604090206001015490565b6101906101e2366004610f92565b610452565b6101fa6101f5366004610fc5565b610467565b005b6040516012815260200161015b565b6101fa610219366004610ff1565b610492565b6101fa61022c366004610fc5565b6106ef565b6101907fa7e0cd0f2772b23ee4c329892293a6bd99d48c306b094d6d008c9a8bb8b731e481565b6101907f2e8b98eef02e8df3bd27d1270ded3bea3d14db99c5234c7b14001a7fff957bcc81565b61019061028d366004611085565b6001600160a01b031660009081526020819052604090205490565b61014f6102b6366004610fc5565b610727565b61016c610752565b610190600081565b61014f6102d9366004610f13565b610761565b6101fa6102ec366004610fc5565b61076f565b6101906102ff3660046110a0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61014f610338366004610f79565b60066020526000908152604090205460ff1681565b60006001600160e01b03198216637965db0b60e01b148061037e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610393906110ca565b80601f01602080910402602001604051908101604052809291908181526020018280546103bf906110ca565b801561040c5780601f106103e15761010080835404028352916020019161040c565b820191906000526020600020905b8154815290600101906020018083116103ef57829003601f168201915b5050505050905090565b600033610424818585610794565b5060019392505050565b60003361043c8582856107a1565b61044785858561081a565b506001949350505050565b600061045f848484610879565b949350505050565b600082815260056020526040902060010154610482816108f8565b61048c8383610905565b50505050565b7f2e8b98eef02e8df3bd27d1270ded3bea3d14db99c5234c7b14001a7fff957bcc6104bc816108f8565b6001600160a01b03861661050a5760405162461bcd60e51b815260206004820152601060248201526f34b73b30b634b210383937bb34b232b960811b60448201526064015b60405180910390fd5b6000851161054a5760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420756e69747360981b6044820152606401610501565b60008481526006602052604090205460ff16156105a95760405162461bcd60e51b815260206004820152601860248201527f7265636569707420616c726561647920636f6e73756d656400000000000000006044820152606401610501565b60006105b6878787610879565b905060006105fc85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506109999050565b90506106287fa7e0cd0f2772b23ee4c329892293a6bd99d48c306b094d6d008c9a8bb8b731e482610727565b6106745760405162461bcd60e51b815260206004820152601a60248201527f696e76616c6964206174746573746f72207369676e61747572650000000000006044820152606401610501565b6000868152600660205260409020805460ff1916600117905561069788886109c3565b806001600160a01b0316886001600160a01b0316877f62bdd9e89a55dce0e95b0356eac19c65ef5afdd870381a93e270dcd072f13f028a6040516106dd91815260200190565b60405180910390a45050505050505050565b6001600160a01b03811633146107185760405163334bd91960e11b815260040160405180910390fd5b61072282826109fd565b505050565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610393906110ca565b60003361042481858561081a565b60008281526005602052604090206001015461078a816108f8565b61048c83836109fd565b6107228383836001610a6a565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981101561048c578181101561080b57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610501565b61048c84848484036000610a6a565b6001600160a01b03831661084457604051634b637e8f60e11b815260006004820152602401610501565b6001600160a01b03821661086e5760405163ec442f0560e01b815260006004820152602401610501565b610722838383610b3f565b604080514660208083019190915230828401526001600160a01b03959095166060820152608081019390935260a0808401929092528051808403909201825260c090920190915280519101207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b6109028133610c69565b50565b60006109118383610727565b6109915760008381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556109493390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161037e565b50600061037e565b6000806000806109a98686610ca2565b9250925092506109b98282610cef565b5090949350505050565b6001600160a01b0382166109ed5760405163ec442f0560e01b815260006004820152602401610501565b6109f960008383610b3f565b5050565b6000610a098383610727565b156109915760008381526005602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161037e565b6001600160a01b038416610a945760405163e602df0560e01b815260006004820152602401610501565b6001600160a01b038316610abe57604051634a1406b160e11b815260006004820152602401610501565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561048c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b3191815260200190565b60405180910390a350505050565b6001600160a01b038316610b6a578060026000828254610b5f9190611104565b90915550610bdc9050565b6001600160a01b03831660009081526020819052604090205481811015610bbd5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610501565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610bf857600280548290039055610c17565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c5c91815260200190565b60405180910390a3505050565b610c738282610727565b6109f95760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610501565b60008060008351604103610cdc5760208401516040850151606086015160001a610cce88828585610da8565b955095509550505050610ce8565b50508151600091506002905b9250925092565b6000826003811115610d0357610d03611125565b03610d0c575050565b6001826003811115610d2057610d20611125565b03610d3e5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d5257610d52611125565b03610d735760405163fce698f760e01b815260048101829052602401610501565b6003826003811115610d8757610d87611125565b036109f9576040516335e2f38360e21b815260048101829052602401610501565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610de35750600091506003905082610e6d565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610e37573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e6357506000925060019150829050610e6d565b9250600091508190505b9450945094915050565b600060208284031215610e8957600080fd5b81356001600160e01b031981168114610ea157600080fd5b9392505050565b60006020808352835180602085015260005b81811015610ed657858101830151858201604001528201610eba565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f0e57600080fd5b919050565b60008060408385031215610f2657600080fd5b610f2f83610ef7565b946020939093013593505050565b600080600060608486031215610f5257600080fd5b610f5b84610ef7565b9250610f6960208501610ef7565b9150604084013590509250925092565b600060208284031215610f8b57600080fd5b5035919050565b600080600060608486031215610fa757600080fd5b610fb084610ef7565b95602085013595506040909401359392505050565b60008060408385031215610fd857600080fd5b82359150610fe860208401610ef7565b90509250929050565b60008060008060006080868803121561100957600080fd5b61101286610ef7565b94506020860135935060408601359250606086013567ffffffffffffffff8082111561103d57600080fd5b818801915088601f83011261105157600080fd5b81358181111561106057600080fd5b89602082850101111561107257600080fd5b9699959850939650602001949392505050565b60006020828403121561109757600080fd5b610ea182610ef7565b600080604083850312156110b357600080fd5b6110bc83610ef7565b9150610fe860208401610ef7565b600181811c908216806110de57607f821691505b6020821081036110fe57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561037e57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220ccbff0a677379c90c9003ba37fbc7f7e7ecff7adecf992224d7bf2788e4cfc4b64736f6c63430008180033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806336568abe116100b857806395d89b411161007c57806395d89b41146102bb578063a217fddf146102c3578063a9059cbb146102cb578063d547741f146102de578063dd62ed3e146102f1578063e0e27fa71461032a57600080fd5b806336568abe1461021e57806362723644146102315780636b366cb51461025857806370a082311461027f57806391d14854146102a857600080fd5b8063248a9ca3116100ff578063248a9ca3146101b1578063272a7b79146101d45780632f2ff15d146101e7578063313ce567146101fc578063336c739c1461020b57600080fd5b806301ffc9a71461013c57806306fdde0314610164578063095ea7b31461017957806318160ddd1461018c57806323b872dd1461019e575b600080fd5b61014f61014a366004610e77565b61034d565b60405190151581526020015b60405180910390f35b61016c610384565b60405161015b9190610ea8565b61014f610187366004610f13565b610416565b6002545b60405190815260200161015b565b61014f6101ac366004610f3d565b61042e565b6101906101bf366004610f79565b60009081526005602052604090206001015490565b6101906101e2366004610f92565b610452565b6101fa6101f5366004610fc5565b610467565b005b6040516012815260200161015b565b6101fa610219366004610ff1565b610492565b6101fa61022c366004610fc5565b6106ef565b6101907fa7e0cd0f2772b23ee4c329892293a6bd99d48c306b094d6d008c9a8bb8b731e481565b6101907f2e8b98eef02e8df3bd27d1270ded3bea3d14db99c5234c7b14001a7fff957bcc81565b61019061028d366004611085565b6001600160a01b031660009081526020819052604090205490565b61014f6102b6366004610fc5565b610727565b61016c610752565b610190600081565b61014f6102d9366004610f13565b610761565b6101fa6102ec366004610fc5565b61076f565b6101906102ff3660046110a0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61014f610338366004610f79565b60066020526000908152604090205460ff1681565b60006001600160e01b03198216637965db0b60e01b148061037e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610393906110ca565b80601f01602080910402602001604051908101604052809291908181526020018280546103bf906110ca565b801561040c5780601f106103e15761010080835404028352916020019161040c565b820191906000526020600020905b8154815290600101906020018083116103ef57829003601f168201915b5050505050905090565b600033610424818585610794565b5060019392505050565b60003361043c8582856107a1565b61044785858561081a565b506001949350505050565b600061045f848484610879565b949350505050565b600082815260056020526040902060010154610482816108f8565b61048c8383610905565b50505050565b7f2e8b98eef02e8df3bd27d1270ded3bea3d14db99c5234c7b14001a7fff957bcc6104bc816108f8565b6001600160a01b03861661050a5760405162461bcd60e51b815260206004820152601060248201526f34b73b30b634b210383937bb34b232b960811b60448201526064015b60405180910390fd5b6000851161054a5760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420756e69747360981b6044820152606401610501565b60008481526006602052604090205460ff16156105a95760405162461bcd60e51b815260206004820152601860248201527f7265636569707420616c726561647920636f6e73756d656400000000000000006044820152606401610501565b60006105b6878787610879565b905060006105fc85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506109999050565b90506106287fa7e0cd0f2772b23ee4c329892293a6bd99d48c306b094d6d008c9a8bb8b731e482610727565b6106745760405162461bcd60e51b815260206004820152601a60248201527f696e76616c6964206174746573746f72207369676e61747572650000000000006044820152606401610501565b6000868152600660205260409020805460ff1916600117905561069788886109c3565b806001600160a01b0316886001600160a01b0316877f62bdd9e89a55dce0e95b0356eac19c65ef5afdd870381a93e270dcd072f13f028a6040516106dd91815260200190565b60405180910390a45050505050505050565b6001600160a01b03811633146107185760405163334bd91960e11b815260040160405180910390fd5b61072282826109fd565b505050565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610393906110ca565b60003361042481858561081a565b60008281526005602052604090206001015461078a816108f8565b61048c83836109fd565b6107228383836001610a6a565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981101561048c578181101561080b57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610501565b61048c84848484036000610a6a565b6001600160a01b03831661084457604051634b637e8f60e11b815260006004820152602401610501565b6001600160a01b03821661086e5760405163ec442f0560e01b815260006004820152602401610501565b610722838383610b3f565b604080514660208083019190915230828401526001600160a01b03959095166060820152608081019390935260a0808401929092528051808403909201825260c090920190915280519101207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b6109028133610c69565b50565b60006109118383610727565b6109915760008381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556109493390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161037e565b50600061037e565b6000806000806109a98686610ca2565b9250925092506109b98282610cef565b5090949350505050565b6001600160a01b0382166109ed5760405163ec442f0560e01b815260006004820152602401610501565b6109f960008383610b3f565b5050565b6000610a098383610727565b156109915760008381526005602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161037e565b6001600160a01b038416610a945760405163e602df0560e01b815260006004820152602401610501565b6001600160a01b038316610abe57604051634a1406b160e11b815260006004820152602401610501565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561048c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b3191815260200190565b60405180910390a350505050565b6001600160a01b038316610b6a578060026000828254610b5f9190611104565b90915550610bdc9050565b6001600160a01b03831660009081526020819052604090205481811015610bbd5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610501565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610bf857600280548290039055610c17565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c5c91815260200190565b60405180910390a3505050565b610c738282610727565b6109f95760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610501565b60008060008351604103610cdc5760208401516040850151606086015160001a610cce88828585610da8565b955095509550505050610ce8565b50508151600091506002905b9250925092565b6000826003811115610d0357610d03611125565b03610d0c575050565b6001826003811115610d2057610d20611125565b03610d3e5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d5257610d52611125565b03610d735760405163fce698f760e01b815260048101829052602401610501565b6003826003811115610d8757610d87611125565b036109f9576040516335e2f38360e21b815260048101829052602401610501565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610de35750600091506003905082610e6d565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610e37573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e6357506000925060019150829050610e6d565b9250600091508190505b9450945094915050565b600060208284031215610e8957600080fd5b81356001600160e01b031981168114610ea157600080fd5b9392505050565b60006020808352835180602085015260005b81811015610ed657858101830151858201604001528201610eba565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f0e57600080fd5b919050565b60008060408385031215610f2657600080fd5b610f2f83610ef7565b946020939093013593505050565b600080600060608486031215610f5257600080fd5b610f5b84610ef7565b9250610f6960208501610ef7565b9150604084013590509250925092565b600060208284031215610f8b57600080fd5b5035919050565b600080600060608486031215610fa757600080fd5b610fb084610ef7565b95602085013595506040909401359392505050565b60008060408385031215610fd857600080fd5b82359150610fe860208401610ef7565b90509250929050565b60008060008060006080868803121561100957600080fd5b61101286610ef7565b94506020860135935060408601359250606086013567ffffffffffffffff8082111561103d57600080fd5b818801915088601f83011261105157600080fd5b81358181111561106057600080fd5b89602082850101111561107257600080fd5b9699959850939650602001949392505050565b60006020828403121561109757600080fd5b610ea182610ef7565b600080604083850312156110b357600080fd5b6110bc83610ef7565b9150610fe860208401610ef7565b600181811c908216806110de57607f821691505b6020821081036110fe57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561037e57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220ccbff0a677379c90c9003ba37fbc7f7e7ecff7adecf992224d7bf2788e4cfc4b64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} }