UNPKG

mustafair-carvid-package-hackathon

Version:

CARV ID implementation files for MustaFair decentralized social media platform

729 lines 76.5 kB
{ "_format": "hh-sol-artifact-1", "contractName": "ModularCarvID", "sourceName": "contracts/ModularCarvID.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "identitiesRoot", "type": "bytes32" } ], "name": "CarvIdMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "achievementHash", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "tier", "type": "string" } ], "name": "Web2AchievementsUpdated", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getIdentitiesRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" } ], "name": "getReputationData", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes32", "name": "identitiesRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "web2AchievementHash", "type": "bytes32" }, { "internalType": "string", "name": "reputationTier", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getReputationTier", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getWeb2AchievementHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "identitiesRoot", "type": "bytes32" } ], "name": "mintCarvId", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes32", "name": "newRoot", "type": "bytes32" } ], "name": "setIdentitiesRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "achievementHash", "type": "bytes32" }, { "internalType": "string", "name": "tier", "type": "string" } ], "name": "updateWeb2Achievements", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "walletToTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60806040526001600b5534801561001557600080fd5b50336040518060400160405280600f81526020017f4d6f64756c6172204341525620494400000000000000000000000000000000008152506040518060400160405280600681526020017f434152564944000000000000000000000000000000000000000000000000000081525081600090816100929190610442565b5080600190816100a29190610442565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101175760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161010e9190610555565b60405180910390fd5b6101268161012c60201b60201c565b50610570565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061027357607f821691505b6020821081036102865761028561022c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026102ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102b1565b6102f886836102b1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061033f61033a61033584610310565b61031a565b610310565b9050919050565b6000819050919050565b61035983610324565b61036d61036582610346565b8484546102be565b825550505050565b600090565b610382610375565b61038d818484610350565b505050565b5b818110156103b1576103a660008261037a565b600181019050610393565b5050565b601f8211156103f6576103c78161028c565b6103d0846102a1565b810160208510156103df578190505b6103f36103eb856102a1565b830182610392565b50505b505050565b600082821c905092915050565b6000610419600019846008026103fb565b1980831691505092915050565b60006104328383610408565b9150826002028217905092915050565b61044b826101f2565b67ffffffffffffffff811115610464576104636101fd565b5b61046e825461025b565b6104798282856103b5565b600060209050601f8311600181146104ac576000841561049a578287015190505b6104a48582610426565b86555061050c565b601f1984166104ba8661028c565b60005b828110156104e2578489015182556001820191506020850194506020810190506104bd565b868310156104ff57848901516104fb601f891682610408565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061053f82610514565b9050919050565b61054f81610534565b82525050565b600060208201905061056a6000830184610546565b92915050565b6139248061057f6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063b88d4fde1161007c578063b88d4fde146103ec578063c87b56dd14610408578063e985e9c514610438578063f2fde38b14610468578063fc344ceb14610484578063ff30a118146104b457610158565b8063715018a6146103275780637a00d3c4146103315780638da5cb5b1461036457806395d89b41146103825780639c2806c7146103a0578063a22cb465146103d057610158565b806345692b821161011557806345692b821461022f57806349465f471461025f5780635aa89f011461028f5780636352211e146102ab5780636850b87f146102db57806370a08231146102f757610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806323b872dd146101f757806342842e0e14610213575b600080fd5b61017760048036038101906101729190612394565b6104d0565b60405161018491906123dc565b60405180910390f35b6101956105b2565b6040516101a29190612487565b60405180910390f35b6101c560048036038101906101c091906124df565b610644565b6040516101d2919061254d565b60405180910390f35b6101f560048036038101906101f09190612594565b610660565b005b610211600480360381019061020c91906125d4565b610676565b005b61022d600480360381019061022891906125d4565b610778565b005b610249600480360381019061024491906124df565b610798565b6040516102569190612640565b60405180910390f35b610279600480360381019061027491906124df565b6107b5565b6040516102869190612487565b60405180910390f35b6102a960048036038101906102a491906127bc565b61085a565b005b6102c560048036038101906102c091906124df565b6109cf565b6040516102d2919061254d565b60405180910390f35b6102f560048036038101906102f09190612818565b6109e1565b005b610311600480360381019061030c9190612845565b610b37565b60405161031e9190612881565b60405180910390f35b61032f610bf1565b005b61034b60048036038101906103469190612845565b610c05565b60405161035b949392919061289c565b60405180910390f35b61036c610d62565b604051610379919061254d565b60405180910390f35b61038a610d8c565b6040516103979190612487565b60405180910390f35b6103ba60048036038101906103b59190612845565b610e1e565b6040516103c79190612881565b60405180910390f35b6103ea60048036038101906103e59190612914565b610e36565b005b610406600480360381019061040191906129f5565b610e4c565b005b610422600480360381019061041d91906124df565b610e71565b60405161042f9190612487565b60405180910390f35b610452600480360381019061044d9190612a78565b6110eb565b60405161045f91906123dc565b60405180910390f35b610482600480360381019061047d9190612845565b61117f565b005b61049e600480360381019061049991906124df565b611205565b6040516104ab9190612640565b60405180910390f35b6104ce60048036038101906104c99190612ab8565b611222565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061059b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105ab57506105aa826112b4565b5b9050919050565b6060600080546105c190612b27565b80601f01602080910402602001604051908101604052809291908181526020018280546105ed90612b27565b801561063a5780601f1061060f5761010080835404028352916020019161063a565b820191906000526020600020905b81548152906001019060200180831161061d57829003601f168201915b5050505050905090565b600061064f8261131e565b50610659826113a6565b9050919050565b610672828261066d6113e3565b6113eb565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106e85760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106df919061254d565b60405180910390fd5b60006106fc83836106f76113e3565b6113fd565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610772578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161076993929190612b58565b60405180910390fd5b50505050565b61079383838360405180602001604052806000815250610e4c565b505050565b600060076000838152602001908152602001600020549050919050565b6060600a600083815260200190815260200160002080546107d590612b27565b80601f016020809104026020016040519081016040528092919081815260200182805461080190612b27565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b50505050509050919050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081036108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890612bdb565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16610901826109cf565b73ffffffffffffffffffffffffffffffffffffffff1614610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90612c47565b60405180910390fd5b82600960008381526020019081526020016000208190555081600a6000838152602001908152602001600020908161098f9190612e13565b50807f313a576a74a34e735c2e4f3b7410711378f487f6ee99175cd77b87ecabc29ffe84846040516109c2929190612ee5565b60405180910390a2505050565b60006109da8261131e565b9050919050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90612f61565b60405180910390fd5b6000600b6000815480929190610a7890612fb0565b919050559050610a883382611617565b81600760008381526020019081526020016000208190555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550803373ffffffffffffffffffffffffffffffffffffffff167fb0b8ba1216ccc98284cdeb74c9f6cda0109a084172584a20554e1acd2efe1b3d84604051610b2b9190612640565b60405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610baa5760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610ba1919061254d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bf9611635565b610c0360006116bc565b565b60008060006060600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935060008403610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8890612bdb565b60405180910390fd5b6007600085815260200190815260200160002054925060096000858152602001908152602001600020549150600a60008581526020019081526020016000208054610cdb90612b27565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0790612b27565b8015610d545780601f10610d2957610100808354040283529160200191610d54565b820191906000526020600020905b815481529060010190602001808311610d3757829003601f168201915b505050505090509193509193565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d9b90612b27565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc790612b27565b8015610e145780601f10610de957610100808354040283529160200191610e14565b820191906000526020600020905b815481529060010190602001808311610df757829003601f168201915b5050505050905090565b60086020528060005260406000206000915090505481565b610e48610e416113e3565b8383611782565b5050565b610e57848484610676565b610e6b610e626113e3565b858585856118f1565b50505050565b6060600073ffffffffffffffffffffffffffffffffffffffff16610e9483611aa2565b73ffffffffffffffffffffffffffffffffffffffff1603610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee19061306a565b60405180910390fd5b600080600a60008581526020019081526020016000208054610f0b90612b27565b905011610f4d576040518060400160405280600681526020017f42726f6e7a650000000000000000000000000000000000000000000000000000815250610fea565b600a60008481526020019081526020016000208054610f6b90612b27565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9790612b27565b8015610fe45780601f10610fb957610100808354040283529160200191610fe4565b820191906000526020600020905b815481529060010190602001808311610fc757829003601f168201915b50505050505b905060008060001b600960008681526020019081526020016000205403611046576040518060400160405280600781526020017f50656e64696e670000000000000000000000000000000000000000000000000081525061107d565b6040518060400160405280600881526020017f56657269666965640000000000000000000000000000000000000000000000008152505b905060006110bf61108d86611adf565b61109687611adf565b85856040516020016110ab9493929190613586565b604051602081830303815290604052611bad565b9050806040516020016110d291906136aa565b6040516020818303038152906040529350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611187611635565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f95760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016111f0919061254d565b60405180910390fd5b611202816116bc565b50565b600060096000838152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16611242836109cf565b73ffffffffffffffffffffffffffffffffffffffff1614611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f90612c47565b60405180910390fd5b8060076000848152602001908152602001600020819055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008061132a83611aa2565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361139d57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016113949190612881565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6113f88383836001611bda565b505050565b60008061140984611aa2565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461144b5761144a818486611d9f565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114dc5761148d600085600080611bda565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461155f576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b611631828260405180602001604052806000815250611e63565b5050565b61163d6113e3565b73ffffffffffffffffffffffffffffffffffffffff1661165b610d62565b73ffffffffffffffffffffffffffffffffffffffff16146116ba5761167e6113e3565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016116b1919061254d565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117f357816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016117ea919061254d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e491906123dc565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611a9b578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b81526004016119509493929190613721565b6020604051808303816000875af192505050801561198c57506040513d601f19601f820116820180604052508101906119899190613782565b60015b611a10573d80600081146119bc576040519150601f19603f3d011682016040523d82523d6000602084013e6119c1565b606091505b506000815103611a0857836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119ff919061254d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a9957836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611a90919061254d565b60405180910390fd5b505b5050505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b606060006001611aee84611e87565b01905060008167ffffffffffffffff811115611b0d57611b0c612691565b5b6040519080825280601f01601f191660200182016040528015611b3f5781602001600182028036833780820191505090505b509050600082602001820190505b600115611ba2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611b9657611b956137af565b5b04945060008503611b4d575b819350505050919050565b6060611bd3826040518060600160405280604081526020016138af604091396001611fda565b9050919050565b8080611c135750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611d47576000611c238461131e565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611c8e57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611ca15750611c9f81846110eb565b155b15611ce357826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611cda919061254d565b60405180910390fd5b8115611d4557838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611daa83838361216e565b611e5e57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1f57806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611e169190612881565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611e559291906137de565b60405180910390fd5b505050565b611e6d838361222f565b611e82611e786113e3565b60008585856118f1565b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611ee5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611edb57611eda6137af565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611f22576d04ee2d6d415b85acef81000000008381611f1857611f176137af565b5b0492506020810190505b662386f26fc100008310611f5157662386f26fc100008381611f4757611f466137af565b5b0492506010810190505b6305f5e1008310611f7a576305f5e1008381611f7057611f6f6137af565b5b0492506008810190505b6127108310611f9f576127108381611f9557611f946137af565b5b0492506004810190505b60648310611fc25760648381611fb857611fb76137af565b5b0492506002810190505b600a8310611fd1576001810190505b80915050919050565b60606000845103611ffc57604051806020016040528060008152509050612167565b60008261202e5760036002865160046120159190613807565b61201f9190613849565b612029919061387d565b612055565b60036002865161203e9190613849565b612048919061387d565b60046120549190613807565b5b905060008167ffffffffffffffff81111561207357612072612691565b5b6040519080825280601f01601f1916602001820160405280156120a55781602001600182028036833780820191505090505b50905060018501602082018788518901602081018051600082525b8284101561211b576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f81168701518653600186019550506120c0565b808252891561215b5760038c51066001811461213e576002811461215157612159565b603d6001870353603d6002870353612159565b603d60018703535b505b50505050505080925050505b9392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561222657508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121e757506121e684846110eb565b5b8061222557508273ffffffffffffffffffffffffffffffffffffffff1661220d836113a6565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122a15760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612298919061254d565b60405180910390fd5b60006122af838360006113fd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123235760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161231a919061254d565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123718161233c565b811461237c57600080fd5b50565b60008135905061238e81612368565b92915050565b6000602082840312156123aa576123a9612332565b5b60006123b88482850161237f565b91505092915050565b60008115159050919050565b6123d6816123c1565b82525050565b60006020820190506123f160008301846123cd565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612431578082015181840152602081019050612416565b60008484015250505050565b6000601f19601f8301169050919050565b6000612459826123f7565b6124638185612402565b9350612473818560208601612413565b61247c8161243d565b840191505092915050565b600060208201905081810360008301526124a1818461244e565b905092915050565b6000819050919050565b6124bc816124a9565b81146124c757600080fd5b50565b6000813590506124d9816124b3565b92915050565b6000602082840312156124f5576124f4612332565b5b6000612503848285016124ca565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125378261250c565b9050919050565b6125478161252c565b82525050565b6000602082019050612562600083018461253e565b92915050565b6125718161252c565b811461257c57600080fd5b50565b60008135905061258e81612568565b92915050565b600080604083850312156125ab576125aa612332565b5b60006125b98582860161257f565b92505060206125ca858286016124ca565b9150509250929050565b6000806000606084860312156125ed576125ec612332565b5b60006125fb8682870161257f565b935050602061260c8682870161257f565b925050604061261d868287016124ca565b9150509250925092565b6000819050919050565b61263a81612627565b82525050565b60006020820190506126556000830184612631565b92915050565b61266481612627565b811461266f57600080fd5b50565b6000813590506126818161265b565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6126c98261243d565b810181811067ffffffffffffffff821117156126e8576126e7612691565b5b80604052505050565b60006126fb612328565b905061270782826126c0565b919050565b600067ffffffffffffffff82111561272757612726612691565b5b6127308261243d565b9050602081019050919050565b82818337600083830152505050565b600061275f61275a8461270c565b6126f1565b90508281526020810184848401111561277b5761277a61268c565b5b61278684828561273d565b509392505050565b600082601f8301126127a3576127a2612687565b5b81356127b384826020860161274c565b91505092915050565b600080604083850312156127d3576127d2612332565b5b60006127e185828601612672565b925050602083013567ffffffffffffffff81111561280257612801612337565b5b61280e8582860161278e565b9150509250929050565b60006020828403121561282e5761282d612332565b5b600061283c84828501612672565b91505092915050565b60006020828403121561285b5761285a612332565b5b60006128698482850161257f565b91505092915050565b61287b816124a9565b82525050565b60006020820190506128966000830184612872565b92915050565b60006080820190506128b16000830187612872565b6128be6020830186612631565b6128cb6040830185612631565b81810360608301526128dd818461244e565b905095945050505050565b6128f1816123c1565b81146128fc57600080fd5b50565b60008135905061290e816128e8565b92915050565b6000806040838503121561292b5761292a612332565b5b60006129398582860161257f565b925050602061294a858286016128ff565b9150509250929050565b600067ffffffffffffffff82111561296f5761296e612691565b5b6129788261243d565b9050602081019050919050565b600061299861299384612954565b6126f1565b9050828152602081018484840111156129b4576129b361268c565b5b6129bf84828561273d565b509392505050565b600082601f8301126129dc576129db612687565b5b81356129ec848260208601612985565b91505092915050565b60008060008060808587031215612a0f57612a0e612332565b5b6000612a1d8782880161257f565b9450506020612a2e8782880161257f565b9350506040612a3f878288016124ca565b925050606085013567ffffffffffffffff811115612a6057612a5f612337565b5b612a6c878288016129c7565b91505092959194509250565b60008060408385031215612a8f57612a8e612332565b5b6000612a9d8582860161257f565b9250506020612aae8582860161257f565b9150509250929050565b60008060408385031215612acf57612ace612332565b5b6000612add858286016124ca565b9250506020612aee85828601612672565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b3f57607f821691505b602082108103612b5257612b51612af8565b5b50919050565b6000606082019050612b6d600083018661253e565b612b7a6020830185612872565b612b87604083018461253e565b949350505050565b7f4e6f204341525620494420666f756e6400000000000000000000000000000000600082015250565b6000612bc5601083612402565b9150612bd082612b8f565b602082019050919050565b60006020820190508181036000830152612bf481612bb8565b9050919050565b7f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000600082015250565b6000612c31600f83612402565b9150612c3c82612bfb565b602082019050919050565b60006020820190508181036000830152612c6081612c24565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612cc97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c8c565b612cd38683612c8c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612d10612d0b612d06846124a9565b612ceb565b6124a9565b9050919050565b6000819050919050565b612d2a83612cf5565b612d3e612d3682612d17565b848454612c99565b825550505050565b600090565b612d53612d46565b612d5e818484612d21565b505050565b5b81811015612d8257612d77600082612d4b565b600181019050612d64565b5050565b601f821115612dc757612d9881612c67565b612da184612c7c565b81016020851015612db0578190505b612dc4612dbc85612c7c565b830182612d63565b50505b505050565b600082821c905092915050565b6000612dea60001984600802612dcc565b1980831691505092915050565b6000612e038383612dd9565b9150826002028217905092915050565b612e1c826123f7565b67ffffffffffffffff811115612e3557612e34612691565b5b612e3f8254612b27565b612e4a828285612d86565b600060209050601f831160018114612e7d5760008415612e6b578287015190505b612e758582612df7565b865550612edd565b601f198416612e8b86612c67565b60005b82811015612eb357848901518255600182019150602085019450602081019050612e8e565b86831015612ed05784890151612ecc601f891682612dd9565b8355505b6001600288020188555050505b505050505050565b6000604082019050612efa6000830185612631565b8181036020830152612f0c818461244e565b90509392505050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b6000612f4b600e83612402565b9150612f5682612f15565b602082019050919050565b60006020820190508181036000830152612f7a81612f3e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fbb826124a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fed57612fec612f81565b5b600182019050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613054602f83612402565b915061305f82612ff8565b604082019050919050565b6000602082019050818103600083015261308381613047565b9050919050565b600081905092915050565b7f7b226e616d65223a224341525620494420230000000000000000000000000000600082015250565b60006130cb60128361308a565b91506130d682613095565b601282019050919050565b60006130ec826123f7565b6130f6818561308a565b9350613106818560208601612413565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b600061314860028361308a565b915061315382613112565b600282019050919050565b7f226465736372697074696f6e223a22596f7572204d6f64756c6172204341525660008201527f2049442077697468205765623220416368696576656d656e742042696e64696e60208201527f67222c0000000000000000000000000000000000000000000000000000000000604082015250565b60006131e060438361308a565b91506131eb8261315e565b604382019050919050565b7f22696d616765223a2268747470733a2f2f6170692e64696365626561722e636f60008201527f6d2f372e782f6964656e7469636f6e2f7376673f736565643d00000000000000602082015250565b600061325260398361308a565b915061325d826131f6565b603982019050919050565b7f2261747472696275746573223a5b000000000000000000000000000000000000600082015250565b600061329e600e8361308a565b91506132a982613268565b600e82019050919050565b7f7b2274726169745f74797065223a224e6574776f726b222c2276616c7565223a60008201527f22424e4220546573746e6574227d2c0000000000000000000000000000000000602082015250565b6000613310602f8361308a565b915061331b826132b4565b602f82019050919050565b7f7b2274726169745f74797065223a2252657075746174696f6e2054696572222c60008201527f2276616c7565223a220000000000000000000000000000000000000000000000602082015250565b600061338260298361308a565b915061338d82613326565b602982019050919050565b7f227d2c0000000000000000000000000000000000000000000000000000000000600082015250565b60006133ce60038361308a565b91506133d982613398565b600382019050919050565b7f7b2274726169745f74797065223a225765623220416368696576656d656e747360008201527f222c2276616c7565223a22000000000000000000000000000000000000000000602082015250565b6000613440602b8361308a565b915061344b826133e4565b602b82019050919050565b7f7b2274726169745f74797065223a224964656e746974792054797065222c227660008201527f616c7565223a224d6f64756c6172227d2c000000000000000000000000000000602082015250565b60006134b260318361308a565b91506134bd82613456565b603182019050919050565b7f7b2274726169745f74797065223a225374616e64617264222c2276616c75652260008201527f3a224552432d37323331227d0000000000000000000000000000000000000000602082015250565b6000613524602c8361308a565b915061352f826134c8565b602c82019050919050565b7f5d7d000000000000000000000000000000000000000000000000000000000000600082015250565b600061357060028361308a565b915061357b8261353a565b600282019050919050565b6000613591826130be565b915061359d82876130e1565b91506135a88261313b565b91506135b3826131d3565b91506135be82613245565b91506135ca82866130e1565b91506135d58261313b565b91506135e082613291565b91506135eb82613303565b91506135f682613375565b915061360282856130e1565b915061360d826133c1565b915061361882613433565b915061362482846130e1565b915061362f826133c1565b915061363a826134a5565b915061364582613517565b915061365082613563565b915081905095945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000613694601d8361308a565b915061369f8261365e565b601d82019050919050565b60006136b582613687565b91506136c182846130e1565b915081905092915050565b600081519050919050565b600082825260208201905092915050565b60006136f3826136cc565b6136fd81856136d7565b935061370d818560208601612413565b6137168161243d565b840191505092915050565b6000608082019050613736600083018761253e565b613743602083018661253e565b6137506040830185612872565b818103606083015261376281846136e8565b905095945050505050565b60008151905061377c81612368565b92915050565b60006020828403121561379857613797612332565b5b60006137a68482850161376d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006040820190506137f3600083018561253e565b6138006020830184612872565b9392505050565b6000613812826124a9565b915061381d836124a9565b925082820261382b816124a9565b9150828204841483151761384257613841612f81565b5b5092915050565b6000613854826124a9565b915061385f836124a9565b925082820190508082111561387757613876612f81565b5b92915050565b6000613888826124a9565b9150613893836124a9565b9250826138a3576138a26137af565b5b82820490509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122079c3162193803a71d8305ad364554e3c73593ea94e8862ec43d5cb9c5bf5b85d64736f6c634300081c0033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063b88d4fde1161007c578063b88d4fde146103ec578063c87b56dd14610408578063e985e9c514610438578063f2fde38b14610468578063fc344ceb14610484578063ff30a118146104b457610158565b8063715018a6146103275780637a00d3c4146103315780638da5cb5b1461036457806395d89b41146103825780639c2806c7146103a0578063a22cb465146103d057610158565b806345692b821161011557806345692b821461022f57806349465f471461025f5780635aa89f011461028f5780636352211e146102ab5780636850b87f146102db57806370a08231146102f757610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806323b872dd146101f757806342842e0e14610213575b600080fd5b61017760048036038101906101729190612394565b6104d0565b60405161018491906123dc565b60405180910390f35b6101956105b2565b6040516101a29190612487565b60405180910390f35b6101c560048036038101906101c091906124df565b610644565b6040516101d2919061254d565b60405180910390f35b6101f560048036038101906101f09190612594565b610660565b005b610211600480360381019061020c91906125d4565b610676565b005b61022d600480360381019061022891906125d4565b610778565b005b610249600480360381019061024491906124df565b610798565b6040516102569190612640565b60405180910390f35b610279600480360381019061027491906124df565b6107b5565b6040516102869190612487565b60405180910390f35b6102a960048036038101906102a491906127bc565b61085a565b005b6102c560048036038101906102c091906124df565b6109cf565b6040516102d2919061254d565b60405180910390f35b6102f560048036038101906102f09190612818565b6109e1565b005b610311600480360381019061030c9190612845565b610b37565b60405161031e9190612881565b60405180910390f35b61032f610bf1565b005b61034b60048036038101906103469190612845565b610c05565b60405161035b949392919061289c565b60405180910390f35b61036c610d62565b604051610379919061254d565b60405180910390f35b61038a610d8c565b6040516103979190612487565b60405180910390f35b6103ba60048036038101906103b59190612845565b610e1e565b6040516103c79190612881565b60405180910390f35b6103ea60048036038101906103e59190612914565b610e36565b005b610406600480360381019061040191906129f5565b610e4c565b005b610422600480360381019061041d91906124df565b610e71565b60405161042f9190612487565b60405180910390f35b610452600480360381019061044d9190612a78565b6110eb565b60405161045f91906123dc565b60405180910390f35b610482600480360381019061047d9190612845565b61117f565b005b61049e600480360381019061049991906124df565b611205565b6040516104ab9190612640565b60405180910390f35b6104ce60048036038101906104c99190612ab8565b611222565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061059b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bff