diff --git a/dapp/Contract/FishNFT.json b/dapp/Contract/FishNFT.json index 99d3931..2546a7a 100644 --- a/dapp/Contract/FishNFT.json +++ b/dapp/Contract/FishNFT.json @@ -96,19 +96,6 @@ "name": "ApprovalForAll", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "extension", - "type": "address" - } - ], - "name": "ApproveTransferUpdated", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -323,19 +310,6 @@ "name": "Transfer", "type": "event" }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -472,12 +446,12 @@ }, { "inputs": [], - "name": "fishChargeTime", + "name": "defaultURI", "outputs": [ { - "internalType": "uint256", + "internalType": "string", "name": "", - "type": "uint256" + "type": "string" } ], "stateMutability": "view", @@ -540,19 +514,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "getApproveTransfer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -698,6 +659,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "getPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -793,7 +773,13 @@ } ], "name": "mint", - "outputs": [], + "outputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], "stateMutability": "nonpayable", "type": "function" }, @@ -907,30 +893,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint80", - "name": "data", - "type": "uint80" - } - ], - "name": "mintExtension", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -979,30 +941,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint80[]", - "name": "data", - "type": "uint80[]" - } - ], - "name": "mintExtensionBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "tokenIds", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -1072,6 +1010,26 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "payMint", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "produceTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "productRatio", @@ -1346,19 +1304,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "extension", - "type": "address" - } - ], - "name": "setApproveTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -1465,6 +1410,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "setProductRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1711,25 +1669,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenData", - "outputs": [ - { - "internalType": "uint80", - "name": "", - "type": "uint80" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -1742,7 +1681,7 @@ "outputs": [ { "internalType": "address", - "name": "extension", + "name": "", "type": "address" } ], @@ -1818,8 +1757,8 @@ "type": "function" } ], - "bytecode": "0x60806040526000600a5562015180602055606460215560786022553480156200002757600080fd5b5060405180604001604052806007815260200166119a5cda13919560ca1b8152506040518060400160405280600381526020016223232360e91b8152508181620000806200007a620000ac60201b60201c565b620000b0565b600180556004620000928382620001a5565b506005620000a18282620001a5565b505050505062000271565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200012b57607f821691505b6020821081036200014c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001a057600081815260208120601f850160051c810160208610156200017b5750805b601f850160051c820191505b818110156200019c5782815560010162000187565b5050505b505050565b81516001600160401b03811115620001c157620001c162000100565b620001d981620001d2845462000116565b8462000152565b602080601f831160018114620002115760008415620001f85750858301515b600019600386901b1c1916600185901b1785556200019c565b600085815260208120601f198616915b82811015620002425788860151825594840194600190910190840162000221565b5085821015620002615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b615ec080620002816000396000f3fe608060405234801561001057600080fd5b50600436106104805760003560e01c80636d73e66911610257578063b0fe87c911610146578063d5a06d4c116100c3578063f0cdc49911610087578063f0cdc49914610b46578063f26b013a14610b59578063f2fde38b14610b62578063fe2e1f5814610b75578063ffa1ad7414610b8857600080fd5b8063d5a06d4c14610a8d578063e00aab4b14610afa578063e6a0bc4b14610b0d578063e92a89f614610b20578063e985e9c514610b3357600080fd5b8063bb3bafd61161010a578063bb3bafd614610a8d578063c87b56dd14610aae578063c94c7ff414610ac1578063ce8aee9d14610ad4578063d397371914610ae757600080fd5b8063b0fe87c914610986578063b4b5b48f14610999578063b68d6f36146109ea578063b88d4fde14610a5a578063b9c4d9fb14610a6d57600080fd5b80638e9345d2116101d4578063a22cb46511610198578063a22cb46514610927578063a4c5fc7a1461093a578063aafb2d441461094d578063ac0c8cfa14610960578063ad2d0ddd1461097357600080fd5b80638e9345d2146108c6578063953bf8a2146108e657806395d89b41146108f957806399e0dd7c146109015780639d76ea581461091457600080fd5b80637aa15f161161021b5780637aa15f161461087e57806382dcc0c81461089157806383b7db63146108a45780638c0fb792146108ac5780638da5cb5b146108b557600080fd5b80636d73e6691461082a57806370a082311461083d578063715018a61461085057806372ff03d3146108585780637884af441461086b57600080fd5b80632d3456701161037357806342842e0e116102f05780636352211e116102b45780636352211e146107cb5780636622fa39146107de57806366d1e9d0146107f1578063672001541461080457806368d4c46a1461081757600080fd5b806342842e0e1461076c57806342966c681461077f5780635768f27114610792578063596798ad146107a557806361e5bc6b146107b857600080fd5b8063350a332911610337578063350a33291461070d57806338e52e78146107205780633e6134b8146107335780633f0f37f6146107465780634278330e1461075957600080fd5b80632d345670146106ac57806330176e13146106bf5780633071a0f9146106d257806331ae450b146106e5578063332dd1ae146106fa57600080fd5b806322f374d01161040157806326a4e8d2116103c557806326a4e8d214610638578063287ba51a1461064b5780632928ca581461065e5780632a55205a146106715780632ac55c0c146106a357600080fd5b806322f374d0146105db578063239be317146105ec57806323b872dd146105ff57806324d7806c1461061257806325c0bdc81461062557600080fd5b80630ebd4c7f116104485780630ebd4c7f146105155780631549721214610535578063162094c41461059457806317b8e1cf146105a757806320e4afe2146105c857600080fd5b806301ffc9a71461048557806302e7afb7146104ad57806306fdde03146104c2578063081812fc146104d7578063095ea7b314610502575b600080fd5b610498610493366004614d0e565b610b90565b60405190151581526020015b60405180910390f35b6104c06104bb366004614d40565b610bbf565b005b6104ca610c1e565b6040516104a49190614dad565b6104ea6104e5366004614dc0565b610cb0565b6040516001600160a01b0390911681526020016104a4565b6104c0610510366004614dd9565b610cd7565b610528610523366004614dc0565b610dec565b6040516104a49190614e40565b610548610543366004614dc0565b610e1c565b6040516104a49190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b6104c06105a2366004614e94565b610eae565b6105ba6105b5366004614dc0565b610f03565b6040519081526020016104a4565b6104c06105d6366004614f23565b610f24565b600b546001600160a01b03166104ea565b6104ea6105fa366004614dc0565b610fa7565b6104c061060d366004614f9c565b611055565b610498610620366004614d40565b611086565b6105ba610633366004614dc0565b6110bf565b6104c0610646366004614d40565b6110cf565b6104c0610659366004615046565b6110f9565b6105ba61066c366004614d40565b611211565b61068461067f3660046150d0565b61124a565b604080516001600160a01b0390931683526020830191909152016104a4565b6105ba60205481565b6104c06106ba366004614d40565b611288565b6104c06106cd3660046150f2565b6112e5565b6104c06106e0366004615133565b611339565b6106ed611399565b6040516104a4919061516e565b6104c06107083660046151bb565b611447565b6104c061071b366004615046565b6114a5565b61052861072e366004615226565b6114c0565b6104c06107413660046150f2565b6115f3565b6104c061075436600461527b565b611607565b610528610767366004615226565b611666565b6104c061077a366004614f9c565b61175f565b6104c061078d366004614dc0565b61177a565b6104c06107a0366004615342565b611811565b6104c06107b3366004614d40565b611964565b6104c06107c63660046151bb565b6119b7565b6104ea6107d9366004614dc0565b611a36565b6105ba6107ec366004614dc0565b611a96565b6104c06107ff3660046150f2565b611aa6565b610548610812366004614dc0565b611ab8565b6104c0610825366004615046565b611bb2565b6104c0610838366004614d40565b611bcd565b6105ba61084b366004614d40565b611c25565b6104c0611cab565b6105ba610866366004614d40565b611cbf565b6105ba610879366004615133565b611d2e565b61052861088c366004615226565b611dcd565b6104c061089f366004615407565b611f2c565b6106ed611f3f565b6105ba60225481565b6000546001600160a01b03166104ea565b6105ba6108d4366004614d40565b601b6020526000908152604090205481565b6104c06108f4366004614dc0565b611fdf565b6104ca611fec565b6104c061090f3660046150f2565b611ffb565b6023546104ea906001600160a01b031681565b6104c061093536600461545d565b61204f565b6104c0610948366004614dd9565b61205a565b6104c061095b3660046151bb565b61207e565b6104c061096e366004615496565b61213f565b6105286109813660046154b3565b612151565b6104c06109943660046154e8565b61227b565b6109cf6109a7366004614dc0565b600090815260066020526040902054600160a01b900460101c69ffffffffffffffffffff1690565b60405169ffffffffffffffffffff90911681526020016104a4565b610a2d6109f8366004614dc0565b601c60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016104a4565b6104c0610a68366004615527565b6122d2565b610a80610a7b366004614dc0565b612304565b6040516104a491906155df565b610aa0610a9b366004614dc0565b612334565b6040516104a49291906155f2565b6104ca610abc366004614dc0565b61236e565b6104c0610acf366004615046565b61239e565b6104c0610ae2366004614d40565b612605565b6105ba610af536600461563a565b612658565b610528610b083660046154b3565b612691565b6104c0610b1b366004615046565b612770565b6104c0610b2e366004614e94565b61278b565b610498610b4136600461566f565b61279e565b6104c0610b5436600461566f565b6127cc565b6105ba60215481565b6104c0610b70366004614d40565b612820565b6105ba610b83366004615133565b612896565b6105ba600381565b6000610b9b826128ea565b80610baa5750610baa8261292a565b80610bb95750610bb982612965565b92915050565b33610bd26000546001600160a01b031690565b6001600160a01b03161480610bed5750610bed60023361299a565b610c125760405162461bcd60e51b8152600401610c099061569d565b60405180910390fd5b610c1b816129bc565b50565b606060048054610c2d906156e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c59906156e1565b8015610ca65780601f10610c7b57610100808354040283529160200191610ca6565b820191906000526020600020905b815481529060010190602001808311610c8957829003601f168201915b5050505050905090565b6000610cbb82612acc565b506000908152600860205260409020546001600160a01b031690565b6000610ce282611a36565b9050806001600160a01b0316836001600160a01b031603610d4f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c09565b336001600160a01b0382161480610d6b5750610d6b813361279e565b610ddd5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610c09565b610de78383612b1c565b505050565b6060610df782612b8a565b610e135760405162461bcd60e51b8152600401610c0990615715565b610bb982612ba7565b610e556040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506000908152601c6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b33610ec16000546001600160a01b031690565b6001600160a01b03161480610edc5750610edc60023361299a565b610ef85760405162461bcd60e51b8152600401610c099061569d565b610de7838383612bb2565b601d8181548110610f1357600080fd5b600091825260209091200154905081565b33610f376000546001600160a01b031690565b6001600160a01b03161480610f525750610f5260023361299a565b610f6e5760405162461bcd60e51b8152600401610c099061569d565b610f7785612b8a565b610f935760405162461bcd60e51b8152600401610c0990615715565b610fa08585858585612c36565b5050505050565b6000610fb282612b8a565b610fce5760405162461bcd60e51b8152600401610c0990615715565b610fd782612cbd565b90506001600160a01b0381166110285760405162461bcd60e51b815260206004820152601660248201527527379032bc3a32b739b4b7b7103337b9103a37b5b2b760511b6044820152606401610c09565b611033600e8261299a565b156110505760405162461bcd60e51b8152600401610c0990615740565b919050565b61105f3382612d13565b61107b5760405162461bcd60e51b8152600401610c099061576f565b610de7838383612d72565b6000816001600160a01b03166110a46000546001600160a01b031690565b6001600160a01b03161480610bb95750610bb960028361299a565b601e8181548110610f1357600080fd5b6110d7612f0d565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b82518110156111a7576000601c600085848151811061111e5761111e6157bc565b602002602001015181526020019081526020016000209050806000015460000361117c5760405162461bcd60e51b815260206004820152600f60248201526e119a5cda081b9bdd081b5a5b9d1959608a1b6044820152606401610c09565b602154816004015461118e91906157e8565b61119890846157ff565b426001928301559250016110fd565b50602354604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac906044015b600060405180830381600087803b1580156111f557600080fd5b505af1158015611209573d6000803e3d6000fd5b505050505050565b600061121b612f67565b611223612fc0565b61123f8260405180602001604052806000815250600080613017565b905061105060018055565b60008061125684612b8a565b6112725760405162461bcd60e51b8152600401610c0990615715565b61127c84846130a0565b915091505b9250929050565b611290612f0d565b61129b60028261299a565b15610c1b5760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a36112e1600282613177565b5050565b336112f86000546001600160a01b031690565b6001600160a01b03161480611313575061131360023361299a565b61132f5760405162461bcd60e51b8152600401610c099061569d565b6112e1828261318c565b3361134c6000546001600160a01b031690565b6001600160a01b03161480611367575061136760023361299a565b6113835760405162461bcd60e51b8152600401610c099061569d565b61138c836131c1565b610de783838360006131e9565b60606113a560026132e6565b6001600160401b038111156113bc576113bc614fdd565b6040519080825280602002602001820160405280156113e5578160200160208202803683370190505b50905060005b6113f560026132e6565b811015611443576114076002826132f0565b828281518110611419576114196157bc565b6001600160a01b03909216602092830291909101909101528061143b81615812565b9150506113eb565b5090565b3361145a6000546001600160a01b031690565b6001600160a01b03161480611475575061147560023361299a565b6114915760405162461bcd60e51b8152600401610c099061569d565b61149f6000858585856132fc565b50505050565b6114ad612f0d565b80516112e190601f906020840190614c29565b60606114ca612f67565b6114d2612fc0565b816001600160401b038111156114ea576114ea614fdd565b604051908082528060200260200182016040528015611513578160200160208202803683370190505b5090506000600a54600161152791906157ff565b905083839050600a600082825461153e91906157ff565b90915550600090505b838110156115e1576115bc86868684818110611565576115656157bc565b9050602002810190611577919061582b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506115b79150869050876157ff565b613017565b8382815181106115ce576115ce6157bc565b6020908102919091010152600101611547565b50506115ec60018055565b9392505050565b6115fb612fc0565b6112e1828260006133e9565b3361161a6000546001600160a01b031690565b6001600160a01b03161480611635575061163560023361299a565b6116515760405162461bcd60e51b8152600401610c099061569d565b61165a846131c1565b61149f848484846131e9565b6060611670612f67565b611678612fc0565b816001600160401b0381111561169057611690614fdd565b6040519080825280602002602001820160405280156116b9578160200160208202803683370190505b5090506000600a5460016116cd91906157ff565b905083839050600a60008282546116e491906157ff565b90915550600090505b838110156115e15761173a866040518060200160405280600081525087878581811061171b5761171b6157bc565b90506020020160208101906117309190615871565b6115b785876157ff565b83828151811061174c5761174c6157bc565b60209081029190910101526001016116ed565b610de7838383604051806020016040528060008152506122d2565b611782612f67565b61178c3382612d13565b6117d85760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74206f776e6572206f7220617070726f766564006044820152606401610c09565b60006117e382611a36565b905060006117f083612cbd565b90506117fb83613426565b6118068284836134e0565b5050610c1b60018055565b600081516001600160401b0381111561182c5761182c614fdd565b604051908082528060200260200182016040528015611855578160200160208202803683370190505b5090508151600a600082825461186b91906157ff565b90915550600090505b8251811015610de7576118ae33848381518110611893576118936157bc565b602002602001015183600a546118a991906157ff565b61359f565b8282815181106118c0576118c06157bc565b6020026020010181815250506118ee8282815181106118e1576118e16157bc565b6020026020010151611ab8565b601c6000848481518110611904576119046157bc565b60200260200101518152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050155905050806001019050611874565b336119776000546001600160a01b031690565b6001600160a01b03161480611992575061199260023361299a565b6119ae5760405162461bcd60e51b8152600401610c099061569d565b610c1b816135f6565b6119bf612fc0565b8281146119de5760405162461bcd60e51b8152600401610c099061588c565b60005b83811015610fa057611a2e8585838181106119fe576119fe6157bc565b90506020020135848484818110611a1757611a176157bc565b9050602002810190611a29919061582b565b61364a565b6001016119e1565b6000818152600660205260408120546001600160a01b031680610bb95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c09565b601f8181548110610f1357600080fd5b611aae612fc0565b6112e18282613654565b611af16040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b601d805460009190611b0390856158c9565b81548110611b1357611b136157bc565b6000918252602082200154601e805491935090611b3090866158c9565b81548110611b4057611b406157bc565b6000918252602082200154601f805491935090611b5d90876158c9565b81548110611b6d57611b6d6157bc565b906000526020600020015490506040518060c0016040528042815260200142815260200160008152602001838152602001828152602001848152509350505050919050565b611bba612f0d565b80516112e190601e906020840190614c29565b611bd5612f0d565b611be060028261299a565b610c1b5760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a36112e160028261366e565b60006001600160a01b038216611c8f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c09565b506001600160a01b031660009081526007602052604090205490565b611cb3612f0d565b611cbd6000613683565b565b6000611cc9612f67565b33611cdc6000546001600160a01b031690565b6001600160a01b03161480611cf75750611cf760023361299a565b611d135760405162461bcd60e51b8152600401610c099061569d565b61123f8260405180602001604052806000815250600061359f565b6000611d38612f67565b33611d4b6000546001600160a01b031690565b6001600160a01b03161480611d665750611d6660023361299a565b611d825760405162461bcd60e51b8152600401610c099061569d565b611dc28484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061359f915050565b90506115ec60018055565b6060611dd7612f67565b33611dea6000546001600160a01b031690565b6001600160a01b03161480611e055750611e0560023361299a565b611e215760405162461bcd60e51b8152600401610c099061569d565b816001600160401b03811115611e3957611e39614fdd565b604051908082528060200260200182016040528015611e62578160200160208202803683370190505b5090506000600a546001611e7691906157ff565b905083839050600a6000828254611e8d91906157ff565b90915550600090505b838110156115e157611f0786868684818110611eb457611eb46157bc565b9050602002810190611ec6919061582b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118a992508691508790506157ff565b838281518110611f1957611f196157bc565b6020908102919091010152600101611e96565b611f34612fc0565b610de78383836133e9565b6060611f4b600c6132e6565b6001600160401b03811115611f6257611f62614fdd565b604051908082528060200260200182016040528015611f8b578160200160208202803683370190505b50905060005b611f9b600c6132e6565b81101561144357611fad600c826132f0565b828281518110611fbf57611fbf6157bc565b6001600160a01b0390921660209283029190910190910152600101611f91565b611fe7612f0d565b602155565b606060058054610c2d906156e1565b3361200e6000546001600160a01b031690565b6001600160a01b03161480612029575061202960023361299a565b6120455760405162461bcd60e51b8152600401610c099061569d565b6112e182826136d3565b6112e1338383613708565b612062612f0d565b6001600160a01b039091166000908152601b6020526040902055565b336120916000546001600160a01b031690565b6001600160a01b031614806120ac57506120ac60023361299a565b6120c85760405162461bcd60e51b8152600401610c099061569d565b8281146120e75760405162461bcd60e51b8152600401610c099061588c565b60005b83811015610fa057612137858583818110612107576121076157bc565b90506020020135848484818110612120576121206157bc565b9050602002810190612132919061582b565b612bb2565b6001016120ea565b612147612fc0565b610c1b33826137d6565b606061215b612f67565b3361216e6000546001600160a01b031690565b6001600160a01b03161480612189575061218960023361299a565b6121a55760405162461bcd60e51b8152600401610c099061569d565b8161ffff166001600160401b038111156121c1576121c1614fdd565b6040519080825280602002602001820160405280156121ea578160200160208202803683370190505b5090506000600a5460016121fe91906157ff565b90508261ffff16600a600082825461221691906157ff565b90915550600090505b8361ffff168110156122705761224b856040518060200160405280600081525083856118a991906157ff565b83828151811061225d5761225d6157bc565b602090810291909101015260010161221f565b5050610bb960018055565b3361228e6000546001600160a01b031690565b6001600160a01b031614806122a957506122a960023361299a565b6122c55760405162461bcd60e51b8152600401610c099061569d565b610fa085858585856132fc565b6122dc3383612d13565b6122f85760405162461bcd60e51b8152600401610c099061576f565b61149f8484848461384b565b606061230f82612b8a565b61232b5760405162461bcd60e51b8152600401610c0990615715565b610bb98261387e565b60608061234083612b8a565b61235c5760405162461bcd60e51b8152600401610c0990615715565b61236583613885565b91509150915091565b606061237982612b8a565b6123955760405162461bcd60e51b8152600401610c0990615715565b610bb982613c33565b6023546001600160a01b03166123ee5760405162461bcd60e51b81526020600482015260156024820152741d1bdad95b881859191c995cdcc81b9bdd081cd95d605a1b6044820152606401610c09565b6000805b82518110156125cd576000601c6000858481518110612413576124136157bc565b60200260200101518152602001908152602001600020905080600001546000036124715760405162461bcd60e51b815260206004820152600f60248201526e119a5cda081b9bdd081b5a5b9d1959608a1b6044820152606401610c09565b6000612495858481518110612488576124886157bc565b6020026020010151611a36565b90504260205483600101546124aa91906157ff565b10156124f85760405162461bcd60e51b815260206004820152601c60248201527f46697368206e6f742067656e65726174652072657761726420796574000000006044820152606401610c09565b602054826001015461250a91906157ff565b8260020154106125535760405162461bcd60e51b8152602060048201526014602482015273119a5cda08185b1c9958591e4818db185a5b595960621b6044820152606401610c09565b6001600160a01b038116331461259c5760405162461bcd60e51b815260206004820152600e60248201526d2737ba103334b9b41037bbb732b960911b6044820152606401610c09565b60225482600301546125ae91906157e8565b6125b890856157ff565b426002909301929092555091506001016123f2565b506023546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f19906044016111db565b336126186000546001600160a01b031690565b6001600160a01b03161480612633575061263360023361299a565b61264f5760405162461bcd60e51b8152600401610c099061569d565b610c1b81613eef565b6000612662612f67565b61266a612fc0565b6126868360405180602001604052806000815250846000613017565b9050610bb960018055565b606061269b612f67565b6126a3612fc0565b8161ffff166001600160401b038111156126bf576126bf614fdd565b6040519080825280602002602001820160405280156126e8578160200160208202803683370190505b5090506000600a5460016126fc91906157ff565b90508261ffff16600a600082825461271491906157ff565b90915550600090505b8361ffff168110156122705761274b8560405180602001604052806000815250600084866115b791906157ff565b83828151811061275d5761275d6157bc565b602090810291909101015260010161271d565b612778612f0d565b80516112e190601d906020840190614c29565b612793612fc0565b610de783838361364a565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b336127df6000546001600160a01b031690565b6001600160a01b031614806127fa57506127fa60023361299a565b6128165760405162461bcd60e51b8152600401610c099061569d565b6112e18282613f30565b612828612f0d565b6001600160a01b03811661288d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c09565b610c1b81613683565b60006128a0612f67565b6128a8612fc0565b611dc28484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506130179050565b60006001600160e01b0319821663b5d2729f60e01b148061291b57506001600160e01b03198216639088c20760e01b145b80610bb95750610bb982614065565b60006001600160e01b031982166380ac58cd60e01b1480610baa57506001600160e01b03198216635b5e139f60e01b1480610bb95750610bb9825b60006001600160e01b03198216632a9f3abf60e11b1480610bb957506301ffc9a760e01b6001600160e01b0319831614610bb9565b6001600160a01b038116600090815260018301602052604081205415156115ec565b6001600160a01b038116158015906129dd57506001600160a01b0381163014155b612a295760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f7420626c61636b6c69737420796f757273656c66000000000000006044820152606401610c09565b612a34600c8261299a565b15612a7c5760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a3612a7a600c82613177565b505b612a87600e8261299a565b610c1b5760405133906001600160a01b038316907f05ac7bc5a606cd92a63365f9fda244499b9add0526b22d99937b6bd88181059c90600090a36112e1600e8261366e565b612ad581612b8a565b610c1b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c09565b600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612b5182611a36565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000908152600660205260409020546001600160a01b0316151590565b60606115ec82613885565b600083118015612bc45750600a548311155b8015612be157506000612bd684612cbd565b6001600160a01b0316145b612c1d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610c09565b600083815260136020526040902061149f828483615923565b612c4284848484614116565b6000858152601560205260408120612c5991614c70565b612c7884848484601560008b81526020019081526020016000206141c1565b847fabb46fe0761d77584bde75697647804ffd8113abd4d8d06bc664150395eccdee85858585604051612cae94939291906159e2565b60405180910390a25050505050565b600081815260066020526040812054600160a01b90046001600160601b0381169061ffff168203612cf15750600092915050565b61ffff166000908152601a60205260409020546001600160a01b031692915050565b600080612d1f83611a36565b9050806001600160a01b0316846001600160a01b03161480612d465750612d46818561279e565b80612d6a5750836001600160a01b0316612d5f84610cb0565b6001600160a01b0316145b949350505050565b6000818152600660209081526040918290208251808401909352546001600160a01b03808216808552600160a01b9092046001600160601b0316928401929092529085168114612e125760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610c09565b6001600160a01b038416612e745760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c09565b6020820151612e858686868461427c565b612e90600085612b1c565b6001600160a01b038087166000818152600760209081526040808320805460001901905593891680835284832080546001019055888352600690915283822080546001600160a01b031916821790559251879392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4611209565b6000546001600160a01b03163314611cbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c09565b600260015403612fb95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c09565b6002600155565b612fcb600c3361299a565b611cbd5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206265207265676973746572656420657874656e73696f6e000000006044820152606401610c09565b60008160000361303a57600a6000815461303090615812565b90915550600a5491505b6130448583614288565b33600090815260196020526040902054613077908690849061ffff16601087901b69ffffffffffffffff000016176142f3565b8351156130985760008281526013602052604090206130968582615a60565b505b509392505050565b6000806000806130af86613885565b915091506001825111156131055760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e203120726f79616c7479207265636569766572000000006044820152606401610c09565b815160000361311c57306000935093505050611281565b8160008151811061312f5761312f6157bc565b6020026020010151612710868360008151811061314e5761314e6157bc565b602002602001015161316091906157e8565b61316a9190615b1f565b9350935050509250929050565b60006115ec836001600160a01b03841661430e565b6000805260106020527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb01610de7828483615923565b6131cc600e8261299a565b15610c1b5760405162461bcd60e51b8152600401610c0990615740565b60185461ffff908116106132355760405162461bcd60e51b8152602060048201526013602482015272546f6f206d616e7920657874656e73696f6e7360681b6044820152606401610c09565b6001600160a01b03841660009081526019602052604081205461ffff1690036132da576018805460009061326c9061ffff16615b33565b82546101009290920a61ffff818102199093169183160217909155601880546001600160a01b0387166000818152601960209081526040808320805495881661ffff199096169590951790945593549094168452601a90925290912080546001600160a01b03191690911790555b61149f84848484614401565b6000610bb9825490565b60006115ec83836144ee565b61330884848484614116565b6001600160a01b038516600090815260146020526040812061332991614c70565b61335a84848484601460008b6001600160a01b03166001600160a01b031681526020019081526020016000206141c1565b6001600160a01b0385166133aa577f2b6849d5976d799a5b0ca4dfd6b40a3d7afe9ea72c091fa01a958594f9a2659b8484848460405161339d94939291906159e2565b60405180910390a1610fa0565b846001600160a01b03167f535a93d2cb000582c0ebeaa9be4890ec6a287f98eb2df00c54c300612fd78d8f85858585604051612cae94939291906159e2565b336000908152601060205260409020613403838583615923565b50336000908152601160205260409020805460ff19169115159190911790555050565b60008181526006602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282018390529092909190613476908390868461427c565b613481600085612b1c565b6001600160a01b038216600081815260076020908152604080832080546000190190558783526006909152808220829055518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a461149f565b6001600160a01b0381161561356857613500816311686e4b60e21b614518565b15613568576040516311686e4b60e21b81526001600160a01b038481166004830152602482018490528216906345a1b92c90604401600060405180830381600087803b15801561354f57600080fd5b505af1158015613563573d6000803e3d6000fd5b505050505b60008281526013602052604090208054613581906156e1565b159050610de7576000828152601360205260408120610de791614c8e565b6000816000036135c257600a600081546135b890615812565b90915550600a5491505b6135ce848360006142f3565b8251156135ef5760008281526013602052604090206135ed8482615a60565b505b5092915050565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f959c0e47a2fe3cf01e237ba4892e2cc3194d77cbfb33e434e40873225d6b595f9060200160405180910390a150565b33612bd684612cbd565b336000908152601260205260409020610de7828483615923565b60006115ec836001600160a01b038416614534565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805260126020527f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b610de7828483615923565b816001600160a01b0316836001600160a01b0316036137695760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c09565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6137e7826345ffcdad60e01b614518565b156112e1576001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f072a7592283e2c2d1d56d21517ff6013325e0f55483f4828373ff4d98b0a1a36910160405180910390a25050565b613856848484612d72565b61386284848484614583565b61149f5760405162461bcd60e51b8152600401610c0990615b54565b60606135ef825b606080600060156000858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561390757600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff16818301528252600190920191016138bd565b5050505090508051600003613a5457600061392185612cbd565b90506001600160a01b03811615613a525761394381634e53ee3d60e11b614518565b156139ce57604051634e53ee3d60e11b8152306004820152602481018690526001600160a01b03821690639ca7dc7a90604401600060405180830381865afa158015613993573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139bb9190810190615c0c565b81519195509350156139ce575050915091565b6001600160a01b038116600090815260146020908152604080832080548251818502810185019093528083529193909284015b82821015613a4b57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101613a01565b5050505091505b505b8051600003613af7576000808052601460209081527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c8054604080518285028101850190915281815293919290919084015b82821015613af057600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101613aa6565b5050505090505b805115613c2d5780516001600160401b03811115613b1757613b17614fdd565b604051908082528060200260200182016040528015613b40578160200160208202803683370190505b50925080516001600160401b03811115613b5c57613b5c614fdd565b604051908082528060200260200182016040528015613b85578160200160208202803683370190505b50915060005b8151811015613c2b57818181518110613ba657613ba66157bc565b602002602001015160000151848281518110613bc457613bc46157bc565b60200260200101906001600160a01b031690816001600160a01b031681525050818181518110613bf657613bf66157bc565b60200260200101516020015161ffff16838281518110613c1857613c186157bc565b6020908102919091010152600101613b8b565b505b50915091565b6060600082118015613c475750600a548211155b613c835760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610c09565b6000613c8e83612cbd565b9050613c9b600e8261299a565b15613cb85760405162461bcd60e51b8152600401610c0990615740565b60008381526013602052604090208054613cd1906156e1565b159050613deb576001600160a01b03811660009081526012602052604090208054613cfb906156e1565b159050613d4c576001600160a01b038116600090815260126020908152604080832086845260138352928190209051613d35939201615d43565b604051602081830303815290604052915050919050565b60008381526013602052604090208054613d65906156e1565b80601f0160208091040260200160405190810160405280929190818152602001828054613d91906156e1565b8015613dde5780601f10613db357610100808354040283529160200191613dde565b820191906000526020600020905b815481529060010190602001808311613dc157829003601f168201915b5050505050915050919050565b613dfc8163e9dc637560e01b614518565b15613e745760405163e9dc637560e01b8152306004820152602481018490526001600160a01b0382169063e9dc637590604401600060405180830381865afa158015613e4c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ec9190810190615d58565b6001600160a01b03811660009081526011602052604090205460ff16613ec6576001600160a01b0381166000908152601060205260409020613eb584614681565b604051602001613d35929190615dc5565b6001600160a01b03811660009081526010602052604090208054613d65906156e1565b50919050565b60405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a36112e1600c82613177565b613f3b600c8361299a565b613f875760405162461bcd60e51b815260206004820152601e60248201527f43726561746f72436f72653a20496e76616c696420657874656e73696f6e00006044820152606401610c09565b6001600160a01b0381161580613fa95750613fa981631e05385b60e31b614518565b613fe75760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c09565b6001600160a01b038281166000908152601760205260409020548116908216146112e1576001600160a01b0382811660008181526017602052604080822080546001600160a01b031916948616948517905551339392917f6a835c4fcf7e0d398db3762332fdaa1471814ad39f1e2d6d0b3fdabf8efee3e091a45050565b60006001600160e01b031982166314d9799760e21b148061409657506001600160e01b031982166328f10a2160e01b145b806140a557506140a58261292a565b806140c057506001600160e01b03198216635d9dd7eb60e11b145b806140db57506001600160e01b03198216632dde656160e21b145b806140f657506001600160e01b031982166335681b5360e21b145b80610bb957506001600160e01b0319821663152a902d60e11b1492915050565b8281146141355760405162461bcd60e51b8152600401610c099061588c565b6000805b8281101561416f57838382818110614153576141536157bc565b905060200201358261416591906157ff565b9150600101614139565b506127108110610fa05760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f74616c20726f79616c746965730000000000000000006044820152606401610c09565b60005b82811015611209578160405180604001604052808888858181106141ea576141ea6157bc565b90506020020160208101906141ff9190614d40565b6001600160a01b0316815260200186868581811061421f5761421f6157bc565b61ffff602091820293909301358316909352508354600181810186556000958652948390208451910180549490930151909116600160a01b026001600160b01b03199093166001600160a01b0390911617919091179055016141c4565b61149f84848484614713565b336000908152601760205260409020546001600160a01b0316156112e1573360008181526017602052604090819020549051631e05385b60e31b815260048101929092526001600160a01b03848116602484015260448301849052169063f029c2d8906064016111db565b610de78383836040518060200160405280600081525061474e565b600081815260018301602052604081205480156143f7576000614332600183615dea565b855490915060009061434690600190615dea565b90508181146143ab576000866000018281548110614366576143666157bc565b9060005260206000200154905080876000018481548110614389576143896157bc565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806143bc576143bc615dfd565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610bb9565b6000915050610bb9565b6001600160a01b038416301480159061442357506001600160a01b0384163b15155b6144595760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b6044820152606401610c09565b60405133906001600160a01b038616907fd8cb8ba4086944eabf43c5535b7712015e4d4c714b24bf812c040ea5b7a3e42a90600090a36001600160a01b03841660009081526010602052604090206144b2838583615923565b506001600160a01b0384166000908152601160205260409020805460ff19168215151790556144e2600c8561366e565b5061149f8460016137d6565b6000826000018281548110614505576145056157bc565b9060005260206000200154905092915050565b60006145238361489d565b80156115ec57506115ec83836148d0565b600081815260018301602052604081205461457b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bb9565b506000610bb9565b60006001600160a01b0384163b1561467957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906145c7903390899088908890600401615e13565b6020604051808303816000875af1925050508015614602575060408051601f3d908101601f191682019092526145ff91810190615e50565b60015b61465f573d808015614630576040519150601f19603f3d011682016040523d82523d6000602084013e614635565b606091505b5080516000036146575760405162461bcd60e51b8152600401610c0990615b54565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612d6a565b506001612d6a565b6060600061468e83614959565b60010190506000816001600160401b038111156146ad576146ad614fdd565b6040519080825280601f01601f1916602001820160405280156146d7576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846146e157509392505050565b6001600160a01b0384161561149f5761ffff81166000908152601a602052604090205461149f908590859085906001600160a01b0316614a31565b6001600160a01b0384166147a45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c09565b6147ad83612b8a565b156147fa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c09565b614807600085858561427c565b6001600160a01b03808516600081815260076020908152604080832080546001019055805180820182528481526001600160601b038089168285019081528a865260069094528285209151935116600160a01b02929095169190911790935591518592907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46138626000858584614583565b60006148b0826301ffc9a760e01b6148d0565b8015610bb957506148c9826001600160e01b03196148d0565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015614942575060208210155b801561494e5750600081115b979650505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106149985772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106149c4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106149e257662386f26fc10000830492506010015b6305f5e10083106149fa576305f5e100830492506008015b6127108310614a0e57612710830492506004015b60648310614a20576064830492506002015b600a8310610bb95760010192915050565b6001600160a01b0384161561149f576001600160a01b03811615801590614a7057506001600160a01b03811660009081526016602052604090205460ff165b15614b4757604051632f3537c560e11b81523360048201526001600160a01b038581166024830152848116604483015260648201849052821690635e6a6f8a906084016020604051808303816000875af1158015614ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614af69190615e6d565b614b425760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610c09565b61149f565b600b546001600160a01b03161561149f57600b54604051632f3537c560e11b81523360048201526001600160a01b03868116602483015285811660448301526064820185905290911690635e6a6f8a906084016020604051808303816000875af1158015614bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bdd9190615e6d565b61149f5760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610c09565b828054828255906000526020600020908101928215614c64579160200282015b82811115614c64578251825591602001919060010190614c49565b50611443929150614cc4565b5080546000825590600052602060002090810190610c1b9190614cd9565b508054614c9a906156e1565b6000825580601f10614caa575050565b601f016020900490600052602060002090810190610c1b91905b5b808211156114435760008155600101614cc5565b5b808211156114435780546001600160b01b0319168155600101614cda565b6001600160e01b031981168114610c1b57600080fd5b600060208284031215614d2057600080fd5b81356115ec81614cf8565b6001600160a01b0381168114610c1b57600080fd5b600060208284031215614d5257600080fd5b81356115ec81614d2b565b60005b83811015614d78578181015183820152602001614d60565b50506000910152565b60008151808452614d99816020860160208601614d5d565b601f01601f19169290920160200192915050565b6020815260006115ec6020830184614d81565b600060208284031215614dd257600080fd5b5035919050565b60008060408385031215614dec57600080fd5b8235614df781614d2b565b946020939093013593505050565b600081518084526020808501945080840160005b83811015614e3557815187529582019590820190600101614e19565b509495945050505050565b6020815260006115ec6020830184614e05565b60008083601f840112614e6557600080fd5b5081356001600160401b03811115614e7c57600080fd5b60208301915083602082850101111561128157600080fd5b600080600060408486031215614ea957600080fd5b8335925060208401356001600160401b03811115614ec657600080fd5b614ed286828701614e53565b9497909650939450505050565b60008083601f840112614ef157600080fd5b5081356001600160401b03811115614f0857600080fd5b6020830191508360208260051b850101111561128157600080fd5b600080600080600060608688031215614f3b57600080fd5b8535945060208601356001600160401b0380821115614f5957600080fd5b614f6589838a01614edf565b90965094506040880135915080821115614f7e57600080fd5b50614f8b88828901614edf565b969995985093965092949392505050565b600080600060608486031215614fb157600080fd5b8335614fbc81614d2b565b92506020840135614fcc81614d2b565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561501b5761501b614fdd565b604052919050565b60006001600160401b0382111561503c5761503c614fdd565b5060051b60200190565b6000602080838503121561505957600080fd5b82356001600160401b0381111561506f57600080fd5b8301601f8101851361508057600080fd5b803561509361508e82615023565b614ff3565b81815260059190911b820183019083810190878311156150b257600080fd5b928401925b8284101561494e578335825292840192908401906150b7565b600080604083850312156150e357600080fd5b50508035926020909101359150565b6000806020838503121561510557600080fd5b82356001600160401b0381111561511b57600080fd5b61512785828601614e53565b90969095509350505050565b60008060006040848603121561514857600080fd5b833561515381614d2b565b925060208401356001600160401b03811115614ec657600080fd5b6020808252825182820181905260009190848201906040850190845b818110156151af5783516001600160a01b03168352928401929184019160010161518a565b50909695505050505050565b600080600080604085870312156151d157600080fd5b84356001600160401b03808211156151e857600080fd5b6151f488838901614edf565b9096509450602087013591508082111561520d57600080fd5b5061521a87828801614edf565b95989497509550505050565b60008060006040848603121561523b57600080fd5b833561524681614d2b565b925060208401356001600160401b0381111561526157600080fd5b614ed286828701614edf565b8015158114610c1b57600080fd5b6000806000806060858703121561529157600080fd5b843561529c81614d2b565b935060208501356001600160401b038111156152b757600080fd5b6152c387828801614e53565b90945092505060408501356152d78161526d565b939692955090935050565b60006001600160401b038211156152fb576152fb614fdd565b50601f01601f191660200190565b600061531761508e846152e2565b905082815283838301111561532b57600080fd5b828260208301376000602084830101529392505050565b6000602080838503121561535557600080fd5b82356001600160401b038082111561536c57600080fd5b818501915085601f83011261538057600080fd5b813561538e61508e82615023565b81815260059190911b830184019084810190888311156153ad57600080fd5b8585015b838110156153fa578035858111156153c95760008081fd5b8601603f81018b136153db5760008081fd5b6153ec8b8983013560408401615309565b8452509186019186016153b1565b5098975050505050505050565b60008060006040848603121561541c57600080fd5b83356001600160401b0381111561543257600080fd5b61543e86828701614e53565b90945092505060208401356154528161526d565b809150509250925092565b6000806040838503121561547057600080fd5b823561547b81614d2b565b9150602083013561548b8161526d565b809150509250929050565b6000602082840312156154a857600080fd5b81356115ec8161526d565b600080604083850312156154c657600080fd5b82356154d181614d2b565b9150602083013561ffff8116811461548b57600080fd5b60008060008060006060868803121561550057600080fd5b853561550b81614d2b565b945060208601356001600160401b0380821115614f5957600080fd5b6000806000806080858703121561553d57600080fd5b843561554881614d2b565b9350602085013561555881614d2b565b92506040850135915060608501356001600160401b0381111561557a57600080fd5b8501601f8101871361558b57600080fd5b61559a87823560208401615309565b91505092959194509250565b600081518084526020808501945080840160005b83811015614e355781516001600160a01b0316875295820195908201906001016155ba565b6020815260006115ec60208301846155a6565b60408152600061560560408301856155a6565b82810360208401526156178185614e05565b95945050505050565b803569ffffffffffffffffffff8116811461105057600080fd5b6000806040838503121561564d57600080fd5b823561565881614d2b565b915061566660208401615620565b90509250929050565b6000806040838503121561568257600080fd5b823561568d81614d2b565b9150602083013561548b81614d2b565b60208082526024908201527f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f7220616040820152633236b4b760e11b606082015260800190565b600181811c908216806156f557607f821691505b602082108103613ee957634e487b7160e01b600052602260045260246000fd5b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b602080825260159082015274115e1d195b9cda5bdb88189b1858dadb1a5cdd1959605a1b604082015260600190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bb957610bb96157d2565b80820180821115610bb957610bb96157d2565b600060018201615824576158246157d2565b5060010190565b6000808335601e1984360301811261584257600080fd5b8301803591506001600160401b0382111561585c57600080fd5b60200191503681900382131561128157600080fd5b60006020828403121561588357600080fd5b6115ec82615620565b6020808252600d908201526c125b9d985b1a59081a5b9c1d5d609a1b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826158d8576158d86158b3565b500690565b601f821115610de757600081815260208120601f850160051c810160208610156159045750805b601f850160051c820191505b8181101561120957828155600101615910565b6001600160401b0383111561593a5761593a614fdd565b61594e8361594883546156e1565b836158dd565b6000601f841160018114615982576000851561596a5750838201355b600019600387901b1c1916600186901b178355610fa0565b600083815260209020601f19861690835b828110156159b35786850135825560209485019460019092019101615993565b50868210156159d05760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040808252810184905260008560608301825b87811015615a25578235615a0881614d2b565b6001600160a01b03168252602092830192909101906001016159f5565b5083810360208501528481526001600160fb1b03851115615a4557600080fd5b8460051b915081866020830137016020019695505050505050565b81516001600160401b03811115615a7957615a79614fdd565b615a8d81615a8784546156e1565b846158dd565b602080601f831160018114615ac25760008415615aaa5750858301515b600019600386901b1c1916600185901b178555611209565b600085815260208120601f198616915b82811015615af157888601518255948401946001909101908401615ad2565b5085821015615b0f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615b2e57615b2e6158b3565b500490565b600061ffff808316818103615b4a57615b4a6157d2565b6001019392505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082601f830112615bb757600080fd5b81516020615bc761508e83615023565b82815260059290921b84018101918181019086841115615be657600080fd5b8286015b84811015615c015780518352918301918301615bea565b509695505050505050565b60008060408385031215615c1f57600080fd5b82516001600160401b0380821115615c3657600080fd5b818501915085601f830112615c4a57600080fd5b81516020615c5a61508e83615023565b82815260059290921b84018101918181019089841115615c7957600080fd5b948201945b83861015615ca0578551615c9181614d2b565b82529482019490820190615c7e565b91880151919650909350505080821115615cb957600080fd5b50615cc685828601615ba6565b9150509250929050565b60008154615cdd816156e1565b60018281168015615cf55760018114615d0a57615d39565b60ff1984168752821515830287019450615d39565b8560005260208060002060005b85811015615d305781548a820152908401908201615d17565b50505082870194505b5050505092915050565b6000612d6a615d528386615cd0565b84615cd0565b600060208284031215615d6a57600080fd5b81516001600160401b03811115615d8057600080fd5b8201601f81018413615d9157600080fd5b8051615d9f61508e826152e2565b818152856020838501011115615db457600080fd5b615617826020830160208601614d5d565b6000615dd18285615cd0565b8351615de1818360208801614d5d565b01949350505050565b81810381811115610bb957610bb96157d2565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615e4690830184614d81565b9695505050505050565b600060208284031215615e6257600080fd5b81516115ec81614cf8565b600060208284031215615e7f57600080fd5b81516115ec8161526d56fea2646970667358221220dd5e074be0d61505ae05f2c95da8fa0ab7ab8e16d908e51e4da35ba55b3b748064736f6c63430008140033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104805760003560e01c80636d73e66911610257578063b0fe87c911610146578063d5a06d4c116100c3578063f0cdc49911610087578063f0cdc49914610b46578063f26b013a14610b59578063f2fde38b14610b62578063fe2e1f5814610b75578063ffa1ad7414610b8857600080fd5b8063d5a06d4c14610a8d578063e00aab4b14610afa578063e6a0bc4b14610b0d578063e92a89f614610b20578063e985e9c514610b3357600080fd5b8063bb3bafd61161010a578063bb3bafd614610a8d578063c87b56dd14610aae578063c94c7ff414610ac1578063ce8aee9d14610ad4578063d397371914610ae757600080fd5b8063b0fe87c914610986578063b4b5b48f14610999578063b68d6f36146109ea578063b88d4fde14610a5a578063b9c4d9fb14610a6d57600080fd5b80638e9345d2116101d4578063a22cb46511610198578063a22cb46514610927578063a4c5fc7a1461093a578063aafb2d441461094d578063ac0c8cfa14610960578063ad2d0ddd1461097357600080fd5b80638e9345d2146108c6578063953bf8a2146108e657806395d89b41146108f957806399e0dd7c146109015780639d76ea581461091457600080fd5b80637aa15f161161021b5780637aa15f161461087e57806382dcc0c81461089157806383b7db63146108a45780638c0fb792146108ac5780638da5cb5b146108b557600080fd5b80636d73e6691461082a57806370a082311461083d578063715018a61461085057806372ff03d3146108585780637884af441461086b57600080fd5b80632d3456701161037357806342842e0e116102f05780636352211e116102b45780636352211e146107cb5780636622fa39146107de57806366d1e9d0146107f1578063672001541461080457806368d4c46a1461081757600080fd5b806342842e0e1461076c57806342966c681461077f5780635768f27114610792578063596798ad146107a557806361e5bc6b146107b857600080fd5b8063350a332911610337578063350a33291461070d57806338e52e78146107205780633e6134b8146107335780633f0f37f6146107465780634278330e1461075957600080fd5b80632d345670146106ac57806330176e13146106bf5780633071a0f9146106d257806331ae450b146106e5578063332dd1ae146106fa57600080fd5b806322f374d01161040157806326a4e8d2116103c557806326a4e8d214610638578063287ba51a1461064b5780632928ca581461065e5780632a55205a146106715780632ac55c0c146106a357600080fd5b806322f374d0146105db578063239be317146105ec57806323b872dd146105ff57806324d7806c1461061257806325c0bdc81461062557600080fd5b80630ebd4c7f116104485780630ebd4c7f146105155780631549721214610535578063162094c41461059457806317b8e1cf146105a757806320e4afe2146105c857600080fd5b806301ffc9a71461048557806302e7afb7146104ad57806306fdde03146104c2578063081812fc146104d7578063095ea7b314610502575b600080fd5b610498610493366004614d0e565b610b90565b60405190151581526020015b60405180910390f35b6104c06104bb366004614d40565b610bbf565b005b6104ca610c1e565b6040516104a49190614dad565b6104ea6104e5366004614dc0565b610cb0565b6040516001600160a01b0390911681526020016104a4565b6104c0610510366004614dd9565b610cd7565b610528610523366004614dc0565b610dec565b6040516104a49190614e40565b610548610543366004614dc0565b610e1c565b6040516104a49190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b6104c06105a2366004614e94565b610eae565b6105ba6105b5366004614dc0565b610f03565b6040519081526020016104a4565b6104c06105d6366004614f23565b610f24565b600b546001600160a01b03166104ea565b6104ea6105fa366004614dc0565b610fa7565b6104c061060d366004614f9c565b611055565b610498610620366004614d40565b611086565b6105ba610633366004614dc0565b6110bf565b6104c0610646366004614d40565b6110cf565b6104c0610659366004615046565b6110f9565b6105ba61066c366004614d40565b611211565b61068461067f3660046150d0565b61124a565b604080516001600160a01b0390931683526020830191909152016104a4565b6105ba60205481565b6104c06106ba366004614d40565b611288565b6104c06106cd3660046150f2565b6112e5565b6104c06106e0366004615133565b611339565b6106ed611399565b6040516104a4919061516e565b6104c06107083660046151bb565b611447565b6104c061071b366004615046565b6114a5565b61052861072e366004615226565b6114c0565b6104c06107413660046150f2565b6115f3565b6104c061075436600461527b565b611607565b610528610767366004615226565b611666565b6104c061077a366004614f9c565b61175f565b6104c061078d366004614dc0565b61177a565b6104c06107a0366004615342565b611811565b6104c06107b3366004614d40565b611964565b6104c06107c63660046151bb565b6119b7565b6104ea6107d9366004614dc0565b611a36565b6105ba6107ec366004614dc0565b611a96565b6104c06107ff3660046150f2565b611aa6565b610548610812366004614dc0565b611ab8565b6104c0610825366004615046565b611bb2565b6104c0610838366004614d40565b611bcd565b6105ba61084b366004614d40565b611c25565b6104c0611cab565b6105ba610866366004614d40565b611cbf565b6105ba610879366004615133565b611d2e565b61052861088c366004615226565b611dcd565b6104c061089f366004615407565b611f2c565b6106ed611f3f565b6105ba60225481565b6000546001600160a01b03166104ea565b6105ba6108d4366004614d40565b601b6020526000908152604090205481565b6104c06108f4366004614dc0565b611fdf565b6104ca611fec565b6104c061090f3660046150f2565b611ffb565b6023546104ea906001600160a01b031681565b6104c061093536600461545d565b61204f565b6104c0610948366004614dd9565b61205a565b6104c061095b3660046151bb565b61207e565b6104c061096e366004615496565b61213f565b6105286109813660046154b3565b612151565b6104c06109943660046154e8565b61227b565b6109cf6109a7366004614dc0565b600090815260066020526040902054600160a01b900460101c69ffffffffffffffffffff1690565b60405169ffffffffffffffffffff90911681526020016104a4565b610a2d6109f8366004614dc0565b601c60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016104a4565b6104c0610a68366004615527565b6122d2565b610a80610a7b366004614dc0565b612304565b6040516104a491906155df565b610aa0610a9b366004614dc0565b612334565b6040516104a49291906155f2565b6104ca610abc366004614dc0565b61236e565b6104c0610acf366004615046565b61239e565b6104c0610ae2366004614d40565b612605565b6105ba610af536600461563a565b612658565b610528610b083660046154b3565b612691565b6104c0610b1b366004615046565b612770565b6104c0610b2e366004614e94565b61278b565b610498610b4136600461566f565b61279e565b6104c0610b5436600461566f565b6127cc565b6105ba60215481565b6104c0610b70366004614d40565b612820565b6105ba610b83366004615133565b612896565b6105ba600381565b6000610b9b826128ea565b80610baa5750610baa8261292a565b80610bb95750610bb982612965565b92915050565b33610bd26000546001600160a01b031690565b6001600160a01b03161480610bed5750610bed60023361299a565b610c125760405162461bcd60e51b8152600401610c099061569d565b60405180910390fd5b610c1b816129bc565b50565b606060048054610c2d906156e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c59906156e1565b8015610ca65780601f10610c7b57610100808354040283529160200191610ca6565b820191906000526020600020905b815481529060010190602001808311610c8957829003601f168201915b5050505050905090565b6000610cbb82612acc565b506000908152600860205260409020546001600160a01b031690565b6000610ce282611a36565b9050806001600160a01b0316836001600160a01b031603610d4f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c09565b336001600160a01b0382161480610d6b5750610d6b813361279e565b610ddd5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610c09565b610de78383612b1c565b505050565b6060610df782612b8a565b610e135760405162461bcd60e51b8152600401610c0990615715565b610bb982612ba7565b610e556040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506000908152601c6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b33610ec16000546001600160a01b031690565b6001600160a01b03161480610edc5750610edc60023361299a565b610ef85760405162461bcd60e51b8152600401610c099061569d565b610de7838383612bb2565b601d8181548110610f1357600080fd5b600091825260209091200154905081565b33610f376000546001600160a01b031690565b6001600160a01b03161480610f525750610f5260023361299a565b610f6e5760405162461bcd60e51b8152600401610c099061569d565b610f7785612b8a565b610f935760405162461bcd60e51b8152600401610c0990615715565b610fa08585858585612c36565b5050505050565b6000610fb282612b8a565b610fce5760405162461bcd60e51b8152600401610c0990615715565b610fd782612cbd565b90506001600160a01b0381166110285760405162461bcd60e51b815260206004820152601660248201527527379032bc3a32b739b4b7b7103337b9103a37b5b2b760511b6044820152606401610c09565b611033600e8261299a565b156110505760405162461bcd60e51b8152600401610c0990615740565b919050565b61105f3382612d13565b61107b5760405162461bcd60e51b8152600401610c099061576f565b610de7838383612d72565b6000816001600160a01b03166110a46000546001600160a01b031690565b6001600160a01b03161480610bb95750610bb960028361299a565b601e8181548110610f1357600080fd5b6110d7612f0d565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b82518110156111a7576000601c600085848151811061111e5761111e6157bc565b602002602001015181526020019081526020016000209050806000015460000361117c5760405162461bcd60e51b815260206004820152600f60248201526e119a5cda081b9bdd081b5a5b9d1959608a1b6044820152606401610c09565b602154816004015461118e91906157e8565b61119890846157ff565b426001928301559250016110fd565b50602354604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac906044015b600060405180830381600087803b1580156111f557600080fd5b505af1158015611209573d6000803e3d6000fd5b505050505050565b600061121b612f67565b611223612fc0565b61123f8260405180602001604052806000815250600080613017565b905061105060018055565b60008061125684612b8a565b6112725760405162461bcd60e51b8152600401610c0990615715565b61127c84846130a0565b915091505b9250929050565b611290612f0d565b61129b60028261299a565b15610c1b5760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a36112e1600282613177565b5050565b336112f86000546001600160a01b031690565b6001600160a01b03161480611313575061131360023361299a565b61132f5760405162461bcd60e51b8152600401610c099061569d565b6112e1828261318c565b3361134c6000546001600160a01b031690565b6001600160a01b03161480611367575061136760023361299a565b6113835760405162461bcd60e51b8152600401610c099061569d565b61138c836131c1565b610de783838360006131e9565b60606113a560026132e6565b6001600160401b038111156113bc576113bc614fdd565b6040519080825280602002602001820160405280156113e5578160200160208202803683370190505b50905060005b6113f560026132e6565b811015611443576114076002826132f0565b828281518110611419576114196157bc565b6001600160a01b03909216602092830291909101909101528061143b81615812565b9150506113eb565b5090565b3361145a6000546001600160a01b031690565b6001600160a01b03161480611475575061147560023361299a565b6114915760405162461bcd60e51b8152600401610c099061569d565b61149f6000858585856132fc565b50505050565b6114ad612f0d565b80516112e190601f906020840190614c29565b60606114ca612f67565b6114d2612fc0565b816001600160401b038111156114ea576114ea614fdd565b604051908082528060200260200182016040528015611513578160200160208202803683370190505b5090506000600a54600161152791906157ff565b905083839050600a600082825461153e91906157ff565b90915550600090505b838110156115e1576115bc86868684818110611565576115656157bc565b9050602002810190611577919061582b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506115b79150869050876157ff565b613017565b8382815181106115ce576115ce6157bc565b6020908102919091010152600101611547565b50506115ec60018055565b9392505050565b6115fb612fc0565b6112e1828260006133e9565b3361161a6000546001600160a01b031690565b6001600160a01b03161480611635575061163560023361299a565b6116515760405162461bcd60e51b8152600401610c099061569d565b61165a846131c1565b61149f848484846131e9565b6060611670612f67565b611678612fc0565b816001600160401b0381111561169057611690614fdd565b6040519080825280602002602001820160405280156116b9578160200160208202803683370190505b5090506000600a5460016116cd91906157ff565b905083839050600a60008282546116e491906157ff565b90915550600090505b838110156115e15761173a866040518060200160405280600081525087878581811061171b5761171b6157bc565b90506020020160208101906117309190615871565b6115b785876157ff565b83828151811061174c5761174c6157bc565b60209081029190910101526001016116ed565b610de7838383604051806020016040528060008152506122d2565b611782612f67565b61178c3382612d13565b6117d85760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74206f776e6572206f7220617070726f766564006044820152606401610c09565b60006117e382611a36565b905060006117f083612cbd565b90506117fb83613426565b6118068284836134e0565b5050610c1b60018055565b600081516001600160401b0381111561182c5761182c614fdd565b604051908082528060200260200182016040528015611855578160200160208202803683370190505b5090508151600a600082825461186b91906157ff565b90915550600090505b8251811015610de7576118ae33848381518110611893576118936157bc565b602002602001015183600a546118a991906157ff565b61359f565b8282815181106118c0576118c06157bc565b6020026020010181815250506118ee8282815181106118e1576118e16157bc565b6020026020010151611ab8565b601c6000848481518110611904576119046157bc565b60200260200101518152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050155905050806001019050611874565b336119776000546001600160a01b031690565b6001600160a01b03161480611992575061199260023361299a565b6119ae5760405162461bcd60e51b8152600401610c099061569d565b610c1b816135f6565b6119bf612fc0565b8281146119de5760405162461bcd60e51b8152600401610c099061588c565b60005b83811015610fa057611a2e8585838181106119fe576119fe6157bc565b90506020020135848484818110611a1757611a176157bc565b9050602002810190611a29919061582b565b61364a565b6001016119e1565b6000818152600660205260408120546001600160a01b031680610bb95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c09565b601f8181548110610f1357600080fd5b611aae612fc0565b6112e18282613654565b611af16040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b601d805460009190611b0390856158c9565b81548110611b1357611b136157bc565b6000918252602082200154601e805491935090611b3090866158c9565b81548110611b4057611b406157bc565b6000918252602082200154601f805491935090611b5d90876158c9565b81548110611b6d57611b6d6157bc565b906000526020600020015490506040518060c0016040528042815260200142815260200160008152602001838152602001828152602001848152509350505050919050565b611bba612f0d565b80516112e190601e906020840190614c29565b611bd5612f0d565b611be060028261299a565b610c1b5760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a36112e160028261366e565b60006001600160a01b038216611c8f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c09565b506001600160a01b031660009081526007602052604090205490565b611cb3612f0d565b611cbd6000613683565b565b6000611cc9612f67565b33611cdc6000546001600160a01b031690565b6001600160a01b03161480611cf75750611cf760023361299a565b611d135760405162461bcd60e51b8152600401610c099061569d565b61123f8260405180602001604052806000815250600061359f565b6000611d38612f67565b33611d4b6000546001600160a01b031690565b6001600160a01b03161480611d665750611d6660023361299a565b611d825760405162461bcd60e51b8152600401610c099061569d565b611dc28484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061359f915050565b90506115ec60018055565b6060611dd7612f67565b33611dea6000546001600160a01b031690565b6001600160a01b03161480611e055750611e0560023361299a565b611e215760405162461bcd60e51b8152600401610c099061569d565b816001600160401b03811115611e3957611e39614fdd565b604051908082528060200260200182016040528015611e62578160200160208202803683370190505b5090506000600a546001611e7691906157ff565b905083839050600a6000828254611e8d91906157ff565b90915550600090505b838110156115e157611f0786868684818110611eb457611eb46157bc565b9050602002810190611ec6919061582b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118a992508691508790506157ff565b838281518110611f1957611f196157bc565b6020908102919091010152600101611e96565b611f34612fc0565b610de78383836133e9565b6060611f4b600c6132e6565b6001600160401b03811115611f6257611f62614fdd565b604051908082528060200260200182016040528015611f8b578160200160208202803683370190505b50905060005b611f9b600c6132e6565b81101561144357611fad600c826132f0565b828281518110611fbf57611fbf6157bc565b6001600160a01b0390921660209283029190910190910152600101611f91565b611fe7612f0d565b602155565b606060058054610c2d906156e1565b3361200e6000546001600160a01b031690565b6001600160a01b03161480612029575061202960023361299a565b6120455760405162461bcd60e51b8152600401610c099061569d565b6112e182826136d3565b6112e1338383613708565b612062612f0d565b6001600160a01b039091166000908152601b6020526040902055565b336120916000546001600160a01b031690565b6001600160a01b031614806120ac57506120ac60023361299a565b6120c85760405162461bcd60e51b8152600401610c099061569d565b8281146120e75760405162461bcd60e51b8152600401610c099061588c565b60005b83811015610fa057612137858583818110612107576121076157bc565b90506020020135848484818110612120576121206157bc565b9050602002810190612132919061582b565b612bb2565b6001016120ea565b612147612fc0565b610c1b33826137d6565b606061215b612f67565b3361216e6000546001600160a01b031690565b6001600160a01b03161480612189575061218960023361299a565b6121a55760405162461bcd60e51b8152600401610c099061569d565b8161ffff166001600160401b038111156121c1576121c1614fdd565b6040519080825280602002602001820160405280156121ea578160200160208202803683370190505b5090506000600a5460016121fe91906157ff565b90508261ffff16600a600082825461221691906157ff565b90915550600090505b8361ffff168110156122705761224b856040518060200160405280600081525083856118a991906157ff565b83828151811061225d5761225d6157bc565b602090810291909101015260010161221f565b5050610bb960018055565b3361228e6000546001600160a01b031690565b6001600160a01b031614806122a957506122a960023361299a565b6122c55760405162461bcd60e51b8152600401610c099061569d565b610fa085858585856132fc565b6122dc3383612d13565b6122f85760405162461bcd60e51b8152600401610c099061576f565b61149f8484848461384b565b606061230f82612b8a565b61232b5760405162461bcd60e51b8152600401610c0990615715565b610bb98261387e565b60608061234083612b8a565b61235c5760405162461bcd60e51b8152600401610c0990615715565b61236583613885565b91509150915091565b606061237982612b8a565b6123955760405162461bcd60e51b8152600401610c0990615715565b610bb982613c33565b6023546001600160a01b03166123ee5760405162461bcd60e51b81526020600482015260156024820152741d1bdad95b881859191c995cdcc81b9bdd081cd95d605a1b6044820152606401610c09565b6000805b82518110156125cd576000601c6000858481518110612413576124136157bc565b60200260200101518152602001908152602001600020905080600001546000036124715760405162461bcd60e51b815260206004820152600f60248201526e119a5cda081b9bdd081b5a5b9d1959608a1b6044820152606401610c09565b6000612495858481518110612488576124886157bc565b6020026020010151611a36565b90504260205483600101546124aa91906157ff565b10156124f85760405162461bcd60e51b815260206004820152601c60248201527f46697368206e6f742067656e65726174652072657761726420796574000000006044820152606401610c09565b602054826001015461250a91906157ff565b8260020154106125535760405162461bcd60e51b8152602060048201526014602482015273119a5cda08185b1c9958591e4818db185a5b595960621b6044820152606401610c09565b6001600160a01b038116331461259c5760405162461bcd60e51b815260206004820152600e60248201526d2737ba103334b9b41037bbb732b960911b6044820152606401610c09565b60225482600301546125ae91906157e8565b6125b890856157ff565b426002909301929092555091506001016123f2565b506023546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f19906044016111db565b336126186000546001600160a01b031690565b6001600160a01b03161480612633575061263360023361299a565b61264f5760405162461bcd60e51b8152600401610c099061569d565b610c1b81613eef565b6000612662612f67565b61266a612fc0565b6126868360405180602001604052806000815250846000613017565b9050610bb960018055565b606061269b612f67565b6126a3612fc0565b8161ffff166001600160401b038111156126bf576126bf614fdd565b6040519080825280602002602001820160405280156126e8578160200160208202803683370190505b5090506000600a5460016126fc91906157ff565b90508261ffff16600a600082825461271491906157ff565b90915550600090505b8361ffff168110156122705761274b8560405180602001604052806000815250600084866115b791906157ff565b83828151811061275d5761275d6157bc565b602090810291909101015260010161271d565b612778612f0d565b80516112e190601d906020840190614c29565b612793612fc0565b610de783838361364a565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b336127df6000546001600160a01b031690565b6001600160a01b031614806127fa57506127fa60023361299a565b6128165760405162461bcd60e51b8152600401610c099061569d565b6112e18282613f30565b612828612f0d565b6001600160a01b03811661288d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c09565b610c1b81613683565b60006128a0612f67565b6128a8612fc0565b611dc28484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506130179050565b60006001600160e01b0319821663b5d2729f60e01b148061291b57506001600160e01b03198216639088c20760e01b145b80610bb95750610bb982614065565b60006001600160e01b031982166380ac58cd60e01b1480610baa57506001600160e01b03198216635b5e139f60e01b1480610bb95750610bb9825b60006001600160e01b03198216632a9f3abf60e11b1480610bb957506301ffc9a760e01b6001600160e01b0319831614610bb9565b6001600160a01b038116600090815260018301602052604081205415156115ec565b6001600160a01b038116158015906129dd57506001600160a01b0381163014155b612a295760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f7420626c61636b6c69737420796f757273656c66000000000000006044820152606401610c09565b612a34600c8261299a565b15612a7c5760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a3612a7a600c82613177565b505b612a87600e8261299a565b610c1b5760405133906001600160a01b038316907f05ac7bc5a606cd92a63365f9fda244499b9add0526b22d99937b6bd88181059c90600090a36112e1600e8261366e565b612ad581612b8a565b610c1b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c09565b600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612b5182611a36565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000908152600660205260409020546001600160a01b0316151590565b60606115ec82613885565b600083118015612bc45750600a548311155b8015612be157506000612bd684612cbd565b6001600160a01b0316145b612c1d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610c09565b600083815260136020526040902061149f828483615923565b612c4284848484614116565b6000858152601560205260408120612c5991614c70565b612c7884848484601560008b81526020019081526020016000206141c1565b847fabb46fe0761d77584bde75697647804ffd8113abd4d8d06bc664150395eccdee85858585604051612cae94939291906159e2565b60405180910390a25050505050565b600081815260066020526040812054600160a01b90046001600160601b0381169061ffff168203612cf15750600092915050565b61ffff166000908152601a60205260409020546001600160a01b031692915050565b600080612d1f83611a36565b9050806001600160a01b0316846001600160a01b03161480612d465750612d46818561279e565b80612d6a5750836001600160a01b0316612d5f84610cb0565b6001600160a01b0316145b949350505050565b6000818152600660209081526040918290208251808401909352546001600160a01b03808216808552600160a01b9092046001600160601b0316928401929092529085168114612e125760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610c09565b6001600160a01b038416612e745760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c09565b6020820151612e858686868461427c565b612e90600085612b1c565b6001600160a01b038087166000818152600760209081526040808320805460001901905593891680835284832080546001019055888352600690915283822080546001600160a01b031916821790559251879392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4611209565b6000546001600160a01b03163314611cbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c09565b600260015403612fb95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c09565b6002600155565b612fcb600c3361299a565b611cbd5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206265207265676973746572656420657874656e73696f6e000000006044820152606401610c09565b60008160000361303a57600a6000815461303090615812565b90915550600a5491505b6130448583614288565b33600090815260196020526040902054613077908690849061ffff16601087901b69ffffffffffffffff000016176142f3565b8351156130985760008281526013602052604090206130968582615a60565b505b509392505050565b6000806000806130af86613885565b915091506001825111156131055760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e203120726f79616c7479207265636569766572000000006044820152606401610c09565b815160000361311c57306000935093505050611281565b8160008151811061312f5761312f6157bc565b6020026020010151612710868360008151811061314e5761314e6157bc565b602002602001015161316091906157e8565b61316a9190615b1f565b9350935050509250929050565b60006115ec836001600160a01b03841661430e565b6000805260106020527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb01610de7828483615923565b6131cc600e8261299a565b15610c1b5760405162461bcd60e51b8152600401610c0990615740565b60185461ffff908116106132355760405162461bcd60e51b8152602060048201526013602482015272546f6f206d616e7920657874656e73696f6e7360681b6044820152606401610c09565b6001600160a01b03841660009081526019602052604081205461ffff1690036132da576018805460009061326c9061ffff16615b33565b82546101009290920a61ffff818102199093169183160217909155601880546001600160a01b0387166000818152601960209081526040808320805495881661ffff199096169590951790945593549094168452601a90925290912080546001600160a01b03191690911790555b61149f84848484614401565b6000610bb9825490565b60006115ec83836144ee565b61330884848484614116565b6001600160a01b038516600090815260146020526040812061332991614c70565b61335a84848484601460008b6001600160a01b03166001600160a01b031681526020019081526020016000206141c1565b6001600160a01b0385166133aa577f2b6849d5976d799a5b0ca4dfd6b40a3d7afe9ea72c091fa01a958594f9a2659b8484848460405161339d94939291906159e2565b60405180910390a1610fa0565b846001600160a01b03167f535a93d2cb000582c0ebeaa9be4890ec6a287f98eb2df00c54c300612fd78d8f85858585604051612cae94939291906159e2565b336000908152601060205260409020613403838583615923565b50336000908152601160205260409020805460ff19169115159190911790555050565b60008181526006602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282018390529092909190613476908390868461427c565b613481600085612b1c565b6001600160a01b038216600081815260076020908152604080832080546000190190558783526006909152808220829055518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a461149f565b6001600160a01b0381161561356857613500816311686e4b60e21b614518565b15613568576040516311686e4b60e21b81526001600160a01b038481166004830152602482018490528216906345a1b92c90604401600060405180830381600087803b15801561354f57600080fd5b505af1158015613563573d6000803e3d6000fd5b505050505b60008281526013602052604090208054613581906156e1565b159050610de7576000828152601360205260408120610de791614c8e565b6000816000036135c257600a600081546135b890615812565b90915550600a5491505b6135ce848360006142f3565b8251156135ef5760008281526013602052604090206135ed8482615a60565b505b5092915050565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f959c0e47a2fe3cf01e237ba4892e2cc3194d77cbfb33e434e40873225d6b595f9060200160405180910390a150565b33612bd684612cbd565b336000908152601260205260409020610de7828483615923565b60006115ec836001600160a01b038416614534565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805260126020527f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b610de7828483615923565b816001600160a01b0316836001600160a01b0316036137695760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c09565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6137e7826345ffcdad60e01b614518565b156112e1576001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f072a7592283e2c2d1d56d21517ff6013325e0f55483f4828373ff4d98b0a1a36910160405180910390a25050565b613856848484612d72565b61386284848484614583565b61149f5760405162461bcd60e51b8152600401610c0990615b54565b60606135ef825b606080600060156000858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561390757600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff16818301528252600190920191016138bd565b5050505090508051600003613a5457600061392185612cbd565b90506001600160a01b03811615613a525761394381634e53ee3d60e11b614518565b156139ce57604051634e53ee3d60e11b8152306004820152602481018690526001600160a01b03821690639ca7dc7a90604401600060405180830381865afa158015613993573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139bb9190810190615c0c565b81519195509350156139ce575050915091565b6001600160a01b038116600090815260146020908152604080832080548251818502810185019093528083529193909284015b82821015613a4b57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101613a01565b5050505091505b505b8051600003613af7576000808052601460209081527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c8054604080518285028101850190915281815293919290919084015b82821015613af057600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101613aa6565b5050505090505b805115613c2d5780516001600160401b03811115613b1757613b17614fdd565b604051908082528060200260200182016040528015613b40578160200160208202803683370190505b50925080516001600160401b03811115613b5c57613b5c614fdd565b604051908082528060200260200182016040528015613b85578160200160208202803683370190505b50915060005b8151811015613c2b57818181518110613ba657613ba66157bc565b602002602001015160000151848281518110613bc457613bc46157bc565b60200260200101906001600160a01b031690816001600160a01b031681525050818181518110613bf657613bf66157bc565b60200260200101516020015161ffff16838281518110613c1857613c186157bc565b6020908102919091010152600101613b8b565b505b50915091565b6060600082118015613c475750600a548211155b613c835760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610c09565b6000613c8e83612cbd565b9050613c9b600e8261299a565b15613cb85760405162461bcd60e51b8152600401610c0990615740565b60008381526013602052604090208054613cd1906156e1565b159050613deb576001600160a01b03811660009081526012602052604090208054613cfb906156e1565b159050613d4c576001600160a01b038116600090815260126020908152604080832086845260138352928190209051613d35939201615d43565b604051602081830303815290604052915050919050565b60008381526013602052604090208054613d65906156e1565b80601f0160208091040260200160405190810160405280929190818152602001828054613d91906156e1565b8015613dde5780601f10613db357610100808354040283529160200191613dde565b820191906000526020600020905b815481529060010190602001808311613dc157829003601f168201915b5050505050915050919050565b613dfc8163e9dc637560e01b614518565b15613e745760405163e9dc637560e01b8152306004820152602481018490526001600160a01b0382169063e9dc637590604401600060405180830381865afa158015613e4c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ec9190810190615d58565b6001600160a01b03811660009081526011602052604090205460ff16613ec6576001600160a01b0381166000908152601060205260409020613eb584614681565b604051602001613d35929190615dc5565b6001600160a01b03811660009081526010602052604090208054613d65906156e1565b50919050565b60405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a36112e1600c82613177565b613f3b600c8361299a565b613f875760405162461bcd60e51b815260206004820152601e60248201527f43726561746f72436f72653a20496e76616c696420657874656e73696f6e00006044820152606401610c09565b6001600160a01b0381161580613fa95750613fa981631e05385b60e31b614518565b613fe75760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c09565b6001600160a01b038281166000908152601760205260409020548116908216146112e1576001600160a01b0382811660008181526017602052604080822080546001600160a01b031916948616948517905551339392917f6a835c4fcf7e0d398db3762332fdaa1471814ad39f1e2d6d0b3fdabf8efee3e091a45050565b60006001600160e01b031982166314d9799760e21b148061409657506001600160e01b031982166328f10a2160e01b145b806140a557506140a58261292a565b806140c057506001600160e01b03198216635d9dd7eb60e11b145b806140db57506001600160e01b03198216632dde656160e21b145b806140f657506001600160e01b031982166335681b5360e21b145b80610bb957506001600160e01b0319821663152a902d60e11b1492915050565b8281146141355760405162461bcd60e51b8152600401610c099061588c565b6000805b8281101561416f57838382818110614153576141536157bc565b905060200201358261416591906157ff565b9150600101614139565b506127108110610fa05760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f74616c20726f79616c746965730000000000000000006044820152606401610c09565b60005b82811015611209578160405180604001604052808888858181106141ea576141ea6157bc565b90506020020160208101906141ff9190614d40565b6001600160a01b0316815260200186868581811061421f5761421f6157bc565b61ffff602091820293909301358316909352508354600181810186556000958652948390208451910180549490930151909116600160a01b026001600160b01b03199093166001600160a01b0390911617919091179055016141c4565b61149f84848484614713565b336000908152601760205260409020546001600160a01b0316156112e1573360008181526017602052604090819020549051631e05385b60e31b815260048101929092526001600160a01b03848116602484015260448301849052169063f029c2d8906064016111db565b610de78383836040518060200160405280600081525061474e565b600081815260018301602052604081205480156143f7576000614332600183615dea565b855490915060009061434690600190615dea565b90508181146143ab576000866000018281548110614366576143666157bc565b9060005260206000200154905080876000018481548110614389576143896157bc565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806143bc576143bc615dfd565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610bb9565b6000915050610bb9565b6001600160a01b038416301480159061442357506001600160a01b0384163b15155b6144595760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b6044820152606401610c09565b60405133906001600160a01b038616907fd8cb8ba4086944eabf43c5535b7712015e4d4c714b24bf812c040ea5b7a3e42a90600090a36001600160a01b03841660009081526010602052604090206144b2838583615923565b506001600160a01b0384166000908152601160205260409020805460ff19168215151790556144e2600c8561366e565b5061149f8460016137d6565b6000826000018281548110614505576145056157bc565b9060005260206000200154905092915050565b60006145238361489d565b80156115ec57506115ec83836148d0565b600081815260018301602052604081205461457b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bb9565b506000610bb9565b60006001600160a01b0384163b1561467957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906145c7903390899088908890600401615e13565b6020604051808303816000875af1925050508015614602575060408051601f3d908101601f191682019092526145ff91810190615e50565b60015b61465f573d808015614630576040519150601f19603f3d011682016040523d82523d6000602084013e614635565b606091505b5080516000036146575760405162461bcd60e51b8152600401610c0990615b54565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612d6a565b506001612d6a565b6060600061468e83614959565b60010190506000816001600160401b038111156146ad576146ad614fdd565b6040519080825280601f01601f1916602001820160405280156146d7576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846146e157509392505050565b6001600160a01b0384161561149f5761ffff81166000908152601a602052604090205461149f908590859085906001600160a01b0316614a31565b6001600160a01b0384166147a45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c09565b6147ad83612b8a565b156147fa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c09565b614807600085858561427c565b6001600160a01b03808516600081815260076020908152604080832080546001019055805180820182528481526001600160601b038089168285019081528a865260069094528285209151935116600160a01b02929095169190911790935591518592907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46138626000858584614583565b60006148b0826301ffc9a760e01b6148d0565b8015610bb957506148c9826001600160e01b03196148d0565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015614942575060208210155b801561494e5750600081115b979650505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106149985772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106149c4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106149e257662386f26fc10000830492506010015b6305f5e10083106149fa576305f5e100830492506008015b6127108310614a0e57612710830492506004015b60648310614a20576064830492506002015b600a8310610bb95760010192915050565b6001600160a01b0384161561149f576001600160a01b03811615801590614a7057506001600160a01b03811660009081526016602052604090205460ff165b15614b4757604051632f3537c560e11b81523360048201526001600160a01b038581166024830152848116604483015260648201849052821690635e6a6f8a906084016020604051808303816000875af1158015614ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614af69190615e6d565b614b425760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610c09565b61149f565b600b546001600160a01b03161561149f57600b54604051632f3537c560e11b81523360048201526001600160a01b03868116602483015285811660448301526064820185905290911690635e6a6f8a906084016020604051808303816000875af1158015614bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bdd9190615e6d565b61149f5760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610c09565b828054828255906000526020600020908101928215614c64579160200282015b82811115614c64578251825591602001919060010190614c49565b50611443929150614cc4565b5080546000825590600052602060002090810190610c1b9190614cd9565b508054614c9a906156e1565b6000825580601f10614caa575050565b601f016020900490600052602060002090810190610c1b91905b5b808211156114435760008155600101614cc5565b5b808211156114435780546001600160b01b0319168155600101614cda565b6001600160e01b031981168114610c1b57600080fd5b600060208284031215614d2057600080fd5b81356115ec81614cf8565b6001600160a01b0381168114610c1b57600080fd5b600060208284031215614d5257600080fd5b81356115ec81614d2b565b60005b83811015614d78578181015183820152602001614d60565b50506000910152565b60008151808452614d99816020860160208601614d5d565b601f01601f19169290920160200192915050565b6020815260006115ec6020830184614d81565b600060208284031215614dd257600080fd5b5035919050565b60008060408385031215614dec57600080fd5b8235614df781614d2b565b946020939093013593505050565b600081518084526020808501945080840160005b83811015614e3557815187529582019590820190600101614e19565b509495945050505050565b6020815260006115ec6020830184614e05565b60008083601f840112614e6557600080fd5b5081356001600160401b03811115614e7c57600080fd5b60208301915083602082850101111561128157600080fd5b600080600060408486031215614ea957600080fd5b8335925060208401356001600160401b03811115614ec657600080fd5b614ed286828701614e53565b9497909650939450505050565b60008083601f840112614ef157600080fd5b5081356001600160401b03811115614f0857600080fd5b6020830191508360208260051b850101111561128157600080fd5b600080600080600060608688031215614f3b57600080fd5b8535945060208601356001600160401b0380821115614f5957600080fd5b614f6589838a01614edf565b90965094506040880135915080821115614f7e57600080fd5b50614f8b88828901614edf565b969995985093965092949392505050565b600080600060608486031215614fb157600080fd5b8335614fbc81614d2b565b92506020840135614fcc81614d2b565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561501b5761501b614fdd565b604052919050565b60006001600160401b0382111561503c5761503c614fdd565b5060051b60200190565b6000602080838503121561505957600080fd5b82356001600160401b0381111561506f57600080fd5b8301601f8101851361508057600080fd5b803561509361508e82615023565b614ff3565b81815260059190911b820183019083810190878311156150b257600080fd5b928401925b8284101561494e578335825292840192908401906150b7565b600080604083850312156150e357600080fd5b50508035926020909101359150565b6000806020838503121561510557600080fd5b82356001600160401b0381111561511b57600080fd5b61512785828601614e53565b90969095509350505050565b60008060006040848603121561514857600080fd5b833561515381614d2b565b925060208401356001600160401b03811115614ec657600080fd5b6020808252825182820181905260009190848201906040850190845b818110156151af5783516001600160a01b03168352928401929184019160010161518a565b50909695505050505050565b600080600080604085870312156151d157600080fd5b84356001600160401b03808211156151e857600080fd5b6151f488838901614edf565b9096509450602087013591508082111561520d57600080fd5b5061521a87828801614edf565b95989497509550505050565b60008060006040848603121561523b57600080fd5b833561524681614d2b565b925060208401356001600160401b0381111561526157600080fd5b614ed286828701614edf565b8015158114610c1b57600080fd5b6000806000806060858703121561529157600080fd5b843561529c81614d2b565b935060208501356001600160401b038111156152b757600080fd5b6152c387828801614e53565b90945092505060408501356152d78161526d565b939692955090935050565b60006001600160401b038211156152fb576152fb614fdd565b50601f01601f191660200190565b600061531761508e846152e2565b905082815283838301111561532b57600080fd5b828260208301376000602084830101529392505050565b6000602080838503121561535557600080fd5b82356001600160401b038082111561536c57600080fd5b818501915085601f83011261538057600080fd5b813561538e61508e82615023565b81815260059190911b830184019084810190888311156153ad57600080fd5b8585015b838110156153fa578035858111156153c95760008081fd5b8601603f81018b136153db5760008081fd5b6153ec8b8983013560408401615309565b8452509186019186016153b1565b5098975050505050505050565b60008060006040848603121561541c57600080fd5b83356001600160401b0381111561543257600080fd5b61543e86828701614e53565b90945092505060208401356154528161526d565b809150509250925092565b6000806040838503121561547057600080fd5b823561547b81614d2b565b9150602083013561548b8161526d565b809150509250929050565b6000602082840312156154a857600080fd5b81356115ec8161526d565b600080604083850312156154c657600080fd5b82356154d181614d2b565b9150602083013561ffff8116811461548b57600080fd5b60008060008060006060868803121561550057600080fd5b853561550b81614d2b565b945060208601356001600160401b0380821115614f5957600080fd5b6000806000806080858703121561553d57600080fd5b843561554881614d2b565b9350602085013561555881614d2b565b92506040850135915060608501356001600160401b0381111561557a57600080fd5b8501601f8101871361558b57600080fd5b61559a87823560208401615309565b91505092959194509250565b600081518084526020808501945080840160005b83811015614e355781516001600160a01b0316875295820195908201906001016155ba565b6020815260006115ec60208301846155a6565b60408152600061560560408301856155a6565b82810360208401526156178185614e05565b95945050505050565b803569ffffffffffffffffffff8116811461105057600080fd5b6000806040838503121561564d57600080fd5b823561565881614d2b565b915061566660208401615620565b90509250929050565b6000806040838503121561568257600080fd5b823561568d81614d2b565b9150602083013561548b81614d2b565b60208082526024908201527f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f7220616040820152633236b4b760e11b606082015260800190565b600181811c908216806156f557607f821691505b602082108103613ee957634e487b7160e01b600052602260045260246000fd5b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b602080825260159082015274115e1d195b9cda5bdb88189b1858dadb1a5cdd1959605a1b604082015260600190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bb957610bb96157d2565b80820180821115610bb957610bb96157d2565b600060018201615824576158246157d2565b5060010190565b6000808335601e1984360301811261584257600080fd5b8301803591506001600160401b0382111561585c57600080fd5b60200191503681900382131561128157600080fd5b60006020828403121561588357600080fd5b6115ec82615620565b6020808252600d908201526c125b9d985b1a59081a5b9c1d5d609a1b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826158d8576158d86158b3565b500690565b601f821115610de757600081815260208120601f850160051c810160208610156159045750805b601f850160051c820191505b8181101561120957828155600101615910565b6001600160401b0383111561593a5761593a614fdd565b61594e8361594883546156e1565b836158dd565b6000601f841160018114615982576000851561596a5750838201355b600019600387901b1c1916600186901b178355610fa0565b600083815260209020601f19861690835b828110156159b35786850135825560209485019460019092019101615993565b50868210156159d05760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040808252810184905260008560608301825b87811015615a25578235615a0881614d2b565b6001600160a01b03168252602092830192909101906001016159f5565b5083810360208501528481526001600160fb1b03851115615a4557600080fd5b8460051b915081866020830137016020019695505050505050565b81516001600160401b03811115615a7957615a79614fdd565b615a8d81615a8784546156e1565b846158dd565b602080601f831160018114615ac25760008415615aaa5750858301515b600019600386901b1c1916600185901b178555611209565b600085815260208120601f198616915b82811015615af157888601518255948401946001909101908401615ad2565b5085821015615b0f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615b2e57615b2e6158b3565b500490565b600061ffff808316818103615b4a57615b4a6157d2565b6001019392505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082601f830112615bb757600080fd5b81516020615bc761508e83615023565b82815260059290921b84018101918181019086841115615be657600080fd5b8286015b84811015615c015780518352918301918301615bea565b509695505050505050565b60008060408385031215615c1f57600080fd5b82516001600160401b0380821115615c3657600080fd5b818501915085601f830112615c4a57600080fd5b81516020615c5a61508e83615023565b82815260059290921b84018101918181019089841115615c7957600080fd5b948201945b83861015615ca0578551615c9181614d2b565b82529482019490820190615c7e565b91880151919650909350505080821115615cb957600080fd5b50615cc685828601615ba6565b9150509250929050565b60008154615cdd816156e1565b60018281168015615cf55760018114615d0a57615d39565b60ff1984168752821515830287019450615d39565b8560005260208060002060005b85811015615d305781548a820152908401908201615d17565b50505082870194505b5050505092915050565b6000612d6a615d528386615cd0565b84615cd0565b600060208284031215615d6a57600080fd5b81516001600160401b03811115615d8057600080fd5b8201601f81018413615d9157600080fd5b8051615d9f61508e826152e2565b818152856020838501011115615db457600080fd5b615617826020830160208601614d5d565b6000615dd18285615cd0565b8351615de1818360208801614d5d565b01949350505050565b81810381811115610bb957610bb96157d2565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615e4690830184614d81565b9695505050505050565b600060208284031215615e6257600080fd5b81516115ec81614cf8565b600060208284031215615e7f57600080fd5b81516115ec8161526d56fea2646970667358221220dd5e074be0d61505ae05f2c95da8fa0ab7ab8e16d908e51e4da35ba55b3b748064736f6c63430008140033", + "bytecode": "0x6000600a5562015180601f556064602055607860215561010060405260556080818152906200622e60a039602390620000399082620001c5565b503480156200004757600080fd5b5060405180604001604052806007815260200166119a5cda13919560ca1b8152506040518060400160405280600381526020016223232360e91b8152508181620000a06200009a620000cc60201b60201c565b620000d0565b600180556004620000b28382620001c5565b506005620000c18282620001c5565b505050505062000291565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200014b57607f821691505b6020821081036200016c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c057600081815260208120601f850160051c810160208610156200019b5750805b601f850160051c820191505b81811015620001bc57828155600101620001a7565b5050505b505050565b81516001600160401b03811115620001e157620001e162000120565b620001f981620001f2845462000136565b8462000172565b602080601f831160018114620002315760008415620002185750858301515b600019600386901b1c1916600185901b178555620001bc565b600085815260208120601f198616915b82811015620002625788860151825594840194600190910190840162000241565b5085821015620002815787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b615f8d80620002a16000396000f3fe60806040526004361061045d5760003560e01c80636d73e6691161023f578063ad2d0ddd11610139578063d5a06d4c116100b6578063e985e9c51161007a578063e985e9c514610e46578063f0cdc49914610e8f578063f26b013a14610eaf578063f2fde38b14610ec5578063fe2e1f5814610ee557600080fd5b8063d5a06d4c14610d38578063e00aab4b14610dc6578063e6a0bc4b14610de6578063e757223014610e06578063e92a89f614610e2657600080fd5b8063b9c4d9fb116100fd578063b9c4d9fb14610d0b578063bb3bafd614610d38578063c87b56dd14610d66578063c94c7ff414610d86578063ce8aee9d14610da657600080fd5b8063ad2d0ddd14610c0e578063ae50f69414610c2e578063b0fe87c914610c4e578063b68d6f3614610c6e578063b88d4fde14610ceb57600080fd5b80638da5cb5b116101c75780639d76ea581161018b5780639d76ea5814610b6e578063a22cb46514610b8e578063a4c5fc7a14610bae578063aafb2d4414610bce578063ac0c8cfa14610bee57600080fd5b80638da5cb5b14610ace5780638e9345d214610aec578063953bf8a214610b1957806395d89b4114610b3957806399e0dd7c14610b4e57600080fd5b80637884af441161020e5780637884af4414610a435780637aa15f1614610a6357806382dcc0c814610a8357806383b7db6314610aa35780638c0fb79214610ab857600080fd5b80636d73e669146109ce57806370a08231146109ee578063715018a614610a0e57806372ff03d314610a2357600080fd5b80632d3456701161035b57806342842e0e116102d85780636352211e1161029c5780636352211e1461092e5780636622fa391461094e57806366d1e9d01461096e578063672001541461098e57806368d4c46a146109ae57600080fd5b806342842e0e1461089857806342966c68146108b85780634eb747e6146108d85780635768f271146108ee57806361e5bc6b1461090e57600080fd5b8063350a33291161031f578063350a33291461080357806338e52e78146108235780633a367a67146108435780633e6134b8146108585780633f0f37f61461087857600080fd5b80632d3456701461076157806330176e13146107815780633071a0f9146107a157806331ae450b146107c1578063332dd1ae146107e357600080fd5b806320e4afe2116103e957806326a4e8d2116103ad57806326a4e8d2146106ba578063287ba51a146106da5780632928ca58146106fa5780632a55205a1461071a5780632afba5b61461075957600080fd5b806320e4afe21461061a578063239be3171461063a57806323b872dd1461065a57806324d7806c1461067a57806325c0bdc81461069a57600080fd5b8063095ea7b311610430578063095ea7b3146105135780630ebd4c7f146105335780631549721214610560578063162094c4146105cc57806317b8e1cf146105ec57600080fd5b806301ffc9a71461046257806302e7afb71461049757806306fdde03146104b9578063081812fc146104db575b600080fd5b34801561046e57600080fd5b5061048261047d366004614e80565b610f05565b60405190151581526020015b60405180910390f35b3480156104a357600080fd5b506104b76104b2366004614eb2565b610f34565b005b3480156104c557600080fd5b506104ce610f93565b60405161048e9190614f1f565b3480156104e757600080fd5b506104fb6104f6366004614f32565b611025565b6040516001600160a01b03909116815260200161048e565b34801561051f57600080fd5b506104b761052e366004614f4b565b61104c565b34801561053f57600080fd5b5061055361054e366004614f32565b611161565b60405161048e9190614fb2565b34801561056c57600080fd5b5061058061057b366004614f32565b6111e7565b60405161048e9190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b3480156105d857600080fd5b506104b76105e7366004615006565b611279565b3480156105f857600080fd5b5061060c610607366004614f32565b6112ce565b60405190815260200161048e565b34801561062657600080fd5b506104b7610635366004615095565b6112ef565b34801561064657600080fd5b506104fb610655366004614f32565b611372565b34801561066657600080fd5b506104b761067536600461510e565b6113a2565b34801561068657600080fd5b50610482610695366004614eb2565b6113d3565b3480156106a657600080fd5b5061060c6106b5366004614f32565b61140c565b3480156106c657600080fd5b506104b76106d5366004614eb2565b61141c565b3480156106e657600080fd5b506104b76106f5366004615223565b611446565b34801561070657600080fd5b5061060c610715366004614eb2565b61155e565b34801561072657600080fd5b5061073a610735366004615257565b6115b8565b604080516001600160a01b03909316835260208301919091520161048e565b6104b76115f6565b34801561076d57600080fd5b506104b761077c366004614eb2565b61174a565b34801561078d57600080fd5b506104b761079c366004615279565b6117a7565b3480156107ad57600080fd5b506104b76107bc3660046152ba565b611830565b3480156107cd57600080fd5b506107d66118b6565b60405161048e91906152f5565b3480156107ef57600080fd5b506104b76107fe366004615342565b611964565b34801561080f57600080fd5b506104b761081e366004615223565b6119bc565b34801561082f57600080fd5b5061055361083e3660046153ad565b6119d7565b34801561084f57600080fd5b506104ce611af9565b34801561086457600080fd5b506104b7610873366004615279565b611b87565b34801561088457600080fd5b506104b7610893366004615404565b611bba565b3480156108a457600080fd5b506104b76108b336600461510e565b611c39565b3480156108c457600080fd5b506104b76108d3366004614f32565b611c54565b3480156108e457600080fd5b5061060c601f5481565b3480156108fa57600080fd5b506105536109093660046154ca565b611cdc565b34801561091a57600080fd5b506104b761092936600461558f565b611dde565b34801561093a57600080fd5b506104fb610949366004614f32565b611e89565b34801561095a57600080fd5b5061060c610969366004614f32565b611ee9565b34801561097a57600080fd5b506104b7610989366004615279565b611ef9565b34801561099a57600080fd5b506105806109a9366004614f32565b611f2a565b3480156109ba57600080fd5b506104b76109c9366004615223565b612024565b3480156109da57600080fd5b506104b76109e9366004614eb2565b61203f565b3480156109fa57600080fd5b5061060c610a09366004614eb2565b612097565b348015610a1a57600080fd5b506104b761211d565b348015610a2f57600080fd5b5061060c610a3e366004614eb2565b612131565b348015610a4f57600080fd5b5061060c610a5e3660046152ba565b61219e565b348015610a6f57600080fd5b50610553610a7e3660046153ad565b61223d565b348015610a8f57600080fd5b506104b7610a9e3660046155ea565b612371565b348015610aaf57600080fd5b506107d66123a3565b348015610ac457600080fd5b5061060c60215481565b348015610ada57600080fd5b506000546001600160a01b03166104fb565b348015610af857600080fd5b5061060c610b07366004614eb2565b601a6020526000908152604090205481565b348015610b2557600080fd5b506104b7610b34366004614f32565b61244d565b348015610b4557600080fd5b506104ce61245a565b348015610b5a57600080fd5b506104b7610b69366004615279565b612469565b348015610b7a57600080fd5b506022546104fb906001600160a01b031681565b348015610b9a57600080fd5b506104b7610ba936600461563d565b6124bd565b348015610bba57600080fd5b506104b7610bc9366004614f4b565b6124c8565b348015610bda57600080fd5b506104b7610be936600461558f565b6124ec565b348015610bfa57600080fd5b506104b7610c09366004615672565b6125ba565b348015610c1a57600080fd5b50610553610c2936600461568d565b6126de565b348015610c3a57600080fd5b506104b7610c49366004614f32565b6127e3565b348015610c5a57600080fd5b506104b7610c693660046156cd565b6127f0565b348015610c7a57600080fd5b50610cbe610c89366004614f32565b601b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161048e565b348015610cf757600080fd5b506104b7610d0636600461570c565b612847565b348015610d1757600080fd5b50610d2b610d26366004614f32565b612879565b60405161048e91906157c4565b348015610d4457600080fd5b50610d58610d53366004614f32565b612908565b60405161048e9291906157d7565b348015610d7257600080fd5b506104ce610d81366004614f32565b6129ec565b348015610d9257600080fd5b506104b7610da1366004615223565b612a1c565b348015610db257600080fd5b506104b7610dc1366004614eb2565b612c85565b348015610dd257600080fd5b50610553610de136600461568d565b612cd8565b348015610df257600080fd5b506104b7610e01366004615223565b612db0565b348015610e1257600080fd5b5061060c610e21366004614f32565b612dcb565b348015610e3257600080fd5b506104b7610e41366004615006565b612f08565b348015610e5257600080fd5b50610482610e61366004615805565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b348015610e9b57600080fd5b506104b7610eaa366004615805565b612f3a565b348015610ebb57600080fd5b5061060c60205481565b348015610ed157600080fd5b506104b7610ee0366004614eb2565b612f8e565b348015610ef157600080fd5b5061060c610f003660046152ba565b613004565b6000610f1082613075565b80610f1f5750610f1f8261309a565b80610f2e5750610f2e826130d5565b92915050565b33610f476000546001600160a01b031690565b6001600160a01b03161480610f625750610f6260023361310a565b610f875760405162461bcd60e51b8152600401610f7e90615833565b60405180910390fd5b610f908161312c565b50565b606060048054610fa290615877565b80601f0160208091040260200160405190810160405280929190818152602001828054610fce90615877565b801561101b5780601f10610ff05761010080835404028352916020019161101b565b820191906000526020600020905b815481529060010190602001808311610ffe57829003601f168201915b5050505050905090565b60006110308261323c565b506000908152600860205260409020546001600160a01b031690565b600061105782611e89565b9050806001600160a01b0316836001600160a01b0316036110c45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610f7e565b336001600160a01b03821614806110e057506110e08133610e61565b6111525760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610f7e565b61115c838361328c565b505050565b606061116c826132fa565b6111885760405162461bcd60e51b8152600401610f7e906158ab565b61119182613317565b8054806020026020016040519081016040528092919081815260200182805480156111db57602002820191906000526020600020905b8154815260200190600101908083116111c7575b50505050509050919050565b6112206040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506000908152601b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b3361128c6000546001600160a01b031690565b6001600160a01b031614806112a757506112a760023361310a565b6112c35760405162461bcd60e51b8152600401610f7e90615833565b61115c8383836133be565b601c81815481106112de57600080fd5b600091825260209091200154905081565b336113026000546001600160a01b031690565b6001600160a01b0316148061131d575061131d60023361310a565b6113395760405162461bcd60e51b8152600401610f7e90615833565b611342856132fa565b61135e5760405162461bcd60e51b8152600401610f7e906158ab565b61136b8585858585613426565b5050505050565b600061137d826132fa565b6113995760405162461bcd60e51b8152600401610f7e906158ab565b610f2e8261354f565b6113ac33826135d5565b6113c85760405162461bcd60e51b8152600401610f7e906158d6565b61115c838383613654565b6000816001600160a01b03166113f16000546001600160a01b031690565b6001600160a01b03161480610f2e5750610f2e60028361310a565b601d81815481106112de57600080fd5b6114246137b8565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b82518110156114f4576000601b600085848151811061146b5761146b615923565b60200260200101518152602001908152602001600020905080600001546000036114c95760405162461bcd60e51b815260206004820152600f60248201526e119a5cda081b9bdd081b5a5b9d1959608a1b6044820152606401610f7e565b60205481600401546114db919061594f565b6114e59084615966565b4260019283015592500161144a565b50602254604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac906044015b600060405180830381600087803b15801561154257600080fd5b505af1158015611556573d6000803e3d6000fd5b505050505050565b6000611568613812565b611573600b3361310a565b61158f5760405162461bcd60e51b8152600401610f7e90615979565b6115a8826040518060200160405280600081525061386b565b90506115b360018055565b919050565b6000806115c4846132fa565b6115e05760405162461bcd60e51b8152600401610f7e906158ab565b6115ea84846138de565b915091505b9250929050565b60006116026001612dcb565b9050803410156116495760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610f7e565b60006116df336023805461165c90615877565b80601f016020809104026020016040519081016040528092919081815260200182805461168890615877565b80156116d55780601f106116aa576101008083540402835291602001916116d5565b820191906000526020600020905b8154815290600101906020018083116116b857829003601f168201915b50505050506139c9565b90506116ea81611f2a565b6000828152601b60209081526040808320845181559184015160018301558301516002820155606083015160038201556080830151600482015560a090920151600590920191909155600a805491611741836159b0565b91905055505050565b6117526137b8565b61175d60028261310a565b15610f905760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a36117a36002826139ee565b5050565b336117ba6000546001600160a01b031690565b6001600160a01b031614806117d557506117d560023361310a565b6117f15760405162461bcd60e51b8152600401610f7e90615833565b6117a382828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613a0392505050565b336118436000546001600160a01b031690565b6001600160a01b0316148061185e575061185e60023361310a565b61187a5760405162461bcd60e51b8152600401610f7e90615833565b82611886600d8261310a565b156118a35760405162461bcd60e51b8152600401610f7e906159c9565b6118b08484846000613a37565b50505050565b60606118c26002613b86565b6001600160401b038111156118d9576118d961514f565b604051908082528060200260200182016040528015611902578160200160208202803683370190505b50905060005b6119126002613b86565b81101561196057611924600282613b90565b82828151811061193657611936615923565b6001600160a01b039092166020928302919091019091015280611958816159b0565b915050611908565b5090565b336119776000546001600160a01b031690565b6001600160a01b03161480611992575061199260023361310a565b6119ae5760405162461bcd60e51b8152600401610f7e90615833565b6118b0600085858585613b9c565b6119c46137b8565b80516117a390601e906020840190614d4a565b60606119e1613812565b6119ec600b3361310a565b611a085760405162461bcd60e51b8152600401610f7e90615979565b816001600160401b03811115611a2057611a2061514f565b604051908082528060200260200182016040528015611a49578160200160208202803683370190505b50905060005b82811015611ae857611ab985858584818110611a6d57611a6d615923565b9050602002810190611a7f91906159f8565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061386b92505050565b828281518110611acb57611acb615923565b602090810291909101015280611ae0816159b0565b915050611a4f565b50611af260018055565b9392505050565b60238054611b0690615877565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3290615877565b8015611b7f5780601f10611b5457610100808354040283529160200191611b7f565b820191906000526020600020905b815481529060010190602001808311611b6257829003601f168201915b505050505081565b611b92600b3361310a565b611bae5760405162461bcd60e51b8152600401610f7e90615979565b6117a382826000613d22565b33611bcd6000546001600160a01b031690565b6001600160a01b03161480611be85750611be860023361310a565b611c045760405162461bcd60e51b8152600401610f7e90615833565b83611c10600d8261310a565b15611c2d5760405162461bcd60e51b8152600401610f7e906159c9565b61136b85858585613a37565b61115c83838360405180602001604052806000815250612847565b611c5c613812565b611c6633826135d5565b611cb25760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665646044820152606401610f7e565b6000611cbd82611e89565b9050611cc882613d5f565b611cd28183613df4565b50610f9060018055565b6060611ce66137b8565b81516001600160401b03811115611cff57611cff61514f565b604051908082528060200260200182016040528015611d28578160200160208202803683370190505b50905060005b8251811015611dd8576000611d5c33858481518110611d4f57611d4f615923565b60200260200101516139c9565b905080838381518110611d7157611d71615923565b602002602001018181525050611d8681611f2a565b6000918252601b60209081526040928390208251815590820151600180830191909155928201516002820155606082015160038201556080820151600482015560a09091015160059091015501611d2e565b50919050565b611de9600b3361310a565b611e055760405162461bcd60e51b8152600401610f7e90615979565b82518114611e255760405162461bcd60e51b8152600401610f7e90615a3e565b60005b83518110156118b057611e77848281518110611e4657611e46615923565b6020026020010151848484818110611e6057611e60615923565b9050602002810190611e7291906159f8565b613f09565b80611e81816159b0565b915050611e28565b6000818152600660205260408120546001600160a01b031680610f2e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610f7e565b601e81815481106112de57600080fd5b611f04600b3361310a565b611f205760405162461bcd60e51b8152600401610f7e90615979565b6117a38282613f3f565b611f636040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b601c805460009190611f759085615a7b565b81548110611f8557611f85615923565b6000918252602082200154601d805491935090611fa29086615a7b565b81548110611fb257611fb2615923565b6000918252602082200154601e805491935090611fcf9087615a7b565b81548110611fdf57611fdf615923565b906000526020600020015490506040518060c0016040528042815260200142815260200160008152602001838152602001828152602001848152509350505050919050565b61202c6137b8565b80516117a390601d906020840190614d4a565b6120476137b8565b61205260028261310a565b610f905760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a36117a3600282613f59565b60006001600160a01b0382166121015760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610f7e565b506001600160a01b031660009081526007602052604090205490565b6121256137b8565b61212f6000613f6e565b565b600061213b613812565b3361214e6000546001600160a01b031690565b6001600160a01b03161480612169575061216960023361310a565b6121855760405162461bcd60e51b8152600401610f7e90615833565b6115a882604051806020016040528060008152506139c9565b60006121a8613812565b336121bb6000546001600160a01b031690565b6001600160a01b031614806121d657506121d660023361310a565b6121f25760405162461bcd60e51b8152600401610f7e90615833565b6122328484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139c992505050565b9050611af260018055565b6060612247613812565b3361225a6000546001600160a01b031690565b6001600160a01b03161480612275575061227560023361310a565b6122915760405162461bcd60e51b8152600401610f7e90615833565b816001600160401b038111156122a9576122a961514f565b6040519080825280602002602001820160405280156122d2578160200160208202803683370190505b50905060005b82811015611ae857612342858585848181106122f6576122f6615923565b905060200281019061230891906159f8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139c992505050565b82828151811061235457612354615923565b602090810291909101015280612369816159b0565b9150506122d8565b61237c600b3361310a565b6123985760405162461bcd60e51b8152600401610f7e90615979565b61115c838383613d22565b60606123af600b613b86565b6001600160401b038111156123c6576123c661514f565b6040519080825280602002602001820160405280156123ef578160200160208202803683370190505b50905060005b6123ff600b613b86565b81101561196057612411600b82613b90565b82828151811061242357612423615923565b6001600160a01b039092166020928302919091019091015280612445816159b0565b9150506123f5565b6124556137b8565b602055565b606060058054610fa290615877565b3361247c6000546001600160a01b031690565b6001600160a01b03161480612497575061249760023361310a565b6124b35760405162461bcd60e51b8152600401610f7e90615833565b6117a38282613fbe565b6117a3338383613ff3565b6124d06137b8565b6001600160a01b039091166000908152601a6020526040902055565b336124ff6000546001600160a01b031690565b6001600160a01b0316148061251a575061251a60023361310a565b6125365760405162461bcd60e51b8152600401610f7e90615833565b825181146125565760405162461bcd60e51b8152600401610f7e90615a3e565b60005b83518110156118b0576125a884828151811061257757612577615923565b602002602001015184848481811061259157612591615923565b90506020028101906125a391906159f8565b6133be565b806125b2816159b0565b915050612559565b6125c5600b3361310a565b6125e15760405162461bcd60e51b8152600401610f7e90615979565b8015806125fa57506125fa33634ce6d51160e11b6140c1565b61266c5760405162461bcd60e51b815260206004820152603f60248201527f457874656e73696f6e206d75737420696d706c656d656e74204945524337323160448201527f43726561746f72457874656e73696f6e417070726f76655472616e73666572006064820152608401610f7e565b3360009081526010602052604090205460ff16151581151514610f905733600081815260106020908152604091829020805460ff191685151590811790915591519182527f072a7592283e2c2d1d56d21517ff6013325e0f55483f4828373ff4d98b0a1a36910160405180910390a250565b60606126e8613812565b336126fb6000546001600160a01b031690565b6001600160a01b03161480612716575061271660023361310a565b6127325760405162461bcd60e51b8152600401610f7e90615833565b8161ffff166001600160401b0381111561274e5761274e61514f565b604051908082528060200260200182016040528015612777578160200160208202803683370190505b50905060005b8261ffff168161ffff1610156127d9576127a684604051806020016040528060008152506139c9565b828261ffff16815181106127bc576127bc615923565b6020908102919091010152806127d181615a8f565b91505061277d565b50610f2e60018055565b6127eb6137b8565b602155565b336128036000546001600160a01b031690565b6001600160a01b0316148061281e575061281e60023361310a565b61283a5760405162461bcd60e51b8152600401610f7e90615833565b61136b8585858585613b9c565b61285133836135d5565b61286d5760405162461bcd60e51b8152600401610f7e906158d6565b6118b0848484846140dd565b6060612884826132fa565b6128a05760405162461bcd60e51b8152600401610f7e906158ab565b6128a982614110565b8054806020026020016040519081016040528092919081815260200182805480156111db57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116128df5750505050509050919050565b606080612914836132fa565b6129305760405162461bcd60e51b8152600401610f7e906158ab565b612939836141b7565b81546040805160208084028201810190925282815291849183018282801561298a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161296c575b50505050509150808054806020026020016040519081016040528092919081815260200182805480156129dc57602002820191906000526020600020905b8154815260200190600101908083116129c8575b5050505050905091509150915091565b60606129f7826132fa565b612a135760405162461bcd60e51b8152600401610f7e906158ab565b610f2e826141d5565b6022546001600160a01b0316612a6c5760405162461bcd60e51b81526020600482015260156024820152741d1bdad95b881859191c995cdcc81b9bdd081cd95d605a1b6044820152606401610f7e565b6000805b8251811015612c4d576000601b6000858481518110612a9157612a91615923565b6020026020010151815260200190815260200160002090508060000154600003612aef5760405162461bcd60e51b815260206004820152600f60248201526e119a5cda081b9bdd081b5a5b9d1959608a1b6044820152606401610f7e565b6000612b13858481518110612b0657612b06615923565b6020026020010151611e89565b9050601f548260010154612b279190615966565b421015612b765760405162461bcd60e51b815260206004820152601c60248201527f46697368206e6f742067656e65726174652072657761726420796574000000006044820152606401610f7e565b601f548260010154612b889190615966565b826002015410612bd35760405162461bcd60e51b815260206004820152601660248201527514995dd85c9908185b1c9958591e4818db185a5b595960521b6044820152606401610f7e565b6001600160a01b0381163314612c1c5760405162461bcd60e51b815260206004820152600e60248201526d2737ba103334b9b41037bbb732b960911b6044820152606401610f7e565b6021548260030154612c2e919061594f565b612c389085615966565b42600290930192909255509150600101612a70565b506022546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401611528565b33612c986000546001600160a01b031690565b6001600160a01b03161480612cb35750612cb360023361310a565b612ccf5760405162461bcd60e51b8152600401610f7e90615833565b610f9081614476565b6060612ce2613812565b612ced600b3361310a565b612d095760405162461bcd60e51b8152600401610f7e90615979565b8161ffff166001600160401b03811115612d2557612d2561514f565b604051908082528060200260200182016040528015612d4e578160200160208202803683370190505b50905060005b8261ffff168161ffff1610156127d957612d7d846040518060200160405280600081525061386b565b828261ffff1681518110612d9357612d93615923565b602090810291909101015280612da881615a8f565b915050612d54565b612db86137b8565b80516117a390601c906020840190614d4a565b600080600a54600014612e305760066001600a54612de99190615ab0565b612df490600261594f565b612dff906001615966565b600a54612e0d600182615ab0565b612e17919061594f565b612e21919061594f565b612e2b9190615ac3565b612e33565b60005b90506000600a546000148015612e495750836001145b612eca576006846001600a54612e5f9190615ab0565b612e699190615966565b612e7490600261594f565b612e7f906001615966565b85600a54612e8d9190615966565b866001600a54612e9d9190615ab0565b612ea79190615966565b612eb1919061594f565b612ebb919061594f565b612ec59190615ac3565b612ecd565b60005b90506000612edb8383615ab0565b90506000613e80612ef4836706f05b59d3b2000061594f565b612efe9190615ac3565b9695505050505050565b612f13600b3361310a565b612f2f5760405162461bcd60e51b8152600401610f7e90615979565b61115c838383613f09565b33612f4d6000546001600160a01b031690565b6001600160a01b03161480612f685750612f6860023361310a565b612f845760405162461bcd60e51b8152600401610f7e90615833565b6117a382826144c7565b612f966137b8565b6001600160a01b038116612ffb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f7e565b610f9081613f6e565b600061300e613812565b613019600b3361310a565b6130355760405162461bcd60e51b8152600401610f7e90615979565b6122328484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061386b92505050565b60006001600160e01b03198216639088c20760e01b1480610f2e5750610f2e826145fc565b60006001600160e01b031982166380ac58cd60e01b1480610f1f57506001600160e01b03198216635b5e139f60e01b1480610f2e5750610f2e825b60006001600160e01b03198216632a9f3abf60e11b1480610f2e57506301ffc9a760e01b6001600160e01b0319831614610f2e565b6001600160a01b03811660009081526001830160205260408120541515611af2565b6001600160a01b0381161580159061314d57506001600160a01b0381163014155b6131995760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f7420626c61636b6c69737420796f757273656c66000000000000006044820152606401610f7e565b6131a4600b8261310a565b156131ec5760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a36131ea600b826139ee565b505b6131f7600d8261310a565b610f905760405133906001600160a01b038316907f05ac7bc5a606cd92a63365f9fda244499b9add0526b22d99937b6bd88181059c90600090a36117a3600d82613f59565b613245816132fa565b610f905760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610f7e565b600081815260086020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132c182611e89565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000908152600660205260409020546001600160a01b0316151590565b6000818152601960205260408120541561333d5750600090815260196020526040902090565b6000828152601160209081526040808320546001600160a01b0316835260179091529020541561338f57506000908152601160209081526040808320546001600160a01b031683526017909152902090565b50506000805260176020527fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b90565b6000831180156133d05750600a548311155b80156133f157506000838152601160205260409020546001600160a01b0316155b61340d5760405162461bcd60e51b8152600401610f7e90615ad7565b60008381526015602052604090206118b0828483615b44565b8281146134455760405162461bcd60e51b8152600401610f7e90615a3e565b6000805b828110156134895783838281811061346357613463615923565b90506020020135826134759190615966565b915080613481816159b0565b915050613449565b5061271081106134d55760405162461bcd60e51b8152602060048201526017602482015276496e76616c696420746f74616c20726f79616c7469657360481b6044820152606401610f7e565b60008681526018602052604090206134ee908686614d91565b506000868152601960205260409020613508908484614de4565b50857fabb46fe0761d77584bde75697647804ffd8113abd4d8d06bc664150395eccdee8686868660405161353f9493929190615c03565b60405180910390a2505050505050565b6000818152601160205260409020546001600160a01b0316806135ad5760405162461bcd60e51b815260206004820152601660248201527527379032bc3a32b739b4b7b7103337b9103a37b5b2b760511b6044820152606401610f7e565b6135b8600d8261310a565b156115b35760405162461bcd60e51b8152600401610f7e906159c9565b6000806135e183611e89565b9050806001600160a01b0316846001600160a01b0316148061362857506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b8061364c5750836001600160a01b031661364184611025565b6001600160a01b0316145b949350505050565b826001600160a01b031661366782611e89565b6001600160a01b03161461368d5760405162461bcd60e51b8152600401610f7e90615c81565b6001600160a01b0382166136ef5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610f7e565b826001600160a01b031661370282611e89565b6001600160a01b0316146137285760405162461bcd60e51b8152600401610f7e90615c81565b600081815260086020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260078552838620805460001901905590871680865283862080546001019055868652600690945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000546001600160a01b0316331461212f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f7e565b6002600154036138645760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f7e565b6002600155565b600a80546000918261387c836159b0565b9190505550600a5490506138908382614692565b600081815260116020526040902080546001600160a01b031916331790556138b883826146fd565b8151156138d95760008181526015602052604090206138d78382615cc6565b505b610f2e565b60008060006138ec85614110565b8054909150600110156139415760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e203120726f79616c7479207265636569766572000000006044820152606401610f7e565b80546000036139575730600092509250506115ef565b8060008154811061396a5761396a615923565b6000918252602090912001546001600160a01b03166127108561398c88613317565b60008154811061399e5761399e615923565b90600052602060002001546139b3919061594f565b6139bd9190615ac3565b92509250509250929050565b600a8054600091826139da836159b0565b9190505550600a5490506138b883826146fd565b6000611af2836001600160a01b038416614717565b6000805260126020527f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b6117a38282615cc6565b6001600160a01b03841615801590613a5857506001600160a01b0384163014155b613a975760405162461bcd60e51b815260206004820152601060248201526f10dc99585d1bdc8e88125b9d985b1a5960821b6044820152606401610f7e565b6001600160a01b0384163b613afc5760405162461bcd60e51b815260206004820152602560248201527f43726561746f723a20457874656e73696f6e206d757374206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610f7e565b613b07600b8561310a565b6118b0576001600160a01b0384166000908152601260205260409020613b2e838583615b44565b506001600160a01b038416600081815260136020526040808220805460ff1916851515179055513392917fd8cb8ba4086944eabf43c5535b7712015e4d4c714b24bf812c040ea5b7a3e42a91a361136b600b85613f59565b6000610f2e825490565b6000611af2838361480a565b828114613bbb5760405162461bcd60e51b8152600401610f7e90615a3e565b6000805b82811015613bff57838382818110613bd957613bd9615923565b9050602002013582613beb9190615966565b915080613bf7816159b0565b915050613bbf565b506127108110613c4b5760405162461bcd60e51b8152602060048201526017602482015276496e76616c696420746f74616c20726f79616c7469657360481b6044820152606401610f7e565b6001600160a01b0386166000908152601660205260409020613c6e908686614d91565b506001600160a01b0386166000908152601760205260409020613c92908484614de4565b506001600160a01b038616613ce3577f2b6849d5976d799a5b0ca4dfd6b40a3d7afe9ea72c091fa01a958594f9a2659b85858585604051613cd69493929190615c03565b60405180910390a1611556565b856001600160a01b03167f535a93d2cb000582c0ebeaa9be4890ec6a287f98eb2df00c54c300612fd78d8f8686868660405161353f9493929190615c03565b336000908152601260205260409020613d3c838583615b44565b50336000908152601360205260409020805460ff19169115159190911790555050565b6000613d6a82611e89565b9050613d7582611e89565b600083815260086020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526007845282852080546000190190558785526006909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000818152601160205260409020546001600160a01b031615613eb357600081815260116020526040902054613e3a906001600160a01b03166311686e4b60e21b6140c1565b15613eb357600081815260116020526040908190205490516311686e4b60e21b81526001600160a01b03848116600483015260248201849052909116906345a1b92c90604401600060405180830381600087803b158015613e9a57600080fd5b505af1158015613eae573d6000803e3d6000fd5b505050505b60008181526015602052604090208054613ecc90615877565b159050613eea576000818152601560205260408120613eea91614e1f565b600090815260116020526040902080546001600160a01b031916905550565b6000838152601160205260409020546001600160a01b0316331461340d5760405162461bcd60e51b8152600401610f7e90615ad7565b33600090815260146020526040902061115c828483615b44565b6000611af2836001600160a01b038416614834565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805260146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c61115c828483615b44565b816001600160a01b0316836001600160a01b0316036140545760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610f7e565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006140cc83614883565b8015611af25750611af283836148b6565b6140e8848484613654565b6140f48484848461493f565b6118b05760405162461bcd60e51b8152600401610f7e90615d85565b600081815260186020526040812054156141365750600090815260186020526040902090565b6000828152601160209081526040808320546001600160a01b0316835260169091529020541561418857506000908152601160209081526040808320546001600160a01b031683526016909152902090565b50506000805260166020527f0263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153dd90565b6000806141c383614110565b6141cc84613317565b91509150915091565b60606000821180156141e95750600a548211155b6142055760405162461bcd60e51b8152600401610f7e90615ad7565b6000828152601160205260409020546001600160a01b0316614228600d8261310a565b156142455760405162461bcd60e51b8152600401610f7e906159c9565b6000838152601560205260409020805461425e90615877565b159050614378576001600160a01b0381166000908152601460205260409020805461428890615877565b1590506142d9576001600160a01b0381166000908152601460209081526040808320868452601583529281902090516142c2939201615e4a565b604051602081830303815290604052915050919050565b600083815260156020526040902080546142f290615877565b80601f016020809104026020016040519081016040528092919081815260200182805461431e90615877565b801561436b5780601f106143405761010080835404028352916020019161436b565b820191906000526020600020905b81548152906001019060200180831161434e57829003601f168201915b5050505050915050919050565b6143898163e9dc637560e01b6140c1565b156144015760405163e9dc637560e01b8152306004820152602481018490526001600160a01b0382169063e9dc637590604401600060405180830381865afa1580156143d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611af29190810190615e5f565b6001600160a01b03811660009081526013602052604090205460ff16614453576001600160a01b038116600090815260126020526040902061444284614a40565b6040516020016142c2929190615ecc565b6001600160a01b038116600090815260126020526040902080546142f290615877565b614481600b8261310a565b15610f905760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a36117a3600b826139ee565b6144d2600b8361310a565b61451e5760405162461bcd60e51b815260206004820152601e60248201527f43726561746f72436f72653a20496e76616c696420657874656e73696f6e00006044820152606401610f7e565b6001600160a01b0381161580614540575061454081631e05385b60e31b6140c1565b61457e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610f7e565b6001600160a01b038281166000908152600f60205260409020548116908216146117a3576001600160a01b038281166000818152600f602052604080822080546001600160a01b031916948616948517905551339392917f6a835c4fcf7e0d398db3762332fdaa1471814ad39f1e2d6d0b3fdabf8efee3e091a45050565b60006001600160e01b031982166328f10a2160e01b148061462157506146218261309a565b8061463c57506001600160e01b03198216635d9dd7eb60e11b145b8061465757506001600160e01b03198216632dde656160e21b145b8061467257506001600160e01b031982166335681b5360e21b145b80610f2e57506001600160e01b0319821663152a902d60e11b1492915050565b336000908152600f60205260409020546001600160a01b0316156117a357336000818152600f602052604090819020549051631e05385b60e31b815260048101929092526001600160a01b03848116602484015260448301849052169063f029c2d890606401611528565b6117a3828260405180602001604052806000815250614ad2565b6000818152600183016020526040812054801561480057600061473b600183615ab0565b855490915060009061474f90600190615ab0565b90508181146147b457600086600001828154811061476f5761476f615923565b906000526020600020015490508087600001848154811061479257614792615923565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806147c5576147c5615ef1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f2e565b6000915050610f2e565b600082600001828154811061482157614821615923565b9060005260206000200154905092915050565b600081815260018301602052604081205461487b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f2e565b506000610f2e565b6000614896826301ffc9a760e01b6148b6565b8015610f2e57506148af826001600160e01b03196148b6565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015614928575060208210155b80156149345750600081115b979650505050505050565b60006001600160a01b0384163b15614a3557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614983903390899088908890600401615f07565b6020604051808303816000875af19250505080156149be575060408051601f3d908101601f191682019092526149bb91810190615f3a565b60015b614a1b573d8080156149ec576040519150601f19603f3d011682016040523d82523d6000602084013e6149f1565b606091505b508051600003614a135760405162461bcd60e51b8152600401610f7e90615d85565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061364c565b506001949350505050565b60606000614a4d83614b05565b60010190506000816001600160401b03811115614a6c57614a6c61514f565b6040519080825280601f01601f191660200182016040528015614a96576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084614aa057509392505050565b614adc8383614bdd565b614ae9600084848461493f565b61115c5760405162461bcd60e51b8152600401610f7e90615d85565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310614b445772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614b70576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614b8e57662386f26fc10000830492506010015b6305f5e1008310614ba6576305f5e100830492506008015b6127108310614bba57612710830492506004015b60648310614bcc576064830492506002015b600a8310610f2e5760010192915050565b6001600160a01b038216614c335760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610f7e565b614c3c816132fa565b15614c895760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610f7e565b614c92816132fa565b15614cdf5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610f7e565b6001600160a01b038216600081815260076020908152604080832080546001019055848352600690915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054828255906000526020600020908101928215614d85579160200282015b82811115614d85578251825591602001919060010190614d6a565b50611960929150614e55565b828054828255906000526020600020908101928215614d85579160200282015b82811115614d855781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614db1565b828054828255906000526020600020908101928215614d85579160200282015b82811115614d85578235825591602001919060010190614e04565b508054614e2b90615877565b6000825580601f10614e3b575050565b601f016020900490600052602060002090810190610f9091905b5b808211156119605760008155600101614e56565b6001600160e01b031981168114610f9057600080fd5b600060208284031215614e9257600080fd5b8135611af281614e6a565b6001600160a01b0381168114610f9057600080fd5b600060208284031215614ec457600080fd5b8135611af281614e9d565b60005b83811015614eea578181015183820152602001614ed2565b50506000910152565b60008151808452614f0b816020860160208601614ecf565b601f01601f19169290920160200192915050565b602081526000611af26020830184614ef3565b600060208284031215614f4457600080fd5b5035919050565b60008060408385031215614f5e57600080fd5b8235614f6981614e9d565b946020939093013593505050565b600081518084526020808501945080840160005b83811015614fa757815187529582019590820190600101614f8b565b509495945050505050565b602081526000611af26020830184614f77565b60008083601f840112614fd757600080fd5b5081356001600160401b03811115614fee57600080fd5b6020830191508360208285010111156115ef57600080fd5b60008060006040848603121561501b57600080fd5b8335925060208401356001600160401b0381111561503857600080fd5b61504486828701614fc5565b9497909650939450505050565b60008083601f84011261506357600080fd5b5081356001600160401b0381111561507a57600080fd5b6020830191508360208260051b85010111156115ef57600080fd5b6000806000806000606086880312156150ad57600080fd5b8535945060208601356001600160401b03808211156150cb57600080fd5b6150d789838a01615051565b909650945060408801359150808211156150f057600080fd5b506150fd88828901615051565b969995985093965092949392505050565b60008060006060848603121561512357600080fd5b833561512e81614e9d565b9250602084013561513e81614e9d565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561518d5761518d61514f565b604052919050565b60006001600160401b038211156151ae576151ae61514f565b5060051b60200190565b600082601f8301126151c957600080fd5b813560206151de6151d983615195565b615165565b82815260059290921b840181019181810190868411156151fd57600080fd5b8286015b848110156152185780358352918301918301615201565b509695505050505050565b60006020828403121561523557600080fd5b81356001600160401b0381111561524b57600080fd5b61364c848285016151b8565b6000806040838503121561526a57600080fd5b50508035926020909101359150565b6000806020838503121561528c57600080fd5b82356001600160401b038111156152a257600080fd5b6152ae85828601614fc5565b90969095509350505050565b6000806000604084860312156152cf57600080fd5b83356152da81614e9d565b925060208401356001600160401b0381111561503857600080fd5b6020808252825182820181905260009190848201906040850190845b818110156153365783516001600160a01b031683529284019291840191600101615311565b50909695505050505050565b6000806000806040858703121561535857600080fd5b84356001600160401b038082111561536f57600080fd5b61537b88838901615051565b9096509450602087013591508082111561539457600080fd5b506153a187828801615051565b95989497509550505050565b6000806000604084860312156153c257600080fd5b83356153cd81614e9d565b925060208401356001600160401b038111156153e857600080fd5b61504486828701615051565b803580151581146115b357600080fd5b6000806000806060858703121561541a57600080fd5b843561542581614e9d565b935060208501356001600160401b0381111561544057600080fd5b61544c87828801614fc5565b909450925061545f9050604086016153f4565b905092959194509250565b60006001600160401b038211156154835761548361514f565b50601f01601f191660200190565b600061549f6151d98461546a565b90508281528383830111156154b357600080fd5b828260208301376000602084830101529392505050565b600060208083850312156154dd57600080fd5b82356001600160401b03808211156154f457600080fd5b818501915085601f83011261550857600080fd5b81356155166151d982615195565b81815260059190911b8301840190848101908883111561553557600080fd5b8585015b83811015615582578035858111156155515760008081fd5b8601603f81018b136155635760008081fd5b6155748b8983013560408401615491565b845250918601918601615539565b5098975050505050505050565b6000806000604084860312156155a457600080fd5b83356001600160401b03808211156155bb57600080fd5b6155c7878388016151b8565b945060208601359150808211156155dd57600080fd5b5061504486828701615051565b6000806000604084860312156155ff57600080fd5b83356001600160401b0381111561561557600080fd5b61562186828701614fc5565b90945092506156349050602085016153f4565b90509250925092565b6000806040838503121561565057600080fd5b823561565b81614e9d565b9150615669602084016153f4565b90509250929050565b60006020828403121561568457600080fd5b611af2826153f4565b600080604083850312156156a057600080fd5b82356156ab81614e9d565b9150602083013561ffff811681146156c257600080fd5b809150509250929050565b6000806000806000606086880312156156e557600080fd5b85356156f081614e9d565b945060208601356001600160401b03808211156150cb57600080fd5b6000806000806080858703121561572257600080fd5b843561572d81614e9d565b9350602085013561573d81614e9d565b92506040850135915060608501356001600160401b0381111561575f57600080fd5b8501601f8101871361577057600080fd5b61577f87823560208401615491565b91505092959194509250565b600081518084526020808501945080840160005b83811015614fa75781516001600160a01b03168752958201959082019060010161579f565b602081526000611af2602083018461578b565b6040815260006157ea604083018561578b565b82810360208401526157fc8185614f77565b95945050505050565b6000806040838503121561581857600080fd5b823561582381614e9d565b915060208301356156c281614e9d565b60208082526024908201527f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f7220616040820152633236b4b760e11b606082015260800190565b600181811c9082168061588b57607f821691505b602082108103611dd857634e487b7160e01b600052602260045260246000fd5b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f2e57610f2e615939565b80820180821115610f2e57610f2e615939565b6020808252601c908201527f4d757374206265207265676973746572656420657874656e73696f6e00000000604082015260600190565b6000600182016159c2576159c2615939565b5060010190565b602080825260159082015274115e1d195b9cda5bdb88189b1858dadb1a5cdd1959605a1b604082015260600190565b6000808335601e19843603018112615a0f57600080fd5b8301803591506001600160401b03821115615a2957600080fd5b6020019150368190038213156115ef57600080fd5b6020808252600d908201526c125b9d985b1a59081a5b9c1d5d609a1b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b600082615a8a57615a8a615a65565b500690565b600061ffff808316818103615aa657615aa6615939565b6001019392505050565b81810381811115610f2e57610f2e615939565b600082615ad257615ad2615a65565b500490565b6020808252600d908201526c24b73b30b634b2103a37b5b2b760991b604082015260600190565b601f82111561115c57600081815260208120601f850160051c81016020861015615b255750805b601f850160051c820191505b8181101561155657828155600101615b31565b6001600160401b03831115615b5b57615b5b61514f565b615b6f83615b698354615877565b83615afe565b6000601f841160018114615ba35760008515615b8b5750838201355b600019600387901b1c1916600186901b17835561136b565b600083815260209020601f19861690835b82811015615bd45786850135825560209485019460019092019101615bb4565b5086821015615bf15760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040808252810184905260008560608301825b87811015615c46578235615c2981614e9d565b6001600160a01b0316825260209283019290910190600101615c16565b5083810360208501528481526001600160fb1b03851115615c6657600080fd5b8460051b915081866020830137016020019695505050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b81516001600160401b03811115615cdf57615cdf61514f565b615cf381615ced8454615877565b84615afe565b602080601f831160018114615d285760008415615d105750858301515b600019600386901b1c1916600185901b178555611556565b600085815260208120601f198616915b82811015615d5757888601518255948401946001909101908401615d38565b5085821015615d755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008154615de481615877565b60018281168015615dfc5760018114615e1157615e40565b60ff1984168752821515830287019450615e40565b8560005260208060002060005b85811015615e375781548a820152908401908201615e1e565b50505082870194505b5050505092915050565b600061364c615e598386615dd7565b84615dd7565b600060208284031215615e7157600080fd5b81516001600160401b03811115615e8757600080fd5b8201601f81018413615e9857600080fd5b8051615ea66151d98261546a565b818152856020838501011115615ebb57600080fd5b6157fc826020830160208601614ecf565b6000615ed88285615dd7565b8351615ee8818360208801614ecf565b01949350505050565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612efe90830184614ef3565b600060208284031215615f4c57600080fd5b8151611af281614e6a56fea2646970667358221220f0e0bf863f1f236d1659c264e49fc24ad20c43d97bb7d563164c4cb0d6eef1e864736f6c6343000814003368747470733a2f2f73747564696f2e6170692e6d616e69666f6c6478797a2e6465762f61737365745f75706c6f616465722f312f7365726965732f323436363832333439382f6d657461646174612f66756c6c2f31", + "deployedBytecode": "0x60806040526004361061045d5760003560e01c80636d73e6691161023f578063ad2d0ddd11610139578063d5a06d4c116100b6578063e985e9c51161007a578063e985e9c514610e46578063f0cdc49914610e8f578063f26b013a14610eaf578063f2fde38b14610ec5578063fe2e1f5814610ee557600080fd5b8063d5a06d4c14610d38578063e00aab4b14610dc6578063e6a0bc4b14610de6578063e757223014610e06578063e92a89f614610e2657600080fd5b8063b9c4d9fb116100fd578063b9c4d9fb14610d0b578063bb3bafd614610d38578063c87b56dd14610d66578063c94c7ff414610d86578063ce8aee9d14610da657600080fd5b8063ad2d0ddd14610c0e578063ae50f69414610c2e578063b0fe87c914610c4e578063b68d6f3614610c6e578063b88d4fde14610ceb57600080fd5b80638da5cb5b116101c75780639d76ea581161018b5780639d76ea5814610b6e578063a22cb46514610b8e578063a4c5fc7a14610bae578063aafb2d4414610bce578063ac0c8cfa14610bee57600080fd5b80638da5cb5b14610ace5780638e9345d214610aec578063953bf8a214610b1957806395d89b4114610b3957806399e0dd7c14610b4e57600080fd5b80637884af441161020e5780637884af4414610a435780637aa15f1614610a6357806382dcc0c814610a8357806383b7db6314610aa35780638c0fb79214610ab857600080fd5b80636d73e669146109ce57806370a08231146109ee578063715018a614610a0e57806372ff03d314610a2357600080fd5b80632d3456701161035b57806342842e0e116102d85780636352211e1161029c5780636352211e1461092e5780636622fa391461094e57806366d1e9d01461096e578063672001541461098e57806368d4c46a146109ae57600080fd5b806342842e0e1461089857806342966c68146108b85780634eb747e6146108d85780635768f271146108ee57806361e5bc6b1461090e57600080fd5b8063350a33291161031f578063350a33291461080357806338e52e78146108235780633a367a67146108435780633e6134b8146108585780633f0f37f61461087857600080fd5b80632d3456701461076157806330176e13146107815780633071a0f9146107a157806331ae450b146107c1578063332dd1ae146107e357600080fd5b806320e4afe2116103e957806326a4e8d2116103ad57806326a4e8d2146106ba578063287ba51a146106da5780632928ca58146106fa5780632a55205a1461071a5780632afba5b61461075957600080fd5b806320e4afe21461061a578063239be3171461063a57806323b872dd1461065a57806324d7806c1461067a57806325c0bdc81461069a57600080fd5b8063095ea7b311610430578063095ea7b3146105135780630ebd4c7f146105335780631549721214610560578063162094c4146105cc57806317b8e1cf146105ec57600080fd5b806301ffc9a71461046257806302e7afb71461049757806306fdde03146104b9578063081812fc146104db575b600080fd5b34801561046e57600080fd5b5061048261047d366004614e80565b610f05565b60405190151581526020015b60405180910390f35b3480156104a357600080fd5b506104b76104b2366004614eb2565b610f34565b005b3480156104c557600080fd5b506104ce610f93565b60405161048e9190614f1f565b3480156104e757600080fd5b506104fb6104f6366004614f32565b611025565b6040516001600160a01b03909116815260200161048e565b34801561051f57600080fd5b506104b761052e366004614f4b565b61104c565b34801561053f57600080fd5b5061055361054e366004614f32565b611161565b60405161048e9190614fb2565b34801561056c57600080fd5b5061058061057b366004614f32565b6111e7565b60405161048e9190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b3480156105d857600080fd5b506104b76105e7366004615006565b611279565b3480156105f857600080fd5b5061060c610607366004614f32565b6112ce565b60405190815260200161048e565b34801561062657600080fd5b506104b7610635366004615095565b6112ef565b34801561064657600080fd5b506104fb610655366004614f32565b611372565b34801561066657600080fd5b506104b761067536600461510e565b6113a2565b34801561068657600080fd5b50610482610695366004614eb2565b6113d3565b3480156106a657600080fd5b5061060c6106b5366004614f32565b61140c565b3480156106c657600080fd5b506104b76106d5366004614eb2565b61141c565b3480156106e657600080fd5b506104b76106f5366004615223565b611446565b34801561070657600080fd5b5061060c610715366004614eb2565b61155e565b34801561072657600080fd5b5061073a610735366004615257565b6115b8565b604080516001600160a01b03909316835260208301919091520161048e565b6104b76115f6565b34801561076d57600080fd5b506104b761077c366004614eb2565b61174a565b34801561078d57600080fd5b506104b761079c366004615279565b6117a7565b3480156107ad57600080fd5b506104b76107bc3660046152ba565b611830565b3480156107cd57600080fd5b506107d66118b6565b60405161048e91906152f5565b3480156107ef57600080fd5b506104b76107fe366004615342565b611964565b34801561080f57600080fd5b506104b761081e366004615223565b6119bc565b34801561082f57600080fd5b5061055361083e3660046153ad565b6119d7565b34801561084f57600080fd5b506104ce611af9565b34801561086457600080fd5b506104b7610873366004615279565b611b87565b34801561088457600080fd5b506104b7610893366004615404565b611bba565b3480156108a457600080fd5b506104b76108b336600461510e565b611c39565b3480156108c457600080fd5b506104b76108d3366004614f32565b611c54565b3480156108e457600080fd5b5061060c601f5481565b3480156108fa57600080fd5b506105536109093660046154ca565b611cdc565b34801561091a57600080fd5b506104b761092936600461558f565b611dde565b34801561093a57600080fd5b506104fb610949366004614f32565b611e89565b34801561095a57600080fd5b5061060c610969366004614f32565b611ee9565b34801561097a57600080fd5b506104b7610989366004615279565b611ef9565b34801561099a57600080fd5b506105806109a9366004614f32565b611f2a565b3480156109ba57600080fd5b506104b76109c9366004615223565b612024565b3480156109da57600080fd5b506104b76109e9366004614eb2565b61203f565b3480156109fa57600080fd5b5061060c610a09366004614eb2565b612097565b348015610a1a57600080fd5b506104b761211d565b348015610a2f57600080fd5b5061060c610a3e366004614eb2565b612131565b348015610a4f57600080fd5b5061060c610a5e3660046152ba565b61219e565b348015610a6f57600080fd5b50610553610a7e3660046153ad565b61223d565b348015610a8f57600080fd5b506104b7610a9e3660046155ea565b612371565b348015610aaf57600080fd5b506107d66123a3565b348015610ac457600080fd5b5061060c60215481565b348015610ada57600080fd5b506000546001600160a01b03166104fb565b348015610af857600080fd5b5061060c610b07366004614eb2565b601a6020526000908152604090205481565b348015610b2557600080fd5b506104b7610b34366004614f32565b61244d565b348015610b4557600080fd5b506104ce61245a565b348015610b5a57600080fd5b506104b7610b69366004615279565b612469565b348015610b7a57600080fd5b506022546104fb906001600160a01b031681565b348015610b9a57600080fd5b506104b7610ba936600461563d565b6124bd565b348015610bba57600080fd5b506104b7610bc9366004614f4b565b6124c8565b348015610bda57600080fd5b506104b7610be936600461558f565b6124ec565b348015610bfa57600080fd5b506104b7610c09366004615672565b6125ba565b348015610c1a57600080fd5b50610553610c2936600461568d565b6126de565b348015610c3a57600080fd5b506104b7610c49366004614f32565b6127e3565b348015610c5a57600080fd5b506104b7610c693660046156cd565b6127f0565b348015610c7a57600080fd5b50610cbe610c89366004614f32565b601b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161048e565b348015610cf757600080fd5b506104b7610d0636600461570c565b612847565b348015610d1757600080fd5b50610d2b610d26366004614f32565b612879565b60405161048e91906157c4565b348015610d4457600080fd5b50610d58610d53366004614f32565b612908565b60405161048e9291906157d7565b348015610d7257600080fd5b506104ce610d81366004614f32565b6129ec565b348015610d9257600080fd5b506104b7610da1366004615223565b612a1c565b348015610db257600080fd5b506104b7610dc1366004614eb2565b612c85565b348015610dd257600080fd5b50610553610de136600461568d565b612cd8565b348015610df257600080fd5b506104b7610e01366004615223565b612db0565b348015610e1257600080fd5b5061060c610e21366004614f32565b612dcb565b348015610e3257600080fd5b506104b7610e41366004615006565b612f08565b348015610e5257600080fd5b50610482610e61366004615805565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b348015610e9b57600080fd5b506104b7610eaa366004615805565b612f3a565b348015610ebb57600080fd5b5061060c60205481565b348015610ed157600080fd5b506104b7610ee0366004614eb2565b612f8e565b348015610ef157600080fd5b5061060c610f003660046152ba565b613004565b6000610f1082613075565b80610f1f5750610f1f8261309a565b80610f2e5750610f2e826130d5565b92915050565b33610f476000546001600160a01b031690565b6001600160a01b03161480610f625750610f6260023361310a565b610f875760405162461bcd60e51b8152600401610f7e90615833565b60405180910390fd5b610f908161312c565b50565b606060048054610fa290615877565b80601f0160208091040260200160405190810160405280929190818152602001828054610fce90615877565b801561101b5780601f10610ff05761010080835404028352916020019161101b565b820191906000526020600020905b815481529060010190602001808311610ffe57829003601f168201915b5050505050905090565b60006110308261323c565b506000908152600860205260409020546001600160a01b031690565b600061105782611e89565b9050806001600160a01b0316836001600160a01b0316036110c45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610f7e565b336001600160a01b03821614806110e057506110e08133610e61565b6111525760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610f7e565b61115c838361328c565b505050565b606061116c826132fa565b6111885760405162461bcd60e51b8152600401610f7e906158ab565b61119182613317565b8054806020026020016040519081016040528092919081815260200182805480156111db57602002820191906000526020600020905b8154815260200190600101908083116111c7575b50505050509050919050565b6112206040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506000908152601b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b3361128c6000546001600160a01b031690565b6001600160a01b031614806112a757506112a760023361310a565b6112c35760405162461bcd60e51b8152600401610f7e90615833565b61115c8383836133be565b601c81815481106112de57600080fd5b600091825260209091200154905081565b336113026000546001600160a01b031690565b6001600160a01b0316148061131d575061131d60023361310a565b6113395760405162461bcd60e51b8152600401610f7e90615833565b611342856132fa565b61135e5760405162461bcd60e51b8152600401610f7e906158ab565b61136b8585858585613426565b5050505050565b600061137d826132fa565b6113995760405162461bcd60e51b8152600401610f7e906158ab565b610f2e8261354f565b6113ac33826135d5565b6113c85760405162461bcd60e51b8152600401610f7e906158d6565b61115c838383613654565b6000816001600160a01b03166113f16000546001600160a01b031690565b6001600160a01b03161480610f2e5750610f2e60028361310a565b601d81815481106112de57600080fd5b6114246137b8565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b82518110156114f4576000601b600085848151811061146b5761146b615923565b60200260200101518152602001908152602001600020905080600001546000036114c95760405162461bcd60e51b815260206004820152600f60248201526e119a5cda081b9bdd081b5a5b9d1959608a1b6044820152606401610f7e565b60205481600401546114db919061594f565b6114e59084615966565b4260019283015592500161144a565b50602254604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac906044015b600060405180830381600087803b15801561154257600080fd5b505af1158015611556573d6000803e3d6000fd5b505050505050565b6000611568613812565b611573600b3361310a565b61158f5760405162461bcd60e51b8152600401610f7e90615979565b6115a8826040518060200160405280600081525061386b565b90506115b360018055565b919050565b6000806115c4846132fa565b6115e05760405162461bcd60e51b8152600401610f7e906158ab565b6115ea84846138de565b915091505b9250929050565b60006116026001612dcb565b9050803410156116495760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610f7e565b60006116df336023805461165c90615877565b80601f016020809104026020016040519081016040528092919081815260200182805461168890615877565b80156116d55780601f106116aa576101008083540402835291602001916116d5565b820191906000526020600020905b8154815290600101906020018083116116b857829003601f168201915b50505050506139c9565b90506116ea81611f2a565b6000828152601b60209081526040808320845181559184015160018301558301516002820155606083015160038201556080830151600482015560a090920151600590920191909155600a805491611741836159b0565b91905055505050565b6117526137b8565b61175d60028261310a565b15610f905760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a36117a36002826139ee565b5050565b336117ba6000546001600160a01b031690565b6001600160a01b031614806117d557506117d560023361310a565b6117f15760405162461bcd60e51b8152600401610f7e90615833565b6117a382828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613a0392505050565b336118436000546001600160a01b031690565b6001600160a01b0316148061185e575061185e60023361310a565b61187a5760405162461bcd60e51b8152600401610f7e90615833565b82611886600d8261310a565b156118a35760405162461bcd60e51b8152600401610f7e906159c9565b6118b08484846000613a37565b50505050565b60606118c26002613b86565b6001600160401b038111156118d9576118d961514f565b604051908082528060200260200182016040528015611902578160200160208202803683370190505b50905060005b6119126002613b86565b81101561196057611924600282613b90565b82828151811061193657611936615923565b6001600160a01b039092166020928302919091019091015280611958816159b0565b915050611908565b5090565b336119776000546001600160a01b031690565b6001600160a01b03161480611992575061199260023361310a565b6119ae5760405162461bcd60e51b8152600401610f7e90615833565b6118b0600085858585613b9c565b6119c46137b8565b80516117a390601e906020840190614d4a565b60606119e1613812565b6119ec600b3361310a565b611a085760405162461bcd60e51b8152600401610f7e90615979565b816001600160401b03811115611a2057611a2061514f565b604051908082528060200260200182016040528015611a49578160200160208202803683370190505b50905060005b82811015611ae857611ab985858584818110611a6d57611a6d615923565b9050602002810190611a7f91906159f8565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061386b92505050565b828281518110611acb57611acb615923565b602090810291909101015280611ae0816159b0565b915050611a4f565b50611af260018055565b9392505050565b60238054611b0690615877565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3290615877565b8015611b7f5780601f10611b5457610100808354040283529160200191611b7f565b820191906000526020600020905b815481529060010190602001808311611b6257829003601f168201915b505050505081565b611b92600b3361310a565b611bae5760405162461bcd60e51b8152600401610f7e90615979565b6117a382826000613d22565b33611bcd6000546001600160a01b031690565b6001600160a01b03161480611be85750611be860023361310a565b611c045760405162461bcd60e51b8152600401610f7e90615833565b83611c10600d8261310a565b15611c2d5760405162461bcd60e51b8152600401610f7e906159c9565b61136b85858585613a37565b61115c83838360405180602001604052806000815250612847565b611c5c613812565b611c6633826135d5565b611cb25760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665646044820152606401610f7e565b6000611cbd82611e89565b9050611cc882613d5f565b611cd28183613df4565b50610f9060018055565b6060611ce66137b8565b81516001600160401b03811115611cff57611cff61514f565b604051908082528060200260200182016040528015611d28578160200160208202803683370190505b50905060005b8251811015611dd8576000611d5c33858481518110611d4f57611d4f615923565b60200260200101516139c9565b905080838381518110611d7157611d71615923565b602002602001018181525050611d8681611f2a565b6000918252601b60209081526040928390208251815590820151600180830191909155928201516002820155606082015160038201556080820151600482015560a09091015160059091015501611d2e565b50919050565b611de9600b3361310a565b611e055760405162461bcd60e51b8152600401610f7e90615979565b82518114611e255760405162461bcd60e51b8152600401610f7e90615a3e565b60005b83518110156118b057611e77848281518110611e4657611e46615923565b6020026020010151848484818110611e6057611e60615923565b9050602002810190611e7291906159f8565b613f09565b80611e81816159b0565b915050611e28565b6000818152600660205260408120546001600160a01b031680610f2e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610f7e565b601e81815481106112de57600080fd5b611f04600b3361310a565b611f205760405162461bcd60e51b8152600401610f7e90615979565b6117a38282613f3f565b611f636040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b601c805460009190611f759085615a7b565b81548110611f8557611f85615923565b6000918252602082200154601d805491935090611fa29086615a7b565b81548110611fb257611fb2615923565b6000918252602082200154601e805491935090611fcf9087615a7b565b81548110611fdf57611fdf615923565b906000526020600020015490506040518060c0016040528042815260200142815260200160008152602001838152602001828152602001848152509350505050919050565b61202c6137b8565b80516117a390601d906020840190614d4a565b6120476137b8565b61205260028261310a565b610f905760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a36117a3600282613f59565b60006001600160a01b0382166121015760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610f7e565b506001600160a01b031660009081526007602052604090205490565b6121256137b8565b61212f6000613f6e565b565b600061213b613812565b3361214e6000546001600160a01b031690565b6001600160a01b03161480612169575061216960023361310a565b6121855760405162461bcd60e51b8152600401610f7e90615833565b6115a882604051806020016040528060008152506139c9565b60006121a8613812565b336121bb6000546001600160a01b031690565b6001600160a01b031614806121d657506121d660023361310a565b6121f25760405162461bcd60e51b8152600401610f7e90615833565b6122328484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139c992505050565b9050611af260018055565b6060612247613812565b3361225a6000546001600160a01b031690565b6001600160a01b03161480612275575061227560023361310a565b6122915760405162461bcd60e51b8152600401610f7e90615833565b816001600160401b038111156122a9576122a961514f565b6040519080825280602002602001820160405280156122d2578160200160208202803683370190505b50905060005b82811015611ae857612342858585848181106122f6576122f6615923565b905060200281019061230891906159f8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139c992505050565b82828151811061235457612354615923565b602090810291909101015280612369816159b0565b9150506122d8565b61237c600b3361310a565b6123985760405162461bcd60e51b8152600401610f7e90615979565b61115c838383613d22565b60606123af600b613b86565b6001600160401b038111156123c6576123c661514f565b6040519080825280602002602001820160405280156123ef578160200160208202803683370190505b50905060005b6123ff600b613b86565b81101561196057612411600b82613b90565b82828151811061242357612423615923565b6001600160a01b039092166020928302919091019091015280612445816159b0565b9150506123f5565b6124556137b8565b602055565b606060058054610fa290615877565b3361247c6000546001600160a01b031690565b6001600160a01b03161480612497575061249760023361310a565b6124b35760405162461bcd60e51b8152600401610f7e90615833565b6117a38282613fbe565b6117a3338383613ff3565b6124d06137b8565b6001600160a01b039091166000908152601a6020526040902055565b336124ff6000546001600160a01b031690565b6001600160a01b0316148061251a575061251a60023361310a565b6125365760405162461bcd60e51b8152600401610f7e90615833565b825181146125565760405162461bcd60e51b8152600401610f7e90615a3e565b60005b83518110156118b0576125a884828151811061257757612577615923565b602002602001015184848481811061259157612591615923565b90506020028101906125a391906159f8565b6133be565b806125b2816159b0565b915050612559565b6125c5600b3361310a565b6125e15760405162461bcd60e51b8152600401610f7e90615979565b8015806125fa57506125fa33634ce6d51160e11b6140c1565b61266c5760405162461bcd60e51b815260206004820152603f60248201527f457874656e73696f6e206d75737420696d706c656d656e74204945524337323160448201527f43726561746f72457874656e73696f6e417070726f76655472616e73666572006064820152608401610f7e565b3360009081526010602052604090205460ff16151581151514610f905733600081815260106020908152604091829020805460ff191685151590811790915591519182527f072a7592283e2c2d1d56d21517ff6013325e0f55483f4828373ff4d98b0a1a36910160405180910390a250565b60606126e8613812565b336126fb6000546001600160a01b031690565b6001600160a01b03161480612716575061271660023361310a565b6127325760405162461bcd60e51b8152600401610f7e90615833565b8161ffff166001600160401b0381111561274e5761274e61514f565b604051908082528060200260200182016040528015612777578160200160208202803683370190505b50905060005b8261ffff168161ffff1610156127d9576127a684604051806020016040528060008152506139c9565b828261ffff16815181106127bc576127bc615923565b6020908102919091010152806127d181615a8f565b91505061277d565b50610f2e60018055565b6127eb6137b8565b602155565b336128036000546001600160a01b031690565b6001600160a01b0316148061281e575061281e60023361310a565b61283a5760405162461bcd60e51b8152600401610f7e90615833565b61136b8585858585613b9c565b61285133836135d5565b61286d5760405162461bcd60e51b8152600401610f7e906158d6565b6118b0848484846140dd565b6060612884826132fa565b6128a05760405162461bcd60e51b8152600401610f7e906158ab565b6128a982614110565b8054806020026020016040519081016040528092919081815260200182805480156111db57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116128df5750505050509050919050565b606080612914836132fa565b6129305760405162461bcd60e51b8152600401610f7e906158ab565b612939836141b7565b81546040805160208084028201810190925282815291849183018282801561298a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161296c575b50505050509150808054806020026020016040519081016040528092919081815260200182805480156129dc57602002820191906000526020600020905b8154815260200190600101908083116129c8575b5050505050905091509150915091565b60606129f7826132fa565b612a135760405162461bcd60e51b8152600401610f7e906158ab565b610f2e826141d5565b6022546001600160a01b0316612a6c5760405162461bcd60e51b81526020600482015260156024820152741d1bdad95b881859191c995cdcc81b9bdd081cd95d605a1b6044820152606401610f7e565b6000805b8251811015612c4d576000601b6000858481518110612a9157612a91615923565b6020026020010151815260200190815260200160002090508060000154600003612aef5760405162461bcd60e51b815260206004820152600f60248201526e119a5cda081b9bdd081b5a5b9d1959608a1b6044820152606401610f7e565b6000612b13858481518110612b0657612b06615923565b6020026020010151611e89565b9050601f548260010154612b279190615966565b421015612b765760405162461bcd60e51b815260206004820152601c60248201527f46697368206e6f742067656e65726174652072657761726420796574000000006044820152606401610f7e565b601f548260010154612b889190615966565b826002015410612bd35760405162461bcd60e51b815260206004820152601660248201527514995dd85c9908185b1c9958591e4818db185a5b595960521b6044820152606401610f7e565b6001600160a01b0381163314612c1c5760405162461bcd60e51b815260206004820152600e60248201526d2737ba103334b9b41037bbb732b960911b6044820152606401610f7e565b6021548260030154612c2e919061594f565b612c389085615966565b42600290930192909255509150600101612a70565b506022546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401611528565b33612c986000546001600160a01b031690565b6001600160a01b03161480612cb35750612cb360023361310a565b612ccf5760405162461bcd60e51b8152600401610f7e90615833565b610f9081614476565b6060612ce2613812565b612ced600b3361310a565b612d095760405162461bcd60e51b8152600401610f7e90615979565b8161ffff166001600160401b03811115612d2557612d2561514f565b604051908082528060200260200182016040528015612d4e578160200160208202803683370190505b50905060005b8261ffff168161ffff1610156127d957612d7d846040518060200160405280600081525061386b565b828261ffff1681518110612d9357612d93615923565b602090810291909101015280612da881615a8f565b915050612d54565b612db86137b8565b80516117a390601c906020840190614d4a565b600080600a54600014612e305760066001600a54612de99190615ab0565b612df490600261594f565b612dff906001615966565b600a54612e0d600182615ab0565b612e17919061594f565b612e21919061594f565b612e2b9190615ac3565b612e33565b60005b90506000600a546000148015612e495750836001145b612eca576006846001600a54612e5f9190615ab0565b612e699190615966565b612e7490600261594f565b612e7f906001615966565b85600a54612e8d9190615966565b866001600a54612e9d9190615ab0565b612ea79190615966565b612eb1919061594f565b612ebb919061594f565b612ec59190615ac3565b612ecd565b60005b90506000612edb8383615ab0565b90506000613e80612ef4836706f05b59d3b2000061594f565b612efe9190615ac3565b9695505050505050565b612f13600b3361310a565b612f2f5760405162461bcd60e51b8152600401610f7e90615979565b61115c838383613f09565b33612f4d6000546001600160a01b031690565b6001600160a01b03161480612f685750612f6860023361310a565b612f845760405162461bcd60e51b8152600401610f7e90615833565b6117a382826144c7565b612f966137b8565b6001600160a01b038116612ffb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f7e565b610f9081613f6e565b600061300e613812565b613019600b3361310a565b6130355760405162461bcd60e51b8152600401610f7e90615979565b6122328484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061386b92505050565b60006001600160e01b03198216639088c20760e01b1480610f2e5750610f2e826145fc565b60006001600160e01b031982166380ac58cd60e01b1480610f1f57506001600160e01b03198216635b5e139f60e01b1480610f2e5750610f2e825b60006001600160e01b03198216632a9f3abf60e11b1480610f2e57506301ffc9a760e01b6001600160e01b0319831614610f2e565b6001600160a01b03811660009081526001830160205260408120541515611af2565b6001600160a01b0381161580159061314d57506001600160a01b0381163014155b6131995760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f7420626c61636b6c69737420796f757273656c66000000000000006044820152606401610f7e565b6131a4600b8261310a565b156131ec5760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a36131ea600b826139ee565b505b6131f7600d8261310a565b610f905760405133906001600160a01b038316907f05ac7bc5a606cd92a63365f9fda244499b9add0526b22d99937b6bd88181059c90600090a36117a3600d82613f59565b613245816132fa565b610f905760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610f7e565b600081815260086020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132c182611e89565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000908152600660205260409020546001600160a01b0316151590565b6000818152601960205260408120541561333d5750600090815260196020526040902090565b6000828152601160209081526040808320546001600160a01b0316835260179091529020541561338f57506000908152601160209081526040808320546001600160a01b031683526017909152902090565b50506000805260176020527fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b90565b6000831180156133d05750600a548311155b80156133f157506000838152601160205260409020546001600160a01b0316155b61340d5760405162461bcd60e51b8152600401610f7e90615ad7565b60008381526015602052604090206118b0828483615b44565b8281146134455760405162461bcd60e51b8152600401610f7e90615a3e565b6000805b828110156134895783838281811061346357613463615923565b90506020020135826134759190615966565b915080613481816159b0565b915050613449565b5061271081106134d55760405162461bcd60e51b8152602060048201526017602482015276496e76616c696420746f74616c20726f79616c7469657360481b6044820152606401610f7e565b60008681526018602052604090206134ee908686614d91565b506000868152601960205260409020613508908484614de4565b50857fabb46fe0761d77584bde75697647804ffd8113abd4d8d06bc664150395eccdee8686868660405161353f9493929190615c03565b60405180910390a2505050505050565b6000818152601160205260409020546001600160a01b0316806135ad5760405162461bcd60e51b815260206004820152601660248201527527379032bc3a32b739b4b7b7103337b9103a37b5b2b760511b6044820152606401610f7e565b6135b8600d8261310a565b156115b35760405162461bcd60e51b8152600401610f7e906159c9565b6000806135e183611e89565b9050806001600160a01b0316846001600160a01b0316148061362857506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b8061364c5750836001600160a01b031661364184611025565b6001600160a01b0316145b949350505050565b826001600160a01b031661366782611e89565b6001600160a01b03161461368d5760405162461bcd60e51b8152600401610f7e90615c81565b6001600160a01b0382166136ef5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610f7e565b826001600160a01b031661370282611e89565b6001600160a01b0316146137285760405162461bcd60e51b8152600401610f7e90615c81565b600081815260086020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260078552838620805460001901905590871680865283862080546001019055868652600690945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000546001600160a01b0316331461212f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f7e565b6002600154036138645760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f7e565b6002600155565b600a80546000918261387c836159b0565b9190505550600a5490506138908382614692565b600081815260116020526040902080546001600160a01b031916331790556138b883826146fd565b8151156138d95760008181526015602052604090206138d78382615cc6565b505b610f2e565b60008060006138ec85614110565b8054909150600110156139415760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e203120726f79616c7479207265636569766572000000006044820152606401610f7e565b80546000036139575730600092509250506115ef565b8060008154811061396a5761396a615923565b6000918252602090912001546001600160a01b03166127108561398c88613317565b60008154811061399e5761399e615923565b90600052602060002001546139b3919061594f565b6139bd9190615ac3565b92509250509250929050565b600a8054600091826139da836159b0565b9190505550600a5490506138b883826146fd565b6000611af2836001600160a01b038416614717565b6000805260126020527f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b6117a38282615cc6565b6001600160a01b03841615801590613a5857506001600160a01b0384163014155b613a975760405162461bcd60e51b815260206004820152601060248201526f10dc99585d1bdc8e88125b9d985b1a5960821b6044820152606401610f7e565b6001600160a01b0384163b613afc5760405162461bcd60e51b815260206004820152602560248201527f43726561746f723a20457874656e73696f6e206d757374206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610f7e565b613b07600b8561310a565b6118b0576001600160a01b0384166000908152601260205260409020613b2e838583615b44565b506001600160a01b038416600081815260136020526040808220805460ff1916851515179055513392917fd8cb8ba4086944eabf43c5535b7712015e4d4c714b24bf812c040ea5b7a3e42a91a361136b600b85613f59565b6000610f2e825490565b6000611af2838361480a565b828114613bbb5760405162461bcd60e51b8152600401610f7e90615a3e565b6000805b82811015613bff57838382818110613bd957613bd9615923565b9050602002013582613beb9190615966565b915080613bf7816159b0565b915050613bbf565b506127108110613c4b5760405162461bcd60e51b8152602060048201526017602482015276496e76616c696420746f74616c20726f79616c7469657360481b6044820152606401610f7e565b6001600160a01b0386166000908152601660205260409020613c6e908686614d91565b506001600160a01b0386166000908152601760205260409020613c92908484614de4565b506001600160a01b038616613ce3577f2b6849d5976d799a5b0ca4dfd6b40a3d7afe9ea72c091fa01a958594f9a2659b85858585604051613cd69493929190615c03565b60405180910390a1611556565b856001600160a01b03167f535a93d2cb000582c0ebeaa9be4890ec6a287f98eb2df00c54c300612fd78d8f8686868660405161353f9493929190615c03565b336000908152601260205260409020613d3c838583615b44565b50336000908152601360205260409020805460ff19169115159190911790555050565b6000613d6a82611e89565b9050613d7582611e89565b600083815260086020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526007845282852080546000190190558785526006909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000818152601160205260409020546001600160a01b031615613eb357600081815260116020526040902054613e3a906001600160a01b03166311686e4b60e21b6140c1565b15613eb357600081815260116020526040908190205490516311686e4b60e21b81526001600160a01b03848116600483015260248201849052909116906345a1b92c90604401600060405180830381600087803b158015613e9a57600080fd5b505af1158015613eae573d6000803e3d6000fd5b505050505b60008181526015602052604090208054613ecc90615877565b159050613eea576000818152601560205260408120613eea91614e1f565b600090815260116020526040902080546001600160a01b031916905550565b6000838152601160205260409020546001600160a01b0316331461340d5760405162461bcd60e51b8152600401610f7e90615ad7565b33600090815260146020526040902061115c828483615b44565b6000611af2836001600160a01b038416614834565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805260146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c61115c828483615b44565b816001600160a01b0316836001600160a01b0316036140545760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610f7e565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006140cc83614883565b8015611af25750611af283836148b6565b6140e8848484613654565b6140f48484848461493f565b6118b05760405162461bcd60e51b8152600401610f7e90615d85565b600081815260186020526040812054156141365750600090815260186020526040902090565b6000828152601160209081526040808320546001600160a01b0316835260169091529020541561418857506000908152601160209081526040808320546001600160a01b031683526016909152902090565b50506000805260166020527f0263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153dd90565b6000806141c383614110565b6141cc84613317565b91509150915091565b60606000821180156141e95750600a548211155b6142055760405162461bcd60e51b8152600401610f7e90615ad7565b6000828152601160205260409020546001600160a01b0316614228600d8261310a565b156142455760405162461bcd60e51b8152600401610f7e906159c9565b6000838152601560205260409020805461425e90615877565b159050614378576001600160a01b0381166000908152601460205260409020805461428890615877565b1590506142d9576001600160a01b0381166000908152601460209081526040808320868452601583529281902090516142c2939201615e4a565b604051602081830303815290604052915050919050565b600083815260156020526040902080546142f290615877565b80601f016020809104026020016040519081016040528092919081815260200182805461431e90615877565b801561436b5780601f106143405761010080835404028352916020019161436b565b820191906000526020600020905b81548152906001019060200180831161434e57829003601f168201915b5050505050915050919050565b6143898163e9dc637560e01b6140c1565b156144015760405163e9dc637560e01b8152306004820152602481018490526001600160a01b0382169063e9dc637590604401600060405180830381865afa1580156143d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611af29190810190615e5f565b6001600160a01b03811660009081526013602052604090205460ff16614453576001600160a01b038116600090815260126020526040902061444284614a40565b6040516020016142c2929190615ecc565b6001600160a01b038116600090815260126020526040902080546142f290615877565b614481600b8261310a565b15610f905760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a36117a3600b826139ee565b6144d2600b8361310a565b61451e5760405162461bcd60e51b815260206004820152601e60248201527f43726561746f72436f72653a20496e76616c696420657874656e73696f6e00006044820152606401610f7e565b6001600160a01b0381161580614540575061454081631e05385b60e31b6140c1565b61457e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610f7e565b6001600160a01b038281166000908152600f60205260409020548116908216146117a3576001600160a01b038281166000818152600f602052604080822080546001600160a01b031916948616948517905551339392917f6a835c4fcf7e0d398db3762332fdaa1471814ad39f1e2d6d0b3fdabf8efee3e091a45050565b60006001600160e01b031982166328f10a2160e01b148061462157506146218261309a565b8061463c57506001600160e01b03198216635d9dd7eb60e11b145b8061465757506001600160e01b03198216632dde656160e21b145b8061467257506001600160e01b031982166335681b5360e21b145b80610f2e57506001600160e01b0319821663152a902d60e11b1492915050565b336000908152600f60205260409020546001600160a01b0316156117a357336000818152600f602052604090819020549051631e05385b60e31b815260048101929092526001600160a01b03848116602484015260448301849052169063f029c2d890606401611528565b6117a3828260405180602001604052806000815250614ad2565b6000818152600183016020526040812054801561480057600061473b600183615ab0565b855490915060009061474f90600190615ab0565b90508181146147b457600086600001828154811061476f5761476f615923565b906000526020600020015490508087600001848154811061479257614792615923565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806147c5576147c5615ef1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f2e565b6000915050610f2e565b600082600001828154811061482157614821615923565b9060005260206000200154905092915050565b600081815260018301602052604081205461487b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f2e565b506000610f2e565b6000614896826301ffc9a760e01b6148b6565b8015610f2e57506148af826001600160e01b03196148b6565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015614928575060208210155b80156149345750600081115b979650505050505050565b60006001600160a01b0384163b15614a3557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614983903390899088908890600401615f07565b6020604051808303816000875af19250505080156149be575060408051601f3d908101601f191682019092526149bb91810190615f3a565b60015b614a1b573d8080156149ec576040519150601f19603f3d011682016040523d82523d6000602084013e6149f1565b606091505b508051600003614a135760405162461bcd60e51b8152600401610f7e90615d85565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061364c565b506001949350505050565b60606000614a4d83614b05565b60010190506000816001600160401b03811115614a6c57614a6c61514f565b6040519080825280601f01601f191660200182016040528015614a96576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084614aa057509392505050565b614adc8383614bdd565b614ae9600084848461493f565b61115c5760405162461bcd60e51b8152600401610f7e90615d85565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310614b445772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614b70576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614b8e57662386f26fc10000830492506010015b6305f5e1008310614ba6576305f5e100830492506008015b6127108310614bba57612710830492506004015b60648310614bcc576064830492506002015b600a8310610f2e5760010192915050565b6001600160a01b038216614c335760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610f7e565b614c3c816132fa565b15614c895760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610f7e565b614c92816132fa565b15614cdf5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610f7e565b6001600160a01b038216600081815260076020908152604080832080546001019055848352600690915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054828255906000526020600020908101928215614d85579160200282015b82811115614d85578251825591602001919060010190614d6a565b50611960929150614e55565b828054828255906000526020600020908101928215614d85579160200282015b82811115614d855781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614db1565b828054828255906000526020600020908101928215614d85579160200282015b82811115614d85578235825591602001919060010190614e04565b508054614e2b90615877565b6000825580601f10614e3b575050565b601f016020900490600052602060002090810190610f9091905b5b808211156119605760008155600101614e56565b6001600160e01b031981168114610f9057600080fd5b600060208284031215614e9257600080fd5b8135611af281614e6a565b6001600160a01b0381168114610f9057600080fd5b600060208284031215614ec457600080fd5b8135611af281614e9d565b60005b83811015614eea578181015183820152602001614ed2565b50506000910152565b60008151808452614f0b816020860160208601614ecf565b601f01601f19169290920160200192915050565b602081526000611af26020830184614ef3565b600060208284031215614f4457600080fd5b5035919050565b60008060408385031215614f5e57600080fd5b8235614f6981614e9d565b946020939093013593505050565b600081518084526020808501945080840160005b83811015614fa757815187529582019590820190600101614f8b565b509495945050505050565b602081526000611af26020830184614f77565b60008083601f840112614fd757600080fd5b5081356001600160401b03811115614fee57600080fd5b6020830191508360208285010111156115ef57600080fd5b60008060006040848603121561501b57600080fd5b8335925060208401356001600160401b0381111561503857600080fd5b61504486828701614fc5565b9497909650939450505050565b60008083601f84011261506357600080fd5b5081356001600160401b0381111561507a57600080fd5b6020830191508360208260051b85010111156115ef57600080fd5b6000806000806000606086880312156150ad57600080fd5b8535945060208601356001600160401b03808211156150cb57600080fd5b6150d789838a01615051565b909650945060408801359150808211156150f057600080fd5b506150fd88828901615051565b969995985093965092949392505050565b60008060006060848603121561512357600080fd5b833561512e81614e9d565b9250602084013561513e81614e9d565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561518d5761518d61514f565b604052919050565b60006001600160401b038211156151ae576151ae61514f565b5060051b60200190565b600082601f8301126151c957600080fd5b813560206151de6151d983615195565b615165565b82815260059290921b840181019181810190868411156151fd57600080fd5b8286015b848110156152185780358352918301918301615201565b509695505050505050565b60006020828403121561523557600080fd5b81356001600160401b0381111561524b57600080fd5b61364c848285016151b8565b6000806040838503121561526a57600080fd5b50508035926020909101359150565b6000806020838503121561528c57600080fd5b82356001600160401b038111156152a257600080fd5b6152ae85828601614fc5565b90969095509350505050565b6000806000604084860312156152cf57600080fd5b83356152da81614e9d565b925060208401356001600160401b0381111561503857600080fd5b6020808252825182820181905260009190848201906040850190845b818110156153365783516001600160a01b031683529284019291840191600101615311565b50909695505050505050565b6000806000806040858703121561535857600080fd5b84356001600160401b038082111561536f57600080fd5b61537b88838901615051565b9096509450602087013591508082111561539457600080fd5b506153a187828801615051565b95989497509550505050565b6000806000604084860312156153c257600080fd5b83356153cd81614e9d565b925060208401356001600160401b038111156153e857600080fd5b61504486828701615051565b803580151581146115b357600080fd5b6000806000806060858703121561541a57600080fd5b843561542581614e9d565b935060208501356001600160401b0381111561544057600080fd5b61544c87828801614fc5565b909450925061545f9050604086016153f4565b905092959194509250565b60006001600160401b038211156154835761548361514f565b50601f01601f191660200190565b600061549f6151d98461546a565b90508281528383830111156154b357600080fd5b828260208301376000602084830101529392505050565b600060208083850312156154dd57600080fd5b82356001600160401b03808211156154f457600080fd5b818501915085601f83011261550857600080fd5b81356155166151d982615195565b81815260059190911b8301840190848101908883111561553557600080fd5b8585015b83811015615582578035858111156155515760008081fd5b8601603f81018b136155635760008081fd5b6155748b8983013560408401615491565b845250918601918601615539565b5098975050505050505050565b6000806000604084860312156155a457600080fd5b83356001600160401b03808211156155bb57600080fd5b6155c7878388016151b8565b945060208601359150808211156155dd57600080fd5b5061504486828701615051565b6000806000604084860312156155ff57600080fd5b83356001600160401b0381111561561557600080fd5b61562186828701614fc5565b90945092506156349050602085016153f4565b90509250925092565b6000806040838503121561565057600080fd5b823561565b81614e9d565b9150615669602084016153f4565b90509250929050565b60006020828403121561568457600080fd5b611af2826153f4565b600080604083850312156156a057600080fd5b82356156ab81614e9d565b9150602083013561ffff811681146156c257600080fd5b809150509250929050565b6000806000806000606086880312156156e557600080fd5b85356156f081614e9d565b945060208601356001600160401b03808211156150cb57600080fd5b6000806000806080858703121561572257600080fd5b843561572d81614e9d565b9350602085013561573d81614e9d565b92506040850135915060608501356001600160401b0381111561575f57600080fd5b8501601f8101871361577057600080fd5b61577f87823560208401615491565b91505092959194509250565b600081518084526020808501945080840160005b83811015614fa75781516001600160a01b03168752958201959082019060010161579f565b602081526000611af2602083018461578b565b6040815260006157ea604083018561578b565b82810360208401526157fc8185614f77565b95945050505050565b6000806040838503121561581857600080fd5b823561582381614e9d565b915060208301356156c281614e9d565b60208082526024908201527f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f7220616040820152633236b4b760e11b606082015260800190565b600181811c9082168061588b57607f821691505b602082108103611dd857634e487b7160e01b600052602260045260246000fd5b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f2e57610f2e615939565b80820180821115610f2e57610f2e615939565b6020808252601c908201527f4d757374206265207265676973746572656420657874656e73696f6e00000000604082015260600190565b6000600182016159c2576159c2615939565b5060010190565b602080825260159082015274115e1d195b9cda5bdb88189b1858dadb1a5cdd1959605a1b604082015260600190565b6000808335601e19843603018112615a0f57600080fd5b8301803591506001600160401b03821115615a2957600080fd5b6020019150368190038213156115ef57600080fd5b6020808252600d908201526c125b9d985b1a59081a5b9c1d5d609a1b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b600082615a8a57615a8a615a65565b500690565b600061ffff808316818103615aa657615aa6615939565b6001019392505050565b81810381811115610f2e57610f2e615939565b600082615ad257615ad2615a65565b500490565b6020808252600d908201526c24b73b30b634b2103a37b5b2b760991b604082015260600190565b601f82111561115c57600081815260208120601f850160051c81016020861015615b255750805b601f850160051c820191505b8181101561155657828155600101615b31565b6001600160401b03831115615b5b57615b5b61514f565b615b6f83615b698354615877565b83615afe565b6000601f841160018114615ba35760008515615b8b5750838201355b600019600387901b1c1916600186901b17835561136b565b600083815260209020601f19861690835b82811015615bd45786850135825560209485019460019092019101615bb4565b5086821015615bf15760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040808252810184905260008560608301825b87811015615c46578235615c2981614e9d565b6001600160a01b0316825260209283019290910190600101615c16565b5083810360208501528481526001600160fb1b03851115615c6657600080fd5b8460051b915081866020830137016020019695505050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b81516001600160401b03811115615cdf57615cdf61514f565b615cf381615ced8454615877565b84615afe565b602080601f831160018114615d285760008415615d105750858301515b600019600386901b1c1916600185901b178555611556565b600085815260208120601f198616915b82811015615d5757888601518255948401946001909101908401615d38565b5085821015615d755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008154615de481615877565b60018281168015615dfc5760018114615e1157615e40565b60ff1984168752821515830287019450615e40565b8560005260208060002060005b85811015615e375781548a820152908401908201615e1e565b50505082870194505b5050505092915050565b600061364c615e598386615dd7565b84615dd7565b600060208284031215615e7157600080fd5b81516001600160401b03811115615e8757600080fd5b8201601f81018413615e9857600080fd5b8051615ea66151d98261546a565b818152856020838501011115615ebb57600080fd5b6157fc826020830160208601614ecf565b6000615ed88285615dd7565b8351615ee8818360208801614ecf565b01949350505050565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612efe90830184614ef3565b600060208284031215615f4c57600080fd5b8151611af281614e6a56fea2646970667358221220f0e0bf863f1f236d1659c264e49fc24ad20c43d97bb7d563164c4cb0d6eef1e864736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/dapp/pages/mintpage/index.tsx b/dapp/pages/mintpage/index.tsx index 1d88e9a..0046a5d 100644 --- a/dapp/pages/mintpage/index.tsx +++ b/dapp/pages/mintpage/index.tsx @@ -23,9 +23,32 @@ const MintPage = () => { functionName: "maxMintAmount", args: ['0x76f838819F33606393E40A8188Cf2B279cB98dF6'], }); - console.log("NFT limit:" + mintLimit); + const uris = [ + 'https://studio.api.manifoldxyz.dev/asset_uploader/1/series/2466823498/metadata/full/1', + 'https://studio.api.manifoldxyz.dev/asset_uploader/1/series/2466823498/metadata/full/2', + 'https://studio.api.manifoldxyz.dev/asset_uploader/1/series/2466823498/metadata/full/3', + ]; + + const { + write: writeMint, + } = useContractWrite({ + address: "0x26076EF77D3b41aC8BDFD5C318bd5157C64AB757", + abi: FishNFTArtifact.abi, + functionName: "mint", + args: [uris], + }); + + const { data: tokenURI} = useContractRead({ + address: "0x55925EdAd7bE61EF7942ae479FA28Edca5C8B158", + abi: FishNFTArtifact.abi, + functionName: 'tokenURI', + args: ['1'], + }); + + console.log("tokenURI:" + tokenURI); + return ( { diff --git a/erc-6551/cache/solidity-files-cache.json b/erc-6551/cache/solidity-files-cache.json index 12d59ba..5b60836 100644 --- a/erc-6551/cache/solidity-files-cache.json +++ b/erc-6551/cache/solidity-files-cache.json @@ -1,8 +1,8 @@ { "_format": "hh-sol-cache-2", "files": { - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/ERC721Creator.sol": { - "lastModificationDate": 1707102443521, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/ERC721Creator.sol": { + "lastModificationDate": 1706772010053, "contentHash": "1215a81f92ca7a34911c52ac8f743b0c", "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/ERC721Creator.sol", "solcConfig": { @@ -41,8 +41,8 @@ "ERC721Creator" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/ERC721CreatorCore.sol": { - "lastModificationDate": 1707102443521, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/ERC721CreatorCore.sol": { + "lastModificationDate": 1706772010053, "contentHash": "d74ad1dd287f2c7877fb691c0256207d", "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/ERC721CreatorCore.sol", "solcConfig": { @@ -84,8 +84,8 @@ "ERC721CreatorCore" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/token/ERC721/ERC721Base.sol": { - "lastModificationDate": 1707102443522, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/token/ERC721/ERC721Base.sol": { + "lastModificationDate": 1706772010057, "contentHash": "e0ffe774cc1b7bb0fc72b88526b433da", "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/token/ERC721/ERC721Base.sol", "solcConfig": { @@ -122,8 +122,8 @@ "ERC721Base" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol": { - "lastModificationDate": 1707186363030, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol": { + "lastModificationDate": 1706772045667, "contentHash": "c166f4d168fedf153b037e223853c7b0", "sourceName": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol", "solcConfig": { @@ -163,10 +163,10 @@ "AdminControl" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionApproveTransfer.sol": { - "lastModificationDate": 1707102443521, - "contentHash": "1940e31faef818525e1947c4900b0d8b", - "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionApproveTransfer.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionBurnable.sol": { + "lastModificationDate": 1706772010053, + "contentHash": "340d946ec27eaee329959d846a63e2f0", + "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionBurnable.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -198,13 +198,13 @@ "^0.8.0" ], "artifacts": [ - "IERC721CreatorExtensionApproveTransfer" + "IERC721CreatorExtensionBurnable" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionBurnable.sol": { - "lastModificationDate": 1707102443521, - "contentHash": "340d946ec27eaee329959d846a63e2f0", - "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionBurnable.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/permissions/ERC721/IERC721CreatorMintPermissions.sol": { + "lastModificationDate": 1706772010054, + "contentHash": "b22cf4718c838bbeb4b1fc6123f15c73", + "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/permissions/ERC721/IERC721CreatorMintPermissions.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -236,11 +236,11 @@ "^0.8.0" ], "artifacts": [ - "IERC721CreatorExtensionBurnable" + "IERC721CreatorMintPermissions" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol": { - "lastModificationDate": 1707102443521, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol": { + "lastModificationDate": 1706772010053, "contentHash": "a2820a26b7e5f61525e08346345683bf", "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol", "solcConfig": { @@ -277,8 +277,8 @@ "IERC721CreatorCore" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol": { - "lastModificationDate": 1707102443521, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol": { + "lastModificationDate": 1706772010053, "contentHash": "fec36206af2c93d363440bd8519a376b", "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol", "solcConfig": { @@ -323,10 +323,10 @@ "CreatorCore" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/permissions/ERC721/IERC721CreatorMintPermissions.sol": { - "lastModificationDate": 1707102443522, - "contentHash": "b22cf4718c838bbeb4b1fc6123f15c73", - "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/permissions/ERC721/IERC721CreatorMintPermissions.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionApproveTransfer.sol": { + "lastModificationDate": 1706772010053, + "contentHash": "1940e31faef818525e1947c4900b0d8b", + "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionApproveTransfer.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -358,11 +358,11 @@ "^0.8.0" ], "artifacts": [ - "IERC721CreatorMintPermissions" + "IERC721CreatorExtensionApproveTransfer" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol": { - "lastModificationDate": 1707186364189, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol": { + "lastModificationDate": 1706772047021, "contentHash": "e029f029abc1fd2d85d54fd69086f076", "sourceName": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", "solcConfig": { @@ -397,8 +397,8 @@ "EnumerableSet" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "lastModificationDate": 1707186364368, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "lastModificationDate": 1706772047273, "contentHash": "03e6768535ac4da0e9756f1d8a4a018a", "sourceName": "@openzeppelin/contracts/utils/introspection/IERC165.sol", "solcConfig": { @@ -433,8 +433,8 @@ "IERC165" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol": { - "lastModificationDate": 1707102443521, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol": { + "lastModificationDate": 1706772010053, "contentHash": "bd3fa56af602aa45daedab0407b744dc", "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol", "solcConfig": { @@ -471,10 +471,10 @@ "ICreatorCore" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol": { - "lastModificationDate": 1707102443521, - "contentHash": "e592e231ad3db00b3633c1231c577ea1", - "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol": { + "lastModificationDate": 1706772010053, + "contentHash": "3e4bd8ed694643a1ebf4efa35f480087", + "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -506,13 +506,13 @@ "^0.8.0" ], "artifacts": [ - "ICreatorExtensionTokenURI" + "ICreatorExtensionRoyalties" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol": { - "lastModificationDate": 1707102443521, - "contentHash": "3e4bd8ed694643a1ebf4efa35f480087", - "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol": { + "lastModificationDate": 1706772010053, + "contentHash": "e592e231ad3db00b3633c1231c577ea1", + "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -544,11 +544,11 @@ "^0.8.0" ], "artifacts": [ - "ICreatorExtensionRoyalties" + "ICreatorExtensionTokenURI" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Strings.sol": { - "lastModificationDate": 1707186364469, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Strings.sol": { + "lastModificationDate": 1706772047482, "contentHash": "48686fc32a22a3754b8e63321857dd2a", "sourceName": "@openzeppelin/contracts/utils/Strings.sol", "solcConfig": { @@ -586,8 +586,8 @@ "Strings" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol": { - "lastModificationDate": 1707186364446, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol": { + "lastModificationDate": 1706772047441, "contentHash": "1535f8c0c68463f8c1b5239f7584e71f", "sourceName": "@openzeppelin/contracts/security/ReentrancyGuard.sol", "solcConfig": { @@ -622,10 +622,10 @@ "ReentrancyGuard" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { - "lastModificationDate": 1707186424035, - "contentHash": "2bd96e8402394a4ae3e1c2f2ab29e7af", - "sourceName": "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { + "lastModificationDate": 1706772047106, + "contentHash": "0e7db055ce108f9da7bb6686a00287c0", + "sourceName": "@openzeppelin/contracts/utils/introspection/ERC165.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -650,18 +650,20 @@ } } }, - "imports": [], + "imports": [ + "./IERC165.sol" + ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "AddressUpgradeable" + "ERC165" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "lastModificationDate": 1707186364210, - "contentHash": "0e7db055ce108f9da7bb6686a00287c0", - "sourceName": "@openzeppelin/contracts/utils/introspection/ERC165.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { + "lastModificationDate": 1707385468671, + "contentHash": "2bd96e8402394a4ae3e1c2f2ab29e7af", + "sourceName": "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -686,18 +688,16 @@ } } }, - "imports": [ - "./IERC165.sol" - ], + "imports": [], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "ERC165" + "AddressUpgradeable" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol": { - "lastModificationDate": 1707186364211, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol": { + "lastModificationDate": 1706772047108, "contentHash": "0a66857c4a2223ad54b814ea56470c97", "sourceName": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol", "solcConfig": { @@ -734,10 +734,10 @@ "ERC165Checker" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": { - "lastModificationDate": 1707186364464, - "contentHash": "9488ebd4daacfee8ad04811600d7d061", - "sourceName": "@openzeppelin/contracts/utils/math/SignedMath.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/math/Math.sol": { + "lastModificationDate": 1706772047413, + "contentHash": "fe63409d8a06818b926cf89e0ea88b1b", + "sourceName": "@openzeppelin/contracts/utils/math/Math.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -767,13 +767,13 @@ "^0.8.0" ], "artifacts": [ - "SignedMath" + "Math" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/math/Math.sol": { - "lastModificationDate": 1707186364429, - "contentHash": "fe63409d8a06818b926cf89e0ea88b1b", - "sourceName": "@openzeppelin/contracts/utils/math/Math.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": { + "lastModificationDate": 1706772047472, + "contentHash": "9488ebd4daacfee8ad04811600d7d061", + "sourceName": "@openzeppelin/contracts/utils/math/SignedMath.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -803,11 +803,11 @@ "^0.8.0" ], "artifacts": [ - "Math" + "SignedMath" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/token/ERC721/ERC721Core.sol": { - "lastModificationDate": 1707102443522, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/token/ERC721/ERC721Core.sol": { + "lastModificationDate": 1706772010058, "contentHash": "8b28ce9572126efaba1f4d960227eb60", "sourceName": "contracts/.deps/npm/@manifoldxyz/creator-core-solidity/contracts/token/ERC721/ERC721Core.sol", "solcConfig": { @@ -849,8 +849,8 @@ "ERC721Core" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Address.sol": { - "lastModificationDate": 1707186364105, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Address.sol": { + "lastModificationDate": 1706772046929, "contentHash": "211ffd288c1588ba8c10eae668ca3c66", "sourceName": "@openzeppelin/contracts/utils/Address.sol", "solcConfig": { @@ -885,8 +885,8 @@ "Address" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol": { - "lastModificationDate": 1707186364394, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol": { + "lastModificationDate": 1706772047339, "contentHash": "48de4c9a3a4ae5ef66a2aa620843413f", "sourceName": "@openzeppelin/contracts/token/ERC721/IERC721.sol", "solcConfig": { @@ -923,8 +923,8 @@ "IERC721" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { - "lastModificationDate": 1707186364399, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "lastModificationDate": 1706772047347, "contentHash": "c22d4395e33763de693fd440c6fd10e1", "sourceName": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol", "solcConfig": { @@ -959,8 +959,8 @@ "IERC721Receiver" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { - "lastModificationDate": 1707186364397, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { + "lastModificationDate": 1706772047344, "contentHash": "efbc0d15b80a74e34dbe8da0f3e879bb", "sourceName": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol", "solcConfig": { @@ -997,8 +997,8 @@ "IERC721Metadata" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "lastModificationDate": 1707186364437, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/access/Ownable.sol": { + "lastModificationDate": 1706772047429, "contentHash": "5a20b2cad87ddb61c7a3a6af21289e28", "sourceName": "@openzeppelin/contracts/access/Ownable.sol", "solcConfig": { @@ -1035,8 +1035,8 @@ "Ownable" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol": { - "lastModificationDate": 1707186363074, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol": { + "lastModificationDate": 1706772045693, "contentHash": "a3957bc444951c4605b06ffc8545fc53", "sourceName": "@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol", "solcConfig": { @@ -1073,8 +1073,8 @@ "IAdminControl" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Context.sol": { - "lastModificationDate": 1707186364131, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Context.sol": { + "lastModificationDate": 1706772046951, "contentHash": "5f2c5c4b6af2dd4551027144797bc8be", "sourceName": "@openzeppelin/contracts/utils/Context.sol", "solcConfig": { @@ -1109,10 +1109,10 @@ "Context" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol": { - "lastModificationDate": 1707186364245, - "contentHash": "95602b04f0b53f1139f4668d123ddeb7", - "sourceName": "@openzeppelin/contracts/token/ERC721/ERC721.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol": { + "lastModificationDate": 1707385468946, + "contentHash": "e592e231ad3db00b3633c1231c577ea1", + "sourceName": "@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1138,25 +1138,19 @@ } }, "imports": [ - "./IERC721.sol", - "./IERC721Receiver.sol", - "./extensions/IERC721Metadata.sol", - "../../utils/Address.sol", - "../../utils/Context.sol", - "../../utils/Strings.sol", - "../../utils/introspection/ERC165.sol" + "@openzeppelin/contracts/utils/introspection/IERC165.sol" ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "ERC721" + "ICreatorExtensionTokenURI" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "lastModificationDate": 1707186364219, - "contentHash": "3ae5166c6827a9cf1a7a462d1632b464", - "sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol": { + "lastModificationDate": 1707385468941, + "contentHash": "0cf09ae7318860b6e4c79ddd6df8e187", + "sourceName": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1182,21 +1176,26 @@ } }, "imports": [ - "./IERC20.sol", - "./extensions/IERC20Metadata.sol", - "../../utils/Context.sol" + "@openzeppelin/contracts/security/ReentrancyGuard.sol", + "@openzeppelin/contracts/utils/Strings.sol", + "@openzeppelin/contracts/utils/introspection/ERC165.sol", + "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol", + "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", + "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol", + "../extensions/ICreatorExtensionTokenURI.sol", + "./ICreatorCore.sol" ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "ERC20" + "CreatorCore" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "lastModificationDate": 1707186364374, - "contentHash": "df36f7051335cd1e748b1b6463b7fdd3", - "sourceName": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol": { + "lastModificationDate": 1707385468946, + "contentHash": "1c5b138e81304ecd912f8f0bbb7b2536", + "sourceName": "@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1221,18 +1220,20 @@ } } }, - "imports": [], + "imports": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol" + ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "IERC20" + "ICreatorCore" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "lastModificationDate": 1707186364376, - "contentHash": "909ab67fc5c25033fe6cd364f8c056f9", - "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol": { + "lastModificationDate": 1707385468946, + "contentHash": "67a8fe35f3d6624b1d2d9af8c89d2d77", + "sourceName": "@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1258,19 +1259,19 @@ } }, "imports": [ - "../IERC20.sol" + "./ICreatorCore.sol" ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "IERC20Metadata" + "IERC721CreatorCore" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/FishToken.sol": { - "lastModificationDate": 1707102443525, - "contentHash": "8a661af29dccd1c212ed1473da10fae0", - "sourceName": "contracts/FishToken.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/creator-core-solidity/contracts/core/ERC721CreatorCore.sol": { + "lastModificationDate": 1707385468944, + "contentHash": "53bc6188b714435d10c400f4910793fc", + "sourceName": "@manifoldxyz/creator-core-solidity/contracts/core/ERC721CreatorCore.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1296,19 +1297,24 @@ } }, "imports": [ - "@openzeppelin/contracts/token/ERC20/ERC20.sol" + "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", + "../extensions/ERC721/IERC721CreatorExtensionApproveTransfer.sol", + "../extensions/ERC721/IERC721CreatorExtensionBurnable.sol", + "../permissions/ERC721/IERC721CreatorMintPermissions.sol", + "./IERC721CreatorCore.sol", + "./CreatorCore.sol" ], "versionPragmas": [ - "^0.8.20" + "^0.8.0" ], "artifacts": [ - "FishToken" + "ERC721CreatorCore" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/CityFishingBowl.sol": { - "lastModificationDate": 1707102443525, - "contentHash": "2799e2adb8d8d556958ef48aac9a4584", - "sourceName": "contracts/CityFishingBowl.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionApproveTransfer.sol": { + "lastModificationDate": 1707385468947, + "contentHash": "0212984391c757e7b3e85fd427b597e6", + "sourceName": "@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionApproveTransfer.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1334,21 +1340,19 @@ } }, "imports": [ - "@openzeppelin/contracts/token/ERC721/ERC721.sol", - "@openzeppelin/contracts/access/Ownable.sol", - "@openzeppelin/contracts/utils/Counters.sol" + "@openzeppelin/contracts/utils/introspection/IERC165.sol" ], "versionPragmas": [ - "^0.8.9" + "^0.8.0" ], "artifacts": [ - "CityFishingBowl" + "IERC721CreatorExtensionApproveTransfer" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Counters.sol": { - "lastModificationDate": 1707186364132, - "contentHash": "74654e3ae5d7f39555055dfe244dab7a", - "sourceName": "@openzeppelin/contracts/utils/Counters.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/creator-core-solidity/contracts/permissions/ERC721/IERC721CreatorMintPermissions.sol": { + "lastModificationDate": 1707385468947, + "contentHash": "b22cf4718c838bbeb4b1fc6123f15c73", + "sourceName": "@manifoldxyz/creator-core-solidity/contracts/permissions/ERC721/IERC721CreatorMintPermissions.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1373,18 +1377,20 @@ } } }, - "imports": [], + "imports": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol" + ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "Counters" + "IERC721CreatorMintPermissions" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol": { - "lastModificationDate": 1707102443522, - "contentHash": "c166f4d168fedf153b037e223853c7b0", - "sourceName": "contracts/.deps/npm/@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionBurnable.sol": { + "lastModificationDate": 1707385468947, + "contentHash": "340d946ec27eaee329959d846a63e2f0", + "sourceName": "@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionBurnable.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1410,22 +1416,19 @@ } }, "imports": [ - "@openzeppelin/contracts/utils/introspection/ERC165.sol", - "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "@openzeppelin/contracts/access/Ownable.sol", - "./IAdminControl.sol" + "@openzeppelin/contracts/utils/introspection/IERC165.sol" ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "AdminControl" + "IERC721CreatorExtensionBurnable" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol": { - "lastModificationDate": 1707102443522, - "contentHash": "a3957bc444951c4605b06ffc8545fc53", - "sourceName": "contracts/.deps/npm/@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol": { + "lastModificationDate": 1706772010058, + "contentHash": "c166f4d168fedf153b037e223853c7b0", + "sourceName": "contracts/.deps/npm/@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1451,19 +1454,22 @@ } }, "imports": [ - "@openzeppelin/contracts/utils/introspection/IERC165.sol" + "@openzeppelin/contracts/utils/introspection/ERC165.sol", + "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", + "@openzeppelin/contracts/access/Ownable.sol", + "./IAdminControl.sol" ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "IAdminControl" + "AdminControl" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "lastModificationDate": 1707186364176, - "contentHash": "d822a8a9468649cab463f29f5decf5cc", - "sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol": { + "lastModificationDate": 1706772010058, + "contentHash": "a3957bc444951c4605b06ffc8545fc53", + "sourceName": "contracts/.deps/npm/@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1489,19 +1495,19 @@ } }, "imports": [ - "../Strings.sol" + "@openzeppelin/contracts/utils/introspection/IERC165.sol" ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "ECDSA" + "IAdminControl" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol": { - "lastModificationDate": 1707186364463, - "contentHash": "53d16b3bec482493405bdc74852eb2cd", - "sourceName": "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol": { + "lastModificationDate": 1706772047163, + "contentHash": "95602b04f0b53f1139f4668d123ddeb7", + "sourceName": "@openzeppelin/contracts/token/ERC721/ERC721.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1527,20 +1533,25 @@ } }, "imports": [ - "./ECDSA.sol", - "../../interfaces/IERC1271.sol" + "./IERC721.sol", + "./IERC721Receiver.sol", + "./extensions/IERC721Metadata.sol", + "../../utils/Address.sol", + "../../utils/Context.sol", + "../../utils/Strings.sol", + "../../utils/introspection/ERC165.sol" ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "SignatureChecker" + "ERC721" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/interfaces/IERC1271.sol": { - "lastModificationDate": 1707186364364, - "contentHash": "8fe867b95c856b204f954a1910e28a1e", - "sourceName": "@openzeppelin/contracts/interfaces/IERC1271.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { + "lastModificationDate": 1706772047122, + "contentHash": "3ae5166c6827a9cf1a7a462d1632b464", + "sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1565,18 +1576,22 @@ } } }, - "imports": [], + "imports": [ + "./IERC20.sol", + "./extensions/IERC20Metadata.sol", + "../../utils/Context.sol" + ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "IERC1271" + "ERC20" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/ExampleERC6551Account.sol": { - "lastModificationDate": 1707185218324, - "contentHash": "28058418e5315e2348b1d8179770df4c", - "sourceName": "contracts/ExampleERC6551Account.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "lastModificationDate": 1706772047282, + "contentHash": "df36f7051335cd1e748b1b6463b7fdd3", + "sourceName": "@openzeppelin/contracts/token/ERC20/IERC20.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1601,25 +1616,18 @@ } } }, - "imports": [ - "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "@openzeppelin/contracts/token/ERC721/IERC721.sol", - "@openzeppelin/contracts/interfaces/IERC1271.sol", - "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol", - "../interfaces/IERC6551Account.sol", - "../interfaces/IERC6551Executable.sol" - ], + "imports": [], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "ExampleERC6551Account" + "IERC20" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/interfaces/IERC6551Executable.sol": { - "lastModificationDate": 1707102443534, - "contentHash": "242d64a3da199b580acabdf4b947e069", - "sourceName": "interfaces/IERC6551Executable.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "lastModificationDate": 1706772047309, + "contentHash": "909ab67fc5c25033fe6cd364f8c056f9", + "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1644,18 +1652,20 @@ } } }, - "imports": [], + "imports": [ + "../IERC20.sol" + ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "IERC6551Executable" + "IERC20Metadata" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/interfaces/IERC6551Account.sol": { - "lastModificationDate": 1707102443534, - "contentHash": "c528cf2c0469cfc45b80be52611c5283", - "sourceName": "interfaces/IERC6551Account.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/FishToken.sol": { + "lastModificationDate": 1707385139838, + "contentHash": "0e99cad5689afb18999406dbc4d4e54e", + "sourceName": "contracts/FishToken.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1680,18 +1690,20 @@ } } }, - "imports": [], + "imports": [ + "@openzeppelin/contracts/token/ERC20/ERC20.sol" + ], "versionPragmas": [ - "^0.8.0" + "^0.8.20" ], "artifacts": [ - "IERC6551Account" + "FishToken" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/EnglishAuction.sol": { - "lastModificationDate": 1707102443525, - "contentHash": "26ae40007ba5389de384cfa88c85a9fa", - "sourceName": "contracts/EnglishAuction.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/FishNFT.sol": { + "lastModificationDate": 1707393290988, + "contentHash": "5c5929877e06b93bef61ea01bf95be5c", + "sourceName": "contracts/FishNFT.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1717,19 +1729,20 @@ } }, "imports": [ - "@openzeppelin/contracts/token/ERC721/ERC721.sol" + "@manifoldxyz/creator-core-solidity/contracts/ERC721Creator.sol", + "./FishToken.sol" ], "versionPragmas": [ - "^0.8.20" + "^0.8.17" ], "artifacts": [ - "EnglishAuction" + "FishNFT" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/access/Ownable.sol": { - "lastModificationDate": 1707102443523, - "contentHash": "d3c790edc9ccf808a17c5a6cd13614fd", - "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/access/Ownable.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@manifoldxyz/creator-core-solidity/contracts/ERC721Creator.sol": { + "lastModificationDate": 1707385877006, + "contentHash": "96ce6645c442b1ce8d1a82cbd8293a90", + "sourceName": "@manifoldxyz/creator-core-solidity/contracts/ERC721Creator.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1755,19 +1768,21 @@ } }, "imports": [ - "../utils/Context.sol" + "@openzeppelin/contracts/token/ERC721/ERC721.sol", + "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol", + "./core/ERC721CreatorCore.sol" ], "versionPragmas": [ - "^0.8.20" + "^0.8.0" ], "artifacts": [ - "Ownable" + "ERC721Creator" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/Context.sol": { - "lastModificationDate": 1707102443524, - "contentHash": "67bfbc07588eb8683b3fd8f6f909563e", - "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/Context.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/CityFishingBowl.sol": { + "lastModificationDate": 1706701952636, + "contentHash": "2799e2adb8d8d556958ef48aac9a4584", + "sourceName": "contracts/CityFishingBowl.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1792,18 +1807,58 @@ } } }, - "imports": [], + "imports": [ + "@openzeppelin/contracts/token/ERC721/ERC721.sol", + "@openzeppelin/contracts/access/Ownable.sol", + "@openzeppelin/contracts/utils/Counters.sol" + ], "versionPragmas": [ - "^0.8.20" + "^0.8.9" ], "artifacts": [ - "Context" + "CityFishingBowl" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/ERC721.sol": { - "lastModificationDate": 1707102443523, - "contentHash": "1e64e2ad597dc5b2dae11346502baad4", - "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/ERC721.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Counters.sol": { + "lastModificationDate": 1706772046952, + "contentHash": "74654e3ae5d7f39555055dfe244dab7a", + "sourceName": "@openzeppelin/contracts/utils/Counters.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Counters" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/ExampleERC6551Account.sol": { + "lastModificationDate": 1706701952636, + "contentHash": "28058418e5315e2348b1d8179770df4c", + "sourceName": "contracts/ExampleERC6551Account.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1829,25 +1884,285 @@ } }, "imports": [ - "./IERC721.sol", - "./IERC721Receiver.sol", - "./extensions/IERC721Metadata.sol", - "../../utils/Context.sol", - "../../utils/Strings.sol", - "../../utils/introspection/ERC165.sol", - "../../interfaces/draft-IERC6093.sol" + "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "@openzeppelin/contracts/token/ERC721/IERC721.sol", + "@openzeppelin/contracts/interfaces/IERC1271.sol", + "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol", + "../interfaces/IERC6551Account.sol", + "../interfaces/IERC6551Executable.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ExampleERC6551Account" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/interfaces/IERC6551Account.sol": { + "lastModificationDate": 1706701952636, + "contentHash": "c528cf2c0469cfc45b80be52611c5283", + "sourceName": "interfaces/IERC6551Account.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC6551Account" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/interfaces/IERC6551Executable.sol": { + "lastModificationDate": 1706701952636, + "contentHash": "242d64a3da199b580acabdf4b947e069", + "sourceName": "interfaces/IERC6551Executable.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC6551Executable" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/interfaces/IERC1271.sol": { + "lastModificationDate": 1706772047266, + "contentHash": "8fe867b95c856b204f954a1910e28a1e", + "sourceName": "@openzeppelin/contracts/interfaces/IERC1271.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC1271" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol": { + "lastModificationDate": 1706772047471, + "contentHash": "53d16b3bec482493405bdc74852eb2cd", + "sourceName": "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ECDSA.sol", + "../../interfaces/IERC1271.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "SignatureChecker" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { + "lastModificationDate": 1706772047007, + "contentHash": "d822a8a9468649cab463f29f5decf5cc", + "sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../Strings.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ECDSA" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/EnglishAuction.sol": { + "lastModificationDate": 1706701952636, + "contentHash": "26ae40007ba5389de384cfa88c85a9fa", + "sourceName": "contracts/EnglishAuction.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC721/ERC721.sol" ], "versionPragmas": [ "^0.8.20" ], "artifacts": [ - "ERC721" + "EnglishAuction" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { - "lastModificationDate": 1707102443523, - "contentHash": "fc8a9841f4bdd6329c26a00d5e75f4b3", - "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/access/Ownable.sol": { + "lastModificationDate": 1706772010058, + "contentHash": "d3c790edc9ccf808a17c5a6cd13614fd", + "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/access/Ownable.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/Context.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "Ownable" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/Context.sol": { + "lastModificationDate": 1706772010060, + "contentHash": "67bfbc07588eb8683b3fd8f6f909563e", + "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/Context.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1877,13 +2192,13 @@ "^0.8.20" ], "artifacts": [ - "IERC721Receiver" + "Context" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/Strings.sol": { - "lastModificationDate": 1707102443524, - "contentHash": "ba57ff4ddf1d9cae9d2009792795b7f6", - "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/Strings.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/ERC721.sol": { + "lastModificationDate": 1706772010060, + "contentHash": "1e64e2ad597dc5b2dae11346502baad4", + "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/ERC721.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1909,20 +2224,25 @@ } }, "imports": [ - "./math/Math.sol", - "./math/SignedMath.sol" + "./IERC721.sol", + "./IERC721Receiver.sol", + "./extensions/IERC721Metadata.sol", + "../../utils/Context.sol", + "../../utils/Strings.sol", + "../../utils/introspection/ERC165.sol", + "../../interfaces/draft-IERC6093.sol" ], "versionPragmas": [ "^0.8.20" ], "artifacts": [ - "Strings" + "ERC721" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { - "lastModificationDate": 1707102443524, - "contentHash": "12c206f185cb951213799561fdcaa40d", - "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/Strings.sol": { + "lastModificationDate": 1706772010060, + "contentHash": "ba57ff4ddf1d9cae9d2009792795b7f6", + "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/Strings.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1948,17 +2268,18 @@ } }, "imports": [ - "../IERC721.sol" + "./math/Math.sol", + "./math/SignedMath.sol" ], "versionPragmas": [ "^0.8.20" ], "artifacts": [ - "IERC721Metadata" + "Strings" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "lastModificationDate": 1707102443524, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/introspection/ERC165.sol": { + "lastModificationDate": 1706772010060, "contentHash": "6a55c353946e471d9792965d06208295", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/introspection/ERC165.sol", "solcConfig": { @@ -1995,8 +2316,8 @@ "ERC165" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "lastModificationDate": 1707102443523, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { + "lastModificationDate": 1706772010058, "contentHash": "4aefc698f77ecbace7f401257dfe182d", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", "solcConfig": { @@ -2033,8 +2354,8 @@ "IERC721Errors" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721.sol": { - "lastModificationDate": 1707102443523, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721.sol": { + "lastModificationDate": 1706772010060, "contentHash": "5df8fdb527e563085847cad29e3c5f2e", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721.sol", "solcConfig": { @@ -2071,10 +2392,10 @@ "IERC721" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/math/Math.sol": { - "lastModificationDate": 1707102443524, - "contentHash": "718fa8ba0ff269c92e364c1429d9de57", - "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/math/Math.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "lastModificationDate": 1706772010060, + "contentHash": "fc8a9841f4bdd6329c26a00d5e75f4b3", + "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -2104,11 +2425,49 @@ "^0.8.20" ], "artifacts": [ - "Math" + "IERC721Receiver" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { + "lastModificationDate": 1706772010060, + "contentHash": "12c206f185cb951213799561fdcaa40d", + "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IERC721.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC721Metadata" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/math/SignedMath.sol": { - "lastModificationDate": 1707102443524, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/math/SignedMath.sol": { + "lastModificationDate": 1706772010061, "contentHash": "b6c6bdc7aaca4fe5b680760a72e09d3e", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/math/SignedMath.sol", "solcConfig": { @@ -2143,8 +2502,44 @@ "SignedMath" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "lastModificationDate": 1707102443524, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/math/Math.sol": { + "lastModificationDate": 1706772010061, + "contentHash": "718fa8ba0ff269c92e364c1429d9de57", + "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/math/Math.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "Math" + ] + }, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "lastModificationDate": 1706772010061, "contentHash": "de0163561b417b800d01749cbbe2147e", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.sol", "solcConfig": { @@ -2179,8 +2574,8 @@ "IERC165" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol": { - "lastModificationDate": 1707102443524, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol": { + "lastModificationDate": 1706772010061, "contentHash": "39cb7ad93657f9f444653cf94d6fc392", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol", "solcConfig": { @@ -2217,8 +2612,8 @@ "ERC165Checker" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "lastModificationDate": 1707102443523, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/ERC20.sol": { + "lastModificationDate": 1706772010059, "contentHash": "c6375ef25e84c90b3d15f9ec4eef218f", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/ERC20.sol", "solcConfig": { @@ -2258,10 +2653,10 @@ "ERC20" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "lastModificationDate": 1707102443523, - "contentHash": "5517c8678c18eb1a8ba58810e7ca39ca", - "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "lastModificationDate": 1706772010059, + "contentHash": "4c02fa6f7ae7b6c289cef80424f0c875", + "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -2286,18 +2681,20 @@ } } }, - "imports": [], + "imports": [ + "../IERC20.sol" + ], "versionPragmas": [ "^0.8.20" ], "artifacts": [ - "IERC20" + "IERC20Metadata" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "lastModificationDate": 1707102443523, - "contentHash": "4c02fa6f7ae7b6c289cef80424f0c875", - "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "lastModificationDate": 1706772010059, + "contentHash": "5517c8678c18eb1a8ba58810e7ca39ca", + "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -2322,18 +2719,16 @@ } } }, - "imports": [ - "../IERC20.sol" - ], + "imports": [], "versionPragmas": [ "^0.8.20" ], "artifacts": [ - "IERC20Metadata" + "IERC20" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/security/ReentrancyGuard.sol": { - "lastModificationDate": 1707102443523, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/security/ReentrancyGuard.sol": { + "lastModificationDate": 1706772010059, "contentHash": "1535f8c0c68463f8c1b5239f7584e71f", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/security/ReentrancyGuard.sol", "solcConfig": { @@ -2368,8 +2763,8 @@ "ReentrancyGuard" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/Address.sol": { - "lastModificationDate": 1707102443524, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/Address.sol": { + "lastModificationDate": 1706772010060, "contentHash": "79c699f80eb8a9b168cb34e37816f894", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/Address.sol", "solcConfig": { @@ -2404,8 +2799,8 @@ "Address" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/structs/EnumerableSet.sol": { - "lastModificationDate": 1707102443525, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts/utils/structs/EnumerableSet.sol": { + "lastModificationDate": 1706772010061, "contentHash": "99b208f3f285702e96243d329411c5de", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts/utils/structs/EnumerableSet.sol", "solcConfig": { @@ -2440,8 +2835,8 @@ "EnumerableSet" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { - "lastModificationDate": 1707102443522, + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/.deps/npm/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { + "lastModificationDate": 1706772010058, "contentHash": "c30c805386fda8a42ff515da963d3a95", "sourceName": "contracts/.deps/npm/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol", "solcConfig": { @@ -2476,10 +2871,10 @@ "AddressUpgradeable" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/interfaces/IERC6551Registry.sol": { - "lastModificationDate": 1707102443534, - "contentHash": "c0c59023676e73b6b84894e93fc1da47", - "sourceName": "interfaces/IERC6551Registry.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/contracts/ERC6551Registry.sol": { + "lastModificationDate": 1707231947880, + "contentHash": "dd922b0c6e618b2379f1836bb1f266f9", + "sourceName": "contracts/ERC6551Registry.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -2504,16 +2899,20 @@ } } }, - "imports": [], + "imports": [ + "@openzeppelin/contracts/utils/Create2.sol", + "../interfaces/IERC6551Registry.sol", + "../lib/ERC6551BytecodeLib.sol" + ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "IERC6551Registry" + "ERC6551Registry" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/lib/ERC6551BytecodeLib.sol": { - "lastModificationDate": 1707102443534, + "/Users/kevinshark/BlastAquarium/erc-6551/lib/ERC6551BytecodeLib.sol": { + "lastModificationDate": 1706701952636, "contentHash": "a99bda517ed9df7d830beef2a49cec83", "sourceName": "lib/ERC6551BytecodeLib.sol", "solcConfig": { @@ -2548,10 +2947,10 @@ "ERC6551BytecodeLib" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Create2.sol": { - "lastModificationDate": 1707186364134, - "contentHash": "752ff0901adbdac182deace414d9e75f", - "sourceName": "@openzeppelin/contracts/utils/Create2.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/interfaces/IERC6551Registry.sol": { + "lastModificationDate": 1706701952636, + "contentHash": "c0c59023676e73b6b84894e93fc1da47", + "sourceName": "interfaces/IERC6551Registry.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -2581,13 +2980,13 @@ "^0.8.0" ], "artifacts": [ - "Create2" + "IERC6551Registry" ] }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/FishNFT.sol": { - "lastModificationDate": 1707186584398, - "contentHash": "e8ae5c709096bf7ca208fed690d6e361", - "sourceName": "contracts/FishNFT.sol", + "/Users/kevinshark/BlastAquarium/erc-6551/node_modules/@openzeppelin/contracts/utils/Create2.sol": { + "lastModificationDate": 1706772046957, + "contentHash": "752ff0901adbdac182deace414d9e75f", + "sourceName": "@openzeppelin/contracts/utils/Create2.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -2613,47 +3012,11 @@ } }, "imports": [], - "versionPragmas": [], - "artifacts": [] - }, - "/Users/aronyu/projects/blockchain/BlastAquarium/erc-6551/contracts/ERC6551Registry.sol": { - "lastModificationDate": 1707194788498, - "contentHash": "dd922b0c6e618b2379f1836bb1f266f9", - "sourceName": "contracts/ERC6551Registry.sol", - "solcConfig": { - "version": "0.8.20", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/Create2.sol", - "../interfaces/IERC6551Registry.sol", - "../lib/ERC6551BytecodeLib.sol" - ], "versionPragmas": [ "^0.8.0" ], "artifacts": [ - "ERC6551Registry" + "Create2" ] } } diff --git a/erc-6551/contracts/FishNFT.sol b/erc-6551/contracts/FishNFT.sol index cb4ac2e..21a294c 100644 --- a/erc-6551/contracts/FishNFT.sol +++ b/erc-6551/contracts/FishNFT.sol @@ -1,54 +1,152 @@ - +// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import "@manifoldxyz/creator-core-solidity/contracts/ERC721Creator.sol"; +// import "@openzeppelin/contracts/access/Ownable.sol"; import "./FishToken.sol"; +contract FishNFT is ERC721Creator { + struct Fish { + uint256 mintTime; + uint256 chargedTime; + uint256 claimedTime; + uint256 productivity; + uint256 appetite; + uint256 rarity; + } + mapping(address => uint256) public maxMintAmount; + mapping(uint256 => Fish) public fishes; + uint256[] public rarities; + uint256[] public productivities; + uint256[] public appetities; + uint256 public produceTime = 24 * 60 * 60; // 24 hours in seconds + uint256 public chargeRatio = 100; + uint256 public productRatio = 120; + address public tokenAddress; + string public defaultURI = + "https://studio.api.manifoldxyz.dev/asset_uploader/1/series/2466823498/metadata/full/1"; -contract FishNFT is ERC721Creator { + constructor() ERC721Creator("FishNFT", "FFF") {} - mapping(address => uint256) public maxMintAmount; - mapping(address => uint256) public mintTime; + function setRarities(uint256[] memory values) external onlyOwner { + rarities = values; + } - address public tokenAddress; + function setProductivities(uint256[] memory values) external onlyOwner { + productivities = values; + } + + function setAppetities(uint256[] memory values) external onlyOwner { + appetities = values; + } + + function setChargeRatio(uint256 value) external onlyOwner { + chargeRatio = value; + } + + function setProductRatio(uint256 value) external onlyOwner { + productRatio = value; + } - constructor() ERC721Creator ("FishNFT", "FFF") { + function getFish(uint256 tokenId) public view returns (Fish memory) { + return fishes[tokenId]; + } + + function charge(uint256[] memory tokenIds) public { + uint256 price; + for (uint i; i < tokenIds.length; ) { + Fish storage fish = fishes[tokenIds[i]]; + require(fish.mintTime != 0, "Fish not minted"); + // require(fish.chargedTime + produceTime < block.timestamp, "Fish already charged"); + price += fish.appetite * chargeRatio; + fish.chargedTime = block.timestamp; + unchecked { + ++i; + } + } + FishToken(tokenAddress).burn(msg.sender, price); } function setTokenAddress(address _tokenAddress) external onlyOwner { tokenAddress = _tokenAddress; } + function randomFish(uint256 tokenId) public view returns (Fish memory) { + uint256 rarity = rarities[tokenId % rarities.length]; + uint256 productivity = productivities[tokenId % productivities.length]; + uint256 appetite = appetities[tokenId % appetities.length]; + return + Fish( + block.timestamp, + block.timestamp, + 0, + productivity, + appetite, + rarity + ); + } // tmp random fish logic + // called by backend function setMaxMintAmount(address user, uint256 amount) external onlyOwner { maxMintAmount[user] = amount; } - function getReward(address user) public view returns (uint256){ - if(mintTime[user] == 0) return 0; - return balanceOf(user) * 10 * (block.timestamp - mintTime[user]); - } - - function claimReward(address user) external { + function claimReward(uint256[] memory tokenIds) external { require(tokenAddress != address(0), "token address not set"); - - uint256 reward = getReward(user); + uint256 reward; + for (uint i; i < tokenIds.length; ) { + Fish storage fish = fishes[tokenIds[i]]; + require(fish.mintTime != 0, "Fish not minted"); + address fishOwner = ownerOf(tokenIds[i]); + require( + block.timestamp >= fish.chargedTime + produceTime, + "Fish not generate reward yet" + ); + require( + fish.claimedTime < fish.chargedTime + produceTime, + "Reward already claimed" + ); + require(fishOwner == msg.sender, "Not fish owner"); + reward += fish.productivity * productRatio; + fish.claimedTime = block.timestamp; + unchecked { + ++i; + } + } // mint Fish token ERC20 to user - FishToken(tokenAddress).mint(user, reward); - mintTime[user] = block.timestamp; + FishToken(tokenAddress).mint(msg.sender, reward); } - - function mint(string[] memory uris) external { - uint256[] memory tokenIds = new uint256[](uris.length); - uint256 firstTokenId = _tokenCount+1; - _tokenCount += uris.length; - - for (uint i; i < uris.length;) { - tokenIds[i] = _mintBase(msg.sender, uris[i], firstTokenId+i); - unchecked { ++i; } + function mint( + string[] memory uris + ) external onlyOwner returns (uint256[] memory tokenIds) { + tokenIds = new uint256[](uris.length); + + for (uint i; i < uris.length; ) { + uint256 tokenId = _mintBase(msg.sender, uris[i]); + tokenIds[i] = tokenId; + fishes[tokenId] = randomFish(tokenId); + unchecked { + ++i; + } } - mintTime[msg.sender] = block.timestamp; + return tokenIds; + } + + function payMint() external payable { + uint256 currentPrice = getPrice(1); + require(msg.value >= currentPrice, "insufficient funds"); + uint256 tokenId = _mintBase(msg.sender, defaultURI); + fishes[tokenId] = randomFish(tokenId); + _tokenCount++; + } + + function getPrice(uint256 amount) public view returns (uint256) { + uint256 sum1 = _tokenCount == 0 ? 0 : (_tokenCount - 1 )* (_tokenCount) * (2 * (_tokenCount - 1) + 1) / 6; + uint256 sum2 = _tokenCount == 0 && amount == 1 ? 0 : (_tokenCount - 1 + amount) * (_tokenCount + amount) * (2 * (_tokenCount - 1 + amount) + 1) / 6; + uint256 summation = sum2 - sum1; + uint256 price = summation * 0.5 ether / 16000; + return price; } -} \ No newline at end of file +} diff --git a/erc-6551/contracts/FishToken.sol b/erc-6551/contracts/FishToken.sol index 7c575f3..9a9cf77 100644 --- a/erc-6551/contracts/FishToken.sol +++ b/erc-6551/contracts/FishToken.sol @@ -16,4 +16,8 @@ contract FishToken is ERC20 { require(msg.sender == nftAddress, "only nft contract can mint token"); _mint(to, amount); } + + function burn(address from, uint256 amount) external { + _burn(from, amount); + } } diff --git a/erc-6551/package-lock.json b/erc-6551/package-lock.json index 683d1cd..6ba41c3 100644 --- a/erc-6551/package-lock.json +++ b/erc-6551/package-lock.json @@ -15,18 +15,19 @@ "dotenv": "^16.3.1" }, "devDependencies": { + "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.4.1", "@types/chai": "^4.3.11", "@types/mocha": "^10.0.6", "@types/node": "^20.11.0", "chai": "^4.4.1", + "ethers": "^6.10.0", "hardhat": "^2.19.5" } }, "node_modules/@adraffy/ens-normalize": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz", - "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==", - "peer": true + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" }, "node_modules/@chainsafe/as-sha256": { "version": "0.3.1", @@ -439,11 +440,6 @@ "scrypt-js": "3.0.1" } }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, "node_modules/@ethersproject/keccak256": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", @@ -1779,6 +1775,18 @@ "node": ">= 10" } }, + "node_modules/@nomiclabs/hardhat-ethers": { + "name": "hardhat-deploy-ethers", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.4.1.tgz", + "integrity": "sha512-RM6JUcD0dOCjemxnKLtK7XQQI7NWn+LxF5qicGYax0PtWayEUXAewOb4WIHZ/yearhj+s2t6dL0MnHyLTENwJg==", + "dev": true, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.2", + "hardhat": "^2.16.0", + "hardhat-deploy": "^0.11.34" + } + }, "node_modules/@openzeppelin/contracts": { "version": "4.9.3", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", @@ -2195,10 +2203,9 @@ } }, "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "peer": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" }, "node_modules/agent-base": { "version": "6.0.2", @@ -2693,6 +2700,24 @@ "node": ">= 0.8" } }, + "node_modules/call-bind": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -3204,6 +3229,21 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "peer": true }, + "node_modules/define-data-property": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3302,6 +3342,13 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "dev": true, + "peer": true + }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", @@ -3322,6 +3369,15 @@ "node": ">=6" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3565,9 +3621,9 @@ } }, "node_modules/ethers": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz", - "integrity": "sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz", + "integrity": "sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA==", "funding": [ { "type": "individual", @@ -3578,11 +3634,10 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { - "@adraffy/ens-normalize": "1.9.2", - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.7.1", + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", "@types/node": "18.15.13", "aes-js": "4.0.0-beta.5", "tslib": "2.4.0", @@ -3592,35 +3647,47 @@ "node": ">=14.0.0" } }, + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/ethers/node_modules/@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "peer": true + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, "node_modules/ethers/node_modules/@types/node": { "version": "18.15.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", - "peer": true + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/ethers/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" }, "node_modules/ethers/node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "peer": true + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/ethers/node_modules/ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -3758,6 +3825,16 @@ "flat": "cli.js" } }, + "node_modules/fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "dev": true, + "peer": true, + "dependencies": { + "imul": "^1.0.0" + } + }, "node_modules/follow-redirects": { "version": "1.15.5", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", @@ -3833,6 +3910,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -3854,6 +3940,25 @@ "node": "*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-port": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", @@ -3951,6 +4056,18 @@ "node": ">=8" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4048,6 +4165,238 @@ } } }, + "node_modules/hardhat-deploy": { + "version": "0.11.45", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz", + "integrity": "sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==", + "dev": true, + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.7.0", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-web3": "^0.14.3" + } + }, + "node_modules/hardhat-deploy/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/hardhat-deploy/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "peer": true, + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/hardhat-deploy/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/hardhat-deploy/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/hardhat-deploy/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/hardhat-deploy/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/hardhat-deploy/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hardhat-deploy/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/hardhat-deploy/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hardhat-deploy/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat-deploy/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/hardhat-deploy/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/hardhat-deploy/node_modules/zksync-web3": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", + "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", + "deprecated": "This package has been deprecated in favor of zksync-ethers@5.0.0", + "dev": true, + "peer": true, + "peerDependencies": { + "ethers": "^5.7.0" + } + }, "node_modules/hardhat-gas-reporter": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", @@ -4070,6 +4419,42 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "peer": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -4111,6 +4496,18 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "peer": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -4236,6 +4633,16 @@ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" }, + "node_modules/imul": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -4664,6 +5071,13 @@ "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", "peer": true }, + "node_modules/match-all": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", + "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", + "dev": true, + "peer": true + }, "node_modules/mcl-wasm": { "version": "0.7.9", "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", @@ -4984,6 +5398,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/murmur-128": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", + "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", + "dev": true, + "peer": true, + "dependencies": { + "encode-utf8": "^1.0.2", + "fmix": "^0.1.0", + "imul": "^1.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", @@ -5088,6 +5514,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/obliterator": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", @@ -5310,12 +5745,18 @@ } }, "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "peer": true, + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/queue-microtask": { @@ -5712,7 +6153,24 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dependencies": { - "randombytes": "^2.1.0" + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "peer": true, + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/setimmediate": { @@ -5767,6 +6225,24 @@ "node": ">=4" } }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "peer": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -6914,10 +7390,9 @@ }, "dependencies": { "@adraffy/ens-normalize": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz", - "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==", - "peer": true + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" }, "@chainsafe/as-sha256": { "version": "0.3.1", @@ -7176,13 +7651,6 @@ "@ethersproject/transactions": "^5.7.0", "aes-js": "3.0.0", "scrypt-js": "3.0.1" - }, - "dependencies": { - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - } } }, "@ethersproject/keccak256": { @@ -8145,6 +8613,13 @@ "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", "optional": true }, + "@nomiclabs/hardhat-ethers": { + "version": "npm:hardhat-deploy-ethers@0.4.1", + "resolved": "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.4.1.tgz", + "integrity": "sha512-RM6JUcD0dOCjemxnKLtK7XQQI7NWn+LxF5qicGYax0PtWayEUXAewOb4WIHZ/yearhj+s2t6dL0MnHyLTENwJg==", + "dev": true, + "requires": {} + }, "@openzeppelin/contracts": { "version": "4.9.3", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", @@ -8490,10 +8965,9 @@ "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" }, "aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "peer": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" }, "agent-base": { "version": "6.0.2", @@ -8867,6 +9341,18 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, + "call-bind": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "peer": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" + } + }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -9260,6 +9746,18 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "peer": true }, + "define-data-property": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "peer": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -9335,6 +9833,13 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "dev": true, + "peer": true + }, "enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", @@ -9349,6 +9854,12 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "peer": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -9551,43 +10062,51 @@ } }, "ethers": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz", - "integrity": "sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==", - "peer": true, + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz", + "integrity": "sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA==", "requires": { - "@adraffy/ens-normalize": "1.9.2", - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.7.1", + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", "@types/node": "18.15.13", "aes-js": "4.0.0-beta.5", "tslib": "2.4.0", "ws": "8.5.0" }, "dependencies": { + "@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "requires": { + "@noble/hashes": "1.3.2" + } + }, "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "peer": true + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==" }, "@types/node": { "version": "18.15.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", - "peer": true + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" }, "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "peer": true + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "peer": true, "requires": {} } } @@ -9692,6 +10211,16 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" }, + "fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "dev": true, + "peer": true, + "requires": { + "imul": "^1.0.0" + } + }, "follow-redirects": { "version": "1.15.5", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", @@ -9740,6 +10269,12 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "peer": true + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -9755,6 +10290,19 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==" }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "peer": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, "get-port": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", @@ -9828,6 +10376,15 @@ "slash": "^3.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "peer": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -9902,6 +10459,195 @@ "ws": "^7.4.6" } }, + "hardhat-deploy": { + "version": "0.11.45", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz", + "integrity": "sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==", + "dev": true, + "peer": true, + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.7.0", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-web3": "^0.14.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "peer": true, + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "peer": true, + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "peer": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "peer": true + }, + "zksync-web3": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", + "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", + "dev": true, + "peer": true, + "requires": {} + } + } + }, "hardhat-gas-reporter": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", @@ -9918,6 +10664,27 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "peer": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "peer": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "peer": true + }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -9944,6 +10711,15 @@ "minimalistic-assert": "^1.0.1" } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "peer": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -10039,6 +10815,13 @@ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" }, + "imul": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", + "dev": true, + "peer": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -10355,6 +11138,13 @@ "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", "peer": true }, + "match-all": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", + "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", + "dev": true, + "peer": true + }, "mcl-wasm": { "version": "0.7.9", "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", @@ -10585,6 +11375,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "murmur-128": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", + "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", + "dev": true, + "peer": true, + "requires": { + "encode-utf8": "^1.0.2", + "fmix": "^0.1.0", + "imul": "^1.0.0" + } + }, "nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", @@ -10664,6 +11466,12 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "peer": true }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "peer": true + }, "obliterator": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", @@ -10826,10 +11634,13 @@ "peer": true }, "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "peer": true + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "peer": true, + "requires": { + "side-channel": "^1.0.4" + } }, "queue-microtask": { "version": "1.2.3", @@ -11115,6 +11926,20 @@ "randombytes": "^2.1.0" } }, + "set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "peer": true, + "requires": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -11155,6 +11980,18 @@ "rechoir": "^0.6.2" } }, + "side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "peer": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", diff --git a/erc-6551/package.json b/erc-6551/package.json index 04d8369..0269cfd 100644 --- a/erc-6551/package.json +++ b/erc-6551/package.json @@ -10,10 +10,12 @@ "author": "", "license": "ISC", "devDependencies": { + "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.4.1", "@types/chai": "^4.3.11", "@types/mocha": "^10.0.6", "@types/node": "^20.11.0", "chai": "^4.4.1", + "ethers": "^6.10.0", "hardhat": "^2.19.5" }, "dependencies": { diff --git a/erc-6551/scripts/ExecuteFishNFT.js b/erc-6551/scripts/ExecuteFishNFT.js index 0e10164..5d47a03 100644 --- a/erc-6551/scripts/ExecuteFishNFT.js +++ b/erc-6551/scripts/ExecuteFishNFT.js @@ -9,6 +9,7 @@ let nftContract; const main = async () => { await deployFishNFT(); + await setFish(); await mintFishNFT(); }; @@ -17,14 +18,32 @@ async function deployFishNFT() { const nftTokenContract = await hre.ethers.deployContract('FishNFT', signer); await nftTokenContract.waitForDeployment(); nftContract = nftTokenContract; + const FishTokenFactory = await ethers.getContractFactory("FishToken"); + fishToken = await FishTokenFactory.deploy(fishNFT.target); console.log(`FishNFT contract deployed to ${nftContract}`); } +async function setFish() +{ + const nftTokenContract = await hre.ethers.getContractAt('FishNFT', '0x26076EF77D3b41aC8BDFD5C318bd5157C64AB757', signer); + + // const FishTokenContract = await hre.ethers.getContractAt("FishToken", '0x7bc41069C8d1b24B5AaC7f351ab5824aeD593a62', signer); + // await nftTokenContract.setTokenAddress(FishTokenContract.target); + + let settingValue = [1, 2, 1, 1, 1, 1, 2, 1, 2, 3]; + // can not set in same time + await nftTokenContract.setRarities(settingValue); + // await nftTokenContract.setProductivities(settingValue); + // await nftTokenContract.setAppetities(settingValue); +} + async function mintFishNFT() { + const nftContract = await hre.ethers.getContractAt('FishNFT', '0x26076EF77D3b41aC8BDFD5C318bd5157C64AB757', signer); console.log('Minting NFT...'); const uris = [ - 'https://gateway.pinata.cloud/ipfs/QmWaBBtUUbjdSP9xGHpnN5LPu8MHG6G1JaNQgxTDMxrnbT/0', - 'https://gateway.pinata.cloud/ipfs/QmWaBBtUUbjdSP9xGHpnN5LPu8MHG6G1JaNQgxTDMxrnbT/1', + 'https://studio.api.manifoldxyz.dev/asset_uploader/1/series/2466823498/metadata/full/1', + 'https://studio.api.manifoldxyz.dev/asset_uploader/1/series/2466823498/metadata/full/2', + 'https://studio.api.manifoldxyz.dev/asset_uploader/1/series/2466823498/metadata/full/3', ]; const mintTx = await nftContract.mint(uris); await mintTx.wait(); diff --git a/erc-6551/test/FishNFT.test.js b/erc-6551/test/FishNFT.test.js new file mode 100644 index 0000000..5421215 --- /dev/null +++ b/erc-6551/test/FishNFT.test.js @@ -0,0 +1,138 @@ +// FishNFT.test.js +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const { BigNumber } = require("ethers"); + +describe("FishNFT", function () { + let owner; + let user; + let fishNFT; + let fishToken; + let settingValue = [1, 2, 1, 1, 1, 1, 2, 1, 2, 3]; + let uris = [ + "https://studio.api.manifoldxyz.dev/asset_uploader/1/series/2466823498/metadata/full/1", + "https://studio.api.manifoldxyz.dev/asset_uploader/1/series/2466823498/metadata/full/2" + ] + beforeEach(async function () { + [owner, user] = await ethers.getSigners(); + + const FishNFTFactory = await ethers.getContractFactory("FishNFT"); + fishNFT = await FishNFTFactory.deploy(); + await fishNFT.waitForDeployment(); + + const FishTokenFactory = await ethers.getContractFactory("FishToken"); + fishToken = await FishTokenFactory.deploy(fishNFT.target); + + await fishNFT.setTokenAddress(fishToken.target); + await fishNFT.setRarities(settingValue); + await fishNFT.setProductivities(settingValue); + await fishNFT.setAppetities(settingValue); + await fishNFT.setChargeRatio(110); + await fishNFT.setProductRatio(130); + }); + + it("should not allow non-owner to set data", async function () { + const nonOwner = user; + const newSettingValue = [4, 4, 4, 4, 4, 4, 5, 5, 5, 6]; + + await expect(fishNFT.connect(nonOwner).setRarities(newSettingValue)).to.be.revertedWith("Ownable: caller is not the owner"); + await expect(fishNFT.connect(nonOwner).setProductivities(newSettingValue)).to.be.revertedWith("Ownable: caller is not the owner"); + await expect(fishNFT.connect(nonOwner).setAppetities(newSettingValue)).to.be.revertedWith("Ownable: caller is not the owner"); + await expect(fishNFT.connect(nonOwner).setChargeRatio(120)).to.be.revertedWith("Ownable: caller is not the owner"); + await expect(fishNFT.connect(nonOwner).setProductRatio(140)).to.be.revertedWith("Ownable: caller is not the owner"); + }); + + it("should set the initialize data", async function () { + const tokenAddress = await fishNFT.tokenAddress(); + expect(tokenAddress).to.equal(fishToken.target); + + const appetities = await fishNFT.appetities(2); + expect(appetities).to.equal(settingValue[2]); + + const rarities = await fishNFT.rarities(2); + expect(rarities).to.equal(settingValue[2]); + + const productivities = await fishNFT.productivities(2); + expect(productivities).to.equal(settingValue[2]); + + const chargeRatio = await fishNFT.chargeRatio(); + expect(chargeRatio).to.equal(110); + + const productRatio = await fishNFT.productRatio(); + expect(productRatio).to.equal(130); + }); + + it("should mint the NFT", async function () { + await fishNFT.mint(uris); + const balance = await fishNFT.balanceOf(owner.address); + expect(balance).to.equal(2); + }); + + it("should claimReward and charge", async function () { + const blockNum = await ethers.provider.getBlockNumber(); + const block = await ethers.provider.getBlock(blockNum); + const timestamp = block.timestamp; + const produceTime = await fishNFT.produceTime(); + const productRatio = await fishNFT.productRatio(); + const chargeRatio = await fishNFT.chargeRatio(); + + const tokenIds = await fishNFT.mint(uris) + fish1 = await fishNFT.getFish(1); + fish2 = await fishNFT.getFish(2); + + await expect(fishNFT.claimReward([1, 2])).to.be.revertedWith("Fish not generate reward yet"); + + newTime = Number(timestamp) + Number(produceTime) + 1 + await ethers.provider.send("evm_increaseTime", [newTime]); + await fishNFT.claimReward([1, 2]) + + rewards = (Number(fish1.productivity) + Number(fish2.productivity)) * Number(productRatio); + expect(await fishToken.balanceOf(owner.address)).to.equal(rewards); + + await expect(fishNFT.claimReward([1, 2])).to.be.revertedWith("Reward already claimed"); + + chargeFee = (Number(fish1.appetite) + Number(fish2.appetite)) * Number(chargeRatio); + await fishNFT.charge([1, 2]) + + fish1 = await fishNFT.getFish(1); + fish2 = await fishNFT.getFish(2); + + expect(await fishToken.balanceOf(owner.address)).to.equal(rewards - chargeFee); + }); + + it('should have an initial supply of 100', async function () { + const totalSupply = await fishNFT.totalSupply; + console.log(totalSupply); + expect(totalSupply, 100); + }); + + it('should have a reserve ratio of 2', async function () { + const reserveRatio = await fishNFT.reserveRatio; + expect(reserveRatio, 2); + }); + + it('should have a base price of 1 ether', async function () { + const basePrice = await fishNFT.basePrice; + expect(basePrice, 1e18); + }); + + it('should revert if the amount sent is less than the current price', async function () { + + expect(fishNFT.payMint('https://example.com/1.json', { value: 0 })).to.be.revertedWith('Insufficient funds'); + }); + + it('should mint a new token if the amount sent is equal to or greater than the current price', async function () { + const currentPrice = await fishNFT.getPrice(1); + const initialTokenCount = await fishNFT.totalSupply; + await fishNFT.payMint({value: currentPrice}); + const newTokenCount = await fishNFT.totalSupply; + expect(newTokenCount, initialTokenCount + 1); + }); + + it('should increase the price after each mint', async function () { + const initialPrice = await fishNFT.getPrice(1); + await fishNFT.payMint({value: initialPrice}); + const newPrice = await fishNFT.getPrice(1); + expect(newPrice).to.greaterThan(initialPrice); + }); +}); \ No newline at end of file