[ { "inputs": [ { "internalType": "address[]", "name": "team", "type": "address[]" }, { "internalType": "uint256[]", "name": "teamShares", "type": "uint256[]" }, { "internalType": "string", "name": "baseTokenURI", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "ApproveToCaller", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "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": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IERC20", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ERC20PaymentReleased", "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": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "PayeeAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "PaymentReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "PaymentReleased", "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": "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": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getBaseTokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "adds", "type": "address[]" }, { "internalType": "uint256", "name": "qty", "type": "uint256" } ], "name": "giveaway", "outputs": [], "stateMutability": "nonpayable", "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": "maxMintsPerTx", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxMintsTotal", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "qty", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "whitelistIndex", "type": "uint256" }, { "internalType": "uint256", "name": "qty", "type": "uint256" }, { "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" } ], "name": "mintWhitelist", "outputs": [], "stateMutability": "payable", "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": "uint256", "name": "index", "type": "uint256" } ], "name": "payee", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "account", "type": "address" } ], "name": "release", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "release", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "releaseAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "released", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "released", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "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": "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": [], "name": "saleActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMax", "type": "uint256" } ], "name": "setMaxMintsPerTx", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMax", "type": "uint256" } ], "name": "setMaxMintsTotal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newSupply", "type": "uint256" } ], "name": "setMaxSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newPrice", "type": "uint256" } ], "name": "setPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "shares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "toggleSaleActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "tokensOf", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" } ], "name": "totalReleased", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalReleased", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalShares", "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": [ { "internalType": "bool", "name": "isActive", "type": "bool" }, { "internalType": "uint256", "name": "whitelistPrice", "type": "uint256" }, { "internalType": "uint256", "name": "whitelistMaxMints", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" } ], "name": "whitelistCreate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "whitelistIndex", "type": "uint256" }, { "internalType": "address", "name": "minterAddress", "type": "address" } ], "name": "whitelistMintsOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "whitelistIndex", "type": "uint256" }, { "internalType": "uint256", "name": "maxMints", "type": "uint256" } ], "name": "whitelistSetMaxMints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "whitelistIndex", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" } ], "name": "whitelistSetMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "whitelistIndex", "type": "uint256" }, { "internalType": "uint256", "name": "newPrice", "type": "uint256" } ], "name": "whitelistSetPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "whitelistIndex", "type": "uint256" } ], "name": "whitelistToggleActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "whitelists", "outputs": [ { "components": [ { "internalType": "bool", "name": "isActive", "type": "bool" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "maxMints", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" } ], "internalType": "struct VividBeta.Whitelist[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040526000601060006101000a81548160ff021916908315150217905550600060115560c8601255600260135560026014556103e86017553480156200004657600080fd5b50604051620069da380380620069da83398181016040528101906200006c919062000857565b82826040518060400160405280600a81526020017f56697669642042657461000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f56424554410000000000000000000000000000000000000000000000000000008152508160029080519060200190620000f2929190620005c3565b5080600390805190602001906200010b929190620005c3565b506200011c620002b660201b60201c565b60008190555050506200014462000138620002bb60201b60201c565b620002c360201b60201c565b80518251146200018b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001829062000a2c565b60405180910390fd5b6000825111620001d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c99062000a70565b60405180910390fd5b60005b82518110156200028957620002738382815181106200021d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518383815181106200025f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516200038960201b60201c565b8080620002809062000cbf565b915050620001d5565b5050508060159080519060200190620002a4929190620005c3565b50825160168190555050505062000f1e565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f39062000a0a565b60405180910390fd5b6000811162000442576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004399062000a92565b60405180910390fd5b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414620004c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004be9062000a4e565b60405180910390fd5b600d829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009546200057e919062000b82565b6009819055507f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac8282604051620005b7929190620009dd565b60405180910390a15050565b828054620005d19062000c53565b90600052602060002090601f016020900481019282620005f5576000855562000641565b82601f106200061057805160ff191683800117855562000641565b8280016001018555821562000641579182015b828111156200064057825182559160200191906001019062000623565b5b50905062000650919062000654565b5090565b5b808211156200066f57600081600090555060010162000655565b5090565b60006200068a620006848462000add565b62000ab4565b90508083825260208201905082856020860282011115620006aa57600080fd5b60005b85811015620006de5781620006c38882620007a2565b845260208401935060208301925050600181019050620006ad565b5050509392505050565b6000620006ff620006f98462000b0c565b62000ab4565b905080838252602082019050828560208602820111156200071f57600080fd5b60005b8581101562000753578162000738888262000840565b84526020840193506020830192505060018101905062000722565b5050509392505050565b6000620007746200076e8462000b3b565b62000ab4565b9050828152602081018484840111156200078d57600080fd5b6200079a84828562000c1d565b509392505050565b600081519050620007b38162000eea565b92915050565b600082601f830112620007cb57600080fd5b8151620007dd84826020860162000673565b91505092915050565b600082601f830112620007f857600080fd5b81516200080a848260208601620006e8565b91505092915050565b600082601f8301126200082557600080fd5b8151620008378482602086016200075d565b91505092915050565b600081519050620008518162000f04565b92915050565b6000806000606084860312156200086d57600080fd5b600084015167ffffffffffffffff8111156200088857600080fd5b6200089686828701620007b9565b935050602084015167ffffffffffffffff811115620008b457600080fd5b620008c286828701620007e6565b925050604084015167ffffffffffffffff811115620008e057600080fd5b620008ee8682870162000813565b9150509250925092565b620009038162000bdf565b82525050565b600062000918602c8362000b71565b9150620009258262000dab565b604082019050919050565b60006200093f60328362000b71565b91506200094c8262000dfa565b604082019050919050565b600062000966602b8362000b71565b9150620009738262000e49565b604082019050919050565b60006200098d601a8362000b71565b91506200099a8262000e98565b602082019050919050565b6000620009b4601d8362000b71565b9150620009c18262000ec1565b602082019050919050565b620009d78162000c13565b82525050565b6000604082019050620009f46000830185620008f8565b62000a036020830184620009cc565b9392505050565b6000602082019050818103600083015262000a258162000909565b9050919050565b6000602082019050818103600083015262000a478162000930565b9050919050565b6000602082019050818103600083015262000a698162000957565b9050919050565b6000602082019050818103600083015262000a8b816200097e565b9050919050565b6000602082019050818103600083015262000aad81620009a5565b9050919050565b600062000ac062000ad3565b905062000ace828262000c89565b919050565b6000604051905090565b600067ffffffffffffffff82111562000afb5762000afa62000d6b565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000b2a5762000b2962000d6b565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000b595762000b5862000d6b565b5b62000b648262000d9a565b9050602081019050919050565b600082825260208201905092915050565b600062000b8f8262000c13565b915062000b9c8362000c13565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000bd45762000bd362000d0d565b5b828201905092915050565b600062000bec8262000bf3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000c3d57808201518184015260208101905062000c20565b8381111562000c4d576000848401525b50505050565b6000600282049050600182168062000c6c57607f821691505b6020821081141562000c835762000c8262000d3c565b5b50919050565b62000c948262000d9a565b810181811067ffffffffffffffff8211171562000cb65762000cb562000d6b565b5b80604052505050565b600062000ccc8262000c13565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000d025762000d0162000d0d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a2070617965657320616e64207368617260008201527f6573206c656e677468206d69736d617463680000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960008201527f2068617320736861726573000000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206e6f20706179656573000000000000600082015250565b7f5061796d656e7453706c69747465723a20736861726573206172652030000000600082015250565b62000ef58162000bdf565b811462000f0157600080fd5b50565b62000f0f8162000c13565b811462000f1b57600080fd5b50565b615aac8062000f2e6000396000f3fe6080604052600436106102e85760003560e01c8063715018a611610190578063c87b56dd116100dc578063dc30158b11610095578063ee2f4a741161006f578063ee2f4a7414610b97578063ee49382414610bd4578063f2fde38b14610bf0578063f7cf512214610c195761032f565b8063dc30158b14610b04578063e33b7de314610b2f578063e985e9c514610b5a5761032f565b8063c87b56dd146109d0578063ce7c2ac214610a0d578063d4d8b39214610a4a578063d5abeb0114610a73578063d79779b214610a9e578063d94025e514610adb5761032f565b80639852595c11610149578063a22cb46511610123578063a22cb4651461092a578063b88d4fde14610953578063bc0f7bb41461097c578063bdc32be0146109a55761032f565b80639852595c146108a6578063a035b1fe146108e3578063a0712d681461090e5761032f565b8063715018a6146107aa5780637c0ea805146107c15780638b83209b146107ea5780638da5cb5b1461082757806391b7f5ed1461085257806395d89b411461087b5761032f565b8063406072a91161024f5780635e2d5fb51161020857806368428a1b116101e257806368428a1b146106f05780636efc76eb1461071b5780636f8b44b01461074457806370a082311461076d5761032f565b80635e2d5fb51461065f5780636352211e1461068a57806365517ed7146106c75761032f565b8063406072a91461055157806342842e0e1461058e57806348b75044146105b7578063511d4b0b146105e05780635a3f26721461060b5780635be7fde8146106485761032f565b806319165587116102a1578063191655871461045657806323b872dd1461047f5780632a55205a146104a857806330176e13146104e65780633100a5351461050f5780633a98ef39146105265761032f565b806301ffc9a71461033457806306fdde0314610371578063081812fc1461039c578063095ea7b3146103d9578063174da4a21461040257806318160ddd1461042b5761032f565b3661032f577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770610316610c42565b34604051610325929190614e18565b60405180910390a1005b600080fd5b34801561034057600080fd5b5061035b60048036038101906103569190614581565b610c4a565b6040516103689190614e85565b60405180910390f35b34801561037d57600080fd5b50610386610cb3565b6040516103939190614ea0565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be919061467d565b610d45565b6040516103d09190614d88565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190614461565b610dc1565b005b34801561040e57600080fd5b506104296004803603810190610424919061467d565b610f02565b005b34801561043757600080fd5b50610440610f88565b60405161044d9190615102565b60405180910390f35b34801561046257600080fd5b5061047d600480360381019061047891906142f6565b610f9f565b005b34801561048b57600080fd5b506104a660048036038101906104a1919061435b565b61114a565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190614747565b61146f565b6040516104dd929190614e18565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190614638565b6114a0565b005b34801561051b57600080fd5b50610524611532565b005b34801561053257600080fd5b5061053b6115da565b6040516105489190615102565b60405180910390f35b34801561055d57600080fd5b50610578600480360381019061057391906145fc565b6115e4565b6040516105859190615102565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b0919061435b565b61166b565b005b3480156105c357600080fd5b506105de60048036038101906105d991906145fc565b61168b565b005b3480156105ec57600080fd5b506105f5611953565b6040516106029190615102565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d91906142cd565b611959565b60405161063f9190614e63565b60405180910390f35b34801561065457600080fd5b5061065d611a98565b005b34801561066b57600080fd5b50610674611b48565b6040516106819190614e41565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac919061467d565b611c5c565b6040516106be9190614d88565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e9919061451e565b611c6e565b005b3480156106fc57600080fd5b50610705611d4c565b6040516107129190614e85565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d919061470b565b611d5f565b005b34801561075057600080fd5b5061076b6004803603810190610766919061467d565b611e2f565b005b34801561077957600080fd5b50610794600480360381019061078f91906142cd565b611eb5565b6040516107a19190615102565b60405180910390f35b3480156107b657600080fd5b506107bf611f6e565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190614747565b611ff6565b005b3480156107f657600080fd5b50610811600480360381019061080c919061467d565b6120c6565b60405161081e9190614d88565b60405180910390f35b34801561083357600080fd5b5061083c612134565b6040516108499190614d88565b60405180910390f35b34801561085e57600080fd5b506108796004803603810190610874919061467d565b61215e565b005b34801561088757600080fd5b506108906121e4565b60405161089d9190614ea0565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c891906142cd565b612276565b6040516108da9190615102565b60405180910390f35b3480156108ef57600080fd5b506108f86122bf565b6040516109059190615102565b60405180910390f35b6109286004803603810190610923919061467d565b6122c5565b005b34801561093657600080fd5b50610951600480360381019061094c9190614425565b612470565b005b34801561095f57600080fd5b5061097a600480360381019061097591906143aa565b6125e8565b005b34801561098857600080fd5b506109a3600480360381019061099e919061467d565b61265b565b005b3480156109b157600080fd5b506109ba6126e1565b6040516109c79190614ea0565b60405180910390f35b3480156109dc57600080fd5b506109f760048036038101906109f2919061467d565b6127ef565b604051610a049190614ea0565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f91906142cd565b61288e565b604051610a419190615102565b60405180910390f35b348015610a5657600080fd5b50610a716004803603810190610a6c919061449d565b6128d7565b005b348015610a7f57600080fd5b50610a88612a3c565b604051610a959190615102565b60405180910390f35b348015610aaa57600080fd5b50610ac56004803603810190610ac091906145d3565b612a42565b604051610ad29190615102565b60405180910390f35b348015610ae757600080fd5b50610b026004803603810190610afd919061467d565b612a8b565b005b348015610b1057600080fd5b50610b19612bc6565b604051610b269190615102565b60405180910390f35b348015610b3b57600080fd5b50610b44612bcc565b604051610b519190615102565b60405180910390f35b348015610b6657600080fd5b50610b816004803603810190610b7c919061431f565b612bd6565b604051610b8e9190614e85565b60405180910390f35b348015610ba357600080fd5b50610bbe6004803603810190610bb991906146cf565b612c6a565b604051610bcb9190615102565b60405180910390f35b610bee6004803603810190610be99190614783565b612d41565b005b348015610bfc57600080fd5b50610c176004803603810190610c1291906142cd565b613135565b005b348015610c2557600080fd5b50610c406004803603810190610c3b9190614747565b61322d565b005b600033905090565b6000632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610ca25760019050610cae565b610cab826132fd565b90505b919050565b606060028054610cc290615462565b80601f0160208091040260200160405190810160405280929190818152602001828054610cee90615462565b8015610d3b5780601f10610d1057610100808354040283529160200191610d3b565b820191906000526020600020905b815481529060010190602001808311610d1e57829003601f168201915b5050505050905090565b6000610d508261338f565b610d86576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610dcc82611c5c565b90508073ffffffffffffffffffffffffffffffffffffffff16610ded6133ee565b73ffffffffffffffffffffffffffffffffffffffff1614610e5057610e1981610e146133ee565b612bd6565b610e4f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f0a610c42565b73ffffffffffffffffffffffffffffffffffffffff16610f28612134565b73ffffffffffffffffffffffffffffffffffffffff1614610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590615022565b60405180910390fd5b8060138190555050565b6000610f926133f6565b6001546000540303905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890614f02565b60405180910390fd5b600061102b612bcc565b476110369190615233565b9050600061104d838361104886612276565b6133fb565b90506000811415611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90614fa2565b60405180910390fd5b80600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110e29190615233565b9250508190555080600a60008282546110fb9190615233565b9250508190555061110c8382613469565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056838260405161113d929190614da3565b60405180910390a1505050565b60006111558261355d565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111bc576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806111c88461362b565b915091506111de81876111d96133ee565b61364d565b61122a576111f3866111ee6133ee565b612bd6565b611229576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611291576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61129e8686866001613691565b80156112a957600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061137785611353888887613697565b7c0200000000000000000000000000000000000000000000000000000000176136bf565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841614156113ff5760006001850190506000600460008381526020019081526020016000205414156113fd5760005481146113fc578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461146786868660016136ea565b505050505050565b60008061147a612134565b6127106017548561148b91906152ba565b6114959190615289565b915091509250929050565b6114a8610c42565b73ffffffffffffffffffffffffffffffffffffffff166114c6612134565b73ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390615022565b60405180910390fd5b81816015919061152d929190614012565b505050565b61153a610c42565b73ffffffffffffffffffffffffffffffffffffffff16611558612134565b73ffffffffffffffffffffffffffffffffffffffff16146115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590615022565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6000600954905090565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611686838383604051806020016040528060008152506125e8565b505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490614f02565b60405180910390fd5b600061171883612a42565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117519190614d88565b60206040518083038186803b15801561176957600080fd5b505afa15801561177d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a191906146a6565b6117ab9190615233565b905060006117c383836117be87876115e4565b6133fb565b90506000811415611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614fa2565b60405180910390fd5b80600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118959190615233565b9250508190555080600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118eb9190615233565b925050819055506118fd8484836136f0565b8373ffffffffffffffffffffffffffffffffffffffff167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a8483604051611945929190614e18565b60405180910390a250505050565b60145481565b6060600061196683611eb5565b67ffffffffffffffff8111156119a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156119d35781602001602082028036833780820191505090505b5090506000805b6119e2610f88565b811015611a8d578473ffffffffffffffffffffffffffffffffffffffff16611a0982611c5c565b73ffffffffffffffffffffffffffffffffffffffff161415611a7a5780838381518110611a5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508180611a76906154c5565b9250505b8080611a85906154c5565b9150506119da565b508192505050919050565b611aa0610c42565b73ffffffffffffffffffffffffffffffffffffffff16611abe612134565b73ffffffffffffffffffffffffffffffffffffffff1614611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90615022565b60405180910390fd5b60005b601654811015611b4557611b32611b2d826120c6565b610f9f565b8080611b3d906154c5565b915050611b17565b50565b6060611b52610c42565b73ffffffffffffffffffffffffffffffffffffffff16611b70612134565b73ffffffffffffffffffffffffffffffffffffffff1614611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90615022565b60405180910390fd5b6018805480602002602001604051908101604052809291908181526020016000905b82821015611c5357838290600052602060002090600402016040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152505081526020019060010190611be8565b50505050905090565b6000611c678261355d565b9050919050565b611c76610c42565b73ffffffffffffffffffffffffffffffffffffffff16611c94612134565b73ffffffffffffffffffffffffffffffffffffffff1614611cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce190615022565b60405180910390fd5b600060186001816001815401808255809150500390600052602060002090600402019050848160000160006101000a81548160ff0219169083151502179055508381600101819055508281600201819055508181600301819055505050505050565b601060009054906101000a900460ff1681565b611d67610c42565b73ffffffffffffffffffffffffffffffffffffffff16611d85612134565b73ffffffffffffffffffffffffffffffffffffffff1614611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290615022565b60405180910390fd5b8060188381548110611e16577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060040201600301819055505050565b611e37610c42565b73ffffffffffffffffffffffffffffffffffffffff16611e55612134565b73ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290615022565b60405180910390fd5b8060128190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f1d576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611f76610c42565b73ffffffffffffffffffffffffffffffffffffffff16611f94612134565b73ffffffffffffffffffffffffffffffffffffffff1614611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe190615022565b60405180910390fd5b611ff46000613776565b565b611ffe610c42565b73ffffffffffffffffffffffffffffffffffffffff1661201c612134565b73ffffffffffffffffffffffffffffffffffffffff1614612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990615022565b60405180910390fd5b80601883815481106120ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060040201600101819055505050565b6000600d8281548110612102577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612166610c42565b73ffffffffffffffffffffffffffffffffffffffff16612184612134565b73ffffffffffffffffffffffffffffffffffffffff16146121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190615022565b60405180910390fd5b8060118190555050565b6060600380546121f390615462565b80601f016020809104026020016040519081016040528092919081815260200182805461221f90615462565b801561226c5780601f106122415761010080835404028352916020019161226c565b820191906000526020600020905b81548152906001019060200180831161224f57829003601f168201915b5050505050905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60115481565b601060009054906101000a900460ff16612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90615062565b60405180910390fd5b601454816123213361383c565b61232b9190615233565b111561236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390614ec2565b60405180910390fd5b601354811115801561237e5750600081115b6123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490614fc2565b60405180910390fd5b6012546123c8610f88565b826123d39190615233565b1115612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b90614f62565b60405180910390fd5b8060115461242291906152ba565b3414612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a90615042565b60405180910390fd5b61246d3382613893565b50565b6124786133ee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124dd576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006124ea6133ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166125976133ee565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125dc9190614e85565b60405180910390a35050565b6125f384848461114a565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126555761261e84848484613a67565b612654576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b612663610c42565b73ffffffffffffffffffffffffffffffffffffffff16612681612134565b73ffffffffffffffffffffffffffffffffffffffff16146126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce90615022565b60405180910390fd5b8060148190555050565b60606126eb610c42565b73ffffffffffffffffffffffffffffffffffffffff16612709612134565b73ffffffffffffffffffffffffffffffffffffffff161461275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275690615022565b60405180910390fd5b6015805461276c90615462565b80601f016020809104026020016040519081016040528092919081815260200182805461279890615462565b80156127e55780601f106127ba576101008083540402835291602001916127e5565b820191906000526020600020905b8154815290600101906020018083116127c857829003601f168201915b5050505050905090565b60606127fa8261338f565b612830576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061283a613bc7565b905060008151141561285b5760405180602001604052806000815250612886565b8061286584613c59565b604051602001612876929190614d4f565b6040516020818303038152906040525b915050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6128df610c42565b73ffffffffffffffffffffffffffffffffffffffff166128fd612134565b73ffffffffffffffffffffffffffffffffffffffff1614612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90615022565b60405180910390fd5b600061295d610f88565b905060125481838686905061297291906152ba565b61297c9190615233565b11156129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490615082565b60405180910390fd5b60005b84849050811015612a3557612a22858583818110612a07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190612a1c91906142cd565b84613893565b8080612a2d906154c5565b9150506129c0565b5050505050565b60125481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612a93610c42565b73ffffffffffffffffffffffffffffffffffffffff16612ab1612134565b73ffffffffffffffffffffffffffffffffffffffff1614612b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afe90615022565b60405180910390fd5b60188181548110612b41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160009054906101000a900460ff161560188281548110612b9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160006101000a81548160ff02191690831515021790555050565b60135481565b6000600a54905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000612c74610c42565b73ffffffffffffffffffffffffffffffffffffffff16612c92612134565b73ffffffffffffffffffffffffffffffffffffffff1614612ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdf90615022565b60405180910390fd5b6019600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600060188581548110612d7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600402016040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152505090508060000151612e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0c90614fe2565b60405180910390fd5b60145484612e223361383c565b612e2c9190615233565b1115612e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6490614ec2565b60405180910390fd5b6013548411158015612e7f5750600084115b612ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb590614fc2565b60405180910390fd5b601254612ec9610f88565b85612ed49190615233565b1115612f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0c90614f62565b60405180910390fd5b838160200151612f2591906152ba565b3414612f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5d90615042565b60405180910390fd5b8060400151846019600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc79190615233565b1115613008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fff906150c2565b60405180910390fd5b61307e838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508260600151336040516020016130639190614d1d565b60405160208183030381529060405280519060200120613cb3565b6130bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b490615002565b60405180910390fd5b6130c73385613893565b836019600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131279190615233565b925050819055505050505050565b61313d610c42565b73ffffffffffffffffffffffffffffffffffffffff1661315b612134565b73ffffffffffffffffffffffffffffffffffffffff16146131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a890615022565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321890614ee2565b60405180910390fd5b61322a81613776565b50565b613235610c42565b73ffffffffffffffffffffffffffffffffffffffff16613253612134565b73ffffffffffffffffffffffffffffffffffffffff16146132a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a090615022565b60405180910390fd5b80601883815481106132e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060040201600201819055505050565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061335857506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806133885750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60008161339a6133f6565b111580156133a9575060005482105b80156133e7575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b600081600954600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548561344c91906152ba565b6134569190615289565b6134609190615314565b90509392505050565b804710156134ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a390614f42565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516134d290614d73565b60006040518083038185875af1925050503d806000811461350f576040519150601f19603f3d011682016040523d82523d6000602084013e613514565b606091505b5050905080613558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354f90614f22565b60405180910390fd5b505050565b6000808290508061356c6133f6565b116135f4576000548110156135f35760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821614156135f1575b60008114156135e75760046000836001900393508381526020019081526020016000205490506135bc565b8092505050613626565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86136ae868684613cca565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6137718363a9059cbb60e01b848460405160240161370f929190614e18565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613cd3565b505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613900576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082141561393b576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6139486000848385613691565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506139bf836139b06000866000613697565b6139b985613d9a565b176136bf565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106139e357806000819055505050613a6260008483856136ea565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a8d6133ee565b8786866040518563ffffffff1660e01b8152600401613aaf9493929190614dcc565b602060405180830381600087803b158015613ac957600080fd5b505af1925050508015613afa57506040513d601f19601f82011682018060405250810190613af791906145aa565b60015b613b74573d8060008114613b2a576040519150601f19603f3d011682016040523d82523d6000602084013e613b2f565b606091505b50600081511415613b6c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060158054613bd690615462565b80601f0160208091040260200160405190810160405280929190818152602001828054613c0290615462565b8015613c4f5780601f10613c2457610100808354040283529160200191613c4f565b820191906000526020600020905b815481529060010190602001808311613c3257829003601f168201915b5050505050905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b8015613c9f57600183039250600a81066030018353600a81049050613c7f565b508181036020830392508083525050919050565b600082613cc08584613daa565b1490509392505050565b60009392505050565b6000613d35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613e459092919063ffffffff16565b9050600081511115613d955780806020019051810190613d5591906144f5565b613d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8b906150e2565b60405180910390fd5b5b505050565b60006001821460e11b9050919050565b60008082905060005b8451811015613e3a576000858281518110613df7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311613e1957613e128382613e5d565b9250613e26565b613e238184613e5d565b92505b508080613e32906154c5565b915050613db3565b508091505092915050565b6060613e548484600085613e74565b90509392505050565b600082600052816020526040600020905092915050565b606082471015613eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb090614f82565b60405180910390fd5b613ec285613f88565b613f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ef8906150a2565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613f2a9190614d38565b60006040518083038185875af1925050503d8060008114613f67576040519150601f19603f3d011682016040523d82523d6000602084013e613f6c565b606091505b5091509150613f7c828286613fab565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315613fbb5782905061400b565b600083511115613fce5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140029190614ea0565b60405180910390fd5b9392505050565b82805461401e90615462565b90600052602060002090601f0160209004810192826140405760008555614087565b82601f1061405957803560ff1916838001178555614087565b82800160010185558215614087579182015b8281111561408657823582559160200191906001019061406b565b5b5090506140949190614098565b5090565b5b808211156140b1576000816000905550600101614099565b5090565b60006140c86140c384615142565b61511d565b9050828152602081018484840111156140e057600080fd5b6140eb848285615420565b509392505050565b600081359050614102816159d5565b92915050565b600081359050614117816159ec565b92915050565b60008083601f84011261412f57600080fd5b8235905067ffffffffffffffff81111561414857600080fd5b60208301915083602082028301111561416057600080fd5b9250929050565b60008083601f84011261417957600080fd5b8235905067ffffffffffffffff81111561419257600080fd5b6020830191508360208202830111156141aa57600080fd5b9250929050565b6000813590506141c081615a03565b92915050565b6000815190506141d581615a03565b92915050565b6000813590506141ea81615a1a565b92915050565b6000813590506141ff81615a31565b92915050565b60008151905061421481615a31565b92915050565b600082601f83011261422b57600080fd5b813561423b8482602086016140b5565b91505092915050565b60008135905061425381615a48565b92915050565b60008083601f84011261426b57600080fd5b8235905067ffffffffffffffff81111561428457600080fd5b60208301915083600182028301111561429c57600080fd5b9250929050565b6000813590506142b281615a5f565b92915050565b6000815190506142c781615a5f565b92915050565b6000602082840312156142df57600080fd5b60006142ed848285016140f3565b91505092915050565b60006020828403121561430857600080fd5b600061431684828501614108565b91505092915050565b6000806040838503121561433257600080fd5b6000614340858286016140f3565b9250506020614351858286016140f3565b9150509250929050565b60008060006060848603121561437057600080fd5b600061437e868287016140f3565b935050602061438f868287016140f3565b92505060406143a0868287016142a3565b9150509250925092565b600080600080608085870312156143c057600080fd5b60006143ce878288016140f3565b94505060206143df878288016140f3565b93505060406143f0878288016142a3565b925050606085013567ffffffffffffffff81111561440d57600080fd5b6144198782880161421a565b91505092959194509250565b6000806040838503121561443857600080fd5b6000614446858286016140f3565b9250506020614457858286016141b1565b9150509250929050565b6000806040838503121561447457600080fd5b6000614482858286016140f3565b9250506020614493858286016142a3565b9150509250929050565b6000806000604084860312156144b257600080fd5b600084013567ffffffffffffffff8111156144cc57600080fd5b6144d88682870161411d565b935093505060206144eb868287016142a3565b9150509250925092565b60006020828403121561450757600080fd5b6000614515848285016141c6565b91505092915050565b6000806000806080858703121561453457600080fd5b6000614542878288016141b1565b9450506020614553878288016142a3565b9350506040614564878288016142a3565b9250506060614575878288016141db565b91505092959194509250565b60006020828403121561459357600080fd5b60006145a1848285016141f0565b91505092915050565b6000602082840312156145bc57600080fd5b60006145ca84828501614205565b91505092915050565b6000602082840312156145e557600080fd5b60006145f384828501614244565b91505092915050565b6000806040838503121561460f57600080fd5b600061461d85828601614244565b925050602061462e858286016140f3565b9150509250929050565b6000806020838503121561464b57600080fd5b600083013567ffffffffffffffff81111561466557600080fd5b61467185828601614259565b92509250509250929050565b60006020828403121561468f57600080fd5b600061469d848285016142a3565b91505092915050565b6000602082840312156146b857600080fd5b60006146c6848285016142b8565b91505092915050565b600080604083850312156146e257600080fd5b60006146f0858286016142a3565b9250506020614701858286016140f3565b9150509250929050565b6000806040838503121561471e57600080fd5b600061472c858286016142a3565b925050602061473d858286016141db565b9150509250929050565b6000806040838503121561475a57600080fd5b6000614768858286016142a3565b9250506020614779858286016142a3565b9150509250929050565b6000806000806060858703121561479957600080fd5b60006147a7878288016142a3565b94505060206147b8878288016142a3565b935050604085013567ffffffffffffffff8111156147d557600080fd5b6147e187828801614167565b925092505092959194509250565b60006147fb8383614caa565b60808301905092915050565b60006148138383614cff565b60208301905092915050565b614828816153ea565b82525050565b61483781615348565b82525050565b61484e61484982615348565b61550e565b82525050565b600061485f82615193565b61486981856151d9565b935061487483615173565b8060005b838110156148a557815161488c88826147ef565b9750614897836151bf565b925050600181019050614878565b5085935050505092915050565b60006148bd8261519e565b6148c781856151ea565b93506148d283615183565b8060005b838110156149035781516148ea8882614807565b97506148f5836151cc565b9250506001810190506148d6565b5085935050505092915050565b6149198161536c565b82525050565b6149288161536c565b82525050565b61493781615378565b82525050565b6000614948826151a9565b61495281856151fb565b935061496281856020860161542f565b61496b816155ee565b840191505092915050565b6000614981826151a9565b61498b818561520c565b935061499b81856020860161542f565b80840191505092915050565b60006149b2826151b4565b6149bc8185615217565b93506149cc81856020860161542f565b6149d5816155ee565b840191505092915050565b60006149eb826151b4565b6149f58185615228565b9350614a0581856020860161542f565b80840191505092915050565b6000614a1e601283615217565b9150614a298261560c565b602082019050919050565b6000614a41602683615217565b9150614a4c82615635565b604082019050919050565b6000614a64602683615217565b9150614a6f82615684565b604082019050919050565b6000614a87603a83615217565b9150614a92826156d3565b604082019050919050565b6000614aaa601d83615217565b9150614ab582615722565b602082019050919050565b6000614acd601483615217565b9150614ad88261574b565b602082019050919050565b6000614af0602683615217565b9150614afb82615774565b604082019050919050565b6000614b13602b83615217565b9150614b1e826157c3565b604082019050919050565b6000614b36601883615217565b9150614b4182615812565b602082019050919050565b6000614b59601683615217565b9150614b648261583b565b602082019050919050565b6000614b7c601d83615217565b9150614b8782615864565b602082019050919050565b6000614b9f602083615217565b9150614baa8261588d565b602082019050919050565b6000614bc2600d83615217565b9150614bcd826158b6565b602082019050919050565b6000614be5601183615217565b9150614bf0826158df565b602082019050919050565b6000614c08601a83615217565b9150614c1382615908565b602082019050919050565b6000614c2b60008361520c565b9150614c3682615931565b600082019050919050565b6000614c4e601d83615217565b9150614c5982615934565b602082019050919050565b6000614c71601c83615217565b9150614c7c8261595d565b602082019050919050565b6000614c94602a83615217565b9150614c9f82615986565b604082019050919050565b608082016000820151614cc06000850182614910565b506020820151614cd36020850182614cff565b506040820151614ce66040850182614cff565b506060820151614cf9606085018261492e565b50505050565b614d08816153e0565b82525050565b614d17816153e0565b82525050565b6000614d29828461483d565b60148201915081905092915050565b6000614d448284614976565b915081905092915050565b6000614d5b82856149e0565b9150614d6782846149e0565b91508190509392505050565b6000614d7e82614c1e565b9150819050919050565b6000602082019050614d9d600083018461482e565b92915050565b6000604082019050614db8600083018561481f565b614dc56020830184614d0e565b9392505050565b6000608082019050614de1600083018761482e565b614dee602083018661482e565b614dfb6040830185614d0e565b8181036060830152614e0d818461493d565b905095945050505050565b6000604082019050614e2d600083018561482e565b614e3a6020830184614d0e565b9392505050565b60006020820190508181036000830152614e5b8184614854565b905092915050565b60006020820190508181036000830152614e7d81846148b2565b905092915050565b6000602082019050614e9a600083018461491f565b92915050565b60006020820190508181036000830152614eba81846149a7565b905092915050565b60006020820190508181036000830152614edb81614a11565b9050919050565b60006020820190508181036000830152614efb81614a34565b9050919050565b60006020820190508181036000830152614f1b81614a57565b9050919050565b60006020820190508181036000830152614f3b81614a7a565b9050919050565b60006020820190508181036000830152614f5b81614a9d565b9050919050565b60006020820190508181036000830152614f7b81614ac0565b9050919050565b60006020820190508181036000830152614f9b81614ae3565b9050919050565b60006020820190508181036000830152614fbb81614b06565b9050919050565b60006020820190508181036000830152614fdb81614b29565b9050919050565b60006020820190508181036000830152614ffb81614b4c565b9050919050565b6000602082019050818103600083015261501b81614b6f565b9050919050565b6000602082019050818103600083015261503b81614b92565b9050919050565b6000602082019050818103600083015261505b81614bb5565b9050919050565b6000602082019050818103600083015261507b81614bd8565b9050919050565b6000602082019050818103600083015261509b81614bfb565b9050919050565b600060208201905081810360008301526150bb81614c41565b9050919050565b600060208201905081810360008301526150db81614c64565b9050919050565b600060208201905081810360008301526150fb81614c87565b9050919050565b60006020820190506151176000830184614d0e565b92915050565b6000615127615138565b90506151338282615494565b919050565b6000604051905090565b600067ffffffffffffffff82111561515d5761515c6155bf565b5b615166826155ee565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061523e826153e0565b9150615249836153e0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561527e5761527d615532565b5b828201905092915050565b6000615294826153e0565b915061529f836153e0565b9250826152af576152ae615561565b5b828204905092915050565b60006152c5826153e0565b91506152d0836153e0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561530957615308615532565b5b828202905092915050565b600061531f826153e0565b915061532a836153e0565b92508282101561533d5761533c615532565b5b828203905092915050565b6000615353826153c0565b9050919050565b6000615365826153c0565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006153b982615348565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006153f5826153fc565b9050919050565b60006154078261540e565b9050919050565b6000615419826153c0565b9050919050565b82818337600083830152505050565b60005b8381101561544d578082015181840152602081019050615432565b8381111561545c576000848401525b50505050565b6000600282049050600182168061547a57607f821691505b6020821081141561548e5761548d615590565b5b50919050565b61549d826155ee565b810181811067ffffffffffffffff821117156154bc576154bb6155bf565b5b80604052505050565b60006154d0826153e0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561550357615502615532565b5b600182019050919050565b600061551982615520565b9050919050565b600061552b826155ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45786365656473206d696e74206c696d69740000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4578636565647320746f74616c20737570706c79000000000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b7f517479206f66206d696e7473206e6f7420616c6c6f7765640000000000000000600082015250565b7f57686974656c6973742069736e27742061637469766500000000000000000000600082015250565b7f4372697465726961206e6f74206f6e207468652077686974656c697374000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c69642076616c756500000000000000000000000000000000000000600082015250565b7f53616c652069736e277420616374697665000000000000000000000000000000600082015250565b7f56616c7565206578636565647320746f74616c20737570706c79000000000000600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f457863656564732077686974656c697374206d696e74206c696d697400000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6159de81615348565b81146159e957600080fd5b50565b6159f58161535a565b8114615a0057600080fd5b50565b615a0c8161536c565b8114615a1757600080fd5b50565b615a2381615378565b8114615a2e57600080fd5b50565b615a3a81615382565b8114615a4557600080fd5b50565b615a51816153ae565b8114615a5c57600080fd5b50565b615a68816153e0565b8114615a7357600080fd5b5056fea2646970667358221220e701d13f97cfd361ebc6ee91171b588947d0d66d26efe2826afbf0528a134d8f64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002d681e65b8f3a7694d1563717dce361b63cd3244000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000