@ensuro/extensions
Version:
Extension contracts that operate with the Ensuro Protocol
1,136 lines • 73.8 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "MultiRMCashFlowLender",
"sourceName": "contracts/MultiRMCashFlowLender.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract SignedQuoteRiskModule",
"name": "riskModule_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "contract SignedQuoteRiskModule",
"name": "newActiveRM",
"type": "address"
}
],
"name": "ActiveRiskModuleChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "previousAdmin",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newAdmin",
"type": "address"
}
],
"name": "AdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "beacon",
"type": "address"
}
],
"name": "BeaconUpgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "customer",
"type": "address"
}
],
"name": "CustomerChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "currentDebt",
"type": "uint256"
}
],
"name": "DebtChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "destination",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Withdrawal",
"type": "event"
},
{
"inputs": [],
"name": "ACTIVE_RM_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "GUARDIAN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "OWNER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POLICY_CREATOR_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "RESOLVER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "currentDebt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "customer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "customer_",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "payout",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "premium",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "lossProb",
"type": "uint256[]"
},
{
"internalType": "uint40[]",
"name": "expiration",
"type": "uint40[]"
},
{
"internalType": "bytes32[]",
"name": "policyData",
"type": "bytes32[]"
},
{
"internalType": "bytes32[]",
"name": "quoteSignatureR",
"type": "bytes32[]"
},
{
"internalType": "bytes32[]",
"name": "quoteSignatureVS",
"type": "bytes32[]"
},
{
"internalType": "uint40[]",
"name": "quoteValidUntil",
"type": "uint40[]"
}
],
"name": "newPoliciesInBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "bytes32",
"name": "policyData",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "quoteSignatureR",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "quoteSignatureVS",
"type": "bytes32"
},
{
"internalType": "uint40",
"name": "quoteValidUntil",
"type": "uint40"
}
],
"name": "newPolicy",
"outputs": [
{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "bytes32",
"name": "policyData",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "quoteSignatureR",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "quoteSignatureVS",
"type": "bytes32"
},
{
"internalType": "uint40",
"name": "quoteValidUntil",
"type": "uint40"
}
],
"name": "newPolicyFull",
"outputs": [
{
"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": "createdPolicy",
"type": "tuple"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "bytes32",
"name": "policyData",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "quoteSignatureR",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "quoteSignatureVS",
"type": "bytes32"
},
{
"internalType": "uint40",
"name": "quoteValidUntil",
"type": "uint40"
}
],
"name": "newPolicyPaidByHolder",
"outputs": [
{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "onPayoutReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "onPolicyExpired",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "repayDebt",
"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": "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": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "riskModule",
"outputs": [
{
"internalType": "contract SignedQuoteRiskModule",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract SignedQuoteRiskModule",
"name": "riskModule_",
"type": "address"
}
],
"name": "setActiveRiskModule",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "customer_",
"type": "address"
}
],
"name": "setCustomer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
}
],
"name": "upgradeTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "destination",
"type": "address"
}
],
"name": "withdraw",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60c0604052306080523480156200001557600080fd5b506040516200301f3803806200301f83398101604081905262000038916200018b565b806001600160a01b038116620000b05760405162461bcd60e51b815260206004820152603260248201527f43617368466c6f774c656e6465723a207269736b4d6f64756c655f2063616e6e6044820152716f74206265207a65726f206164647265737360701b60648201526084015b60405180910390fd5b620000ba620000cd565b6001600160a01b031660a05250620001bd565b600054610100900460ff1615620001375760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000a7565b60005460ff9081161462000189576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200019e57600080fd5b81516001600160a01b0381168114620001b657600080fd5b9392505050565b60805160a051612e0b6200021460003960008181610e770152818161126b015281816114170152611a9a0152600081816109570152818161099701528181610b6a01528181610baa0152610c390152612e0b6000f3fe6080604052600436106101e25760003560e01c80636b09de4511610102578063d547741f11610095578063e5ef6f4b11610064578063e5ef6f4b146105d9578063e8e617b7146105f9578063ed2ffa7f14610623578063ffa600e31461064357600080fd5b8063d547741f14610531578063d6281d3e14610551578063e389490914610571578063e58378bb146105a557600080fd5b806391d14854116100d157806391d14854146104c75780639ed1a985146104e7578063a217fddf146104fc578063c4d66de81461051157600080fd5b80636b09de451461043e578063759076e51461045e57806378fab260146104735780637a702b3c146104a757600080fd5b806336568abe1161017a5780634f1ef286116101495780634f1ef286146103f657806352d1902d14610409578063620c0c4b1461041e578063655330241461024a57600080fd5b806336568abe146103675780633659cfe6146103875780633711bbf5146103a757806345f739ff146103d457600080fd5b8063248a9ca3116101b6578063248a9ca3146102af57806324ea54f4146102df5780632804b2c0146103135780632f2ff15d1461034557600080fd5b8062f714ce146101e757806301ffc9a71461021a57806305918a791461024a578063150b7a021461026a575b600080fd5b3480156101f357600080fd5b5061020761020236600461218d565b610663565b6040519081526020015b60405180910390f35b34801561022657600080fd5b5061023a6102353660046121bd565b6107a3565b6040519015158152602001610211565b34801561025657600080fd5b5061020761026536600461220a565b6107ce565b34801561027657600080fd5b50610296610285366004612290565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610211565b3480156102bb57600080fd5b506102076102ca36600461232f565b60009081526065602052604090206001015490565b3480156102eb57600080fd5b506102077f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b34801561031f57600080fd5b5060fb546001600160a01b03165b6040516001600160a01b039091168152602001610211565b34801561035157600080fd5b5061036561036036600461218d565b6108a5565b005b34801561037357600080fd5b5061036561038236600461218d565b6108cf565b34801561039357600080fd5b506103656103a2366004612348565b61094d565b3480156103b357600080fd5b506103c76103c236600461220a565b610a2c565b6040516102119190612365565b3480156103e057600080fd5b50610207600080516020612db683398151915281565b610365610404366004612494565b610b60565b34801561041557600080fd5b50610207610c2c565b34801561042a57600080fd5b50610365610439366004612348565b610cdf565b34801561044a57600080fd5b5061036561045936600461232f565b610d5f565b34801561046a57600080fd5b5060fc54610207565b34801561047f57600080fd5b506102077f92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb181565b3480156104b357600080fd5b506103656104c2366004612555565b610d95565b3480156104d357600080fd5b5061023a6104e236600461218d565b610e35565b3480156104f357600080fd5b5061032d610e60565b34801561050857600080fd5b50610207600081565b34801561051d57600080fd5b5061036561052c366004612348565b610eac565b34801561053d57600080fd5b5061036561054c36600461218d565b610fb7565b34801561055d57600080fd5b5061029661056c366004612582565b610fdc565b34801561057d57600080fd5b506102077f3512529fd5424dd30d0287bc5a758c2c36156949c038e47ec978cfaf1aecd88481565b3480156105b157600080fd5b506102077fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e81565b3480156105e557600080fd5b506103656105f43660046126bb565b611075565b34801561060557600080fd5b506102966106143660046127fb565b63e8e617b760e01b9392505050565b34801561062f57600080fd5b5061036561063e366004612348565b61122e565b34801561064f57600080fd5b5061036561065e36600461284a565b61144f565b60007fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e61068f816114b8565b6001600160a01b0383166107095760405162461bcd60e51b815260206004820152603660248201527f43617368466c6f774c656e6465723a2064657374696e6174696f6e2063616e6e6044820152756f7420626520746865207a65726f206164647265737360501b60648201526084015b60405180910390fd5b60001984036107215761071a6114c2565b9350610735565b6107328461072d6114c2565b611536565b93505b831561079b57610758838561074861154e565b6001600160a01b031691906115b9565b604080516001600160a01b0385168152602081018690527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65910160405180910390a15b509192915050565b60006001600160e01b03198216633ece0a8960e01b14806107c857506107c88261161c565b92915050565b6000600080516020612db68339815191526107e8816114b8565b60006107f26114c2565b90506107fc610e60565b6001600160a01b03166305918a798d8d8d8d308d8d8d8d6040518a63ffffffff1660e01b815260040161083799989796959493929190612879565b6020604051808303816000875af1158015610856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087a91906128cb565b92506108966108876114c2565b61089190836128fa565b611651565b50509998505050505050505050565b6000828152606560205260409020600101546108c0816114b8565b6108ca83836116a1565b505050565b6001600160a01b038116331461093f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610700565b6109498282611727565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109955760405162461bcd60e51b81526004016107009061290d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109de600080516020612d6f833981519152546001600160a01b031690565b6001600160a01b031614610a045760405162461bcd60e51b815260040161070090612959565b610a0d8161178e565b60408051600080825260208201909252610a29918391906117b8565b50565b610ab5604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600064ffffffffff168152602001600064ffffffffff1681525090565b600080516020612db6833981519152610acd816114b8565b6000610ad76114c2565b9050610ae1610e60565b6001600160a01b0316633711bbf58d8d8d8d308d8d8d8d6040518a63ffffffff1660e01b8152600401610b1c99989796959493929190612879565b6101c0604051808303816000875af1158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087a91906129bb565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610ba85760405162461bcd60e51b81526004016107009061290d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bf1600080516020612d6f833981519152546001600160a01b031690565b6001600160a01b031614610c175760405162461bcd60e51b815260040161070090612959565b610c208261178e565b610949828260016117b8565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ccc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610700565b50600080516020612d6f83398151915290565b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e610d09816114b8565b60fb80546001600160a01b0319166001600160a01b0384169081179091556040519081527f6916cc5df2feb477b7a3b701cec414e0741c02a90929bebc9c7bee5763f8f75e906020015b60405180910390a15050565b610d6b60fc5482611536565b9050610d7681611923565b610a29333083610d8461154e565b6001600160a01b0316929190611935565b7f92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb1610dbf816114b8565b610dd161018084016101608501612348565b6001600160a01b0316637a702b3c84846040518363ffffffff1660e01b8152600401610dfe929190612b4d565b600060405180830381600087803b158015610e1857600080fd5b505af1158015610e2c573d6000803e3d6000fd5b50505050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61012d546000906001600160a01b0316610e9957507f000000000000000000000000000000000000000000000000000000000000000090565b61012d546001600160a01b03165b905090565b600054610100900460ff1615808015610ecc5750600054600160ff909116105b80610ee65750303b158015610ee6575060005460ff166001145b610f495760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610700565b6000805460ff191660011790558015610f6c576000805461ff0019166101001790555b610f7582611973565b8015610949576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610d53565b600082815260656020526040902060010154610fd2816114b8565b6108ca8383611727565b6000610fe6611a96565b6001600160a01b0316336001600160a01b03161461105a5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792074686520506f6c696379506f6f6c2073686f756c642063616c6c2060448201526a1d1a1a5cc81b595d1a1bd960aa1b6064820152608401610700565b61106382611af6565b50636b140e9f60e11b5b949350505050565b600080516020612db683398151915261108d816114b8565b60006110976114c2565b905060006110a3610e60565b905060005b8b5181101561120b57816001600160a01b03166305918a798d83815181106110d2576110d2612b6a565b60200260200101518d84815181106110ec576110ec612b6a565b60200260200101518d858151811061110657611106612b6a565b60200260200101518d868151811061112057611120612b6a565b6020026020010151308e888151811061113b5761113b612b6a565b60200260200101518e898151811061115557611155612b6a565b60200260200101518e8a8151811061116f5761116f612b6a565b60200260200101518e8b8151811061118957611189612b6a565b60200260200101516040518a63ffffffff1660e01b81526004016111b599989796959493929190612879565b6020604051808303816000875af11580156111d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f891906128cb565b508061120381612b80565b9150506110a8565b506112216112176114c2565b61089190846128fa565b5050505050505050505050565b7f3512529fd5424dd30d0287bc5a758c2c36156949c038e47ec978cfaf1aecd884611258816114b8565b6001600160a01b038216158061136157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112eb9190612b99565b6001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611332573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113569190612b99565b6001600160a01b0316145b6113c95760405162461bcd60e51b815260206004820152603360248201527f546865206e6577207269736b206d6f64756c652068617320746f2062652070616044820152721c9d081bd9881d1a19481cd85b59481c1bdbdb606a1b6064820152608401610700565b61012d80546001600160a01b0319166001600160a01b0384169081179091557f37e85d7f7c44db8a4e3ca5dcaa8934f154e7467323e7c156c23da770e691cd9590156114155782611437565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610d53565b7f92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb1611479816114b8565b61148b61018084016101608501612348565b6001600160a01b031663ffa600e384846040518363ffffffff1660e01b8152600401610dfe929190612bb6565b610a298133611b43565b60006114cc61154e565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611512573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea791906128cb565b60008183106115455781611547565b825b9392505050565b6000611558611a96565b6001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611595573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea79190612b99565b6040516001600160a01b0383166024820152604481018290526108ca90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b9c565b60006001600160e01b03198216637965db0b60e01b14806107c857506301ffc9a760e01b6001600160e01b03198316146107c8565b8060fc60008282546116639190612bd5565b909155505060fc546040519081527fc2a7810164c21cd1d36a4181f038cf2ca0ec56362e5be49e6f773647374483f89060200160405180910390a150565b6116ab8282610e35565b6109495760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556116e33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6117318282610e35565b156109495760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041610949816114b8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156117eb576108ca83611c71565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611845575060408051601f3d908101601f19168201909252611842918101906128cb565b60015b6118a85760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610700565b600080516020612d6f83398151915281146119175760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610700565b506108ca838383611d0d565b8060fc600082825461166391906128fa565b6040516001600160a01b038085166024830152831660448201526064810182905261196d9085906323b872dd60e01b906084016115e5565b50505050565b600054610100900460ff1661199a5760405162461bcd60e51b815260040161070090612be8565b6119a2611d32565b6119aa611d32565b6119b5600033611d5b565b60fb80546001600160a01b0319166001600160a01b0383169081179091556040519081527f6916cc5df2feb477b7a3b701cec414e0741c02a90929bebc9c7bee5763f8f75e9060200160405180910390a1611a0e61154e565b6001600160a01b031663095ea7b3611a24611a96565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af1158015611a72573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109499190612c33565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611595573d6000803e3d6000fd5b60fc548111611b0857610a2981611923565b60fc5415611b2a5760fc54611b1d90826128fa565b9050611b2a60fc54611923565b60fb54610a29906001600160a01b03168261074861154e565b611b4d8282610e35565b61094957611b5a81611d65565b611b65836020611d77565b604051602001611b76929190612c74565b60408051601f198184030181529082905262461bcd60e51b825261070091600401612ce9565b6000611bf1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f139092919063ffffffff16565b9050805160001480611c12575080806020019051810190611c129190612c33565b6108ca5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610700565b6001600160a01b0381163b611cde5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610700565b600080516020612d6f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611d1683611f22565b600082511180611d235750805b156108ca5761196d8383611f62565b600054610100900460ff16611d595760405162461bcd60e51b815260040161070090612be8565b565b61094982826116a1565b60606107c86001600160a01b03831660145b60606000611d86836002612d1c565b611d91906002612bd5565b67ffffffffffffffff811115611da957611da9612423565b6040519080825280601f01601f191660200182016040528015611dd3576020820181803683370190505b509050600360fc1b81600081518110611dee57611dee612b6a565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611e1d57611e1d612b6a565b60200101906001600160f81b031916908160001a9053506000611e41846002612d1c565b611e4c906001612bd5565b90505b6001811115611ec4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e8057611e80612b6a565b1a60f81b828281518110611e9657611e96612b6a565b60200101906001600160f81b031916908160001a90535060049490941c93611ebd81612d3b565b9050611e4f565b5083156115475760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610700565b606061106d8484600085611f87565b611f2b81611c71565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606115478383604051806060016040528060278152602001612d8f60279139612062565b606082471015611fe85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610700565b600080866001600160a01b031685876040516120049190612d52565b60006040518083038185875af1925050503d8060008114612041576040519150601f19603f3d011682016040523d82523d6000602084013e612046565b606091505b5091509150612057878383876120da565b979650505050505050565b6060600080856001600160a01b03168560405161207f9190612d52565b600060405180830381855af49150503d80600081146120ba576040519150601f19603f3d011682016040523d82523d6000602084013e6120bf565b606091505b50915091506120d0868383876120da565b9695505050505050565b60608315612149578251600003612142576001600160a01b0385163b6121425760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610700565b508161106d565b61106d838381511561215e5781518083602001fd5b8060405162461bcd60e51b81526004016107009190612ce9565b6001600160a01b0381168114610a2957600080fd5b600080604083850312156121a057600080fd5b8235915060208301356121b281612178565b809150509250929050565b6000602082840312156121cf57600080fd5b81356001600160e01b03198116811461154757600080fd5b64ffffffffff81168114610a2957600080fd5b8035612205816121e7565b919050565b60008060008060008060008060006101208a8c03121561222957600080fd5b8935985060208a0135975060408a0135965060608a0135612249816121e7565b955060808a013561225981612178565b945060a08a0135935060c08a0135925060e08a013591506101008a013561227f816121e7565b809150509295985092959850929598565b6000806000806000608086880312156122a857600080fd5b85356122b381612178565b945060208601356122c381612178565b935060408601359250606086013567ffffffffffffffff808211156122e757600080fd5b818801915088601f8301126122fb57600080fd5b81358181111561230a57600080fd5b89602082850101111561231c57600080fd5b9699959850939650602001949392505050565b60006020828403121561234157600080fd5b5035919050565b60006020828403121561235a57600080fd5b813561154781612178565b60006101c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401518184015250610160808401516123f7828501826001600160a01b03169052565b50506101808381015164ffffffffff908116918401919091526101a09384015116929091019190915290565b634e487b7160e01b600052604160045260246000fd5b6040516101c0810167ffffffffffffffff8111828210171561245d5761245d612423565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561248c5761248c612423565b604052919050565b600080604083850312156124a757600080fd5b82356124b281612178565b915060208381013567ffffffffffffffff808211156124d057600080fd5b818601915086601f8301126124e457600080fd5b8135818111156124f6576124f6612423565b612508601f8201601f19168501612463565b9150808252878482850101111561251e57600080fd5b80848401858401376000848284010152508093505050509250929050565b60006101c0828403121561254f57600080fd5b50919050565b6000806101e0838503121561256957600080fd5b612573848461253c565b946101c0939093013593505050565b6000806000806080858703121561259857600080fd5b84356125a381612178565b935060208501356125b381612178565b93969395505050506040820135916060013590565b600067ffffffffffffffff8211156125e2576125e2612423565b5060051b60200190565b600082601f8301126125fd57600080fd5b8135602061261261260d836125c8565b612463565b82815260059290921b8401810191818101908684111561263157600080fd5b8286015b8481101561264c5780358352918301918301612635565b509695505050505050565b600082601f83011261266857600080fd5b8135602061267861260d836125c8565b82815260059290921b8401810191818101908684111561269757600080fd5b8286015b8481101561264c5780356126ae816121e7565b835291830191830161269b565b600080600080600080600080610100898b0312156126d857600080fd5b883567ffffffffffffffff808211156126f057600080fd5b6126fc8c838d016125ec565b995060208b013591508082111561271257600080fd5b61271e8c838d016125ec565b985060408b013591508082111561273457600080fd5b6127408c838d016125ec565b975060608b013591508082111561275657600080fd5b6127628c838d01612657565b965060808b013591508082111561277857600080fd5b6127848c838d016125ec565b955060a08b013591508082111561279a57600080fd5b6127a68c838d016125ec565b945060c08b01359150808211156127bc57600080fd5b6127c88c838d016125ec565b935060e08b01359150808211156127de57600080fd5b506127eb8b828c01612657565b9150509295985092959890939650565b60008060006060848603121561281057600080fd5b833561281b81612178565b9250602084013561282b81612178565b929592945050506040919091013590565b8015158114610a2957600080fd5b6000806101e0838503121561285e57600080fd5b612868848461253c565b91506101c08301356121b28161283c565b9889526020890197909752604088019590955264ffffffffff93841660608801526001600160a01b0392909216608087015260a086015260c085015260e0840191909152166101008201526101200190565b6000602082840312156128dd57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107c8576107c86128e4565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b805161220581612178565b8051612205816121e7565b60006101c082840312156129ce57600080fd5b6129d6612439565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518183015250610120808401518183015250610140808401518183015250610160612a528185016129a5565b90820152610180612a648482016129b0565b908201526101a0612a768482016129b0565b908201529392505050565b803561220581612178565b803582526020810135602083015260408101356040830152606081013560608301526080810135608083015260a081013560a083015260c081013560c083015260e081013560e0830152610100808201358184015250610120808201358184015250610140808201358184015250610160612b08818301612a81565b6001600160a01b031690830152610180612b238282016121fa565b64ffffffffff16908301526101a0612b3c8282016121fa565b64ffffffffff81168483015261196d565b6101e08101612b5c8285612a8c565b826101c08301529392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201612b9257612b926128e4565b5060010190565b600060208284031215612bab57600080fd5b815161154781612178565b6101e08101612bc58285612a8c565b8215156101c08301529392505050565b808201808211156107c8576107c86128e4565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215612c4557600080fd5b81516115478161283c565b60005b83811015612c6b578181015183820152602001612c53565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612cac816017850160208801612c50565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612cdd816028840160208801612c50565b01602801949350505050565b6020815260008251806020840152612d08816040850160208701612c50565b601f01601f19169190910160400192915050565b6000816000190483118215151615612d3657612d366128e4565b500290565b600081612d4a57612d4a6128e4565b506000190190565b60008251612d64818460208701612c50565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656490fe2ba5da14f172ed5a0a0fec391