[ { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "address", "name": "blast_", "type": "address" }, { "internalType": "address", "name": "governor_", "type": "address" }, { "internalType": "address", "name": "erc6551Registry_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "AgentDoesNotExist", "type": "error" }, { "inputs": [], "name": "CallFailed", "type": "error" }, { "inputs": [], "name": "DelegateCallFailed", "type": "error" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "FactoryNotWhitelisted", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "NotContractOwner", "type": "error" }, { "inputs": [], "name": "NotPendingContractOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "BaseURISet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "contractURI", "type": "string" } ], "name": "ContractURISet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "factory", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "wasWhitelisted", "type": "bool" } ], "name": "FactoryWhitelisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "blast", "outputs": [ { "internalType": "address", "name": "blast_", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "createAgent", "outputs": [ { "internalType": "uint256", "name": "agentID", "type": "uint256" }, { "internalType": "address", "name": "agentAddress", "type": "address" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "agentID", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "status", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "factory", "type": "address" } ], "name": "factoryIsWhitelisted", "outputs": [ { "internalType": "bool", "name": "isWhitelisted", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "agentAddress", "type": "address" } ], "name": "getAgentID", "outputs": [ { "internalType": "uint256", "name": "agentID", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "agentID", "type": "uint256" } ], "name": "getAgentInfo", "outputs": [ { "internalType": "address", "name": "agentAddress", "type": "address" }, { "internalType": "address", "name": "implementationAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getERC6551Registry", "outputs": [ { "internalType": "address", "name": "registry_", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "agentAddress", "type": "address" } ], "name": "isAddressAgent", "outputs": [ { "internalType": "bool", "name": "isAgent", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "owner_", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "pendingOwner_", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "factory", "type": "address" }, { "internalType": "bool", "name": "shouldWhitelist", "type": "bool" } ], "internalType": "struct IBlastooorGenesisAgents.SetWhitelistParam[]", "name": "params", "type": "tuple[]" } ], "name": "setWhitelist", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address[]", "name": "tokens", "type": "address[]" } ], "name": "sweep", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "agentID", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60a060405234801562000010575f80fd5b506040516200362f3803806200362f833981016040819052620000339162000303565b828260405180604001604052806011815260200170426c6173746f6f6f722047656e6573697360781b81525060405180604001604052806009815260200168212620a9aa27a7a7a960b91b815250815f9081620000919190620003fb565b506001620000a08282620003fb565b5050506001600160a01b038216608081905260408051600481526024810182526020810180516001600160e01b031663388a0bbd60e11b1790529051620000e89190620004c7565b5f604051808303815f865af19150503d805f811462000123576040519150601f19603f3d011682016040523d82523d5f602084013e62000128565b606091505b505060408051600481526024810182526020810180516001600160e01b0316634e606c4760e01b17905290516001600160a01b03851692506200016c9190620004c7565b5f604051808303815f865af19150503d805f8114620001a7576040519150601f19603f3d011682016040523d82523d5f602084013e620001ac565b606091505b5050506001600160a01b0381161562000253576040516001600160a01b03828116602483015283169060440160408051601f198184030181529181526020820180516001600160e01b0316631d70c8d360e31b179052516200020f9190620004c7565b5f604051808303815f865af19150503d805f81146200024a576040519150601f19603f3d011682016040523d82523d5f602084013e6200024f565b606091505b5050505b50620002619050846200028b565b600f80546001600160a01b0319166001600160a01b039290921691909117905550620004f5915050565b600b80546001600160a01b0319908116909155600a80546001600160a01b0384811693821684179092556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b0381168114620002fe575f80fd5b919050565b5f805f806080858703121562000317575f80fd5b6200032285620002e7565b93506200033260208601620002e7565b92506200034260408601620002e7565b91506200035260608601620002e7565b905092959194509250565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200038657607f821691505b602082108103620003a557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003f657805f5260205f20601f840160051c81016020851015620003d25750805b601f840160051c820191505b81811015620003f3575f8155600101620003de565b50505b505050565b81516001600160401b038111156200041757620004176200035d565b6200042f8162000428845462000371565b84620003ab565b602080601f83116001811462000465575f84156200044d5750858301515b5f19600386901b1c1916600185901b178555620004bf565b5f85815260208120601f198616915b82811015620004955788860151825594840194600190910190840162000474565b5085821015620004b357878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f82515f5b81811015620004e85760208186018101518583015201620004cc565b505f920191825250919050565b6080516131216200050e5f395f6103d601526131215ff3fe608060405260043610610246575f3560e01c80636c0360eb1161013157806395d89b41116100ac578063c87b56dd1161007c578063e8a3d48511610062578063e8a3d48514610708578063e985e9c51461071c578063f2fde38b14610770575f80fd5b8063c87b56dd146106bf578063e30c3978146106de575f80fd5b806395d89b411461064d578063a22cb46514610661578063ac9650d814610680578063b88d4fde146106a0575f80fd5b806379ba5097116101015780638a179be4116100e75780638a179be4146105fd5780638da5cb5b14610610578063938e3d7b1461063a575f80fd5b806379ba5097146105e25780637c042d61146105ea575f80fd5b80636c0360eb1461056a57806370a082311461057e578063715018a61461059d5780637243fb4a146105a5575f80fd5b806319a6a6e9116101c15780634f558e791161019157806351740f571161017757806351740f57146104f557806355f804b3146105385780636352211e1461054b575f80fd5b80634f558e79146104b75780634f6ccce7146104d6575f80fd5b806319a6a6e91461040e57806323b872dd1461045a5780632f745c591461047957806342842e0e14610498575f80fd5b8063095ea7b31161021657806311fc2465116101fc57806311fc246514610379578063175e1a7d146103c857806318160ddd146103fa575f80fd5b8063095ea7b31461032e5780631091bd171461034f575f80fd5b806301ffc9a71461025157806306e698fd1461028557806306fdde03146102c9578063081812fc146102ea575f80fd5b3661024d57005b5f80fd5b34801561025c575f80fd5b5061027061026b3660046126a4565b610783565b60405190151581526020015b60405180910390f35b348015610290575f80fd5b5061027061029f3660046126e0565b73ffffffffffffffffffffffffffffffffffffffff165f908152600c602052604090205460ff1690565b3480156102d4575f80fd5b506102dd6107de565b60405161027c9190612766565b3480156102f5575f80fd5b50610309610304366004612778565b61086d565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161027c565b348015610339575f80fd5b5061034d61034836600461278f565b6108a1565b005b34801561035a575f80fd5b50600f5473ffffffffffffffffffffffffffffffffffffffff16610309565b348015610384575f80fd5b506103ba6103933660046126e0565b73ffffffffffffffffffffffffffffffffffffffff165f908152600e602052604090205490565b60405190815260200161027c565b3480156103d3575f80fd5b507f0000000000000000000000000000000000000000000000000000000000000000610309565b348015610405575f80fd5b506008546103ba565b348015610419575f80fd5b5061042d610428366004612778565b6108b0565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161027c565b348015610465575f80fd5b5061034d6104743660046127b9565b610904565b348015610484575f80fd5b506103ba61049336600461278f565b6109f8565b3480156104a3575f80fd5b5061034d6104b23660046127b9565b610a8e565b3480156104c2575f80fd5b506102706104d1366004612778565b610aad565b3480156104e1575f80fd5b506103ba6104f0366004612778565b610ad8565b348015610500575f80fd5b5061027061050f3660046126e0565b73ffffffffffffffffffffffffffffffffffffffff165f908152600e6020526040902054151590565b61034d6105463660046127f7565b610b46565b348015610556575f80fd5b50610309610565366004612778565b610b99565b348015610575575f80fd5b506102dd610ba3565b348015610589575f80fd5b506103ba6105983660046126e0565b610bb2565b61034d610c2a565b6105b86105b33660046126e0565b610c3d565b6040805192835273ffffffffffffffffffffffffffffffffffffffff90911660208301520161027c565b61034d610e99565b61034d6105f8366004612915565b610ef8565b61034d61060b366004612a36565b610fdd565b34801561061b575f80fd5b50600a5473ffffffffffffffffffffffffffffffffffffffff16610309565b61034d6106483660046127f7565b6110ea565b348015610658575f80fd5b506102dd611131565b34801561066c575f80fd5b5061034d61067b366004612a87565b611140565b61069361068e366004612abe565b61114b565b60405161027c9190612afd565b3480156106ab575f80fd5b5061034d6106ba366004612b7d565b611233565b3480156106ca575f80fd5b506102dd6106d9366004612778565b61124a565b3480156106e9575f80fd5b50600b5473ffffffffffffffffffffffffffffffffffffffff16610309565b348015610713575f80fd5b506102dd611287565b348015610727575f80fd5b50610270610736366004612c58565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260056020908152604080832093909416825291909152205460ff1690565b61034d61077e3660046126e0565b611296565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806107d857506107d882611314565b92915050565b60605f80546107ec90612c84565b80601f016020809104026020016040519081016040528092919081815260200182805461081890612c84565b80156108635780601f1061083a57610100808354040283529160200191610863565b820191905f5260205f20905b81548152906001019060200180831161084657829003601f168201915b5050505050905090565b5f610877826113f6565b505f8281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff166107d8565b6108ac828233611454565b5050565b5f806108bb83611461565b50505f908152600d60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff908116808552600190920154169290910182905291565b73ffffffffffffffffffffffffffffffffffffffff8216610958576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6109648383336114bb565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109f2576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8086166004830152602482018490528216604482015260640161094f565b50505050565b5f610a0283610bb2565b8210610a59576040517fa57d13dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810183905260440161094f565b5073ffffffffffffffffffffffffffffffffffffffff919091165f908152600660209081526040808320938352929052205490565b610aa883838360405180602001604052805f815250611233565b505050565b5f8181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1615156107d8565b5f610ae260085490565b8210610b23576040517fa57d13dc0000000000000000000000000000000000000000000000000000000081525f60048201526024810183905260440161094f565b60088281548110610b3657610b36612cd5565b905f5260205f2001549050919050565b610b4e6115de565b6010610b5b828483612d46565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f68282604051610b8d929190612e5c565b60405180910390a15050565b5f6107d8826113f6565b6060601080546107ec90612c84565b5f73ffffffffffffffffffffffffffffffffffffffff8216610c02576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f600482015260240161094f565b5073ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b610c326115de565b610c3b5f61162f565b565b5f808052600c6020527f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e854819060ff1680610c865750335f908152600c602052604090205460ff165b610cbc576040517f8de0e0da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600854610cca906001612ed5565b9150610cd633836116b0565b465f83858343428140325a60408051602081019990995273ffffffffffffffffffffffffffffffffffffffff978816908901526060880195909552608087019390935260a086019190915260c085015290911660e083015261010082015261012001604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152908290528051602090910120600f547f8a54c52f00000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff88811660048501526024840183905260448401869052306064850152608484018890529193501690638a54c52f9060a4016020604051808303815f875af1158015610df7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1b9190612ee8565b5f858152600d60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831681178455600190930180549c9091169b9091169a909a17909955978252600e905295909520849055509193915050565b600b54339073ffffffffffffffffffffffffffffffffffffffff168114610eec576040517f3d6f519e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ef58161162f565b50565b610f006115de565b5f5b81518110156108ac575f828281518110610f1e57610f1e612cd5565b60200260200101515f015190505f838381518110610f3e57610f3e612cd5565b60209081029190910181015181015173ffffffffffffffffffffffffffffffffffffffff84165f818152600c845260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415159081179091559051908152919350917f22beee31da954d00dc9ac528e6f845d3912b40ddb4ab6db620876632299374e7910160405180910390a25050600101610f02565b610fe56115de565b5f5b818110156109f2575f83838381811061100257611002612cd5565b905060200201602081019061101791906126e0565b905073ffffffffffffffffffffffffffffffffffffffff81166110445761103e854761175d565b506110e1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906110df908290889073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156110b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110da9190612f03565b611818565b505b50600101610fe7565b6110f26115de565b60116110ff828483612d46565b507faf497693a87db12ca89131a31edbb3db4bb5702dfb284e8ae7427d185f09112d8282604051610b8d929190612e5c565b6060600180546107ec90612c84565b6108ac3383836118a5565b60608167ffffffffffffffff81111561116657611166612863565b60405190808252806020026020018201604052801561119957816020015b60608152602001906001900390816111845790505b5090505f5b8281101561122c57611207308585848181106111bc576111bc612cd5565b90506020028101906111ce9190612f1a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506119a192505050565b82828151811061121957611219612cd5565b602090810291909101015260010161119e565b5092915050565b61123e848484610904565b6109f284848484611a5c565b606061125582611461565b601061126083611c50565b604051602001611271929190612f7b565b6040516020818303038152906040529050919050565b6060601180546107ec90612c84565b61129e6115de565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600a54604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806113a657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806107d857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146107d8565b5f8181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806107d8576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810184905260240161094f565b610aa88383836001611d0c565b5f8181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16610ef5576040517fd3227c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806114c8858585611ed4565b905073ffffffffffffffffffffffffffffffffffffffff81166115315761152c84600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61156e565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461156e5761156e818561204b565b73ffffffffffffffffffffffffffffffffffffffff851661159757611592846120f2565b6115d4565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115d4576115d48585612199565b90505b9392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610c3b576040517fbfcafd3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600a805473ffffffffffffffffffffffffffffffffffffffff84811693821684179092556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b73ffffffffffffffffffffffffffffffffffffffff82166116ff576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f600482015260240161094f565b5f61170b83835f6114bb565b905073ffffffffffffffffffffffffffffffffffffffff811615610aa8576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f600482015260240161094f565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040515f6040518083038185875af1925050503d805f81146117b6576040519150601f19603f3d011682016040523d82523d5f602084013e6117bb565b606091505b509150915081156117ce57809250611810565b8051156117de5780518082602001fd5b6040517f3204506f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505092915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610aa89084906121f4565b73ffffffffffffffffffffffffffffffffffffffff821661190a576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161094f565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516119ca919061301c565b5f60405180830381855af49150503d805f8114611a02576040519150601f19603f3d011682016040523d82523d5f602084013e611a07565b606091505b50915091508115611a1a57809250611810565b805115611a2a5780518082602001fd5b6040517f18cecad500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83163b156109f2576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290611ad1903390889087908790600401613037565b6020604051808303815f875af1925050508015611b29575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611b2691810190613075565b60015b611bb6573d808015611b56576040519150601f19603f3d011682016040523d82523d5f602084013e611b5b565b606091505b5080515f03611bae576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161094f565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014611c49576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161094f565b5050505050565b60605f611c5c83612288565b60010190505f8167ffffffffffffffff811115611c7b57611c7b612863565b6040519080825280601f01601f191660200182016040528015611ca5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611caf57509392505050565b8080611d2d575073ffffffffffffffffffffffffffffffffffffffff821615155b15611e80575f611d3c846113f6565b905073ffffffffffffffffffffffffffffffffffffffff831615801590611d8f57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611dcd575073ffffffffffffffffffffffffffffffffffffffff8082165f9081526005602090815260408083209387168352929052205460ff16155b15611e1c576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161094f565b8115611e7e57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f8281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff90811690831615611f0d57611f0d818486612369565b73ffffffffffffffffffffffffffffffffffffffff811615611f8057611f355f855f80611d0c565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff851615611fc85773ffffffffffffffffffffffffffffffffffffffff85165f908152600360205260409020805460010190555b5f8481526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f61205583610bb2565b5f838152600760205260409020549091508082146120b35773ffffffffffffffffffffffffffffffffffffffff84165f9081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b505f91825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b6008545f9061210390600190613090565b5f838152600960205260408120546008805493945090928490811061212a5761212a612cd5565b905f5260205f2001549050806008838154811061214957612149612cd5565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480612180576121806130a3565b600190038181905f5260205f20015f9055905550505050565b5f60016121a584610bb2565b6121af9190613090565b73ffffffffffffffffffffffffffffffffffffffff9093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b5f61221573ffffffffffffffffffffffffffffffffffffffff841683612419565b905080515f1415801561223957508080602001905181019061223791906130d0565b155b15610aa8576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161094f565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106122d0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106122fc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061231a57662386f26fc10000830492506010015b6305f5e1008310612332576305f5e100830492506008015b612710831061234657612710830492506004015b60648310612358576064830492506002015b600a83106107d85760010192915050565b612374838383612426565b610aa85773ffffffffffffffffffffffffffffffffffffffff83166123c8576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810182905260240161094f565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024810182905260440161094f565b60606115d783835f6124e7565b5f73ffffffffffffffffffffffffffffffffffffffff8316158015906115d457508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124b2575073ffffffffffffffffffffffffffffffffffffffff8085165f9081526005602090815260408083209387168352929052205460ff165b806115d45750505f9081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614919050565b606081471015612525576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161094f565b5f808573ffffffffffffffffffffffffffffffffffffffff16848660405161254d919061301c565b5f6040518083038185875af1925050503d805f8114612587576040519150601f19603f3d011682016040523d82523d5f602084013e61258c565b606091505b509150915061259c8683836125a6565b9695505050505050565b6060826125bb576125b682612635565b6115d7565b81511580156125df575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561262e576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161094f565b50806115d7565b8051156126455780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610ef5575f80fd5b5f602082840312156126b4575f80fd5b81356115d781612677565b73ffffffffffffffffffffffffffffffffffffffff81168114610ef5575f80fd5b5f602082840312156126f0575f80fd5b81356115d7816126bf565b5f5b838110156127155781810151838201526020016126fd565b50505f910152565b5f81518084526127348160208601602086016126fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6115d7602083018461271d565b5f60208284031215612788575f80fd5b5035919050565b5f80604083850312156127a0575f80fd5b82356127ab816126bf565b946020939093013593505050565b5f805f606084860312156127cb575f80fd5b83356127d6816126bf565b925060208401356127e6816126bf565b929592945050506040919091013590565b5f8060208385031215612808575f80fd5b823567ffffffffffffffff8082111561281f575f80fd5b818501915085601f830112612832575f80fd5b813581811115612840575f80fd5b866020828501011115612851575f80fd5b60209290920196919550909350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156128b3576128b3612863565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561290057612900612863565b604052919050565b8015158114610ef5575f80fd5b5f6020808385031215612926575f80fd5b823567ffffffffffffffff8082111561293d575f80fd5b818501915085601f830112612950575f80fd5b81358181111561296257612962612863565b612970848260051b016128b9565b818152848101925060069190911b83018401908782111561298f575f80fd5b928401925b818410156129e357604084890312156129ab575f80fd5b6129b3612890565b84356129be816126bf565b8152848601356129cd81612908565b8187015283526040939093019291840191612994565b979650505050505050565b5f8083601f8401126129fe575f80fd5b50813567ffffffffffffffff811115612a15575f80fd5b6020830191508360208260051b8501011115612a2f575f80fd5b9250929050565b5f805f60408486031215612a48575f80fd5b8335612a53816126bf565b9250602084013567ffffffffffffffff811115612a6e575f80fd5b612a7a868287016129ee565b9497909650939450505050565b5f8060408385031215612a98575f80fd5b8235612aa3816126bf565b91506020830135612ab381612908565b809150509250929050565b5f8060208385031215612acf575f80fd5b823567ffffffffffffffff811115612ae5575f80fd5b612af1858286016129ee565b90969095509350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015612b70577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612b5e85835161271d565b94509285019290850190600101612b24565b5092979650505050505050565b5f805f8060808587031215612b90575f80fd5b8435612b9b816126bf565b9350602085810135612bac816126bf565b935060408601359250606086013567ffffffffffffffff80821115612bcf575f80fd5b818801915088601f830112612be2575f80fd5b813581811115612bf457612bf4612863565b612c24847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128b9565b91508082528984828501011115612c39575f80fd5b80848401858401375f8482840101525080935050505092959194509250565b5f8060408385031215612c69575f80fd5b8235612c74816126bf565b91506020830135612ab3816126bf565b600181811c90821680612c9857607f821691505b602082108103612ccf577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f821115610aa857805f5260205f20601f840160051c81016020851015612d275750805b601f840160051c820191505b81811015611c49575f8155600101612d33565b67ffffffffffffffff831115612d5e57612d5e612863565b612d7283612d6c8354612c84565b83612d02565b5f601f841160018114612dc2575f8515612d8c5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611c49565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b82811015612e0f5786850135825560209485019460019092019101612def565b5086821015612e4a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156107d8576107d8612ea8565b5f60208284031215612ef8575f80fd5b81516115d7816126bf565b5f60208284031215612f13575f80fd5b5051919050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612f4d575f80fd5b83018035915067ffffffffffffffff821115612f67575f80fd5b602001915036819003821315612a2f575f80fd5b5f808454612f8881612c84565b60018281168015612fa05760018114612fd357612fff565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450612fff565b885f526020805f205f5b85811015612ff65781548a820152908401908201612fdd565b50505082870194505b5050505083516130138183602088016126fb565b01949350505050565b5f825161302d8184602087016126fb565b9190910192915050565b5f73ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261259c608083018461271d565b5f60208284031215613085575f80fd5b81516115d781612677565b818103818111156107d8576107d8612ea8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f602082840312156130e0575f80fd5b81516115d78161290856fea26469706673582212201cf6bc67e4202793d372e308b6d2c367b78975384a82949e855eb5bcd5279d8364736f6c63430008180033000000000000000000000000a214a4fc09c42202c404e2976c50373fe5f5b7890000000000000000000000004300000000000000000000000000000000000002000000000000000000000000f237c20584daca970498917470864f4d027de4ca000000000000000000000000000000006551c19487814612e58fe06813775758