@ensuro/core
Version:
Ensuro - Blockchain-based insurance protocol
1,066 lines (1,065 loc) • 43 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "PolicyPoolMock",
"sourceName": "contracts/mocks/PolicyPoolMock.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IERC20Metadata",
"name": "currency_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
}
],
"name": "PremiumExceedsPayout",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minPremium",
"type": "uint256"
}
],
"name": "PremiumLessThanMinimum",
"type": "error"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"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": "uint40",
"name": "start",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"internalType": "struct Policy.PolicyData",
"name": "policy",
"type": "tuple"
}
],
"name": "ZeroHash",
"type": "error"
},
{
"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": "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": "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": "cancelledPolicyId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "purePremiumRefund",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "jrCocRefund",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "srCocRefund",
"type": "uint256"
}
],
"name": "PolicyCancelled",
"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": [
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"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": "uint40",
"name": "start",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"internalType": "struct Policy.PolicyData",
"name": "policyToCancel",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "purePremiumRefund",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCocRefund",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srCocRefund",
"type": "uint256"
}
],
"name": "cancelPolicy",
"outputs": [],
"stateMutability": "nonpayable",
"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"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "deposit",
"outputs": [],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IEToken",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "depositWithPermit",
"outputs": [],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"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": "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": "extractRiskModule",
"outputs": [
{
"internalType": "contract IRiskModule",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"name": "getPolicyHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"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 Policy.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": "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": "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": "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": "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": "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": "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": "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": "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": [],
"name": "treasury",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IEToken",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "withdraw",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"bytecode": "0x6080604052348015600e575f5ffd5b5060405161110c38038061110c833981016040819052602b91604e565b5f80546001600160a01b0319166001600160a01b03929092169190911790556079565b5f60208284031215605d575f5ffd5b81516001600160a01b03811681146072575f5ffd5b9392505050565b611086806100865f395ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806382afd23b11610093578063dfcd412e11610063578063dfcd412e14610202578063e5a6b10f14610215578063f45346dc14610225578063f720bbbf14610233575f5ffd5b806382afd23b14610197578063ab55daea146101c8578063bd644c56146101dc578063de27010a146101ef575f5ffd5b806361d027b3116100ce57806361d027b314610137578063663d8337146101515780636f520b7314610164578063792da09e14610178575f5ffd5b8063098d3228146100f45780630c0aab9d1461010f5780630d100acb14610124575b5f5ffd5b6100fc5f1981565b6040519081526020015b60405180910390f35b61012261011d366004610b37565b610246565b005b6100fc610132366004610cb6565b6102b4565b5f5b6040516001600160a01b039091168152602001610106565b6100fc61015f366004610d10565b61032d565b610122610172366004610d5e565b50505050565b6100fc610186366004610d99565b5f9081526002602052604090205490565b6101b86101a5366004610d99565b5f90815260026020526040902054151590565b6040519015158152602001610106565b6101396101d6366004610d99565b60601c90565b6101226101ea366004610dc1565b6103d7565b6101226101fd366004610dec565b6103f3565b6100fc610210366004610e5d565b610440565b5f546001600160a01b0316610139565b6101226101fd366004610ead565b610122610241366004610eec565b61048a565b5f610268878787878764ffffffffff88161561026257876104a5565b426104a5565b90505f6001600160a01b03167f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f826040516102a39190610f07565b60405180910390a250505050505050565b5f6102cb6001600160601b0383163360601b610fc1565b85526102d6856105ac565b85515f9081526002602052604090819020919091555133907f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f9061031b908890610f07565b60405180910390a25050915192915050565b5f6103446001600160601b0383163360601b610fc1565b845261034f846105ac565b84515f90815260026020526040908190209190915551339081907f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f90610396908890610f07565b60405180910390a28451865160405133907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4505091519392505050565b6103ef6103e936849003840184610fda565b826105fe565b5050565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e746564207769746864726177000000000000000060448201525f90606401610437565b6104a261049c36839003830183610fda565b5f6105fe565b50565b6104ad610a56565b85858082106104d85760405163319308d960e11b815260048101929092526024820152604401610437565b50506104e2610a56565b602081018690526080810185905264ffffffffff80841661014083015284166101608201525f610515898888888861074e565b805160a0808501919091526020820151604080860191909152820151606080860191909152820151610100850152608082015161012085015281015160c084015260e081015190915088908181111561058a5760405163fc09662760e01b815260048101929092526024820152604401610437565b505060e081015161059b9089610ff5565b60e083015250979650505050505050565b5f816040516020016105be9190610f07565b60408051601f198184030181529190528051602090910120905081816105f857604051636ee9f64760e01b81526004016104379190610f07565b50919050565b81515f036106415760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610437565b81515f9081526002602052604090205461065a836105ac565b1461069c5760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b6044820152606401610437565b81515f908152600160208181526040808420848155928301849055600280840185905560038401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a909301805469ffffffffffffffffffff19169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b61078e6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b85516107af90670de0b6b3a76400006107a8888883610978565b9190610978565b815260208601516107ca908690670de0b6b3a7640000610978565b60208201819052815110156107f45780516020820180516107ec908390610ff5565b9052506107fb565b5f60208201525b6040860151610814908690670de0b6b3a7640000610978565b60408201526020810151815161082a9190610fc1565b8160400151111561085f57602081015181516108469190610fc1565b816040018181516108579190610ff5565b905250610866565b5f60408201525b6108ab6108738385611008565b64ffffffffff168760a001516108899190611025565b61089f6301e13380670de0b6b3a7640000611025565b60208401519190610978565b60608201526108f56108bd8385611008565b64ffffffffff168760c001516108d39190611025565b6108e96301e13380670de0b6b3a7640000611025565b60408401519190610978565b6080820181905260608201515f9161090c91610fc1565b6080880151909150610928908290670de0b6b3a7640000610978565b6060880151835161094191670de0b6b3a7640000610978565b61094b9190610fc1565b60a083018190528251829161095f91610fc1565b6109699190610fc1565b60e08301525095945050505050565b5f5f5f6109858686610a29565b91509150815f036109a95783818161099f5761099f61103c565b0492505050610a22565b8184116109c0576109c06003851502601118610a45565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040518061018001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f64ffffffffff1681526020015f64ffffffffff1681525090565b60405160e0810167ffffffffffffffff81118282101715610ae857634e487b7160e01b5f52604160045260245ffd5b60405290565b604051610180810167ffffffffffffffff81118282101715610ae857634e487b7160e01b5f52604160045260245ffd5b803564ffffffffff81168114610b32575f5ffd5b919050565b5f5f5f5f5f5f868803610180811215610b4e575f5ffd5b60e0811215610b5b575f5ffd5b50610b64610ab9565b873581526020808901359082015260408089013590820152606080890135908201526080808901359082015260a0808901359082015260c08089013590820152955060e0870135945061010087013593506101208701359250610bca6101408801610b1e565b9150610bd96101608801610b1e565b90509295509295509295565b5f6101808284031215610bf6575f5ffd5b610bfe610aee565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201529050610c6d6101408301610b1e565b610140820152610c806101608301610b1e565b61016082015292915050565b6001600160a01b03811681146104a2575f5ffd5b80356001600160601b0381168114610b32575f5ffd5b5f5f5f5f6101e08587031215610cca575f5ffd5b610cd48686610be5565b9350610180850135610ce581610c8c565b92506101a0850135610cf681610c8c565b9150610d056101c08601610ca0565b905092959194509250565b5f5f5f5f6103408587031215610d24575f5ffd5b610d2e8686610be5565b9350610d3e866101808701610be5565b9250610300850135610d4f81610c8c565b9150610d056103208601610ca0565b5f5f5f5f6101e08587031215610d72575f5ffd5b610d7c8686610be5565b9661018086013596506101a0860135956101c00135945092505050565b5f60208284031215610da9575f5ffd5b5035919050565b5f61018082840312156105f8575f5ffd5b5f5f6101a08385031215610dd3575f5ffd5b610ddd8484610db0565b94610180939093013593505050565b5f5f5f5f5f5f5f60e0888a031215610e02575f5ffd5b8735610e0d81610c8c565b9650602088013595506040880135610e2481610c8c565b945060608801359350608088013560ff81168114610e40575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f5f5f60808587031215610e70575f5ffd5b8435610e7b81610c8c565b9350602085013592506040850135610e9281610c8c565b91506060850135610ea281610c8c565b939692955090935050565b5f5f5f60608486031215610ebf575f5ffd5b8335610eca81610c8c565b9250602084013591506040840135610ee181610c8c565b809150509250925092565b5f6101808284031215610efd575f5ffd5b610a228383610db0565b5f61018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151610120830152610140830151610f8b61014084018264ffffffffff169052565b50610160830151610fa661016084018264ffffffffff169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610fd457610fd4610fad565b92915050565b5f6101808284031215610feb575f5ffd5b610a228383610be5565b81810381811115610fd457610fd4610fad565b64ffffffffff8281168282160390811115610fd457610fd4610fad565b8082028115828204841417610fd457610fd4610fad565b634e487b7160e01b5f52601260045260245ffdfea2646970667358221220fc94ce456b11482c8dc8ba0d4489c34b97cd2d24acaed776f6d703503704818a64736f6c634300081e0033",
"deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806382afd23b11610093578063dfcd412e11610063578063dfcd412e14610202578063e5a6b10f14610215578063f45346dc14610225578063f720bbbf14610233575f5ffd5b806382afd23b14610197578063ab55daea146101c8578063bd644c56146101dc578063de27010a146101ef575f5ffd5b806361d027b3116100ce57806361d027b314610137578063663d8337146101515780636f520b7314610164578063792da09e14610178575f5ffd5b8063098d3228146100f45780630c0aab9d1461010f5780630d100acb14610124575b5f5ffd5b6100fc5f1981565b6040519081526020015b60405180910390f35b61012261011d366004610b37565b610246565b005b6100fc610132366004610cb6565b6102b4565b5f5b6040516001600160a01b039091168152602001610106565b6100fc61015f366004610d10565b61032d565b610122610172366004610d5e565b50505050565b6100fc610186366004610d99565b5f9081526002602052604090205490565b6101b86101a5366004610d99565b5f90815260026020526040902054151590565b6040519015158152602001610106565b6101396101d6366004610d99565b60601c90565b6101226101ea366004610dc1565b6103d7565b6101226101fd366004610dec565b6103f3565b6100fc610210366004610e5d565b610440565b5f546001600160a01b0316610139565b6101226101fd366004610ead565b610122610241366004610eec565b61048a565b5f610268878787878764ffffffffff88161561026257876104a5565b426104a5565b90505f6001600160a01b03167f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f826040516102a39190610f07565b60405180910390a250505050505050565b5f6102cb6001600160601b0383163360601b610fc1565b85526102d6856105ac565b85515f9081526002602052604090819020919091555133907f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f9061031b908890610f07565b60405180910390a25050915192915050565b5f6103446001600160601b0383163360601b610fc1565b845261034f846105ac565b84515f90815260026020526040908190209190915551339081907f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f90610396908890610f07565b60405180910390a28451865160405133907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4505091519392505050565b6103ef6103e936849003840184610fda565b826105fe565b5050565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e746564207769746864726177000000000000000060448201525f90606401610437565b6104a261049c36839003830183610fda565b5f6105fe565b50565b6104ad610a56565b85858082106104d85760405163319308d960e11b815260048101929092526024820152604401610437565b50506104e2610a56565b602081018690526080810185905264ffffffffff80841661014083015284166101608201525f610515898888888861074e565b805160a0808501919091526020820151604080860191909152820151606080860191909152820151610100850152608082015161012085015281015160c084015260e081015190915088908181111561058a5760405163fc09662760e01b815260048101929092526024820152604401610437565b505060e081015161059b9089610ff5565b60e083015250979650505050505050565b5f816040516020016105be9190610f07565b60408051601f198184030181529190528051602090910120905081816105f857604051636ee9f64760e01b81526004016104379190610f07565b50919050565b81515f036106415760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610437565b81515f9081526002602052604090205461065a836105ac565b1461069c5760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b6044820152606401610437565b81515f908152600160208181526040808420848155928301849055600280840185905560038401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a909301805469ffffffffffffffffffff19169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b61078e6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b85516107af90670de0b6b3a76400006107a8888883610978565b9190610978565b815260208601516107ca908690670de0b6b3a7640000610978565b60208201819052815110156107f45780516020820180516107ec908390610ff5565b9052506107fb565b5f60208201525b6040860151610814908690670de0b6b3a7640000610978565b60408201526020810151815161082a9190610fc1565b8160400151111561085f57602081015181516108469190610fc1565b816040018181516108579190610ff5565b905250610866565b5f60408201525b6108ab6108738385611008565b64ffffffffff168760a001516108899190611025565b61089f6301e13380670de0b6b3a7640000611025565b60208401519190610978565b60608201526108f56108bd8385611008565b64ffffffffff168760c001516108d39190611025565b6108e96301e13380670de0b6b3a7640000611025565b60408401519190610978565b6080820181905260608201515f9161090c91610fc1565b6080880151909150610928908290670de0b6b3a7640000610978565b6060880151835161094191670de0b6b3a7640000610978565b61094b9190610fc1565b60a083018190528251829161095f91610fc1565b6109699190610fc1565b60e08301525095945050505050565b5f5f5f6109858686610a29565b91509150815f036109a95783818161099f5761099f61103c565b0492505050610a22565b8184116109c0576109c06003851502601118610a45565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040518061018001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f64ffffffffff1681526020015f64ffffffffff1681525090565b60405160e0810167ffffffffffffffff81118282101715610ae857634e487b7160e01b5f52604160045260245ffd5b60405290565b604051610180810167ffffffffffffffff81118282101715610ae857634e487b7160e01b5f52604160045260245ffd5b803564ffffffffff81168114610b32575f5ffd5b919050565b5f5f5f5f5f5f868803610180811215610b4e575f5ffd5b60e0811215610b5b575f5ffd5b50610b64610ab9565b873581526020808901359082015260408089013590820152606080890135908201526080808901359082015260a0808901359082015260c08089013590820152955060e0870135945061010087013593506101208701359250610bca6101408801610b1e565b9150610bd96101608801610b1e565b90509295509295509295565b5f6101808284031215610bf6575f5ffd5b610bfe610aee565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201529050610c6d6101408301610b1e565b610140820152610c806101608301610b1e565b61016082015292915050565b6001600160a01b03811681146104a2575f5ffd5b80356001600160601b0381168114610b32575f5ffd5b5f5f5f5f6101e08587031215610cca575f5ffd5b610cd48686610be5565b9350610180850135610ce581610c8c565b92506101a0850135610cf681610c8c565b9150610d056101c08601610ca0565b905092959194509250565b5f5f5f5f6103408587031215610d24575f5ffd5b610d2e8686610be5565b9350610d3e866101808701610be5565b9250610300850135610d4f81610c8c565b9150610d056103208601610ca0565b5f5f5f5f6101e08587031215610d72575f5ffd5b610d7c8686610be5565b9661018086013596506101a0860135956101c00135945092505050565b5f60208284031215610da9575f5ffd5b5035919050565b5f61018082840312156105f8575f5ffd5b5f5f6101a08385031215610dd3575f5ffd5b610ddd8484610db0565b94610180939093013593505050565b5f5f5f5f5f5f5f60e0888a031215610e02575f5ffd5b8735610e0d81610c8c565b9650602088013595506040880135610e2481610c8c565b945060608801359350608088013560ff81168114610e40575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f5f5f60808587031215610e70575f5ffd5b8435610e7b81610c8c565b9350602085013592506040850135610e9281610c8c565b91506060850135610ea281610c8c565b939692955090935050565b5f5f5f60608486031215610ebf575f5ffd5b8335610eca81610c8c565b9250602084013591506040840135610ee181610c8c565b809150509250925092565b5f6101808284031215610efd575f5ffd5b610a228383610db0565b5f61018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151610120830152610140830151610f8b61014084018264ffffffffff169052565b50610160830151610fa661016084018264ffffffffff169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610fd457610fd4610fad565b92915050565b5f6101808284031215610feb575f5ffd5b610a228383610be5565b81810381811115610fd457610fd4610fad565b64ffffffffff8281168282160390811115610fd457610fd4610fad565b8082028115828204841417610fd457610fd4610fad565b634e487b7160e01b5f52601260045260245ffdfea2646970667358221220fc94ce456b11482c8dc8ba0d4489c34b97cd2d24acaed776f6d703503704818a64736f6c634300081e0033",
"linkReferences": {},
"deployedLinkReferences": {}
}