[ { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" }, { "internalType": "uint256", "name": "initialLegendaryLimit", "type": "uint256" }, { "internalType": "uint256", "name": "initialUserMintLimit", "type": "uint256" }, { "internalType": "uint256", "name": "initialMintingFee", "type": "uint256" }, { "internalType": "address", "name": "initialReceiveWallet", "type": "address" }, { "internalType": "string", "name": "initialBaseTokenURI", "type": "string" } ], "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" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "AllowedMinterUpdated", "type": "event" }, { "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": "newBaseTokenURI", "type": "string" } ], "name": "BaseTokenURISet", "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": "newLimit", "type": "uint256" } ], "name": "LegendaryLimitUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Minted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "MintingFeeUpdated", "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": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newReceiveWallet", "type": "address" } ], "name": "ReceiveWalletUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RoyaltiesClaimed", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "UserMintLimitUpdated", "type": "event" }, { "inputs": [], "name": "LegendaryLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "addRoyalties", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "numberOfTokens", "type": "uint256" } ], "name": "adminMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "allowedMinters", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": [], "name": "claimAllRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokensToClaim", "type": "uint256[]" } ], "name": "claimRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "claimedRoyalties", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRoyalties", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "getContractInfo", "outputs": [ { "internalType": "uint256", "name": "_mintedCount", "type": "uint256" }, { "internalType": "uint256", "name": "_LegendaryLimit", "type": "uint256" }, { "internalType": "uint256", "name": "_userMintLimit", "type": "uint256" }, { "internalType": "uint256", "name": "_mintingFee", "type": "uint256" }, { "internalType": "bool", "name": "_paused", "type": "bool" }, { "internalType": "uint256", "name": "_totalRoyalties", "type": "uint256" }, { "internalType": "uint256", "name": "_currentRoyalties", "type": "uint256" }, { "internalType": "address", "name": "_receiveWallet", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "getRewardsToken", "outputs": [ { "internalType": "uint256", "name": "rewards", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "getRoyalties", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "getRoyaltiesDetails", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "royalties", "type": "uint256" } ], "internalType": "struct LegendaryZombabies.TokenInfo[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "isAllowedMinter", "outputs": [ { "internalType": "bool", "name": "", "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": [], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numberOfTokens", "type": "uint256" } ], "name": "mintMany", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "mintedAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintedCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintingFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "receiveWallet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "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": "minter", "type": "address" }, { "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "setAllowedMinter", "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": "newBaseTokenURI", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "setLegendaryLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "setMintingFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newReceiveWallet", "type": "address" } ], "name": "setReceiveWallet", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "setUserMintLimit", "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": "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": "totalRoyalties", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "userMintLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userMintedCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801562000010575f80fd5b5060405162005b1138038062005b1183398181016040528101906200003691906200063b565b856040518060400160405280601381526020017f4c6567656e64617279205a6f6d626162696573000000000000000000000000008152506040518060400160405280600681526020017f435a424142590000000000000000000000000000000000000000000000000000815250815f9081620000b3919062000920565b508060019081620000c5919062000920565b5050506001600b819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000143575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200013a919062000a15565b60405180910390fd5b6200015481620001f260201b60201c565b5084600f8190555083601081905550826011819055508160155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d9081620001bb919062000920565b505f60125f6101000a81548160ff021916908315150217905550620001e686620002b560201b60201c565b50505050505062000a30565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c56200034c60201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000338575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200032f919062000a15565b60405180910390fd5b6200034981620001f260201b60201c565b50565b6200035c620003ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000382620003f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003ec57620003ae620003ee60201b60201c565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401620003e3919062000a15565b60405180910390fd5b565b5f33905090565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000459826200042e565b9050919050565b6200046b816200044d565b811462000476575f80fd5b50565b5f81519050620004898162000460565b92915050565b5f819050919050565b620004a3816200048f565b8114620004ae575f80fd5b50565b5f81519050620004c18162000498565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200051782620004cf565b810181811067ffffffffffffffff82111715620005395762000538620004df565b5b80604052505050565b5f6200054d6200041d565b90506200055b82826200050c565b919050565b5f67ffffffffffffffff8211156200057d576200057c620004df565b5b6200058882620004cf565b9050602081019050919050565b5f5b83811015620005b457808201518184015260208101905062000597565b5f8484015250505050565b5f620005d5620005cf8462000560565b62000542565b905082815260208101848484011115620005f457620005f3620004cb565b5b6200060184828562000595565b509392505050565b5f82601f83011262000620576200061f620004c7565b5b815162000632848260208601620005bf565b91505092915050565b5f805f805f8060c0878903121562000658576200065762000426565b5b5f6200066789828a0162000479565b96505060206200067a89828a01620004b1565b95505060406200068d89828a01620004b1565b9450506060620006a089828a01620004b1565b9350506080620006b389828a0162000479565b92505060a087015167ffffffffffffffff811115620006d757620006d66200042a565b5b620006e589828a0162000609565b9150509295509295509295565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200074157607f821691505b602082108103620007575762000756620006fc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200077e565b620007c786836200077e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200080862000802620007fc846200048f565b620007df565b6200048f565b9050919050565b5f819050919050565b6200082383620007e8565b6200083b62000832826200080f565b8484546200078a565b825550505050565b5f90565b6200085162000843565b6200085e81848462000818565b505050565b5b818110156200088557620008795f8262000847565b60018101905062000864565b5050565b601f821115620008d4576200089e816200075d565b620008a9846200076f565b81016020851015620008b9578190505b620008d1620008c8856200076f565b83018262000863565b50505b505050565b5f82821c905092915050565b5f620008f65f1984600802620008d9565b1980831691505092915050565b5f620009108383620008e5565b9150826002028217905092915050565b6200092b82620006f2565b67ffffffffffffffff811115620009475762000946620004df565b5b62000953825462000729565b6200096082828562000889565b5f60209050601f83116001811462000996575f841562000981578287015190505b6200098d858262000903565b865550620009fc565b601f198416620009a6866200075d565b5f5b82811015620009cf57848901518255600182019150602085019450602081019050620009a8565b86831015620009ef5784890151620009eb601f891682620008e5565b8355505b6001600288020188555050505b505050505050565b62000a0f816200044d565b82525050565b5f60208201905062000a2a5f83018462000a04565b92915050565b6150d38062000a3e5f395ff3fe608060405260043610610319575f3560e01c80635d313295116101aa57806386fd9694116100f6578063d7446e9c11610094578063e985e9c51161006e578063e985e9c514610b48578063f2fde38b14610b84578063f5fe2ac514610bac578063fbbf8cc314610be857610319565b8063d7446e9c14610aec578063db4f6d3114610b16578063e58306f914610b2057610319565b8063a22cb465116100d0578063a22cb46514610a36578063b88d4fde14610a5e578063c87b56dd14610a86578063cf721b1514610ac257610319565b806386fd9694146109a65780638da5cb5b146109e257806395d89b4114610a0c57610319565b80636bc1ef23116101635780637cc1f8671161013d5780637cc1f8671461091f5780638456cb5914610950578063853828b61461096657806386d026081461097c57610319565b80636bc1ef23146108a357806370a08231146108cd578063715018a61461090957610319565b80635d313295146107875780635e2e6eb0146107b15780636352211e146107ed5780636672eea51461082957806369a31fc6146108535780636af9c2051461087b57610319565b806323b872dd11610269578063423afa66116102225780634f6ccce7116101fc5780634f6ccce7146106e1578063547eafd01461071d5780635a64ad95146107335780635c975abb1461075d57610319565b8063423afa661461065557806342842e0e1461069157806342966c68146106b957610319565b806323b872dd1461054f5780632e1a7d4d146105775780632f745c591461059f57806330176e13146105db5780633cd972ac146106035780633f4ba83a1461063f57610319565b80631249c58b116102d657806314556a56116102b057806314556a561461048557806318160ddd146104c15780631f3b4c90146104eb578063238a47091461052757610319565b80631249c58b1461042b5780631267a6ab1461043557806313ece8161461045d57610319565b80630155dfb71461031d57806301ffc9a714610345578063059513a61461038157806306fdde031461039d578063081812fc146103c7578063095ea7b314610403575b5f80fd5b348015610328575f80fd5b50610343600480360381019061033e9190613b32565b610c24565b005b348015610350575f80fd5b5061036b60048036038101906103669190613bb2565b610cb2565b6040516103789190613bf7565b60405180910390f35b61039b60048036038101906103969190613b32565b610cc3565b005b3480156103a8575f80fd5b506103b1610f9b565b6040516103be9190613c9a565b60405180910390f35b3480156103d2575f80fd5b506103ed60048036038101906103e89190613b32565b61102a565b6040516103fa9190613cf9565b60405180910390f35b34801561040e575f80fd5b5061042960048036038101906104249190613d3c565b611045565b005b61043361105b565b005b348015610440575f80fd5b5061045b60048036038101906104569190613d7a565b6112f1565b005b348015610468575f80fd5b50610483600480360381019061047e9190613ee5565b6113ed565b005b348015610490575f80fd5b506104ab60048036038101906104a69190613d7a565b61157b565b6040516104b89190613f3b565b60405180910390f35b3480156104cc575f80fd5b506104d56115e9565b6040516104e29190613f3b565b60405180910390f35b3480156104f6575f80fd5b50610511600480360381019061050c9190613d7a565b6115f5565b60405161051e9190613bf7565b60405180910390f35b348015610532575f80fd5b5061054d60048036038101906105489190613b32565b611647565b005b34801561055a575f80fd5b5061057560048036038101906105709190613f54565b611690565b005b348015610582575f80fd5b5061059d60048036038101906105989190613b32565b61178f565b005b3480156105aa575f80fd5b506105c560048036038101906105c09190613d3c565b611884565b6040516105d29190613f3b565b60405180910390f35b3480156105e6575f80fd5b5061060160048036038101906105fc9190614054565b611928565b005b34801561060e575f80fd5b5061062960048036038101906106249190613b32565b61197a565b6040516106369190613f3b565b60405180910390f35b34801561064a575f80fd5b506106536119ac565b005b348015610660575f80fd5b5061067b60048036038101906106769190613d7a565b611a60565b6040516106889190613bf7565b60405180910390f35b34801561069c575f80fd5b506106b760048036038101906106b29190613f54565b611a7d565b005b3480156106c4575f80fd5b506106df60048036038101906106da9190613b32565b611a9c565b005b3480156106ec575f80fd5b5061070760048036038101906107029190613b32565b611ab0565b6040516107149190613f3b565b60405180910390f35b348015610728575f80fd5b50610731611b22565b005b34801561073e575f80fd5b50610747611c6e565b6040516107549190613f3b565b60405180910390f35b348015610768575f80fd5b50610771611c74565b60405161077e9190613bf7565b60405180910390f35b348015610792575f80fd5b5061079b611c86565b6040516107a89190613cf9565b60405180910390f35b3480156107bc575f80fd5b506107d760048036038101906107d29190613b32565b611cab565b6040516107e49190613f3b565b60405180910390f35b3480156107f8575f80fd5b50610813600480360381019061080e9190613b32565b611cc0565b6040516108209190613cf9565b60405180910390f35b348015610834575f80fd5b5061083d611cd1565b60405161084a9190613f3b565b60405180910390f35b34801561085e575f80fd5b5061087960048036038101906108749190613b32565b611cd7565b005b348015610886575f80fd5b506108a1600480360381019061089c91906140c5565b611d20565b005b3480156108ae575f80fd5b506108b7611dce565b6040516108c49190613f3b565b60405180910390f35b3480156108d8575f80fd5b506108f360048036038101906108ee9190613d7a565b611dd4565b6040516109009190613f3b565b60405180910390f35b348015610914575f80fd5b5061091d611e8a565b005b34801561092a575f80fd5b50610933611e9d565b604051610947989796959493929190614103565b60405180910390f35b34801561095b575f80fd5b50610964611f02565b005b348015610971575f80fd5b5061097a611fb8565b005b348015610987575f80fd5b5061099061205f565b60405161099d9190613f3b565b60405180910390f35b3480156109b1575f80fd5b506109cc60048036038101906109c79190613d7a565b612065565b6040516109d99190614263565b60405180910390f35b3480156109ed575f80fd5b506109f6612154565b604051610a039190613cf9565b60405180910390f35b348015610a17575f80fd5b50610a2061217c565b604051610a2d9190613c9a565b60405180910390f35b348015610a41575f80fd5b50610a5c6004803603810190610a5791906140c5565b61220c565b005b348015610a69575f80fd5b50610a846004803603810190610a7f9190614321565b612222565b005b348015610a91575f80fd5b50610aac6004803603810190610aa79190613b32565b612247565b604051610ab99190613c9a565b60405180910390f35b348015610acd575f80fd5b50610ad66122f1565b604051610ae39190613f3b565b60405180910390f35b348015610af7575f80fd5b50610b006122f7565b604051610b0d9190613f3b565b60405180910390f35b610b1e6122fd565b005b348015610b2b575f80fd5b50610b466004803603810190610b419190613d3c565b61236f565b005b348015610b53575f80fd5b50610b6e6004803603810190610b6991906143a1565b61252b565b604051610b7b9190613bf7565b60405180910390f35b348015610b8f575f80fd5b50610baa6004803603810190610ba59190613d7a565b6125b9565b005b348015610bb7575f80fd5b50610bd26004803603810190610bcd9190613d7a565b61263d565b604051610bdf9190613f3b565b60405180910390f35b348015610bf3575f80fd5b50610c0e6004803603810190610c099190613d7a565b612652565b604051610c1b9190613f3b565b60405180910390f35b610c2c612698565b600e54811015610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c689061444f565b60405180910390fd5b80600f819055507f56aa7a7082b73a305513559785c5008863985ad9a2c9803a24d66a4c0a6bfef181604051610ca79190613f3b565b60405180910390a150565b5f610cbc8261271f565b9050919050565b60125f9054906101000a900460ff1615610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d09906144b7565b60405180910390fd5b600f5481600e54610d239190614502565b1115610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b9061457f565b60405180910390fd5b6010548160175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610db09190614502565b1115610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de8906145e7565b60405180910390fd5b80601154610dff9190614605565b341015610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890614690565b60405180910390fd5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015610ea5573d5f803e3d5ffd5b505f5b81811015610f97575f6001600e54610ec09190614502565b9050610ecc3382612798565b600e5f815480929190610ede906146ae565b919050555060175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190610f30906146ae565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610f7b9190613f3b565b60405180910390a2508080610f8f906146ae565b915050610ea8565b5050565b60605f8054610fa990614722565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd590614722565b80156110205780601f10610ff757610100808354040283529160200191611020565b820191905f5260205f20905b81548152906001019060200180831161100357829003601f168201915b5050505050905090565b5f611034826127b5565b5061103e8261283b565b9050919050565b6110578282611052612874565b61287b565b5050565b60125f9054906101000a900460ff16156110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906144b7565b60405180910390fd5b600f54600e54106110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e79061457f565b60405180910390fd5b60105460175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410611171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611168906145e7565b60405180910390fd5b6011543410156111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90614690565b60405180910390fd5b5f6001600e546111c69190614502565b90506111d23382612798565b600e5f8154809291906111e4906146ae565b919050555060175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190611236906146ae565b919050555060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f1935050505015801561129f573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe826040516112e69190613f3b565b60405180910390a250565b6112f9612698565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e9061479c565b60405180910390fd5b8060155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f5ad53071836d18d60bdda8b27a74d8f7c8e39517c8326d871587de3da6ad194a60405160405180910390a250565b60125f9054906101000a900460ff161561143c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611433906144b7565b60405180910390fd5b5f805b82518110156114d3575f83828151811061145c5761145b6147ba565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff1661148682611cc0565b73ffffffffffffffffffffffffffffffffffffffff16036114c7576114aa8161197a565b8301925060145460185f8381526020019081526020015f20819055505b8160010191505061143f565b505f479050808211156114e4578091505b3373ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015611527573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167f8fbbda19f4a70036f6f585dc4160142a8fa2a20ffb9393d23274f78de4e398888360405161156e9190613f3b565b60405180910390a2505050565b5f805f90505f61158a84611dd4565b90505f5b818110156115cd575f6115a18683611884565b90506115ac8161197a565b846115b79190614502565b93505080806115c5906146ae565b91505061158e565b505f479050808311156115de578092505b829350505050919050565b5f600980549050905090565b5f60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61164f612698565b806011819055507f9a7c33ea6df1d6d7f2348eda287c9493ced6ba1e043a8e681f50075dc9cdd4ca816040516116859190613f3b565b60405180910390a150565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611700575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016116f79190613cf9565b60405180910390fd5b5f611713838361170e612874565b61288d565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611789578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401611780939291906147e7565b60405180910390fd5b50505050565b611797612698565b5f81116117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d090614866565b60405180910390fd5b60135481111561181e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611815906148ce565b60405180910390fd5b8060135f82825461182f91906148ec565b9250508190555061183e612154565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611880573d5f803e3d5ffd5b5050565b5f61188e83611dd4565b82106118d35782826040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526004016118ca92919061491f565b60405180910390fd5b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b611930612698565b80600d908161193f9190614ae3565b507f2e9b34e5ec7377754a85ec13c1e9a442a00db0c46dbdefbb143dd0371fd20c1c8160405161196f9190613c9a565b60405180910390a150565b5f60185f8381526020019081526020015f205460145461199a91906148ec565b816119a59190614502565b9050919050565b6119b4612698565b60125f9054906101000a900460ff16611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990614bfc565b60405180910390fd5b5f60125f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa60405160405180910390a2565b6016602052805f5260405f205f915054906101000a900460ff1681565b611a9783838360405180602001604052805f815250612222565b505050565b611aa4612698565b611aad816128a2565b50565b5f611ab96115e9565b8210611afe575f826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401611af592919061491f565b60405180910390fd5b60098281548110611b1257611b116147ba565b5b905f5260205f2001549050919050565b60125f9054906101000a900460ff1615611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b68906144b7565b60405180910390fd5b5f80611b7c33611dd4565b90505f5b81811015611bc6575f611b933383611884565b9050611b9e8161197a565b8401935060145460185f8381526020019081526020015f208190555081600101915050611b80565b505f47905080831115611bd7578092505b3373ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015611c1a573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167f8fbbda19f4a70036f6f585dc4160142a8fa2a20ffb9393d23274f78de4e3988884604051611c619190613f3b565b60405180910390a2505050565b60115481565b60125f9054906101000a900460ff1681565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6018602052805f5260405f205f915090505481565b5f611cca826127b5565b9050919050565b600f5481565b611cdf612698565b806010819055507ff6a8d7571cd2c93daf4f8853048d29d3c5881d927c63e772b32ca22e8ecc2dda81604051611d159190613f3b565b60405180910390a150565b611d28612698565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fbc84b6b123fbadb172ea788f244995ef2707d76d3b337f1abfb1e6b68bfcb23882604051611dc29190613bf7565b60405180910390a25050565b60105481565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e45575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401611e3c9190613cf9565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611e92612698565b611e9b5f612924565b565b5f805f805f805f80600e54600f5460105460115460125f9054906101000a900460ff1660135460145460155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16975097509750975097509750975097509091929394959697565b611f0a612698565b60125f9054906101000a900460ff1615611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f50906144b7565b60405180910390fd5b600160125f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25860405160405180910390a2565b611fc0612698565b5f60135411612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90614c64565b60405180910390fd5b5f60135490505f601381905550612019612154565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561205b573d5f803e3d5ffd5b5050565b60135481565b60605f61207183611dd4565b90505f8167ffffffffffffffff81111561208e5761208d613da9565b5b6040519080825280602002602001820160405280156120c757816020015b6120b4613ad6565b8152602001906001900390816120ac5790505b5090505f5b82811015612149575f6120df8683611884565b90505f6120eb8261197a565b905081848481518110612101576121006147ba565b5b60200260200101515f01818152505080848481518110612124576121236147ba565b5b6020026020010151602001818152505050508080612141906146ae565b9150506120cc565b508092505050919050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461218b90614722565b80601f01602080910402602001604051908101604052809291908181526020018280546121b790614722565b80156122025780601f106121d957610100808354040283529160200191612202565b820191905f5260205f20905b8154815290600101906020018083116121e557829003601f168201915b5050505050905090565b61221e612217612874565b83836129e7565b5050565b61222d848484611690565b612241612238612874565b85858585612b50565b50505050565b60605f73ffffffffffffffffffffffffffffffffffffffff1661226983611cc0565b73ffffffffffffffffffffffffffffffffffffffff16036122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690614cf2565b60405180910390fd5b600d6122ca83612cfc565b6040516020016122db929190614e14565b6040516020818303038152906040529050919050565b600e5481565b60145481565b5f341161233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614eb2565b60405180910390fd5b3460135f8282546123509190614502565b92505081905550600e546013546123679190614efd565b601481905550565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123f657503373ffffffffffffffffffffffffffffffffffffffff166123de612154565b73ffffffffffffffffffffffffffffffffffffffff16145b612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c90614f77565b60405180910390fd5b600f5481600e546124469190614502565b1115612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e9061457f565b60405180910390fd5b5f5b81811015612526575f6001600e546124a19190614502565b90506124ad8482612798565b600e5f8154809291906124bf906146ae565b91905055508373ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8260405161250a9190613f3b565b60405180910390a250808061251e906146ae565b915050612489565b505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6125c1612698565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612631575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016126289190613cf9565b60405180910390fd5b61263a81612924565b50565b6017602052805f5260405f205f915090505481565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6126a0612874565b73ffffffffffffffffffffffffffffffffffffffff166126be612154565b73ffffffffffffffffffffffffffffffffffffffff161461271d576126e1612874565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016127149190613cf9565b60405180910390fd5b565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612791575061279082612dc6565b5b9050919050565b6127b1828260405180602001604052805f815250612e26565b5050565b5f806127c083612e49565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361283257826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016128299190613f3b565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6128888383836001612e82565b505050565b5f612899848484613041565b90509392505050565b5f6128ae5f835f61288d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361292057816040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016129179190613f3b565b60405180910390fd5b5050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a5757816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401612a4e9190613cf9565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b439190613bf7565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115612cf5578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401612bae9493929190614fe7565b6020604051808303815f875af1925050508015612be957506040513d601f19601f82011682018060405250810190612be69190615045565b60015b612c6a573d805f8114612c17576040519150601f19603f3d011682016040523d82523d5f602084013e612c1c565b606091505b505f815103612c6257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612c599190613cf9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612cf357836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612cea9190613cf9565b60405180910390fd5b505b5050505050565b60605f6001612d0a8461315b565b0190505f8167ffffffffffffffff811115612d2857612d27613da9565b5b6040519080825280601f01601f191660200182016040528015612d5a5781602001600182028036833780820191505090505b5090505f82602001820190505b600115612dbb578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612db057612daf614ed0565b5b0494505f8503612d67575b819350505050919050565b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e1f5750612e1e826132ac565b5b9050919050565b612e30838361338d565b612e44612e3b612874565b5f858585612b50565b505050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080612eba57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fec575f612ec9846127b5565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f3357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015612f465750612f44818461252b565b155b15612f8857826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401612f7f9190613cf9565b60405180910390fd5b8115612fea57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f8061304e858585613480565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036130915761308c8461368b565b6130d0565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130cf576130ce81856136cf565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036131115761310c846137a6565b613150565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461314f5761314e8585613866565b5b5b809150509392505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106131b7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816131ad576131ac614ed0565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106131f4576d04ee2d6d415b85acef810000000083816131ea576131e9614ed0565b5b0492506020810190505b662386f26fc10000831061322357662386f26fc10000838161321957613218614ed0565b5b0492506010810190505b6305f5e100831061324c576305f5e100838161324257613241614ed0565b5b0492506008810190505b612710831061327157612710838161326757613266614ed0565b5b0492506004810190505b60648310613294576064838161328a57613289614ed0565b5b0492506002810190505b600a83106132a3576001810190505b80915050919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061337657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806133865750613385826138ea565b5b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133fd575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016133f49190613cf9565b60405180910390fd5b5f61340983835f61288d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461347b575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016134729190613cf9565b60405180910390fd5b505050565b5f8061348b84612e49565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134cc576134cb818486613953565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146135575761350b5f855f80612e82565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146135d657600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600980549050600a5f8381526020019081526020015f2081905550600981908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f6136d983611dd4565b90505f60085f8481526020019081526020015f205490505f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050828214613778575f815f8581526020019081526020015f2054905080825f8581526020019081526020015f20819055508260085f8381526020019081526020015f2081905550505b60085f8581526020019081526020015f205f9055805f8481526020019081526020015f205f90555050505050565b5f60016009805490506137b991906148ec565b90505f600a5f8481526020019081526020015f205490505f600983815481106137e5576137e46147ba565b5b905f5260205f20015490508060098381548110613805576138046147ba565b5b905f5260205f20018190555081600a5f8381526020019081526020015f2081905550600a5f8581526020019081526020015f205f9055600980548061384d5761384c615070565b5b600190038181905f5260205f20015f9055905550505050565b5f600161387284611dd4565b61387c91906148ec565b90508160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060085f8481526020019081526020015f2081905550505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61395e838383613a16565b613a11575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139d257806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016139c99190613f3b565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401613a0892919061491f565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613acd57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613a8e5750613a8d848461252b565b5b80613acc57508273ffffffffffffffffffffffffffffffffffffffff16613ab48361283b565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60405180604001604052805f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b613b1181613aff565b8114613b1b575f80fd5b50565b5f81359050613b2c81613b08565b92915050565b5f60208284031215613b4757613b46613af7565b5b5f613b5484828501613b1e565b91505092915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b9181613b5d565b8114613b9b575f80fd5b50565b5f81359050613bac81613b88565b92915050565b5f60208284031215613bc757613bc6613af7565b5b5f613bd484828501613b9e565b91505092915050565b5f8115159050919050565b613bf181613bdd565b82525050565b5f602082019050613c0a5f830184613be8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613c47578082015181840152602081019050613c2c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c6c82613c10565b613c768185613c1a565b9350613c86818560208601613c2a565b613c8f81613c52565b840191505092915050565b5f6020820190508181035f830152613cb28184613c62565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ce382613cba565b9050919050565b613cf381613cd9565b82525050565b5f602082019050613d0c5f830184613cea565b92915050565b613d1b81613cd9565b8114613d25575f80fd5b50565b5f81359050613d3681613d12565b92915050565b5f8060408385031215613d5257613d51613af7565b5b5f613d5f85828601613d28565b9250506020613d7085828601613b1e565b9150509250929050565b5f60208284031215613d8f57613d8e613af7565b5b5f613d9c84828501613d28565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613ddf82613c52565b810181811067ffffffffffffffff82111715613dfe57613dfd613da9565b5b80604052505050565b5f613e10613aee565b9050613e1c8282613dd6565b919050565b5f67ffffffffffffffff821115613e3b57613e3a613da9565b5b602082029050602081019050919050565b5f80fd5b5f613e62613e5d84613e21565b613e07565b90508083825260208201905060208402830185811115613e8557613e84613e4c565b5b835b81811015613eae5780613e9a8882613b1e565b845260208401935050602081019050613e87565b5050509392505050565b5f82601f830112613ecc57613ecb613da5565b5b8135613edc848260208601613e50565b91505092915050565b5f60208284031215613efa57613ef9613af7565b5b5f82013567ffffffffffffffff811115613f1757613f16613afb565b5b613f2384828501613eb8565b91505092915050565b613f3581613aff565b82525050565b5f602082019050613f4e5f830184613f2c565b92915050565b5f805f60608486031215613f6b57613f6a613af7565b5b5f613f7886828701613d28565b9350506020613f8986828701613d28565b9250506040613f9a86828701613b1e565b9150509250925092565b5f80fd5b5f67ffffffffffffffff821115613fc257613fc1613da9565b5b613fcb82613c52565b9050602081019050919050565b828183375f83830152505050565b5f613ff8613ff384613fa8565b613e07565b90508281526020810184848401111561401457614013613fa4565b5b61401f848285613fd8565b509392505050565b5f82601f83011261403b5761403a613da5565b5b813561404b848260208601613fe6565b91505092915050565b5f6020828403121561406957614068613af7565b5b5f82013567ffffffffffffffff81111561408657614085613afb565b5b61409284828501614027565b91505092915050565b6140a481613bdd565b81146140ae575f80fd5b50565b5f813590506140bf8161409b565b92915050565b5f80604083850312156140db576140da613af7565b5b5f6140e885828601613d28565b92505060206140f9858286016140b1565b9150509250929050565b5f610100820190506141175f83018b613f2c565b614124602083018a613f2c565b6141316040830189613f2c565b61413e6060830188613f2c565b61414b6080830187613be8565b61415860a0830186613f2c565b61416560c0830185613f2c565b61417260e0830184613cea565b9998505050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6141b181613aff565b82525050565b604082015f8201516141cb5f8501826141a8565b5060208201516141de60208501826141a8565b50505050565b5f6141ef83836141b7565b60408301905092915050565b5f602082019050919050565b5f6142118261417f565b61421b8185614189565b935061422683614199565b805f5b8381101561425657815161423d88826141e4565b9750614248836141fb565b925050600181019050614229565b5085935050505092915050565b5f6020820190508181035f83015261427b8184614207565b905092915050565b5f67ffffffffffffffff82111561429d5761429c613da9565b5b6142a682613c52565b9050602081019050919050565b5f6142c56142c084614283565b613e07565b9050828152602081018484840111156142e1576142e0613fa4565b5b6142ec848285613fd8565b509392505050565b5f82601f83011261430857614307613da5565b5b81356143188482602086016142b3565b91505092915050565b5f805f806080858703121561433957614338613af7565b5b5f61434687828801613d28565b945050602061435787828801613d28565b935050604061436887828801613b1e565b925050606085013567ffffffffffffffff81111561438957614388613afb565b5b614395878288016142f4565b91505092959194509250565b5f80604083850312156143b7576143b6613af7565b5b5f6143c485828601613d28565b92505060206143d585828601613d28565b9150509250929050565b7f4e6577206c696d6974206d7573742062652067726561746572207468616e206f5f8201527f7220657175616c20746f2063757272656e74206d696e74656420636f756e7400602082015250565b5f614439603f83613c1a565b9150614444826143df565b604082019050919050565b5f6020820190508181035f8301526144668161442d565b9050919050565b7f436f6e74726163742069732070617573656400000000000000000000000000005f82015250565b5f6144a1601283613c1a565b91506144ac8261446d565b602082019050919050565b5f6020820190508181035f8301526144ce81614495565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61450c82613aff565b915061451783613aff565b925082820190508082111561452f5761452e6144d5565b5b92915050565b7f4d6178204c6567656e64617279204e465473206d696e746564000000000000005f82015250565b5f614569601983613c1a565b915061457482614535565b602082019050919050565b5f6020820190508181035f8301526145968161455d565b9050919050565b7f55736572206d696e74206c696d697420726561636865640000000000000000005f82015250565b5f6145d1601783613c1a565b91506145dc8261459d565b602082019050919050565b5f6020820190508181035f8301526145fe816145c5565b9050919050565b5f61460f82613aff565b915061461a83613aff565b925082820261462881613aff565b9150828204841483151761463f5761463e6144d5565b5b5092915050565b7f496e73756666696369656e742066756e647320666f72206d696e74696e6700005f82015250565b5f61467a601e83613c1a565b915061468582614646565b602082019050919050565b5f6020820190508181035f8301526146a78161466e565b9050919050565b5f6146b882613aff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146ea576146e96144d5565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061473957607f821691505b60208210810361474c5761474b6146f5565b5b50919050565b7f496e76616c6964207265636569766520616464726573730000000000000000005f82015250565b5f614786601783613c1a565b915061479182614752565b602082019050919050565b5f6020820190508181035f8301526147b38161477a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6060820190506147fa5f830186613cea565b6148076020830185613f2c565b6148146040830184613cea565b949350505050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f614850601d83613c1a565b915061485b8261481c565b602082019050919050565b5f6020820190508181035f83015261487d81614844565b9050919050565b7f496e73756666696369656e7420726f79616c74696573000000000000000000005f82015250565b5f6148b8601683613c1a565b91506148c382614884565b602082019050919050565b5f6020820190508181035f8301526148e5816148ac565b9050919050565b5f6148f682613aff565b915061490183613aff565b9250828203905081811115614919576149186144d5565b5b92915050565b5f6040820190506149325f830185613cea565b61493f6020830184613f2c565b9392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026149a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614967565b6149ac8683614967565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6149e76149e26149dd84613aff565b6149c4565b613aff565b9050919050565b5f819050919050565b614a00836149cd565b614a14614a0c826149ee565b848454614973565b825550505050565b5f90565b614a28614a1c565b614a338184846149f7565b505050565b5b81811015614a5657614a4b5f82614a20565b600181019050614a39565b5050565b601f821115614a9b57614a6c81614946565b614a7584614958565b81016020851015614a84578190505b614a98614a9085614958565b830182614a38565b50505b505050565b5f82821c905092915050565b5f614abb5f1984600802614aa0565b1980831691505092915050565b5f614ad38383614aac565b9150826002028217905092915050565b614aec82613c10565b67ffffffffffffffff811115614b0557614b04613da9565b5b614b0f8254614722565b614b1a828285614a5a565b5f60209050601f831160018114614b4b575f8415614b39578287015190505b614b438582614ac8565b865550614baa565b601f198416614b5986614946565b5f5b82811015614b8057848901518255600182019150602085019450602081019050614b5b565b86831015614b9d5784890151614b99601f891682614aac565b8355505b6001600288020188555050505b505050505050565b7f436f6e7472616374206973206e6f7420706175736564000000000000000000005f82015250565b5f614be6601683613c1a565b9150614bf182614bb2565b602082019050919050565b5f6020820190508181035f830152614c1381614bda565b9050919050565b7f4e6f20726f79616c7469657320746f20776974686472617700000000000000005f82015250565b5f614c4e601883613c1a565b9150614c5982614c1a565b602082019050919050565b5f6020820190508181035f830152614c7b81614c42565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f614cdc602f83613c1a565b9150614ce782614c82565b604082019050919050565b5f6020820190508181035f830152614d0981614cd0565b9050919050565b5f81905092915050565b5f8154614d2681614722565b614d308186614d10565b9450600182165f8114614d4a5760018114614d5f57614d91565b60ff1983168652811515820286019350614d91565b614d6885614946565b5f5b83811015614d8957815481890152600182019150602081019050614d6a565b838801955050505b50505092915050565b5f614da482613c10565b614dae8185614d10565b9350614dbe818560208601613c2a565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f614dfe600583614d10565b9150614e0982614dca565b600582019050919050565b5f614e1f8285614d1a565b9150614e2b8284614d9a565b9150614e3682614df2565b91508190509392505050565b7f416464696e67207a65726f20726f79616c74696573206973206e6f7420616c6c5f8201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b5f614e9c602483613c1a565b9150614ea782614e42565b604082019050919050565b5f6020820190508181035f830152614ec981614e90565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614f0782613aff565b9150614f1283613aff565b925082614f2257614f21614ed0565b5b828204905092915050565b7f4e6f7420616c6c6f77656420746f206d696e74000000000000000000000000005f82015250565b5f614f61601383613c1a565b9150614f6c82614f2d565b602082019050919050565b5f6020820190508181035f830152614f8e81614f55565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f614fb982614f95565b614fc38185614f9f565b9350614fd3818560208601613c2a565b614fdc81613c52565b840191505092915050565b5f608082019050614ffa5f830187613cea565b6150076020830186613cea565b6150146040830185613f2c565b81810360608301526150268184614faf565b905095945050505050565b5f8151905061503f81613b88565b92915050565b5f6020828403121561505a57615059613af7565b5b5f61506784828501615031565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122092ac97a5d35f7ee4c7533d1c93b2b76c1c13a4f87e8e5703fc6e1ce5062fd00d64736f6c6343000814003300000000000000000000000021fd8019a2feeb44f165d24c8406d1a2a182718700000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000021fd8019a2feeb44f165d24c8406d1a2a182718700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006c68747470733a2f2f6d6167656e74612d7175696e74657373656e7469616c2d6372616e652d3431382e6d7970696e6174612e636c6f75642f697066732f516d644d6d6f597864327a41337466366d5a6d4a714a78553554463541346b514a6372566663594b354c584867632f0000000000000000000000000000000000000000