@coti-io/coti-contracts-examples
Version:
Example smart contracts demonstrating the use of COTI's GC technology, including integrations with MPC, private ERC20, and ERC721 contracts.
363 lines (362 loc) • 34.7 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "PrivateIdentityRegistry",
"sourceName": "contracts/PrivateIdentityRegistry.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "ctUint64",
"name": "identifier",
"type": "uint256"
}
],
"name": "Identifier",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "wallet",
"type": "address"
}
],
"name": "NewDid",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "wallet",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "registrarId",
"type": "uint256"
}
],
"name": "NewRegistrar",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferStarted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "wallet",
"type": "address"
}
],
"name": "RemoveDid",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "wallet",
"type": "address"
}
],
"name": "RemoveRegistrar",
"type": "event"
},
{
"inputs": [],
"name": "acceptOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "wallet",
"type": "address"
}
],
"name": "addDid",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "wallet",
"type": "address"
},
{
"internalType": "uint256",
"name": "registrarId",
"type": "uint256"
}
],
"name": "addRegistrar",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "wallet",
"type": "address"
},
{
"internalType": "string",
"name": "identifier",
"type": "string"
}
],
"name": "getIdentifier",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "wallet",
"type": "address"
}
],
"name": "getRegistrar",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "allowed",
"type": "address"
},
{
"internalType": "string[]",
"name": "identifiers",
"type": "string[]"
}
],
"name": "grantAccess",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pendingOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "registrars",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "wallet",
"type": "address"
}
],
"name": "removeDid",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "wallet",
"type": "address"
}
],
"name": "removeRegistrar",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "allowed",
"type": "address"
},
{
"internalType": "string[]",
"name": "identifiers",
"type": "string[]"
}
],
"name": "revokeAccess",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "wallet",
"type": "address"
},
{
"internalType": "string",
"name": "identifier",
"type": "string"
},
{
"components": [
{
"internalType": "ctUint64",
"name": "ciphertext",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct itUint64",
"name": "itValue",
"type": "tuple"
}
],
"name": "setIdentifier",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61008b565b600180546001600160a01b03191690556100388161003b565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a1b8061009a6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063ba904eed11610066578063ba904eed146101ff578063e30c397814610212578063f2fde38b14610223578063f9ce73a71461023657600080fd5b80638da5cb5b1461018b57806393775a68146101b057806395cf57b0146101c35780639e3e9119146101d657600080fd5b806379ba5097116100d357806379ba50971461012a57806389aeca76146101325780638c9d677e146101655780638cc562b11461017857600080fd5b80632dc27e45146100fa578063715018a61461010f57806372d1282614610117575b600080fd5b61010d6101083660046113ee565b610249565b005b61010d6102a2565b61010d61012536600461146d565b6102b6565b61010d610402565b61015261014036600461146d565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61010d610173366004611488565b610490565b61010d61018636600461146d565b610539565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161015c565b61010d6101be3660046114b2565b61083c565b61010d6101d1366004611538565b6108ce565b6101526101e436600461146d565b6001600160a01b031660009081526003602052604090205490565b61010d61020d36600461146d565b610ac7565b6001546001600160a01b0316610198565b61010d61023136600461146d565b610b86565b61010d6102443660046114b2565b610c04565b61029c8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610297925061029291508690506115fb565b610c99565b610d2f565b50505050565b6102aa611099565b6102b460006110f3565b565b336000908152600260205260409020546103175760405162461bcd60e51b815260206004820152601660248201527f596f75277265206e6f742061207265676973747261720000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038116600090815260036020526040902054156103a35760405162461bcd60e51b815260206004820152602160248201527f546869732077616c6c657420697320616c72656164792072656769737465726560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161030e565b6001600160a01b038116600081815260036020908152604080832033845260028352928190205483555192835290917f1a7870413a438c7a203315009a595fc3d575dee97c4a3e1df73ce689bebffb1191015b60405180910390a15050565b60015433906001600160a01b031681146104845760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e65720000000000000000000000000000000000000000000000606482015260840161030e565b61048d816110f3565b50565b610498611099565b600081116104e85760405162461bcd60e51b815260206004820152601b60248201527f7265676973747261724964206e6565647320746f206265203e20300000000000604482015260640161030e565b6001600160a01b038216600081815260026020908152604091829020849055815192835282018390527f7a646a63968ac3a621a7656c4b1542cae70e30dbdd3b947c38d8da7bb55f13b191016103f6565b6001600160a01b03811660009081526003602052604090205481906105a05760405162461bcd60e51b815260206004820152601c60248201527f546869732077616c6c65742069736e2774207265676973746572656400000000604482015260640161030e565b336000908152600260209081526040808320546001600160a01b0386168452600390925290912054839190811461063f5760405162461bcd60e51b815260206004820152602160248201527f596f75277265206e6f74206d616e6167696e672074686973206964656e74697460448201527f7900000000000000000000000000000000000000000000000000000000000000606482015260840161030e565b6001600160a01b038416600090815260036020908152604080832060020180548251818502810185019093528083529192909190849084015b82821015610724578382906000526020600020018054610697906116a0565b80601f01602080910402602001604051908101604052809291908181526020018280546106c3906116a0565b80156107105780601f106106e557610100808354040283529160200191610710565b820191906000526020600020905b8154815290600101906020018083116106f357829003601f168201915b505050505081526020019060010190610678565b5050825192935060009150505b818110156107bc5761074b6107466000611119565b61116d565b60036000896001600160a01b03166001600160a01b03168152602001908152602001600020600101848381518110610785576107856116da565b602002602001015160405161079a9190611714565b90815260405190819003602001902055806107b481611746565b915050610731565b506001600160a01b0386166000908152600360205260408120818155906107e66002830182611304565b50506040516001600160a01b03871681527f377ccce6b58db67dd71f2bf83dd5ae78a6d065428299d793fbbdaadadcd31989906020015b60405180910390a1505050505050565b6000546001600160a01b031690565b60005b8181101561029c573360009081526004602090815260408083206001600160a01b0388168452909152812084848481811061087c5761087c6116da565b905060200281019061088e9190611760565b60405161089c9291906117c5565b908152604051908190036020019020805491151560ff19909216919091179055806108c681611746565b91505061083f565b6001600160a01b03831660009081526003602052604090205483906109355760405162461bcd60e51b815260206004820152601c60248201527f546869732077616c6c65742069736e2774207265676973746572656400000000604482015260640161030e565b8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250339250610978915061082d9050565b6001600160a01b031614806109ce57506001600160a01b03821660009081526004602090815260408083203384529091529081902090516109ba908390611714565b9081526040519081900360200190205460ff165b610a405760405162461bcd60e51b815260206004820152603a60248201527f55736572206469646e2774206769766520796f75207065726d697373696f6e2060448201527f746f206163636573732074686973206964656e7469666965722e000000000000606482015260840161030e565b7fc5f16b039bb1e92bc3b203503c45eac747c4cf6de3a0f4b990345b8eeadb450c610ab9610ab3600360008a6001600160a01b03166001600160a01b031681526020019081526020016000206001018888604051610a9f9291906117c5565b9081526020016040518091039020546111c7565b336111d7565b60405190815260200161081d565b610acf611099565b6001600160a01b038116600090815260026020526040902054610b345760405162461bcd60e51b815260206004820152601760248201527f77616c6c6574206973206e6f7420726567697374726172000000000000000000604482015260640161030e565b6001600160a01b03811660008181526002602090815260408083209290925590519182527fd7bddddcf89432d764b94c1529db734041d1dc33838e7f989d7e12302f09d10a910160405180910390a150565b610b8e611099565b600180546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff199091168117909155610bcc6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60005b8181101561029c573360009081526004602090815260408083206001600160a01b03881684529091529020600190848484818110610c4757610c476116da565b9050602002810190610c599190611760565b604051610c679291906117c5565b908152604051908190036020019020805491151560ff1990921691909117905580610c9181611746565b915050610c07565b805160208201516040517fe4f36e1000000000000000000000000000000000000000000000000000000000815260009260649263e4f36e1092610ce692600160fa1b9290916004016117d5565b6020604051808303816000875af1158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611838565b92915050565b6001600160a01b0383166000908152600360205260409020548390610d965760405162461bcd60e51b815260206004820152601c60248201527f546869732077616c6c65742069736e2774207265676973746572656400000000604482015260640161030e565b336000908152600260209081526040808320546001600160a01b03881684526003909252909120548591908114610e355760405162461bcd60e51b815260206004820152602160248201527f596f75277265206e6f74206d616e6167696e672074686973206964656e74697460448201527f7900000000000000000000000000000000000000000000000000000000000000606482015260840161030e565b610e3e8461116d565b60036000886001600160a01b03166001600160a01b0316815260200190815260200160002060010186604051610e749190611714565b908152604080519182900360209081018320939093556001600160a01b0389166000908152600384528181206002018054808602850186019093528284529093909190849084015b82821015610f68578382906000526020600020018054610edb906116a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610f07906116a0565b8015610f545780601f10610f2957610100808354040283529160200191610f54565b820191906000526020600020905b815481529060010190602001808311610f3757829003601f168201915b505050505081526020019060010190610ebc565b5050825192935060009150505b81811015610ffc578780519060200120600360008b6001600160a01b03166001600160a01b031681526020019081526020016000206002018281548110610fbe57610fbe6116da565b90600052602060002001604051610fd59190611851565b604051809103902003610fea57505050611091565b80610ff481611746565b915050610f75565b50601461100a8260016118c7565b11156110585760405162461bcd60e51b815260206004820152601460248201527f546f6f206d616e79206964656e74696669657273000000000000000000000000604482015260640161030e565b6001600160a01b03881660009081526003602090815260408220600201805460018101825590835291200161108d8882611925565b5050505b505050505050565b6000546001600160a01b031633146102b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030e565b6001805473ffffffffffffffffffffffffffffffffffffffff1916905561048d816112a7565b6040517fd9b60b60000000000000000000000000000000000000000000000000000000008152600160fa1b600482015267ffffffffffffffff8216602482015260009060649063d9b60b6090604401610ce6565b6000606463c50c9c0260045b60f81b846040518363ffffffff1660e01b8152600401610ce69291907fff00000000000000000000000000000000000000000000000000000000000000929092168252602082015260400190565b6000606463d2c135e56004611179565b60408051606083901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201528151601481830301815260348201928390527f3c6f0e6800000000000000000000000000000000000000000000000000000000909252600091606491633c6f0e689161125d91600160fa1b9188916038016117d5565b6020604051808303816000875af115801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190611838565b9392505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b508054600082559060005260206000209081019061048d91905b8082111561133b576000611332828261133f565b5060010161131e565b5090565b50805461134b906116a0565b6000825580601f1061135b575050565b601f01602090049060005260206000209081019061048d91905b8082111561133b5760008155600101611375565b80356001600160a01b03811681146113a057600080fd5b919050565b60008083601f8401126113b757600080fd5b50813567ffffffffffffffff8111156113cf57600080fd5b6020830191508360208285010111156113e757600080fd5b9250929050565b6000806000806060858703121561140457600080fd5b61140d85611389565b9350602085013567ffffffffffffffff8082111561142a57600080fd5b611436888389016113a5565b9095509350604087013591508082111561144f57600080fd5b5085016040818803121561146257600080fd5b939692955090935050565b60006020828403121561147f57600080fd5b6112a082611389565b6000806040838503121561149b57600080fd5b6114a483611389565b946020939093013593505050565b6000806000604084860312156114c757600080fd5b6114d084611389565b9250602084013567ffffffffffffffff808211156114ed57600080fd5b818601915086601f83011261150157600080fd5b81358181111561151057600080fd5b8760208260051b850101111561152557600080fd5b6020830194508093505050509250925092565b60008060006040848603121561154d57600080fd5b61155684611389565b9250602084013567ffffffffffffffff81111561157257600080fd5b61157e868287016113a5565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156115c4576115c461158b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156115f3576115f361158b565b604052919050565b60006040823603121561160d57600080fd5b6116156115a1565b8235815260208084013567ffffffffffffffff8082111561163557600080fd5b9085019036601f83011261164857600080fd5b81358181111561165a5761165a61158b565b61166c84601f19601f840116016115ca565b9150808252368482850101111561168257600080fd5b80848401858401376000908201840152918301919091525092915050565b600181811c908216806116b457607f821691505b6020821081036116d457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101561170b5781810151838201526020016116f3565b50506000910152565b600082516117268184602087016116f0565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6000600019820361175957611759611730565b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261179557600080fd5b83018035915067ffffffffffffffff8211156117b057600080fd5b6020019150368190038213156113e757600080fd5b8183823760009101908152919050565b7fff000000000000000000000000000000000000000000000000000000000000008416815282602082015260606040820152600082518060608401526118228160808501602087016116f0565b601f01601f191691909101608001949350505050565b60006020828403121561184a57600080fd5b5051919050565b600080835461185f816116a0565b60018281168015611877576001811461188c576118bb565b60ff19841687528215158302870194506118bb565b8760005260208060002060005b858110156118b25781548a820152908401908201611899565b50505082870194505b50929695505050505050565b80820180821115610d2957610d29611730565b601f82111561192057600081815260208120601f850160051c810160208610156119015750805b601f850160051c820191505b818110156110915782815560010161190d565b505050565b815167ffffffffffffffff81111561193f5761193f61158b565b6119538161194d84546116a0565b846118da565b602080601f83116001811461198857600084156119705750858301515b600019600386901b1c1916600185901b178555611091565b600085815260208120601f198616915b828110156119b757888601518255948401946001909101908401611998565b50858210156119d55787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220cc84ee07ae2bc538e7b9afd32555bcca98f92d3a703831d4b46306456d5ddd8964736f6c63430008130033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063ba904eed11610066578063ba904eed146101ff578063e30c397814610212578063f2fde38b14610223578063f9ce73a71461023657600080fd5b80638da5cb5b1461018b57806393775a68146101b057806395cf57b0146101c35780639e3e9119146101d657600080fd5b806379ba5097116100d357806379ba50971461012a57806389aeca76146101325780638c9d677e146101655780638cc562b11461017857600080fd5b80632dc27e45146100fa578063715018a61461010f57806372d1282614610117575b600080fd5b61010d6101083660046113ee565b610249565b005b61010d6102a2565b61010d61012536600461146d565b6102b6565b61010d610402565b61015261014036600461146d565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61010d610173366004611488565b610490565b61010d61018636600461146d565b610539565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161015c565b61010d6101be3660046114b2565b61083c565b61010d6101d1366004611538565b6108ce565b6101526101e436600461146d565b6001600160a01b031660009081526003602052604090205490565b61010d61020d36600461146d565b610ac7565b6001546001600160a01b0316610198565b61010d61023136600461146d565b610b86565b61010d6102443660046114b2565b610c04565b61029c8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610297925061029291508690506115fb565b610c99565b610d2f565b50505050565b6102aa611099565b6102b460006110f3565b565b336000908152600260205260409020546103175760405162461bcd60e51b815260206004820152601660248201527f596f75277265206e6f742061207265676973747261720000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038116600090815260036020526040902054156103a35760405162461bcd60e51b815260206004820152602160248201527f546869732077616c6c657420697320616c72656164792072656769737465726560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161030e565b6001600160a01b038116600081815260036020908152604080832033845260028352928190205483555192835290917f1a7870413a438c7a203315009a595fc3d575dee97c4a3e1df73ce689bebffb1191015b60405180910390a15050565b60015433906001600160a01b031681146104845760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e65720000000000000000000000000000000000000000000000606482015260840161030e565b61048d816110f3565b50565b610498611099565b600081116104e85760405162461bcd60e51b815260206004820152601b60248201527f7265676973747261724964206e6565647320746f206265203e20300000000000604482015260640161030e565b6001600160a01b038216600081815260026020908152604091829020849055815192835282018390527f7a646a63968ac3a621a7656c4b1542cae70e30dbdd3b947c38d8da7bb55f13b191016103f6565b6001600160a01b03811660009081526003602052604090205481906105a05760405162461bcd60e51b815260206004820152601c60248201527f546869732077616c6c65742069736e2774207265676973746572656400000000604482015260640161030e565b336000908152600260209081526040808320546001600160a01b0386168452600390925290912054839190811461063f5760405162461bcd60e51b815260206004820152602160248201527f596f75277265206e6f74206d616e6167696e672074686973206964656e74697460448201527f7900000000000000000000000000000000000000000000000000000000000000606482015260840161030e565b6001600160a01b038416600090815260036020908152604080832060020180548251818502810185019093528083529192909190849084015b82821015610724578382906000526020600020018054610697906116a0565b80601f01602080910402602001604051908101604052809291908181526020018280546106c3906116a0565b80156107105780601f106106e557610100808354040283529160200191610710565b820191906000526020600020905b8154815290600101906020018083116106f357829003601f168201915b505050505081526020019060010190610678565b5050825192935060009150505b818110156107bc5761074b6107466000611119565b61116d565b60036000896001600160a01b03166001600160a01b03168152602001908152602001600020600101848381518110610785576107856116da565b602002602001015160405161079a9190611714565b90815260405190819003602001902055806107b481611746565b915050610731565b506001600160a01b0386166000908152600360205260408120818155906107e66002830182611304565b50506040516001600160a01b03871681527f377ccce6b58db67dd71f2bf83dd5ae78a6d065428299d793fbbdaadadcd31989906020015b60405180910390a1505050505050565b6000546001600160a01b031690565b60005b8181101561029c573360009081526004602090815260408083206001600160a01b0388168452909152812084848481811061087c5761087c6116da565b905060200281019061088e9190611760565b60405161089c9291906117c5565b908152604051908190036020019020805491151560ff19909216919091179055806108c681611746565b91505061083f565b6001600160a01b03831660009081526003602052604090205483906109355760405162461bcd60e51b815260206004820152601c60248201527f546869732077616c6c65742069736e2774207265676973746572656400000000604482015260640161030e565b8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250339250610978915061082d9050565b6001600160a01b031614806109ce57506001600160a01b03821660009081526004602090815260408083203384529091529081902090516109ba908390611714565b9081526040519081900360200190205460ff165b610a405760405162461bcd60e51b815260206004820152603a60248201527f55736572206469646e2774206769766520796f75207065726d697373696f6e2060448201527f746f206163636573732074686973206964656e7469666965722e000000000000606482015260840161030e565b7fc5f16b039bb1e92bc3b203503c45eac747c4cf6de3a0f4b990345b8eeadb450c610ab9610ab3600360008a6001600160a01b03166001600160a01b031681526020019081526020016000206001018888604051610a9f9291906117c5565b9081526020016040518091039020546111c7565b336111d7565b60405190815260200161081d565b610acf611099565b6001600160a01b038116600090815260026020526040902054610b345760405162461bcd60e51b815260206004820152601760248201527f77616c6c6574206973206e6f7420726567697374726172000000000000000000604482015260640161030e565b6001600160a01b03811660008181526002602090815260408083209290925590519182527fd7bddddcf89432d764b94c1529db734041d1dc33838e7f989d7e12302f09d10a910160405180910390a150565b610b8e611099565b600180546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff199091168117909155610bcc6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60005b8181101561029c573360009081526004602090815260408083206001600160a01b03881684529091529020600190848484818110610c4757610c476116da565b9050602002810190610c599190611760565b604051610c679291906117c5565b908152604051908190036020019020805491151560ff1990921691909117905580610c9181611746565b915050610c07565b805160208201516040517fe4f36e1000000000000000000000000000000000000000000000000000000000815260009260649263e4f36e1092610ce692600160fa1b9290916004016117d5565b6020604051808303816000875af1158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611838565b92915050565b6001600160a01b0383166000908152600360205260409020548390610d965760405162461bcd60e51b815260206004820152601c60248201527f546869732077616c6c65742069736e2774207265676973746572656400000000604482015260640161030e565b336000908152600260209081526040808320546001600160a01b03881684526003909252909120548591908114610e355760405162461bcd60e51b815260206004820152602160248201527f596f75277265206e6f74206d616e6167696e672074686973206964656e74697460448201527f7900000000000000000000000000000000000000000000000000000000000000606482015260840161030e565b610e3e8461116d565b60036000886001600160a01b03166001600160a01b0316815260200190815260200160002060010186604051610e749190611714565b908152604080519182900360209081018320939093556001600160a01b0389166000908152600384528181206002018054808602850186019093528284529093909190849084015b82821015610f68578382906000526020600020018054610edb906116a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610f07906116a0565b8015610f545780601f10610f2957610100808354040283529160200191610f54565b820191906000526020600020905b815481529060010190602001808311610f3757829003601f168201915b505050505081526020019060010190610ebc565b5050825192935060009150505b81811015610ffc578780519060200120600360008b6001600160a01b03166001600160a01b031681526020019081526020016000206002018281548110610fbe57610fbe6116da565b90600052602060002001604051610fd59190611851565b604051809103902003610fea57505050611091565b80610ff481611746565b915050610f75565b50601461100a8260016118c7565b11156110585760405162461bcd60e51b815260206004820152601460248201527f546f6f206d616e79206964656e74696669657273000000000000000000000000604482015260640161030e565b6001600160a01b03881660009081526003602090815260408220600201805460018101825590835291200161108d8882611925565b5050505b505050505050565b6000546001600160a01b031633146102b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030e565b6001805473ffffffffffffffffffffffffffffffffffffffff1916905561048d816112a7565b6040517fd9b60b60000000000000000000000000000000000000000000000000000000008152600160fa1b600482015267ffffffffffffffff8216602482015260009060649063d9b60b6090604401610ce6565b6000606463c50c9c0260045b60f81b846040518363ffffffff1660e01b8152600401610ce69291907fff00000000000000000000000000000000000000000000000000000000000000929092168252602082015260400190565b6000606463d2c135e56004611179565b60408051606083901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201528151601481830301815260348201928390527f3c6f0e6800000000000000000000000000000000000000000000000000000000909252600091606491633c6f0e689161125d91600160fa1b9188916038016117d5565b6020604051808303816000875af115801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190611838565b9392505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b508054600082559060005260206000209081019061048d91905b8082111561133b576000611332828261133f565b5060010161131e565b5090565b50805461134b906116a0565b6000825580601f1061135b575050565b601f01602090049060005260206000209081019061048d91905b8082111561133b5760008155600101611375565b80356001600160a01b03811681146113a057600080fd5b919050565b60008083601f8401126113b757600080fd5b50813567ffffffffffffffff8111156113cf57600080fd5b6020830191508360208285010111156113e757600080fd5b9250929050565b6000806000806060858703121561140457600080fd5b61140d85611389565b9350602085013567ffffffffffffffff8082111561142a57600080fd5b611436888389016113a5565b9095509350604087013591508082111561144f57600080fd5b5085016040818803121561146257600080fd5b939692955090935050565b60006020828403121561147f57600080fd5b6112a082611389565b6000806040838503121561149b57600080fd5b6114a483611389565b946020939093013593505050565b6000806000604084860312156114c757600080fd5b6114d084611389565b9250602084013567ffffffffffffffff808211156114ed57600080fd5b818601915086601f83011261150157600080fd5b81358181111561151057600080fd5b8760208260051b850101111561152557600080fd5b6020830194508093505050509250925092565b60008060006040848603121561154d57600080fd5b61155684611389565b9250602084013567ffffffffffffffff81111561157257600080fd5b61157e868287016113a5565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156115c4576115c461158b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156115f3576115f361158b565b604052919050565b60006040823603121561160d57600080fd5b6116156115a1565b8235815260208084013567ffffffffffffffff8082111561163557600080fd5b9085019036601f83011261164857600080fd5b81358181111561165a5761165a61158b565b61166c84601f19601f840116016115ca565b9150808252368482850101111561168257600080fd5b80848401858401376000908201840152918301919091525092915050565b600181811c908216806116b457607f821691505b6020821081036116d457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101561170b5781810151838201526020016116f3565b50506000910152565b600082516117268184602087016116f0565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6000600019820361175957611759611730565b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261179557600080fd5b83018035915067ffffffffffffffff8211156117b057600080fd5b6020019150368190038213156113e757600080fd5b8183823760009101908152919050565b7fff000000000000000000000000000000000000000000000000000000000000008416815282602082015260606040820152600082518060608401526118228160808501602087016116f0565b601f01601f191691909101608001949350505050565b60006020828403121561184a57600080fd5b5051919050565b600080835461185f816116a0565b60018281168015611877576001811461188c576118bb565b60ff19841687528215158302870194506118bb565b8760005260208060002060005b858110156118b25781548a820152908401908201611899565b50505082870194505b50929695505050505050565b80820180821115610d2957610d29611730565b601f82111561192057600081815260208120601f850160051c810160208610156119015750805b601f850160051c820191505b818110156110915782815560010161190d565b505050565b815167ffffffffffffffff81111561193f5761193f61158b565b6119538161194d84546116a0565b846118da565b602080601f83116001811461198857600084156119705750858301515b600019600386901b1c1916600185901b178555611091565b600085815260208120601f198616915b828110156119b757888601518255948401946001909101908401611998565b50858210156119d55787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220cc84ee07ae2bc538e7b9afd32555bcca98f92d3a703831d4b46306456d5ddd8964736f6c63430008130033",
"linkReferences": {},
"deployedLinkReferences": {}
}