[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "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": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "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": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "value", "type": "bool" } ], "name": "Operator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "TokenLevelUpdate", "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addOperator", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "address", "name": "account", "type": "address" } ], "name": "isOperator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "safeMint", "outputs": [], "stateMutability": "nonpayable", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_level", "type": "uint256" } ], "name": "setTokenLevel", "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": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenLevel", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "tokenOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "tokenids", "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": "tokenId", "type": "uint256" } ], "name": "tokenURI", "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": "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": "nonpayable", "type": "function" } ]
60806040526001600c553480156200001657600080fd5b50620000276200014660201b60201c565b6040518060400160405280601181526020017f41544441574e20415641544152204e46540000000000000000000000000000008152506040518060400160405280600481526020017f4144414e000000000000000000000000000000000000000000000000000000008152508160009081620000a491906200048e565b508060019081620000b691906200048e565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200012e5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001259190620005ba565b60405180910390fd5b6200013f816200014e60201b60201c565b50620005d7565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029657607f821691505b602082108103620002ac57620002ab6200024e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002d7565b620003228683620002d7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200036f6200036962000363846200033a565b62000344565b6200033a565b9050919050565b6000819050919050565b6200038b836200034e565b620003a36200039a8262000376565b848454620002e4565b825550505050565b600090565b620003ba620003ab565b620003c781848462000380565b505050565b5b81811015620003ef57620003e3600082620003b0565b600181019050620003cd565b5050565b601f8211156200043e576200040881620002b2565b6200041384620002c7565b8101602085101562000423578190505b6200043b6200043285620002c7565b830182620003cc565b50505b505050565b600082821c905092915050565b6000620004636000198460080262000443565b1980831691505092915050565b60006200047e838362000450565b9150826002028217905092915050565b620004998262000214565b67ffffffffffffffff811115620004b557620004b46200021f565b5b620004c182546200027d565b620004ce828285620003f3565b600060209050601f831160018114620005065760008415620004f1578287015190505b620004fd858262000470565b8655506200056d565b601f1984166200051686620002b2565b60005b82811015620005405784890151825560018201915060208501945060208101905062000519565b868310156200056057848901516200055c601f89168262000450565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005a28262000575565b9050919050565b620005b48162000595565b82525050565b6000602082019050620005d16000830184620005a9565b92915050565b6134f380620005e76000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063ac8a584a11610097578063ca60567a11610071578063ca60567a146104f0578063d204c45e1461050c578063e985e9c514610528578063f2fde38b14610558576101a9565b8063ac8a584a14610488578063b88d4fde146104a4578063c87b56dd146104c0576101a9565b806395d89b41116100d357806395d89b41146104025780639870d7fe14610420578063a22cb4651461043c578063ab8ece8b14610458576101a9565b806370a08231146103aa578063715018a6146103da5780638da5cb5b146103e4576101a9565b8063294cdf0d1161016657806342966c681161014057806342966c68146102fe5780634f6ccce71461031a5780636352211e1461034a5780636d70f7ae1461037a576101a9565b8063294cdf0d146102825780632f745c59146102b257806342842e0e146102e2576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c39190612648565b610574565b6040516101d59190612690565b60405180910390f35b6101e6610586565b6040516101f3919061273b565b60405180910390f35b61021660048036038101906102119190612793565b610618565b6040516102239190612801565b60405180910390f35b61024660048036038101906102419190612848565b610634565b005b61025061064a565b60405161025d9190612897565b60405180910390f35b610280600480360381019061027b91906128b2565b610657565b005b61029c60048036038101906102979190612905565b610759565b6040516102a991906129f0565b60405180910390f35b6102cc60048036038101906102c79190612848565b610848565b6040516102d99190612897565b60405180910390f35b6102fc60048036038101906102f791906128b2565b6108f1565b005b61031860048036038101906103139190612793565b610911565b005b610334600480360381019061032f9190612793565b610928565b6040516103419190612897565b60405180910390f35b610364600480360381019061035f9190612793565b61099e565b6040516103719190612801565b60405180910390f35b610394600480360381019061038f9190612905565b6109b0565b6040516103a19190612690565b60405180910390f35b6103c460048036038101906103bf9190612905565b610a06565b6040516103d19190612897565b60405180910390f35b6103e2610ac0565b005b6103ec610ad4565b6040516103f99190612801565b60405180910390f35b61040a610afe565b604051610417919061273b565b60405180910390f35b61043a60048036038101906104359190612905565b610b90565b005b61045660048036038101906104519190612a3e565b610c2d565b005b610472600480360381019061046d9190612793565b610c43565b60405161047f9190612897565b60405180910390f35b6104a2600480360381019061049d9190612905565b610c6a565b005b6104be60048036038101906104b99190612bb3565b610d07565b005b6104da60048036038101906104d59190612793565b610d24565b6040516104e7919061273b565b60405180910390f35b61050a60048036038101906105059190612c36565b610d36565b005b61052660048036038101906105219190612d17565b610e26565b005b610542600480360381019061053d9190612d73565b610eed565b60405161054f9190612690565b60405180910390f35b610572600480360381019061056d9190612905565b610f81565b005b600061057f82611007565b9050919050565b60606000805461059590612de2565b80601f01602080910402602001604051908101604052809291908181526020018280546105c190612de2565b801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b5050505050905090565b600061062382611068565b5061062d826110f0565b9050919050565b610646828261064161112d565b611135565b5050565b6000600880549050905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106c95760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106c09190612801565b60405180910390fd5b60006106dd83836106d861112d565b611147565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610753578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161074a93929190612e13565b60405180910390fd5b50505050565b6060600061076683610a06565b90508067ffffffffffffffff81111561078257610781612a88565b5b6040519080825280602002602001820160405280156107b05781602001602082028036833780820191505090505b50915060005b8181101561084157600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000205483828151811061082257610821612e4a565b5b602002602001018181525050808061083990612ea8565b9150506107b6565b5050919050565b600061085383610a06565b82106108985782826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161088f929190612ef0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61090c83838360405180602001604052806000815250610d07565b505050565b61092460008261091f61112d565b611147565b5050565b600061093261064a565b8210610978576000826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161096f929190612ef0565b60405180910390fd5b6008828154811061098c5761098b612e4a565b5b90600052602060002001549050919050565b60006109a982611068565b9050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a795760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610a709190612801565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ac861115d565b610ad260006111e4565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b0d90612de2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3990612de2565b8015610b865780601f10610b5b57610100808354040283529160200191610b86565b820191906000526020600020905b815481529060010190602001808311610b6957829003601f168201915b5050505050905090565b610b9861115d565b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f38a78872ece78fcdeb9012d3d88706361a938e39fcae9fd6cdf07b007a49f4d4816001604051610c22929190612f19565b60405180910390a150565b610c3f610c3861112d565b83836112aa565b5050565b6000610c4e82611068565b50600d6000838152602001908152602001600020549050919050565b610c7261115d565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f38a78872ece78fcdeb9012d3d88706361a938e39fcae9fd6cdf07b007a49f4d4816000604051610cfc929190612f19565b60405180910390a150565b610d12848484610657565b610d1e84848484611419565b50505050565b6060610d2f826115d0565b9050919050565b610d46610d4161112d565b6109b0565b80610d8a5750610d5461112d565b73ffffffffffffffffffffffffffffffffffffffff16610d72610ad4565b73ffffffffffffffffffffffffffffffffffffffff16145b610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090612fb4565b60405180910390fd5b610dd282611068565b5080600d6000848152602001908152602001600020819055507fb2eba667eaa32aa5c5003b14cbd80f44fd302e673b7e237b76ee96f05c9085f782604051610e1a9190612897565b60405180910390a15050565b610e36610e3161112d565b6109b0565b80610e7a5750610e4461112d565b73ffffffffffffffffffffffffffffffffffffffff16610e62610ad4565b73ffffffffffffffffffffffffffffffffffffffff16145b610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb090612fb4565b60405180910390fd5b6000600c6000815480929190610ece90612ea8565b919050559050610ede83826116e3565b610ee88183611701565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f8961115d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ffb5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610ff29190612801565b60405180910390fd5b611004816111e4565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061106157506110608261175d565b5b9050919050565b600080611074836117d7565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110e757826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016110de9190612897565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6111428383836001611814565b505050565b60006111548484846119d9565b90509392505050565b61116561112d565b73ffffffffffffffffffffffffffffffffffffffff16611183610ad4565b73ffffffffffffffffffffffffffffffffffffffff16146111e2576111a661112d565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111d99190612801565b60405180910390fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361131b57816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016113129190612801565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161140c9190612690565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b11156115ca578273ffffffffffffffffffffffffffffffffffffffff1663150b7a0261145d61112d565b8685856040518563ffffffff1660e01b815260040161147f9493929190613029565b6020604051808303816000875af19250505080156114bb57506040513d601f19601f820116820180604052508101906114b8919061308a565b60015b61153f573d80600081146114eb576040519150601f19603f3d011682016040523d82523d6000602084013e6114f0565b606091505b50600081510361153757836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161152e9190612801565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146115c857836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016115bf9190612801565b60405180910390fd5b505b50505050565b60606115db82611068565b506000600a600084815260200190815260200160002080546115fc90612de2565b80601f016020809104026020016040519081016040528092919081815260200182805461162890612de2565b80156116755780601f1061164a57610100808354040283529160200191611675565b820191906000526020600020905b81548152906001019060200180831161165857829003601f168201915b505050505090506000611686611af6565b9050600081510361169b5781925050506116de565b6000825111156116d05780826040516020016116b89291906130f3565b604051602081830303815290604052925050506116de565b6116d984611b0d565b925050505b919050565b6116fd828260405180602001604052806000815250611b76565b5050565b80600a6000848152602001908152602001600020908161172191906132c3565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516117519190612897565b60405180910390a15050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117d057506117cf82611b92565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061184d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561198157600061185d84611068565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118c857508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156118db57506118d98184610eed565b155b1561191d57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016119149190612801565b60405180910390fd5b811561197f57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6000806119e7858585611c74565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a2b57611a2684611e8e565b611a6a565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a6957611a688185611ed7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611aac57611aa784612038565b611aeb565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611aea57611ae98585612109565b5b5b809150509392505050565b606060405180602001604052806000815250905090565b6060611b1882611068565b506000611b23611af6565b90506000815111611b435760405180602001604052806000815250611b6e565b80611b4d84612194565b604051602001611b5e9291906130f3565b6040516020818303038152906040525b915050919050565b611b8083836122f4565b611b8d6000848484611419565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c5d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c6d5750611c6c826123ed565b5b9050919050565b600080611c80846117d7565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611cc257611cc1818486612457565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d5357611d04600085600080611814565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611dd6576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000611ee283610a06565b9050600060076000848152602001908152602001600020549050818114611fc7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061204c9190613395565b905060006009600084815260200190815260200160002054905060006008838154811061207c5761207b612e4a565b5b90600052602060002001549050806008838154811061209e5761209d612e4a565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806120ed576120ec6133c9565b5b6001900381819060005260206000200160009055905550505050565b6000600161211684610a06565b6121209190613395565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6060600082036121db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122ef565b600082905060005b6000821461220d5780806121f690612ea8565b915050600a826122069190613427565b91506121e3565b60008167ffffffffffffffff81111561222957612228612a88565b5b6040519080825280601f01601f19166020018201604052801561225b5781602001600182028036833780820191505090505b5090505b600085146122e8576001826122749190613395565b9150600a856122839190613458565b603061228f9190613489565b60f81b8183815181106122a5576122a4612e4a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122e19190613427565b945061225f565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123665760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161235d9190612801565b60405180910390fd5b600061237483836000611147565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123e85760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016123df9190612801565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61246283838361251b565b61251657600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124d757806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016124ce9190612897565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161250d929190612ef0565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125d357508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061259457506125938484610eed565b5b806125d257508273ffffffffffffffffffffffffffffffffffffffff166125ba836110f0565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612625816125f0565b811461263057600080fd5b50565b6000813590506126428161261c565b92915050565b60006020828403121561265e5761265d6125e6565b5b600061266c84828501612633565b91505092915050565b60008115159050919050565b61268a81612675565b82525050565b60006020820190506126a56000830184612681565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126e55780820151818401526020810190506126ca565b60008484015250505050565b6000601f19601f8301169050919050565b600061270d826126ab565b61271781856126b6565b93506127278185602086016126c7565b612730816126f1565b840191505092915050565b600060208201905081810360008301526127558184612702565b905092915050565b6000819050919050565b6127708161275d565b811461277b57600080fd5b50565b60008135905061278d81612767565b92915050565b6000602082840312156127a9576127a86125e6565b5b60006127b78482850161277e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127eb826127c0565b9050919050565b6127fb816127e0565b82525050565b600060208201905061281660008301846127f2565b92915050565b612825816127e0565b811461283057600080fd5b50565b6000813590506128428161281c565b92915050565b6000806040838503121561285f5761285e6125e6565b5b600061286d85828601612833565b925050602061287e8582860161277e565b9150509250929050565b6128918161275d565b82525050565b60006020820190506128ac6000830184612888565b92915050565b6000806000606084860312156128cb576128ca6125e6565b5b60006128d986828701612833565b93505060206128ea86828701612833565b92505060406128fb8682870161277e565b9150509250925092565b60006020828403121561291b5761291a6125e6565b5b600061292984828501612833565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6129678161275d565b82525050565b6000612979838361295e565b60208301905092915050565b6000602082019050919050565b600061299d82612932565b6129a7818561293d565b93506129b28361294e565b8060005b838110156129e35781516129ca888261296d565b97506129d583612985565b9250506001810190506129b6565b5085935050505092915050565b60006020820190508181036000830152612a0a8184612992565b905092915050565b612a1b81612675565b8114612a2657600080fd5b50565b600081359050612a3881612a12565b92915050565b60008060408385031215612a5557612a546125e6565b5b6000612a6385828601612833565b9250506020612a7485828601612a29565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ac0826126f1565b810181811067ffffffffffffffff82111715612adf57612ade612a88565b5b80604052505050565b6000612af26125dc565b9050612afe8282612ab7565b919050565b600067ffffffffffffffff821115612b1e57612b1d612a88565b5b612b27826126f1565b9050602081019050919050565b82818337600083830152505050565b6000612b56612b5184612b03565b612ae8565b905082815260208101848484011115612b7257612b71612a83565b5b612b7d848285612b34565b509392505050565b600082601f830112612b9a57612b99612a7e565b5b8135612baa848260208601612b43565b91505092915050565b60008060008060808587031215612bcd57612bcc6125e6565b5b6000612bdb87828801612833565b9450506020612bec87828801612833565b9350506040612bfd8782880161277e565b925050606085013567ffffffffffffffff811115612c1e57612c1d6125eb565b5b612c2a87828801612b85565b91505092959194509250565b60008060408385031215612c4d57612c4c6125e6565b5b6000612c5b8582860161277e565b9250506020612c6c8582860161277e565b9150509250929050565b600067ffffffffffffffff821115612c9157612c90612a88565b5b612c9a826126f1565b9050602081019050919050565b6000612cba612cb584612c76565b612ae8565b905082815260208101848484011115612cd657612cd5612a83565b5b612ce1848285612b34565b509392505050565b600082601f830112612cfe57612cfd612a7e565b5b8135612d0e848260208601612ca7565b91505092915050565b60008060408385031215612d2e57612d2d6125e6565b5b6000612d3c85828601612833565b925050602083013567ffffffffffffffff811115612d5d57612d5c6125eb565b5b612d6985828601612ce9565b9150509250929050565b60008060408385031215612d8a57612d896125e6565b5b6000612d9885828601612833565b9250506020612da985828601612833565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dfa57607f821691505b602082108103612e0d57612e0c612db3565b5b50919050565b6000606082019050612e2860008301866127f2565b612e356020830185612888565b612e4260408301846127f2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612eb38261275d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ee557612ee4612e79565b5b600182019050919050565b6000604082019050612f0560008301856127f2565b612f126020830184612888565b9392505050565b6000604082019050612f2e60008301856127f2565b612f3b6020830184612681565b9392505050565b7f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766560008201527f20746865204d696e74657220726f6c65206f722061626f766500000000000000602082015250565b6000612f9e6039836126b6565b9150612fa982612f42565b604082019050919050565b60006020820190508181036000830152612fcd81612f91565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612ffb82612fd4565b6130058185612fdf565b93506130158185602086016126c7565b61301e816126f1565b840191505092915050565b600060808201905061303e60008301876127f2565b61304b60208301866127f2565b6130586040830185612888565b818103606083015261306a8184612ff0565b905095945050505050565b6000815190506130848161261c565b92915050565b6000602082840312156130a05761309f6125e6565b5b60006130ae84828501613075565b91505092915050565b600081905092915050565b60006130cd826126ab565b6130d781856130b7565b93506130e78185602086016126c7565b80840191505092915050565b60006130ff82856130c2565b915061310b82846130c2565b91508190509392505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026131797fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261313c565b613183868361313c565b95508019841693508086168417925050509392505050565b6000819050919050565b60006131c06131bb6131b68461275d565b61319b565b61275d565b9050919050565b6000819050919050565b6131da836131a5565b6131ee6131e6826131c7565b848454613149565b825550505050565b600090565b6132036131f6565b61320e8184846131d1565b505050565b5b81811015613232576132276000826131fb565b600181019050613214565b5050565b601f8211156132775761324881613117565b6132518461312c565b81016020851015613260578190505b61327461326c8561312c565b830182613213565b50505b505050565b600082821c905092915050565b600061329a6000198460080261327c565b1980831691505092915050565b60006132b38383613289565b9150826002028217905092915050565b6132cc826126ab565b67ffffffffffffffff8111156132e5576132e4612a88565b5b6132ef8254612de2565b6132fa828285613236565b600060209050601f83116001811461332d576000841561331b578287015190505b61332585826132a7565b86555061338d565b601f19841661333b86613117565b60005b828110156133635784890151825560018201915060208501945060208101905061333e565b86831015613380578489015161337c601f891682613289565b8355505b6001600288020188555050505b505050505050565b60006133a08261275d565b91506133ab8361275d565b92508282039050818111156133c3576133c2612e79565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134328261275d565b915061343d8361275d565b92508261344d5761344c6133f8565b5b828204905092915050565b60006134638261275d565b915061346e8361275d565b92508261347e5761347d6133f8565b5b828206905092915050565b60006134948261275d565b915061349f8361275d565b92508282019050808211156134b7576134b6612e79565b5b9291505056fea26469706673582212207094cd8ebf8641050ac43069631292c40408f4a2177a6c2ee9ed906e7350e2a064736f6c63430008120033