@ensuro/price-risk-module
Version:
Price Risk Module for the Ensuro Protocol
995 lines • 81.8 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "DummyPayoutAutomation",
"sourceName": "contracts/mocks/DummyPayoutAutomation.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IPolicyPool",
"name": "policyPool_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"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": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "beacon",
"type": "address"
}
],
"name": "BeaconUpgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "Payout",
"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": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"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": "SET_ORACLE_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "SET_SWAP_CONFIG_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "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": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
},
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IPriceRiskModule",
"name": "riskModule",
"type": "address"
},
{
"internalType": "uint256",
"name": "triggerPrice",
"type": "uint256"
},
{
"internalType": "bool",
"name": "lower",
"type": "bool"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
},
{
"internalType": "address",
"name": "onBehalfOf",
"type": "address"
}
],
"name": "newPolicy",
"outputs": [
{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IPriceRiskModule",
"name": "riskModule",
"type": "address"
},
{
"internalType": "uint256",
"name": "triggerPrice",
"type": "uint256"
},
{
"internalType": "bool",
"name": "lower",
"type": "bool"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
},
{
"internalType": "address",
"name": "onBehalfOf",
"type": "address"
},
{
"internalType": "uint256",
"name": "permitValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "permitDeadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "permitV",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "permitR",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "permitS",
"type": "bytes32"
}
],
"name": "newPolicyWithPermit",
"outputs": [
{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"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": "tokenId",
"type": "uint256"
}
],
"name": "onPolicyExpired",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"name": "recoverPolicy",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"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": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "tokenByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "tokenOfOwnerByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "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"
}
],
"bytecode": "0x60c0604052306080523480156200001557600080fd5b5060405162003c1d38038062003c1d8339810160408190526200003891620000cd565b806001600160a01b038116620000ba5760405162461bcd60e51b815260206004820152603c60248201527f5061796f75744175746f6d6174696f6e426173653a20706f6c696379506f6f6c60448201527f5f2063616e6e6f7420626520746865207a65726f206164647265737300000000606482015260840160405180910390fd5b6001600160a01b031660a05250620000ff565b600060208284031215620000e057600080fd5b81516001600160a01b0381168114620000f857600080fd5b9392505050565b60805160a051613aab6200017260003960008181610a3e015281816110c60152818161138c015281816114c601528181611544015281816115a6015281816120b10152612148015260008181610c5901528181610c9901528181610d5301528181610d930152610eb50152613aab6000f3fe6080604052600436106102045760003560e01c806352d1902d11610118578063aa4ae7a0116100a0578063d547741f1161006f578063d547741f14610630578063d6281d3e14610650578063e8e617b714610670578063e985e9c514610690578063f20758e8146106d957600080fd5b8063aa4ae7a01461059c578063b88d4fde146105bc578063be2a9de9146105dc578063c87b56dd1461061057600080fd5b806370a08231116100e757806370a082311461051257806391d148541461053257806395d89b4114610552578063a217fddf14610567578063a22cb4651461057c57600080fd5b806352d1902d146104895780635e075df71461049e5780636352211e146104d25780636479a3e3146104f257600080fd5b8063248a9ca31161019b57806336568abe1161016a57806336568abe146103f65780633659cfe61461041657806342842e0e146104365780634f1ef286146104565780634f6ccce71461046957600080fd5b8063248a9ca31461035257806324ea54f4146103825780632f2ff15d146103b65780632f745c59146103d657600080fd5b8063095ea7b3116101d7578063095ea7b3146102ba578063150b7a02146102da57806318160ddd1461031357806323b872dd1461033257600080fd5b806301ffc9a71461020957806306fdde031461023e578063077f224a14610260578063081812fc14610282575b600080fd5b34801561021557600080fd5b50610229610224366004612e55565b6106f9565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025361074f565b6040516102359190612ec2565b34801561026c57600080fd5b5061028061027b366004612f8d565b6107e1565b005b34801561028e57600080fd5b506102a261029d366004613005565b6108fd565b6040516001600160a01b039091168152602001610235565b3480156102c657600080fd5b506102806102d536600461301e565b610924565b3480156102e657600080fd5b506102fa6102f536600461304a565b610a39565b6040516001600160e01b03199091168152602001610235565b34801561031f57600080fd5b5060cb545b604051908152602001610235565b34801561033e57600080fd5b5061028061034d3660046130e9565b610ae5565b34801561035e57600080fd5b5061032461036d366004613005565b60009081526065602052604090206001015490565b34801561038e57600080fd5b506103247f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b3480156103c257600080fd5b506102806103d136600461312a565b610b16565b3480156103e257600080fd5b506103246103f136600461301e565b610b3b565b34801561040257600080fd5b5061028061041136600461312a565b610bd1565b34801561042257600080fd5b5061028061043136600461315a565b610c4f565b34801561044257600080fd5b506102806104513660046130e9565b610d2e565b610280610464366004613177565b610d49565b34801561047557600080fd5b50610324610484366004613005565b610e15565b34801561049557600080fd5b50610324610ea8565b3480156104aa57600080fd5b506103247f6a829efe27b6f5204e00bad8794469c27a62ccc470b513ddc27025562ea81a2a81565b3480156104de57600080fd5b506102a26104ed366004613005565b610f5b565b3480156104fe57600080fd5b5061032461050d3660046131ef565b610fbb565b34801561051e57600080fd5b5061032461052d36600461315a565b61120b565b34801561053e57600080fd5b5061022961054d36600461312a565b611291565b34801561055e57600080fd5b506102536112bc565b34801561057357600080fd5b50610324600081565b34801561058857600080fd5b5061028061059736600461325d565b6112cb565b3480156105a857600080fd5b506102806105b7366004613005565b6112d6565b3480156105c857600080fd5b506102806105d736600461328b565b6113f6565b3480156105e857600080fd5b506103247ff6a92228322d1aae2c89be3727613c46171804b74ec1dc13994fceb7f4d3615481565b34801561061c57600080fd5b5061025361062b366004613005565b611428565b34801561063c57600080fd5b5061028061064b36600461312a565b61149c565b34801561065c57600080fd5b506102fa61066b3660046132f7565b6114c1565b34801561067c57600080fd5b506102fa61068b3660046130e9565b61153f565b34801561069c57600080fd5b506102296106ab36600461333d565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205460ff1690565b3480156106e557600080fd5b506103246106f436600461336b565b6115a2565b6000610704826116d7565b8061071357506107138261170c565b8061072e57506001600160e01b0319821663967efb0b60e01b145b8061074957506001600160e01b03198216633ece0a8960e01b145b92915050565b60606097805461075e9061341d565b80601f016020809104026020016040519081016040528092919081815260200182805461078a9061341d565b80156107d75780601f106107ac576101008083540402835291602001916107d7565b820191906000526020600020905b8154815290600101906020018083116107ba57829003601f168201915b5050505050905090565b600054610100900460ff16158080156108015750600054600160ff909116105b8061081b5750303b15801561081b575060005460ff166001145b6108835760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156108a6576000805461ff0019166101001790555b6108b1848484611731565b80156108f7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b600061090882611783565b506000908152609b60205260409020546001600160a01b031690565b600061092f82610f5b565b9050806001600160a01b0316836001600160a01b03160361099c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161087a565b336001600160a01b03821614806109b857506109b881336106ab565b610a2a5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161087a565b610a3483836117e2565b505050565b6000337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610a835760405162461bcd60e51b815260040161087a90613457565b6001600160a01b03851615610ad357610ad3858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061185092505050565b50630a85bd0160e11b95945050505050565b610aef3382611883565b610b0b5760405162461bcd60e51b815260040161087a906134b4565b610a34838383611901565b600082815260656020526040902060010154610b3181611a72565b610a348383611a7c565b6000610b468361120b565b8210610ba85760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161087a565b506001600160a01b0391909116600090815260c960209081526040808320938352929052205490565b6001600160a01b0381163314610c415760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161087a565b610c4b8282611b02565b5050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c975760405162461bcd60e51b815260040161087a90613501565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ce0600080516020613a2f833981519152546001600160a01b031690565b6001600160a01b031614610d065760405162461bcd60e51b815260040161087a9061354d565b610d0f81611b69565b60408051600080825260208201909252610d2b91839190611b93565b50565b610a34838383604051806020016040528060008152506113f6565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610d915760405162461bcd60e51b815260040161087a90613501565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610dda600080516020613a2f833981519152546001600160a01b031690565b6001600160a01b031614610e005760405162461bcd60e51b815260040161087a9061354d565b610e0982611b69565b610c4b82826001611b93565b6000610e2060cb5490565b8210610e835760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161087a565b60cb8281548110610e9657610e96613599565b90600052602060002001549050919050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f485760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161087a565b50600080516020613a2f83398151915290565b6000818152609960205260408120546001600160a01b0316806107495760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161087a565b6040516352fc596b60e11b81526004810186905284151560248201526044810184905264ffffffffff8316606482015260009081906001600160a01b0389169063a5f8b2d690608401608060405180830381865afa158015611021573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104591906135c7565b509050806000036110be5760405162461bcd60e51b815260206004820152603760248201527f5061796f75744175746f6d6174696f6e426173653a207072656d69756d203d2060448201527f302c20706f6c696379206e6f7420737570706f72746564000000000000000000606482015260840161087a565b6111573330837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111469190613653565b6001600160a01b0316929190611cfe565b604051630c5d0e6560e01b81526004810188905286151560248201526044810186905264ffffffffff851660648201523060848201526001600160a01b03891690630c5d0e659060a4016020604051808303816000875af11580156111c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e49190613670565b9150611200838360405180602001604052806000815250611850565b509695505050505050565b60006001600160a01b0382166112755760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161087a565b506001600160a01b03166000908152609a602052604090205490565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606098805461075e9061341d565b610c4b338383611d58565b336112e082610f5b565b6001600160a01b03161461135e576040805162461bcd60e51b81526020600482015260248101919091527f5061796f75744175746f6d6174696f6e426173653a20796f75206d757374206f60448201527f776e20746865204e465420746f207265636f7665722074686520706f6c696379606482015260840161087a565b61136781611e26565b60408051632142170760e11b81523060048201523360248201526044810183905290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916342842e0e91606480830192600092919082900301818387803b1580156113db57600080fd5b505af11580156113ef573d6000803e3d6000fd5b5050505050565b6114003383611883565b61141c5760405162461bcd60e51b815260040161087a906134b4565b6108f784848484611ec9565b606061143382611783565b600061144a60408051602081019091526000815290565b9050600081511161146a5760405180602001604052806000815250611495565b8061147484611efc565b604051602001611485929190613689565b6040516020818303038152906040525b9392505050565b6000828152606560205260409020600101546114b781611a72565b610a348383611b02565b6000337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461150b5760405162461bcd60e51b815260040161087a90613457565b600061151684610f5b565b905061152184611e26565b61152b8184611f8f565b50636b140e9f60e11b90505b949350505050565b6000337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146115895760405162461bcd60e51b815260040161087a90613457565b61159282611e26565b5063e8e617b760e01b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116269190613653565b6001600160a01b031663d505accf336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018990526064810188905260ff8716608482015260a4810186905260c4810185905260e401600060405180830381600087803b1580156116a157600080fd5b505af11580156116b5573d6000803e3d6000fd5b505050506116c78c8c8c8c8c8c610fbb565b9c9b505050505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061074957506301ffc9a760e01b6001600160e01b0319831614610749565b60006001600160e01b0319821663780e9d6360e01b1480610749575061074982611fd4565b600054610100900460ff166117585760405162461bcd60e51b815260040161087a906136b8565b611760612014565b611768612014565b611772838361203d565b61177a612014565b610a348161206e565b6000818152609960205260409020546001600160a01b0316610d2b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161087a565b6000818152609b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061181782610f5b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61185a83836121c7565b6118676000848484612360565b610a345760405162461bcd60e51b815260040161087a90613703565b60008061188f83610f5b565b9050806001600160a01b0316846001600160a01b031614806118d657506001600160a01b038082166000908152609c602090815260408083209388168352929052205460ff165b806115375750836001600160a01b03166118ef846108fd565b6001600160a01b031614949350505050565b826001600160a01b031661191482610f5b565b6001600160a01b03161461193a5760405162461bcd60e51b815260040161087a90613755565b6001600160a01b03821661199c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161087a565b6119a9838383600161245e565b826001600160a01b03166119bc82610f5b565b6001600160a01b0316146119e25760405162461bcd60e51b815260040161087a90613755565b6000818152609b6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652609a8552838620805460001901905590871680865283862080546001019055868652609990945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610d2b813361258b565b611a868282611291565b610c4b5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611abe3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611b0c8282611291565b15610c4b5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041610c4b81611a72565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611bc657610a34836125e4565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c20575060408051601f3d908101601f19168201909252611c1d91810190613670565b60015b611c835760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161087a565b600080516020613a2f8339815191528114611cf25760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161087a565b50610a34838383612680565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526108f79085906126a5565b816001600160a01b0316836001600160a01b031603611db95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161087a565b6001600160a01b038381166000818152609c6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000611e3182610f5b565b9050611e4181600084600161245e565b611e4a82610f5b565b6000838152609b6020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552609a845282852080546000190190558785526099909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611ed4848484611901565b611ee084848484612360565b6108f75760405162461bcd60e51b815260040161087a90613703565b60606000611f098361277a565b600101905060008167ffffffffffffffff811115611f2957611f29612ed5565b6040519080825280601f01601f191660200182016040528015611f53576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611f5d57509392505050565b604080518281526001600160a01b03841660208201527f9b5d1a613fa5f0790b36b13103706e31fca06b229d87e9915b29fc20c1d76490910160405180910390a15050565b60006001600160e01b031982166380ac58cd60e01b148061200557506001600160e01b03198216635b5e139f60e01b145b806107495750610749826116d7565b600054610100900460ff1661203b5760405162461bcd60e51b815260040161087a906136b8565b565b600054610100900460ff166120645760405162461bcd60e51b815260040161087a906136b8565b610c4b8282612852565b600054610100900460ff166120955760405162461bcd60e51b815260040161087a906136b8565b6001600160a01b038116156120af576120af600082612892565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561210d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121319190613653565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526000196024830152919091169063095ea7b3906044016020604051808303816000875af11580156121a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4b919061379a565b6001600160a01b03821661221d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161087a565b6000818152609960205260409020546001600160a01b0316156122825760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161087a565b61229060008383600161245e565b6000818152609960205260409020546001600160a01b0316156122f55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161087a565b6001600160a01b0382166000818152609a6020908152604080832080546001019055848352609990915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561245657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123a49033908990889088906004016137b7565b6020604051808303816000875af19250505080156123df575060408051601f3d908101601f191682019092526123dc918101906137ea565b60015b61243c573d80801561240d576040519150601f19603f3d011682016040523d82523d6000602084013e612412565b606091505b5080516000036124345760405162461bcd60e51b815260040161087a90613703565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611537565b506001611537565b60018111156124cd5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161087a565b816001600160a01b038516612529576125248160cb8054600083815260cc60205260408120829055600182018355919091527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0155565b61254c565b836001600160a01b0316856001600160a01b03161461254c5761254c858261289c565b6001600160a01b0384166125685761256381612939565b6113ef565b846001600160a01b0316846001600160a01b0316146113ef576113ef84826129e8565b6125958282611291565b610c4b576125a281612a2c565b6125ad836020612a3e565b6040516020016125be929190613807565b60408051601f198184030181529082905262461bcd60e51b825261087a91600401612ec2565b6001600160a01b0381163b6126515760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161087a565b600080516020613a2f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61268983612bda565b6000825111806126965750805b15610a34576108f78383612c1a565b60006126fa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c3f9092919063ffffffff16565b905080516000148061271b57508080602001905181019061271b919061379a565b610a345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161087a565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106127b95772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106127e5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061280357662386f26fc10000830492506010015b6305f5e100831061281b576305f5e100830492506008015b612710831061282f57612710830492506004015b60648310612841576064830492506002015b600a83106107495760010192915050565b600054610100900460ff166128795760405162461bcd60e51b815260040161087a906136b8565b609761288583826138ca565b506098610a3482826138ca565b610c4b8282611a7c565b600060016128a98461120b565b6128b391906139a0565b600083815260ca6020526040902054909150808214612906576001600160a01b038416600090815260c960209081526040808320858452825280832054848452818420819055835260ca90915290208190555b50600091825260ca602090815260408084208490556001600160a01b03909416835260c981528383209183525290812055565b60cb5460009061294b906001906139a0565b600083815260cc602052604081205460cb805493945090928490811061297357612973613599565b906000526020600020015490508060cb838154811061299457612994613599565b600091825260208083209091019290925582815260cc909152604080822084905585825281205560cb8054806129cc576129cc6139b3565b6001900381819060005260206000200160009055905550505050565b60006129f38361120b565b6001600160a01b03909316600090815260c960209081526040808320868452825280832085905593825260ca9052919091209190915550565b60606107496001600160a01b03831660145b60606000612a4d8360026139c9565b612a589060026139e8565b67ffffffffffffffff811115612a7057612a70612ed5565b6040519080825280601f01601f191660200182016040528015612a9a576020820181803683370190505b509050600360fc1b81600081518110612ab557612ab5613599565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612ae457612ae4613599565b60200101906001600160f81b031916908160001a9053506000612b088460026139c9565b612b139060016139e8565b90505b6001811115612b8b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612b4757612b47613599565b1a60f81b828281518110612b5d57612b5d613599565b60200101906001600160f81b031916908160001a90535060049490941c93612b84816139fb565b9050612b16565b5083156114955760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161087a565b612be3816125e4565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606114958383604051806060016040528060278152602001613a4f60279139612c4e565b60606115378484600085612cc6565b6060600080856001600160a01b031685604051612c6b9190613a12565b600060405180830381855af49150503d8060008114612ca6576040519150601f19603f3d011682016040523d82523d6000602084013e612cab565b606091505b5091509150612cbc86838387612da1565b9695505050505050565b606082471015612d275760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161087a565b600080866001600160a01b03168587604051612d439190613a12565b60006040518083038185875af1925050503d8060008114612d80576040519150601f19603f3d011682016040523d82523d6000602084013e612d85565b606091505b5091509150612d9687838387612da1565b979650505050505050565b60608315612e10578251600003612e09576001600160a01b0385163b612e095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161087a565b5081611537565b6115378383815115612e255781518083602001fd5b8060405162461bcd60e51b815260040161087a9190612ec2565b6001600160e01b031981168114610d2b57600080fd5b600060208284031215612e6757600080fd5b813561149581612e3f565b60005b83811015612e8d578181015183820152602001612e75565b50506000910152565b60008151808452612eae816020860160208601612e72565b601f01601f19169290920160200192915050565b6020815260006114956020830184612e96565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612efc57600080fd5b813567ffffffffffffffff80821115612f1757612f17612ed5565b604051601f8301601f19908116603f01168101908282118183101715612f3f57612f3f612ed5565b81604052838152866020858801011115612f5857600080fd5b836020870160208301376000602085830101528094505050505092915050565b6001600160a01b0381168114610d2b57600080fd5b600080600060608486031215612fa257600080fd5b833567ffffffffffffffff80821115612fba57600080fd5b612fc687838801612eeb565b94506020860135915080821115612fdc57600080fd5b50612fe986828701612eeb565b9250506040840135612ffa81612f78565b809150509250925092565b60006020828403121561301757600080fd5b5035919050565b6000806040838503121561303157600080fd5b823561303c81612f78565b946020939093013593505050565b60008060008060006080868803121561306257600080fd5b853561306d81612f78565b9450602086013561307d81612f78565b935060408601359250606086013567ffffffffffffffff808211156130a157600080fd5b818801915088601f8301126130b557600080fd5b8135818111156130c457600080fd5b8960208285010111156130d657600080fd5b9699959850939650602001949392505050565b6000806000606084860312156130fe57600080fd5b833561310981612f78565b9250602084013561311981612f78565b929592945050506040919091013590565b6000806040838503121561313d57600080fd5b82359150602083013561314f81612f78565b809150509250929050565b60006020828403121561316c57600080fd5b813561149581612f78565b6000806040838503121561318a57600080fd5b823561319581612f78565b9150602083013567ffffffffffffffff8111156131b157600080fd5b6131bd85828601612eeb565b9150509250929050565b8015158114610d2b57600080fd5b803564ffffffffff811681146131ea57600080fd5b919050565b60008060008060008060c0878903121561320857600080fd5b863561321381612f78565b955060208701359450604087013561322a816131c7565b93506060870135925061323f608088016131d5565b915060a087013561324f81612f78565b809150509295509295509295565b6000806040838503121561327057600080fd5b823561327b81612f78565b9150602083013561314f816131c7565b600080600080608085870312156132a157600080fd5b84356132ac81612f78565b935060208501356132bc81612f78565b925060408501359150606085013567ffffffffffffffff8111156132df57600080fd5b6132eb87828801612eeb565b91505092959194509250565b6000806000806080858703121561330d57600080fd5b843561331881612f78565b9350602085013561332881612f78565b93969395505050506040820135916060013590565b6000806040838503121561335057600080fd5b823561335b81612f78565b9150602083013561314f81612f78565b60008060008060008060008060008060006101608c8e03121561338d57600080fd5b8b3561339881612f78565b9a5060208c0135995060408c01356133af816131c7565b985060608c013597506133c460808d016131d5565b965060a08c01356133d481612f78565b955060c08c0135945060e08c013593506101008c013560ff811681146133f957600080fd5b809350506101208c013591506101408c013590509295989b509295989b9093969950565b600181811c9082168061343157607f821691505b60208210810361345157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526037908201527f5061796f75744175746f6d6174696f6e426173653a205468652063616c6c657260408201527f206d7573742062652074686520506f6c696379506f6f6c000000000000000000606082015260800190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b805167ffffffffffffffff811681146131ea57600080fd5b60008082840360808112156135db57600080fd5b835192506060601f19820112156135f157600080fd5b506040516060810181811067ffffffffffffffff8211171561361557613615612ed5565b604052613624602085016135af565b8152613632604085016135af565b6020820152613643606085016135af565b6040820152809150509250929050565b60006020828403121561366557600080fd5b815161149581612f78565b60006020828403121561368257600080fd5b5051919050565b6000835161369b818460208801612e72565b8351908301906136af818360208801612e72565b01949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f