Source Code
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,956 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem | 14094232 | 1094 days ago | IN | 0 ETH | 0.00488689 | ||||
Redeem | 14085912 | 1095 days ago | IN | 0 ETH | 0.00548776 | ||||
Redeem | 14079068 | 1096 days ago | IN | 0 ETH | 0.00649143 | ||||
Redeem | 14071526 | 1098 days ago | IN | 0 ETH | 0.005369 | ||||
Redeem | 14069215 | 1098 days ago | IN | 0 ETH | 0.00945673 | ||||
Redeem | 14067034 | 1098 days ago | IN | 0 ETH | 0.00615923 | ||||
Redeem | 14066068 | 1098 days ago | IN | 0 ETH | 0.0055981 | ||||
Redeem | 14066062 | 1098 days ago | IN | 0 ETH | 0.00544635 | ||||
Redeem | 14064847 | 1099 days ago | IN | 0 ETH | 0.01256999 | ||||
Redeem | 14064847 | 1099 days ago | IN | 0 ETH | 0.01256999 | ||||
Redeem | 14064778 | 1099 days ago | IN | 0 ETH | 0.0135339 | ||||
Redeem | 14062502 | 1099 days ago | IN | 0 ETH | 0.01001543 | ||||
Redeem | 14062499 | 1099 days ago | IN | 0 ETH | 0.00750527 | ||||
Redeem | 14062470 | 1099 days ago | IN | 0 ETH | 0.00809413 | ||||
Redeem | 14060994 | 1099 days ago | IN | 0 ETH | 0.00614867 | ||||
Redeem | 14060271 | 1099 days ago | IN | 0 ETH | 0.00744574 | ||||
Redeem | 14060270 | 1099 days ago | IN | 0 ETH | 0.0066331 | ||||
Redeem | 14060048 | 1099 days ago | IN | 0 ETH | 0.00760418 | ||||
Redeem | 14059879 | 1099 days ago | IN | 0 ETH | 0.006754 | ||||
Redeem | 14058266 | 1100 days ago | IN | 0 ETH | 0.00955276 | ||||
Redeem | 14058261 | 1100 days ago | IN | 0 ETH | 0.01099376 | ||||
Redeem | 14058260 | 1100 days ago | IN | 0 ETH | 0.01061436 | ||||
Redeem | 14057475 | 1100 days ago | IN | 0 ETH | 0.01224333 | ||||
Redeem | 14056063 | 1100 days ago | IN | 0 ETH | 0.0082596 | ||||
Redeem | 14055925 | 1100 days ago | IN | 0 ETH | 0.0062219 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
REDACTEDLPBondDepositoryRewardBased
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-21 */ // Sources flattened with hardhat v2.8.0 https://hardhat.org // File hardhat/[email protected] pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } } // File contracts/LPBondDepositoryRewardBased.sol // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; interface IOwnable { function policy() external view returns (address); function renounceManagement() external; function pushManagement( address newOwner_ ) external; function pullManagement() external; } contract Ownable is IOwnable { address internal _owner; address internal _newOwner; event OwnershipPushed(address indexed previousOwner, address indexed newOwner); event OwnershipPulled(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipPushed( address(0), _owner ); } function policy() public view override returns (address) { return _owner; } modifier onlyPolicy() { require( _owner == msg.sender, "Ownable: caller is not the owner" ); _; } function renounceManagement() public virtual override onlyPolicy() { emit OwnershipPushed( _owner, address(0) ); _owner = address(0); } function pushManagement( address newOwner_ ) public virtual override onlyPolicy() { require( newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipPushed( _owner, newOwner_ ); _newOwner = newOwner_; } function pullManagement() public virtual override { require( msg.sender == _newOwner, "Ownable: must be new owner to pull"); emit OwnershipPulled( _owner, _newOwner ); _owner = _newOwner; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function sqrrt(uint256 a) internal pure returns (uint c) { if (a > 3) { c = a; uint b = add( div( a, 2), 1 ); while (b < c) { c = b; b = div( add( div( a, b ), b), 2 ); } } else if (a != 0) { c = 1; } } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function addressToString(address _address) internal pure returns(string memory) { bytes32 _bytes = bytes32(uint256(_address)); bytes memory HEX = "0123456789abcdef"; bytes memory _addr = new bytes(42); _addr[0] = '0'; _addr[1] = 'x'; for(uint256 i = 0; i < 20; i++) { _addr[2+i*2] = HEX[uint8(_bytes[i + 12] >> 4)]; _addr[3+i*2] = HEX[uint8(_bytes[i + 12] & 0x0f)]; } return string(_addr); } } interface IERC20 { function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract ERC20 is IERC20 { using SafeMath for uint256; // TODO comment actual hash value. bytes32 constant private ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256( "ERC20Token" ); mapping (address => uint256) internal _balances; mapping (address => mapping (address => uint256)) internal _allowances; uint256 internal _totalSupply; string internal _name; string internal _symbol; uint8 internal _decimals; constructor (string memory name_, string memory symbol_, uint8 decimals_) { _name = name_; _symbol = symbol_; _decimals = decimals_; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view override returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account_, uint256 ammount_) internal virtual { require(account_ != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address( this ), account_, ammount_); _totalSupply = _totalSupply.add(ammount_); _balances[account_] = _balances[account_].add(ammount_); emit Transfer(address( this ), account_, ammount_); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from_, address to_, uint256 amount_ ) internal virtual { } } interface IERC2612Permit { function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); } library Counters { using SafeMath for uint256; struct Counter { uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } abstract contract ERC20Permit is ERC20, IERC2612Permit { using Counters for Counters.Counter; mapping(address => Counters.Counter) private _nonces; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; bytes32 public DOMAIN_SEPARATOR; constructor() { uint256 chainID; assembly { chainID := chainid() } DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name())), keccak256(bytes("1")), // Version chainID, address(this) ) ); } function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual override { require(block.timestamp <= deadline, "Permit: expired deadline"); bytes32 hashStruct = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner].current(), deadline)); bytes32 _hash = keccak256(abi.encodePacked(uint16(0x1901), DOMAIN_SEPARATOR, hashStruct)); address signer = ecrecover(_hash, v, r, s); require(signer != address(0) && signer == owner, "ZeroSwapPermit: Invalid signature"); _nonces[owner].increment(); _approve(owner, spender, amount); } function nonces(address owner) public view override returns (uint256) { return _nonces[owner].current(); } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } library FullMath { function fullMul(uint256 x, uint256 y) private pure returns (uint256 l, uint256 h) { uint256 mm = mulmod(x, y, uint256(-1)); l = x * y; h = mm - l; if (mm < l) h -= 1; } function fullDiv( uint256 l, uint256 h, uint256 d ) private pure returns (uint256) { uint256 pow2 = d & -d; d /= pow2; l /= pow2; l += h * ((-pow2) / pow2 + 1); uint256 r = 1; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; return l * r; } function mulDiv( uint256 x, uint256 y, uint256 d ) internal pure returns (uint256) { (uint256 l, uint256 h) = fullMul(x, y); uint256 mm = mulmod(x, y, d); if (mm > l) h -= 1; l -= mm; require(h < d, 'FullMath::mulDiv: overflow'); return fullDiv(l, h, d); } } library FixedPoint { struct uq112x112 { uint224 _x; } struct uq144x112 { uint256 _x; } uint8 private constant RESOLUTION = 112; uint256 private constant Q112 = 0x10000000000000000000000000000; uint256 private constant Q224 = 0x100000000000000000000000000000000000000000000000000000000; uint256 private constant LOWER_MASK = 0xffffffffffffffffffffffffffff; // decimal of UQ*x112 (lower 112 bits) function decode(uq112x112 memory self) internal pure returns (uint112) { return uint112(self._x >> RESOLUTION); } function decode112with18(uq112x112 memory self) internal pure returns (uint) { return uint(self._x) / 5192296858534827; } function fraction(uint256 numerator, uint256 denominator) internal pure returns (uq112x112 memory) { require(denominator > 0, 'FixedPoint::fraction: division by zero'); if (numerator == 0) return FixedPoint.uq112x112(0); if (numerator <= uint144(-1)) { uint256 result = (numerator << RESOLUTION) / denominator; require(result <= uint224(-1), 'FixedPoint::fraction: overflow'); return uq112x112(uint224(result)); } else { uint256 result = FullMath.mulDiv(numerator, Q112, denominator); require(result <= uint224(-1), 'FixedPoint::fraction: overflow'); return uq112x112(uint224(result)); } } } interface ITreasury { function deposit( uint _amount, address _token, uint _profit ) external returns ( bool ); function valueOf( address _token, uint _amount ) external view returns ( uint value_ ); function getFloor(address _token) external view returns(uint); function mintRewards(address _recipient, uint _amount ) external; } interface IBondCalculator { function valuation( address _LP, uint _amount ) external view returns ( uint ); function markdown( address _LP ) external view returns ( uint ); } interface IStaking { function stake( uint _amount, address _recipient ) external returns ( bool ); } interface IStakingHelper { function stake( uint _amount, address _recipient ) external; } contract REDACTEDLPBondDepositoryRewardBased is Ownable { using FixedPoint for *; using SafeERC20 for IERC20; using SafeMath for uint; /* ======== EVENTS ======== */ event BondCreated( uint deposit, uint indexed payout, uint indexed expires, uint indexed nativePrice ); event BondRedeemed( address indexed recipient, uint payout, uint remaining ); event BondPriceChanged( uint indexed nativePrice, uint indexed internalPrice, uint indexed debtRatio ); event ControlVariableAdjustment( uint initialBCV, uint newBCV, uint adjustment, bool addition ); /* ======== STATE VARIABLES ======== */ address public immutable BTRFLY; // token given as payment for bond address public immutable principal; // token used to create bond address public immutable OLYMPUSDAO; // we pay homage here (tithe/ti-the hahahahhahah) address public immutable treasury; // mints BTRFLY when receives principal address public immutable DAO; // receives profit share from bond address public OLYMPUSTreasury; // Olympus treasury can be updated by the OLYMPUSDAO bool public immutable isLiquidityBond; // LP and Reserve bonds are treated slightly different address public immutable bondCalculator; // calculates value of LP tokens address public staking; // to auto-stake payout address public stakingHelper; // to stake and claim if no staking warmup bool public useHelper; Terms public terms; // stores terms for new bonds Adjust public adjustment; // stores adjustment to BCV data mapping( address => Bond ) public bondInfo; // stores bond information for depositors uint public totalDebt; // total value of outstanding bonds; used for pricing uint public lastDecay; // reference block for debt decay /* ======== STRUCTS ======== */ // Info for creating new bonds struct Terms { uint controlVariable; // scaling variable for price uint vestingTerm; // in blocks uint minimumPrice; // vs principal value uint maxPayout; // in thousandths of a %. i.e. 500 = 0.5% uint fee; // as % of bond payout, in hundreths. ( 500 = 5% = 0.05 for every 1 paid) uint tithe; // in thousandths of a %. i.e. 500 = 0.5% uint maxDebt; // 9 decimal debt ratio, max % total supply created as debt } // Info for bond holder struct Bond { uint payout; // BTRFLY remaining to be paid uint vesting; // Blocks left to vest uint lastBlock; // Last interaction uint pricePaid; // In native asset, for front end viewing } // Info for incremental adjustments to control variable struct Adjust { bool add; // addition or subtraction uint rate; // increment uint target; // BCV when adjustment finished uint buffer; // minimum length (in blocks) between adjustments uint lastBlock; // block when last adjustment made } /* ======== INITIALIZATION ======== */ constructor ( address _BTRFLY, address _principal, address _treasury, address _DAO, address _bondCalculator, address _OLYMPUSDAO, address _OLYMPUSTreasury ) { require( _BTRFLY != address(0) ); BTRFLY = _BTRFLY; require( _principal != address(0) ); principal = _principal; require( _treasury != address(0) ); treasury = _treasury; require( _DAO != address(0) ); DAO = _DAO; // bondCalculator should be address(0) if not LP bond bondCalculator = _bondCalculator; isLiquidityBond = ( _bondCalculator != address(0) ); OLYMPUSDAO = _OLYMPUSDAO; OLYMPUSTreasury = _OLYMPUSTreasury; } /** * @notice initializes bond parameters * @param _controlVariable uint * @param _vestingTerm uint * @param _minimumPrice uint * @param _maxPayout uint * @param _fee uint * @param _maxDebt uint * @param _initialDebt uint */ function initializeBondTerms( uint _controlVariable, uint _vestingTerm, uint _minimumPrice, uint _maxPayout, uint _fee, uint _maxDebt, uint _tithe, uint _initialDebt ) external onlyPolicy() { require( terms.controlVariable == 0, "Bonds must be initialized from 0" ); terms = Terms ({ controlVariable: _controlVariable, vestingTerm: _vestingTerm, minimumPrice: _minimumPrice, maxPayout: _maxPayout, fee: _fee, maxDebt: _maxDebt, tithe: _tithe }); totalDebt = _initialDebt; lastDecay = block.number; } /* ======== POLICY FUNCTIONS ======== */ enum PARAMETER { VESTING, PAYOUT, FEE, DEBT } /** * @notice set parameters for new bonds * @param _parameter PARAMETER * @param _input uint */ function setBondTerms ( PARAMETER _parameter, uint _input ) external onlyPolicy() { if ( _parameter == PARAMETER.VESTING ) { // 0 require( _input >= 10000, "Vesting must be longer than 36 hours" ); terms.vestingTerm = _input; } else if ( _parameter == PARAMETER.PAYOUT ) { // 1 require( _input <= 1000, "Payout cannot be above 1 percent" ); terms.maxPayout = _input; } else if ( _parameter == PARAMETER.FEE ) { // 2 require( _input <= 10000, "DAO fee cannot exceed payout" ); terms.fee = _input; } else if ( _parameter == PARAMETER.DEBT ) { // 3 terms.maxDebt = _input; } } /** * @notice set control variable adjustment * @param _addition bool * @param _increment uint * @param _target uint * @param _buffer uint */ function setAdjustment ( bool _addition, uint _increment, uint _target, uint _buffer ) external onlyPolicy() { require( _increment <= terms.controlVariable.mul( 25 ).div( 1000 ), "Increment too large" ); adjustment = Adjust({ add: _addition, rate: _increment, target: _target, buffer: _buffer, lastBlock: block.number }); } /** * @notice set contract for auto stake * @param _staking address * @param _helper bool */ function setStaking( address _staking, bool _helper ) external onlyPolicy() { require( _staking != address(0) ); if ( _helper ) { useHelper = true; stakingHelper = _staking; } else { useHelper = false; staking = _staking; } } /* ======== USER FUNCTIONS ======== */ /** * @notice deposit bond * @param _amount uint * @param _maxPrice uint * @param _depositor address * @return uint */ function deposit( uint _amount, uint _maxPrice, address _depositor ) external returns ( uint ) { require( _depositor != address(0), "Invalid address" ); decayDebt(); require( totalDebt <= terms.maxDebt, "Max capacity reached" ); uint nativePrice = _bondPrice(); require( _maxPrice >= nativePrice, "Slippage limit: more than max price" ); // slippage protection uint tithePrincipal = _amount.mul(terms.tithe).div(100000); uint value = ITreasury( treasury ).valueOf( principal, _amount ); console.log(" value = ", value); uint payout = payoutFor( value ); // payout to bonder is computed console.log("payout = ",payout); require( payout >= 10000000, "Bond too small" ); // must be > 0.01 BTRFLY ( underflow protection ) require( payout <= maxPayout(), "Bond too large"); // size protection because there is no slippage /** principal is transferred in approved and deposited into the treasury, returning (_amount - profit) BTRFLY */ IERC20( principal ).safeTransferFrom( msg.sender, address(this), _amount ); IERC20( principal ).safeTransfer( OLYMPUSTreasury, tithePrincipal ); uint amountDeposit = _amount.sub(tithePrincipal); IERC20( principal ).safeTransfer( address( treasury ), amountDeposit ); //call mintRewards uint titheBTRFLY = payout.mul(terms.tithe).div(100000); uint fee = payout.mul( terms.fee ).div( 100000 ); uint totalMint = titheBTRFLY.add(fee).add(payout); ITreasury(treasury).mintRewards(address(this),totalMint); // fee is transferred to daos IERC20( BTRFLY ).safeTransfer( DAO, fee ); IERC20( BTRFLY ).safeTransfer( OLYMPUSTreasury, titheBTRFLY ); // total debt is increased totalDebt = totalDebt.add( value ); // depositor info is stored bondInfo[ _depositor ] = Bond({ payout: bondInfo[ _depositor ].payout.add( payout ), vesting: terms.vestingTerm, lastBlock: block.number, pricePaid: nativePrice }); // indexed events are emitted emit BondCreated( _amount, payout, block.number.add( terms.vestingTerm ), nativePrice ); //emit BondPriceChanged( bondPriceInUSD(), _bondPrice(), debtRatio() ); adjust(); // control variable is adjusted return payout; } /** * @notice redeem bond for user * @param _recipient address * @param _stake bool * @return uint */ function redeem( address _recipient, bool _stake ) external returns ( uint ) { Bond memory info = bondInfo[ _recipient ]; uint percentVested = percentVestedFor( _recipient ); // (blocks since last interaction / vesting term remaining) if ( percentVested >= 10000 ) { // if fully vested delete bondInfo[ _recipient ]; // delete user info emit BondRedeemed( _recipient, info.payout, 0 ); // emit bond data return stakeOrSend( _recipient, _stake, info.payout ); // pay user everything due } else { // if unfinished // calculate payout vested uint payout = info.payout.mul( percentVested ).div( 10000 ); // store updated deposit info bondInfo[ _recipient ] = Bond({ payout: info.payout.sub( payout ), vesting: info.vesting.sub( block.number.sub( info.lastBlock ) ), lastBlock: block.number, pricePaid: info.pricePaid }); emit BondRedeemed( _recipient, payout, bondInfo[ _recipient ].payout ); return stakeOrSend( _recipient, _stake, payout ); } } /* ======== INTERNAL HELPER FUNCTIONS ======== */ /** * @notice allow user to stake payout automatically * @param _stake bool * @param _amount uint * @return uint */ function stakeOrSend( address _recipient, bool _stake, uint _amount ) internal returns ( uint ) { if ( !_stake ) { // if user does not want to stake IERC20( BTRFLY ).transfer( _recipient, _amount ); // send payout } else { // if user wants to stake if ( useHelper ) { // use if staking warmup is 0 IERC20( BTRFLY ).approve( stakingHelper, _amount ); IStakingHelper( stakingHelper ).stake( _amount, _recipient ); } else { IERC20( BTRFLY ).approve( staking, _amount ); IStaking( staking ).stake( _amount, _recipient ); } } return _amount; } /** * @notice makes incremental adjustment to control variable */ function adjust() internal { uint blockCanAdjust = adjustment.lastBlock.add( adjustment.buffer ); if( adjustment.rate != 0 && block.number >= blockCanAdjust ) { uint initial = terms.controlVariable; if ( adjustment.add ) { terms.controlVariable = terms.controlVariable.add( adjustment.rate ); if ( terms.controlVariable >= adjustment.target ) { adjustment.rate = 0; } } else { terms.controlVariable = terms.controlVariable.sub( adjustment.rate ); if ( terms.controlVariable <= adjustment.target ) { adjustment.rate = 0; } } adjustment.lastBlock = block.number; emit ControlVariableAdjustment( initial, terms.controlVariable, adjustment.rate, adjustment.add ); } } /** * @notice reduce total debt */ function decayDebt() internal { totalDebt = totalDebt.sub( debtDecay() ); lastDecay = block.number; } /* ======== VIEW FUNCTIONS ======== */ /** * @notice determine maximum bond size * @return uint */ function maxPayout() public view returns ( uint ) { return IERC20( BTRFLY ).totalSupply().mul( terms.maxPayout ).div( 100000 ); } /** * @notice calculate interest due for new bond * @param _value uint * @return uint */ function payoutFor( uint _value ) public view returns ( uint ) { return FixedPoint.fraction( _value, bondPrice() ).decode112with18().div( 1e14 ); } /** * @notice calculate current bond premium * @return price_ uint */ function bondPrice() public view returns ( uint price_ ) { price_ = terms.controlVariable.mul( debtRatio() ).add( ITreasury(treasury).getFloor(principal) ).div( 1e5 ); if ( price_ < terms.minimumPrice ) { price_ = terms.minimumPrice; } } /** * @notice calculate current bond price and remove floor if above * @return price_ uint */ function _bondPrice() internal returns ( uint price_ ) { price_ = terms.controlVariable.mul( debtRatio() ).add( ITreasury(treasury).getFloor(principal) ).div( 1e5 ); if ( price_ < terms.minimumPrice ) { price_ = terms.minimumPrice; } else if ( terms.minimumPrice != 0 ) { terms.minimumPrice = 0; } } /** * @notice converts bond price to DAI value * @return price_ uint */ function bondPriceInUSD() public view returns ( uint price_ ) { if( isLiquidityBond ) { price_ = bondPrice().mul( IBondCalculator( bondCalculator ).markdown( principal ) ).div( 100 ); } else { price_ = bondPrice().mul( 10 ** IERC20( principal ).decimals() ).div( 100 ); } } /** * @notice calculate current ratio of debt to BTRFLY supply * @return debtRatio_ uint */ function debtRatio() public view returns ( uint debtRatio_ ) { uint supply = IERC20( BTRFLY ).totalSupply(); debtRatio_ = FixedPoint.fraction( currentDebt().mul( 1e9 ), supply ).decode112with18().div( 1e18 ); } /** * @notice debt ratio in same terms for reserve or liquidity bonds * @return uint */ function standardizedDebtRatio() external view returns ( uint ) { if ( isLiquidityBond ) { return debtRatio().mul( IBondCalculator( bondCalculator ).markdown( principal ) ).div( 1e9 ); } else { return debtRatio(); } } /** * @notice calculate debt factoring in decay * @return uint */ function currentDebt() public view returns ( uint ) { return totalDebt.sub( debtDecay() ); } /** * @notice amount to decay total debt by * @return decay_ uint */ function debtDecay() public view returns ( uint decay_ ) { uint blocksSinceLast = block.number.sub( lastDecay ); decay_ = totalDebt.mul( blocksSinceLast ).div( terms.vestingTerm ); if ( decay_ > totalDebt ) { decay_ = totalDebt; } } /** * @notice calculate how far into vesting a depositor is * @param _depositor address * @return percentVested_ uint */ function percentVestedFor( address _depositor ) public view returns ( uint percentVested_ ) { Bond memory bond = bondInfo[ _depositor ]; uint blocksSinceLast = block.number.sub( bond.lastBlock ); uint vesting = bond.vesting; if ( vesting > 0 ) { percentVested_ = blocksSinceLast.mul( 10000 ).div( vesting ); } else { percentVested_ = 0; } } /** * @notice calculate amount of BTRFLY available for claim by depositor * @param _depositor address * @return pendingPayout_ uint */ function pendingPayoutFor( address _depositor ) external view returns ( uint pendingPayout_ ) { uint percentVested = percentVestedFor( _depositor ); uint payout = bondInfo[ _depositor ].payout; if ( percentVested >= 10000 ) { pendingPayout_ = payout; } else { pendingPayout_ = payout.mul( percentVested ).div( 10000 ); } } /* ======= AUXILLIARY ======= */ /** * @notice allow anyone to send lost tokens (excluding principal or BTRFLY) to the DAO * @return bool */ function recoverLostToken( address _token ) external returns ( bool ) { require( _token != BTRFLY ); require( _token != principal ); IERC20( _token ).safeTransfer( DAO, IERC20( _token ).balanceOf( address(this) ) ); return true; } function setOLYMPUSTreasury( address _newTreasury ) external { require(msg.sender == OLYMPUSDAO || msg.sender == DAO, "UNAUTHORISED : YOU'RE NOT OLYMPUS OR REDACTED"); OLYMPUSTreasury = _newTreasury; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_BTRFLY","type":"address"},{"internalType":"address","name":"_principal","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_DAO","type":"address"},{"internalType":"address","name":"_bondCalculator","type":"address"},{"internalType":"address","name":"_OLYMPUSDAO","type":"address"},{"internalType":"address","name":"_OLYMPUSTreasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"deposit","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"payout","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"expires","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"nativePrice","type":"uint256"}],"name":"BondCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nativePrice","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"internalPrice","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"debtRatio","type":"uint256"}],"name":"BondPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remaining","type":"uint256"}],"name":"BondRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"initialBCV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBCV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"adjustment","type":"uint256"},{"indexed":false,"internalType":"bool","name":"addition","type":"bool"}],"name":"ControlVariableAdjustment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"inputs":[],"name":"BTRFLY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OLYMPUSDAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OLYMPUSTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adjustment","outputs":[{"internalType":"bool","name":"add","type":"bool"},{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"buffer","type":"uint256"},{"internalType":"uint256","name":"lastBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondInfo","outputs":[{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"uint256","name":"vesting","type":"uint256"},{"internalType":"uint256","name":"lastBlock","type":"uint256"},{"internalType":"uint256","name":"pricePaid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondPrice","outputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondPriceInUSD","outputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"debtDecay","outputs":[{"internalType":"uint256","name":"decay_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"debtRatio","outputs":[{"internalType":"uint256","name":"debtRatio_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_maxPrice","type":"uint256"},{"internalType":"address","name":"_depositor","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_controlVariable","type":"uint256"},{"internalType":"uint256","name":"_vestingTerm","type":"uint256"},{"internalType":"uint256","name":"_minimumPrice","type":"uint256"},{"internalType":"uint256","name":"_maxPayout","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_maxDebt","type":"uint256"},{"internalType":"uint256","name":"_tithe","type":"uint256"},{"internalType":"uint256","name":"_initialDebt","type":"uint256"}],"name":"initializeBondTerms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLiquidityBond","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDecay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPayout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"payoutFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"pendingPayoutFor","outputs":[{"internalType":"uint256","name":"pendingPayout_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"percentVestedFor","outputs":[{"internalType":"uint256","name":"percentVested_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"policy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"principal","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverLostToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bool","name":"_stake","type":"bool"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_addition","type":"bool"},{"internalType":"uint256","name":"_increment","type":"uint256"},{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_buffer","type":"uint256"}],"name":"setAdjustment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum REDACTEDLPBondDepositoryRewardBased.PARAMETER","name":"_parameter","type":"uint8"},{"internalType":"uint256","name":"_input","type":"uint256"}],"name":"setBondTerms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTreasury","type":"address"}],"name":"setOLYMPUSTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"},{"internalType":"bool","name":"_helper","type":"bool"}],"name":"setStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingHelper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"standardizedDebtRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"terms","outputs":[{"internalType":"uint256","name":"controlVariable","type":"uint256"},{"internalType":"uint256","name":"vestingTerm","type":"uint256"},{"internalType":"uint256","name":"minimumPrice","type":"uint256"},{"internalType":"uint256","name":"maxPayout","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"tithe","type":"uint256"},{"internalType":"uint256","name":"maxDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"useHelper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101606040523480156200001257600080fd5b506040516200306b3803806200306b833981810160405260e08110156200003857600080fd5b50805160208201516040808401516060850151608086015160a087015160c090970151600080546001600160a01b031916331780825595519798969794969395929491926001600160a01b0316917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b038716620000bf57600080fd5b6001600160601b0319606088901b166080526001600160a01b038616620000e557600080fd5b6001600160601b0319606087901b1660a0526001600160a01b0385166200010b57600080fd5b6001600160601b0319606086901b1660e0526001600160a01b0384166200013157600080fd5b6001600160601b0319606094851b81166101005283851b8116610140526001600160a01b03938416151560f81b610120529190931b1660c05260028054929091166001600160a01b031990921691909117905550505060805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160f81c6101405160601c612de06200028b60003980610ffd52806117c85280611a0f525080610fcf52806117975280611bed525080611624528061189152806119385280611d39525080610f5a528061127c52806114e252806115665280611c1d528061243e525080610deb5280611d0752508061102c52806110d352806112ab5280611443528061147c52806114c052806117f752806118f652806119eb5280611c4c528061246d525080610bae5280611600528061165a52806118b75280611a5d5280611dcc5280611f515280612038528061214a5250612de06000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80637927ebf811610130578063cea55f57116100b8578063dd5bd21b1161007c578063dd5bd21b146105b6578063e0176de8146105dc578063e392a262146105e4578063f5c2ab5b146105ec578063fc7b9c18146105f457610232565b8063cea55f5714610530578063d4d863ce14610538578063d502562514610566578063d7969060146105a6578063d7ccfb0b146105ae57610232565b806398fabd3a116100ff57806398fabd3a146104a6578063b4abccba146104ae578063ba5d3078146104d4578063c5332b7c146104dc578063cd1234b3146104e457610232565b80637927ebf814610447578063844b5c7c146104645780638dbdbe6d1461046c578063904b3ece1461049e57610232565b80633283ad0e116101be578063507930ec11610182578063507930ec146104015780635a96ac0a1461042757806361d027b31461042f578063759076e51461043757806377b818951461043f57610232565b80633283ad0e1461034e578063451ee4a11461039657806346f68ee9146103cb57806347581598146103f15780634cf088d9146103f957610232565b80631a3d0068116102055780631a3d0068146102a55780631e321a0f146102d65780631feed31f146102fc57806322443c101461032a5780632f3f470a1461033257610232565b806301b88ee8146102375780630505c8c91461026f578063089208d8146102935780631043f9e21461029d575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b03166105fc565b60408051918252519081900360200190f35b610277610655565b604080516001600160a01b039092168252519081900360200190f35b61029b610665565b005b6102776106fc565b61029b600480360360808110156102bb57600080fd5b5080351515906020810135906040810135906060013561070b565b61029b600480360360408110156102ec57600080fd5b5060ff8135169060200135610803565b61025d6004803603604081101561031257600080fd5b506001600160a01b03813516906020013515156109b7565b610277610bac565b61033a610bd0565b604080519115158252519081900360200190f35b61029b600480360361010081101561036557600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c08101359060e00135610be0565b61039e610ce4565b60408051951515865260208601949094528484019290925260608401526080830152519081900360a00190f35b61029b600480360360208110156103e157600080fd5b50356001600160a01b0316610cfc565b610277610de9565b610277610e0d565b61025d6004803603602081101561041757600080fd5b50356001600160a01b0316610e1c565b61029b610eae565b610277610f58565b61025d610f7c565b610277610f97565b61025d6004803603602081101561045d57600080fd5b5035610fa6565b61025d610fcb565b61025d6004803603606081101561048257600080fd5b50803590602081013590604001356001600160a01b0316611164565b61025d611793565b61027761188f565b61033a600480360360208110156104c457600080fd5b50356001600160a01b03166118b3565b6102776119e9565b610277611a0d565b61050a600480360360208110156104fa57600080fd5b50356001600160a01b0316611a31565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61025d611a58565b61029b6004803603604081101561054e57600080fd5b506001600160a01b0381351690602001351515611b10565b61056e611bd3565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b61033a611beb565b61025d611c0f565b61029b600480360360208110156105cc57600080fd5b50356001600160a01b0316611cfc565b61025d611db8565b61025d611e55565b61025d611e9a565b61025d611ea0565b60008061060883610e1c565b6001600160a01b03841660009081526011602052604090205490915061271082106106355780925061064e565b61064b6127106106458385611ea6565b90611f06565b92505b5050919050565b6000546001600160a01b03165b90565b6000546001600160a01b031633146106b2576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b6002546001600160a01b031681565b6000546001600160a01b03163314610758576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b60055461076e906103e890610645906019611ea6565b8311156107b8576040805162461bcd60e51b8152602060048201526013602482015272496e6372656d656e7420746f6f206c6172676560681b604482015290519081900360640190fd5b6040805160a0810182529415158086526020860185905290850183905260608501829052436080909501859052600c805460ff19169091179055600d92909255600e55600f55601055565b6000546001600160a01b03163314610850576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b600082600381111561085e57fe5b14156108af576127108110156108a55760405162461bcd60e51b8152600401808060200182810382526024815260200180612d5d6024913960400191505060405180910390fd5b60068190556109b3565b60018260038111156108bd57fe5b1415610924576103e881111561091a576040805162461bcd60e51b815260206004820181905260248201527f5061796f75742063616e6e6f742062652061626f766520312070657263656e74604482015290519081900360640190fd5b60088190556109b3565b600282600381111561093257fe5b14156109995761271081111561098f576040805162461bcd60e51b815260206004820152601c60248201527f44414f206665652063616e6e6f7420657863656564207061796f757400000000604482015290519081900360640190fd5b60098190556109b3565b60038260038111156109a757fe5b14156109b357600b8190555b5050565b60006109c1612c23565b506001600160a01b038316600090815260116020908152604080832081516080810183528154815260018201549381019390935260028101549183019190915260030154606082015290610a1485610e1c565b90506127108110610aa4576001600160a01b03851660008181526011602090815260408083208381556001810184905560028101849055600301839055855181519081529182019290925281517f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b1929181900390910190a2610a9b85858460000151611f48565b92505050610ba6565b8151600090610abb90612710906106459085611ea6565b90506040518060800160405280610adf83866000015161224b90919063ffffffff16565b8152602001610b09610afe86604001514361224b90919063ffffffff16565b60208701519061224b565b8152436020808301919091526060808701516040938401526001600160a01b038a166000818152601184528490208551808255868501516001830155868601516002830155959092015160039092019190915582518581529182019390935281517f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b1929181900390910190a2610ba0868683611f48565b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600454600160a01b900460ff1681565b6000546001600160a01b03163314610c2d576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b60055415610c82576040805162461bcd60e51b815260206004820181905260248201527f426f6e6473206d75737420626520696e697469616c697a65642066726f6d2030604482015290519081900360640190fd5b6040805160e08101825289815260208101899052908101879052606081018690526080810185905260a0810183905260c001839052600597909755600695909555600793909355600891909155600955600a91909155600b5560125543601355565b600c54600d54600e54600f5460105460ff9094169385565b6000546001600160a01b03163314610d49576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d8e5760405162461bcd60e51b8152600401808060200182810382526026815260200180612c8b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003546001600160a01b031681565b6000610e26612c23565b506001600160a01b03821660009081526011602090815260408083208151608081018352815481526001820154938101939093526002810154918301829052600301546060830152909190610e7c90439061224b565b60208301519091508015610ea157610e9a8161064584612710611ea6565b9350610ea6565b600093505b505050919050565b6001546001600160a01b03163314610ef75760405162461bcd60e51b8152600401808060200182810382526022815260200180612cb16022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f92610f89611e55565b6012549061224b565b905090565b6004546001600160a01b031681565b6000610ba6655af3107a4000610645610fc685610fc1611c0f565b61228d565b612404565b60007f0000000000000000000000000000000000000000000000000000000000000000156110c9576110c260646106457f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332da80a37f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561108857600080fd5b505afa15801561109c573d6000803e3d6000fd5b505050506040513d60208110156110b257600080fd5b50516110bc611c0f565b90611ea6565b9050610662565b610f9260646106457f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561112a57600080fd5b505afa15801561113e573d6000803e3d6000fd5b505050506040513d602081101561115457600080fd5b505160ff16600a0a6110bc611c0f565b60006001600160a01b0382166111b3576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6111bb61241c565b600b54601254111561120b576040805162461bcd60e51b815260206004820152601460248201527313585e0818d85c1858da5d1e481c995858da195960621b604482015290519081900360640190fd5b6000611215612430565b9050808410156112565760405162461bcd60e51b8152600401808060200182810382526023815260200180612d3a6023913960400191505060405180910390fd5b6000611276620186a0610645600580015489611ea690919063ffffffff16565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631eec5a9a7f0000000000000000000000000000000000000000000000000000000000000000896040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d602081101561133957600080fd5b50516040805180820190915260098152680103b30b63ab2901e960bd1b602082015290915061136890826124ef565b600061137382610fa6565b90506113a06040518060400160405280600981526020016803830bcb7baba101e960bd1b815250826124ef565b629896808110156113e9576040805162461bcd60e51b815260206004820152600e60248201526d109bdb99081d1bdbc81cdb585b1b60921b604482015290519081900360640190fd5b6113f1611db8565b811115611436576040805162461bcd60e51b815260206004820152600e60248201526d426f6e6420746f6f206c6172676560901b604482015290519081900360640190fd5b61146b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308b61259d565b6002546114a5906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116856125fd565b60006114b1898561224b565b90506115076001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000836125fd565b6000611527620186a0610645600580015486611ea690919063ffffffff16565b9050600061154a620186a061064560056004015487611ea690919063ffffffff16565b905060006115628561155c8585612654565b90612654565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a20de9230836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156115db57600080fd5b505af11580156115ef573d6000803e3d6000fd5b506116499250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690507f0000000000000000000000000000000000000000000000000000000000000000846125fd565b600254611683906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116856125fd565b6012546116909087612654565b601255604080516080810182526001600160a01b038c1660009081526011602052919091205481906116c29088612654565b8152602001600560010154815260200143815260200189815250601160008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155905050876117456005600101544361265490919063ffffffff16565b604080518f8152905188917f1fec6dc81f140574bf43f6b1e420ae1dd47928b9d57db8cbd7b8611063b85ae5919081900360200190a46117836126ae565b50929a9950505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000015611887576110c2633b9aca006106457f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332da80a37f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561185357600080fd5b505afa158015611867573d6000803e3d6000fd5b505050506040513d602081101561187d57600080fd5b50516110bc611a58565b6110c2611a58565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156118f457600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561193357600080fd5b6119e17f0000000000000000000000000000000000000000000000000000000000000000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156119a457600080fd5b505afa1580156119b8573d6000803e3d6000fd5b505050506040513d60208110156119ce57600080fd5b50516001600160a01b03851691906125fd565b506001919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60116020526000908152604090208054600182015460028301546003909301549192909184565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab457600080fd5b505afa158015611ac8573d6000803e3d6000fd5b505050506040513d6020811015611ade57600080fd5b50519050611b0a670de0b6b3a7640000610645610fc6611b04633b9aca006110bc610f7c565b8561228d565b91505090565b6000546001600160a01b03163314611b5d576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b6001600160a01b038216611b7057600080fd5b8015611ba55760048054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b0384161790556109b3565b6004805460ff60a01b19169055600380546001600160a01b0384166001600160a01b03199091161790555050565b600554600654600754600854600954600a54600b5487565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611ce8620186a06106457f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166383f67ba47f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ca857600080fd5b505afa158015611cbc573d6000803e3d6000fd5b505050506040513d6020811015611cd257600080fd5b505161155c611cdf611a58565b60055490611ea6565b600754909150811015610662575060075490565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611d5b5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b611d965760405162461bcd60e51b815260040180806020018281038252602d815260200180612c5e602d913960400191505060405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f92620186a06106456005600301547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2357600080fd5b505afa158015611e37573d6000803e3d6000fd5b505050506040513d6020811015611e4d57600080fd5b505190611ea6565b600080611e6d6013544361224b90919063ffffffff16565b600654601254919250611e84916106459084611ea6565b9150601254821115611e965760125491505b5090565b60135481565b60125481565b600082611eb557506000610ba6565b82820282848281611ec257fe5b0414611eff5760405162461bcd60e51b8152600401808060200182810382526021815260200180612cf96021913960400191505060405180910390fd5b9392505050565b6000611eff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061278e565b600082611ff8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb85846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611fc657600080fd5b505af1158015611fda573d6000803e3d6000fd5b505050506040513d6020811015611ff057600080fd5b506122449050565b600454600160a01b900460ff161561211e57600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260248301859052517f00000000000000000000000000000000000000000000000000000000000000009091169163095ea7b39160448083019260209291908290030181600087803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b505050506040513d60208110156120ac57600080fd5b50506004805460408051637acb775760e01b81529283018590526001600160a01b0387811660248501529051911691637acb775791604480830192600092919082900301818387803b15801561210157600080fd5b505af1158015612115573d6000803e3d6000fd5b50505050612244565b6003546040805163095ea7b360e01b81526001600160a01b0392831660048201526024810185905290517f00000000000000000000000000000000000000000000000000000000000000009092169163095ea7b3916044808201926020929091908290030181600087803b15801561219557600080fd5b505af11580156121a9573d6000803e3d6000fd5b505050506040513d60208110156121bf57600080fd5b505060035460408051637acb775760e01b8152600481018590526001600160a01b03878116602483015291519190921691637acb77579160448083019260209291908290030181600087803b15801561221757600080fd5b505af115801561222b573d6000803e3d6000fd5b505050506040513d602081101561224157600080fd5b50505b5092915050565b6000611eff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612830565b612295612c4b565b600082116122d45760405162461bcd60e51b8152600401808060200182810382526026815260200180612cd36026913960400191505060405180910390fd5b826122ee5750604080516020810190915260008152610ba6565b71ffffffffffffffffffffffffffffffffffff831161239557600082607085901b8161231657fe5b0490506001600160e01b03811115612375576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b6040518060200160405280826001600160e01b0316815250915050610ba6565b60006123a684600160701b8561288a565b90506001600160e01b03811115612375576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b516612725dd1d243ab6001600160e01b039091160490565b612427610f89611e55565b60125543601355565b60006124c9620186a06106457f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166383f67ba47f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ca857600080fd5b6007549091508110156124df5750600754610662565b6007541561066257600060075590565b6109b382826040516024018080602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561253a578181015183820152602001612522565b50505050905090810190601f1680156125675780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b179052935061292a92505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526125f790859061294b565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261264f90849061294b565b505050565b600082820183811015611eff576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600f546010546000916126c19190612654565b600d54909150158015906126d55750804310155b1561278b57600554600c5460ff161561270f57600d546005546126f791612654565b6005819055600e541161270a576000600d555b612731565b600d5460055461271e9161224b565b6005819055600e5410612731576000600d555b43601055600554600d54600c546040805185815260208101949094528381019290925260ff1615156060830152517fb923e581a0f83128e9e1d8297aa52b18d6744310476e0b54509c054cd7a93b2a9181900360800190a1505b50565b6000818361281a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127df5781810151838201526020016127c7565b50505050905090810190601f16801561280c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161282657fe5b0495945050505050565b600081848411156128825760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156127df5781810151838201526020016127c7565b505050900390565b600080600061289986866129fc565b91509150600084806128a757fe5b8688099050828111156128bb576001820391505b8083039250848210612914576040805162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a3a6d756c4469763a206f766572666c6f77000000000000604482015290519081900360640190fd5b61291f838387612a29565b979650505050505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606129a0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a999092919063ffffffff16565b80519091501561264f578080602001905160208110156129bf57600080fd5b505161264f5760405162461bcd60e51b815260040180806020018281038252602a815260200180612d81602a913960400191505060405180910390fd5b6000808060001984860990508385029250828103915082811015612a21576001820391505b509250929050565b60008181038216808381612a3957fe5b049250808581612a4557fe5b049450808160000381612a5457fe5b60028581038087028203028087028203028087028203028087028203028087028203028087028203029586029003909402930460010193909302939093010292915050565b6060612aa88484600085612ab0565b949350505050565b6060612abb85612c1d565b612b0c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612b4b5780518252601f199092019160209182019101612b2c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612bad576040519150601f19603f3d011682016040523d82523d6000602084013e612bb2565b606091505b50915091508115612bc6579150612aa89050565b805115612bd65780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156127df5781810151838201526020016127c7565b3b151590565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040805160208101909152600081529056fe554e415554484f5249534544203a20594f55275245204e4f54204f4c594d505553204f522052454441435445444f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c4669786564506f696e743a3a6672616374696f6e3a206469766973696f6e206279207a65726f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572536c697070616765206c696d69743a206d6f7265207468616e206d617820707269636556657374696e67206d757374206265206c6f6e676572207468616e20333620686f7572735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220fe403a52cb02c5c56144f9011b7cae8242ed0297337e1f0f18aa937d9f00465564736f6c63430007050033000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b4000000000000000000000000086c98855df3c78c6b481b6e1d47bef42e9ac36b000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e000000000000000000000000a77b57445fa262cae325ded434df89302c93f59a000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b00000000000000000000000031f8cc382c9898b273eff4e0b7626a6987c846e8
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102325760003560e01c80637927ebf811610130578063cea55f57116100b8578063dd5bd21b1161007c578063dd5bd21b146105b6578063e0176de8146105dc578063e392a262146105e4578063f5c2ab5b146105ec578063fc7b9c18146105f457610232565b8063cea55f5714610530578063d4d863ce14610538578063d502562514610566578063d7969060146105a6578063d7ccfb0b146105ae57610232565b806398fabd3a116100ff57806398fabd3a146104a6578063b4abccba146104ae578063ba5d3078146104d4578063c5332b7c146104dc578063cd1234b3146104e457610232565b80637927ebf814610447578063844b5c7c146104645780638dbdbe6d1461046c578063904b3ece1461049e57610232565b80633283ad0e116101be578063507930ec11610182578063507930ec146104015780635a96ac0a1461042757806361d027b31461042f578063759076e51461043757806377b818951461043f57610232565b80633283ad0e1461034e578063451ee4a11461039657806346f68ee9146103cb57806347581598146103f15780634cf088d9146103f957610232565b80631a3d0068116102055780631a3d0068146102a55780631e321a0f146102d65780631feed31f146102fc57806322443c101461032a5780632f3f470a1461033257610232565b806301b88ee8146102375780630505c8c91461026f578063089208d8146102935780631043f9e21461029d575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b03166105fc565b60408051918252519081900360200190f35b610277610655565b604080516001600160a01b039092168252519081900360200190f35b61029b610665565b005b6102776106fc565b61029b600480360360808110156102bb57600080fd5b5080351515906020810135906040810135906060013561070b565b61029b600480360360408110156102ec57600080fd5b5060ff8135169060200135610803565b61025d6004803603604081101561031257600080fd5b506001600160a01b03813516906020013515156109b7565b610277610bac565b61033a610bd0565b604080519115158252519081900360200190f35b61029b600480360361010081101561036557600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c08101359060e00135610be0565b61039e610ce4565b60408051951515865260208601949094528484019290925260608401526080830152519081900360a00190f35b61029b600480360360208110156103e157600080fd5b50356001600160a01b0316610cfc565b610277610de9565b610277610e0d565b61025d6004803603602081101561041757600080fd5b50356001600160a01b0316610e1c565b61029b610eae565b610277610f58565b61025d610f7c565b610277610f97565b61025d6004803603602081101561045d57600080fd5b5035610fa6565b61025d610fcb565b61025d6004803603606081101561048257600080fd5b50803590602081013590604001356001600160a01b0316611164565b61025d611793565b61027761188f565b61033a600480360360208110156104c457600080fd5b50356001600160a01b03166118b3565b6102776119e9565b610277611a0d565b61050a600480360360208110156104fa57600080fd5b50356001600160a01b0316611a31565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61025d611a58565b61029b6004803603604081101561054e57600080fd5b506001600160a01b0381351690602001351515611b10565b61056e611bd3565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b61033a611beb565b61025d611c0f565b61029b600480360360208110156105cc57600080fd5b50356001600160a01b0316611cfc565b61025d611db8565b61025d611e55565b61025d611e9a565b61025d611ea0565b60008061060883610e1c565b6001600160a01b03841660009081526011602052604090205490915061271082106106355780925061064e565b61064b6127106106458385611ea6565b90611f06565b92505b5050919050565b6000546001600160a01b03165b90565b6000546001600160a01b031633146106b2576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b6002546001600160a01b031681565b6000546001600160a01b03163314610758576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b60055461076e906103e890610645906019611ea6565b8311156107b8576040805162461bcd60e51b8152602060048201526013602482015272496e6372656d656e7420746f6f206c6172676560681b604482015290519081900360640190fd5b6040805160a0810182529415158086526020860185905290850183905260608501829052436080909501859052600c805460ff19169091179055600d92909255600e55600f55601055565b6000546001600160a01b03163314610850576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b600082600381111561085e57fe5b14156108af576127108110156108a55760405162461bcd60e51b8152600401808060200182810382526024815260200180612d5d6024913960400191505060405180910390fd5b60068190556109b3565b60018260038111156108bd57fe5b1415610924576103e881111561091a576040805162461bcd60e51b815260206004820181905260248201527f5061796f75742063616e6e6f742062652061626f766520312070657263656e74604482015290519081900360640190fd5b60088190556109b3565b600282600381111561093257fe5b14156109995761271081111561098f576040805162461bcd60e51b815260206004820152601c60248201527f44414f206665652063616e6e6f7420657863656564207061796f757400000000604482015290519081900360640190fd5b60098190556109b3565b60038260038111156109a757fe5b14156109b357600b8190555b5050565b60006109c1612c23565b506001600160a01b038316600090815260116020908152604080832081516080810183528154815260018201549381019390935260028101549183019190915260030154606082015290610a1485610e1c565b90506127108110610aa4576001600160a01b03851660008181526011602090815260408083208381556001810184905560028101849055600301839055855181519081529182019290925281517f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b1929181900390910190a2610a9b85858460000151611f48565b92505050610ba6565b8151600090610abb90612710906106459085611ea6565b90506040518060800160405280610adf83866000015161224b90919063ffffffff16565b8152602001610b09610afe86604001514361224b90919063ffffffff16565b60208701519061224b565b8152436020808301919091526060808701516040938401526001600160a01b038a166000818152601184528490208551808255868501516001830155868601516002830155959092015160039092019190915582518581529182019390935281517f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b1929181900390910190a2610ba0868683611f48565b93505050505b92915050565b7f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a81565b600454600160a01b900460ff1681565b6000546001600160a01b03163314610c2d576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b60055415610c82576040805162461bcd60e51b815260206004820181905260248201527f426f6e6473206d75737420626520696e697469616c697a65642066726f6d2030604482015290519081900360640190fd5b6040805160e08101825289815260208101899052908101879052606081018690526080810185905260a0810183905260c001839052600597909755600695909555600793909355600891909155600955600a91909155600b5560125543601355565b600c54600d54600e54600f5460105460ff9094169385565b6000546001600160a01b03163314610d49576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d8e5760405162461bcd60e51b8152600401808060200182810382526026815260200180612c8b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b81565b6003546001600160a01b031681565b6000610e26612c23565b506001600160a01b03821660009081526011602090815260408083208151608081018352815481526001820154938101939093526002810154918301829052600301546060830152909190610e7c90439061224b565b60208301519091508015610ea157610e9a8161064584612710611ea6565b9350610ea6565b600093505b505050919050565b6001546001600160a01b03163314610ef75760405162461bcd60e51b8152600401808060200182810382526022815260200180612cb16022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b7f000000000000000000000000086c98855df3c78c6b481b6e1d47bef42e9ac36b81565b6000610f92610f89611e55565b6012549061224b565b905090565b6004546001600160a01b031681565b6000610ba6655af3107a4000610645610fc685610fc1611c0f565b61228d565b612404565b60007f0000000000000000000000000000000000000000000000000000000000000001156110c9576110c260646106457f000000000000000000000000a77b57445fa262cae325ded434df89302c93f59a6001600160a01b03166332da80a37f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b46040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561108857600080fd5b505afa15801561109c573d6000803e3d6000fd5b505050506040513d60208110156110b257600080fd5b50516110bc611c0f565b90611ea6565b9050610662565b610f9260646106457f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b46001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561112a57600080fd5b505afa15801561113e573d6000803e3d6000fd5b505050506040513d602081101561115457600080fd5b505160ff16600a0a6110bc611c0f565b60006001600160a01b0382166111b3576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6111bb61241c565b600b54601254111561120b576040805162461bcd60e51b815260206004820152601460248201527313585e0818d85c1858da5d1e481c995858da195960621b604482015290519081900360640190fd5b6000611215612430565b9050808410156112565760405162461bcd60e51b8152600401808060200182810382526023815260200180612d3a6023913960400191505060405180910390fd5b6000611276620186a0610645600580015489611ea690919063ffffffff16565b905060007f000000000000000000000000086c98855df3c78c6b481b6e1d47bef42e9ac36b6001600160a01b0316631eec5a9a7f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b4896040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d602081101561133957600080fd5b50516040805180820190915260098152680103b30b63ab2901e960bd1b602082015290915061136890826124ef565b600061137382610fa6565b90506113a06040518060400160405280600981526020016803830bcb7baba101e960bd1b815250826124ef565b629896808110156113e9576040805162461bcd60e51b815260206004820152600e60248201526d109bdb99081d1bdbc81cdb585b1b60921b604482015290519081900360640190fd5b6113f1611db8565b811115611436576040805162461bcd60e51b815260206004820152600e60248201526d426f6e6420746f6f206c6172676560901b604482015290519081900360640190fd5b61146b6001600160a01b037f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b41633308b61259d565b6002546114a5906001600160a01b037f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b481169116856125fd565b60006114b1898561224b565b90506115076001600160a01b037f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b4167f000000000000000000000000086c98855df3c78c6b481b6e1d47bef42e9ac36b836125fd565b6000611527620186a0610645600580015486611ea690919063ffffffff16565b9050600061154a620186a061064560056004015487611ea690919063ffffffff16565b905060006115628561155c8585612654565b90612654565b90507f000000000000000000000000086c98855df3c78c6b481b6e1d47bef42e9ac36b6001600160a01b0316636a20de9230836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156115db57600080fd5b505af11580156115ef573d6000803e3d6000fd5b506116499250506001600160a01b037f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a1690507f000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e846125fd565b600254611683906001600160a01b037f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a81169116856125fd565b6012546116909087612654565b601255604080516080810182526001600160a01b038c1660009081526011602052919091205481906116c29088612654565b8152602001600560010154815260200143815260200189815250601160008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155905050876117456005600101544361265490919063ffffffff16565b604080518f8152905188917f1fec6dc81f140574bf43f6b1e420ae1dd47928b9d57db8cbd7b8611063b85ae5919081900360200190a46117836126ae565b50929a9950505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000115611887576110c2633b9aca006106457f000000000000000000000000a77b57445fa262cae325ded434df89302c93f59a6001600160a01b03166332da80a37f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b46040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561185357600080fd5b505afa158015611867573d6000803e3d6000fd5b505050506040513d602081101561187d57600080fd5b50516110bc611a58565b6110c2611a58565b7f000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e81565b60007f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a6001600160a01b0316826001600160a01b031614156118f457600080fd5b7f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b46001600160a01b0316826001600160a01b0316141561193357600080fd5b6119e17f000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156119a457600080fd5b505afa1580156119b8573d6000803e3d6000fd5b505050506040513d60208110156119ce57600080fd5b50516001600160a01b03851691906125fd565b506001919050565b7f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b481565b7f000000000000000000000000a77b57445fa262cae325ded434df89302c93f59a81565b60116020526000908152604090208054600182015460028301546003909301549192909184565b6000807f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab457600080fd5b505afa158015611ac8573d6000803e3d6000fd5b505050506040513d6020811015611ade57600080fd5b50519050611b0a670de0b6b3a7640000610645610fc6611b04633b9aca006110bc610f7c565b8561228d565b91505090565b6000546001600160a01b03163314611b5d576040805162461bcd60e51b81526020600482018190526024820152600080516020612d1a833981519152604482015290519081900360640190fd5b6001600160a01b038216611b7057600080fd5b8015611ba55760048054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b0384161790556109b3565b6004805460ff60a01b19169055600380546001600160a01b0384166001600160a01b03199091161790555050565b600554600654600754600854600954600a54600b5487565b7f000000000000000000000000000000000000000000000000000000000000000181565b6000611ce8620186a06106457f000000000000000000000000086c98855df3c78c6b481b6e1d47bef42e9ac36b6001600160a01b03166383f67ba47f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b46040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ca857600080fd5b505afa158015611cbc573d6000803e3d6000fd5b505050506040513d6020811015611cd257600080fd5b505161155c611cdf611a58565b60055490611ea6565b600754909150811015610662575060075490565b336001600160a01b037f000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b161480611d5b5750336001600160a01b037f000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e16145b611d965760405162461bcd60e51b815260040180806020018281038252602d815260200180612c5e602d913960400191505060405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f92620186a06106456005600301547f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2357600080fd5b505afa158015611e37573d6000803e3d6000fd5b505050506040513d6020811015611e4d57600080fd5b505190611ea6565b600080611e6d6013544361224b90919063ffffffff16565b600654601254919250611e84916106459084611ea6565b9150601254821115611e965760125491505b5090565b60135481565b60125481565b600082611eb557506000610ba6565b82820282848281611ec257fe5b0414611eff5760405162461bcd60e51b8152600401808060200182810382526021815260200180612cf96021913960400191505060405180910390fd5b9392505050565b6000611eff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061278e565b600082611ff8577f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a6001600160a01b031663a9059cbb85846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611fc657600080fd5b505af1158015611fda573d6000803e3d6000fd5b505050506040513d6020811015611ff057600080fd5b506122449050565b600454600160a01b900460ff161561211e57600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260248301859052517f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a9091169163095ea7b39160448083019260209291908290030181600087803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b505050506040513d60208110156120ac57600080fd5b50506004805460408051637acb775760e01b81529283018590526001600160a01b0387811660248501529051911691637acb775791604480830192600092919082900301818387803b15801561210157600080fd5b505af1158015612115573d6000803e3d6000fd5b50505050612244565b6003546040805163095ea7b360e01b81526001600160a01b0392831660048201526024810185905290517f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a9092169163095ea7b3916044808201926020929091908290030181600087803b15801561219557600080fd5b505af11580156121a9573d6000803e3d6000fd5b505050506040513d60208110156121bf57600080fd5b505060035460408051637acb775760e01b8152600481018590526001600160a01b03878116602483015291519190921691637acb77579160448083019260209291908290030181600087803b15801561221757600080fd5b505af115801561222b573d6000803e3d6000fd5b505050506040513d602081101561224157600080fd5b50505b5092915050565b6000611eff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612830565b612295612c4b565b600082116122d45760405162461bcd60e51b8152600401808060200182810382526026815260200180612cd36026913960400191505060405180910390fd5b826122ee5750604080516020810190915260008152610ba6565b71ffffffffffffffffffffffffffffffffffff831161239557600082607085901b8161231657fe5b0490506001600160e01b03811115612375576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b6040518060200160405280826001600160e01b0316815250915050610ba6565b60006123a684600160701b8561288a565b90506001600160e01b03811115612375576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b516612725dd1d243ab6001600160e01b039091160490565b612427610f89611e55565b60125543601355565b60006124c9620186a06106457f000000000000000000000000086c98855df3c78c6b481b6e1d47bef42e9ac36b6001600160a01b03166383f67ba47f000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b46040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ca857600080fd5b6007549091508110156124df5750600754610662565b6007541561066257600060075590565b6109b382826040516024018080602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561253a578181015183820152602001612522565b50505050905090810190601f1680156125675780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b179052935061292a92505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526125f790859061294b565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261264f90849061294b565b505050565b600082820183811015611eff576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600f546010546000916126c19190612654565b600d54909150158015906126d55750804310155b1561278b57600554600c5460ff161561270f57600d546005546126f791612654565b6005819055600e541161270a576000600d555b612731565b600d5460055461271e9161224b565b6005819055600e5410612731576000600d555b43601055600554600d54600c546040805185815260208101949094528381019290925260ff1615156060830152517fb923e581a0f83128e9e1d8297aa52b18d6744310476e0b54509c054cd7a93b2a9181900360800190a1505b50565b6000818361281a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127df5781810151838201526020016127c7565b50505050905090810190601f16801561280c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161282657fe5b0495945050505050565b600081848411156128825760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156127df5781810151838201526020016127c7565b505050900390565b600080600061289986866129fc565b91509150600084806128a757fe5b8688099050828111156128bb576001820391505b8083039250848210612914576040805162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a3a6d756c4469763a206f766572666c6f77000000000000604482015290519081900360640190fd5b61291f838387612a29565b979650505050505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606129a0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a999092919063ffffffff16565b80519091501561264f578080602001905160208110156129bf57600080fd5b505161264f5760405162461bcd60e51b815260040180806020018281038252602a815260200180612d81602a913960400191505060405180910390fd5b6000808060001984860990508385029250828103915082811015612a21576001820391505b509250929050565b60008181038216808381612a3957fe5b049250808581612a4557fe5b049450808160000381612a5457fe5b60028581038087028203028087028203028087028203028087028203028087028203028087028203029586029003909402930460010193909302939093010292915050565b6060612aa88484600085612ab0565b949350505050565b6060612abb85612c1d565b612b0c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612b4b5780518252601f199092019160209182019101612b2c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612bad576040519150601f19603f3d011682016040523d82523d6000602084013e612bb2565b606091505b50915091508115612bc6579150612aa89050565b805115612bd65780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156127df5781810151838201526020016127c7565b3b151590565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040805160208101909152600081529056fe554e415554484f5249534544203a20594f55275245204e4f54204f4c594d505553204f522052454441435445444f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c4669786564506f696e743a3a6672616374696f6e3a206469766973696f6e206279207a65726f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572536c697070616765206c696d69743a206d6f7265207468616e206d617820707269636556657374696e67206d757374206265206c6f6e676572207468616e20333620686f7572735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220fe403a52cb02c5c56144f9011b7cae8242ed0297337e1f0f18aa937d9f00465564736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b4000000000000000000000000086c98855df3c78c6b481b6e1d47bef42e9ac36b000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e000000000000000000000000a77b57445fa262cae325ded434df89302c93f59a000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b00000000000000000000000031f8cc382c9898b273eff4e0b7626a6987c846e8
-----Decoded View---------------
Arg [0] : _BTRFLY (address): 0xC0d4Ceb216B3BA9C3701B291766fDCbA977ceC3A
Arg [1] : _principal (address): 0xe9AB8038Ee6Dd4fCC7612997FE28d4e22019C4B4
Arg [2] : _treasury (address): 0x086C98855dF3C78C6b481b6e1D47BeF42E9aC36B
Arg [3] : _DAO (address): 0xA52Fd396891E7A74b641a2Cb1A6999Fcf56B077e
Arg [4] : _bondCalculator (address): 0xa77b57445FA262CaE325DeD434Df89302c93f59A
Arg [5] : _OLYMPUSDAO (address): 0x245cc372C84B3645Bf0Ffe6538620B04a217988B
Arg [6] : _OLYMPUSTreasury (address): 0x31F8Cc382c9898b273eff4e0b7626a6987C846E8
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a
Arg [1] : 000000000000000000000000e9ab8038ee6dd4fcc7612997fe28d4e22019c4b4
Arg [2] : 000000000000000000000000086c98855df3c78c6b481b6e1d47bef42e9ac36b
Arg [3] : 000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e
Arg [4] : 000000000000000000000000a77b57445fa262cae325ded434df89302c93f59a
Arg [5] : 000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b
Arg [6] : 00000000000000000000000031f8cc382c9898b273eff4e0b7626a6987c846e8
Deployed Bytecode Sourcemap
85143:18415:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102461:400;;;;;;;;;;;;;;;;-1:-1:-1;102461:400:0;-1:-1:-1;;;;;102461:400:0;;:::i;:::-;;;;;;;;;;;;;;;;64401:89;;;:::i;:::-;;;;-1:-1:-1;;;;;64401:89:0;;;;;;;;;;;;;;64626:158;;;:::i;:::-;;86189:30;;;:::i;91171:466::-;;;;;;;;;;;;;;;;-1:-1:-1;91171:466:0;;;;;;;;;;;;;;;;;;;:::i;90261:714::-;;;;;;;;;;;;;;;;-1:-1:-1;90261:714:0;;;;;;;;;:::i;95068:1206::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;95068:1206:0;;;;;;;;;;:::i;85804:31::-;;;:::i;86592:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;89296:719;;;;;;;;;;;;;;;;-1:-1:-1;89296:719:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;86677:24::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64792:260;;;;;;;;;;;;;;;;-1:-1:-1;64792:260:0;-1:-1:-1;;;;;64792:260:0;;:::i;85947:35::-;;;:::i;86461:22::-;;;:::i;101859:427::-;;;;;;;;;;;;;;;;-1:-1:-1;101859:427:0;-1:-1:-1;;;;;101859:427:0;;:::i;65064:221::-;;;:::i;86039:33::-;;;:::i;101202:106::-;;;:::i;86514:28::-;;;:::i;98814:161::-;;;;;;;;;;;;;;;;-1:-1:-1;98814:161:0;;:::i;99976:331::-;;;:::i;92317:2600::-;;;;;;;;;;;;;;;;-1:-1:-1;92317:2600:0;;;;;;;;;;;-1:-1:-1;;;;;92317:2600:0;;:::i;100828:275::-;;;:::i;86119:28::-;;;:::i;103048:271::-;;;;;;;;;;;;;;;;-1:-1:-1;103048:271:0;-1:-1:-1;;;;;103048:271:0;;:::i;85877:34::-;;;:::i;86380:39::-;;;:::i;86743:42::-;;;;;;;;;;;;;;;;-1:-1:-1;86743:42:0;-1:-1:-1;;;;;86743:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;100434:273;;;:::i;91770:318::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;91770:318:0;;;;;;;;;;:::i;86622:18::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;86281:37;;;:::i;99080:290::-;;;:::i;103327:224::-;;;;;;;;;;;;;;;;-1:-1:-1;103327:224:0;-1:-1:-1;;;;;103327:224:0;;:::i;98542:143::-;;;:::i;101410:286::-;;;:::i;86918:21::-;;;:::i;86836:::-;;;:::i;102461:400::-;102533:19;102566:18;102587:30;102605:10;102587:16;:30::i;:::-;-1:-1:-1;;;;;102642:22:0;;102628:11;102642:22;;;:8;:22;;;;;:29;102566:51;;-1:-1:-1;102706:5:0;102689:22;;102684:170;;102746:6;102729:23;;102684:170;;;102802:40;102835:5;102802:27;:6;102814:13;102802:10;:27::i;:::-;:31;;:40::i;:::-;102785:57;;102684:170;102461:400;;;;;:::o;64401:89::-;64449:7;64476:6;-1:-1:-1;;;;;64476:6:0;64401:89;;:::o;64626:158::-;64540:6;;-1:-1:-1;;;;;64540:6:0;64550:10;64540:20;64531:67;;;;;-1:-1:-1;;;64531:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;64531:67:0;;;;;;;;;;;;;;;64742:1:::1;64726:6:::0;;64709:37:::1;::::0;-1:-1:-1;;;;;64726:6:0;;::::1;::::0;64709:37:::1;::::0;64742:1;;64709:37:::1;64774:1;64757:19:::0;;-1:-1:-1;;;;;;64757:19:0::1;::::0;;64626:158::o;86189:30::-;;;-1:-1:-1;;;;;86189:30:0;;:::o;91171:466::-;64540:6;;-1:-1:-1;;;;;64540:6:0;64550:10;64540:20;64531:67;;;;;-1:-1:-1;;;64531:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;64531:67:0;;;;;;;;;;;;;;;91358:5:::1;:21:::0;:43:::1;::::0;91395:4:::1;::::0;91358:31:::1;::::0;91385:2:::1;91358:25;:31::i;:43::-;91344:10;:57;;91335:91;;;::::0;;-1:-1:-1;;;91335:91:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;91335:91:0;;;;;;;;;;;;;::::1;;91452:177;::::0;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;91605:12:::1;91452:177:::0;;;;;;;91439:10:::1;:190:::0;;-1:-1:-1;;91439:190:0::1;::::0;;::::1;::::0;;;;;;;;;;;;;91171:466::o;90261:714::-;64540:6;;-1:-1:-1;;;;;64540:6:0;64550:10;64540:20;64531:67;;;;;-1:-1:-1;;;64531:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;64531:67:0;;;;;;;;;;;;;;;90373:17:::1;90359:10;:31;;;;;;;;;90354:614;;;90432:5;90422:6;:15;;90413:66;;;;-1:-1:-1::0;;;90413:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;90494:17:::0;:26;;;90354:614:::1;;;90557:16;90543:10;:30;;;;;;;;;90538:430;;;90615:4;90605:6;:14;;90596:61;;;::::0;;-1:-1:-1;;;90596:61:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;90672:15:::0;:24;;;90538:430:::1;;;90733:13;90719:10;:27;;;;;;;;;90714:254;;;90788:5;90778:6;:15;;90769:58;;;::::0;;-1:-1:-1;;;90769:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;90842:9:::0;:18;;;90714:254:::1;;;90897:14;90883:10;:28;;;;;;;;;90878:90;;;90934:13:::0;:22;;;90878:90:::1;90261:714:::0;;:::o;95068:1206::-;95138:4;95164:16;;:::i;:::-;-1:-1:-1;;;;;;95183:22:0;;;;;;:8;:22;;;;;;;;95164:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;95237:30;95193:10;95237:16;:30::i;:::-;95216:51;;95362:5;95345:13;:22;95340:927;;-1:-1:-1;;;;;95411:22:0;;;;;;:8;:22;;;;;;;;95404:29;;;;;;;;;;;;;;;;;;;;95499:11;;95473:42;;;;;;;;;;;;;;;;;;;;;;;;;95555:46;95568:10;95580:6;95588:4;:11;;;95555;:46::i;:::-;95548:53;;;;;;95340:927;95734:11;;95720;;95734:45;;95772:5;;95734:32;;95751:13;95734:15;:32::i;:45::-;95720:59;;95864:241;;;;;;;;95896:25;95913:6;95896:4;:11;;;:15;;:25;;;;:::i;:::-;95864:241;;;;95949:54;95967:34;95985:4;:14;;;95967:12;:16;;:34;;;;:::i;:::-;95949:12;;;;;:16;:54::i;:::-;95864:241;;96033:12;95864:241;;;;;;;;96075:14;;;;;95864:241;;;;;-1:-1:-1;;;;;95839:22:0;;-1:-1:-1;95839:22:0;;;:8;:22;;;;;:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96127:65;;;;;;;;;;;;;;;;;;;;;;;;;96214:41;96227:10;96239:6;96247;96214:11;:41::i;:::-;96207:48;;;;;95068:1206;;;;;:::o;85804:31::-;;;:::o;86592:21::-;;;-1:-1:-1;;;86592:21:0;;;;;:::o;89296:719::-;64540:6;;-1:-1:-1;;;;;64540:6:0;64550:10;64540:20;64531:67;;;;;-1:-1:-1;;;64531:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;64531:67:0;;;;;;;;;;;;;;;89585:5:::1;:21:::0;:26;89576:73:::1;;;::::0;;-1:-1:-1;;;89576:73:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;89668:269;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89660:5:::1;:277:::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;89948:9:::1;:24:::0;89995:12:::1;89983:9;:24:::0;89296:719::o;86677:24::-;;;;;;;;;;;;;;;;;:::o;64792:260::-;64540:6;;-1:-1:-1;;;;;64540:6:0;64550:10;64540:20;64531:67;;;;;-1:-1:-1;;;64531:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;64531:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;64894:23:0;::::1;64885:75;;;;-1:-1:-1::0;;;64885:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64993:6;::::0;;64976:36:::1;::::0;-1:-1:-1;;;;;64976:36:0;;::::1;::::0;64993:6;::::1;::::0;64976:36:::1;::::0;::::1;65023:9;:21:::0;;-1:-1:-1;;;;;;65023:21:0::1;-1:-1:-1::0;;;;;65023:21:0;;;::::1;::::0;;;::::1;::::0;;64792:260::o;85947:35::-;;;:::o;86461:22::-;;;-1:-1:-1;;;;;86461:22:0;;:::o;101859:427::-;101929:19;101962:16;;:::i;:::-;-1:-1:-1;;;;;;101981:22:0;;;;;;:8;:22;;;;;;;;101962:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;101981:22;102037:34;;:12;;:16;:34::i;:::-;102097:12;;;;102014:57;;-1:-1:-1;102127:11:0;;102122:157;;102173:43;102207:7;102173:28;:15;102194:5;102173:19;:28::i;:43::-;102156:60;;102122:157;;;102266:1;102249:18;;102122:157;101859:427;;;;;;:::o;65064:221::-;65148:9;;-1:-1:-1;;;;;65148:9:0;65134:10;:23;65125:71;;;;-1:-1:-1;;;65125:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65237:9;;;65229:6;;65212:36;;-1:-1:-1;;;;;65237:9:0;;;;65229:6;;;;65212:36;;;65268:9;;;65259:18;;-1:-1:-1;;;;;;65259:18:0;-1:-1:-1;;;;;65268:9:0;;;65259:18;;;;;;65064:221::o;86039:33::-;;;:::o;101202:106::-;101247:4;101272:28;101287:11;:9;:11::i;:::-;101272:9;;;:13;:28::i;:::-;101265:35;;101202:106;:::o;86514:28::-;;;-1:-1:-1;;;;;86514:28:0;;:::o;98814:161::-;98870:4;98895:72;98961:4;98895:60;:42;98916:6;98924:11;:9;:11::i;:::-;98895:19;:42::i;:::-;:58;:60::i;99976:331::-;100024:11;100053:15;100049:251;;;100095:85;100175:3;100095:74;100129:14;-1:-1:-1;;;;;100112:42:0;;100156:9;100112:55;;;;;;;;;;;;;-1:-1:-1;;;;;100112:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;100112:55:0;100095:11;:9;:11::i;:::-;:15;;:74::i;:85::-;100086:94;;100049:251;;;100222:66;100283:3;100222:55;100253:9;-1:-1:-1;;;;;100245:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;100245:30:0;100239:36;;:2;:36;100222:11;:9;:11::i;92317:2600::-;92439:4;-1:-1:-1;;;;;92466:24:0;;92457:54;;;;;-1:-1:-1;;;92457:54:0;;;;;;;;;;;;-1:-1:-1;;;92457:54:0;;;;;;;;;;;;;;;92524:11;:9;:11::i;:::-;92568:13;;92555:9;;:26;;92546:61;;;;;-1:-1:-1;;;92546:61:0;;;;;;;;;;;;-1:-1:-1;;;92546:61:0;;;;;;;;;;;;;;;92628:16;92647:12;:10;:12::i;:::-;92628:31;;92694:11;92681:9;:24;;92672:74;;;;-1:-1:-1;;;92672:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92782:19;92804:36;92833:6;92804:24;92816:5;:11;;;92804:7;:11;;:24;;;;:::i;:36::-;92782:58;;92853:10;92877:8;-1:-1:-1;;;;;92866:29:0;;92897:9;92908:7;92866:51;;;;;;;;;;;;;-1:-1:-1;;;;;92866:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;92866:51:0;92928:31;;;;;;;;;;;;-1:-1:-1;;;92866:51:0;92928:31;;;92866:51;;-1:-1:-1;92928:31:0;;92866:51;92928:11;:31::i;:::-;92970:11;92984:18;92995:5;92984:9;:18::i;:::-;92970:32;;93045:31;;;;;;;;;;;;;;-1:-1:-1;;;93045:31:0;;;93069:6;93045:11;:31::i;:::-;93108:8;93098:6;:18;;93089:47;;;;;-1:-1:-1;;;93089:47:0;;;;;;;;;;;;-1:-1:-1;;;93089:47:0;;;;;;;;;;;;;;;93216:11;:9;:11::i;:::-;93206:6;:21;;93197:49;;;;;-1:-1:-1;;;93197:49:0;;;;;;;;;;;;-1:-1:-1;;;93197:49:0;;;;;;;;;;;;;;;93478:74;-1:-1:-1;;;;;93486:9:0;93478:36;93516:10;93536:4;93543:7;93478:36;:74::i;:::-;93597:15;;93563:67;;-1:-1:-1;;;;;93571:9:0;93563:32;;;93597:15;93614:14;93563:32;:67::i;:::-;93643:18;93664:27;:7;93676:14;93664:11;:27::i;:::-;93643:48;-1:-1:-1;93702:70:0;-1:-1:-1;;;;;93710:9:0;93702:32;93745:8;93643:48;93702:32;:70::i;:::-;93813:16;93832:35;93860:6;93832:23;93843:5;:11;;;93832:6;:10;;:23;;;;:::i;:35::-;93813:54;;93878:8;93889:37;93918:6;93889:23;93901:5;:9;;;93889:6;:10;;:23;;;;:::i;:37::-;93878:48;-1:-1:-1;93937:14:0;93954:32;93979:6;93954:20;:11;93878:48;93954:15;:20::i;:::-;:24;;:32::i;:::-;93937:49;;94009:8;-1:-1:-1;;;;;93999:31:0;;94039:4;94045:9;93999:56;;;;;;;;;;;;;-1:-1:-1;;;;;93999:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;94115:41:0;;-1:-1:-1;;;;;;;94123:6:0;94115:29;;-1:-1:-1;94146:3:0;94151;94115:29;:41::i;:::-;94198:15;;94167:61;;-1:-1:-1;;;;;94175:6:0;94167:29;;;94198:15;94215:11;94167:29;:61::i;:::-;94297:9;;:22;;94312:5;94297:13;:22::i;:::-;94285:9;:34;94411:200;;;;;;;;-1:-1:-1;;;;;94440:22:0;;-1:-1:-1;94440:22:0;;;:8;:22;;;;;;:29;94411:200;;94440:43;;94475:6;94440:33;:43::i;:::-;94411:200;;;;94507:5;:17;;;94411:200;;;;94550:12;94411:200;;;;94588:11;94411:200;;;94386:8;:22;94396:10;-1:-1:-1;;;;;94386:22:0;-1:-1:-1;;;;;94386:22:0;;;;;;;;;;;;:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;94737:11;94698:37;94716:5;:17;;;94698:12;:16;;:37;;;;:::i;:::-;94668:82;;;;;;;;94690:6;;94668:82;;;;;;;;;;94844:8;:6;:8::i;:::-;-1:-1:-1;94902:6:0;;92317:2600;-1:-1:-1;;;;;;;;;;92317:2600:0:o;100828:275::-;100885:4;100908:15;100903:193;;;100948:85;101028:3;100948:74;100982:14;-1:-1:-1;;;;;100965:42:0;;101009:9;100965:55;;;;;;;;;;;;;-1:-1:-1;;;;;100965:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;100965:55:0;100948:11;:9;:11::i;100903:193::-;101073:11;:9;:11::i;86119:28::-;;;:::o;103048:271::-;103111:4;103148:6;-1:-1:-1;;;;;103138:16:0;:6;-1:-1:-1;;;;;103138:16:0;;;103129:27;;;;;;103186:9;-1:-1:-1;;;;;103176:19:0;:6;-1:-1:-1;;;;;103176:19:0;;;103167:30;;;;;;103208:81;103239:3;103252:6;-1:-1:-1;;;;;103244:26:0;;103280:4;103244:43;;;;;;;;;;;;;-1:-1:-1;;;;;103244:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;103244:43:0;-1:-1:-1;;;;;103208:29:0;;;:81;:29;:81::i;:::-;-1:-1:-1;103307:4:0;103048:271;;;:::o;85877:34::-;;;:::o;86380:39::-;;;:::o;86743:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;100434:273::-;100477:15;100509:11;100531:6;-1:-1:-1;;;;;100523:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;100523:30:0;;-1:-1:-1;100577:122:0;100693:4;100577:110;:92;100612:24;100631:3;100612:13;:11;:13::i;:24::-;100652:6;100577:19;:92::i;:122::-;100564:135;;100434:273;;:::o;91770:318::-;64540:6;;-1:-1:-1;;;;;64540:6:0;64550:10;64540:20;64531:67;;;;;-1:-1:-1;;;64531:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;64531:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;91866:22:0;::::1;91857:33;;;::::0;::::1;;91906:7;91901:180;;;91931:9;:16:::0;;-1:-1:-1;;;;;;;91931:16:0;;::::1;;-1:-1:-1::0;;;;;;91962:24:0::1;-1:-1:-1::0;;;;;91962:24:0;::::1;;::::0;;91901:180:::1;;;92019:9;:17:::0;;-1:-1:-1;;;;92019:17:0::1;::::0;;92051:7:::1;:18:::0;;-1:-1:-1;;;;;92051:18:0;::::1;-1:-1:-1::0;;;;;;92051:18:0;;::::1;;::::0;;91770:318;;:::o;86622:18::-;;;;;;;;;;;;;;;;:::o;86281:37::-;;;:::o;99080:290::-;99123:11;99165:98;99258:3;99165:87;99221:8;-1:-1:-1;;;;;99211:28:0;;99240:9;99211:39;;;;;;;;;;;;;-1:-1:-1;;;;;99211:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;99211:39:0;99165:40;99192:11;:9;:11::i;:::-;99165:5;:21;;:25;:40::i;:98::-;99288:18;;99156:107;;-1:-1:-1;99279:27:0;;99274:89;;;-1:-1:-1;99333:18:0;;99080:290;:::o;103327:224::-;103407:10;-1:-1:-1;;;;;103421:10:0;103407:24;;;:45;;-1:-1:-1;103435:10:0;-1:-1:-1;;;;;103449:3:0;103435:17;;103407:45;103399:103;;;;-1:-1:-1;;;103399:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;103513:15;:30;;-1:-1:-1;;;;;;103513:30:0;-1:-1:-1;;;;;103513:30:0;;;;;;;;;;103327:224::o;98542:143::-;98585:4;98610:67;98669:6;98610:53;98646:5;:15;;;98618:6;-1:-1:-1;;;;;98610:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;98610:30:0;;:34;:53::i;101410:286::-;101453:11;101478:20;101501:29;101519:9;;101501:12;:16;;:29;;;;:::i;:::-;101588:17;;101550:9;;101478:52;;-1:-1:-1;101550:57:0;;:32;;101478:52;101550:13;:32::i;:57::-;101541:66;;101632:9;;101623:6;:18;101618:71;;;101668:9;;101659:18;;101618:71;101410:286;;:::o;86918:21::-;;;;:::o;86836:::-;;;;:::o;65851:250::-;65909:7;65933:6;65929:47;;-1:-1:-1;65963:1:0;65956:8;;65929:47;66000:5;;;66004:1;66000;:5;:1;66024:5;;;;;:10;66016:56;;;;-1:-1:-1;;;66016:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66092:1;65851:250;-1:-1:-1;;;65851:250:0:o;66109:132::-;66167:7;66194:39;66198:1;66201;66194:39;;;;;;;;;;;;;;;;;:3;:39::i;96504:699::-;96593:4;96617:6;96611:560;;96683:6;-1:-1:-1;;;;;96675:25:0;;96702:10;96714:7;96675:48;;;;;;;;;;;;;-1:-1:-1;;;;;96675:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;96611:560:0;;-1:-1:-1;96611:560:0;;96802:9;;-1:-1:-1;;;96802:9:0;;;;96797:363;;;96889:13;;;96863:50;;;-1:-1:-1;;;96863:50:0;;-1:-1:-1;;;;;96889:13:0;;;96863:50;;;;;;;;;;;;;;96871:6;96863:24;;;;;;:50;;;;;;;;;;;;;;-1:-1:-1;96863:24:0;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;96948:13:0;;;96932:60;;;-1:-1:-1;;;96932:60:0;;;;;;;;-1:-1:-1;;;;;96932:60:0;;;;;;;;;96948:13;;;96932:37;;:60;;;;;96948:13;;96932:60;;;;;;;96948:13;;96932:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96797:363;;;97059:7;;97033:44;;;-1:-1:-1;;;97033:44:0;;-1:-1:-1;;;;;97059:7:0;;;97033:44;;;;;;;;;;;;97041:6;97033:24;;;;;;:44;;;;;;;;;;;;;;;-1:-1:-1;97033:24:0;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;97106:7:0;;97096:48;;;-1:-1:-1;;;97096:48:0;;;;;;;;-1:-1:-1;;;;;97096:48:0;;;;;;;;;97106:7;;;;;97096:25;;:48;;;;;97033:44;;97096:48;;;;;;;97106:7;;97096:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;96797:363:0;-1:-1:-1;97188:7:0;96504:699;-1:-1:-1;;96504:699:0:o;65507:136::-;65565:7;65592:43;65596:1;65599;65592:43;;;;;;;;;;;;;;;;;:3;:43::i;83664:719::-;83745:16;;:::i;:::-;83796:1;83782:11;:15;83774:66;;;;-1:-1:-1;;;83774:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83855:14;83851:50;;-1:-1:-1;83878:23:0;;;;;;;;;-1:-1:-1;83878:23:0;;83871:30;;83851:50;83918:24;;;83914:462;;83959:14;84004:11;83090:3;83977:23;;;84004:11;83976:39;;;;;;-1:-1:-1;;;;;;84038:21:0;;;84030:64;;;;;-1:-1:-1;;;84030:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;84116:26;;;;;;;;84134:6;-1:-1:-1;;;;;84116:26:0;;;;84109:33;;;;;83914:462;84175:14;84192:45;84208:9;-1:-1:-1;;;84225:11:0;84192:15;:45::i;:::-;84175:62;-1:-1:-1;;;;;;84260:21:0;;;84252:64;;;;;-1:-1:-1;;;84252:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;83519:137;83621:7;83632:16;-1:-1:-1;;;;;83616:13:0;;;:32;;83519:137::o;98273:124::-;98326:28;98341:11;:9;:11::i;98326:28::-;98314:9;:40;98377:12;98365:9;:24;98273:124::o;99497:374::-;99538:11;99572:98;99665:3;99572:87;99628:8;-1:-1:-1;;;;;99618:28:0;;99647:9;99618:39;;;;;;;;;;;;;-1:-1:-1;;;;;99618:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;99572:98;99695:18;;99563:107;;-1:-1:-1;99686:27:0;;99681:183;;;-1:-1:-1;99740:18:0;;99681:183;;;99789:18;;:23;99784:80;;99851:1;99830:18;:22;99497:374;:::o;6160:132::-;6219:68;6279:2;6283;6235:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6235:51:0;;;-1:-1:-1;;6235:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;6235:51:0;-1:-1:-1;;;6235:51:0;;;;-1:-1:-1;6219:15:0;;-1:-1:-1;;;6219:68:0:i;80201:205::-;80329:68;;;-1:-1:-1;;;;;80329:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;80329:68:0;-1:-1:-1;;;80329:68:0;;;80302:96;;80322:5;;80302:19;:96::i;:::-;80201:205;;;;:::o;80016:177::-;80126:58;;;-1:-1:-1;;;;;80126:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;80126:58:0;-1:-1:-1;;;80126:58:0;;;80099:86;;80119:5;;80099:19;:86::i;:::-;80016:177;;;:::o;65318:181::-;65376:7;65408:5;;;65432:6;;;;65424:46;;;;;-1:-1:-1;;;65424:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;97295:917;97381:17;;97355:20;;97333:19;;97355:45;;:20;:24;:45::i;:::-;97415:15;;97333:67;;-1:-1:-1;97415:20:0;;;;:54;;;97455:14;97439:12;:30;;97415:54;97411:794;;;97502:5;:21;97543:10;:14;;;97538:494;;;97630:15;;97603:5;:21;:44;;:25;:44::i;:::-;97579:5;:68;;;97696:17;;-1:-1:-1;97666:112:0;;97757:1;97739:15;:19;97666:112;97538:494;;;97869:15;;97842:5;:21;:44;;:25;:44::i;:::-;97818:5;:68;;;97935:17;;-1:-1:-1;97905:112:0;;97996:1;97978:15;:19;97905:112;98069:12;98046:20;:35;98137:5;:21;98160:15;;98046:10;98177:14;98101:92;;;;;;;;;;;;;;;;;;;;98177:14;;98101:92;;;;;;;;;;;;;;;;97411:794;;97295:917;:::o;66249:189::-;66335:7;66370:12;66363:5;66355:28;;;;-1:-1:-1;;;66355:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66394:9;66410:1;66406;:5;;;;;;;66249:189;-1:-1:-1;;;;;66249:189:0:o;65651:192::-;65737:7;65773:12;65765:6;;;;65757:29;;;;-1:-1:-1;;;65757:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;65809:5:0;;;65651:192::o;82564:347::-;82670:7;82691:9;82702;82715:13;82723:1;82726;82715:7;:13::i;:::-;82690:38;;;;82739:10;82765:1;82752:15;;;;;82762:1;82759;82752:15;82739:28;;82787:1;82782:2;:6;82778:18;;;82795:1;82790:6;;;;82778:18;82812:2;82807:7;;;;82837:1;82833;:5;82825:44;;;;;-1:-1:-1;;;82825:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;82887:16;82895:1;82898;82901;82887:7;:16::i;:::-;82880:23;82564:347;-1:-1:-1;;;;;;;82564:347:0:o;251:295::-;340:14;;202:42;452:2;439:16;;316:21;;340:14;439:16;202:42;480:5;469:68;460:77;;413:129;;;:::o;81405:420::-;81488:23;81514:69;81542:4;81514:69;;;;;;;;;;;;;;;;;81522:5;-1:-1:-1;;;;;81514:27:0;;;:69;;;;;:::i;:::-;81598:17;;81488:95;;-1:-1:-1;81598:21:0;81594:224;;81740:10;81729:30;;;;;;;;;;;;;;;-1:-1:-1;81729:30:0;81721:85;;;;-1:-1:-1;;;81721:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;81856:210;81917:9;;;-1:-1:-1;;81973:1:0;81970;81963:25;81950:38;;82007:1;82003;:5;81999:9;;82028:1;82023:2;:6;82019:10;;82049:1;82044:2;:6;82040:18;;;82057:1;82052:6;;;;82040:18;81856:210;;;;;;:::o;82074:482::-;82180:7;82219:2;;;82215:6;;;82220:1;82215:6;82232:9;;;;;;;82257:4;82252:9;;;;;;;;;82292:4;82284;82283:5;;82282:14;;;;;82341:1;:9;;;82370:5;;;82366:9;;82361:14;82395:5;;;82391:9;;82386:14;82420:5;;;82416:9;;82411:14;82445:5;;;82441:9;;82436:14;82470:5;;;82466:9;;82461:14;82495:5;;;82491:9;;82486:14;82520:5;;;82516:9;;82511:14;;;82282;;82299:1;82282:18;82277:24;;;;82272:29;;;;82543:5;;82074:482;-1:-1:-1;;82074:482:0:o;67950:196::-;68053:12;68085:53;68108:6;68116:4;68122:1;68125:12;68085:22;:53::i;:::-;68078:60;67950:196;-1:-1:-1;;;;67950:196:0:o;68926:979::-;69056:12;69089:18;69100:6;69089:10;:18::i;:::-;69081:60;;;;;-1:-1:-1;;;69081:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;69215:12;69229:23;69256:6;-1:-1:-1;;;;;69256:11:0;69276:8;69287:4;69256:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;69256:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69214:78;;;;69307:7;69303:595;;;69338:10;-1:-1:-1;69331:17:0;;-1:-1:-1;69331:17:0;69303:595;69452:17;;:21;69448:439;;69715:10;69709:17;69776:15;69763:10;69759:2;69755:19;69748:44;69663:148;69851:20;;-1:-1:-1;;;69851:20:0;;;;;;;;;;;;;;;;;69858:12;;69851:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67123:233;67301:20;67340:8;;;67123:233::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://fe403a52cb02c5c56144f9011b7cae8242ed0297337e1f0f18aa937d9f004655
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.