@ensuro/core
Version:
Ensuro - Decentralized insurance protocol
930 lines (929 loc) • 40.6 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "PolicyPoolMock",
"sourceName": "contracts/mocks/PolicyPoolMock.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IERC20Metadata",
"name": "currency_",
"type": "address"
},
{
"internalType": "contract IAccessManager",
"name": "access_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "purePremium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "partnerCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCoc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srCoc",
"type": "uint256"
},
{
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"internalType": "uint40",
"name": "start",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"indexed": false,
"internalType": "struct Policy.PolicyData",
"name": "policy",
"type": "tuple"
}
],
"name": "NewPolicy",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "oldPolicyId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "newPolicyId",
"type": "uint256"
}
],
"name": "PolicyReplaced",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "payout",
"type": "uint256"
}
],
"name": "PolicyResolved",
"type": "event"
},
{
"inputs": [],
"name": "MAX_INT",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "access",
"outputs": [
{
"internalType": "contract IAccessManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "currency",
"outputs": [
{
"internalType": "contract IERC20Metadata",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IEToken",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "deposit",
"outputs": [],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "purePremium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "partnerCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCoc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srCoc",
"type": "uint256"
},
{
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"internalType": "uint40",
"name": "start",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"internalType": "struct Policy.PolicyData",
"name": "policy",
"type": "tuple"
}
],
"name": "expirePolicy",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"name": "getPolicyHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"components": [
{
"internalType": "uint256",
"name": "moc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCollRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "collRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroPpFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroCocFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrRoc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srRoc",
"type": "uint256"
}
],
"internalType": "struct IRiskModule.Params",
"name": "rmParams",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "start",
"type": "uint40"
}
],
"name": "initializeAndEmitPolicy",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"name": "isActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "purePremium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "partnerCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCoc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srCoc",
"type": "uint256"
},
{
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"internalType": "uint40",
"name": "start",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"internalType": "struct Policy.PolicyData",
"name": "policy",
"type": "tuple"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint96",
"name": "internalId",
"type": "uint96"
}
],
"name": "newPolicy",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "purePremium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "partnerCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCoc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srCoc",
"type": "uint256"
},
{
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"internalType": "uint40",
"name": "start",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"internalType": "struct Policy.PolicyData",
"name": "oldPolicy",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "purePremium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "partnerCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCoc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srCoc",
"type": "uint256"
},
{
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"internalType": "uint40",
"name": "start",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"internalType": "struct Policy.PolicyData",
"name": "newPolicy_",
"type": "tuple"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint96",
"name": "internalId",
"type": "uint96"
}
],
"name": "replacePolicy",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "purePremium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "partnerCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCoc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srCoc",
"type": "uint256"
},
{
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"internalType": "uint40",
"name": "start",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"internalType": "struct Policy.PolicyData",
"name": "policy",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
}
],
"name": "resolvePolicy",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srScr",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "purePremium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "partnerCommission",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCoc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srCoc",
"type": "uint256"
},
{
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"internalType": "uint40",
"name": "start",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"internalType": "struct Policy.PolicyData",
"name": "policy",
"type": "tuple"
},
{
"internalType": "bool",
"name": "customerWon",
"type": "bool"
}
],
"name": "resolvePolicyFullPayout",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "treasury",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IEToken",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"bytecode": "0x6080604052348015600e575f5ffd5b5060405161117a38038061117a833981016040819052602b916070565b5f80546001600160a01b039384166001600160a01b0319918216179091556001805492909316911617905560a3565b6001600160a01b0381168114606d575f5ffd5b50565b5f5f604083850312156080575f5ffd5b8251608981605a565b6020840151909250609881605a565b809150509250929050565b6110ca806100b05f395ff3fe608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c806371907f171161008857806382afd23b1161006357806382afd23b146101c2578063e5a6b10f146101f3578063f3fef3a314610203578063ffa600e314610216575f5ffd5b806371907f171461017f578063792da09e146101905780637a702b3c146101af575f5ffd5b806361d027b3116100c357806361d027b31461012c5780636769a76f1461014657806368d9523c146101595780636af6f1ef1461016c575f5ffd5b8063098d3228146100e95780633ed7c1ae1461010457806347e7ef2414610117575b5f5ffd5b6100f15f1981565b6040519081526020015b60405180910390f35b6100f1610112366004610cb9565b610229565b61012a610125366004610d12565b6102f2565b005b5f5b6040516001600160a01b0390911681526020016100fb565b6100f1610154366004610d3c565b61033f565b61012a610167366004610d8b565b6103c9565b61012a61017a366004610e77565b610439565b6001546001600160a01b031661012e565b6100f161019e366004610e99565b5f9081526003602052604090205490565b61012a6101bd366004610eb0565b610454565b6101e36101d0366004610e99565b5f90815260036020526040902054151590565b60405190151581526020016100fb565b5f546001600160a01b031661012e565b6100f1610211366004610d12565b610470565b61012a610224366004610edb565b6104ba565b5f816001600160601b031660608561016001516001600160a01b0316901b6102519190610f2b565b845261025c846104e1565b84515f90815260036020526040908190209190915561016086015190516001600160a01b038216907f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b906102b1908890610f44565b60405180910390a28451865160405133907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4505091519392505050565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b5f816001600160601b031660608661016001516001600160a01b0316901b6103679190610f2b565b8552610372856104e1565b85515f9081526003602052604090819020919091555133907f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b906103b7908890610f44565b60405180910390a25050915192915050565b5f6103ec88888888888864ffffffffff8916156103e6578861055f565b4261055f565b9050876001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b826040516104279190610f44565b60405180910390a25050505050505050565b61045161044b36839003830183611013565b5f6106cf565b50565b61046c61046636849003840184611013565b826106cf565b5050565b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e746564207769746864726177000000000000000060448201525f90606401610336565b61046c6104cc36849003840184611013565b826104d7575f6106cf565b83602001356106cf565b5f816040516020016104f39190610f44565b60408051601f19818403018152919052805160209091012090508061055a5760405162461bcd60e51b815260206004820152601860248201527f506f6c6963793a20686173682063616e6e6f74206265203000000000000000006044820152606401610336565b919050565b610567610ace565b848611156105c25760405162461bcd60e51b815260206004820152602260248201527f5072656d69756d2063616e6e6f74206265206d6f7265207468616e207061796f6044820152611d5d60f21b6064820152608401610336565b6105ca610ace565b6001600160a01b038916610160820152604081018790526020810186905260a0810185905264ffffffffff80841661018083015284166101a08201525f61061489888888886108a5565b805160c0840152602081015160608085019190915260408201516080808601919091529082015161012085015281015161014084015260a081015160e0808501919091528101519091508810156106ad5760405162461bcd60e51b815260206004820152601960248201527f5072656d69756d206c657373207468616e206d696e696d756d000000000000006044820152606401610336565b60e08101516106bc908961102e565b6101008301525098975050505050505050565b81515f036107125760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610336565b81515f9081526003602052604090205461072b836104e1565b1461076d5760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b6044820152606401610336565b8161016001516001600160a01b0316336001600160a01b0316146107ef5760405162461bcd60e51b815260206004820152603360248201527f4f6e6c79207269736b4d6f64756c6520697320617574686f72697a656420746f604482015272207265736f6c76652074686520706f6c69637960681b6064820152608401610336565b81515f908152600260208181526040808420848155600181018590559283018490556003808401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a8401859055600b90930180546001600160f01b0319169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b6108e56040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b85516108fd906108f6908690610a98565b8690610a98565b8152602086015161090f908690610a98565b602082018190528151101561093957805160208201805161093190839061102e565b905250610940565b5f60208201525b6040860151610950908690610a98565b6040820152602081015181516109669190610f2b565b8160400151111561099b57602081015181516109829190610f2b565b81604001818151610993919061102e565b9052506109a2565b5f60408201525b6109df6301e133806109b48486611041565b64ffffffffff168860a001516109ca919061105e565b6109d49190611075565b602083015190610a98565b6060820152610a216301e133806109f68486611041565b64ffffffffff168860c00151610a0c919061105e565b610a169190611075565b604083015190610a98565b6080820181905260608201515f91610a3891610f2b565b9050610a51876080015182610a9890919063ffffffff16565b60608801518351610a6191610a98565b610a6b9190610f2b565b60a0830181905282518291610a7f91610f2b565b610a899190610f2b565b60e08301525095945050505050565b5f81156706f05b59d3b200001983900484111517610ab4575f5ffd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160a01b031681526020015f64ffffffffff1681526020015f64ffffffffff1681525090565b6040516101c0810167ffffffffffffffff81118282101715610b7657634e487b7160e01b5f52604160045260245ffd5b60405290565b60405160e0810167ffffffffffffffff81118282101715610b7657634e487b7160e01b5f52604160045260245ffd5b6001600160a01b0381168114610451575f5ffd5b803561055a81610bab565b803564ffffffffff8116811461055a575f5ffd5b5f6101c08284031215610bef575f5ffd5b610bf7610b46565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e080840135908201526101008084013590820152610120808401359082015261014080840135908201529050610c716101608301610bbf565b610160820152610c846101808301610bca565b610180820152610c976101a08301610bca565b6101a082015292915050565b80356001600160601b038116811461055a575f5ffd5b5f5f5f5f6103c08587031215610ccd575f5ffd5b610cd78686610bde565b9350610ce7866101c08701610bde565b9250610380850135610cf881610bab565b9150610d076103a08601610ca3565b905092959194509250565b5f5f60408385031215610d23575f5ffd5b8235610d2e81610bab565b946020939093013593505050565b5f5f5f5f6102208587031215610d50575f5ffd5b610d5a8686610bde565b93506101c0850135610d6b81610bab565b92506101e0850135610d7c81610bab565b9150610d076102008601610ca3565b5f5f5f5f5f5f5f8789036101a0811215610da3575f5ffd5b8835610dae81610bab565b975060e0601f1982011215610dc1575f5ffd5b50610dca610b7c565b60208981013582526040808b0135918301919091526060808b0135918301919091526080808b01359183019190915260a0808b01359183019190915260c0808b01359183019190915260e08a0135908201529550610100880135945061012088013593506101408801359250610e436101608901610bca565b9150610e526101808901610bca565b905092959891949750929550565b5f6101c08284031215610e71575f5ffd5b50919050565b5f6101c08284031215610e88575f5ffd5b610e928383610e60565b9392505050565b5f60208284031215610ea9575f5ffd5b5035919050565b5f5f6101e08385031215610ec2575f5ffd5b610ecc8484610e60565b946101c0939093013593505050565b5f5f6101e08385031215610eed575f5ffd5b610ef78484610e60565b91506101c08301358015158114610f0c575f5ffd5b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f3e57610f3e610f17565b92915050565b5f6101c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151610120830152610140830151610140830152610160830151610fd66101608401826001600160a01b03169052565b50610180830151610ff161018084018264ffffffffff169052565b506101a083015161100c6101a084018264ffffffffff169052565b5092915050565b5f6101c08284031215611024575f5ffd5b610e928383610bde565b81810381811115610f3e57610f3e610f17565b64ffffffffff8281168282160390811115610f3e57610f3e610f17565b8082028115828204841417610f3e57610f3e610f17565b5f8261108f57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212202875fb0cf7578627344944a973d9980bf2bde9372eb00d48a3697b0d51135c5d64736f6c634300081c0033",
"deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c806371907f171161008857806382afd23b1161006357806382afd23b146101c2578063e5a6b10f146101f3578063f3fef3a314610203578063ffa600e314610216575f5ffd5b806371907f171461017f578063792da09e146101905780637a702b3c146101af575f5ffd5b806361d027b3116100c357806361d027b31461012c5780636769a76f1461014657806368d9523c146101595780636af6f1ef1461016c575f5ffd5b8063098d3228146100e95780633ed7c1ae1461010457806347e7ef2414610117575b5f5ffd5b6100f15f1981565b6040519081526020015b60405180910390f35b6100f1610112366004610cb9565b610229565b61012a610125366004610d12565b6102f2565b005b5f5b6040516001600160a01b0390911681526020016100fb565b6100f1610154366004610d3c565b61033f565b61012a610167366004610d8b565b6103c9565b61012a61017a366004610e77565b610439565b6001546001600160a01b031661012e565b6100f161019e366004610e99565b5f9081526003602052604090205490565b61012a6101bd366004610eb0565b610454565b6101e36101d0366004610e99565b5f90815260036020526040902054151590565b60405190151581526020016100fb565b5f546001600160a01b031661012e565b6100f1610211366004610d12565b610470565b61012a610224366004610edb565b6104ba565b5f816001600160601b031660608561016001516001600160a01b0316901b6102519190610f2b565b845261025c846104e1565b84515f90815260036020526040908190209190915561016086015190516001600160a01b038216907f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b906102b1908890610f44565b60405180910390a28451865160405133907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4505091519392505050565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b5f816001600160601b031660608661016001516001600160a01b0316901b6103679190610f2b565b8552610372856104e1565b85515f9081526003602052604090819020919091555133907f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b906103b7908890610f44565b60405180910390a25050915192915050565b5f6103ec88888888888864ffffffffff8916156103e6578861055f565b4261055f565b9050876001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b826040516104279190610f44565b60405180910390a25050505050505050565b61045161044b36839003830183611013565b5f6106cf565b50565b61046c61046636849003840184611013565b826106cf565b5050565b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e746564207769746864726177000000000000000060448201525f90606401610336565b61046c6104cc36849003840184611013565b826104d7575f6106cf565b83602001356106cf565b5f816040516020016104f39190610f44565b60408051601f19818403018152919052805160209091012090508061055a5760405162461bcd60e51b815260206004820152601860248201527f506f6c6963793a20686173682063616e6e6f74206265203000000000000000006044820152606401610336565b919050565b610567610ace565b848611156105c25760405162461bcd60e51b815260206004820152602260248201527f5072656d69756d2063616e6e6f74206265206d6f7265207468616e207061796f6044820152611d5d60f21b6064820152608401610336565b6105ca610ace565b6001600160a01b038916610160820152604081018790526020810186905260a0810185905264ffffffffff80841661018083015284166101a08201525f61061489888888886108a5565b805160c0840152602081015160608085019190915260408201516080808601919091529082015161012085015281015161014084015260a081015160e0808501919091528101519091508810156106ad5760405162461bcd60e51b815260206004820152601960248201527f5072656d69756d206c657373207468616e206d696e696d756d000000000000006044820152606401610336565b60e08101516106bc908961102e565b6101008301525098975050505050505050565b81515f036107125760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610336565b81515f9081526003602052604090205461072b836104e1565b1461076d5760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b6044820152606401610336565b8161016001516001600160a01b0316336001600160a01b0316146107ef5760405162461bcd60e51b815260206004820152603360248201527f4f6e6c79207269736b4d6f64756c6520697320617574686f72697a656420746f604482015272207265736f6c76652074686520706f6c69637960681b6064820152608401610336565b81515f908152600260208181526040808420848155600181018590559283018490556003808401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a8401859055600b90930180546001600160f01b0319169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b6108e56040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b85516108fd906108f6908690610a98565b8690610a98565b8152602086015161090f908690610a98565b602082018190528151101561093957805160208201805161093190839061102e565b905250610940565b5f60208201525b6040860151610950908690610a98565b6040820152602081015181516109669190610f2b565b8160400151111561099b57602081015181516109829190610f2b565b81604001818151610993919061102e565b9052506109a2565b5f60408201525b6109df6301e133806109b48486611041565b64ffffffffff168860a001516109ca919061105e565b6109d49190611075565b602083015190610a98565b6060820152610a216301e133806109f68486611041565b64ffffffffff168860c00151610a0c919061105e565b610a169190611075565b604083015190610a98565b6080820181905260608201515f91610a3891610f2b565b9050610a51876080015182610a9890919063ffffffff16565b60608801518351610a6191610a98565b610a6b9190610f2b565b60a0830181905282518291610a7f91610f2b565b610a899190610f2b565b60e08301525095945050505050565b5f81156706f05b59d3b200001983900484111517610ab4575f5ffd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160a01b031681526020015f64ffffffffff1681526020015f64ffffffffff1681525090565b6040516101c0810167ffffffffffffffff81118282101715610b7657634e487b7160e01b5f52604160045260245ffd5b60405290565b60405160e0810167ffffffffffffffff81118282101715610b7657634e487b7160e01b5f52604160045260245ffd5b6001600160a01b0381168114610451575f5ffd5b803561055a81610bab565b803564ffffffffff8116811461055a575f5ffd5b5f6101c08284031215610bef575f5ffd5b610bf7610b46565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e080840135908201526101008084013590820152610120808401359082015261014080840135908201529050610c716101608301610bbf565b610160820152610c846101808301610bca565b610180820152610c976101a08301610bca565b6101a082015292915050565b80356001600160601b038116811461055a575f5ffd5b5f5f5f5f6103c08587031215610ccd575f5ffd5b610cd78686610bde565b9350610ce7866101c08701610bde565b9250610380850135610cf881610bab565b9150610d076103a08601610ca3565b905092959194509250565b5f5f60408385031215610d23575f5ffd5b8235610d2e81610bab565b946020939093013593505050565b5f5f5f5f6102208587031215610d50575f5ffd5b610d5a8686610bde565b93506101c0850135610d6b81610bab565b92506101e0850135610d7c81610bab565b9150610d076102008601610ca3565b5f5f5f5f5f5f5f8789036101a0811215610da3575f5ffd5b8835610dae81610bab565b975060e0601f1982011215610dc1575f5ffd5b50610dca610b7c565b60208981013582526040808b0135918301919091526060808b0135918301919091526080808b01359183019190915260a0808b01359183019190915260c0808b01359183019190915260e08a0135908201529550610100880135945061012088013593506101408801359250610e436101608901610bca565b9150610e526101808901610bca565b905092959891949750929550565b5f6101c08284031215610e71575f5ffd5b50919050565b5f6101c08284031215610e88575f5ffd5b610e928383610e60565b9392505050565b5f60208284031215610ea9575f5ffd5b5035919050565b5f5f6101e08385031215610ec2575f5ffd5b610ecc8484610e60565b946101c0939093013593505050565b5f5f6101e08385031215610eed575f5ffd5b610ef78484610e60565b91506101c08301358015158114610f0c575f5ffd5b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f3e57610f3e610f17565b92915050565b5f6101c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151610120830152610140830151610140830152610160830151610fd66101608401826001600160a01b03169052565b50610180830151610ff161018084018264ffffffffff169052565b506101a083015161100c6101a084018264ffffffffff169052565b5092915050565b5f6101c08284031215611024575f5ffd5b610e928383610bde565b81810381811115610f3e57610f3e610f17565b64ffffffffff8281168282160390811115610f3e57610f3e610f17565b8082028115828204841417610f3e57610f3e610f17565b5f8261108f57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212202875fb0cf7578627344944a973d9980bf2bde9372eb00d48a3697b0d51135c5d64736f6c634300081c0033",
"linkReferences": {},
"deployedLinkReferences": {}
}