[ { "inputs": [ { "internalType": "uint96", "name": "_feeNumerator", "type": "uint96" }, { "internalType": "uint256", "name": "_contributorTotalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "_garmentsAvailable", "type": "uint256" }, { "components": [ { "internalType": "uint256[]", "name": "contributionValues", "type": "uint256[]" }, { "internalType": "address[]", "name": "taskContributors", "type": "address[]" }, { "internalType": "enum CrowdmuseProduct.TaskStatus[]", "name": "taskStatus", "type": "uint8[]" }, { "internalType": "uint256[]", "name": "taskContributorTypes", "type": "uint256[]" } ], "internalType": "struct CrowdmuseProduct.Task", "name": "_task", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "productName", "type": "string" }, { "internalType": "string", "name": "productSymbol", "type": "string" }, { "internalType": "string", "name": "baseUri", "type": "string" }, { "internalType": "uint256", "name": "maxAmountOfTokensPerMint", "type": "uint256" } ], "internalType": "struct CrowdmuseProduct.Token", "name": "_token", "type": "tuple" }, { "internalType": "address", "name": "_paymentTokenAddress", "type": "address" }, { "internalType": "string", "name": "_inventoryKey", "type": "string" }, { "components": [ { "internalType": "string", "name": "keyName", "type": "string" }, { "internalType": "uint96", "name": "garmentsRemaining", "type": "uint96" } ], "internalType": "struct CrowdmuseProduct.Inventory[]", "name": "_inventory", "type": "tuple[]" }, { "internalType": "bool", "name": "_madeToOrder", "type": "bool" }, { "internalType": "address", "name": "_admin", "type": "address" }, { "internalType": "uint256", "name": "_buyNFTPrice", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "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": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "NFTBySize", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "NFTByType", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "admin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "bytes32", "name": "garmentType", "type": "bytes32" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" } ], "name": "buyNFT", "outputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "buyNFTPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "bytes32", "name": "garmentType", "type": "bytes32" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" } ], "name": "buyPrepaidNFT", "outputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newAddress", "type": "address" } ], "name": "changeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_newBaseUri", "type": "string" } ], "name": "changeBaseUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contributorPointsAllocated", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contributorPointsComplete", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contributorTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "contributors", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_contributionValues", "type": "uint256[]" }, { "internalType": "address[]", "name": "_taskContributors", "type": "address[]" }, { "internalType": "enum CrowdmuseProduct.TaskStatus[]", "name": "_taskStatus", "type": "uint8[]" }, { "internalType": "uint256[]", "name": "_taskType", "type": "uint256[]" } ], "name": "createTasks", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_contributionValues", "type": "uint256[]" }, { "internalType": "address[]", "name": "_taskContributors", "type": "address[]" }, { "internalType": "enum CrowdmuseProduct.TaskStatus[]", "name": "_taskStatus", "type": "uint8[]" }, { "internalType": "uint256[]", "name": "_taskType", "type": "uint256[]" }, { "internalType": "uint256", "name": "_buyNFTPrice", "type": "uint256" } ], "name": "createTasksAndSubmitProduct", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "distributeRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "distributeRewardsNative", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "garmentTypes", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "garmentsAvailable", "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": "getMaxAmountOfTokensPerMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "inventoryGarmentsOrdered", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "inventoryGarmentsRemaining", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "inventoryKey", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "madeToOrder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numberGarmentTypes", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "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": "paymentToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "productStatus", "outputs": [ { "internalType": "enum CrowdmuseProduct.ProductStatus", "name": "", "type": "uint8" } ], "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": "", "type": "address" }, { "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": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_buyNFTPrice", "type": "uint256" } ], "name": "submitProduct", "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": "", "type": "uint256" } ], "name": "taskByTaskId", "outputs": [ { "internalType": "uint256", "name": "taskId", "type": "uint256" }, { "internalType": "uint256", "name": "contributionValue", "type": "uint256" }, { "internalType": "address", "name": "taskOwnerAddress", "type": "address" }, { "internalType": "address", "name": "taskContributor", "type": "address" }, { "internalType": "uint24", "name": "feedbackScore", "type": "uint24" }, { "internalType": "string", "name": "submissionUri", "type": "string" }, { "internalType": "string", "name": "taskMetadataUri", "type": "string" }, { "internalType": "enum CrowdmuseProduct.TaskStatus", "name": "taskStatus", "type": "uint8" }, { "internalType": "uint256", "name": "taskType", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenId", "outputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b50604051620042c3380380620042c3833981016040819052620000349162000db8565b8651602080890151825190916200005191600291850190620007cd565b50805162000067906003906020840190620007cd565b50600160005550506001600a556200007f3362000332565b601880546001600160a01b0319166001600160a01b038416179055620000a6308c62000384565b601680546001600160a01b0319166001600160a01b038816179055600f805460ff1916905560128a90556015899055606087810151601155885160208a015160408b0151928b0151620000fa939062000485565b601081905580156200011457600f805460ff191660011790555b82620002ea5784516000906200013290601d906020890190620007cd565b5060005b85518110156200027b5785818151811062000155576200015562000f09565b602002602001015160200151826200016e919062000f35565b9150601e86828151811062000187576200018762000f09565b6020908102919091018101515182546001810184556000938452928290208151620001bc9491909101929190910190620007cd565b50858181518110620001d257620001d262000f09565b60200260200101516020015160206000888481518110620001f757620001f762000f09565b60200260200101516000015160405160200162000215919062000f63565b60408051601f1981840301815291815281516020928301208352908201929092520160002080546001600160601b039283166001600160601b0319918216179091558751601f805491909316911617905580620002728162000f81565b91505062000136565b50896001600160601b0316816001600160601b031614620002e35760405162461bcd60e51b815260206004820152601c60248201527f6761726d656e74206e756d62657273206e6f74206d61746368696e670000000060448201526064015b60405180910390fd5b50620002f8565b6022805460ff191660011790555b604087015151156200032157604087015180516200031f91601791602090910190620007cd565b505b505050505050505050505062000ff7565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b0382161115620003f45760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401620002da565b6001600160a01b0382166200044c5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620002da565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600855565b6200048f6200073e565b60005b84518110156200073757601254601354868381518110620004b757620004b762000f09565b6020026020010151620004cb919062000f9f565b11156200051b5760405162461bcd60e51b815260206004820181905260248201527f436f6e747269627574696f6e2076616c75652065786365656473206c696d69746044820152606401620002da565b62000532600c6200079c60201b620020df1760201c565b60006200054b600c620007a560201b620020e81760201c565b60008181526019602052604090208181556002810180546001600160a01b031916331790558751919250908790849081106200058b576200058b62000f09565b60200260200101518160010181905550848381518110620005b057620005b062000f09565b602090810291909101015160088201805460ff19166001836002811115620005dc57620005dc62000ef3565b0217905550858381518110620005f657620005f662000f09565b60200260200101518160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508383815181106200063b576200063b62000f09565b6020026020010151816009018190555086838151811062000660576200066062000f09565b6020026020010151601360008282546200067b919062000f9f565b909155506002905085848151811062000698576200069862000f09565b60200260200101516002811115620006b457620006b462000ef3565b14156200071f57868381518110620006d057620006d062000f09565b602002602001015160146000828254620006eb919062000f9f565b925050819055506200071f8684815181106200070b576200070b62000f09565b6020026020010151620007a960201b60201c565b505080806200072e9062000f81565b91505062000492565b5050505050565b600b546001600160a01b031633146200079a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002da565b565b80546001019055565b5490565b6001600160a01b03166000908152601c60205260409020805460ff19166001179055565b828054620007db9062000fba565b90600052602060002090601f016020900481019282620007ff57600085556200084a565b82601f106200081a57805160ff19168380011785556200084a565b828001600101855582156200084a579182015b828111156200084a5782518255916020019190600101906200082d565b50620008589291506200085c565b5090565b5b808211156200085857600081556001016200085d565b80516001600160601b03811681146200088b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620008cb57620008cb62000890565b60405290565b604080519081016001600160401b0381118282101715620008cb57620008cb62000890565b604051601f8201601f191681016001600160401b038111828210171562000921576200092162000890565b604052919050565b60006001600160401b0382111562000945576200094562000890565b5060051b60200190565b600082601f8301126200096157600080fd5b815160206200097a620009748362000929565b620008f6565b82815260059290921b840181019181810190868411156200099a57600080fd5b8286015b84811015620009b757805183529183019183016200099e565b509695505050505050565b80516001600160a01b03811681146200088b57600080fd5b600082601f830112620009ec57600080fd5b81516020620009ff620009748362000929565b82815260059290921b8401810191818101908684111562000a1f57600080fd5b8286015b84811015620009b75762000a3781620009c2565b835291830191830162000a23565b600082601f83011262000a5757600080fd5b8151602062000a6a620009748362000929565b82815260059290921b8401810191818101908684111562000a8a57600080fd5b8286015b84811015620009b75780516003811062000aa85760008081fd5b835291830191830162000a8e565b60006080828403121562000ac957600080fd5b62000ad3620008a6565b82519091506001600160401b038082111562000aee57600080fd5b62000afc858386016200094f565b8352602084015191508082111562000b1357600080fd5b62000b2185838601620009da565b6020840152604084015191508082111562000b3b57600080fd5b62000b498583860162000a45565b6040840152606084015191508082111562000b6357600080fd5b5062000b72848285016200094f565b60608301525092915050565b60005b8381101562000b9b57818101518382015260200162000b81565b8381111562000bab576000848401525b50505050565b600082601f83011262000bc357600080fd5b81516001600160401b0381111562000bdf5762000bdf62000890565b62000bf4601f8201601f1916602001620008f6565b81815284602083860101111562000c0a57600080fd5b62000c1d82602083016020870162000b7e565b949350505050565b60006080828403121562000c3857600080fd5b62000c42620008a6565b82519091506001600160401b038082111562000c5d57600080fd5b62000c6b8583860162000bb1565b8352602084015191508082111562000c8257600080fd5b62000c908583860162000bb1565b6020840152604084015191508082111562000caa57600080fd5b5062000cb98482850162000bb1565b6040830152506060820151606082015292915050565b600082601f83011262000ce157600080fd5b8151602062000cf4620009748362000929565b82815260059290921b8401810191818101908684111562000d1457600080fd5b8286015b84811015620009b75780516001600160401b038082111562000d3a5760008081fd5b908801906040828b03601f190181131562000d555760008081fd5b62000d5f620008d1565b878401518381111562000d725760008081fd5b62000d828d8a8388010162000bb1565b82525062000d9282850162000873565b81890152865250505091830191830162000d18565b805180151581146200088b57600080fd5b60008060008060008060008060008060006101608c8e03121562000ddb57600080fd5b62000de68c62000873565b60208d015160408e015160608f0151929d50909b5099506001600160401b0381111562000e1257600080fd5b62000e208e828f0162000ab6565b60808e015190995090506001600160401b0381111562000e3f57600080fd5b62000e4d8e828f0162000c25565b97505062000e5e60a08d01620009c2565b60c08d01519096506001600160401b0381111562000e7b57600080fd5b62000e898e828f0162000bb1565b60e08e015190965090506001600160401b0381111562000ea857600080fd5b62000eb68e828f0162000ccf565b94505062000ec86101008d0162000da7565b925062000ed96101208d01620009c2565b91506101408c015190509295989b509295989b9093969950565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160601b0382811684821680830382111562000f5a5762000f5a62000f1f565b01949350505050565b6000825162000f7781846020870162000b7e565b9190910192915050565b600060001982141562000f985762000f9862000f1f565b5060010190565b6000821982111562000fb55762000fb562000f1f565b500190565b600181811c9082168062000fcf57607f821691505b6020821081141562000ff157634e487b7160e01b600052602260045260246000fd5b50919050565b6132bc80620010076000396000f3fe6080604052600436106102e75760003560e01c806370a0823111610182578063c443665c116100d5578063e8d1296b11610084578063f851a44011610061578063f851a440146108fc578063f90be2371461091c578063f99a4ffb1461093657005b8063e8d1296b1461087e578063e985e9c514610893578063f2fde38b146108dc57005b8063cad11ec6116100b2578063cad11ec614610817578063cda17b5f14610837578063d92cb69a1461085757005b8063c443665c146107a2578063c7119e37146107c2578063c87b56dd146107f757005b8063a1fe4d5111610131578063ac6b0dcc1161010e578063ac6b0dcc14610764578063b115406a1461077a578063b88d4fde1461078f57005b8063a1fe4d5114610704578063a22cb46514610724578063a58974de1461074457005b80638da5cb5b1161015f5780638da5cb5b146106b15780638f283970146106cf57806395d89b41146106ef57005b806370a082311461065c578063715018a61461067c578063817776421461069157005b80632a55205a1161023a5780635197c1ca116101e95780636c0360eb116101c65780636c0360eb1461061d5780636f4a2cd014610632578063708f16ce1461064757005b80635197c1ca146105d157806358a09cfd146105e75780636352211e146105fd57005b806342842e0e1161021757806342842e0e1461055c57806344c6ca9e1461056f578063492d306b146105b157005b80632a55205a146104dd5780633013ce291461051c5780633719743e1461053c57005b80630f4dbdc01161029657806318160ddd1161027357806318160ddd1461047d5780631f6d49421461049a57806323b872dd146104ca57005b80630f4dbdc01461041557806316065fdd1461043957806317d70f7c1461046657005b8063081812fc116102c4578063081812fc14610394578063095ea7b3146103cc5780630b4b2c7b146103df57005b806301ffc9a7146102f057806306c8286d1461032557806306fdde031461037257005b366102ee57005b005b3480156102fc57600080fd5b5061031061030b3660046129c4565b61094c565b60405190151581526020015b60405180910390f35b34801561033157600080fd5b5061035a6103403660046129e1565b60208052600090815260409020546001600160601b031681565b6040516001600160601b03909116815260200161031c565b34801561037e57600080fd5b50610387610977565b60405161031c9190612a52565b3480156103a057600080fd5b506103b46103af3660046129e1565b610a09565b6040516001600160a01b03909116815260200161031c565b6102ee6103da366004612a81565b610a66565b3480156103eb57600080fd5b5061035a6103fa3660046129e1565b6021602052600090815260409020546001600160601b031681565b34801561042157600080fd5b5061042b60135481565b60405190815260200161031c565b34801561044557600080fd5b5061042b6104543660046129e1565b601b6020526000908152604090205481565b34801561047257600080fd5b50600e5461042b9081565b34801561048957600080fd5b50600154600054036000190161042b565b3480156104a657600080fd5b506103106104b5366004612aab565b601c6020526000908152604090205460ff1681565b6102ee6104d8366004612ac6565b610b2c565b3480156104e957600080fd5b506104fd6104f8366004612b02565b610d09565b604080516001600160a01b03909316835260208301919091520161031c565b34801561052857600080fd5b506016546103b4906001600160a01b031681565b34801561054857600080fd5b506102ee610557366004612cc5565b610db5565b6102ee61056a366004612ac6565b610dd9565b34801561057b57600080fd5b5061059f61058a3660046129e1565b601a6020526000908152604090205460ff1681565b60405160ff909116815260200161031c565b3480156105bd57600080fd5b506102ee6105cc366004612dd2565b610df9565b3480156105dd57600080fd5b5061042b60155481565b3480156105f357600080fd5b5061042b60145481565b34801561060957600080fd5b506103b46106183660046129e1565b610e18565b34801561062957600080fd5b50610387610e23565b34801561063e57600080fd5b506102ee610eb1565b34801561065357600080fd5b5060115461042b565b34801561066857600080fd5b5061042b610677366004612aab565b611051565b34801561068857600080fd5b506102ee6110b9565b34801561069d57600080fd5b506102ee6106ac366004612e1b565b6110cb565b3480156106bd57600080fd5b50600b546001600160a01b03166103b4565b3480156106db57600080fd5b506102ee6106ea366004612aab565b61135a565b3480156106fb57600080fd5b506103876113e7565b34801561071057600080fd5b506102ee61071f3660046129e1565b6113f6565b34801561073057600080fd5b506102ee61073f366004612ed6565b611477565b34801561075057600080fd5b5061042b61075f366004612f0d565b6114e3565b34801561077057600080fd5b5061042b60125481565b34801561078657600080fd5b506102ee6118e4565b6102ee61079d366004612f40565b611a7c565b3480156107ae57600080fd5b50601f5461035a906001600160601b031681565b3480156107ce57600080fd5b506107e26107dd3660046129e1565b611ac6565b60405161031c99989796959493929190612fc6565b34801561080357600080fd5b506103876108123660046129e1565b611c37565b34801561082357600080fd5b506103876108323660046129e1565b611ccb565b34801561084357600080fd5b5061042b610852366004612f0d565b611cf6565b34801561086357600080fd5b50600f546108719060ff1681565b60405161031c9190613049565b34801561088a57600080fd5b50610387612042565b34801561089f57600080fd5b506103106108ae366004613063565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156108e857600080fd5b506102ee6108f7366004612aab565b61204f565b34801561090857600080fd5b506018546103b4906001600160a01b031681565b34801561092857600080fd5b506022546103109060ff1681565b34801561094257600080fd5b5061042b60105481565b60006001600160e01b0319821663152a902d60e11b14806109715750610971826120ec565b92915050565b60606002805461098690613096565b80601f01602080910402602001604051908101604052809291908181526020018280546109b290613096565b80156109ff5780601f106109d4576101008083540402835291602001916109ff565b820191906000526020600020905b8154815290600101906020018083116109e257829003601f168201915b5050505050905090565b6000610a148261213a565b610a4a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610a7182610e18565b9050336001600160a01b03821614610ac357610a8d81336108ae565b610ac3576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610b378261216f565b9050836001600160a01b0316816001600160a01b031614610b84576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610bea57610bb486336108ae565b610bea576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610c2a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015610c3557600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610cc05760018401600081815260046020526040902054610cbe576000548114610cbe5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b60008281526009602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610d7e5750604080518082019091526008546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610d9d906001600160601b0316876130e7565b610da79190613106565b915196919550909350505050565b610dbd6121f1565b610dc9858585856110cb565b610dd2816113f6565b5050505050565b610df483838360405180602001604052806000815250611a7c565b505050565b610e016121f1565b8051610e14906017906020840190612915565b5050565b60006109718261216f565b60178054610e3090613096565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5c90613096565b8015610ea95780601f10610e7e57610100808354040283529160200191610ea9565b820191906000526020600020905b815481529060010190602001808311610e8c57829003601f168201915b505050505081565b610eb961224b565b6016546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f269190613128565b905060008111610f7d5760405162461bcd60e51b815260206004820152601260248201527f4e6f2066756e647320617661696c61626c65000000000000000000000000000060448201526064015b60405180910390fd5b60015b600c54811161104357600260008281526019602052604090206008015460ff166002811115610fb157610fb1612fb0565b1415611031576000611000612710610ffa601454610ffa612710610ff4601960008a8152602001908152602001600020600101548a6122a590919063ffffffff16565b906122a5565b906122b1565b60008381526019602052604090206003015460165491925061102f916001600160a01b039081169116836122bd565b505b8061103b81613141565b915050610f80565b505061104f6001600a55565b565b60006001600160a01b038216611093576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6110c16121f1565b61104f600061234e565b6110d36121f1565b60005b8451811015610dd2576012546013548683815181106110f7576110f761315c565b60200260200101516111099190613172565b11156111575760405162461bcd60e51b815260206004820181905260248201527f436f6e747269627574696f6e2076616c75652065786365656473206c696d69746044820152606401610f74565b611165600c80546001019055565b6000611170600c5490565b600081815260196020526040902081815560028101805473ffffffffffffffffffffffffffffffffffffffff1916331790558751919250908790849081106111ba576111ba61315c565b602002602001015181600101819055508483815181106111dc576111dc61315c565b602090810291909101015160088201805460ff1916600183600281111561120557611205612fb0565b021790555085838151811061121c5761121c61315c565b60200260200101518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083838151811061125e5761125e61315c565b602002602001015181600901819055508683815181106112805761128061315c565b6020026020010151601360008282546112999190613172565b90915550600290508584815181106112b3576112b361315c565b602002602001015160028111156112cc576112cc612fb0565b1415611345578683815181106112e4576112e461315c565b6020026020010151601460008282546112fd9190613172565b925050819055506113458684815181106113195761131961315c565b60200260200101516001600160a01b03166000908152601c60205260409020805460ff19166001179055565b5050808061135290613141565b9150506110d6565b6113626121f1565b6001600160a01b0381166113b85760405162461bcd60e51b815260206004820152600c60248201527f5a65726f204164647265737300000000000000000000000000000000000000006044820152606401610f74565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60606003805461098690613096565b6113fe6121f1565b6001600f5460ff16600181111561141757611417612fb0565b14156114655760405162461bcd60e51b815260206004820152601160248201527f616c7265616479207375626d69747465640000000000000000000000000000006044820152606401610f74565b600f805460ff19166001179055601055565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60006114ed61224b565b6001600160a01b0384166115435760405162461bcd60e51b815260206004820152601860248201527f41646472657373206d757374206e6f74206265207a65726f00000000000000006044820152606401610f74565b6001600f5460ff16600181111561155c5761155c612fb0565b146115a95760405162461bcd60e51b815260206004820152601460248201527f50726f64756374206e6f7420636f6d706c6574650000000000000000000000006044820152606401610f74565b6011548211156115fb5760405162461bcd60e51b815260206004820152601660248201527f5175616e746974792065786365656473206c696d6974000000000000000000006044820152606401610f74565b81601554101561164d5760405162461bcd60e51b815260206004820152601060248201527f4e6f206761726d656e7473206c656674000000000000000000000000000000006044820152606401610f74565b60008381526020805260409020546001600160601b03168211156116b35760405162461bcd60e51b815260206004820152601b60248201527f4e6f6e65206f66207468697320747970652072656d61696e696e6700000000006044820152606401610f74565b6010546116c090836122a5565b6016546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172c9190613128565b101561177a5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f7567682062616c616e636500000000000000000000000000006044820152606401610f74565b601054156117af5760105460009061179290846122a5565b6016549091506117ad906001600160a01b03163330846123ad565b505b6117b984836123fe565b60225460ff161561181457600083815260216020526040812080548492906117eb9084906001600160601b031661318a565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555061185f565b60008381526020805260408120805484929061183a9084906001600160601b03166131b5565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505b816015600082825461187191906131dd565b90915550506000818152601a60205260409020805460ff19166001908117909155805b8381116118d1576118a9600e80546001019055565b600e546000818152601b602052604090208690559250806118c981613141565b915050611894565b50506118dd6001600a55565b9392505050565b6118ec61224b565b478061193a5760405162461bcd60e51b815260206004820152601260248201527f4e6f2066756e647320617661696c61626c6500000000000000000000000000006044820152606401610f74565b60015b600c54811161104357600260008281526019602052604090206008015460ff16600281111561196e5761196e612fb0565b1415611a6a5760006119b1612710610ffa601454610ffa612710610ff4601960008a8152602001908152602001600020600101548a6122a590919063ffffffff16565b60008381526019602052604080822060030154905192935090916001600160a01b039091169083908381818185875af1925050503d8060008114611a11576040519150601f19603f3d011682016040523d82523d6000602084013e611a16565b606091505b5050905080611a675760405162461bcd60e51b815260206004820152600c60248201527f446964206e6f742073656e6400000000000000000000000000000000000000006044820152606401610f74565b50505b80611a7481613141565b91505061193d565b611a87848484610b2c565b6001600160a01b0383163b15611ac057611aa384848484612418565b611ac0576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b601960205260009081526040902080546001820154600283015460038401546005850154600686018054959694956001600160a01b0394851695949093169362ffffff90921692611b1690613096565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4290613096565b8015611b8f5780601f10611b6457610100808354040283529160200191611b8f565b820191906000526020600020905b815481529060010190602001808311611b7257829003601f168201915b505050505090806007018054611ba490613096565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd090613096565b8015611c1d5780601f10611bf257610100808354040283529160200191611c1d565b820191906000526020600020905b815481529060010190602001808311611c0057829003601f168201915b505050506008830154600990930154919260ff1691905089565b606060178054611c4690613096565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7290613096565b8015611cbf5780601f10611c9457610100808354040283529160200191611cbf565b820191906000526020600020905b815481529060010190602001808311611ca257829003601f168201915b50505050509050919050565b601e8181548110611cdb57600080fd5b906000526020600020016000915090508054610e3090613096565b6000611d0061224b565b6018546001600160a01b03163314611d5a5760405162461bcd60e51b815260206004820152600a60248201527f4f6e6c792041646d696e000000000000000000000000000000000000000000006044820152606401610f74565b6001600160a01b038416611db05760405162461bcd60e51b815260206004820152601860248201527f41646472657373206d757374206e6f74206265207a65726f00000000000000006044820152606401610f74565b6001600f5460ff166001811115611dc957611dc9612fb0565b14611e165760405162461bcd60e51b815260206004820152601460248201527f50726f64756374206e6f7420636f6d706c6574650000000000000000000000006044820152606401610f74565b601154821115611e685760405162461bcd60e51b815260206004820152601660248201527f5175616e746974792065786365656473206c696d6974000000000000000000006044820152606401610f74565b816015541015611eba5760405162461bcd60e51b815260206004820152601060248201527f4e6f206761726d656e7473206c656674000000000000000000000000000000006044820152606401610f74565b60008381526020805260409020546001600160601b0316821115611f205760405162461bcd60e51b815260206004820152601b60248201527f4e6f6e65206f66207468697320747970652072656d61696e696e6700000000006044820152606401610f74565b611f2a84836123fe565b60225460ff1615611f855760008381526021602052604081208054849290611f5c9084906001600160601b031661318a565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550611fd0565b600083815260208052604081208054849290611fab9084906001600160601b03166131b5565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505b8160156000828254611fe291906131dd565b90915550506000818152601a60205260409020805460ff19166001908117909155805b8381116118d15761201a600e80546001019055565b600e546000818152601b6020526040902086905592508061203a81613141565b915050612005565b601d8054610e3090613096565b6120576121f1565b6001600160a01b0381166120d35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f74565b6120dc8161234e565b50565b80546001019055565b5490565b60006001600160e01b0319821663152a902d60e11b148061097157507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610971565b60008160011115801561214e575060005482105b8015610971575050600090815260046020526040902054600160e01b161590565b600081806001116121bf576000548110156121bf57600081815260046020526040902054600160e01b81166121bd575b806118dd57506000190160008181526004602052604090205461219f565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b546001600160a01b0316331461104f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f74565b6002600a54141561229e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f74565b6002600a55565b60006118dd82846130e7565b60006118dd8284613106565b6040516001600160a01b038316602482015260448101829052610df49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152612501565b600b80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052611ac09085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612302565b610e148282604051806020016040528060008152506125e9565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061244d9033908990889088906004016131f4565b6020604051808303816000875af1925050508015612488575060408051601f3d908101601f1916820190925261248591810190613230565b60015b6124e3573d8080156124b6576040519150601f19603f3d011682016040523d82523d6000602084013e6124bb565b606091505b5080516124db576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6000612556826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661264f9092919063ffffffff16565b9050805160001480612577575080806020019051810190612577919061324d565b610df45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610f74565b6125f3838361265e565b6001600160a01b0383163b15610df4576000548281035b61261d6000868380600101945086612418565b61263a576040516368d2bf6b60e11b815260040160405180910390fd5b81811061260a578160005414610dd257600080fd5b60606124f98484600085612788565b60005481612698576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461274757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161270f565b508161277f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b6060824710156128005760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610f74565b600080866001600160a01b0316858760405161281c919061326a565b60006040518083038185875af1925050503d8060008114612859576040519150601f19603f3d011682016040523d82523d6000602084013e61285e565b606091505b509150915061286f8783838761287a565b979650505050505050565b606083156128e65782516128df576001600160a01b0385163b6128df5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f74565b50816124f9565b6124f983838151156128fb5781518083602001fd5b8060405162461bcd60e51b8152600401610f749190612a52565b82805461292190613096565b90600052602060002090601f0160209004810192826129435760008555612989565b82601f1061295c57805160ff1916838001178555612989565b82800160010185558215612989579182015b8281111561298957825182559160200191906001019061296e565b50612995929150612999565b5090565b5b80821115612995576000815560010161299a565b6001600160e01b0319811681146120dc57600080fd5b6000602082840312156129d657600080fd5b81356118dd816129ae565b6000602082840312156129f357600080fd5b5035919050565b60005b83811015612a155781810151838201526020016129fd565b83811115611ac05750506000910152565b60008151808452612a3e8160208601602086016129fa565b601f01601f19169290920160200192915050565b6020815260006118dd6020830184612a26565b80356001600160a01b0381168114612a7c57600080fd5b919050565b60008060408385031215612a9457600080fd5b612a9d83612a65565b946020939093013593505050565b600060208284031215612abd57600080fd5b6118dd82612a65565b600080600060608486031215612adb57600080fd5b612ae484612a65565b9250612af260208501612a65565b9150604084013590509250925092565b60008060408385031215612b1557600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b6357612b63612b24565b604052919050565b600067ffffffffffffffff821115612b8557612b85612b24565b5060051b60200190565b600082601f830112612ba057600080fd5b81356020612bb5612bb083612b6b565b612b3a565b82815260059290921b84018101918181019086841115612bd457600080fd5b8286015b84811015612bef5780358352918301918301612bd8565b509695505050505050565b600082601f830112612c0b57600080fd5b81356020612c1b612bb083612b6b565b82815260059290921b84018101918181019086841115612c3a57600080fd5b8286015b84811015612bef57612c4f81612a65565b8352918301918301612c3e565b600082601f830112612c6d57600080fd5b81356020612c7d612bb083612b6b565b82815260059290921b84018101918181019086841115612c9c57600080fd5b8286015b84811015612bef57803560038110612cb85760008081fd5b8352918301918301612ca0565b600080600080600060a08688031215612cdd57600080fd5b853567ffffffffffffffff80821115612cf557600080fd5b612d0189838a01612b8f565b96506020880135915080821115612d1757600080fd5b612d2389838a01612bfa565b95506040880135915080821115612d3957600080fd5b612d4589838a01612c5c565b94506060880135915080821115612d5b57600080fd5b50612d6888828901612b8f565b95989497509295608001359392505050565b600067ffffffffffffffff831115612d9457612d94612b24565b612da7601f8401601f1916602001612b3a565b9050828152838383011115612dbb57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612de457600080fd5b813567ffffffffffffffff811115612dfb57600080fd5b8201601f81018413612e0c57600080fd5b6124f984823560208401612d7a565b60008060008060808587031215612e3157600080fd5b843567ffffffffffffffff80821115612e4957600080fd5b612e5588838901612b8f565b95506020870135915080821115612e6b57600080fd5b612e7788838901612bfa565b94506040870135915080821115612e8d57600080fd5b612e9988838901612c5c565b93506060870135915080821115612eaf57600080fd5b50612ebc87828801612b8f565b91505092959194509250565b80151581146120dc57600080fd5b60008060408385031215612ee957600080fd5b612ef283612a65565b91506020830135612f0281612ec8565b809150509250929050565b600080600060608486031215612f2257600080fd5b612f2b84612a65565b95602085013595506040909401359392505050565b60008060008060808587031215612f5657600080fd5b612f5f85612a65565b9350612f6d60208601612a65565b925060408501359150606085013567ffffffffffffffff811115612f9057600080fd5b8501601f81018713612fa157600080fd5b612ebc87823560208401612d7a565b634e487b7160e01b600052602160045260246000fd5b60006101208b83528a60208401526001600160a01b03808b166040850152808a1660608501525062ffffff881660808401528060a084015261300a81840188612a26565b905082810360c084015261301e8187612a26565b9150506003841061303157613031612fb0565b60e08201939093526101000152979650505050505050565b602081016002831061305d5761305d612fb0565b91905290565b6000806040838503121561307657600080fd5b61307f83612a65565b915061308d60208401612a65565b90509250929050565b600181811c908216806130aa57607f821691505b602082108114156130cb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613101576131016130d1565b500290565b60008261312357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561313a57600080fd5b5051919050565b6000600019821415613155576131556130d1565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60008219821115613185576131856130d1565b500190565b60006001600160601b038083168185168083038211156131ac576131ac6130d1565b01949350505050565b60006001600160601b03838116908316818110156131d5576131d56130d1565b039392505050565b6000828210156131ef576131ef6130d1565b500390565b60006001600160a01b038087168352808616602084015250836040830152608060608301526132266080830184612a26565b9695505050505050565b60006020828403121561324257600080fd5b81516118dd816129ae565b60006020828403121561325f57600080fd5b81516118dd81612ec8565b6000825161327c8184602087016129fa565b919091019291505056fea2646970667358221220c5e3cba29ed84f56e1d49a95a39f8abe59094e66877ebe8fe0e71fe3cac4a86a64736f6c634300080a003300000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000cccccccc7021b32ebb4e8c08314bd62f7c653ec4000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fac6dc78a3dc38043e1ca5873c60bf3fda4277fe0000000000000000000000000000000000000000000000000000000000989680000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000053a2386fddab503b20128dff0b234d51a1e1620000000000000000000000000e4b4a168939baefd59aaa9a98d02a16e2a7f6406000000000000000000000000b38b6c236347603e0705f912b877d6308ec10f1300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001243726f77646d757365205a6f72622050696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343726f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f6261666b726569637572627a356d7062696566716e696475796f3634786d69796a6c376c77717462736e34693464376174336e6a756d716137616100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000873697a653a50696e000000000000000000000000000000000000000000000000