Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xe0cc325b824d60564ee9fe8a14ef394e7e8bc1c49e214dd89a9f4d18582e1afd | Set Operator | 30822517 | 315 days 7 hrs ago | 0x5fa80b63ca5dafcabe2d414e3ba1fef03f78df4a | IN | 0x1e91090df36b2010e52ba33d6071210e74651d19 | 0 MATIC | 0.00080805 | |
0x3698465e388eb0e0273656efc12ba462681daeb2fbc04927c8a9873ca8658f10 | Set Extra Funds | 30822508 | 315 days 7 hrs ago | 0x5fa80b63ca5dafcabe2d414e3ba1fef03f78df4a | IN | 0x1e91090df36b2010e52ba33d6071210e74651d19 | 0 MATIC | 0.003395700001 | |
0x700d0e47f125a315826611f2873a464ad1f667596c41fe69236a428f300d868b | Initialize | 30821998 | 315 days 7 hrs ago | 0x5fa80b63ca5dafcabe2d414e3ba1fef03f78df4a | IN | 0x1e91090df36b2010e52ba33d6071210e74651d19 | 0 MATIC | 0.027010950012 | |
0x1aab1f5410971f6cc7d1a9c77dff966c30b1d0a9be1680ac70adf4e5ccaf08e9 | 0x60806040 | 30821551 | 315 days 8 hrs ago | 0x5fa80b63ca5dafcabe2d414e3ba1fef03f78df4a | IN | Create: Treasury | 0 MATIC | 0.116997030062 |
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Treasury
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-07-17 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/math/Math.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ 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; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ 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"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ 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 { // 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); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ 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)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length 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)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. 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"); } } } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: contracts/lib/Babylonian.sol pragma solidity ^0.6.0; library Babylonian { function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } // else z = 0 } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity >=0.6.0 <0.8.0; // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/owner/Operator.sol pragma solidity 0.6.12; contract Operator is Context, Ownable { address private _operator; event OperatorTransferred(address indexed previousOperator, address indexed newOperator); constructor() internal { _operator = _msgSender(); emit OperatorTransferred(address(0), _operator); } function operator() public view returns (address) { return _operator; } modifier onlyOperator() { require(_operator == msg.sender, "operator: caller is not the operator"); _; } function isOperator() public view returns (bool) { return _msgSender() == _operator; } function transferOperator(address newOperator_) public onlyOwner { _transferOperator(newOperator_); } function _transferOperator(address newOperator_) internal { require(newOperator_ != address(0), "operator: zero address given for new operator"); emit OperatorTransferred(address(0), newOperator_); _operator = newOperator_; } } // File: contracts/utils/ContractGuard.sol pragma solidity 0.6.12; contract ContractGuard { mapping(uint256 => mapping(address => bool)) private _status; function checkSameOriginReentranted() internal view returns (bool) { return _status[block.number][tx.origin]; } function checkSameSenderReentranted() internal view returns (bool) { return _status[block.number][msg.sender]; } modifier onlyOneBlock() { require(!checkSameOriginReentranted(), "ContractGuard: one block, one function"); require(!checkSameSenderReentranted(), "ContractGuard: one block, one function"); _; _status[block.number][tx.origin] = true; _status[block.number][msg.sender] = true; } } // File: contracts/interfaces/IBasisAsset.sol pragma solidity ^0.6.0; interface IBasisAsset { function mint(address recipient, uint256 amount) external returns (bool); function burn(uint256 amount) external; function burnFrom(address from, uint256 amount) external; function isOperator() external returns (bool); function operator() external view returns (address); function transferOperator(address newOperator_) external; } // File: contracts/interfaces/IOracle.sol pragma solidity 0.6.12; interface IOracle { function update() external; function consult(address _token, uint256 _amountIn) external view returns (uint144 amountOut); function twap(address _token, uint256 _amountIn) external view returns (uint144 _amountOut); } // File: contracts/interfaces/IMasonry.sol pragma solidity 0.6.12; interface IMasonry { function balanceOf(address _mason) external view returns (uint256); function earned(address _mason) external view returns (uint256); function canWithdraw(address _mason) external view returns (bool); function canClaimReward(address _mason) external view returns (bool); function epoch() external view returns (uint256); function nextEpochPoint() external view returns (uint256); function getPegPrice() external view returns (uint256); function setOperator(address _operator) external; function setLockUp(uint256 _withdrawLockupEpochs, uint256 _rewardLockupEpochs) external; function stake(uint256 _amount) external; function withdraw(uint256 _amount) external; function exit() external; function claimReward() external; function allocateSeigniorage(uint256 _amount) external; function governanceRecoverUnsupported(address _token, uint256 _amount, address _to) external; } // File: contracts/Treasury.sol pragma solidity 0.6.12; contract Treasury is ContractGuard { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; /* ========= CONSTANT VARIABLES ======== */ uint256 public constant PERIOD = 6 hours; /* ========== STATE VARIABLES ========== */ // governance address public operator; // flags bool public initialized = false; // epoch uint256 public startTime; uint256 public epoch = 0; uint256 public epochSupplyContractionLeft = 0; // exclusions from total supply address[] public excludedFromTotalSupply; // core components address public pToken; address public bond; address public lion; address public masonry; address public oracle; // price uint256 public pTokenPriceOne; uint256 public pTokenPriceCeiling; uint256 public seigniorageSaved; uint256[] public supplyTiers; uint256[] public maxExpansionTiers; uint256 public maxSupplyExpansionPercent; uint256 public bondDepletionFloorPercent; uint256 public seigniorageExpansionFloorPercent; uint256 public maxSupplyContractionPercent; uint256 public maxDebtRatioPercent; // 28 first epochs (1 week) with 4.5% expansion regardless of PEG price uint256 public bootstrapEpochs; uint256 public bootstrapSupplyExpansionPercent; /* =================== Added variables =================== */ uint256 public previousEpochPegPrice; uint256 public maxDiscountRate; // when purchasing bond uint256 public maxPremiumRate; // when redeeming bond uint256 public discountPercent; uint256 public premiumThreshold; uint256 public premiumPercent; uint256 public mintingFactorForPayingDebt; // print extra PEG during debt phase address public daoFund; uint256 public daoFundSharedPercent; address public devFund; uint256 public devFundSharedPercent; /* =================== Events =================== */ event Initialized(address indexed executor, uint256 at); event BurnedBonds(address indexed from, uint256 bondAmount); event RedeemedBonds(address indexed from, uint256 pegAmount, uint256 bondAmount); event BoughtBonds(address indexed from, uint256 pegAmount, uint256 bondAmount); event TreasuryFunded(uint256 timestamp, uint256 seigniorage); event MasonryFunded(uint256 timestamp, uint256 seigniorage); event DaoFundFunded(uint256 timestamp, uint256 seigniorage); event DevFundFunded(uint256 timestamp, uint256 seigniorage); /* =================== Modifier =================== */ modifier onlyOperator() { require(operator == msg.sender, "Treasury: caller is not the operator"); _; } modifier checkCondition { require(now >= startTime, "Treasury: not started yet"); _; } modifier checkEpoch { require(now >= nextEpochPoint(), "Treasury: not opened yet"); _; epoch = epoch.add(1); epochSupplyContractionLeft = (getPegPrice() > pTokenPriceCeiling) ? 0 : getPegCirculatingSupply().mul(maxSupplyContractionPercent).div(10000); } modifier checkOperator { require( IBasisAsset(pToken).operator() == address(this) && IBasisAsset(bond).operator() == address(this) && Operator(masonry).operator() == address(this), "Treasury: need more permission" ); _; } modifier notInitialized { require(!initialized, "Treasury: already initialized"); _; } /* ========== VIEW FUNCTIONS ========== */ function isInitialized() public view returns (bool) { return initialized; } // epoch function nextEpochPoint() public view returns (uint256) { return startTime.add(epoch.mul(PERIOD)); } // oracle function getPegPrice() public view returns (uint256 pegPrice) { try IOracle(oracle).consult(pToken, 1e18) returns (uint144 price) { return uint256(price); } catch { revert("Treasury: failed to consult Peg price from the oracle"); } } function getPegUpdatedPrice() public view returns (uint256 _pegPrice) { try IOracle(oracle).twap(pToken, 1e18) returns (uint144 price) { return uint256(price); } catch { revert("Treasury: failed to consult Peg price from the oracle"); } } // budget function getReserve() public view returns (uint256) { return seigniorageSaved; } function getBurnablePegLeft() public view returns (uint256 _burnablePegLeft) { uint256 _pegPrice = getPegPrice(); if (_pegPrice <= pTokenPriceOne) { uint256 _pegSupply = getPegCirculatingSupply(); uint256 _bondMaxSupply = _pegSupply.mul(maxDebtRatioPercent).div(10000); uint256 _bondSupply = IERC20(bond).totalSupply(); if (_bondMaxSupply > _bondSupply) { uint256 _maxMintableBond = _bondMaxSupply.sub(_bondSupply); uint256 _maxBurnablePeg = _maxMintableBond.mul(_pegPrice).div(1e18); _burnablePegLeft = Math.min(epochSupplyContractionLeft, _maxBurnablePeg); } } } function getRedeemableBonds() public view returns (uint256 _redeemableBonds) { uint256 _pegPrice = getPegPrice(); if (_pegPrice > pTokenPriceCeiling) { uint256 _totalPeg = IERC20(pToken).balanceOf(address(this)); uint256 _rate = getBondPremiumRate(); if (_rate > 0) { _redeemableBonds = _totalPeg.mul(1e18).div(_rate); } } } function getBondDiscountRate() public view returns (uint256 _rate) { uint256 _pegPrice = getPegPrice(); if (_pegPrice <= pTokenPriceOne) { if (discountPercent == 0) { // no discount _rate = pTokenPriceOne; } else { uint256 _bondAmount = pTokenPriceOne.mul(1e18).div(_pegPrice); // to burn 1 PEG uint256 _discountAmount = _bondAmount.sub(pTokenPriceOne).mul(discountPercent).div(10000); _rate = pTokenPriceOne.add(_discountAmount); if (maxDiscountRate > 0 && _rate > maxDiscountRate) { _rate = maxDiscountRate; } } } } function getBondPremiumRate() public view returns (uint256 _rate) { uint256 _pegPrice = getPegPrice(); if (_pegPrice > pTokenPriceCeiling) { uint256 _pegPricePremiumThreshold = pTokenPriceOne.mul(premiumThreshold).div(100); if (_pegPrice >= _pegPricePremiumThreshold) { //Price > 1.10 uint256 _premiumAmount = _pegPrice.sub(pTokenPriceOne).mul(premiumPercent).div(10000); _rate = pTokenPriceOne.add(_premiumAmount); if (maxPremiumRate > 0 && _rate > maxPremiumRate) { _rate = maxPremiumRate; } } else { // no premium bonus _rate = pTokenPriceOne; } } } /* ========== GOVERNANCE ========== */ function initialize( address _peg, address _bond, address _lion, address _oracle, address _masonry, address _genesisPool, uint256 _startTime ) public notInitialized { pToken = _peg; bond = _bond; lion = _lion; oracle = _oracle; masonry = _masonry; startTime = _startTime; pTokenPriceOne = 10**18; pTokenPriceCeiling = pTokenPriceOne.mul(101).div(100); // exclude contracts from total supply excludedFromTotalSupply.push(_genesisPool); // Dynamic max expansion percent supplyTiers = [0 ether, 500000 ether, 1000000 ether, 1500000 ether, 2000000 ether, 5000000 ether, 10000000 ether, 20000000 ether, 50000000 ether]; maxExpansionTiers = [190, 180, 160, 140, 120, 100, 80, 60, 40]; maxSupplyExpansionPercent = 200; // Upto 2.0% supply for expansion bondDepletionFloorPercent = 10000; // 100% of Bond supply for depletion floor seigniorageExpansionFloorPercent = 3500; // At least 35% of expansion reserved for masonry maxSupplyContractionPercent = 300; // Upto 3.0% supply for contraction (to burn PEG and mint Bond) maxDebtRatioPercent = 3500; // Upto 35% supply of Bond to purchase premiumThreshold = 110; premiumPercent = 7000; // First 28 epochs with 2.0% expansion bootstrapEpochs = 28; bootstrapSupplyExpansionPercent = 200; // set seigniorageSaved to it's balance seigniorageSaved = IERC20(pToken).balanceOf(address(this)); initialized = true; operator = msg.sender; emit Initialized(msg.sender, block.number); } function setOperator(address _operator) external onlyOperator { operator = _operator; } function setMasonry(address _masonry) external onlyOperator { masonry = _masonry; } function setPegOracle(address _oracle) external onlyOperator { oracle = _oracle; } function setPegPriceCeiling(uint256 _pegPriceCeiling) external onlyOperator { require(_pegPriceCeiling >= pTokenPriceOne && _pegPriceCeiling <= pTokenPriceOne.mul(120).div(100), "out of range"); // [$1.0, $1.2] pTokenPriceCeiling = _pegPriceCeiling; } function setMaxSupplyExpansionPercents(uint256 _maxSupplyExpansionPercent) external onlyOperator { require(_maxSupplyExpansionPercent >= 10 && _maxSupplyExpansionPercent <= 1000, "_maxSupplyExpansionPercent: out of range"); // [0.1%, 10%] maxSupplyExpansionPercent = _maxSupplyExpansionPercent; } function setSupplyTiersEntry(uint8 _index, uint256 _value) external onlyOperator returns (bool) { require(_index >= 0, "Index has to be higher than 0"); require(_index < 9, "Index has to be lower than count of tiers"); if (_index > 0) { require(_value > supplyTiers[_index - 1]); } if (_index < 8) { require(_value < supplyTiers[_index + 1]); } supplyTiers[_index] = _value; return true; } function setMaxExpansionTiersEntry(uint8 _index, uint256 _value) external onlyOperator returns (bool) { require(_index >= 0, "Index has to be higher than 0"); require(_index < 9, "Index has to be lower than count of tiers"); require(_value >= 10 && _value <= 1000, "_value: out of range"); // [0.1%, 10%] maxExpansionTiers[_index] = _value; return true; } function setBondDepletionFloorPercent(uint256 _bondDepletionFloorPercent) external onlyOperator { require(_bondDepletionFloorPercent >= 500 && _bondDepletionFloorPercent <= 10000, "out of range"); // [5%, 100%] bondDepletionFloorPercent = _bondDepletionFloorPercent; } function setMaxSupplyContractionPercent(uint256 _maxSupplyContractionPercent) external onlyOperator { require(_maxSupplyContractionPercent >= 100 && _maxSupplyContractionPercent <= 1500, "out of range"); // [0.1%, 15%] maxSupplyContractionPercent = _maxSupplyContractionPercent; } function setMaxDebtRatioPercent(uint256 _maxDebtRatioPercent) external onlyOperator { require(_maxDebtRatioPercent >= 1000 && _maxDebtRatioPercent <= 10000, "out of range"); // [10%, 100%] maxDebtRatioPercent = _maxDebtRatioPercent; } function setBootstrap(uint256 _bootstrapEpochs, uint256 _bootstrapSupplyExpansionPercent) external onlyOperator { require(_bootstrapEpochs <= 120, "_bootstrapEpochs: out of range"); // <= 1 month require(_bootstrapSupplyExpansionPercent >= 100 && _bootstrapSupplyExpansionPercent <= 1000, "_bootstrapSupplyExpansionPercent: out of range"); // [1%, 10%] bootstrapEpochs = _bootstrapEpochs; bootstrapSupplyExpansionPercent = _bootstrapSupplyExpansionPercent; } function setExtraFunds( address _daoFund, uint256 _daoFundSharedPercent, address _devFund, uint256 _devFundSharedPercent ) external onlyOperator { require(_daoFund != address(0), "zero"); require(_daoFundSharedPercent <= 3000, "out of range"); // <= 30% require(_devFund != address(0), "zero"); require(_devFundSharedPercent <= 1000, "out of range"); // <= 10% daoFund = _daoFund; daoFundSharedPercent = _daoFundSharedPercent; devFund = _devFund; devFundSharedPercent = _devFundSharedPercent; } function setMaxDiscountRate(uint256 _maxDiscountRate) external onlyOperator { maxDiscountRate = _maxDiscountRate; } function setMaxPremiumRate(uint256 _maxPremiumRate) external onlyOperator { maxPremiumRate = _maxPremiumRate; } function setDiscountPercent(uint256 _discountPercent) external onlyOperator { require(_discountPercent <= 20000, "_discountPercent is over 200%"); discountPercent = _discountPercent; } function setPremiumThreshold(uint256 _premiumThreshold) external onlyOperator { require(_premiumThreshold >= pTokenPriceCeiling, "_premiumThreshold exceeds pegPriceCeiling"); require(_premiumThreshold <= 150, "_premiumThreshold is higher than 1.5"); premiumThreshold = _premiumThreshold; } function setPremiumPercent(uint256 _premiumPercent) external onlyOperator { require(_premiumPercent <= 20000, "_premiumPercent is over 200%"); premiumPercent = _premiumPercent; } function setMintingFactorForPayingDebt(uint256 _mintingFactorForPayingDebt) external onlyOperator { require(_mintingFactorForPayingDebt >= 10000 && _mintingFactorForPayingDebt <= 20000, "_mintingFactorForPayingDebt: out of range"); // [100%, 200%] mintingFactorForPayingDebt = _mintingFactorForPayingDebt; } /* ========== MUTABLE FUNCTIONS ========== */ function _updatePegPrice() internal { try IOracle(oracle).update() {} catch {} } function getPegCirculatingSupply() public view returns (uint256) { IERC20 pegErc20 = IERC20(pToken); uint256 totalSupply = pegErc20.totalSupply(); uint256 balanceExcluded = 0; for (uint8 entryId = 0; entryId < excludedFromTotalSupply.length; ++entryId) { balanceExcluded = balanceExcluded.add(pegErc20.balanceOf(excludedFromTotalSupply[entryId])); } return totalSupply.sub(balanceExcluded); } function buyBonds(uint256 _pegAmount, uint256 targetPrice) external onlyOneBlock checkCondition checkOperator { require(_pegAmount > 0, "Treasury: cannot purchase bonds with zero amount"); uint256 pegPrice = getPegPrice(); require(pegPrice == targetPrice, "Treasury: Peg price moved"); require( pegPrice < pTokenPriceOne, // price < $1 "Treasury: pegPrice not eligible for bond purchase" ); require(_pegAmount <= epochSupplyContractionLeft, "Treasury: not enough bond left to purchase"); uint256 _rate = getBondDiscountRate(); require(_rate > 0, "Treasury: invalid bond rate"); uint256 _bondAmount = _pegAmount.mul(_rate).div(1e18); uint256 pegSupply = getPegCirculatingSupply(); uint256 newBondSupply = IERC20(bond).totalSupply().add(_bondAmount); require(newBondSupply <= pegSupply.mul(maxDebtRatioPercent).div(10000), "over max debt ratio"); IBasisAsset(pToken).burnFrom(msg.sender, _pegAmount); IBasisAsset(bond).mint(msg.sender, _bondAmount); epochSupplyContractionLeft = epochSupplyContractionLeft.sub(_pegAmount); _updatePegPrice(); emit BoughtBonds(msg.sender, _pegAmount, _bondAmount); } function redeemBonds(uint256 _bondAmount, uint256 targetPrice) external onlyOneBlock checkCondition checkOperator { require(_bondAmount > 0, "Treasury: cannot redeem bonds with zero amount"); uint256 pegPrice = getPegPrice(); require(pegPrice == targetPrice, "Treasury: Peg price moved"); require( pegPrice > pTokenPriceCeiling, // price > $1.01 "Treasury: pegPrice not eligible for bond purchase" ); uint256 _rate = getBondPremiumRate(); require(_rate > 0, "Treasury: invalid bond rate"); uint256 _pegAmount = _bondAmount.mul(_rate).div(1e18); require(IERC20(pToken).balanceOf(address(this)) >= _pegAmount, "Treasury: treasury has no more budget"); seigniorageSaved = seigniorageSaved.sub(Math.min(seigniorageSaved, _pegAmount)); IBasisAsset(bond).burnFrom(msg.sender, _bondAmount); IERC20(pToken).safeTransfer(msg.sender, _pegAmount); _updatePegPrice(); emit RedeemedBonds(msg.sender, _pegAmount, _bondAmount); } function _sendToMasonry(uint256 _amount) internal { IBasisAsset(pToken).mint(address(this), _amount); uint256 _daoFundSharedAmount = 0; if (daoFundSharedPercent > 0) { _daoFundSharedAmount = _amount.mul(daoFundSharedPercent).div(10000); IERC20(pToken).transfer(daoFund, _daoFundSharedAmount); emit DaoFundFunded(now, _daoFundSharedAmount); } uint256 _devFundSharedAmount = 0; if (devFundSharedPercent > 0) { _devFundSharedAmount = _amount.mul(devFundSharedPercent).div(10000); IERC20(pToken).transfer(devFund, _devFundSharedAmount); emit DevFundFunded(now, _devFundSharedAmount); } _amount = _amount.sub(_daoFundSharedAmount).sub(_devFundSharedAmount); IERC20(pToken).safeApprove(masonry, 0); IERC20(pToken).safeApprove(masonry, _amount); IMasonry(masonry).allocateSeigniorage(_amount); emit MasonryFunded(now, _amount); } function _calculateMaxSupplyExpansionPercent(uint256 _pegSupply) internal returns (uint256) { for (uint8 tierId = 8; tierId >= 0; --tierId) { if (_pegSupply >= supplyTiers[tierId]) { maxSupplyExpansionPercent = maxExpansionTiers[tierId]; break; } } return maxSupplyExpansionPercent; } function allocateSeigniorage() external onlyOneBlock checkCondition checkEpoch checkOperator { _updatePegPrice(); previousEpochPegPrice = getPegPrice(); uint256 pegSupply = getPegCirculatingSupply().sub(seigniorageSaved); if (epoch < bootstrapEpochs) { // 28 first epochs with 4.5% expansion _sendToMasonry(pegSupply.mul(bootstrapSupplyExpansionPercent).div(10000)); } else { if (previousEpochPegPrice > pTokenPriceCeiling) { // Expansion ($Peg Price > 1 $ETH): there is some seigniorage to be allocated uint256 bondSupply = IERC20(bond).totalSupply(); uint256 _percentage = previousEpochPegPrice.sub(pTokenPriceOne); uint256 _savedForBond; uint256 _savedForMasonry; uint256 _mse = _calculateMaxSupplyExpansionPercent(pegSupply).mul(1e14); if (_percentage > _mse) { _percentage = _mse; } if (seigniorageSaved >= bondSupply.mul(bondDepletionFloorPercent).div(10000)) { // saved enough to pay debt, mint as usual rate _savedForMasonry = pegSupply.mul(_percentage).div(1e18); } else { // have not saved enough to pay debt, mint more uint256 _seigniorage = pegSupply.mul(_percentage).div(1e18); _savedForMasonry = _seigniorage.mul(seigniorageExpansionFloorPercent).div(10000); _savedForBond = _seigniorage.sub(_savedForMasonry); if (mintingFactorForPayingDebt > 0) { _savedForBond = _savedForBond.mul(mintingFactorForPayingDebt).div(10000); } } if (_savedForMasonry > 0) { _sendToMasonry(_savedForMasonry); } if (_savedForBond > 0) { seigniorageSaved = seigniorageSaved.add(_savedForBond); IBasisAsset(pToken).mint(address(this), _savedForBond); emit TreasuryFunded(now, _savedForBond); } } } } function governanceRecoverUnsupported( IERC20 _token, uint256 _amount, address _to ) external onlyOperator { // do not allow to drain core tokens require(address(_token) != address(pToken), "pToken"); require(address(_token) != address(bond), "bond"); require(address(_token) != address(lion), "lion"); _token.safeTransfer(_to, _amount); } function masonrySetOperator(address _operator) external onlyOperator { IMasonry(masonry).setOperator(_operator); } function masonrySetLockUp(uint256 _withdrawLockupEpochs, uint256 _rewardLockupEpochs) external onlyOperator { IMasonry(masonry).setLockUp(_withdrawLockupEpochs, _rewardLockupEpochs); } function masonryAllocateSeigniorage(uint256 amount) external onlyOperator { IMasonry(masonry).allocateSeigniorage(amount); } function masonryGovernanceRecoverUnsupported( address _token, uint256 _amount, address _to ) external onlyOperator { IMasonry(masonry).governanceRecoverUnsupported(_token, _amount, _to); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"pegAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bondAmount","type":"uint256"}],"name":"BoughtBonds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"bondAmount","type":"uint256"}],"name":"BurnedBonds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"DaoFundFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"DevFundFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"uint256","name":"at","type":"uint256"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"MasonryFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"pegAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bondAmount","type":"uint256"}],"name":"RedeemedBonds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"TreasuryFunded","type":"event"},{"inputs":[],"name":"PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allocateSeigniorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bond","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondDepletionFloorPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bootstrapEpochs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bootstrapSupplyExpansionPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pegAmount","type":"uint256"},{"internalType":"uint256","name":"targetPrice","type":"uint256"}],"name":"buyBonds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daoFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoFundSharedPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFundSharedPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochSupplyContractionLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"excludedFromTotalSupply","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBondDiscountRate","outputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBondPremiumRate","outputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnablePegLeft","outputs":[{"internalType":"uint256","name":"_burnablePegLeft","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPegCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPegPrice","outputs":[{"internalType":"uint256","name":"pegPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPegUpdatedPrice","outputs":[{"internalType":"uint256","name":"_pegPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRedeemableBonds","outputs":[{"internalType":"uint256","name":"_redeemableBonds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_peg","type":"address"},{"internalType":"address","name":"_bond","type":"address"},{"internalType":"address","name":"_lion","type":"address"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"address","name":"_masonry","type":"address"},{"internalType":"address","name":"_genesisPool","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lion","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masonry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"masonryAllocateSeigniorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"masonryGovernanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawLockupEpochs","type":"uint256"},{"internalType":"uint256","name":"_rewardLockupEpochs","type":"uint256"}],"name":"masonrySetLockUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"masonrySetOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxDebtRatioPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDiscountRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxExpansionTiers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPremiumRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyContractionPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyExpansionPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingFactorForPayingDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextEpochPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pTokenPriceCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pTokenPriceOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premiumPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premiumThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousEpochPegPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bondAmount","type":"uint256"},{"internalType":"uint256","name":"targetPrice","type":"uint256"}],"name":"redeemBonds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"seigniorageExpansionFloorPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seigniorageSaved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bondDepletionFloorPercent","type":"uint256"}],"name":"setBondDepletionFloorPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bootstrapEpochs","type":"uint256"},{"internalType":"uint256","name":"_bootstrapSupplyExpansionPercent","type":"uint256"}],"name":"setBootstrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_discountPercent","type":"uint256"}],"name":"setDiscountPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_daoFund","type":"address"},{"internalType":"uint256","name":"_daoFundSharedPercent","type":"uint256"},{"internalType":"address","name":"_devFund","type":"address"},{"internalType":"uint256","name":"_devFundSharedPercent","type":"uint256"}],"name":"setExtraFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_masonry","type":"address"}],"name":"setMasonry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDebtRatioPercent","type":"uint256"}],"name":"setMaxDebtRatioPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDiscountRate","type":"uint256"}],"name":"setMaxDiscountRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxExpansionTiersEntry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPremiumRate","type":"uint256"}],"name":"setMaxPremiumRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupplyContractionPercent","type":"uint256"}],"name":"setMaxSupplyContractionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupplyExpansionPercent","type":"uint256"}],"name":"setMaxSupplyExpansionPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintingFactorForPayingDebt","type":"uint256"}],"name":"setMintingFactorForPayingDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setPegOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pegPriceCeiling","type":"uint256"}],"name":"setPegPriceCeiling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_premiumPercent","type":"uint256"}],"name":"setPremiumPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_premiumThreshold","type":"uint256"}],"name":"setPremiumThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSupplyTiersEntry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyTiers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526001805460ff60a01b191690556000600381905560045534801561002757600080fd5b50614571806100376000396000f3fe608060405234801561001057600080fd5b50600436106104285760003560e01c80636e281cfa1161022b578063a204452b11610130578063cecce38e116100b8578063da3ed41911610087578063da3ed419146109c0578063e90b2454146109c8578063f14698de146109d0578063fcb6f008146109d8578063fd2b1c80146109e057610428565b8063cecce38e1461094f578063d4b149441461096c578063d5d3b26c14610992578063d98f2495146109b857610428565b8063bcc81f19116100ff578063bcc81f19146108e0578063be266d541461091a578063c5967c2614610937578063c8412d021461093f578063c8f987f31461094757610428565b8063a204452b1461088d578063b3ab15fb146108aa578063b4d1d795146108d0578063b8a878f9146108d857610428565b80638c664db6116101b3578063940e606411610182578063940e6064146107da578063951357d41461080057806398b762a1146108365780639982002514610853578063a0487eea1461087057610428565b80638c664db61461078a5780638d934f74146107a7578063900cf0cf146107af57806391bbfed5146107b757610428565b806378e97925116101fa57806378e979251461074d5780637dc0d1d01461075557806381d11eaf1461075d57806382cad83814610765578063874106cc1461078257610428565b80636e281cfa146106f45780636ed480e1146106fc57806372c054f914610722578063734f70961461072a57610428565b8063392e53cd11610331578063570ca735116102b95780635a0fc79c116102885780635a0fc79c146106ae5780635b756179146106b657806362ac58e4146106be57806363f96cf4146106e457806364c9ec6f146106ec57610428565b8063570ca7351461067957806358a06f0714610681578063591663e11461068957806359bf5d39146106a657610428565b8063499f3f1911610300578063499f3f19146105f357806354575af41461061057806354f04a1114610646578063554c478e1461066957806355ebdeef1461067157610428565b8063392e53cd146105be5780634013a08e146105c657806340af7ba5146105ce5780634390d2a8146105eb57610428565b8063158ef93e116103b4578063270ec0cc11610383578063270ec0cc1461057a57806329ef1919146105825780632cac83c41461058a5780632cf53d73146105925780632e9c7b65146105b657610428565b8063158ef93e146105315780631e9872281461054d57806322f832cd1461056a578063235a0c9a1461057257610428565b80630db7eb0b116103fb5780630db7eb0b1461048b578063118ebbf91461049357806312ab0b53146104b65780631460e390146104be578063154ec2db1461051457610428565b806303be7e761461042d57806304e5c7b1146104475780630b5bcec7146104665780630cf6017514610483575b600080fd5b6104356109e8565b60408051918252519081900360200190f35b6104646004803603602081101561045d57600080fd5b50356109ee565b005b6104646004803603602081101561047c57600080fd5b5035610abd565b610435610b59565b610435610c0b565b610464600480360360408110156104a957600080fd5b5080359060200135610cad565b610435611284565b610464600480360360e08110156104d457600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a08101359091169060c0013561128a565b6104646004803603602081101561052a57600080fd5b50356115b9565b61053961165e565b604080519115158252519081900360200190f35b6104646004803603602081101561056357600080fd5b503561166e565b610435611728565b61043561172e565b610435611877565b610435611954565b61043561195a565b61059a611960565b604080516001600160a01b039092168252519081900360200190f35b61043561196f565b610539611975565b610435611985565b610464600480360360208110156105e457600080fd5b503561198b565b61059a611a30565b6104646004803603602081101561060957600080fd5b5035611a3f565b6104646004803603606081101561062657600080fd5b506001600160a01b03813581169160208101359160409091013516611adc565b6104646004803603604081101561065c57600080fd5b5080359060200135611c22565b6104356122db565b6104356123e2565b61059a6123e8565b61059a6123f7565b6104646004803603602081101561069f57600080fd5b5035612406565b6104356124a8565b6104356124ae565b6104646124b4565b610464600480360360208110156106d457600080fd5b50356001600160a01b0316612ae4565b61059a612b96565b61059a612ba5565b610435612bb4565b6104646004803603602081101561071257600080fd5b50356001600160a01b0316612bba565b610435612c25565b6104646004803603604081101561074057600080fd5b5080359060200135612cdd565b610435612d96565b61059a612d9c565b610435612dab565b61059a6004803603602081101561077b57600080fd5b5035612db1565b610435612dd8565b610464600480360360208110156107a057600080fd5b5035612dde565b61059a612e80565b610435612e8f565b610464600480360360408110156107cd57600080fd5b5080359060200135612e95565b610539600480360360408110156107f057600080fd5b5060ff8135169060200135612f8d565b6104646004803603606081101561081657600080fd5b506001600160a01b038135811691602081013591604090910135166130a9565b6104646004803603602081101561084c57600080fd5b503561316c565b6104356004803603602081101561086957600080fd5b50356131ba565b6104356004803603602081101561088657600080fd5b50356131d8565b610464600480360360208110156108a357600080fd5b50356131e5565b610464600480360360208110156108c057600080fd5b50356001600160a01b0316613233565b61043561329e565b6104356132a4565b610464600480360360808110156108f657600080fd5b506001600160a01b03813581169160208101359160408201351690606001356132aa565b6104646004803603602081101561093057600080fd5b503561343f565b6104356134d5565b6104356134ff565b610435613505565b6104646004803603602081101561096557600080fd5b503561350b565b6105396004803603604081101561098257600080fd5b5060ff81351690602001356135ac565b610464600480360360208110156109a857600080fd5b50356001600160a01b03166136a6565b610435613711565b610435613717565b61043561371d565b610435613723565b610435613729565b61043561372f565b60215481565b6001546001600160a01b03163314610a375760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b600c54811015610a785760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b6096811115610ab85760405162461bcd60e51b81526004018080602001828103825260248152602001806142a26024913960400191505060405180910390fd5b601b55565b6001546001600160a01b03163314610b065760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b600a8110158015610b1957506103e88111155b610b545760405162461bcd60e51b815260040180806020018281038252602881526020018061438b6028913960400191505060405180910390fd5b601055565b600080610b64611877565b9050600b548111610c0757601a54610b8057600b549150610c07565b6000610ba982610ba3670de0b6b3a7640000600b5461379190919063ffffffff16565b906137f1565b90506000610bd4612710610ba3601a54610bce600b548761385890919063ffffffff16565b90613791565b600b54909150610be490826138b5565b93506000601854118015610bf9575060185484115b15610c045760185493505b50505b5090565b600080610c16611877565b9050600c54811115610c07576000610c406064610ba3601b54600b5461379190919063ffffffff16565b9050808210610ca2576000610c6c612710610ba3601c54610bce600b548861385890919063ffffffff16565b600b54909150610c7c90826138b5565b93506000601954118015610c91575060195484115b15610c9c5760195493505b50610ca8565b600b5492505b505090565b610cb561390f565b15610cf15760405162461bcd60e51b815260040180806020018281038252602681526020018061445f6026913960400191505060405180910390fd5b610cf961392e565b15610d355760405162461bcd60e51b815260040180806020018281038252602681526020018061445f6026913960400191505060405180910390fd5b600254421015610d88576040805162461bcd60e51b8152602060048201526019602482015278151c99585cdd5c9e4e881b9bdd081cdd185c9d1959081e595d603a1b604482015290519081900360640190fd5b6006546040805163570ca73560e01b8152905130926001600160a01b03169163570ca735916004808301926020929190829003018186803b158015610dcc57600080fd5b505afa158015610de0573d6000803e3d6000fd5b505050506040513d6020811015610df657600080fd5b50516001600160a01b0316148015610e8457506007546040805163570ca73560e01b8152905130926001600160a01b03169163570ca735916004808301926020929190829003018186803b158015610e4d57600080fd5b505afa158015610e61573d6000803e3d6000fd5b505050506040513d6020811015610e7757600080fd5b50516001600160a01b0316145b8015610f0657506009546040805163570ca73560e01b8152905130926001600160a01b03169163570ca735916004808301926020929190829003018186803b158015610ecf57600080fd5b505afa158015610ee3573d6000803e3d6000fd5b505050506040513d6020811015610ef957600080fd5b50516001600160a01b0316145b610f57576040805162461bcd60e51b815260206004820152601e60248201527f54726561737572793a206e656564206d6f7265207065726d697373696f6e0000604482015290519081900360640190fd5b60008211610f965760405162461bcd60e51b815260040180806020018281038252602e815260200180614274602e913960400191505060405180910390fd5b6000610fa0611877565b9050818114610ff2576040805162461bcd60e51b8152602060048201526019602482015278151c99585cdd5c9e4e88141959c81c1c9a58d9481b5bdd9959603a1b604482015290519081900360640190fd5b600c5481116110325760405162461bcd60e51b81526004018080602001828103825260318152602001806142436031913960400191505060405180910390fd5b600061103c610c0b565b905060008111611093576040805162461bcd60e51b815260206004820152601b60248201527f54726561737572793a20696e76616c696420626f6e6420726174650000000000604482015290519081900360640190fd5b60006110ab670de0b6b3a7640000610ba38785613791565b600654604080516370a0823160e01b8152306004820152905192935083926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d602081101561112557600080fd5b505110156111645760405162461bcd60e51b81526004018080602001828103825260258152602001806142ec6025913960400191505060405180910390fd5b61117c611173600d548361394d565b600d5490613858565b600d556007546040805163079cc67960e41b81523360048201526024810188905290516001600160a01b03909216916379cc67909160448082019260009290919082900301818387803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b505060065461120292506001600160a01b031690503383613963565b61120a6139b5565b6040805182815260208101879052815133927f51e0d16595cabc591e64da08e45bb223577e5b9a39cd947b4ddc3472b2dd8878928290030190a25050436000908152602081815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055505050565b600c5481565b600154600160a01b900460ff16156112e9576040805162461bcd60e51b815260206004820152601d60248201527f54726561737572793a20616c726561647920696e697469616c697a6564000000604482015290519081900360640190fd5b600680546001600160a01b03199081166001600160a01b038a811691909117909255600780548216898416179055600880548216888416179055600a80548216878416179055600980549091169185169190911790556002819055670de0b6b3a7640000600b81905561136490606490610ba3906065613791565b600c556005805460018101825560009182527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b03851617905560408051610120810182529182526969e10de76676d0800000602083015269d3c21bcecceda1000000908201526a013da329b633647180000060608201526a01a784379d99db4200000060808201526a0422ca8b0a00a42500000060a08201526a084595161401484a00000060c08201526a108b2a2c2802909400000060e08201526a295be96e6406697200000061010082015261145390600e906009614197565b50604080516101208101825260be815260b4602082015260a0918101829052608c606082015260786080820152606491810191909152605060c0820152603c60e082015260286101008201526114ad90600f9060096141ed565b5060c86010819055612710601155610dac601281905561012c601355601455606e601b55611b58601c908155601555601655600654604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561152a57600080fd5b505afa15801561153e573d6000803e3d6000fd5b505050506040513d602081101561155457600080fd5b5051600d55600180546001600160a01b031960ff60a01b19909116600160a01b1716339081179091556040805143815290517f25ff68dd81b34665b5ba7e553ee5511bf6812e12adb4a7e2c0d9e26b3099ce799181900360200190a250505050505050565b6001546001600160a01b031633146116025760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b614e20811115611659576040805162461bcd60e51b815260206004820152601d60248201527f5f646973636f756e7450657263656e74206973206f7665722032303025000000604482015290519081900360640190fd5b601a55565b600154600160a01b900460ff1681565b6001546001600160a01b031633146116b75760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b600b5481101580156116e357506116df6064610ba36078600b5461379190919063ffffffff16565b8111155b611723576040805162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b604482015290519081900360640190fd5b600c55565b60125481565b600654604080516318160ddd60e01b815290516000926001600160a01b031691839183916318160ddd916004808301926020929190829003018186803b15801561177757600080fd5b505afa15801561178b573d6000803e3d6000fd5b505050506040513d60208110156117a157600080fd5b505190506000805b60055460ff8216101561186357611859846001600160a01b03166370a0823160058460ff16815481106117d857fe5b60009182526020918290200154604080516001600160e01b031960e086901b1681526001600160a01b0390921660048301525160248083019392829003018186803b15801561182657600080fd5b505afa15801561183a573d6000803e3d6000fd5b505050506040513d602081101561185057600080fd5b505183906138b5565b91506001016117a9565b5061186e8282613858565b93505050505b90565b600a5460065460408051633ddac95360e01b81526001600160a01b039283166004820152670de0b6b3a7640000602482015290516000939290921691633ddac95391604480820192602092909190829003018186803b1580156118d957600080fd5b505afa9250505080156118fe57506040513d60208110156118f957600080fd5b505160015b6119395760405162461bcd60e51b81526004018080602001828103825260358152602001806143b36035913960400191505060405180910390fd5b71ffffffffffffffffffffffffffffffffffff169050611874565b601a5481565b60175481565b6008546001600160a01b031681565b60195481565b600154600160a01b900460ff1690565b601d5481565b6001546001600160a01b031633146119d45760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b614e20811115611a2b576040805162461bcd60e51b815260206004820152601c60248201527f5f7072656d69756d50657263656e74206973206f766572203230302500000000604482015290519081900360640190fd5b601c55565b6020546001600160a01b031681565b6001546001600160a01b03163314611a885760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b6127108110158015611a9c5750614e208111155b611ad75760405162461bcd60e51b81526004018080602001828103825260298152602001806143626029913960400191505060405180910390fd5b601d55565b6001546001600160a01b03163314611b255760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b6006546001600160a01b0384811691161415611b71576040805162461bcd60e51b8152602060048201526006602482015265382a37b5b2b760d11b604482015290519081900360640190fd5b6007546001600160a01b0384811691161415611bbd576040805162461bcd60e51b81526020600480830191909152602482015263189bdb9960e21b604482015290519081900360640190fd5b6008546001600160a01b0384811691161415611c09576040805162461bcd60e51b815260206004808301919091526024820152633634b7b760e11b604482015290519081900360640190fd5b611c1d6001600160a01b0384168284613963565b505050565b611c2a61390f565b15611c665760405162461bcd60e51b815260040180806020018281038252602681526020018061445f6026913960400191505060405180910390fd5b611c6e61392e565b15611caa5760405162461bcd60e51b815260040180806020018281038252602681526020018061445f6026913960400191505060405180910390fd5b600254421015611cfd576040805162461bcd60e51b8152602060048201526019602482015278151c99585cdd5c9e4e881b9bdd081cdd185c9d1959081e595d603a1b604482015290519081900360640190fd5b6006546040805163570ca73560e01b8152905130926001600160a01b03169163570ca735916004808301926020929190829003018186803b158015611d4157600080fd5b505afa158015611d55573d6000803e3d6000fd5b505050506040513d6020811015611d6b57600080fd5b50516001600160a01b0316148015611df957506007546040805163570ca73560e01b8152905130926001600160a01b03169163570ca735916004808301926020929190829003018186803b158015611dc257600080fd5b505afa158015611dd6573d6000803e3d6000fd5b505050506040513d6020811015611dec57600080fd5b50516001600160a01b0316145b8015611e7b57506009546040805163570ca73560e01b8152905130926001600160a01b03169163570ca735916004808301926020929190829003018186803b158015611e4457600080fd5b505afa158015611e58573d6000803e3d6000fd5b505050506040513d6020811015611e6e57600080fd5b50516001600160a01b0316145b611ecc576040805162461bcd60e51b815260206004820152601e60248201527f54726561737572793a206e656564206d6f7265207065726d697373696f6e0000604482015290519081900360640190fd5b60008211611f0b5760405162461bcd60e51b81526004018080602001828103825260308152602001806143326030913960400191505060405180910390fd5b6000611f15611877565b9050818114611f67576040805162461bcd60e51b8152602060048201526019602482015278151c99585cdd5c9e4e88141959c81c1c9a58d9481b5bdd9959603a1b604482015290519081900360640190fd5b600b548110611fa75760405162461bcd60e51b81526004018080602001828103825260318152602001806142436031913960400191505060405180910390fd5b600454831115611fe85760405162461bcd60e51b815260040180806020018281038252602a8152602001806144bb602a913960400191505060405180910390fd5b6000611ff2610b59565b905060008111612049576040805162461bcd60e51b815260206004820152601b60248201527f54726561737572793a20696e76616c696420626f6e6420726174650000000000604482015290519081900360640190fd5b6000612061670de0b6b3a7640000610ba38785613791565b9050600061206d61172e565b905060006120f583600760009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120c357600080fd5b505afa1580156120d7573d6000803e3d6000fd5b505050506040513d60208110156120ed57600080fd5b5051906138b5565b9050612112612710610ba36014548561379190919063ffffffff16565b81111561215c576040805162461bcd60e51b81526020600482015260136024820152726f766572206d6178206465627420726174696f60681b604482015290519081900360640190fd5b6006546040805163079cc67960e41b8152336004820152602481018a905290516001600160a01b03909216916379cc67909160448082019260009290919082900301818387803b1580156121af57600080fd5b505af11580156121c3573d6000803e3d6000fd5b5050600754604080516340c10f1960e01b81523360048201526024810188905290516001600160a01b0390921693506340c10f1992506044808201926020929091908290030181600087803b15801561221b57600080fd5b505af115801561222f573d6000803e3d6000fd5b505050506040513d602081101561224557600080fd5b50506004546122549088613858565b60045561225f6139b5565b6040805188815260208101859052815133927f73017f1b70789e2e66759eeb3c7ec11f59e6eedb55d921cfaec5410dd42a4799928290030190a25050436000908152602081815260408083203284529091528082208054600160ff19918216811790925533845291909220805490911690911790555050505050565b6000806122e6611877565b9050600b548111610c075760006122fb61172e565b9050600061231a612710610ba36014548561379190919063ffffffff16565b90506000600760009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561236c57600080fd5b505afa158015612380573d6000803e3d6000fd5b505050506040513d602081101561239657600080fd5b50519050808211156123db5760006123ae8383613858565b905060006123c8670de0b6b3a7640000610ba38489613791565b90506123d66004548261394d565b965050505b5050505090565b601f5481565b6001546001600160a01b031681565b6006546001600160a01b031681565b6001546001600160a01b0316331461244f5760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b6103e8811015801561246357506127108111155b6124a3576040805162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b604482015290519081900360640190fd5b601455565b600d5490565b600d5481565b6124bc61390f565b156124f85760405162461bcd60e51b815260040180806020018281038252602681526020018061445f6026913960400191505060405180910390fd5b61250061392e565b1561253c5760405162461bcd60e51b815260040180806020018281038252602681526020018061445f6026913960400191505060405180910390fd5b60025442101561258f576040805162461bcd60e51b8152602060048201526019602482015278151c99585cdd5c9e4e881b9bdd081cdd185c9d1959081e595d603a1b604482015290519081900360640190fd5b6125976134d5565b4210156125eb576040805162461bcd60e51b815260206004820152601860248201527f54726561737572793a206e6f74206f70656e6564207965740000000000000000604482015290519081900360640190fd5b6006546040805163570ca73560e01b8152905130926001600160a01b03169163570ca735916004808301926020929190829003018186803b15801561262f57600080fd5b505afa158015612643573d6000803e3d6000fd5b505050506040513d602081101561265957600080fd5b50516001600160a01b03161480156126e757506007546040805163570ca73560e01b8152905130926001600160a01b03169163570ca735916004808301926020929190829003018186803b1580156126b057600080fd5b505afa1580156126c4573d6000803e3d6000fd5b505050506040513d60208110156126da57600080fd5b50516001600160a01b0316145b801561276957506009546040805163570ca73560e01b8152905130926001600160a01b03169163570ca735916004808301926020929190829003018186803b15801561273257600080fd5b505afa158015612746573d6000803e3d6000fd5b505050506040513d602081101561275c57600080fd5b50516001600160a01b0316145b6127ba576040805162461bcd60e51b815260206004820152601e60248201527f54726561737572793a206e656564206d6f7265207065726d697373696f6e0000604482015290519081900360640190fd5b6127c26139b5565b6127ca611877565b601755600d546000906127e5906127df61172e565b90613858565b9050601554600354101561281b57612816612811612710610ba36016548561379190919063ffffffff16565b613a19565b612a68565b600c546017541115612a6857600754604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561286c57600080fd5b505afa158015612880573d6000803e3d6000fd5b505050506040513d602081101561289657600080fd5b5051600b546017549192506000916128ad91613858565b905060008060006128c7655af3107a4000610bce88613d59565b9050808411156128d5578093505b6128f0612710610ba36011548861379190919063ffffffff16565b600d54106129155761290e670de0b6b3a7640000610ba38887613791565b9150612981565b600061292d670de0b6b3a7640000610ba38988613791565b905061294a612710610ba36012548461379190919063ffffffff16565b92506129568184613858565b601d549094501561297f5761297c612710610ba3601d548761379190919063ffffffff16565b93505b505b81156129905761299082613a19565b8215612a6257600d546129a390846138b5565b600d55600654604080516340c10f1960e01b81523060048201526024810186905290516001600160a01b03909216916340c10f19916044808201926020929091908290030181600087803b1580156129fa57600080fd5b505af1158015612a0e573d6000803e3d6000fd5b505050506040513d6020811015612a2457600080fd5b5050604080514281526020810185905281517ff705142bf09f04297640495ddf7c59b7fd6f51894c5aea9602d631cf05f0efc2929181900390910190a15b50505050505b50600354612a779060016138b5565b600355600c54612a85611877565b11612aa357612a9e612710610ba3601354610bce61172e565b612aa6565b60005b600455436000908152602081815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055565b6001546001600160a01b03163314612b2d5760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b6009546040805163b3ab15fb60e01b81526001600160a01b0384811660048301529151919092169163b3ab15fb91602480830192600092919082900301818387803b158015612b7b57600080fd5b505af1158015612b8f573d6000803e3d6000fd5b5050505050565b6009546001600160a01b031681565b6007546001600160a01b031681565b600b5481565b6001546001600160a01b03163314612c035760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080612c30611877565b9050600c54811115610c0757600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612c8757600080fd5b505afa158015612c9b573d6000803e3d6000fd5b505050506040513d6020811015612cb157600080fd5b505190506000612cbf610c0b565b90508015610c045761186e81610ba384670de0b6b3a7640000613791565b6001546001600160a01b03163314612d265760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b60095460408051632ffaaa0960e01b8152600481018590526024810184905290516001600160a01b0390921691632ffaaa099160448082019260009290919082900301818387803b158015612d7a57600080fd5b505af1158015612d8e573d6000803e3d6000fd5b505050505050565b60025481565b600a546001600160a01b031681565b60115481565b60058181548110612dbe57fe5b6000918252602090912001546001600160a01b0316905081565b60165481565b6001546001600160a01b03163314612e275760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b6101f48110158015612e3b57506127108111155b612e7b576040805162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b604482015290519081900360640190fd5b601155565b601e546001600160a01b031681565b60035481565b6001546001600160a01b03163314612ede5760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b6078821115612f34576040805162461bcd60e51b815260206004820152601e60248201527f5f626f6f74737472617045706f6368733a206f7574206f662072616e67650000604482015290519081900360640190fd5b60648110158015612f4757506103e88111155b612f825760405162461bcd60e51b815260040180806020018281038252602e8152602001806144e5602e913960400191505060405180910390fd5b601591909155601655565b6001546000906001600160a01b03163314612fd95760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b60098360ff161061301b5760405162461bcd60e51b81526004018080602001828103825260298152602001806143e86029913960400191505060405180910390fd5b60ff83161561304d57600e6001840360ff168154811061303757fe5b9060005260206000200154821161304d57600080fd5b60088360ff16101561308257600e8360010160ff168154811061306c57fe5b9060005260206000200154821061308257600080fd5b81600e8460ff168154811061309357fe5b6000918252602090912001555060015b92915050565b6001546001600160a01b031633146130f25760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b60095460408051631515d6bd60e21b81526001600160a01b038681166004830152602482018690528481166044830152915191909216916354575af491606480830192600092919082900301818387803b15801561314f57600080fd5b505af1158015613163573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031633146131b55760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b601855565b600e81815481106131c757fe5b600091825260209091200154905081565b600f81815481106131c757fe5b6001546001600160a01b0316331461322e5760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b601955565b6001546001600160a01b0316331461327c5760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61546081565b60185481565b6001546001600160a01b031633146132f35760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b6001600160a01b038416613337576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b610bb883111561337d576040805162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b604482015290519081900360640190fd5b6001600160a01b0382166133c1576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6103e8811115613407576040805162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b604482015290519081900360640190fd5b601e80546001600160a01b03199081166001600160a01b0396871617909155601f939093556020805490931691909316179055602155565b6001546001600160a01b031633146134885760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b600954604080516397ffe1d760e01b81526004810184905290516001600160a01b03909216916397ffe1d79160248082019260009290919082900301818387803b158015612b7b57600080fd5b60006134fa6134f161546060035461379190919063ffffffff16565b600254906138b5565b905090565b601c5481565b601b5481565b6001546001600160a01b031633146135545760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b6064811015801561356757506105dc8111155b6135a7576040805162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b604482015290519081900360640190fd5b601355565b6001546000906001600160a01b031633146135f85760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b60098360ff161061363a5760405162461bcd60e51b81526004018080602001828103825260298152602001806143e86029913960400191505060405180910390fd5b600a821015801561364d57506103e88211155b613695576040805162461bcd60e51b81526020600482015260146024820152735f76616c75653a206f7574206f662072616e676560601b604482015290519081900360640190fd5b81600f8460ff168154811061309357fe5b6001546001600160a01b031633146136ef5760405162461bcd60e51b81526004018080602001828103825260248152602001806144116024913960400191505060405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60105481565b60145481565b60135481565b60155481565b60045481565b600a5460065460408051630d01142560e31b81526001600160a01b039283166004820152670de0b6b3a7640000602482015290516000939290921691636808a12891604480820192602092909190829003018186803b1580156118d957600080fd5b6000826137a0575060006130a3565b828202828482816137ad57fe5b04146137ea5760405162461bcd60e51b81526004018080602001828103825260218152602001806143116021913960400191505060405180910390fd5b9392505050565b6000808211613847576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161385057fe5b049392505050565b6000828211156138af576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000828201838110156137ea576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b4360009081526020818152604080832032845290915290205460ff1690565b4360009081526020818152604080832033845290915290205460ff1690565b600081831061395c57816137ea565b5090919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611c1d908490613db6565b600a60009054906101000a90046001600160a01b03166001600160a01b031663a2e620456040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613a0557600080fd5b505af1925050508015613a16575060015b50565b600654604080516340c10f1960e01b81523060048201526024810184905290516001600160a01b03909216916340c10f19916044808201926020929091908290030181600087803b158015613a6d57600080fd5b505af1158015613a81573d6000803e3d6000fd5b505050506040513d6020811015613a9757600080fd5b5050601f5460009015613b8257613abf612710610ba3601f548561379190919063ffffffff16565b600654601e546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b158015613b1a57600080fd5b505af1158015613b2e573d6000803e3d6000fd5b505050506040513d6020811015613b4457600080fd5b5050604080514281526020810183905281517fcb3f34aaa3445b461e6da5492dc89e5c257a59fa598131f3b6bbc97a3638e409929181900390910190a15b60215460009015613c6857613ba8612710610ba36021548661379190919063ffffffff16565b600654602080546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101869052905194955092169263a9059cbb9260448082019392918290030181600087803b158015613c0057600080fd5b505af1158015613c14573d6000803e3d6000fd5b505050506040513d6020811015613c2a57600080fd5b5050604080514281526020810183905281517fdc8b715b18523e58b7fd0da53259dfa91efd91df4a854d94b136e3333a3b9395929181900390910190a15b613c76816127df8585613858565b600954600654919450613c97916001600160a01b0390811691166000613e67565b600954600654613cb4916001600160a01b03918216911685613e67565b600954604080516397ffe1d760e01b81526004810186905290516001600160a01b03909216916397ffe1d79160248082019260009290919082900301818387803b158015613d0157600080fd5b505af1158015613d15573d6000803e3d6000fd5b5050604080514281526020810187905281517fa72fa2f263b243b0f0e1fec5f3d49d33de573d15929b6b730c6b8ab3838c1c4d9450908190039091019150a1505050565b600060085b600e8160ff1681548110613d6e57fe5b90600052602060002001548310613da357600f8160ff1681548110613d8f57fe5b600091825260209091200154601055613dac565b60001901613d5e565b5050601054919050565b6060613e0b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f7a9092919063ffffffff16565b805190915015611c1d57808060200190516020811015613e2a57600080fd5b5051611c1d5760405162461bcd60e51b815260040180806020018281038252602a815260200180614435602a913960400191505060405180910390fd5b801580613eed575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015613ebf57600080fd5b505afa158015613ed3573d6000803e3d6000fd5b505050506040513d6020811015613ee957600080fd5b5051155b613f285760405162461bcd60e51b81526004018080602001828103825260368152602001806144856036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611c1d908490613db6565b6060613f898484600085613f91565b949350505050565b606082471015613fd25760405162461bcd60e51b81526004018080602001828103825260268152602001806142c66026913960400191505060405180910390fd5b613fdb856140ed565b61402c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061406b5780518252601f19909201916020918201910161404c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146140cd576040519150601f19603f3d011682016040523d82523d6000602084013e6140d2565b606091505b50915091506140e28282866140f3565b979650505050505050565b3b151590565b606083156141025750816137ea565b8251156141125782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561415c578181015183820152602001614144565b50505050905090810190601f1680156141895780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b8280548282559060005260206000209081019282156141e1579160200282015b828111156141e157825182906affffffffffffffffffffff169055916020019190600101906141b7565b50610c0792915061422d565b8280548282559060005260206000209081019282156141e1579160200282015b828111156141e1578251829060ff1690559160200191906001019061420d565b5b80821115610c07576000815560010161422e56fe54726561737572793a207065675072696365206e6f7420656c696769626c6520666f7220626f6e6420707572636861736554726561737572793a2063616e6e6f742072656465656d20626f6e64732077697468207a65726f20616d6f756e745f7072656d69756d5468726573686f6c6420697320686967686572207468616e20312e35416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c54726561737572793a20747265617375727920686173206e6f206d6f726520627564676574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7754726561737572793a2063616e6e6f7420707572636861736520626f6e64732077697468207a65726f20616d6f756e745f6d696e74696e67466163746f72466f72506179696e67446562743a206f7574206f662072616e67655f6d6178537570706c79457870616e73696f6e50657263656e743a206f7574206f662072616e676554726561737572793a206661696c656420746f20636f6e73756c74205065672070726963652066726f6d20746865206f7261636c65496e6465782068617320746f206265206c6f776572207468616e20636f756e74206f6620746965727354726561737572793a2063616c6c6572206973206e6f7420746865206f70657261746f725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436f6e747261637447756172643a206f6e6520626c6f636b2c206f6e652066756e6374696f6e5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636554726561737572793a206e6f7420656e6f75676820626f6e64206c65667420746f2070757263686173655f626f6f747374726170537570706c79457870616e73696f6e50657263656e743a206f7574206f662072616e67655f7072656d69756d5468726573686f6c6420657863656564732070656750726963654365696c696e67a26469706673582212200f6f739e6f604341dddf2bc45c9e7b352b3d85ed155221b78272fe9f06a5dff564736f6c634300060c0033
Deployed ByteCode Sourcemap
33321:22220:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35249:35;;;:::i;:::-;;;;;;;;;;;;;;;;46814:321;;;;;;;;;;;;;;;;-1:-1:-1;46814:321:0;;:::i;:::-;;43087:319;;;;;;;;;;;;;;;;-1:-1:-1;43087:319:0;;:::i;39154:728::-;;;:::i;39890:776::-;;;:::i;49619:1085::-;;;;;;;;;;;;;;;;-1:-1:-1;49619:1085:0;;;;;;;:::i;34150:33::-;;;:::i;40720:1759::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40720:1759:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;46599:207::-;;;;;;;;;;;;;;;;-1:-1:-1;46599:207:0;;:::i;33679:31::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;42805:274;;;;;;;;;;;;;;;;-1:-1:-1;42805:274:0;;:::i;34404:47::-;;;:::i;47845:464::-;;;:::i;37281:291::-;;;:::i;34949:30::-;;;:::i;34786:36::-;;;:::i;34013:19::-;;;:::i;:::-;;;;-1:-1:-1;;;;;34013:19:0;;;;;;;;;;;;;;34890:29;;;:::i;37033:89::-;;;:::i;35060:41::-;;;:::i;47143:201::-;;;;;;;;;;;;;;;;-1:-1:-1;47143:201:0;;:::i;35220:22::-;;;:::i;47352:330::-;;;;;;;;;;;;;;;;-1:-1:-1;47352:330:0;;:::i;54387:421::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;54387:421:0;;;;;;;;;;;;;;;;;:::i;48317:1294::-;;;;;;;;;;;;;;;;-1:-1:-1;48317:1294:0;;;;;;;:::i;38001:712::-;;;:::i;35176:35::-;;;:::i;33633:23::-;;;:::i;33959:21::-;;;:::i;44937:257::-;;;;;;;;;;;;;;;;-1:-1:-1;44937:257:0;;:::i;37899:94::-;;;:::i;34192:31::-;;;:::i;52125:2254::-;;;:::i;54816:128::-;;;;;;;;;;;;;;;;-1:-1:-1;54816:128:0;-1:-1:-1;;;;;54816:128:0;;:::i;34041:22::-;;;:::i;33987:19::-;;;:::i;34114:29::-;;;:::i;42701:96::-;;;;;;;;;;;;;;;;-1:-1:-1;42701:96:0;-1:-1:-1;;;;;42701:96:0;;:::i;38721:425::-;;;:::i;54952:198::-;;;;;;;;;;;;;;;;-1:-1:-1;54952:198:0;;;;;;;:::i;33733:24::-;;;:::i;34070:21::-;;;:::i;34357:40::-;;;:::i;33886:::-;;;;;;;;;;;;;;;;-1:-1:-1;33886:40:0;;:::i;34664:46::-;;;:::i;44327:291::-;;;;;;;;;;;;;;;;-1:-1:-1;44327:291:0;;:::i;35147:22::-;;;:::i;33764:24::-;;;:::i;45202:499::-;;;;;;;;;;;;;;;;-1:-1:-1;45202:499:0;;;;;;;:::i;43414:492::-;;;;;;;;;;;;;;;;-1:-1:-1;43414:492:0;;;;;;;;;:::i;55304:234::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;55304:234:0;;;;;;;;;;;;;;;;;:::i;46329:129::-;;;;;;;;;;;;;;;;-1:-1:-1;46329:129:0;;:::i;34232:28::-;;;;;;;;;;;;;;;;-1:-1:-1;34232:28:0;;:::i;34267:34::-;;;;;;;;;;;;;;;;-1:-1:-1;34267:34:0;;:::i;46466:125::-;;;;;;;;;;;;;;;;-1:-1:-1;46466:125:0;;:::i;42487:101::-;;;;;;;;;;;;;;;;-1:-1:-1;42487:101:0;-1:-1:-1;;;;;42487:101:0;;:::i;33514:40::-;;;:::i;34829:30::-;;;:::i;45709:612::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45709:612:0;;;;;;;;;;;;;;;;;;;;:::i;55158:138::-;;;;;;;;;;;;;;;;-1:-1:-1;55158:138:0;;:::i;37144:114::-;;;:::i;35024:29::-;;;:::i;34986:31::-;;;:::i;44626:303::-;;;;;;;;;;;;;;;;-1:-1:-1;44626:303:0;;:::i;43914:405::-;;;;;;;;;;;;;;;;-1:-1:-1;43914:405:0;;;;;;;;;:::i;42596:97::-;;;;;;;;;;;;;;;;-1:-1:-1;42596:97:0;-1:-1:-1;;;;;42596:97:0;;:::i;34310:40::-;;;:::i;34507:34::-;;;:::i;34458:42::-;;;:::i;34627:30::-;;;:::i;33795:45::-;;;:::i;37580:296::-;;;:::i;35249:35::-;;;;:::o;46814:321::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46932:18:::1;;46911:17;:39;;46903:93;;;;-1:-1:-1::0;;;46903:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47036:3;47015:17;:24;;47007:73;;;;-1:-1:-1::0;;;47007:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47091:16;:36:::0;46814:321::o;43087:319::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43233:2:::1;43203:26;:32;;:70;;;;;43269:4;43239:26;:34;;43203:70;43195:123;;;;-1:-1:-1::0;;;43195:123:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43344:25;:54:::0;43087:319::o;39154:728::-;39206:13;39232:17;39252:13;:11;:13::i;:::-;39232:33;;39293:14;;39280:9;:27;39276:599;;39328:15;;39324:540;;39409:14;;39401:22;;39324:540;;;39464:19;39486:39;39515:9;39486:24;39505:4;39486:14;;:18;;:24;;;;:::i;:::-;:28;;:39::i;:::-;39464:61;;39561:23;39587:63;39644:5;39587:52;39623:15;;39587:31;39603:14;;39587:11;:15;;:31;;;;:::i;:::-;:35;;:52::i;:63::-;39677:14;;39561:89;;-1:-1:-1;39677:35:0;;39561:89;39677:18;:35::i;:::-;39669:43;;39753:1;39735:15;;:19;:46;;;;;39766:15;;39758:5;:23;39735:46;39731:118;;;39814:15;;39806:23;;39731:118;39324:540;;;39154:728;;:::o;39890:776::-;39941:13;39967:17;39987:13;:11;:13::i;:::-;39967:33;;40027:18;;40015:9;:30;40011:648;;;40062:33;40098:45;40139:3;40098:36;40117:16;;40098:14;;:18;;:36;;;;:::i;:45::-;40062:81;;40175:25;40162:9;:38;40158:490;;40253:22;40278:60;40332:5;40278:49;40312:14;;40278:29;40292:14;;40278:9;:13;;:29;;;;:::i;:60::-;40365:14;;40253:85;;-1:-1:-1;40365:34:0;;40253:85;40365:18;:34::i;:::-;40357:42;;40439:1;40422:14;;:18;:44;;;;;40452:14;;40444:5;:22;40422:44;40418:115;;;40499:14;;40491:22;;40418:115;40158:490;;;;40618:14;;40610:22;;40158:490;40011:648;39890:776;;:::o;49619:1085::-;31055:28;:26;:28::i;:::-;31054:29;31046:80;;;;-1:-1:-1;;;31046:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31146:28;:26;:28::i;:::-;31145:29;31137:80;;;;-1:-1:-1;;;31137:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36166:9:::1;;36159:3;:16;;36151:54;;;::::0;;-1:-1:-1;;;36151:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36151:54:0;;;;;;;;;;;;;::::1;;36609:6:::2;::::0;36597:30:::2;::::0;;-1:-1:-1;;;36597:30:0;;;;36639:4:::2;::::0;-1:-1:-1;;;;;36609:6:0::2;::::0;36597:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;36609:6;36597:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;36597:30:0;-1:-1:-1;;;;;36597:47:0::2;;:113:::0;::::2;;;-1:-1:-1::0;36677:4:0::2;::::0;36665:28:::2;::::0;;-1:-1:-1;;;36665:28:0;;;;36705:4:::2;::::0;-1:-1:-1;;;;;36677:4:0::2;::::0;36665:26:::2;::::0;:28:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;36677:4;36665:28;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;36665:28:0;-1:-1:-1;;;;;36665:45:0::2;;36597:113;:179;;;;-1:-1:-1::0;36740:7:0::2;::::0;36731:28:::2;::::0;;-1:-1:-1;;;36731:28:0;;;;36771:4:::2;::::0;-1:-1:-1;;;;;36740:7:0::2;::::0;36731:26:::2;::::0;:28:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;36740:7;36731:28;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;36731:28:0;-1:-1:-1;;;;;36731:45:0::2;;36597:179;36575:259;;;::::0;;-1:-1:-1;;;36575:259:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;49766:1:::3;49752:11;:15;49744:74;;;;-1:-1:-1::0;;;49744:74:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49831:16;49850:13;:11;:13::i;:::-;49831:32;;49894:11;49882:8;:23;49874:61;;;::::0;;-1:-1:-1;;;49874:61:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;49874:61:0;;;;;;;;;;;;;::::3;;49979:18;;49968:8;:29;49946:145;;;;-1:-1:-1::0;;;49946:145:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50104:13;50120:20;:18;:20::i;:::-;50104:36;;50167:1;50159:5;:9;50151:49;;;::::0;;-1:-1:-1;;;50151:49:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;50213:18;50234:32;50261:4;50234:22;:11:::0;50250:5;50234:15:::3;:22::i;:32::-;50292:6;::::0;50285:39:::3;::::0;;-1:-1:-1;;;50285:39:0;;50318:4:::3;50285:39;::::0;::::3;::::0;;;50213:53;;-1:-1:-1;50213:53:0;;-1:-1:-1;;;;;50292:6:0;;::::3;::::0;50285:24:::3;::::0;:39;;;;;::::3;::::0;;;;;;;;;50292:6;50285:39;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;50285:39:0;:53:::3;;50277:103;;;;-1:-1:-1::0;;;50277:103:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50412:60;50433:38;50442:16;;50460:10;50433:8;:38::i;:::-;50412:16;::::0;;:20:::3;:60::i;:::-;50393:16;:79:::0;50497:4:::3;::::0;50485:51:::3;::::0;;-1:-1:-1;;;50485:51:0;;50512:10:::3;50485:51;::::0;::::3;::::0;;;;;;;;;-1:-1:-1;;;;;50497:4:0;;::::3;::::0;50485:26:::3;::::0;:51;;;;;50497:4:::3;::::0;50485:51;;;;;;;;50497:4;;50485:51;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;50554:6:0::3;::::0;50547:51:::3;::::0;-1:-1:-1;;;;;;50554:6:0::3;::::0;-1:-1:-1;50575:10:0::3;50587::::0;50547:27:::3;:51::i;:::-;50611:17;:15;:17::i;:::-;50646:50;::::0;;;;;::::3;::::0;::::3;::::0;;;;;50660:10:::3;::::0;50646:50:::3;::::0;;;;;;::::3;-1:-1:-1::0;;31252:12:0;31244:7;:21;;;;;;;;;;;31266:9;31244:32;;;;;;;;:39;;31279:4;-1:-1:-1;;31244:39:0;;;;;;;;31316:10;31294:33;;;;;;:40;;;;;;;;;;-1:-1:-1;;;49619:1085:0:o;34150:33::-;;;;:::o;40720:1759::-;36908:11;;-1:-1:-1;;;36908:11:0;;;;36907:12;36899:54;;;;;-1:-1:-1;;;36899:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40964:6:::1;:13:::0;;-1:-1:-1;;;;;;40964:13:0;;::::1;-1:-1:-1::0;;;;;40964:13:0;;::::1;::::0;;;::::1;::::0;;;40988:4:::1;:12:::0;;;::::1;::::0;;::::1;;::::0;;41011:4:::1;:12:::0;;;::::1;::::0;;::::1;;::::0;;41034:6:::1;:16:::0;;;::::1;::::0;;::::1;;::::0;;41061:7:::1;:18:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;41090:9:::1;:22:::0;;;41142:6:::1;41125:14;:23:::0;;;41180:32:::1;::::0;41208:3:::1;::::0;41180:23:::1;::::0;41199:3:::1;41180:18;:23::i;:32::-;41159:18;:53:::0;41273:23:::1;:42:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;41273:42:0;;;;::::1;::::0;;-1:-1:-1;;;;;;41273:42:0::1;-1:-1:-1::0;;;;;41273:42:0;::::1;;::::0;;41370:145:::1;::::0;;::::1;::::0;::::1;::::0;;;;;41394:12:::1;41273:42;41370:145:::0;::::1;::::0;41408:13:::1;41370:145:::0;;;;41423:13:::1;41370:145:::0;;;;41438:13:::1;41370:145:::0;;;;41453:13:::1;41370:145:::0;;;;41468:14:::1;41370:145:::0;;;;41484:14:::1;41370:145:::0;;;;41500:14:::1;41273:42;41370:145:::0;;;::::1;::::0;:11:::1;::::0;:145:::1;;:::i;:::-;-1:-1:-1::0;41526:62:0::1;::::0;;::::1;::::0;::::1;::::0;;41547:3:::1;41526:62:::0;;41552:3:::1;41526:62;::::0;::::1;::::0;41557:3:::1;41526:62:::0;;;;;;41562:3:::1;41526:62:::0;;;;41567:3:::1;41526:62:::0;;;;41572:3:::1;41526:62:::0;;;;;;;41577:2:::1;41526:62:::0;;;;41581:2:::1;41526:62:::0;;;;41585:2:::1;41526:62:::0;;;;::::1;::::0;:17:::1;::::0;:62:::1;;:::i;:::-;-1:-1:-1::0;41629:3:0::1;41601:25;:31:::0;;;41707:5:::1;41679:25;:33:::0;41801:4:::1;41766:32;:39:::0;;;41896:3:::1;41866:27;:33:::0;41974:19:::1;:26:::0;42071:3:::1;42052:16;:22:::0;42102:4:::1;42085:14;:21:::0;;;42167:15:::1;:20:::0;42198:31:::1;:37:::0;-1:-1:-1;42323:6:0;42316:39:::1;::::0;;-1:-1:-1;;;42316:39:0;;42349:4:::1;42316:39;::::0;::::1;::::0;;;-1:-1:-1;;;;;42323:6:0;;::::1;::::0;42316:24:::1;::::0;:39;;;;;::::1;::::0;;;;;;;;;42323:6;42316:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;42316:39:0;42297:16:::1;:58:::0;42382:4:::1;42368:18:::0;;-1:-1:-1;;;;;;;;;;42368:18:0;;::::1;-1:-1:-1::0;;;42368:18:0::1;42397:21;42408:10;42397:21:::0;;::::1;::::0;;;42434:37:::1;::::0;;42458:12:::1;42434:37:::0;;;;::::1;::::0;;;;42316:39:::1;42434:37:::0;;::::1;40720:1759:::0;;;;;;;:::o;46599:207::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46714:5:::1;46694:16;:25;;46686:67;;;::::0;;-1:-1:-1;;;46686:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;46764:15;:34:::0;46599:207::o;33679:31::-;;;-1:-1:-1;;;33679:31:0;;;;;:::o;42805:274::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42920:14:::1;;42900:16;:34;;:90;;;;;42958:32;42986:3;42958:23;42977:3;42958:14;;:18;;:23;;;;:::i;:32::-;42938:16;:52;;42900:90;42892:115;;;::::0;;-1:-1:-1;;;42892:115:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42892:115:0;;;;;;;;;;;;;::::1;;43034:18;:37:::0;42805:274::o;34404:47::-;;;;:::o;47845:464::-;47946:6;;47986:22;;;-1:-1:-1;;;47986:22:0;;;;47901:7;;-1:-1:-1;;;;;47946:6:0;;47901:7;;47946:6;;47986:20;;:22;;;;;;;;;;;;;;47946:6;47986:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47986:22:0;;-1:-1:-1;48019:23:0;;48057:195;48091:23;:30;48081:40;;;;48057:195;;;48167:73;48187:8;-1:-1:-1;;;;;48187:18:0;;48206:23;48230:7;48206:32;;;;;;;;;;;;;;;;;;;;;48187:52;;;-1:-1:-1;;;;;;48187:52:0;;;;;;;-1:-1:-1;;;;;48206:32:0;;;48187:52;;;;;;;;;;48206:32;48187:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48187:52:0;48167:15;;:19;:73::i;:::-;48149:91;-1:-1:-1;48123:9:0;;48057:195;;;-1:-1:-1;48269:32:0;:11;48285:15;48269;:32::i;:::-;48262:39;;;;;47845:464;;:::o;37281:291::-;37366:6;;37382;;37358:37;;;-1:-1:-1;;;37358:37:0;;-1:-1:-1;;;;;37382:6:0;;;37358:37;;;;37390:4;37358:37;;;;;;37325:16;;37366:6;;;;;37358:23;;:37;;;;;;;;;;;;;;;37366:6;37358:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37358:37:0;;;37354:211;;37490:63;;-1:-1:-1;;;37490:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37354:211;37442:14;;;-1:-1:-1;37435:21:0;;34949:30;;;;:::o;34786:36::-;;;;:::o;34013:19::-;;;-1:-1:-1;;;;;34013:19:0;;:::o;34890:29::-;;;;:::o;37033:89::-;37103:11;;-1:-1:-1;;;37103:11:0;;;;;37033:89::o;35060:41::-;;;;:::o;47143:201::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47255:5:::1;47236:15;:24;;47228:65;;;::::0;;-1:-1:-1;;;47228:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;47304:14;:32:::0;47143:201::o;35220:22::-;;;-1:-1:-1;;;;;35220:22:0;;:::o;47352:330::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47500:5:::1;47469:27;:36;;:76;;;;;47540:5;47509:27;:36;;47469:76;47461:130;;;;-1:-1:-1::0;;;47461:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47618:26;:56:::0;47352:330::o;54387:421::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54618:6:::1;::::0;-1:-1:-1;;;;;54591:34:0;;::::1;54618:6:::0;::::1;54591:34;;54583:53;;;::::0;;-1:-1:-1;;;54583:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;54583:53:0;;;;;;;;;;;;;::::1;;54682:4;::::0;-1:-1:-1;;;;;54655:32:0;;::::1;54682:4:::0;::::1;54655:32;;54647:49;;;::::0;;-1:-1:-1;;;54647:49:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;54647:49:0;;;;;;;;;;;;;::::1;;54742:4;::::0;-1:-1:-1;;;;;54715:32:0;;::::1;54742:4:::0;::::1;54715:32;;54707:49;;;::::0;;-1:-1:-1;;;54707:49:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;54707:49:0;;;;;;;;;;;;;::::1;;54767:33;-1:-1:-1::0;;;;;54767:19:0;::::1;54787:3:::0;54792:7;54767:19:::1;:33::i;:::-;54387:421:::0;;;:::o;48317:1294::-;31055:28;:26;:28::i;:::-;31054:29;31046:80;;;;-1:-1:-1;;;31046:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31146:28;:26;:28::i;:::-;31145:29;31137:80;;;;-1:-1:-1;;;31137:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36166:9:::1;;36159:3;:16;;36151:54;;;::::0;;-1:-1:-1;;;36151:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36151:54:0;;;;;;;;;;;;;::::1;;36609:6:::2;::::0;36597:30:::2;::::0;;-1:-1:-1;;;36597:30:0;;;;36639:4:::2;::::0;-1:-1:-1;;;;;36609:6:0::2;::::0;36597:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;36609:6;36597:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;36597:30:0;-1:-1:-1;;;;;36597:47:0::2;;:113:::0;::::2;;;-1:-1:-1::0;36677:4:0::2;::::0;36665:28:::2;::::0;;-1:-1:-1;;;36665:28:0;;;;36705:4:::2;::::0;-1:-1:-1;;;;;36677:4:0::2;::::0;36665:26:::2;::::0;:28:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;36677:4;36665:28;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;36665:28:0;-1:-1:-1;;;;;36665:45:0::2;;36597:113;:179;;;;-1:-1:-1::0;36740:7:0::2;::::0;36731:28:::2;::::0;;-1:-1:-1;;;36731:28:0;;;;36771:4:::2;::::0;-1:-1:-1;;;;;36740:7:0::2;::::0;36731:26:::2;::::0;:28:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;36740:7;36731:28;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;36731:28:0;-1:-1:-1;;;;;36731:45:0::2;;36597:179;36575:259;;;::::0;;-1:-1:-1;;;36575:259:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;48459:1:::3;48446:10;:14;48438:75;;;;-1:-1:-1::0;;;48438:75:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48526:16;48545:13;:11;:13::i;:::-;48526:32;;48589:11;48577:8;:23;48569:61;;;::::0;;-1:-1:-1;;;48569:61:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;48569:61:0;;;;;;;;;;;;;::::3;;48674:14;;48663:8;:25;48641:138;;;;-1:-1:-1::0;;;48641:138:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48814:26;;48800:10;:40;;48792:95;;;;-1:-1:-1::0;;;48792:95:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48900:13;48916:21;:19;:21::i;:::-;48900:37;;48964:1;48956:5;:9;48948:49;;;::::0;;-1:-1:-1;;;48948:49:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;49010:19;49032:31;49058:4;49032:21;:10:::0;49047:5;49032:14:::3;:21::i;:31::-;49010:53;;49074:17;49094:25;:23;:25::i;:::-;49074:45;;49130:21;49154:43;49185:11;49161:4;;;;;;;;;-1:-1:-1::0;;;;;49161:4:0::3;-1:-1:-1::0;;;;;49154:24:0::3;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;49154:26:0;;:30:::3;:43::i;:::-;49130:67;;49233:45;49272:5;49233:34;49247:19;;49233:9;:13;;:34;;;;:::i;:45::-;49216:13;:62;;49208:94;;;::::0;;-1:-1:-1;;;49208:94:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;49208:94:0;;;;;;;;;;;;;::::3;;49327:6;::::0;49315:52:::3;::::0;;-1:-1:-1;;;49315:52:0;;49344:10:::3;49315:52;::::0;::::3;::::0;;;;;;;;;-1:-1:-1;;;;;49327:6:0;;::::3;::::0;49315:28:::3;::::0;:52;;;;;49327:6:::3;::::0;49315:52;;;;;;;;49327:6;;49315:52;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;49390:4:0::3;::::0;49378:47:::3;::::0;;-1:-1:-1;;;49378:47:0;;49401:10:::3;49378:47;::::0;::::3;::::0;;;;;;;;;-1:-1:-1;;;;;49390:4:0;;::::3;::::0;-1:-1:-1;49378:22:0::3;::::0;-1:-1:-1;49378:47:0;;;;;::::3;::::0;;;;;;;;;49390:4:::3;::::0;49378:47;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;;49467:26:0::3;::::0;:42:::3;::::0;49498:10;49467:30:::3;:42::i;:::-;49438:26;:71:::0;49520:17:::3;:15;:17::i;:::-;49555:48;::::0;;;;;::::3;::::0;::::3;::::0;;;;;49567:10:::3;::::0;49555:48:::3;::::0;;;;;;::::3;-1:-1:-1::0;;31252:12:0;31244:7;:21;;;;;;;;;;;31266:9;31244:32;;;;;;;;:39;;31279:4;-1:-1:-1;;31244:39:0;;;;;;;;31316:10;31294:33;;;;;;:40;;;;;;;;;;-1:-1:-1;;;;;48317:1294:0:o;38001:712::-;38052:24;38089:17;38109:13;:11;:13::i;:::-;38089:33;;38150:14;;38137:9;:27;38133:573;;38181:18;38202:25;:23;:25::i;:::-;38181:46;;38242:22;38267:46;38307:5;38267:35;38282:19;;38267:10;:14;;:35;;;;:::i;:46::-;38242:71;;38328:19;38357:4;;;;;;;;;-1:-1:-1;;;;;38357:4:0;-1:-1:-1;;;;;38350:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38350:26:0;;-1:-1:-1;38395:28:0;;;38391:304;;;38444:24;38471:31;:14;38490:11;38471:18;:31::i;:::-;38444:58;-1:-1:-1;38521:23:0;38547:41;38583:4;38547:31;38444:58;38568:9;38547:20;:31::i;:41::-;38521:67;;38626:53;38635:26;;38663:15;38626:8;:53::i;:::-;38607:72;;38391:304;;;38133:573;;;38001:712;;:::o;35176:35::-;;;;:::o;33633:23::-;;;-1:-1:-1;;;;;33633:23:0;;:::o;33959:21::-;;;-1:-1:-1;;;;;33959:21:0;;:::o;44937:257::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45064:4:::1;45040:20;:28;;:61;;;;;45096:5;45072:20;:29;;45040:61;45032:86;;;::::0;;-1:-1:-1;;;45032:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45032:86:0;;;;;;;;;;;;;::::1;;45144:19;:42:::0;44937:257::o;37899:94::-;37969:16;;37899:94;:::o;34192:31::-;;;;:::o;52125:2254::-;31055:28;:26;:28::i;:::-;31054:29;31046:80;;;;-1:-1:-1;;;31046:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31146:28;:26;:28::i;:::-;31145:29;31137:80;;;;-1:-1:-1;;;31137:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36166:9:::1;;36159:3;:16;;36151:54;;;::::0;;-1:-1:-1;;;36151:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36151:54:0;;;;;;;;;;;;;::::1;;36281:16:::2;:14;:16::i;:::-;36274:3;:23;;36266:60;;;::::0;;-1:-1:-1;;;36266:60:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;36609:6:::3;::::0;36597:30:::3;::::0;;-1:-1:-1;;;36597:30:0;;;;36639:4:::3;::::0;-1:-1:-1;;;;;36609:6:0::3;::::0;36597:28:::3;::::0;:30:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;36609:6;36597:30;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;36597:30:0;-1:-1:-1;;;;;36597:47:0::3;;:113:::0;::::3;;;-1:-1:-1::0;36677:4:0::3;::::0;36665:28:::3;::::0;;-1:-1:-1;;;36665:28:0;;;;36705:4:::3;::::0;-1:-1:-1;;;;;36677:4:0::3;::::0;36665:26:::3;::::0;:28:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;36677:4;36665:28;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;36665:28:0;-1:-1:-1;;;;;36665:45:0::3;;36597:113;:179;;;;-1:-1:-1::0;36740:7:0::3;::::0;36731:28:::3;::::0;;-1:-1:-1;;;36731:28:0;;;;36771:4:::3;::::0;-1:-1:-1;;;;;36740:7:0::3;::::0;36731:26:::3;::::0;:28:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;36740:7;36731:28;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;36731:28:0;-1:-1:-1;;;;;36731:45:0::3;;36597:179;36575:259;;;::::0;;-1:-1:-1;;;36575:259:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;52229:17:::4;:15;:17::i;:::-;52281:13;:11;:13::i;:::-;52257:21;:37:::0;52355:16:::4;::::0;52305:17:::4;::::0;52325:47:::4;::::0;:25:::4;:23;:25::i;:::-;:29:::0;::::4;:47::i;:::-;52305:67;;52395:15;;52387:5;;:23;52383:1989;;;52479:73;52494:57;52545:5;52494:46;52508:31;;52494:9;:13;;:46;;;;:::i;:57::-;52479:14;:73::i;:::-;52383:1989;;;52613:18;;52589:21;;:42;52585:1776;;;52775:4;::::0;52768:26:::4;::::0;;-1:-1:-1;;;52768:26:0;;;;52747:18:::4;::::0;-1:-1:-1;;;;;52775:4:0::4;::::0;52768:24:::4;::::0;:26:::4;::::0;;::::4;::::0;::::4;::::0;;;;;;;;52775:4;52768:26;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;52768:26:0;52861:14:::4;::::0;52835:21:::4;::::0;52768:26;;-1:-1:-1;52813:19:0::4;::::0;52835:41:::4;::::0;:25:::4;:41::i;:::-;52813:63;;52895:21;52935:24:::0;52978:12:::4;52993:56;53044:4;52993:46;53029:9;52993:35;:46::i;:56::-;52978:71;;53086:4;53072:11;:18;53068:85;;;53129:4;53115:18;;53068:85;53195:52;53241:5;53195:41;53210:25;;53195:10;:14;;:41;;;;:::i;:52::-;53175:16;;:72;53171:779;;53360:36;53391:4;53360:26;:9:::0;53374:11;53360:13:::4;:26::i;:36::-;53341:55;;53171:779;;;53514:20;53537:36;53568:4;53537:26;:9:::0;53551:11;53537:13:::4;:26::i;:36::-;53514:59;;53615:61;53670:5;53615:50;53632:32;;53615:12;:16;;:50;;;;:::i;:61::-;53596:80:::0;-1:-1:-1;53715:34:0::4;:12:::0;53596:80;53715:16:::4;:34::i;:::-;53776:26;::::0;53699:50;;-1:-1:-1;53776:30:0;53772:159:::4;;53851:56;53901:5;53851:45;53869:26;;53851:13;:17;;:45;;;;:::i;:56::-;53835:72;;53772:159;53171:779;;53972:20:::0;;53968:101:::4;;54017:32;54032:16;54017:14;:32::i;:::-;54091:17:::0;;54087:259:::4;;54152:16;::::0;:35:::4;::::0;54173:13;54152:20:::4;:35::i;:::-;54133:16;:54:::0;54222:6:::4;::::0;54210:54:::4;::::0;;-1:-1:-1;;;54210:54:0;;54243:4:::4;54210:54;::::0;::::4;::::0;;;;;;;;;-1:-1:-1;;;;;54222:6:0;;::::4;::::0;54210:24:::4;::::0;:54;;;;;::::4;::::0;;;;;;;;;54222:6:::4;::::0;54210:54;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;;54292:34:0::4;::::0;;54307:3:::4;54292:34:::0;;54210:54:::4;54292:34:::0;::::4;::::0;;;;;::::4;::::0;;;;;;;;;::::4;54087:259;52585:1776;;;;;;-1:-1:-1::0;36361:5:0::2;::::0;:12:::2;::::0;36371:1:::2;36361:9;:12::i;:::-;36353:5;:20:::0;36430:18:::2;::::0;36414:13:::2;:11;:13::i;:::-;:34;36413:112;;36456:69;36519:5;36456:58;36486:27;;36456:25;:23;:25::i;:69::-;36413:112;;;36452:1;36413:112;36384:26;:141:::0;31252:12;31244:7;:21;;;;;;;;;;;31266:9;31244:32;;;;;;;;:39;;31279:4;-1:-1:-1;;31244:39:0;;;;;;;;31316:10;31294:33;;;;;;:40;;;;;;;;;;52125:2254::o;54816:128::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54905:7:::1;::::0;54896:40:::1;::::0;;-1:-1:-1;;;54896:40:0;;-1:-1:-1;;;;;54896:40:0;;::::1;;::::0;::::1;::::0;;;54905:7;;;::::1;::::0;54896:29:::1;::::0;:40;;;;;54905:7:::1;::::0;54896:40;;;;;;;54905:7;;54896:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;54816:128:::0;:::o;34041:22::-;;;-1:-1:-1;;;;;34041:22:0;;:::o;33987:19::-;;;-1:-1:-1;;;;;33987:19:0;;:::o;34114:29::-;;;;:::o;42701:96::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42773:6:::1;:16:::0;;-1:-1:-1;;;;;;42773:16:0::1;-1:-1:-1::0;;;;;42773:16:0;;;::::1;::::0;;;::::1;::::0;;42701:96::o;38721:425::-;38772:24;38809:17;38829:13;:11;:13::i;:::-;38809:33;;38869:18;;38857:9;:30;38853:286;;;38931:6;;38924:39;;;-1:-1:-1;;;38924:39:0;;38957:4;38924:39;;;;;;38904:17;;-1:-1:-1;;;;;38931:6:0;;38924:24;;:39;;;;;;;;;;;;;;38931:6;38924:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38924:39:0;;-1:-1:-1;38978:13:0;38994:20;:18;:20::i;:::-;38978:36;-1:-1:-1;39033:9:0;;39029:99;;39082:30;39106:5;39082:19;:9;39096:4;39082:13;:19::i;54952:198::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55080:7:::1;::::0;55071:71:::1;::::0;;-1:-1:-1;;;55071:71:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;55080:7:0;;::::1;::::0;55071:27:::1;::::0;:71;;;;;55080:7:::1;::::0;55071:71;;;;;;;;55080:7;;55071:71;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;54952:198:::0;;:::o;33733:24::-;;;;:::o;34070:21::-;;;-1:-1:-1;;;;;34070:21:0;;:::o;34357:40::-;;;;:::o;33886:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33886:40:0;;-1:-1:-1;33886:40:0;:::o;34664:46::-;;;;:::o;44327:291::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44472:3:::1;44442:26;:33;;:72;;;;;44509:5;44479:26;:35;;44442:72;44434:97;;;::::0;;-1:-1:-1;;;44434:97:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;44434:97:0;;;;;;;;;;;;;::::1;;44556:25;:54:::0;44327:291::o;35147:22::-;;;-1:-1:-1;;;;;35147:22:0;;:::o;33764:24::-;;;;:::o;45202:499::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45353:3:::1;45333:16;:23;;45325:66;;;::::0;;-1:-1:-1;;;45325:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;45460:3;45424:32;:39;;:83;;;;;45503:4;45467:32;:40;;45424:83;45416:142;;;;-1:-1:-1::0;;;45416:142:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45582:15;:34:::0;;;;45627:31:::1;:66:::0;45202:499::o;43414:492::-;36025:8;;43504:4;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43602:1:::1;43593:6;:10;;;43585:64;;;;-1:-1:-1::0;;;43585:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43664:10;::::0;::::1;::::0;43660:84:::1;;43708:11;43729:1;43720:6;:10;43708:23;;;;;;;;;;;;;;;;;;43699:6;:32;43691:41;;;::::0;::::1;;43767:1;43758:6;:10;;;43754:84;;;43802:11;43814:6;43823:1;43814:10;43802:23;;;;;;;;;;;;;;;;;;43793:6;:32;43785:41;;;::::0;::::1;;43870:6;43848:11;43860:6;43848:19;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;:28:::0;-1:-1:-1;43894:4:0::1;36099:1;43414:492:::0;;;;:::o;55304:234::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55471:7:::1;::::0;55462:68:::1;::::0;;-1:-1:-1;;;55462:68:0;;-1:-1:-1;;;;;55462:68:0;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;;;;;55471:7;;;::::1;::::0;55462:46:::1;::::0;:68;;;;;55471:7:::1;::::0;55462:68;;;;;;;55471:7;;55462:68;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55304:234:::0;;;:::o;46329:129::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46416:15:::1;:34:::0;46329:129::o;34232:28::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34232:28:0;:::o;34267:34::-;;;;;;;;;;46466:125;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46551:14:::1;:32:::0;46466:125::o;42487:101::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42560:8:::1;:20:::0;;-1:-1:-1;;;;;;42560:20:0::1;-1:-1:-1::0;;;;;42560:20:0;;;::::1;::::0;;;::::1;::::0;;42487:101::o;33514:40::-;33547:7;33514:40;:::o;34829:30::-;;;;:::o;45709:612::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45914:22:0;::::1;45906:39;;;::::0;;-1:-1:-1;;;45906:39:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;45906:39:0;;;;;;;;;;;;;::::1;;45989:4;45964:21;:29;;45956:54;;;::::0;;-1:-1:-1;;;45956:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45956:54:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;46039:22:0;::::1;46031:39;;;::::0;;-1:-1:-1;;;46031:39:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;46031:39:0;;;;;;;;;;;;;::::1;;46114:4;46089:21;:29;;46081:54;;;::::0;;-1:-1:-1;;;46081:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46081:54:0;;;;;;;;;;;;;::::1;;46156:7;:18:::0;;-1:-1:-1;;;;;;46156:18:0;;::::1;-1:-1:-1::0;;;;;46156:18:0;;::::1;;::::0;;;46185:20:::1;:44:::0;;;;46240:7:::1;:18:::0;;;;::::1;::::0;;;::::1;;::::0;;46269:20:::1;:44:::0;45709:612::o;55158:138::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55252:7:::1;::::0;55243:45:::1;::::0;;-1:-1:-1;;;55243:45:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;55252:7:0;;::::1;::::0;55243:37:::1;::::0;:45;;;;;55252:7:::1;::::0;55243:45;;;;;;;;55252:7;;55243:45;::::1;;::::0;::::1;;;;::::0;::::1;37144:114:::0;37191:7;37218:32;37232:17;33547:7;37232:5;;:9;;:17;;;;:::i;:::-;37218:9;;;:13;:32::i;:::-;37211:39;;37144:114;:::o;35024:29::-;;;;:::o;34986:31::-;;;;:::o;44626:303::-;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44777:3:::1;44745:28;:35;;:75;;;;;44816:4;44784:28;:36;;44745:75;44737:100;;;::::0;;-1:-1:-1;;;44737:100:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;44737:100:0;;;;;;;;;;;;;::::1;;44863:27;:58:::0;44626:303::o;43914:405::-;36025:8;;44010:4;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44108:1:::1;44099:6;:10;;;44091:64;;;;-1:-1:-1::0;;;44091:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44184:2;44174:6;:12;;:30;;;;;44200:4;44190:6;:14;;44174:30;44166:63;;;::::0;;-1:-1:-1;;;44166:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;44166:63:0;;;;;;;;;;;;;::::1;;44283:6;44255:17;44273:6;44255:25;;;;;;;;;42596:97:::0;36025:8;;-1:-1:-1;;;;;36025:8:0;36037:10;36025:22;36017:71;;;;-1:-1:-1;;;36017:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42667:7:::1;:18:::0;;-1:-1:-1;;;;;;42667:18:0::1;-1:-1:-1::0;;;;;42667:18:0;;;::::1;::::0;;;::::1;::::0;;42596:97::o;34310:40::-;;;;:::o;34507:34::-;;;;:::o;34458:42::-;;;;:::o;34627:30::-;;;;:::o;33795:45::-;;;;:::o;37580:296::-;37673:6;;37686;;37665:34;;;-1:-1:-1;;;37665:34:0;;-1:-1:-1;;;;;37686:6:0;;;37665:34;;;;37694:4;37665:34;;;;;;37631:17;;37673:6;;;;;37665:20;;:34;;;;;;;;;;;;;;;37673:6;37665:34;;;;;;;;;;7375:220;7433:7;7457:6;7453:20;;-1:-1:-1;7472:1:0;7465:8;;7453:20;7496:5;;;7500:1;7496;:5;:1;7520:5;;;;;:10;7512:56;;;;-1:-1:-1;;;7512:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7586:1;7375:220;-1:-1:-1;;;7375:220:0:o;8073:153::-;8131:7;8163:1;8159;:5;8151:44;;;;;-1:-1:-1;;;8151:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8217:1;8213;:5;;;;;;;8073:153;-1:-1:-1;;;8073:153:0:o;6958:158::-;7016:7;7049:1;7044;:6;;7036:49;;;;;-1:-1:-1;;;7036:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7103:5:0;;;6958:158::o;6496:179::-;6554:7;6586:5;;;6610:6;;;;6602:46;;;;;-1:-1:-1;;;6602:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30744:125;30837:12;30805:4;30829:21;;;;;;;;;;;30851:9;30829:32;;;;;;;;;;30744:125;:::o;30877:126::-;30970:12;30938:4;30962:21;;;;;;;;;;;30984:10;30962:33;;;;;;;;;;30877:126;:::o;467:106::-;525:7;556:1;552;:5;:13;;564:1;552:13;;;-1:-1:-1;560:1:0;;545:20;-1:-1:-1;467:106:0:o;19858:177::-;19968:58;;;-1:-1:-1;;;;;19968:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19968:58:0;-1:-1:-1;;;19968:58:0;;;19941:86;;19961:5;;19941:19;:86::i;47743:94::-;47802:6;;;;;;;;;-1:-1:-1;;;;;47802:6:0;-1:-1:-1;;;;;47794:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47790:40;47743:94::o;50712:1021::-;50785:6;;50773:48;;;-1:-1:-1;;;50773:48:0;;50806:4;50773:48;;;;;;;;;;;;-1:-1:-1;;;;;50785:6:0;;;;50773:24;;:48;;;;;;;;;;;;;;;50785:6;;50773:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50881:20:0;;50834:28;;50881:24;50877:253;;50945:44;50983:5;50945:33;50957:20;;50945:7;:11;;:33;;;;:::i;:44::-;51011:6;;51028:7;;51004:54;;;-1:-1:-1;;;51004:54:0;;-1:-1:-1;;;;;51028:7:0;;;51004:54;;;;;;;;;;;;50922:67;;-1:-1:-1;51011:6:0;;;51004:23;;:54;;;;;;;;;;;;;;;51011:6;;51004:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51078:40:0;;;51092:3;51078:40;;51004:54;51078:40;;;;;;;;;;;;;;;;;;50877:253;51189:20;;51142:28;;51189:24;51185:253;;51253:44;51291:5;51253:33;51265:20;;51253:7;:11;;:33;;;;:::i;:44::-;51319:6;;51336:7;;;51312:54;;;-1:-1:-1;;;51312:54:0;;-1:-1:-1;;;;;51336:7:0;;;51312:54;;;;;;;;;;;;51230:67;;-1:-1:-1;51319:6:0;;;51312:23;;:54;;;;;51336:7;51312:54;;;;;;51319:6;;51312:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51386:40:0;;;51400:3;51386:40;;51312:54;51386:40;;;;;;;;;;;;;;;;;;51185:253;51460:59;51498:20;51460:33;:7;51472:20;51460:11;:33::i;:59::-;51559:7;;51539:6;;51450:69;;-1:-1:-1;51532:38:0;;-1:-1:-1;;;;;51539:6:0;;;;51559:7;;51532:26;:38::i;:::-;51608:7;;51588:6;;51581:44;;-1:-1:-1;;;;;51588:6:0;;;;51608:7;51617;51581:26;:44::i;:::-;51645:7;;51636:46;;;-1:-1:-1;;;51636:46:0;;;;;;;;;;-1:-1:-1;;;;;51645:7:0;;;;51636:37;;:46;;;;;51645:7;;51636:46;;;;;;;;51645:7;;51636:46;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51698:27:0;;;51712:3;51698:27;;;;;;;;;;;;-1:-1:-1;51698:27:0;;;;;;;;-1:-1:-1;51698:27:0;50712:1021;;;:::o;51741:376::-;51824:7;51864:1;51844:223;51923:11;51935:6;51923:19;;;;;;;;;;;;;;;;;;51909:10;:33;51905:151;;51991:17;52009:6;51991:25;;;;;;;;;;;;;;;;;;;;51963;:53;52035:5;;51905:151;-1:-1:-1;;51880:8:0;51844:223;;;-1:-1:-1;;52084:25:0;;51741:376;;;:::o;22163:761::-;22587:23;22613:69;22641:4;22613:69;;;;;;;;;;;;;;;;;22621:5;-1:-1:-1;;;;;22613:27:0;;;:69;;;;;:::i;:::-;22697:17;;22587:95;;-1:-1:-1;22697:21:0;22693:224;;22839:10;22828:30;;;;;;;;;;;;;;;-1:-1:-1;22828:30:0;22820:85;;;;-1:-1:-1;;;22820:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20517:622;20887:10;;;20886:62;;-1:-1:-1;20903:39:0;;;-1:-1:-1;;;20903:39:0;;20927:4;20903:39;;;;-1:-1:-1;;;;;20903:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20903:39:0;:44;20886:62;20878:152;;;;-1:-1:-1;;;20878:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21068:62;;;-1:-1:-1;;;;;21068:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21068:62:0;-1:-1:-1;;;21068:62:0;;;21041:90;;21061:5;;21041:19;:90::i;14853:195::-;14956:12;14988:52;15010:6;15018:4;15024:1;15027:12;14988:21;:52::i;:::-;14981:59;14853:195;-1:-1:-1;;;;14853:195:0:o;15905:530::-;16032:12;16090:5;16065:21;:30;;16057:81;;;;-1:-1:-1;;;16057:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16157:18;16168:6;16157:10;:18::i;:::-;16149:60;;;;;-1:-1:-1;;;16149:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16283:12;16297:23;16324:6;-1:-1:-1;;;;;16324:11:0;16344:5;16352:4;16324:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16324:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16282:75;;;;16375:52;16393:7;16402:10;16414:12;16375:17;:52::i;:::-;16368:59;15905:530;-1:-1:-1;;;;;;;15905:530:0:o;11935:422::-;12302:20;12341:8;;;11935:422::o;18445:742::-;18560:12;18589:7;18585:595;;;-1:-1:-1;18620:10:0;18613:17;;18585:595;18734:17;;:21;18730:439;;18997:10;18991:17;19058:15;19045:10;19041:2;19037:19;19030:44;18945:148;19140:12;19133:20;;-1:-1:-1;;;19133:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://0f6f739e6f604341dddf2bc45c9e7b352b3d85ed155221b78272fe9f06a5dff5
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.