More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 7,318 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit Funds | 19170661 | 7 hrs ago | IN | 318.58037533 CRO | 0.33208042 | ||||
Deposit Funds | 19155240 | 31 hrs ago | IN | 268.02259307 CRO | 0.33208042 | ||||
Deposit Funds | 19140424 | 2 days ago | IN | 431.72984275 CRO | 0.33208042 | ||||
Deposit Funds | 19125111 | 3 days ago | IN | 465.00885574 CRO | 0.33208042 | ||||
Deposit Funds | 19109460 | 4 days ago | IN | 319.85981459 CRO | 0.33208042 | ||||
Deposit Funds | 19079192 | 6 days ago | IN | 433.46369754 CRO | 0.33208042 | ||||
Burn | 19075650 | 6 days ago | IN | 0 CRO | 0.568125 | ||||
Deposit Funds | 19063764 | 7 days ago | IN | 466.87636118 CRO | 0.33208042 | ||||
Deposit Funds | 19048328 | 8 days ago | IN | 321.14439216 CRO | 0.33208042 | ||||
Deposit Funds | 19033165 | 9 days ago | IN | 269.09898903 CRO | 0.33208042 | ||||
Deposit Funds | 19017829 | 10 days ago | IN | 435.2045156 CRO | 0.33208042 | ||||
Deposit Funds | 19002495 | 11 days ago | IN | 468.75136665 CRO | 0.33208042 | ||||
Deposit Funds | 18986900 | 12 days ago | IN | 322.43412867 CRO | 0.33208042 | ||||
Mint | 18980756 | 12 days ago | IN | 200 CRO | 0.6592582 | ||||
Mint | 18980707 | 12 days ago | IN | 100 CRO | 0.693956 | ||||
Deposit Funds | 18971923 | 13 days ago | IN | 270.17970786 CRO | 0.33208042 | ||||
Deposit Funds | 18956608 | 14 days ago | IN | 436.9523249 CRO | 0.33208042 | ||||
Deposit Funds | 18941315 | 15 days ago | IN | 470.63390226 CRO | 0.33208042 | ||||
Deposit Funds | 18925695 | 16 days ago | IN | 323.72904485 CRO | 0.33208042 | ||||
Update Delegate | 18923499 | 16 days ago | IN | 0 CRO | 0.22725 | ||||
Deposit Funds | 18849441 | 21 days ago | IN | 369.5354808 CRO | 0.33208042 | ||||
Deposit Funds | 18834136 | 22 days ago | IN | 329.68941295 CRO | 0.33208042 | ||||
Burn To WCRO | 18823838 | 22 days ago | IN | 0 CRO | 0.88910994 | ||||
Deposit Funds | 18818827 | 23 days ago | IN | 355.10284785 CRO | 0.33208042 | ||||
Burn To WCRO | 18818370 | 23 days ago | IN | 0 CRO | 0.88910994 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
19170661 | 7 hrs ago | 318.58037533 CRO | ||||
19155240 | 31 hrs ago | 268.02259307 CRO | ||||
19140424 | 2 days ago | 431.72984275 CRO | ||||
19125111 | 3 days ago | 465.00885574 CRO | ||||
19109460 | 4 days ago | 319.85981459 CRO | ||||
19079192 | 6 days ago | 433.46369754 CRO | ||||
19063764 | 7 days ago | 466.87636118 CRO | ||||
19048328 | 8 days ago | 321.14439216 CRO | ||||
19033165 | 9 days ago | 269.09898903 CRO | ||||
19017829 | 10 days ago | 435.2045156 CRO | ||||
19002495 | 11 days ago | 468.75136665 CRO | ||||
18986900 | 12 days ago | 322.43412867 CRO | ||||
18980756 | 12 days ago | 200 CRO | ||||
18980707 | 12 days ago | 100 CRO | ||||
18971923 | 13 days ago | 270.17970786 CRO | ||||
18956608 | 14 days ago | 436.9523249 CRO | ||||
18941315 | 15 days ago | 470.63390226 CRO | ||||
18925695 | 16 days ago | 323.72904485 CRO | ||||
18849441 | 21 days ago | 369.5354808 CRO | ||||
18834136 | 22 days ago | 329.68941295 CRO | ||||
18818827 | 23 days ago | 355.10284785 CRO | ||||
18803165 | 24 days ago | 244.26014617 CRO | ||||
18789761 | 25 days ago | 370.64742307 CRO | ||||
18772831 | 26 days ago | 330.68145732 CRO | ||||
18757479 | 27 days ago | 356.17136194 CRO |
Loading...
Loading
Contract Name:
Factory
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2023-11-29 */ // SPDX-License-Identifier: MIT // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.0/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^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; 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"); (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"); (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"); (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"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.0/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^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() { _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 making 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: interfaces/IWCRO.sol pragma solidity =0.8.0; interface IWCRO { function deposit() external payable; function withdraw(uint wad) external; function totalSupply() external view returns (uint); function approve(address guy, uint wad) external returns (bool); function transfer(address dst, uint wad) external returns (bool); function transferFrom(address src, address dst, uint wad) external returns (bool); event Approval(address indexed src, address indexed guy, uint wad); event Transfer(address indexed src, address indexed dst, uint wad); event Deposit(address indexed dst, uint wad); event Withdrawal(address indexed src, uint wad); function balanceOf(address account) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.0/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.0/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.0 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.0/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^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() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.0/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.0/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.0/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: interfaces/IYT.sol pragma solidity 0.8.0; interface IYT { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); function depositRewards() external payable; receive() external payable; function getPendingRewards(address addr) external view returns (uint256); function getTotalDistributableRewards() external view returns (uint256); function setClaimTo(address _claimTo) external; function setClaimToSetter(address _claimToSetter) external; function claim() external; function claimToWCRO() external; function claim(address addr) external; function claimToWCRO(address addr) external; function mint(address _to, uint256 _amount) external; function burn(address _from, uint256 _amount) external; // temperal function getAccTokenPerShare() external view returns (uint256); function getTotalDistributedRewards() external view returns (uint256); function getTotalReleasedRewards() external view returns (uint256); // temperal } // File: interfaces/IPT.sol pragma solidity ^0.8.0; interface IPT { function mint(address _to, uint256 _amount) external; function burn(address _from, uint256 _amount) external; // ERC20 functions function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); // ERC20 events event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: interfaces/ICROBridge.sol pragma solidity ^0.8.0; interface ICroBridge { function send_cro_to_crypto_org(string memory recipient) external payable; } // File: interfaces/IPanToken.sol //pragma solidity 0.6.12; pragma solidity >=0.6.12 <0.9.0; interface IPanToken { function mint(address _to, uint256 _amount) external; function burn(uint256 _amount) external; function initBlock() external view returns (uint256); function blockPerDay() external view returns (uint256); // IERC20 functions function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } // File: Factory.sol pragma solidity 0.8.0; contract Factory is Ownable, Pausable, ReentrancyGuard { using Address for address payable; IPanToken public PanToken; IWCRO public WCRO; ICroBridge public CROBridge; IPT public ptToken; IYT public ytToken; string public delegationAddress; address public feeTo; uint256 public delegationRatio; uint256 public targetRatio; uint256 public depositedAmount; uint256 public withdrawnAmount; uint256 public delegationAmount; uint256 public undelegationAmount; uint256 public feeBase; uint256 public feeKink; uint256 public multiple; uint256 public jumpMultiple; uint256 public feeAmount; bool public eatPANOn; uint256 public eatPANAmount; uint256 public holdLevelThreshold; // Multisig and timelock address [] public signers; mapping(address => bool) public isSigner; mapping(uint256 => mapping(address => bool)) public isSetConfirmed; mapping(uint256 => mapping(address => bool)) public isUpdateConfirmed; uint256 public numConfirmationsRequired; // total confirmations needed uint256 public setConfirmations; // confirmations for current set uint256 public updateConfirmations; // confirmations for current update // uint256 public submitted; // total submitted set bool public requestSet; // submit set flag uint256 public submitSetTimestamp; // submit set time // address public setter; // assigned one-time setter address public submittedSetter; // submitted setter for confirmation uint256 public setUnlockTime; // Unlocktime for set after confirmation // uint256 public updated; // total submitted update bool public requestUpdate; // submit update flag uint256 public submitUpdateTimestamp; // submit update time // address public updater; // assigned one-time updater address public submittedUpdater; // submitted updater for confirmation // // event Mint(address indexed user, uint256 amount); event MintFromWCRO(address indexed user, uint256 amount); event Burn(address indexed user, uint256 amount); event BurnToWCRO(address indexed user, uint256 amount); event SetToken(address CROBridge, address indexed ptToken, address indexed ytToken, address WCRO); event SetEatPAN(bool _eatPANOn, uint256 _eatPANAmount); event SetHoldLevelThreshold(uint256 holdLevelThreshold); event SetTargetRatio(uint256 targetRatio); event SetFeeRate(uint256 feeBase, uint256 feeKink, uint256 multiple, uint256 jumpMultiple); event SetDelegateAddress(string indexed delegationAddress); event UpdateDelegate(uint256 delegationAmount); event UpdateUndelegation(uint256 undelegationAmount); event Pause(); event Unpause(); constructor(string memory _delegationAddress, IPanToken _panToken, ICroBridge _croBridge, IPT _ptToken, IYT _ytToken, IWCRO _wcro, uint256 _targetRatio, address [] memory _signers, uint256 _numConfirmationsRequired ) { require(_signers.length >= 5, "Number of signers has to be larger than or equal to five"); require(_numConfirmationsRequired >= 3, "Number of required confirmations has to be larger than or equal to three"); delegationAddress = _delegationAddress; PanToken = _panToken; CROBridge = _croBridge; ptToken = _ptToken; ytToken = _ytToken; WCRO = _wcro; targetRatio = _targetRatio; eatPANOn = false; eatPANAmount = 100 * 1e18; holdLevelThreshold = 2500 * 1e18; feeBase = 5000; feeKink = 650000; multiple = 25000; jumpMultiple = 500000; //Multisig numConfirmationsRequired = _numConfirmationsRequired; for (uint256 i=0; i < _signers.length; i++) { address signer = _signers[i]; require(signer != address(0), "signer cannot be zero"); require(isSigner[signer] == false , "signer should be unique"); isSigner[signer] = true; signers.push(signer); } // } function depositFunds() public payable { WCRO.deposit{value: msg.value}(); _updateUndelegation(msg.value); } receive() external payable { require(msg.sender == address(WCRO)); // only accept CRO via fallback from the WCRO contract } function getDelegationRatio() public view returns (uint256) { return delegationRatio; } function getTargetRatio() public view returns (uint256) { return targetRatio; } function getHoldDiscount(address addr) public view returns (uint256) { uint256 panBalance = PanToken.balanceOf(addr); if (panBalance >= (100*holdLevelThreshold)) return 55; else if (panBalance >= (10*holdLevelThreshold)) return 75; else if (panBalance >= holdLevelThreshold) return 90; else return 100; } function getCurrentFee() public view returns (uint256) { require(targetRatio < 1e6, "TargetRatio should be less than 1e6"); uint256 ReserveRatio = (1e6 - delegationRatio)*1e6 / (1e6 - targetRatio); uint256 utilizationRate; if (ReserveRatio<1e6) { utilizationRate = (1e6 - ReserveRatio); } else { utilizationRate = 0; } if (utilizationRate <= feeKink) { return (utilizationRate*multiple/1e6 + feeBase); } else { uint256 normalRate = feeKink*multiple/1e6 + feeBase; uint256 excessUtil = utilizationRate - feeKink; return (excessUtil*jumpMultiple/1e6 + normalRate); } } function setToken(IPanToken _panToken, ICroBridge _croBridge, IPT _ptToken, IYT _ytToken, IWCRO _wcro) external { require(address(_panToken) != address(0), "Invalid panToken Address"); require(address(_croBridge) != address(0), "Invalid croBridge Address"); require(address(_ptToken) != address(0), "Invalid ptToken Address"); require(address(_ytToken) != address(0), "Invalid ytToken Address"); require(address(_wcro) != address(0), "Invalid WCRO Address"); require(setter != address(0), "No setter is assigned"); //Multisig require(msg.sender == setter, "Only setter can set parameters"); //Multisig require(block.timestamp > setUnlockTime, "Not ready to set"); //Timelock PanToken = _panToken; CROBridge = _croBridge; ptToken = _ptToken; ytToken = _ytToken; WCRO = _wcro; _cleanset(); //Clean setter emit SetToken(address(CROBridge), address(ptToken), address(ytToken), address(WCRO)); } function setTargetRatio(uint256 _ratio) external { require(_ratio > 0, "Ratio should be larger than 0"); require(_ratio < 1e6, "Ratio should be less than 1e6"); require(setter != address(0), "No setter is assigned"); //Multisig require(msg.sender == setter, "Only setter can set parameters"); //Multisig require(block.timestamp > setUnlockTime, "Not ready to set"); //Timelock targetRatio = _ratio; _cleanset(); //Clean setter emit SetTargetRatio(targetRatio); } function setDelegateAddress(string memory _delegationAddress) external { require(updater != address(0), "No updater is assigned"); //Multisig require(msg.sender == updater, "Only updater can set parameters"); //Multisig delegationAddress = _delegationAddress; _cleanupdate(); //Clean updater emit SetDelegateAddress(delegationAddress); } function setEatPAN(bool _eatPANOn, uint256 _eatPANAmount) external { require(_eatPANAmount < 1e24, "Amount should be less than 1e6 PAN"); require(setter != address(0), "No setter is assigned"); //Multisig require(msg.sender == setter, "Only setter can set parameters"); //Multisig require(block.timestamp > setUnlockTime, "Not ready to set"); //Timelock eatPANOn = _eatPANOn; eatPANAmount = _eatPANAmount; _cleanset(); //Clean setter emit SetEatPAN(eatPANOn, eatPANAmount); } function setHoldLevelThreshold(uint256 _holdLevelThreshold) external { require(setter != address(0), "No setter is assigned"); //Multisig require(msg.sender == setter, "Only setter can set parameters"); //Multisig require(block.timestamp > setUnlockTime, "Not ready to set"); //Timelock holdLevelThreshold = _holdLevelThreshold; _cleanset(); //Clean setter emit SetHoldLevelThreshold(holdLevelThreshold); } function setFeeRate(uint256 _feeBase, uint256 _feeKink, uint256 _multiple, uint256 _jumpMultiple) external { require(_feeBase <= 1e6, "FeeBase should be less than 1e6"); require(_feeKink <= 1e6, "FeeKink should be less than 1e6"); require(_multiple <= 1e6, "Multiple should be less than 1e6"); require(_jumpMultiple <= 1e6, "jumpMultiple should be less than 1e6"); require(setter != address(0), "No setter is assigned"); //Multisig require(msg.sender == setter, "Only setter can set parameters"); //Multisig require(block.timestamp > setUnlockTime, "Not ready to set"); //Timelock feeBase = _feeBase; feeKink = _feeKink; multiple = _multiple; jumpMultiple = _jumpMultiple; _cleanset(); //Clean setter emit SetFeeRate(feeBase, feeKink, multiple, jumpMultiple); } function setFeeTo(address _feeTo) external { require(_feeTo != address(0), "feeTo address cannot be zero"); require(setter != address(0), "No setter is assigned"); //Multisig require(msg.sender == setter, "Only setter can set parameters"); //Multisig require(block.timestamp > setUnlockTime, "Not ready to set"); //Timelock feeTo = _feeTo; _cleanset(); //Clean setter } function claimFee() external whenNotPaused { require(feeTo != address(0), "Error: claim fee to the zero address"); require(setter != address(0), "No setter is assigned"); //Multisig require(msg.sender == setter, "Only setter can set parameters"); //Multisig require(block.timestamp > setUnlockTime, "Not ready to set"); //Timelock uint256 amount = feeAmount; withdrawnAmount += amount; feeAmount = 0; _cleanset(); //Clean setter assert(WCRO.transfer(feeTo, amount)); } function updateDelegate(uint256 amount) external { require(amount < (depositedAmount-withdrawnAmount), "Delegation should be less than totalDeposit"); require((depositedAmount-withdrawnAmount) >= (delegationAmount+amount) , "depositedAmount should be larger than delegationAmount"); require(updater != address(0), "No updater is assigned"); //Multisig require(msg.sender == updater, "Only updater can set parameters"); //Multisig delegationAmount += amount; _updateDelegationRatio(); _cleanupdate(); //Clean updater emit UpdateDelegate(delegationAmount); } function _updateUndelegation(uint256 amount) internal { require(amount < (depositedAmount-withdrawnAmount), "Undelegation should be less than totalDeposit"); require(delegationAmount >= (undelegationAmount+amount) , "delegationAmount should be larger than undelegationAmount"); undelegationAmount += amount; _updateDelegationRatio(); emit UpdateUndelegation(undelegationAmount); } function _updateDelegationRatio() internal { require(depositedAmount > 0 , "depositedAmount should be large than 0"); require(depositedAmount >= withdrawnAmount, "depositedAmount should be large than or equal to withdrawnAmount"); if ((depositedAmount-withdrawnAmount)>0) { delegationRatio = ((delegationAmount-undelegationAmount) * 1e6) / (depositedAmount-withdrawnAmount); } else { delegationRatio = 0; } } function mint(address _to) public payable whenNotPaused { depositedAmount += msg.value; _updateDelegationRatio(); uint256 toWCROAmount = msg.value; if (targetRatio>delegationRatio) { uint256 targetAmount = (targetRatio - delegationRatio) * (depositedAmount-withdrawnAmount) / 1e6; if (targetAmount > msg.value) { CROBridge.send_cro_to_crypto_org{value: msg.value}(delegationAddress); toWCROAmount = 0; } else { CROBridge.send_cro_to_crypto_org{value: targetAmount}(delegationAddress); toWCROAmount = msg.value - targetAmount; } } WCRO.deposit{value: toWCROAmount}(); ptToken.mint(_to, msg.value); ytToken.mint(_to, msg.value); emit Mint(_to, msg.value); } function mintFromWCRO(address _to, uint256 amount) public whenNotPaused { assert(WCRO.transferFrom(msg.sender, address(this), amount)); depositedAmount += amount; _updateDelegationRatio(); if (targetRatio>delegationRatio) { uint256 targetAmount = (targetRatio - delegationRatio) * (depositedAmount-withdrawnAmount) / 1e6; if (targetAmount > amount) { WCRO.withdraw(amount); CROBridge.send_cro_to_crypto_org{value: amount}(delegationAddress); } else { WCRO.withdraw(targetAmount); CROBridge.send_cro_to_crypto_org{value: targetAmount}(delegationAddress); } } ptToken.mint(_to, amount); ytToken.mint(_to, amount); emit Mint(_to, amount); } function burn(uint256 amount) public whenNotPaused nonReentrant { address payable owner = payable(msg.sender); require(owner != address(0), "Error: burn from the zero address"); uint256 panBalance = PanToken.balanceOf(owner); uint256 ptBalance = ptToken.balanceOf(owner); uint256 ytBalance = ytToken.balanceOf(owner); require(ptBalance >= amount, "ptToken: burn amount exceeds balance"); require(ytBalance >= amount, "ytToken: burn amount exceeds balance"); require(WCRO.balanceOf(address(this)) >= amount, "Burn amount exceeds contract balance"); uint256 holdDiscount = getHoldDiscount(owner); uint256 feeRate = getCurrentFee(); uint256 fee; fee = ( amount*feeRate*holdDiscount/100 ) / 1e6; feeAmount += fee; uint256 transAmount = amount - fee; withdrawnAmount += transAmount; _updateDelegationRatio(); if (eatPANOn) { uint256 burnAmount = eatPANAmount*holdDiscount/100; require(panBalance >= burnAmount, "PAN Token: burn amount exceeds balance"); PanToken.burn(burnAmount); } WCRO.withdraw(transAmount); ptToken.burn(owner, amount); ytToken.burn(owner, amount); owner.sendValue(transAmount); emit Burn(owner, transAmount); } function burnToWCRO(uint256 amount) public whenNotPaused { address owner = msg.sender; require(owner != address(0), "Error: burn from the zero address"); uint256 panBalance = PanToken.balanceOf(owner); uint256 ptBalance = ptToken.balanceOf(owner); uint256 ytBalance = ytToken.balanceOf(owner); require(ptBalance >= amount, "ptToken: burn amount exceeds balance"); require(ytBalance >= amount, "ytToken: burn amount exceeds balance"); require(WCRO.balanceOf(address(this)) >= amount, "Burn amount exceeds contract balance"); uint256 holdDiscount = getHoldDiscount(owner); uint256 feeRate = getCurrentFee(); uint256 fee; fee = ( amount*feeRate*holdDiscount/100 ) / 1e6; feeAmount += fee; uint256 transAmount = amount - fee; withdrawnAmount += transAmount; _updateDelegationRatio(); if (eatPANOn) { uint256 burnAmount = eatPANAmount*holdDiscount/100; require(panBalance >= burnAmount, "PAN Token: burn amount exceeds balance"); PanToken.burn(burnAmount); } ptToken.burn(owner, amount); ytToken.burn(owner, amount); assert(WCRO.transfer(owner, transAmount)); emit BurnToWCRO(owner, transAmount); } function pause() external whenNotPaused { require(setter != address(0), "No setter is assigned"); //Multisig require(msg.sender == setter, "Only setter can set parameters"); //Multisig require(block.timestamp > setUnlockTime, "Not ready to set"); //Timelock _pause(); _cleanset(); //Clean setter emit Pause(); } function unpause() external whenPaused { require(setter != address(0), "No setter is assigned"); //Multisig require(msg.sender == setter, "Only setter can set parameters"); //Multisig require(block.timestamp > setUnlockTime, "Not ready to set"); //Timelock _unpause(); _cleanset(); //Clean setter emit Unpause(); } // Multisig function _cleanset() internal { requestSet = false; setter = address(0); setConfirmations = 0; submitted += 1; } function _cleanupdate() internal { requestUpdate = false; updater = address(0); updateConfirmations = 0; updated += 1; } function dropSet() external { require(requestSet == true, "no submission to drop"); require(block.timestamp > (submitSetTimestamp + 1 days), "submission is still in confirmation"); require(setConfirmations < numConfirmationsRequired, "The set is confirmed"); require(isSigner[msg.sender] == true, "only signer can drop set"); requestSet = false; submittedSetter = address(0); setConfirmations = 0; submitted += 1; } function dropUpdate() external { require(requestUpdate == true, "no submission to drop"); require(block.timestamp > (submitUpdateTimestamp + 1 days), "submission is still in confirmation"); require(updateConfirmations < numConfirmationsRequired, "The update is confirmed"); require(isSigner[msg.sender] == true, "only signer can drop update"); requestUpdate = false; submittedUpdater = address(0); updateConfirmations = 0; updated += 1; } function submitSet(address _setter) external { require(_setter != address(0), "Error: zero address cannot be setter"); require(requestSet == false, "submission to confirm"); require(isSigner[msg.sender] == true, "only signer can submit set"); requestSet = true; submitSetTimestamp = block.timestamp; submittedSetter = _setter; } function submitUpdate(address _updater) external { require(_updater != address(0), "Error: zero address cannot be updater"); require(requestUpdate == false, "submission to confirm"); require(isSigner[msg.sender] == true, "only signer can submit update"); requestUpdate = true; submitUpdateTimestamp = block.timestamp; submittedUpdater = _updater; } function confirmSet() external { require(requestSet == true, "no submission to confirm"); require(isSigner[msg.sender] == true, "only signer can confirm the set"); require(isSetConfirmed[submitted][msg.sender] == false, "the signer has confirmed"); isSetConfirmed[submitted][msg.sender] = true; setConfirmations += 1; } function confirmUpdate() external { require(requestUpdate == true, "no submission to confirm"); require(isSigner[msg.sender] == true, "only signer can confirm the update"); require(isUpdateConfirmed[updated][msg.sender] == false, "the signer has confirmed"); isUpdateConfirmed[updated][msg.sender] = true; updateConfirmations += 1; } function releaseSetter() external { require(setter == address(0), "setter has been released"); require(isSigner[msg.sender] == true, "only signer can release the setter"); require(setConfirmations >= numConfirmationsRequired, "Confirmations are not enough"); setter = submittedSetter; setUnlockTime = block.timestamp + 2 days; //Time lock } function releaseUpdater() external { require(updater == address(0), "updater has been released"); require(isSigner[msg.sender] == true, "only signer can release the updater"); require(updateConfirmations >= numConfirmationsRequired, "Confirmations are not enough"); updater = submittedUpdater; } // }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_delegationAddress","type":"string"},{"internalType":"contract IPanToken","name":"_panToken","type":"address"},{"internalType":"contract ICroBridge","name":"_croBridge","type":"address"},{"internalType":"contract IPT","name":"_ptToken","type":"address"},{"internalType":"contract IYT","name":"_ytToken","type":"address"},{"internalType":"contract IWCRO","name":"_wcro","type":"address"},{"internalType":"uint256","name":"_targetRatio","type":"uint256"},{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"uint256","name":"_numConfirmationsRequired","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BurnToWCRO","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MintFromWCRO","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"delegationAddress","type":"string"}],"name":"SetDelegateAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_eatPANOn","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_eatPANAmount","type":"uint256"}],"name":"SetEatPAN","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feeBase","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeKink","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"multiple","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"jumpMultiple","type":"uint256"}],"name":"SetFeeRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"holdLevelThreshold","type":"uint256"}],"name":"SetHoldLevelThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"targetRatio","type":"uint256"}],"name":"SetTargetRatio","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"CROBridge","type":"address"},{"indexed":true,"internalType":"address","name":"ptToken","type":"address"},{"indexed":true,"internalType":"address","name":"ytToken","type":"address"},{"indexed":false,"internalType":"address","name":"WCRO","type":"address"}],"name":"SetToken","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"delegationAmount","type":"uint256"}],"name":"UpdateDelegate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"undelegationAmount","type":"uint256"}],"name":"UpdateUndelegation","type":"event"},{"inputs":[],"name":"CROBridge","outputs":[{"internalType":"contract ICroBridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PanToken","outputs":[{"internalType":"contract IPanToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WCRO","outputs":[{"internalType":"contract IWCRO","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToWCRO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"confirmSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"confirmUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delegationAddress","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFunds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"depositedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dropSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dropUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eatPANAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eatPANOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeKink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDelegationRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getHoldDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdLevelThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isSetConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isUpdateConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jumpMultiple","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintFromWCRO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"multiple","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numConfirmationsRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ptToken","outputs":[{"internalType":"contract IPT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requestSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestUpdate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setConfirmations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_delegationAddress","type":"string"}],"name":"setDelegateAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_eatPANOn","type":"bool"},{"internalType":"uint256","name":"_eatPANAmount","type":"uint256"}],"name":"setEatPAN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeBase","type":"uint256"},{"internalType":"uint256","name":"_feeKink","type":"uint256"},{"internalType":"uint256","name":"_multiple","type":"uint256"},{"internalType":"uint256","name":"_jumpMultiple","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_holdLevelThreshold","type":"uint256"}],"name":"setHoldLevelThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ratio","type":"uint256"}],"name":"setTargetRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPanToken","name":"_panToken","type":"address"},{"internalType":"contract ICroBridge","name":"_croBridge","type":"address"},{"internalType":"contract IPT","name":"_ptToken","type":"address"},{"internalType":"contract IYT","name":"_ytToken","type":"address"},{"internalType":"contract IWCRO","name":"_wcro","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"signers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_setter","type":"address"}],"name":"submitSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"submitSetTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_updater","type":"address"}],"name":"submitUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"submitUpdateTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"submitted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"submittedSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"submittedUpdater","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"targetRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"undelegationAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateConfirmations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updater","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ytToken","outputs":[{"internalType":"contract IYT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200533a3803806200533a833981016040819052620000349162000435565b620000486200004262000294565b62000298565b6000805460ff60a01b1916905560018055815160051115620000875760405162461bcd60e51b81526004016200007e90620005f2565b60405180910390fd5b6003811015620000ab5760405162461bcd60e51b81526004016200007e9062000584565b8851620000c09060079060208c0190620002e8565b50600280546001600160a01b03199081166001600160a01b038b8116919091179092556004805482168a841617905560058054821689841617905560068054821688841617905560038054909116918616919091179055600a8390556014805460ff1916905568056bc75e2d6310000060155568878678326eac900000601655611388600f556209eb106010556161a86011556207a120601255601b81905560005b8251811015620002845760008382815181106200018f57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006001600160a01b0316816001600160a01b03161415620001cf5760405162461bcd60e51b81526004016200007e9062000686565b6001600160a01b03811660009081526018602052604090205460ff16156200020b5760405162461bcd60e51b81526004016200007e906200064f565b6001600160a01b03166000818152601860205260408120805460ff191660019081179091556017805491820181559091527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180546001600160a01b0319169091179055806200027b8162000726565b91505062000162565b505050505050505050506200077d565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620002f690620006e9565b90600052602060002090601f0160209004810192826200031a576000855562000365565b82601f106200033557805160ff191683800117855562000365565b8280016001018555821562000365579182015b828111156200036557825182559160200191906001019062000348565b506200037392915062000377565b5090565b5b8082111562000373576000815560010162000378565b600082601f8301126200039f578081fd5b815160206001600160401b03821115620003bd57620003bd6200074e565b808202620003cd828201620006bd565b838152828101908684018388018501891015620003e8578687fd5b8693505b8584101562000417578051620004028162000764565b835260019390930192918401918401620003ec565b50979650505050505050565b8051620004308162000764565b919050565b60008060008060008060008060006101208a8c03121562000454578485fd5b89516001600160401b03808211156200046b578687fd5b818c0191508c601f8301126200047f578687fd5b8151818111156200049457620004946200074e565b6020620004aa601f8301601f19168201620006bd565b8281528f82848701011115620004be57898afd5b895b83811015620004dd578581018301518282018401528201620004c0565b83811115620004ee578a8385840101525b509c50620004fe8e820162000423565b9b5050506200051060408d0162000423565b98506200052060608d0162000423565b97506200053060808d0162000423565b96506200054060a08d0162000423565b955060c08c0151945060e08c01519150808211156200055d578384fd5b506200056c8c828d016200038e565b9250506101008a015190509295985092959850929598565b60208082526048908201527f4e756d626572206f6620726571756972656420636f6e6669726d6174696f6e7360408201527f2068617320746f206265206c6172676572207468616e206f7220657175616c20606082015267746f20746872656560c01b608082015260a00190565b60208082526038908201527f4e756d626572206f66207369676e6572732068617320746f206265206c61726760408201527f6572207468616e206f7220657175616c20746f20666976650000000000000000606082015260800190565b60208082526017908201527f7369676e65722073686f756c6420626520756e69717565000000000000000000604082015260600190565b60208082526015908201527f7369676e65722063616e6e6f74206265207a65726f0000000000000000000000604082015260600190565b6040518181016001600160401b0381118282101715620006e157620006e16200074e565b604052919050565b600281046001821680620006fe57607f821691505b602082108114156200072057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200074757634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200077a57600080fd5b50565b614bad806200078d6000396000f3fe6080604052600436106104135760003560e01c80637df73e271161021e578063cbe3d0df11610123578063e2c41dbc116100ab578063f2fde38b1161007a578063f2fde38b14610a7e578063f46901ed14610a9e578063f70d936214610abe578063facd1ab914610ad3578063fcbf609b14610ae857610431565b8063e2c41dbc14610a2c578063e429253e14610a34578063e4d4c19c14610a54578063e7a8025914610a6957610431565b8063d3d890f5116100f2578063d3d890f5146109c3578063d695cf2a146109d8578063dd909210146109ed578063df034cd014610a02578063e018b0ef14610a1757610431565b8063cbe3d0df1461096f578063d0549b8514610984578063d0c26a3914610999578063d0dd7d2e146109ae57610431565b806399d32fc4116101a6578063b6322d2911610175578063b6322d29146108fb578063b764667514610910578063bcf0539914610930578063bfdfa7af14610945578063ca8aea641461095a57610431565b806399d32fc4146108a75780639c312cfd146108bc578063ad7dafeb146108d1578063b5aa1ecb146108e657610431565b80638456cb59116101ed5780638456cb59146108285780638da5cb5b1461083d5780638def1feb1461085257806395e911a81461087257806399238d901461088757610431565b80637df73e27146107be578063801f09a2146107de578063810c778f146107f3578063830de4b11461081357610431565b806342966c681161032457806365d2ff6c116102ac57806370d894cd1161027b57806370d894cd1461073f578063715018a61461075f57806379d3b2af146107745780637b2aab03146107945780637bde9ecb146107a957610431565b806365d2ff6c146106ed57806369e15404146107025780636a62784214610717578063708ddf7b1461072a57610431565b806344cb14f5116102f357806344cb14f5146106775780634b7925ce1461068c5780635006d1c2146106a15780635a08bd17146106b65780635c975abb146106cb57610431565b806342966c681461060d5780634374538d1461062d578063437a8ae614610642578063444822531461065757610431565b80632079fb9a116103a75780633f3108f7116103765780633f3108f7146105a45780633f4ba83a146105b95780633f67c333146105ce57806342203015146105e357806342840366146105f857610431565b80632079fb9a146105245780632162e1b51461054457806322d91306146105645780632f9d2b3e1461058457610431565b806319eadfdb116103e357806319eadfdb146104c35780631d01364c146104e55780631d470cb1146104fa5780631ebb7c301461050f57610431565b8062eb1c0a14610436578063017e7e58146104615780630abdaca3146104835780630dafc1eb146104a357610431565b36610431576003546001600160a01b0316331461042f57600080fd5b005b600080fd5b34801561044257600080fd5b5061044b610b08565b6040516104589190613bdb565b60405180910390f35b34801561046d57600080fd5b50610476610b96565b6040516104589190613b55565b34801561048f57600080fd5b5061042f61049e366004613928565b610ba5565b3480156104af57600080fd5b5061042f6104be3660046138e1565b610cab565b3480156104cf57600080fd5b506104d8611081565b6040516104589190614a61565b3480156104f157600080fd5b506104d8611088565b34801561050657600080fd5b5061047661108e565b34801561051b57600080fd5b506104d861109d565b34801561053057600080fd5b5061047661053f366004613a56565b6110a3565b34801561055057600080fd5b506104d861055f3660046138be565b6110cd565b34801561057057600080fd5b5061042f61057f366004613ab5565b6111b5565b34801561059057600080fd5b5061042f61059f366004613945565b61131b565b3480156105b057600080fd5b5061047661150a565b3480156105c557600080fd5b5061042f611519565b3480156105da57600080fd5b5061042f6115eb565b3480156105ef57600080fd5b506104766116c7565b34801561060457600080fd5b506104766116d6565b34801561061957600080fd5b5061042f610628366004613a56565b6116e5565b34801561063957600080fd5b506104d8611c8a565b34801561064e57600080fd5b506104d8611c90565b34801561066357600080fd5b5061042f610672366004613a56565b611c96565b34801561068357600080fd5b506104d8612237565b34801561069857600080fd5b5061047661223d565b3480156106ad57600080fd5b5061042f61224c565b3480156106c257600080fd5b506104d86122f1565b3480156106d757600080fd5b506106e06122f7565b6040516104589190613bc0565b3480156106f957600080fd5b506104d8612307565b34801561070e57600080fd5b506104d861230d565b61042f6107253660046138be565b612313565b34801561073657600080fd5b506104d86125f6565b34801561074b57600080fd5b5061042f61075a366004613a56565b6125fc565b34801561076b57600080fd5b5061042f61271c565b34801561078057600080fd5b5061042f61078f3660046138be565b612767565b3480156107a057600080fd5b506104d8612818565b3480156107b557600080fd5b506104d861281e565b3480156107ca57600080fd5b506106e06107d93660046138be565b612824565b3480156107ea57600080fd5b506106e0612839565b3480156107ff57600080fd5b506106e061080e366004613a86565b612842565b34801561081f57600080fd5b506104d8612862565b34801561083457600080fd5b5061042f612868565b34801561084957600080fd5b5061047661293b565b34801561085e57600080fd5b5061042f61086d3660046138be565b61294a565b34801561087e57600080fd5b506104d86129fb565b34801561089357600080fd5b5061042f6108a2366004613a56565b612a01565b3480156108b357600080fd5b5061042f612ab2565b3480156108c857600080fd5b506106e0612c42565b3480156108dd57600080fd5b50610476612c4b565b3480156108f257600080fd5b506104d8612c5a565b34801561090757600080fd5b506104d8612c60565b34801561091c57600080fd5b506106e061092b366004613a86565b612c66565b34801561093c57600080fd5b506104d8612c86565b34801561095157600080fd5b506104d8612c8c565b34801561096657600080fd5b506106e0612c92565b34801561097b57600080fd5b5061042f612c9b565b34801561099057600080fd5b506104d8612d50565b3480156109a557600080fd5b5061042f612d56565b3480156109ba57600080fd5b506104d8612e2b565b3480156109cf57600080fd5b506104d8612e31565b3480156109e457600080fd5b5061042f612e37565b3480156109f957600080fd5b50610476612f17565b348015610a0e57600080fd5b50610476612f26565b348015610a2357600080fd5b50610476612f35565b61042f612f44565b348015610a4057600080fd5b5061042f610a4f366004613a56565b612fb6565b348015610a6057600080fd5b506104d86130a9565b348015610a7557600080fd5b5061042f6130af565b348015610a8a57600080fd5b5061042f610a993660046138be565b61318f565b348015610aaa57600080fd5b5061042f610ab93660046138be565b6131fd565b348015610aca57600080fd5b506104d86132b9565b348015610adf57600080fd5b506104d86133ee565b348015610af457600080fd5b5061042f610b033660046139b5565b6133f4565b60078054610b1590614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4190614af3565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b505050505081565b6008546001600160a01b031681565b69d3c21bcecceda10000008110610bd75760405162461bcd60e51b8152600401610bce90614a1f565b60405180910390fd5b6021546001600160a01b0316610bff5760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b03163314610c295760405162461bcd60e51b8152600401610bce90614793565b6023544211610c4a5760405162461bcd60e51b8152600401610bce906147ca565b6014805460ff19168315151790556015819055610c656134a4565b6014546015546040517fb783746dbd3e6ad3f18ad43c4935b44cfc93621fcbe8ba6dfcadd1853016cb8b92610c9f9260ff90911691613bcb565b60405180910390a15050565b610cb36122f7565b15610cd05760405162461bcd60e51b8152600401610bce906142fb565b6003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610d0490339030908690600401613b9c565b602060405180830381600087803b158015610d1e57600080fd5b505af1158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d56919061390c565b610d7057634e487b7160e01b600052600160045260246000fd5b80600b6000828254610d829190614a85565b90915550610d9090506134d8565b600954600a541115610f74576000620f4240600c54600b54610db29190614adc565b600954600a54610dc29190614adc565b610dcc9190614abd565b610dd69190614a9d565b905081811115610eab57600354604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90610e10908590600401614a61565b600060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b505060048054604051630c41cc2760e41b81526001600160a01b03909116935063c41cc27092508591610e749160079101613c2e565b6000604051808303818588803b158015610e8d57600080fd5b505af1158015610ea1573d6000803e3d6000fd5b5050505050610f72565b600354604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90610edb908490600401614a61565b600060405180830381600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505060048054604051630c41cc2760e41b81526001600160a01b03909116935063c41cc27092508491610f3f9160079101613c2e565b6000604051808303818588803b158015610f5857600080fd5b505af1158015610f6c573d6000803e3d6000fd5b50505050505b505b6005546040516340c10f1960e01b81526001600160a01b03909116906340c10f1990610fa69085908590600401613b69565b600060405180830381600087803b158015610fc057600080fd5b505af1158015610fd4573d6000803e3d6000fd5b50506006546040516340c10f1960e01b81526001600160a01b0390911692506340c10f19915061100a9085908590600401613b69565b600060405180830381600087803b15801561102457600080fd5b505af1158015611038573d6000803e3d6000fd5b50505050816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516110759190614a61565b60405180910390a25050565b600a545b90565b600b5481565b6003546001600160a01b031681565b60095490565b601781815481106110b357600080fd5b6000918252602090912001546001600160a01b0316905081565b6002546040516370a0823160e01b815260009182916001600160a01b03909116906370a0823190611102908690600401613b55565b60206040518083038186803b15801561111a57600080fd5b505afa15801561112e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111529190613a6e565b905060165460646111639190614abd565b81106111735760379150506111b0565b60165461118190600a614abd565b811061119157604b9150506111b0565b60165481106111a457605a9150506111b0565b60649150506111b0565b505b919050565b620f42408411156111d85760405162461bcd60e51b8152600401610bce906142c4565b620f42408311156111fb5760405162461bcd60e51b8152600401610bce906146fd565b620f424082111561121e5760405162461bcd60e51b8152600401610bce90614213565b620f42408111156112415760405162461bcd60e51b8152600401610bce90614092565b6021546001600160a01b03166112695760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b031633146112935760405162461bcd60e51b8152600401610bce90614793565b60235442116112b45760405162461bcd60e51b8152600401610bce906147ca565b600f8490556010839055601182905560128190556112d06134a4565b7fc3483f4013aa896e4b1ec9c52a7236a4cb6d8bdc045b5d0c624118bcc95f7f0c600f5460105460115460125460405161130d9493929190614a6a565b60405180910390a150505050565b6001600160a01b0385166113415760405162461bcd60e51b8152600401610bce90613f29565b6001600160a01b0384166113675760405162461bcd60e51b8152600401610bce90614500565b6001600160a01b03831661138d5760405162461bcd60e51b8152600401610bce90614248565b6001600160a01b0382166113b35760405162461bcd60e51b8152600401610bce90614325565b6001600160a01b0381166113d95760405162461bcd60e51b8152600401610bce90613cdd565b6021546001600160a01b03166114015760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b0316331461142b5760405162461bcd60e51b8152600401610bce90614793565b602354421161144c5760405162461bcd60e51b8152600401610bce906147ca565b600280546001600160a01b03199081166001600160a01b0388811691909117909255600480548216878416179055600580548216868416179055600680548216858416179055600380549091169183169190911790556114aa6134a4565b6006546005546004546003546040516001600160a01b0394851694938416937f67efd883cd93a892367f7b10d02669d27f8ea45fb51eac3f8f4f0601b044c3bf936114fb9390821692911690613b82565b60405180910390a35050505050565b6021546001600160a01b031681565b6115216122f7565b61153d5760405162461bcd60e51b8152600401610bce90613d0b565b6021546001600160a01b03166115655760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b0316331461158f5760405162461bcd60e51b8152600401610bce90614793565b60235442116115b05760405162461bcd60e51b8152600401610bce906147ca565b6115b861357c565b6115c06134a4565b6040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60255460ff1615156001146116125760405162461bcd60e51b8152600401610bce90613ef2565b3360009081526018602052604090205460ff1615156001146116465760405162461bcd60e51b8152600401610bce90613f8f565b6024546000908152601a6020908152604080832033845290915290205460ff16156116835760405162461bcd60e51b8152600401610bce906143d7565b6024546000908152601a602090815260408083203384529091528120805460ff19166001908117909155601d8054919290916116c0908490614a85565b9091555050565b6006546001600160a01b031681565b6028546001600160a01b031681565b6116ed6122f7565b1561170a5760405162461bcd60e51b8152600401610bce906142fb565b6002600154141561172d5760405162461bcd60e51b8152600401610bce906147f4565b600260015533806117505760405162461bcd60e51b8152600401610bce90613dfd565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611781908590600401613b55565b60206040518083038186803b15801561179957600080fd5b505afa1580156117ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d19190613a6e565b6005546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611807908690600401613b55565b60206040518083038186803b15801561181f57600080fd5b505afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118579190613a6e565b6006546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061188d908790600401613b55565b60206040518083038186803b1580156118a557600080fd5b505afa1580156118b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dd9190613a6e565b9050848210156118ff5760405162461bcd60e51b8152600401610bce90614008565b8481101561191f5760405162461bcd60e51b8152600401610bce906146b9565b6003546040516370a0823160e01b815286916001600160a01b0316906370a082319061194f903090600401613b55565b60206040518083038186803b15801561196757600080fd5b505afa15801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f9190613a6e565b10156119bd5760405162461bcd60e51b8152600401610bce90614675565b60006119c8856110cd565b905060006119d46132b9565b90506000620f42406064846119e9858c614abd565b6119f39190614abd565b6119fd9190614a9d565b611a079190614a9d565b90508060136000828254611a1b9190614a85565b9091555060009050611a2d828a614adc565b905080600c6000828254611a419190614a85565b90915550611a4f90506134d8565b60145460ff1615611afc576000606485601554611a6c9190614abd565b611a769190614a9d565b905080881015611a985760405162461bcd60e51b8152600401610bce90614960565b600254604051630852cd8d60e31b81526001600160a01b03909116906342966c6890611ac8908490600401614a61565b600060405180830381600087803b158015611ae257600080fd5b505af1158015611af6573d6000803e3d6000fd5b50505050505b600354604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90611b2c908490600401614a61565b600060405180830381600087803b158015611b4657600080fd5b505af1158015611b5a573d6000803e3d6000fd5b5050600554604051632770a7eb60e21b81526001600160a01b039091169250639dc29fac9150611b90908b908d90600401613b69565b600060405180830381600087803b158015611baa57600080fd5b505af1158015611bbe573d6000803e3d6000fd5b5050600654604051632770a7eb60e21b81526001600160a01b039091169250639dc29fac9150611bf4908b908d90600401613b69565b600060405180830381600087803b158015611c0e57600080fd5b505af1158015611c22573d6000803e3d6000fd5b50611c3a925050506001600160a01b038916826135ed565b876001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051611c739190614a61565b60405180910390a250506001805550505050505050565b601d5481565b60115481565b611c9e6122f7565b15611cbb5760405162461bcd60e51b8152600401610bce906142fb565b3380611cd95760405162461bcd60e51b8152600401610bce90613dfd565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611d0a908590600401613b55565b60206040518083038186803b158015611d2257600080fd5b505afa158015611d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5a9190613a6e565b6005546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611d90908690600401613b55565b60206040518083038186803b158015611da857600080fd5b505afa158015611dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de09190613a6e565b6006546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611e16908790600401613b55565b60206040518083038186803b158015611e2e57600080fd5b505afa158015611e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e669190613a6e565b905084821015611e885760405162461bcd60e51b8152600401610bce90614008565b84811015611ea85760405162461bcd60e51b8152600401610bce906146b9565b6003546040516370a0823160e01b815286916001600160a01b0316906370a0823190611ed8903090600401613b55565b60206040518083038186803b158015611ef057600080fd5b505afa158015611f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f289190613a6e565b1015611f465760405162461bcd60e51b8152600401610bce90614675565b6000611f51856110cd565b90506000611f5d6132b9565b90506000620f4240606484611f72858c614abd565b611f7c9190614abd565b611f869190614a9d565b611f909190614a9d565b90508060136000828254611fa49190614a85565b9091555060009050611fb6828a614adc565b905080600c6000828254611fca9190614a85565b90915550611fd890506134d8565b60145460ff1615612085576000606485601554611ff59190614abd565b611fff9190614a9d565b9050808810156120215760405162461bcd60e51b8152600401610bce90614960565b600254604051630852cd8d60e31b81526001600160a01b03909116906342966c6890612051908490600401614a61565b600060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b50505050505b600554604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906120b7908b908d90600401613b69565b600060405180830381600087803b1580156120d157600080fd5b505af11580156120e5573d6000803e3d6000fd5b5050600654604051632770a7eb60e21b81526001600160a01b039091169250639dc29fac915061211b908b908d90600401613b69565b600060405180830381600087803b15801561213557600080fd5b505af1158015612149573d6000803e3d6000fd5b505060035460405163a9059cbb60e01b81526001600160a01b03909116925063a9059cbb915061217f908b908590600401613b69565b602060405180830381600087803b15801561219957600080fd5b505af11580156121ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d1919061390c565b6121eb57634e487b7160e01b600052600160045260246000fd5b876001600160a01b03167f83f3c411e75609c0c5a413fdfb4b4f95dba7f6632cf5f51263d98b1a2baff1be826040516122249190614a61565b60405180910390a2505050505050505050565b60235481565b6004546001600160a01b031681565b6027546001600160a01b0316156122755760405162461bcd60e51b8152600401610bce90613e75565b3360009081526018602052604090205460ff1615156001146122a95760405162461bcd60e51b8152600401610bce90614632565b601b54601d5410156122cd5760405162461bcd60e51b8152600401610bce90614492565b602854602780546001600160a01b0319166001600160a01b03909216919091179055565b600a5481565b600054600160a01b900460ff1690565b60165481565b60135481565b61231b6122f7565b156123385760405162461bcd60e51b8152600401610bce906142fb565b34600b600082825461234a9190614a85565b9091555061235890506134d8565b600954600a543491101561248c576000620f4240600c54600b5461237c9190614adc565b600954600a5461238c9190614adc565b6123969190614abd565b6123a09190614a9d565b9050348111156124175760048054604051630c41cc2760e41b81526001600160a01b039091169163c41cc2709134916123dc9160079101613c2e565b6000604051808303818588803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b50505050506000915061248a565b60048054604051630c41cc2760e41b81526001600160a01b039091169163c41cc2709184916124499160079101613c2e565b6000604051808303818588803b15801561246257600080fd5b505af1158015612476573d6000803e3d6000fd5b505050505080346124879190614adc565b91505b505b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b50506005546040516340c10f1960e01b81526001600160a01b0390911693506340c10f199250612527915085903490600401613b69565b600060405180830381600087803b15801561254157600080fd5b505af1158015612555573d6000803e3d6000fd5b50506006546040516340c10f1960e01b81526001600160a01b0390911692506340c10f19915061258b9085903490600401613b69565b600060405180830381600087803b1580156125a557600080fd5b505af11580156125b9573d6000803e3d6000fd5b50505050816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885346040516110759190614a61565b601e5481565b600c54600b5461260c9190614adc565b811061262a5760405162461bcd60e51b8152600401610bce9061457b565b80600d546126389190614a85565b600c54600b546126489190614adc565b10156126665760405162461bcd60e51b8152600401610bce90613da7565b6027546001600160a01b031661268e5760405162461bcd60e51b8152600401610bce90614734565b6027546001600160a01b031633146126b85760405162461bcd60e51b8152600401610bce906144c9565b80600d60008282546126ca9190614a85565b909155506126d890506134d8565b6126e061368e565b7fe2ea5ca406db1bf17a168c6c5f759b2df716368dae28b9fa7aefc32e7b5588ae600d546040516127119190614a61565b60405180910390a150565b6127246136c2565b6001600160a01b031661273561293b565b6001600160a01b03161461275b5760405162461bcd60e51b8152600401610bce906145c6565b61276560006136c6565b565b6001600160a01b03811661278d5760405162461bcd60e51b8152600401610bce9061427f565b60255460ff16156127b05760405162461bcd60e51b8152600401610bce90614764565b3360009081526018602052604090205460ff1615156001146127e45760405162461bcd60e51b8152600401610bce90613d39565b6025805460ff1916600117905542602655602880546001600160a01b039092166001600160a01b0319909216919091179055565b60245481565b601c5481565b60186020526000908152604090205460ff1681565b60145460ff1681565b601a60209081526000928352604080842090915290825290205460ff1681565b600c5481565b6128706122f7565b1561288d5760405162461bcd60e51b8152600401610bce906142fb565b6021546001600160a01b03166128b55760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b031633146128df5760405162461bcd60e51b8152600401610bce90614793565b60235442116129005760405162461bcd60e51b8152600401610bce906147ca565b612908613716565b6129106134a4565b6040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6000546001600160a01b031690565b6001600160a01b0381166129705760405162461bcd60e51b8152600401610bce90614537565b601f5460ff16156129935760405162461bcd60e51b8152600401610bce90614764565b3360009081526018602052604090205460ff1615156001146129c75760405162461bcd60e51b8152600401610bce906149e8565b601f805460ff1916600117905542602055602280546001600160a01b039092166001600160a01b0319909216919091179055565b600f5481565b6021546001600160a01b0316612a295760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b03163314612a535760405162461bcd60e51b8152600401610bce90614793565b6023544211612a745760405162461bcd60e51b8152600401610bce906147ca565b6016819055612a816134a4565b7f42b76f3ce9be6c7a13da17bb65edba6670457ef07256bc89b3f99fe0a4aef15d6016546040516127119190614a61565b612aba6122f7565b15612ad75760405162461bcd60e51b8152600401610bce906142fb565b6008546001600160a01b0316612aff5760405162461bcd60e51b8152600401610bce90614393565b6021546001600160a01b0316612b275760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b03163314612b515760405162461bcd60e51b8152600401610bce90614793565b6023544211612b725760405162461bcd60e51b8152600401610bce906147ca565b6000601354905080600c6000828254612b8b9190614a85565b90915550506000601355612b9d6134a4565b60035460085460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92612bd3929116908590600401613b69565b602060405180830381600087803b158015612bed57600080fd5b505af1158015612c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c25919061390c565b612c3f57634e487b7160e01b600052600160045260246000fd5b50565b60255460ff1681565b6022546001600160a01b031681565b600d5481565b60105481565b601960209081526000928352604080842090915290825290205460ff1681565b60155481565b60095481565b601f5460ff1681565b6021546001600160a01b031615612cc45760405162461bcd60e51b8152600401610bce906141dc565b3360009081526018602052604090205460ff161515600114612cf85760405162461bcd60e51b8152600401610bce906149a6565b601b54601c541015612d1c5760405162461bcd60e51b8152600401610bce90614492565b602254602180546001600160a01b0319166001600160a01b03909216919091179055612d4b426202a300614a85565b602355565b601b5481565b601f5460ff161515600114612d7d5760405162461bcd60e51b8152600401610bce90613ef2565b3360009081526018602052604090205460ff161515600114612db15760405162461bcd60e51b8152600401610bce9061482b565b601e54600090815260196020908152604080832033845290915290205460ff1615612dee5760405162461bcd60e51b8152600401610bce906143d7565b601e5460009081526019602090815260408083203384529091528120805460ff19166001908117909155601c8054919290916116c0908490614a85565b600e5481565b60125481565b60255460ff161515600114612e5e5760405162461bcd60e51b8152600401610bce906140d6565b602654612e6e9062015180614a85565b4211612e8c5760405162461bcd60e51b8152600401610bce90614862565b601b54601d5410612eaf5760405162461bcd60e51b8152600401610bce90613e3e565b3360009081526018602052604090205460ff161515600114612ee35760405162461bcd60e51b8152600401610bce9061435c565b6025805460ff19169055602880546001600160a01b03191690556000601d81905560248054600192906116c0908490614a85565b6002546001600160a01b031681565b6027546001600160a01b031681565b6005546001600160a01b031681565b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f9457600080fd5b505af1158015612fa8573d6000803e3d6000fd5b505050505061276534613777565b60008111612fd65760405162461bcd60e51b8152600401610bce90613fd1565b620f42408110612ff85760405162461bcd60e51b8152600401610bce906145fb565b6021546001600160a01b03166130205760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b0316331461304a5760405162461bcd60e51b8152600401610bce90614793565b602354421161306b5760405162461bcd60e51b8152600401610bce906147ca565b600a8190556130786134a4565b7f915463aa70fb5748e1ec1f8f517c6510a34badbcc0bff60f1362f37844de0289600a546040516127119190614a61565b60265481565b601f5460ff1615156001146130d65760405162461bcd60e51b8152600401610bce906140d6565b6020546130e69062015180614a85565b42116131045760405162461bcd60e51b8152600401610bce90614862565b601b54601c54106131275760405162461bcd60e51b8152600401610bce90613caf565b3360009081526018602052604090205460ff16151560011461315b5760405162461bcd60e51b8152600401610bce90613d70565b601f805460ff19169055602280546001600160a01b03191690556000601c819055601e8054600192906116c0908490614a85565b6131976136c2565b6001600160a01b03166131a861293b565b6001600160a01b0316146131ce5760405162461bcd60e51b8152600401610bce906145c6565b6001600160a01b0381166131f45760405162461bcd60e51b8152600401610bce90613eac565b612c3f816136c6565b6001600160a01b0381166132235760405162461bcd60e51b8152600401610bce9061440e565b6021546001600160a01b031661324b5760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b031633146132755760405162461bcd60e51b8152600401610bce90614793565b60235442116132965760405162461bcd60e51b8152600401610bce906147ca565b600880546001600160a01b0319166001600160a01b038316179055612c3f6134a4565b6000620f4240600a54106132df5760405162461bcd60e51b8152600401610bce90614162565b6000600a54620f42406132f29190614adc565b60095461330290620f4240614adc565b61330f90620f4240614abd565b6133199190614a9d565b90506000620f424082101561333c5761333582620f4240614adc565b9050613340565b5060005b601054811161337b57600f54620f42406011548361335e9190614abd565b6133689190614a9d565b6133729190614a85565b92505050611085565b6000600f54620f42406011546010546133949190614abd565b61339e9190614a9d565b6133a89190614a85565b90506000601054836133ba9190614adc565b905081620f4240601254836133cf9190614abd565b6133d99190614a9d565b6133e39190614a85565b945050505050611085565b60205481565b6027546001600160a01b031661341c5760405162461bcd60e51b8152600401610bce90614734565b6027546001600160a01b031633146134465760405162461bcd60e51b8152600401610bce906144c9565b8051613459906007906020840190613825565b5061346261368e565b60076040516134719190613ae6565b604051908190038120907fd60754995bd21fff8414ca649f5416dabab89de2fc5b1656a36d500537d03c9f90600090a250565b601f805460ff19169055602180546001600160a01b03191690556000601c819055601e8054600192906116c0908490614a85565b6000600b54116134fa5760405162461bcd60e51b8152600401610bce9061404c565b600c54600b54101561351e5760405162461bcd60e51b8152600401610bce90614902565b6000600c54600b546135309190614adc565b111561357557600c54600b546135469190614adc565b600e54600d546135569190614adc565b61356390620f4240614abd565b61356d9190614a9d565b600955612765565b6000600955565b6135846122f7565b6135a05760405162461bcd60e51b8152600401610bce90613d0b565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6135d66136c2565b6040516135e39190613b55565b60405180910390a1565b8047101561360d5760405162461bcd60e51b8152600401610bce906141a5565b6000826001600160a01b03168260405161362690611085565b60006040518083038185875af1925050503d8060008114613663576040519150601f19603f3d011682016040523d82523d6000602084013e613668565b606091505b50509050806136895760405162461bcd60e51b8152600401610bce90614105565b505050565b6025805460ff19169055602780546001600160a01b03191690556000601d81905560248054600192906116c0908490614a85565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61371e6122f7565b1561373b5760405162461bcd60e51b8152600401610bce906142fb565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586135d66136c2565b600c54600b546137879190614adc565b81106137a55760405162461bcd60e51b8152600401610bce90614445565b80600e546137b39190614a85565b600d5410156137d45760405162461bcd60e51b8152600401610bce906148a5565b80600e60008282546137e69190614a85565b909155506137f490506134d8565b7fe2cc5b53c2374a3066ef7de34f6d797a3b6384ec8bb83e34ab6d5abd478f37c9600e546040516127119190614a61565b82805461383190614af3565b90600052602060002090601f0160209004810192826138535760008555613899565b82601f1061386c57805160ff1916838001178555613899565b82800160010185558215613899579182015b8281111561389957825182559160200191906001019061387e565b506138a59291506138a9565b5090565b5b808211156138a557600081556001016138aa565b6000602082840312156138cf578081fd5b81356138da81614b54565b9392505050565b600080604083850312156138f3578081fd5b82356138fe81614b54565b946020939093013593505050565b60006020828403121561391d578081fd5b81516138da81614b69565b6000806040838503121561393a578182fd5b82356138fe81614b69565b600080600080600060a0868803121561395c578081fd5b853561396781614b54565b9450602086013561397781614b54565b9350604086013561398781614b54565b9250606086013561399781614b54565b915060808601356139a781614b54565b809150509295509295909350565b600060208083850312156139c7578182fd5b823567ffffffffffffffff808211156139de578384fd5b818501915085601f8301126139f1578384fd5b813581811115613a0357613a03614b3e565b604051601f8201601f1916810185018381118282101715613a2657613a26614b3e565b6040528181528382018501881015613a3c578586fd5b818585018683013790810190930193909352509392505050565b600060208284031215613a67578081fd5b5035919050565b600060208284031215613a7f578081fd5b5051919050565b60008060408385031215613a98578182fd5b823591506020830135613aaa81614b54565b809150509250929050565b60008060008060808587031215613aca578384fd5b5050823594602084013594506040840135936060013592509050565b6000808354613af481614af3565b60018281168015613b0c5760018114613b1d57613b49565b60ff19841687528287019450613b49565b8786526020808720875b85811015613b405781548a820152908401908201613b27565b50505082870194505b50929695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b901515815260200190565b9115158252602082015260400190565b6000602080835283518082850152825b81811015613c0757858101830151858201604001528201613beb565b81811115613c185783604083870101525b50601f01601f1916929092016040019392505050565b60006020808352818454613c4181614af3565b80848701526040600180841660008114613c625760018114613c7657613ca1565b60ff19851689840152606089019550613ca1565b898852868820885b85811015613c995781548b8201860152908301908801613c7e565b8a0184019650505b509398975050505050505050565b602080825260149082015273151a19481cd95d081a5cc818dbdb999a5c9b595960621b604082015260600190565b602080825260149082015273496e76616c6964205743524f204164647265737360601b604082015260600190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252601d908201527f6f6e6c79207369676e65722063616e207375626d697420757064617465000000604082015260600190565b60208082526018908201527f6f6e6c79207369676e65722063616e2064726f70207365740000000000000000604082015260600190565b60208082526036908201527f6465706f7369746564416d6f756e742073686f756c64206265206c6172676572604082015275081d1a185b8819195b1959d85d1a5bdb905b5bdd5b9d60521b606082015260800190565b60208082526021908201527f4572726f723a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526017908201527f5468652075706461746520697320636f6e6669726d6564000000000000000000604082015260600190565b60208082526019908201527f7570646174657220686173206265656e2072656c656173656400000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526018908201527f6e6f207375626d697373696f6e20746f20636f6e6669726d0000000000000000604082015260600190565b60208082526018908201527f496e76616c69642070616e546f6b656e20416464726573730000000000000000604082015260600190565b602080825260159082015274139bc81cd95d1d195c881a5cc8185cdcda59db9959605a1b604082015260600190565b60208082526022908201527f6f6e6c79207369676e65722063616e20636f6e6669726d207468652075706461604082015261746560f01b606082015260800190565b6020808252601d908201527f526174696f2073686f756c64206265206c6172676572207468616e2030000000604082015260600190565b60208082526024908201527f7074546f6b656e3a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526026908201527f6465706f7369746564416d6f756e742073686f756c64206265206c617267652060408201526507468616e20360d41b606082015260800190565b60208082526024908201527f6a756d704d756c7469706c652073686f756c64206265206c657373207468616e6040820152631018b29b60e11b606082015260800190565b60208082526015908201527406e6f207375626d697373696f6e20746f2064726f7605c1b604082015260600190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526023908201527f546172676574526174696f2073686f756c64206265206c657373207468616e2060408201526218b29b60e91b606082015260800190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b60208082526018908201527f73657474657220686173206265656e2072656c65617365640000000000000000604082015260600190565b6020808252818101527f4d756c7469706c652073686f756c64206265206c657373207468616e20316536604082015260600190565b60208082526017908201527f496e76616c6964207074546f6b656e2041646472657373000000000000000000604082015260600190565b60208082526025908201527f4572726f723a207a65726f20616464726573732063616e6e6f742062652075706040820152643230ba32b960d91b606082015260800190565b6020808252601f908201527f466565426173652073686f756c64206265206c657373207468616e2031653600604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526017908201527f496e76616c6964207974546f6b656e2041646472657373000000000000000000604082015260600190565b6020808252601b908201527f6f6e6c79207369676e65722063616e2064726f70207570646174650000000000604082015260600190565b60208082526024908201527f4572726f723a20636c61696d2066656520746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526018908201527f746865207369676e65722068617320636f6e6669726d65640000000000000000604082015260600190565b6020808252601c908201527f666565546f20616464726573732063616e6e6f74206265207a65726f00000000604082015260600190565b6020808252602d908201527f556e64656c65676174696f6e2073686f756c64206265206c657373207468616e60408201526c081d1bdd185b11195c1bdcda5d609a1b606082015260800190565b6020808252601c908201527f436f6e6669726d6174696f6e7320617265206e6f7420656e6f75676800000000604082015260600190565b6020808252601f908201527f4f6e6c7920757064617465722063616e2073657420706172616d657465727300604082015260600190565b60208082526019908201527f496e76616c69642063726f427269646765204164647265737300000000000000604082015260600190565b60208082526024908201527f4572726f723a207a65726f20616464726573732063616e6e6f742062652073656040820152633a3a32b960e11b606082015260800190565b6020808252602b908201527f44656c65676174696f6e2073686f756c64206265206c657373207468616e207460408201526a1bdd185b11195c1bdcda5d60aa1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601d908201527f526174696f2073686f756c64206265206c657373207468616e20316536000000604082015260600190565b60208082526023908201527f6f6e6c79207369676e65722063616e2072656c656173652074686520757064616040820152623a32b960e91b606082015260800190565b60208082526024908201527f4275726e20616d6f756e74206578636565647320636f6e74726163742062616c604082015263616e636560e01b606082015260800190565b60208082526024908201527f7974546f6b656e3a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252601f908201527f4665654b696e6b2073686f756c64206265206c657373207468616e2031653600604082015260600190565b602080825260169082015275139bc81d5c19185d195c881a5cc8185cdcda59db995960521b604082015260600190565b6020808252601590820152747375626d697373696f6e20746f20636f6e6669726d60581b604082015260600190565b6020808252601e908201527f4f6e6c79207365747465722063616e2073657420706172616d65746572730000604082015260600190565b60208082526010908201526f139bdd081c9958591e481d1bc81cd95d60821b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601f908201527f6f6e6c79207369676e65722063616e20636f6e6669726d207468652073657400604082015260600190565b60208082526023908201527f7375626d697373696f6e206973207374696c6c20696e20636f6e6669726d617460408201526234b7b760e91b606082015260800190565b60208082526039908201527f64656c65676174696f6e416d6f756e742073686f756c64206265206c6172676560408201527f72207468616e20756e64656c65676174696f6e416d6f756e7400000000000000606082015260800190565b602080825260409082018190527f6465706f7369746564416d6f756e742073686f756c64206265206c6172676520908201527f7468616e206f7220657175616c20746f2077697468647261776e416d6f756e74606082015260800190565b60208082526026908201527f50414e20546f6b656e3a206275726e20616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526022908201527f6f6e6c79207369676e65722063616e2072656c6561736520746865207365747460408201526132b960f11b606082015260800190565b6020808252601a908201527f6f6e6c79207369676e65722063616e207375626d697420736574000000000000604082015260600190565b60208082526022908201527f416d6f756e742073686f756c64206265206c657373207468616e20316536205060408201526120a760f11b606082015260800190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60008219821115614a9857614a98614b28565b500190565b600082614ab857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614ad757614ad7614b28565b500290565b600082821015614aee57614aee614b28565b500390565b600281046001821680614b0757607f821691505b602082108114156111ae57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612c3f57600080fd5b8015158114612c3f57600080fdfea2646970667358221220b28595e7d2af68d37f1390fdd6d93ae02577e3658350d8fb7a88d60bf2a9927064736f6c634300080000330000000000000000000000000000000000000000000000000000000000000120000000000000000000000000da6c746e8a14efe6e0a031f5d632bd2b0adc28be0000000000000000000000006b1b50c2223eb31e0d4683b046ea9c6cb0d0ea4f00000000000000000000000051f2ab325a81b0eb36b0814ca2fa8a23cb63d7310000000000000000000000003d329eb0ed1f460b4a52c9f70c20a1a5861f74e40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2300000000000000000000000000000000000000000000000000000000000b71b000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002a63726f316c337765796834666b6e65796561746468366a7770307530743471686132327963706e7137720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000004166b61731797396e6013eebc3a0d8c5c3abe7900000000000000000000000003db1f4407b0d62d06db63283b63e7f632f92c92c000000000000000000000000a3299d7a7b325888c9f356242e3efdf166a3072a0000000000000000000000005a4981b2174f6166c41b57d2538556dc8c1c228900000000000000000000000031764969b7f866d194e8adbe16a2eabc2e9d7d9d000000000000000000000000672c68c6cdb9ac889c9646c81bbdc18c651ce3f80000000000000000000000001913c7c4381a14474e469462d634c452430ddf9d
Deployed Bytecode
0x6080604052600436106104135760003560e01c80637df73e271161021e578063cbe3d0df11610123578063e2c41dbc116100ab578063f2fde38b1161007a578063f2fde38b14610a7e578063f46901ed14610a9e578063f70d936214610abe578063facd1ab914610ad3578063fcbf609b14610ae857610431565b8063e2c41dbc14610a2c578063e429253e14610a34578063e4d4c19c14610a54578063e7a8025914610a6957610431565b8063d3d890f5116100f2578063d3d890f5146109c3578063d695cf2a146109d8578063dd909210146109ed578063df034cd014610a02578063e018b0ef14610a1757610431565b8063cbe3d0df1461096f578063d0549b8514610984578063d0c26a3914610999578063d0dd7d2e146109ae57610431565b806399d32fc4116101a6578063b6322d2911610175578063b6322d29146108fb578063b764667514610910578063bcf0539914610930578063bfdfa7af14610945578063ca8aea641461095a57610431565b806399d32fc4146108a75780639c312cfd146108bc578063ad7dafeb146108d1578063b5aa1ecb146108e657610431565b80638456cb59116101ed5780638456cb59146108285780638da5cb5b1461083d5780638def1feb1461085257806395e911a81461087257806399238d901461088757610431565b80637df73e27146107be578063801f09a2146107de578063810c778f146107f3578063830de4b11461081357610431565b806342966c681161032457806365d2ff6c116102ac57806370d894cd1161027b57806370d894cd1461073f578063715018a61461075f57806379d3b2af146107745780637b2aab03146107945780637bde9ecb146107a957610431565b806365d2ff6c146106ed57806369e15404146107025780636a62784214610717578063708ddf7b1461072a57610431565b806344cb14f5116102f357806344cb14f5146106775780634b7925ce1461068c5780635006d1c2146106a15780635a08bd17146106b65780635c975abb146106cb57610431565b806342966c681461060d5780634374538d1461062d578063437a8ae614610642578063444822531461065757610431565b80632079fb9a116103a75780633f3108f7116103765780633f3108f7146105a45780633f4ba83a146105b95780633f67c333146105ce57806342203015146105e357806342840366146105f857610431565b80632079fb9a146105245780632162e1b51461054457806322d91306146105645780632f9d2b3e1461058457610431565b806319eadfdb116103e357806319eadfdb146104c35780631d01364c146104e55780631d470cb1146104fa5780631ebb7c301461050f57610431565b8062eb1c0a14610436578063017e7e58146104615780630abdaca3146104835780630dafc1eb146104a357610431565b36610431576003546001600160a01b0316331461042f57600080fd5b005b600080fd5b34801561044257600080fd5b5061044b610b08565b6040516104589190613bdb565b60405180910390f35b34801561046d57600080fd5b50610476610b96565b6040516104589190613b55565b34801561048f57600080fd5b5061042f61049e366004613928565b610ba5565b3480156104af57600080fd5b5061042f6104be3660046138e1565b610cab565b3480156104cf57600080fd5b506104d8611081565b6040516104589190614a61565b3480156104f157600080fd5b506104d8611088565b34801561050657600080fd5b5061047661108e565b34801561051b57600080fd5b506104d861109d565b34801561053057600080fd5b5061047661053f366004613a56565b6110a3565b34801561055057600080fd5b506104d861055f3660046138be565b6110cd565b34801561057057600080fd5b5061042f61057f366004613ab5565b6111b5565b34801561059057600080fd5b5061042f61059f366004613945565b61131b565b3480156105b057600080fd5b5061047661150a565b3480156105c557600080fd5b5061042f611519565b3480156105da57600080fd5b5061042f6115eb565b3480156105ef57600080fd5b506104766116c7565b34801561060457600080fd5b506104766116d6565b34801561061957600080fd5b5061042f610628366004613a56565b6116e5565b34801561063957600080fd5b506104d8611c8a565b34801561064e57600080fd5b506104d8611c90565b34801561066357600080fd5b5061042f610672366004613a56565b611c96565b34801561068357600080fd5b506104d8612237565b34801561069857600080fd5b5061047661223d565b3480156106ad57600080fd5b5061042f61224c565b3480156106c257600080fd5b506104d86122f1565b3480156106d757600080fd5b506106e06122f7565b6040516104589190613bc0565b3480156106f957600080fd5b506104d8612307565b34801561070e57600080fd5b506104d861230d565b61042f6107253660046138be565b612313565b34801561073657600080fd5b506104d86125f6565b34801561074b57600080fd5b5061042f61075a366004613a56565b6125fc565b34801561076b57600080fd5b5061042f61271c565b34801561078057600080fd5b5061042f61078f3660046138be565b612767565b3480156107a057600080fd5b506104d8612818565b3480156107b557600080fd5b506104d861281e565b3480156107ca57600080fd5b506106e06107d93660046138be565b612824565b3480156107ea57600080fd5b506106e0612839565b3480156107ff57600080fd5b506106e061080e366004613a86565b612842565b34801561081f57600080fd5b506104d8612862565b34801561083457600080fd5b5061042f612868565b34801561084957600080fd5b5061047661293b565b34801561085e57600080fd5b5061042f61086d3660046138be565b61294a565b34801561087e57600080fd5b506104d86129fb565b34801561089357600080fd5b5061042f6108a2366004613a56565b612a01565b3480156108b357600080fd5b5061042f612ab2565b3480156108c857600080fd5b506106e0612c42565b3480156108dd57600080fd5b50610476612c4b565b3480156108f257600080fd5b506104d8612c5a565b34801561090757600080fd5b506104d8612c60565b34801561091c57600080fd5b506106e061092b366004613a86565b612c66565b34801561093c57600080fd5b506104d8612c86565b34801561095157600080fd5b506104d8612c8c565b34801561096657600080fd5b506106e0612c92565b34801561097b57600080fd5b5061042f612c9b565b34801561099057600080fd5b506104d8612d50565b3480156109a557600080fd5b5061042f612d56565b3480156109ba57600080fd5b506104d8612e2b565b3480156109cf57600080fd5b506104d8612e31565b3480156109e457600080fd5b5061042f612e37565b3480156109f957600080fd5b50610476612f17565b348015610a0e57600080fd5b50610476612f26565b348015610a2357600080fd5b50610476612f35565b61042f612f44565b348015610a4057600080fd5b5061042f610a4f366004613a56565b612fb6565b348015610a6057600080fd5b506104d86130a9565b348015610a7557600080fd5b5061042f6130af565b348015610a8a57600080fd5b5061042f610a993660046138be565b61318f565b348015610aaa57600080fd5b5061042f610ab93660046138be565b6131fd565b348015610aca57600080fd5b506104d86132b9565b348015610adf57600080fd5b506104d86133ee565b348015610af457600080fd5b5061042f610b033660046139b5565b6133f4565b60078054610b1590614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4190614af3565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b505050505081565b6008546001600160a01b031681565b69d3c21bcecceda10000008110610bd75760405162461bcd60e51b8152600401610bce90614a1f565b60405180910390fd5b6021546001600160a01b0316610bff5760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b03163314610c295760405162461bcd60e51b8152600401610bce90614793565b6023544211610c4a5760405162461bcd60e51b8152600401610bce906147ca565b6014805460ff19168315151790556015819055610c656134a4565b6014546015546040517fb783746dbd3e6ad3f18ad43c4935b44cfc93621fcbe8ba6dfcadd1853016cb8b92610c9f9260ff90911691613bcb565b60405180910390a15050565b610cb36122f7565b15610cd05760405162461bcd60e51b8152600401610bce906142fb565b6003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610d0490339030908690600401613b9c565b602060405180830381600087803b158015610d1e57600080fd5b505af1158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d56919061390c565b610d7057634e487b7160e01b600052600160045260246000fd5b80600b6000828254610d829190614a85565b90915550610d9090506134d8565b600954600a541115610f74576000620f4240600c54600b54610db29190614adc565b600954600a54610dc29190614adc565b610dcc9190614abd565b610dd69190614a9d565b905081811115610eab57600354604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90610e10908590600401614a61565b600060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b505060048054604051630c41cc2760e41b81526001600160a01b03909116935063c41cc27092508591610e749160079101613c2e565b6000604051808303818588803b158015610e8d57600080fd5b505af1158015610ea1573d6000803e3d6000fd5b5050505050610f72565b600354604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90610edb908490600401614a61565b600060405180830381600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505060048054604051630c41cc2760e41b81526001600160a01b03909116935063c41cc27092508491610f3f9160079101613c2e565b6000604051808303818588803b158015610f5857600080fd5b505af1158015610f6c573d6000803e3d6000fd5b50505050505b505b6005546040516340c10f1960e01b81526001600160a01b03909116906340c10f1990610fa69085908590600401613b69565b600060405180830381600087803b158015610fc057600080fd5b505af1158015610fd4573d6000803e3d6000fd5b50506006546040516340c10f1960e01b81526001600160a01b0390911692506340c10f19915061100a9085908590600401613b69565b600060405180830381600087803b15801561102457600080fd5b505af1158015611038573d6000803e3d6000fd5b50505050816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516110759190614a61565b60405180910390a25050565b600a545b90565b600b5481565b6003546001600160a01b031681565b60095490565b601781815481106110b357600080fd5b6000918252602090912001546001600160a01b0316905081565b6002546040516370a0823160e01b815260009182916001600160a01b03909116906370a0823190611102908690600401613b55565b60206040518083038186803b15801561111a57600080fd5b505afa15801561112e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111529190613a6e565b905060165460646111639190614abd565b81106111735760379150506111b0565b60165461118190600a614abd565b811061119157604b9150506111b0565b60165481106111a457605a9150506111b0565b60649150506111b0565b505b919050565b620f42408411156111d85760405162461bcd60e51b8152600401610bce906142c4565b620f42408311156111fb5760405162461bcd60e51b8152600401610bce906146fd565b620f424082111561121e5760405162461bcd60e51b8152600401610bce90614213565b620f42408111156112415760405162461bcd60e51b8152600401610bce90614092565b6021546001600160a01b03166112695760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b031633146112935760405162461bcd60e51b8152600401610bce90614793565b60235442116112b45760405162461bcd60e51b8152600401610bce906147ca565b600f8490556010839055601182905560128190556112d06134a4565b7fc3483f4013aa896e4b1ec9c52a7236a4cb6d8bdc045b5d0c624118bcc95f7f0c600f5460105460115460125460405161130d9493929190614a6a565b60405180910390a150505050565b6001600160a01b0385166113415760405162461bcd60e51b8152600401610bce90613f29565b6001600160a01b0384166113675760405162461bcd60e51b8152600401610bce90614500565b6001600160a01b03831661138d5760405162461bcd60e51b8152600401610bce90614248565b6001600160a01b0382166113b35760405162461bcd60e51b8152600401610bce90614325565b6001600160a01b0381166113d95760405162461bcd60e51b8152600401610bce90613cdd565b6021546001600160a01b03166114015760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b0316331461142b5760405162461bcd60e51b8152600401610bce90614793565b602354421161144c5760405162461bcd60e51b8152600401610bce906147ca565b600280546001600160a01b03199081166001600160a01b0388811691909117909255600480548216878416179055600580548216868416179055600680548216858416179055600380549091169183169190911790556114aa6134a4565b6006546005546004546003546040516001600160a01b0394851694938416937f67efd883cd93a892367f7b10d02669d27f8ea45fb51eac3f8f4f0601b044c3bf936114fb9390821692911690613b82565b60405180910390a35050505050565b6021546001600160a01b031681565b6115216122f7565b61153d5760405162461bcd60e51b8152600401610bce90613d0b565b6021546001600160a01b03166115655760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b0316331461158f5760405162461bcd60e51b8152600401610bce90614793565b60235442116115b05760405162461bcd60e51b8152600401610bce906147ca565b6115b861357c565b6115c06134a4565b6040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60255460ff1615156001146116125760405162461bcd60e51b8152600401610bce90613ef2565b3360009081526018602052604090205460ff1615156001146116465760405162461bcd60e51b8152600401610bce90613f8f565b6024546000908152601a6020908152604080832033845290915290205460ff16156116835760405162461bcd60e51b8152600401610bce906143d7565b6024546000908152601a602090815260408083203384529091528120805460ff19166001908117909155601d8054919290916116c0908490614a85565b9091555050565b6006546001600160a01b031681565b6028546001600160a01b031681565b6116ed6122f7565b1561170a5760405162461bcd60e51b8152600401610bce906142fb565b6002600154141561172d5760405162461bcd60e51b8152600401610bce906147f4565b600260015533806117505760405162461bcd60e51b8152600401610bce90613dfd565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611781908590600401613b55565b60206040518083038186803b15801561179957600080fd5b505afa1580156117ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d19190613a6e565b6005546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611807908690600401613b55565b60206040518083038186803b15801561181f57600080fd5b505afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118579190613a6e565b6006546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061188d908790600401613b55565b60206040518083038186803b1580156118a557600080fd5b505afa1580156118b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dd9190613a6e565b9050848210156118ff5760405162461bcd60e51b8152600401610bce90614008565b8481101561191f5760405162461bcd60e51b8152600401610bce906146b9565b6003546040516370a0823160e01b815286916001600160a01b0316906370a082319061194f903090600401613b55565b60206040518083038186803b15801561196757600080fd5b505afa15801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f9190613a6e565b10156119bd5760405162461bcd60e51b8152600401610bce90614675565b60006119c8856110cd565b905060006119d46132b9565b90506000620f42406064846119e9858c614abd565b6119f39190614abd565b6119fd9190614a9d565b611a079190614a9d565b90508060136000828254611a1b9190614a85565b9091555060009050611a2d828a614adc565b905080600c6000828254611a419190614a85565b90915550611a4f90506134d8565b60145460ff1615611afc576000606485601554611a6c9190614abd565b611a769190614a9d565b905080881015611a985760405162461bcd60e51b8152600401610bce90614960565b600254604051630852cd8d60e31b81526001600160a01b03909116906342966c6890611ac8908490600401614a61565b600060405180830381600087803b158015611ae257600080fd5b505af1158015611af6573d6000803e3d6000fd5b50505050505b600354604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90611b2c908490600401614a61565b600060405180830381600087803b158015611b4657600080fd5b505af1158015611b5a573d6000803e3d6000fd5b5050600554604051632770a7eb60e21b81526001600160a01b039091169250639dc29fac9150611b90908b908d90600401613b69565b600060405180830381600087803b158015611baa57600080fd5b505af1158015611bbe573d6000803e3d6000fd5b5050600654604051632770a7eb60e21b81526001600160a01b039091169250639dc29fac9150611bf4908b908d90600401613b69565b600060405180830381600087803b158015611c0e57600080fd5b505af1158015611c22573d6000803e3d6000fd5b50611c3a925050506001600160a01b038916826135ed565b876001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051611c739190614a61565b60405180910390a250506001805550505050505050565b601d5481565b60115481565b611c9e6122f7565b15611cbb5760405162461bcd60e51b8152600401610bce906142fb565b3380611cd95760405162461bcd60e51b8152600401610bce90613dfd565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611d0a908590600401613b55565b60206040518083038186803b158015611d2257600080fd5b505afa158015611d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5a9190613a6e565b6005546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611d90908690600401613b55565b60206040518083038186803b158015611da857600080fd5b505afa158015611dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de09190613a6e565b6006546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611e16908790600401613b55565b60206040518083038186803b158015611e2e57600080fd5b505afa158015611e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e669190613a6e565b905084821015611e885760405162461bcd60e51b8152600401610bce90614008565b84811015611ea85760405162461bcd60e51b8152600401610bce906146b9565b6003546040516370a0823160e01b815286916001600160a01b0316906370a0823190611ed8903090600401613b55565b60206040518083038186803b158015611ef057600080fd5b505afa158015611f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f289190613a6e565b1015611f465760405162461bcd60e51b8152600401610bce90614675565b6000611f51856110cd565b90506000611f5d6132b9565b90506000620f4240606484611f72858c614abd565b611f7c9190614abd565b611f869190614a9d565b611f909190614a9d565b90508060136000828254611fa49190614a85565b9091555060009050611fb6828a614adc565b905080600c6000828254611fca9190614a85565b90915550611fd890506134d8565b60145460ff1615612085576000606485601554611ff59190614abd565b611fff9190614a9d565b9050808810156120215760405162461bcd60e51b8152600401610bce90614960565b600254604051630852cd8d60e31b81526001600160a01b03909116906342966c6890612051908490600401614a61565b600060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b50505050505b600554604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906120b7908b908d90600401613b69565b600060405180830381600087803b1580156120d157600080fd5b505af11580156120e5573d6000803e3d6000fd5b5050600654604051632770a7eb60e21b81526001600160a01b039091169250639dc29fac915061211b908b908d90600401613b69565b600060405180830381600087803b15801561213557600080fd5b505af1158015612149573d6000803e3d6000fd5b505060035460405163a9059cbb60e01b81526001600160a01b03909116925063a9059cbb915061217f908b908590600401613b69565b602060405180830381600087803b15801561219957600080fd5b505af11580156121ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d1919061390c565b6121eb57634e487b7160e01b600052600160045260246000fd5b876001600160a01b03167f83f3c411e75609c0c5a413fdfb4b4f95dba7f6632cf5f51263d98b1a2baff1be826040516122249190614a61565b60405180910390a2505050505050505050565b60235481565b6004546001600160a01b031681565b6027546001600160a01b0316156122755760405162461bcd60e51b8152600401610bce90613e75565b3360009081526018602052604090205460ff1615156001146122a95760405162461bcd60e51b8152600401610bce90614632565b601b54601d5410156122cd5760405162461bcd60e51b8152600401610bce90614492565b602854602780546001600160a01b0319166001600160a01b03909216919091179055565b600a5481565b600054600160a01b900460ff1690565b60165481565b60135481565b61231b6122f7565b156123385760405162461bcd60e51b8152600401610bce906142fb565b34600b600082825461234a9190614a85565b9091555061235890506134d8565b600954600a543491101561248c576000620f4240600c54600b5461237c9190614adc565b600954600a5461238c9190614adc565b6123969190614abd565b6123a09190614a9d565b9050348111156124175760048054604051630c41cc2760e41b81526001600160a01b039091169163c41cc2709134916123dc9160079101613c2e565b6000604051808303818588803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b50505050506000915061248a565b60048054604051630c41cc2760e41b81526001600160a01b039091169163c41cc2709184916124499160079101613c2e565b6000604051808303818588803b15801561246257600080fd5b505af1158015612476573d6000803e3d6000fd5b505050505080346124879190614adc565b91505b505b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b50506005546040516340c10f1960e01b81526001600160a01b0390911693506340c10f199250612527915085903490600401613b69565b600060405180830381600087803b15801561254157600080fd5b505af1158015612555573d6000803e3d6000fd5b50506006546040516340c10f1960e01b81526001600160a01b0390911692506340c10f19915061258b9085903490600401613b69565b600060405180830381600087803b1580156125a557600080fd5b505af11580156125b9573d6000803e3d6000fd5b50505050816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885346040516110759190614a61565b601e5481565b600c54600b5461260c9190614adc565b811061262a5760405162461bcd60e51b8152600401610bce9061457b565b80600d546126389190614a85565b600c54600b546126489190614adc565b10156126665760405162461bcd60e51b8152600401610bce90613da7565b6027546001600160a01b031661268e5760405162461bcd60e51b8152600401610bce90614734565b6027546001600160a01b031633146126b85760405162461bcd60e51b8152600401610bce906144c9565b80600d60008282546126ca9190614a85565b909155506126d890506134d8565b6126e061368e565b7fe2ea5ca406db1bf17a168c6c5f759b2df716368dae28b9fa7aefc32e7b5588ae600d546040516127119190614a61565b60405180910390a150565b6127246136c2565b6001600160a01b031661273561293b565b6001600160a01b03161461275b5760405162461bcd60e51b8152600401610bce906145c6565b61276560006136c6565b565b6001600160a01b03811661278d5760405162461bcd60e51b8152600401610bce9061427f565b60255460ff16156127b05760405162461bcd60e51b8152600401610bce90614764565b3360009081526018602052604090205460ff1615156001146127e45760405162461bcd60e51b8152600401610bce90613d39565b6025805460ff1916600117905542602655602880546001600160a01b039092166001600160a01b0319909216919091179055565b60245481565b601c5481565b60186020526000908152604090205460ff1681565b60145460ff1681565b601a60209081526000928352604080842090915290825290205460ff1681565b600c5481565b6128706122f7565b1561288d5760405162461bcd60e51b8152600401610bce906142fb565b6021546001600160a01b03166128b55760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b031633146128df5760405162461bcd60e51b8152600401610bce90614793565b60235442116129005760405162461bcd60e51b8152600401610bce906147ca565b612908613716565b6129106134a4565b6040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6000546001600160a01b031690565b6001600160a01b0381166129705760405162461bcd60e51b8152600401610bce90614537565b601f5460ff16156129935760405162461bcd60e51b8152600401610bce90614764565b3360009081526018602052604090205460ff1615156001146129c75760405162461bcd60e51b8152600401610bce906149e8565b601f805460ff1916600117905542602055602280546001600160a01b039092166001600160a01b0319909216919091179055565b600f5481565b6021546001600160a01b0316612a295760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b03163314612a535760405162461bcd60e51b8152600401610bce90614793565b6023544211612a745760405162461bcd60e51b8152600401610bce906147ca565b6016819055612a816134a4565b7f42b76f3ce9be6c7a13da17bb65edba6670457ef07256bc89b3f99fe0a4aef15d6016546040516127119190614a61565b612aba6122f7565b15612ad75760405162461bcd60e51b8152600401610bce906142fb565b6008546001600160a01b0316612aff5760405162461bcd60e51b8152600401610bce90614393565b6021546001600160a01b0316612b275760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b03163314612b515760405162461bcd60e51b8152600401610bce90614793565b6023544211612b725760405162461bcd60e51b8152600401610bce906147ca565b6000601354905080600c6000828254612b8b9190614a85565b90915550506000601355612b9d6134a4565b60035460085460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92612bd3929116908590600401613b69565b602060405180830381600087803b158015612bed57600080fd5b505af1158015612c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c25919061390c565b612c3f57634e487b7160e01b600052600160045260246000fd5b50565b60255460ff1681565b6022546001600160a01b031681565b600d5481565b60105481565b601960209081526000928352604080842090915290825290205460ff1681565b60155481565b60095481565b601f5460ff1681565b6021546001600160a01b031615612cc45760405162461bcd60e51b8152600401610bce906141dc565b3360009081526018602052604090205460ff161515600114612cf85760405162461bcd60e51b8152600401610bce906149a6565b601b54601c541015612d1c5760405162461bcd60e51b8152600401610bce90614492565b602254602180546001600160a01b0319166001600160a01b03909216919091179055612d4b426202a300614a85565b602355565b601b5481565b601f5460ff161515600114612d7d5760405162461bcd60e51b8152600401610bce90613ef2565b3360009081526018602052604090205460ff161515600114612db15760405162461bcd60e51b8152600401610bce9061482b565b601e54600090815260196020908152604080832033845290915290205460ff1615612dee5760405162461bcd60e51b8152600401610bce906143d7565b601e5460009081526019602090815260408083203384529091528120805460ff19166001908117909155601c8054919290916116c0908490614a85565b600e5481565b60125481565b60255460ff161515600114612e5e5760405162461bcd60e51b8152600401610bce906140d6565b602654612e6e9062015180614a85565b4211612e8c5760405162461bcd60e51b8152600401610bce90614862565b601b54601d5410612eaf5760405162461bcd60e51b8152600401610bce90613e3e565b3360009081526018602052604090205460ff161515600114612ee35760405162461bcd60e51b8152600401610bce9061435c565b6025805460ff19169055602880546001600160a01b03191690556000601d81905560248054600192906116c0908490614a85565b6002546001600160a01b031681565b6027546001600160a01b031681565b6005546001600160a01b031681565b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f9457600080fd5b505af1158015612fa8573d6000803e3d6000fd5b505050505061276534613777565b60008111612fd65760405162461bcd60e51b8152600401610bce90613fd1565b620f42408110612ff85760405162461bcd60e51b8152600401610bce906145fb565b6021546001600160a01b03166130205760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b0316331461304a5760405162461bcd60e51b8152600401610bce90614793565b602354421161306b5760405162461bcd60e51b8152600401610bce906147ca565b600a8190556130786134a4565b7f915463aa70fb5748e1ec1f8f517c6510a34badbcc0bff60f1362f37844de0289600a546040516127119190614a61565b60265481565b601f5460ff1615156001146130d65760405162461bcd60e51b8152600401610bce906140d6565b6020546130e69062015180614a85565b42116131045760405162461bcd60e51b8152600401610bce90614862565b601b54601c54106131275760405162461bcd60e51b8152600401610bce90613caf565b3360009081526018602052604090205460ff16151560011461315b5760405162461bcd60e51b8152600401610bce90613d70565b601f805460ff19169055602280546001600160a01b03191690556000601c819055601e8054600192906116c0908490614a85565b6131976136c2565b6001600160a01b03166131a861293b565b6001600160a01b0316146131ce5760405162461bcd60e51b8152600401610bce906145c6565b6001600160a01b0381166131f45760405162461bcd60e51b8152600401610bce90613eac565b612c3f816136c6565b6001600160a01b0381166132235760405162461bcd60e51b8152600401610bce9061440e565b6021546001600160a01b031661324b5760405162461bcd60e51b8152600401610bce90613f60565b6021546001600160a01b031633146132755760405162461bcd60e51b8152600401610bce90614793565b60235442116132965760405162461bcd60e51b8152600401610bce906147ca565b600880546001600160a01b0319166001600160a01b038316179055612c3f6134a4565b6000620f4240600a54106132df5760405162461bcd60e51b8152600401610bce90614162565b6000600a54620f42406132f29190614adc565b60095461330290620f4240614adc565b61330f90620f4240614abd565b6133199190614a9d565b90506000620f424082101561333c5761333582620f4240614adc565b9050613340565b5060005b601054811161337b57600f54620f42406011548361335e9190614abd565b6133689190614a9d565b6133729190614a85565b92505050611085565b6000600f54620f42406011546010546133949190614abd565b61339e9190614a9d565b6133a89190614a85565b90506000601054836133ba9190614adc565b905081620f4240601254836133cf9190614abd565b6133d99190614a9d565b6133e39190614a85565b945050505050611085565b60205481565b6027546001600160a01b031661341c5760405162461bcd60e51b8152600401610bce90614734565b6027546001600160a01b031633146134465760405162461bcd60e51b8152600401610bce906144c9565b8051613459906007906020840190613825565b5061346261368e565b60076040516134719190613ae6565b604051908190038120907fd60754995bd21fff8414ca649f5416dabab89de2fc5b1656a36d500537d03c9f90600090a250565b601f805460ff19169055602180546001600160a01b03191690556000601c819055601e8054600192906116c0908490614a85565b6000600b54116134fa5760405162461bcd60e51b8152600401610bce9061404c565b600c54600b54101561351e5760405162461bcd60e51b8152600401610bce90614902565b6000600c54600b546135309190614adc565b111561357557600c54600b546135469190614adc565b600e54600d546135569190614adc565b61356390620f4240614abd565b61356d9190614a9d565b600955612765565b6000600955565b6135846122f7565b6135a05760405162461bcd60e51b8152600401610bce90613d0b565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6135d66136c2565b6040516135e39190613b55565b60405180910390a1565b8047101561360d5760405162461bcd60e51b8152600401610bce906141a5565b6000826001600160a01b03168260405161362690611085565b60006040518083038185875af1925050503d8060008114613663576040519150601f19603f3d011682016040523d82523d6000602084013e613668565b606091505b50509050806136895760405162461bcd60e51b8152600401610bce90614105565b505050565b6025805460ff19169055602780546001600160a01b03191690556000601d81905560248054600192906116c0908490614a85565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61371e6122f7565b1561373b5760405162461bcd60e51b8152600401610bce906142fb565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586135d66136c2565b600c54600b546137879190614adc565b81106137a55760405162461bcd60e51b8152600401610bce90614445565b80600e546137b39190614a85565b600d5410156137d45760405162461bcd60e51b8152600401610bce906148a5565b80600e60008282546137e69190614a85565b909155506137f490506134d8565b7fe2cc5b53c2374a3066ef7de34f6d797a3b6384ec8bb83e34ab6d5abd478f37c9600e546040516127119190614a61565b82805461383190614af3565b90600052602060002090601f0160209004810192826138535760008555613899565b82601f1061386c57805160ff1916838001178555613899565b82800160010185558215613899579182015b8281111561389957825182559160200191906001019061387e565b506138a59291506138a9565b5090565b5b808211156138a557600081556001016138aa565b6000602082840312156138cf578081fd5b81356138da81614b54565b9392505050565b600080604083850312156138f3578081fd5b82356138fe81614b54565b946020939093013593505050565b60006020828403121561391d578081fd5b81516138da81614b69565b6000806040838503121561393a578182fd5b82356138fe81614b69565b600080600080600060a0868803121561395c578081fd5b853561396781614b54565b9450602086013561397781614b54565b9350604086013561398781614b54565b9250606086013561399781614b54565b915060808601356139a781614b54565b809150509295509295909350565b600060208083850312156139c7578182fd5b823567ffffffffffffffff808211156139de578384fd5b818501915085601f8301126139f1578384fd5b813581811115613a0357613a03614b3e565b604051601f8201601f1916810185018381118282101715613a2657613a26614b3e565b6040528181528382018501881015613a3c578586fd5b818585018683013790810190930193909352509392505050565b600060208284031215613a67578081fd5b5035919050565b600060208284031215613a7f578081fd5b5051919050565b60008060408385031215613a98578182fd5b823591506020830135613aaa81614b54565b809150509250929050565b60008060008060808587031215613aca578384fd5b5050823594602084013594506040840135936060013592509050565b6000808354613af481614af3565b60018281168015613b0c5760018114613b1d57613b49565b60ff19841687528287019450613b49565b8786526020808720875b85811015613b405781548a820152908401908201613b27565b50505082870194505b50929695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b901515815260200190565b9115158252602082015260400190565b6000602080835283518082850152825b81811015613c0757858101830151858201604001528201613beb565b81811115613c185783604083870101525b50601f01601f1916929092016040019392505050565b60006020808352818454613c4181614af3565b80848701526040600180841660008114613c625760018114613c7657613ca1565b60ff19851689840152606089019550613ca1565b898852868820885b85811015613c995781548b8201860152908301908801613c7e565b8a0184019650505b509398975050505050505050565b602080825260149082015273151a19481cd95d081a5cc818dbdb999a5c9b595960621b604082015260600190565b602080825260149082015273496e76616c6964205743524f204164647265737360601b604082015260600190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252601d908201527f6f6e6c79207369676e65722063616e207375626d697420757064617465000000604082015260600190565b60208082526018908201527f6f6e6c79207369676e65722063616e2064726f70207365740000000000000000604082015260600190565b60208082526036908201527f6465706f7369746564416d6f756e742073686f756c64206265206c6172676572604082015275081d1a185b8819195b1959d85d1a5bdb905b5bdd5b9d60521b606082015260800190565b60208082526021908201527f4572726f723a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526017908201527f5468652075706461746520697320636f6e6669726d6564000000000000000000604082015260600190565b60208082526019908201527f7570646174657220686173206265656e2072656c656173656400000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526018908201527f6e6f207375626d697373696f6e20746f20636f6e6669726d0000000000000000604082015260600190565b60208082526018908201527f496e76616c69642070616e546f6b656e20416464726573730000000000000000604082015260600190565b602080825260159082015274139bc81cd95d1d195c881a5cc8185cdcda59db9959605a1b604082015260600190565b60208082526022908201527f6f6e6c79207369676e65722063616e20636f6e6669726d207468652075706461604082015261746560f01b606082015260800190565b6020808252601d908201527f526174696f2073686f756c64206265206c6172676572207468616e2030000000604082015260600190565b60208082526024908201527f7074546f6b656e3a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526026908201527f6465706f7369746564416d6f756e742073686f756c64206265206c617267652060408201526507468616e20360d41b606082015260800190565b60208082526024908201527f6a756d704d756c7469706c652073686f756c64206265206c657373207468616e6040820152631018b29b60e11b606082015260800190565b60208082526015908201527406e6f207375626d697373696f6e20746f2064726f7605c1b604082015260600190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526023908201527f546172676574526174696f2073686f756c64206265206c657373207468616e2060408201526218b29b60e91b606082015260800190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b60208082526018908201527f73657474657220686173206265656e2072656c65617365640000000000000000604082015260600190565b6020808252818101527f4d756c7469706c652073686f756c64206265206c657373207468616e20316536604082015260600190565b60208082526017908201527f496e76616c6964207074546f6b656e2041646472657373000000000000000000604082015260600190565b60208082526025908201527f4572726f723a207a65726f20616464726573732063616e6e6f742062652075706040820152643230ba32b960d91b606082015260800190565b6020808252601f908201527f466565426173652073686f756c64206265206c657373207468616e2031653600604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526017908201527f496e76616c6964207974546f6b656e2041646472657373000000000000000000604082015260600190565b6020808252601b908201527f6f6e6c79207369676e65722063616e2064726f70207570646174650000000000604082015260600190565b60208082526024908201527f4572726f723a20636c61696d2066656520746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526018908201527f746865207369676e65722068617320636f6e6669726d65640000000000000000604082015260600190565b6020808252601c908201527f666565546f20616464726573732063616e6e6f74206265207a65726f00000000604082015260600190565b6020808252602d908201527f556e64656c65676174696f6e2073686f756c64206265206c657373207468616e60408201526c081d1bdd185b11195c1bdcda5d609a1b606082015260800190565b6020808252601c908201527f436f6e6669726d6174696f6e7320617265206e6f7420656e6f75676800000000604082015260600190565b6020808252601f908201527f4f6e6c7920757064617465722063616e2073657420706172616d657465727300604082015260600190565b60208082526019908201527f496e76616c69642063726f427269646765204164647265737300000000000000604082015260600190565b60208082526024908201527f4572726f723a207a65726f20616464726573732063616e6e6f742062652073656040820152633a3a32b960e11b606082015260800190565b6020808252602b908201527f44656c65676174696f6e2073686f756c64206265206c657373207468616e207460408201526a1bdd185b11195c1bdcda5d60aa1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601d908201527f526174696f2073686f756c64206265206c657373207468616e20316536000000604082015260600190565b60208082526023908201527f6f6e6c79207369676e65722063616e2072656c656173652074686520757064616040820152623a32b960e91b606082015260800190565b60208082526024908201527f4275726e20616d6f756e74206578636565647320636f6e74726163742062616c604082015263616e636560e01b606082015260800190565b60208082526024908201527f7974546f6b656e3a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252601f908201527f4665654b696e6b2073686f756c64206265206c657373207468616e2031653600604082015260600190565b602080825260169082015275139bc81d5c19185d195c881a5cc8185cdcda59db995960521b604082015260600190565b6020808252601590820152747375626d697373696f6e20746f20636f6e6669726d60581b604082015260600190565b6020808252601e908201527f4f6e6c79207365747465722063616e2073657420706172616d65746572730000604082015260600190565b60208082526010908201526f139bdd081c9958591e481d1bc81cd95d60821b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601f908201527f6f6e6c79207369676e65722063616e20636f6e6669726d207468652073657400604082015260600190565b60208082526023908201527f7375626d697373696f6e206973207374696c6c20696e20636f6e6669726d617460408201526234b7b760e91b606082015260800190565b60208082526039908201527f64656c65676174696f6e416d6f756e742073686f756c64206265206c6172676560408201527f72207468616e20756e64656c65676174696f6e416d6f756e7400000000000000606082015260800190565b602080825260409082018190527f6465706f7369746564416d6f756e742073686f756c64206265206c6172676520908201527f7468616e206f7220657175616c20746f2077697468647261776e416d6f756e74606082015260800190565b60208082526026908201527f50414e20546f6b656e3a206275726e20616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526022908201527f6f6e6c79207369676e65722063616e2072656c6561736520746865207365747460408201526132b960f11b606082015260800190565b6020808252601a908201527f6f6e6c79207369676e65722063616e207375626d697420736574000000000000604082015260600190565b60208082526022908201527f416d6f756e742073686f756c64206265206c657373207468616e20316536205060408201526120a760f11b606082015260800190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60008219821115614a9857614a98614b28565b500190565b600082614ab857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614ad757614ad7614b28565b500290565b600082821015614aee57614aee614b28565b500390565b600281046001821680614b0757607f821691505b602082108114156111ae57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612c3f57600080fd5b8015158114612c3f57600080fdfea2646970667358221220b28595e7d2af68d37f1390fdd6d93ae02577e3658350d8fb7a88d60bf2a9927064736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000da6c746e8a14efe6e0a031f5d632bd2b0adc28be0000000000000000000000006b1b50c2223eb31e0d4683b046ea9c6cb0d0ea4f00000000000000000000000051f2ab325a81b0eb36b0814ca2fa8a23cb63d7310000000000000000000000003d329eb0ed1f460b4a52c9f70c20a1a5861f74e40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2300000000000000000000000000000000000000000000000000000000000b71b000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002a63726f316c337765796834666b6e65796561746468366a7770307530743471686132327963706e7137720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000004166b61731797396e6013eebc3a0d8c5c3abe7900000000000000000000000003db1f4407b0d62d06db63283b63e7f632f92c92c000000000000000000000000a3299d7a7b325888c9f356242e3efdf166a3072a0000000000000000000000005a4981b2174f6166c41b57d2538556dc8c1c228900000000000000000000000031764969b7f866d194e8adbe16a2eabc2e9d7d9d000000000000000000000000672c68c6cdb9ac889c9646c81bbdc18c651ce3f80000000000000000000000001913c7c4381a14474e469462d634c452430ddf9d
-----Decoded View---------------
Arg [0] : _delegationAddress (string): cro1l3weyh4fkneyeatdh6jwp0u0t4qha22ycpnq7r
Arg [1] : _panToken (address): 0xDa6c746E8a14EFE6E0A031F5d632bd2B0adC28Be
Arg [2] : _croBridge (address): 0x6b1b50c2223eb31E0d4683b046ea9C6CB0D0ea4F
Arg [3] : _ptToken (address): 0x51f2AB325A81b0Eb36B0814Ca2fA8A23CB63d731
Arg [4] : _ytToken (address): 0x3D329Eb0eD1f460b4A52c9F70C20a1A5861f74E4
Arg [5] : _wcro (address): 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23
Arg [6] : _targetRatio (uint256): 750000
Arg [7] : _signers (address[]): 0x4166b61731797396E6013eEBc3A0D8C5c3ABE790,0x3Db1f4407b0d62D06dB63283b63E7F632F92c92c,0xA3299d7a7b325888c9F356242e3EfDf166A3072A,0x5A4981B2174f6166C41B57D2538556dC8C1c2289,0x31764969B7F866d194e8aDBe16a2EABc2E9d7D9d,0x672c68c6cdb9Ac889C9646c81bbDC18c651cE3f8,0x1913C7c4381a14474E469462D634c452430ddf9d
Arg [8] : _numConfirmationsRequired (uint256): 4
-----Encoded View---------------
20 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 000000000000000000000000da6c746e8a14efe6e0a031f5d632bd2b0adc28be
Arg [2] : 0000000000000000000000006b1b50c2223eb31e0d4683b046ea9c6cb0d0ea4f
Arg [3] : 00000000000000000000000051f2ab325a81b0eb36b0814ca2fa8a23cb63d731
Arg [4] : 0000000000000000000000003d329eb0ed1f460b4a52c9f70c20a1a5861f74e4
Arg [5] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Arg [6] : 00000000000000000000000000000000000000000000000000000000000b71b0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 000000000000000000000000000000000000000000000000000000000000002a
Arg [10] : 63726f316c337765796834666b6e65796561746468366a777030753074347168
Arg [11] : 6132327963706e71377200000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [13] : 0000000000000000000000004166b61731797396e6013eebc3a0d8c5c3abe790
Arg [14] : 0000000000000000000000003db1f4407b0d62d06db63283b63e7f632f92c92c
Arg [15] : 000000000000000000000000a3299d7a7b325888c9f356242e3efdf166a3072a
Arg [16] : 0000000000000000000000005a4981b2174f6166c41b57d2538556dc8c1c2289
Arg [17] : 00000000000000000000000031764969b7f866d194e8adbe16a2eabc2e9d7d9d
Arg [18] : 000000000000000000000000672c68c6cdb9ac889c9646c81bbdc18c651ce3f8
Arg [19] : 0000000000000000000000001913c7c4381a14474e469462d634c452430ddf9d
Deployed Bytecode Sourcemap
37378:22642:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42145:4;;-1:-1:-1;;;;;42145:4:0;42123:10;:27;42115:36;;;;;;37378:22642;;;;;37624:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37664:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;45822:624::-;;;;;;;;;;-1:-1:-1;45822:624:0;;;;;:::i;:::-;;:::i;51733:852::-;;;;;;;;;;-1:-1:-1;51733:852:0;;;;;:::i;:::-;;:::i;42331:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37765:30::-;;;;;;;;;;;;;:::i;37514:17::-;;;;;;;;;;;;;:::i;42222:101::-;;;;;;;;;;;;;:::i;38216:25::-;;;;;;;;;;-1:-1:-1;38216:25:0;;;;;:::i;:::-;;:::i;42432:415::-;;;;;;;;;;-1:-1:-1;42432:415:0;;;;;:::i;:::-;;:::i;46997:969::-;;;;;;;;;;-1:-1:-1;46997:969:0;;;;;:::i;:::-;;:::i;43615:1112::-;;;;;;;;;;-1:-1:-1;43615:1112:0;;;;;:::i;:::-;;:::i;38880:21::-;;;;;;;;;;;;;:::i;55813:443::-;;;;;;;;;;;;;:::i;58877:385::-;;;;;;;;;;;;;:::i;37597:18::-;;;;;;;;;;;;;:::i;39393:31::-;;;;;;;;;;;;;:::i;52593:1399::-;;;;;;;;;;-1:-1:-1;52593:1399:0;;;;;:::i;:::-;;:::i;38601:34::-;;;;;;;;;;;;;:::i;37977:23::-;;;;;;;;;;;;;:::i;54000:1357::-;;;;;;;;;;-1:-1:-1;54000:1357:0;;;;;:::i;:::-;;:::i;39025:28::-;;;;;;;;;;;;;:::i;37538:27::-;;;;;;;;;;;;;:::i;59671:338::-;;;;;;;;;;;;;:::i;37730:26::-;;;;;;;;;;;;;:::i;14050:86::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38144:33::-;;;;;;;;;;;;;:::i;38041:24::-;;;;;;;;;;;;;:::i;50846:879::-;;;;;;:::i;:::-;;:::i;38691:24::-;;;;;;;;;;;;;:::i;49122:739::-;;;;;;;;;;-1:-1:-1;49122:739:0;;;;;:::i;:::-;;:::i;17002:103::-;;;;;;;;;;;;;:::i;58081:409::-;;;;;;;;;;-1:-1:-1;58081:409:0;;;;;:::i;:::-;;:::i;39114:22::-;;;;;;;;;;;;;:::i;38522:31::-;;;;;;;;;;;;;:::i;38248:40::-;;;;;;;;;;-1:-1:-1;38248:40:0;;;;;:::i;:::-;;:::i;38078:23::-;;;;;;;;;;;;;:::i;38368:69::-;;;;;;;;;;-1:-1:-1;38368:69:0;;;;;:::i;:::-;;:::i;37802:30::-;;;;;;;;;;;;;:::i;55365:440::-;;;;;;;;;;;;;:::i;16351:87::-;;;;;;;;;;;;;:::i;57684:389::-;;;;;;;;;;-1:-1:-1;57684:389:0;;;;;:::i;:::-;;:::i;37919:22::-;;;;;;;;;;;;;:::i;46454:535::-;;;;;;;;;;-1:-1:-1;46454:535:0;;;;;:::i;:::-;;:::i;48488:626::-;;;;;;;;;;;;;:::i;39183:28::-;;;;;;;;;;;;;:::i;38948:30::-;;;;;;;;;;;;;:::i;37839:31::-;;;;;;;;;;;;;:::i;37948:22::-;;;;;;;;;;;;;:::i;38295:66::-;;;;;;;;;;-1:-1:-1;38295:66:0;;;;;:::i;:::-;;:::i;38108:27::-;;;;;;;;;;;;;:::i;37693:30::-;;;;;;;;;;;;;:::i;38754:25::-;;;;;;;;;;;;;:::i;59270:393::-;;;;;;;;;;;;;:::i;38446:39::-;;;;;;;;;;;;;:::i;58498:371::-;;;;;;;;;;;;;:::i;37877:33::-;;;;;;;;;;;;;:::i;38007:27::-;;;;;;;;;;;;;:::i;57150:526::-;;;;;;;;;;;;;:::i;37482:25::-;;;;;;;;;;;;;:::i;39321:22::-;;;;;;;;;;;;;:::i;37572:18::-;;;;;;;;;;;;;:::i;41938:131::-;;;:::i;44735:615::-;;;;;;;;;;-1:-1:-1;44735:615:0;;;;;:::i;:::-;;:::i;39248:36::-;;;;;;;;;;;;;:::i;56641:501::-;;;;;;;;;;;;;:::i;17260:201::-;;;;;;;;;;-1:-1:-1;17260:201:0;;;;;:::i;:::-;;:::i;47974:506::-;;;;;;;;;;-1:-1:-1;47974:506:0;;;;;:::i;:::-;;:::i;42855:752::-;;;;;;;;;;;;;:::i;38813:33::-;;;;;;;;;;;;;:::i;45358:456::-;;;;;;;;;;-1:-1:-1;45358:456:0;;;;;:::i;:::-;;:::i;37624:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37664:20::-;;;-1:-1:-1;;;;;37664:20:0;;:::o;45822:624::-;45924:4;45908:13;:20;45900:67;;;;-1:-1:-1;;;45900:67:0;;;;;;;:::i;:::-;;;;;;;;;45988:6;;-1:-1:-1;;;;;45988:6:0;45980:54;;;;-1:-1:-1;;;45980:54:0;;;;;;;:::i;:::-;46087:6;;-1:-1:-1;;;;;46087:6:0;46073:10;:20;46065:63;;;;-1:-1:-1;;;46065:63:0;;;;;;;:::i;:::-;46176:13;;46158:15;:31;46150:60;;;;-1:-1:-1;;;46150:60:0;;;;;;;:::i;:::-;46237:8;:20;;-1:-1:-1;;46237:20:0;;;;;;;46268:12;:28;;;46309:11;:9;:11::i;:::-;46415:8;;46425:12;;46405:33;;;;;;46415:8;;;;;46405:33;:::i;:::-;;;;;;;;45822:624;;:::o;51733:852::-;14376:8;:6;:8::i;:::-;14375:9;14367:38;;;;-1:-1:-1;;;14367:38:0;;;;;;;:::i;:::-;51823:4:::1;::::0;:52:::1;::::0;-1:-1:-1;;;51823:52:0;;-1:-1:-1;;;;;51823:4:0;;::::1;::::0;:17:::1;::::0;:52:::1;::::0;51841:10:::1;::::0;51861:4:::1;::::0;51868:6;;51823:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51816:60;;-1:-1:-1::0;;;51816:60:0::1;;;;;;;;;51906:6;51887:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;51925:24:0::1;::::0;-1:-1:-1;51925:22:0::1;:24::i;:::-;51978:15;;51966:11;;:27;51962:511;;;52010:20;52103:3;52084:15;;52068;;:31;;;;:::i;:::-;52048:15;;52034:11;;:29;;;;:::i;:::-;52033:67;;;;:::i;:::-;:73;;;;:::i;:::-;52010:96;;52140:6;52125:12;:21;52121:341;;;52167:4;::::0;:21:::1;::::0;-1:-1:-1;;;52167:21:0;;-1:-1:-1;;;;;52167:4:0;;::::1;::::0;:13:::1;::::0;:21:::1;::::0;52181:6;;52167:21:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;52207:9:0::1;::::0;;:67:::1;::::0;-1:-1:-1;;;52207:67:0;;-1:-1:-1;;;;;52207:9:0;;::::1;::::0;-1:-1:-1;52207:32:0::1;::::0;-1:-1:-1;52248:6:0;;52207:67:::1;::::0;52256:17:::1;::::0;52207:67:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;52121:341;;;52328:4;::::0;:27:::1;::::0;-1:-1:-1;;;52328:27:0;;-1:-1:-1;;;;;52328:4:0;;::::1;::::0;:13:::1;::::0;:27:::1;::::0;52342:12;;52328:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;52374:9:0::1;::::0;;:72:::1;::::0;-1:-1:-1;;;52374:72:0;;-1:-1:-1;;;;;52374:9:0;;::::1;::::0;-1:-1:-1;52374:32:0::1;::::0;-1:-1:-1;52414:12:0;;52374:72:::1;::::0;52428:17:::1;::::0;52374:72:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;52121:341;51962:511;;52483:7;::::0;:25:::1;::::0;-1:-1:-1;;;52483:25:0;;-1:-1:-1;;;;;52483:7:0;;::::1;::::0;:12:::1;::::0;:25:::1;::::0;52496:3;;52501:6;;52483:25:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;52519:7:0::1;::::0;:25:::1;::::0;-1:-1:-1;;;52519:25:0;;-1:-1:-1;;;;;52519:7:0;;::::1;::::0;-1:-1:-1;52519:12:0::1;::::0;-1:-1:-1;52519:25:0::1;::::0;52532:3;;52537:6;;52519:25:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52565:3;-1:-1:-1::0;;;;;52560:17:0::1;;52570:6;52560:17;;;;;;:::i;:::-;;;;;;;;51733:852:::0;;:::o;42331:93::-;42405:11;;42331:93;;:::o;37765:30::-;;;;:::o;37514:17::-;;;-1:-1:-1;;;;;37514:17:0;;:::o;42222:101::-;42300:15;;42222:101;:::o;38216:25::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38216:25:0;;-1:-1:-1;38216:25:0;:::o;42432:415::-;42533:8;;:24;;-1:-1:-1;;;42533:24:0;;42492:7;;;;-1:-1:-1;;;;;42533:8:0;;;;:18;;:24;;42552:4;;42533:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42512:45;;42596:18;;42592:3;:22;;;;:::i;:::-;42577:10;:38;42568:271;;42637:2;42630:9;;;;;42568:271;42677:18;;42674:21;;:2;:21;:::i;:::-;42659:10;:37;42655:184;;42718:2;42711:9;;;;;42655:184;42758:18;;42740:10;:36;42736:103;;42798:2;42791:9;;;;;42736:103;42836:3;42829:10;;;;;42736:103;42432:415;;;;;:::o;46997:969::-;47140:3;47123:8;:20;;47115:64;;;;-1:-1:-1;;;47115:64:0;;;;;;;:::i;:::-;47215:3;47198:8;:20;;47190:64;;;;-1:-1:-1;;;47190:64:0;;;;;;;:::i;:::-;47290:3;47273:9;:20;;47265:65;;;;-1:-1:-1;;;47265:65:0;;;;;;;:::i;:::-;47366:3;47349:13;:20;;47341:69;;;;-1:-1:-1;;;47341:69:0;;;;;;;:::i;:::-;47431:6;;-1:-1:-1;;;;;47431:6:0;47423:54;;;;-1:-1:-1;;;47423:54:0;;;;;;;:::i;:::-;47530:6;;-1:-1:-1;;;;;47530:6:0;47516:10;:20;47508:63;;;;-1:-1:-1;;;47508:63:0;;;;;;;:::i;:::-;47619:13;;47601:15;:31;47593:60;;;;-1:-1:-1;;;47593:60:0;;;;;;;:::i;:::-;47680:7;:18;;;47709:7;:18;;;47738:8;:20;;;47769:12;:28;;;47810:11;:9;:11::i;:::-;47906:52;47917:7;;47926;;47935:8;;47945:12;;47906:52;;;;;;;;;:::i;:::-;;;;;;;;46997:969;;;;:::o;43615:1112::-;-1:-1:-1;;;;;43746:33:0;;43738:70;;;;-1:-1:-1;;;43738:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43827:33:0;;43819:71;;;;-1:-1:-1;;;43819:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43909:33:0;;43901:69;;;;-1:-1:-1;;;43901:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43989:33:0;;43981:69;;;;-1:-1:-1;;;43981:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44069:33:0;;44061:66;;;;-1:-1:-1;;;44061:66:0;;;;;;;:::i;:::-;44148:6;;-1:-1:-1;;;;;44148:6:0;44140:54;;;;-1:-1:-1;;;44140:54:0;;;;;;;:::i;:::-;44247:6;;-1:-1:-1;;;;;44247:6:0;44233:10;:20;44225:63;;;;-1:-1:-1;;;44225:63:0;;;;;;;:::i;:::-;44336:13;;44318:15;:31;44310:60;;;;-1:-1:-1;;;44310:60:0;;;;;;;:::i;:::-;44397:8;:20;;-1:-1:-1;;;;;;44397:20:0;;;-1:-1:-1;;;;;44397:20:0;;;;;;;;;;44428:9;:22;;;;;;;;;;44461:7;:18;;;;;;;;;;44490:7;:18;;;;;;;;;;44519:4;:12;;;;;;;;;;;;;;44544:11;:9;:11::i;:::-;44695:7;;44677;;44657:9;;44713:4;;44640:79;;-1:-1:-1;;;;;44695:7:0;;;;44677;;;;44640:79;;;;44657:9;;;;44713:4;;;44640:79;:::i;:::-;;;;;;;;43615:1112;;;;;:::o;38880:21::-;;;-1:-1:-1;;;;;38880:21:0;;:::o;55813:443::-;14653:8;:6;:8::i;:::-;14645:41;;;;-1:-1:-1;;;14645:41:0;;;;;;;:::i;:::-;55871:6:::1;::::0;-1:-1:-1;;;;;55871:6:0::1;55863:54;;;;-1:-1:-1::0;;;55863:54:0::1;;;;;;;:::i;:::-;55970:6;::::0;-1:-1:-1;;;;;55970:6:0::1;55956:10;:20;55948:63;;;;-1:-1:-1::0;;;55948:63:0::1;;;;;;;:::i;:::-;56059:13;;56041:15;:31;56033:60;;;;-1:-1:-1::0;;;56033:60:0::1;;;;;;;:::i;:::-;56120:10;:8;:10::i;:::-;56143:11;:9;:11::i;:::-;56239:9;::::0;::::1;::::0;;;::::1;55813:443::o:0;58877:385::-;58930:13;;;;:21;;:13;:21;58922:58;;;;-1:-1:-1;;;58922:58:0;;;;;;;:::i;:::-;59008:10;58999:20;;;;:8;:20;;;;;;;;:28;;:20;:28;58991:75;;;;-1:-1:-1;;;58991:75:0;;;;;;;:::i;:::-;59103:7;;59085:26;;;;:17;:26;;;;;;;;59112:10;59085:38;;;;;;;;;;:47;59077:84;;;;-1:-1:-1;;;59077:84:0;;;;;;;:::i;:::-;59192:7;;59174:26;;;;:17;:26;;;;;;;;59201:10;59174:38;;;;;;;:45;;-1:-1:-1;;59174:45:0;59215:4;59174:45;;;;;;59230:19;:24;;59215:4;;59230:19;;:24;;59215:4;;59230:24;:::i;:::-;;;;-1:-1:-1;;58877:385:0:o;37597:18::-;;;-1:-1:-1;;;;;37597:18:0;;:::o;39393:31::-;;;-1:-1:-1;;;;;39393:31:0;;:::o;52593:1399::-;14376:8;:6;:8::i;:::-;14375:9;14367:38;;;;-1:-1:-1;;;14367:38:0;;;;;;;:::i;:::-;10102:1:::1;10700:7;;:19;;10692:63;;;;-1:-1:-1::0;;;10692:63:0::1;;;;;;;:::i;:::-;10102:1;10833:7;:18:::0;52700:10:::2;52730:19:::0;52722:65:::2;;;;-1:-1:-1::0;;;52722:65:0::2;;;;;;;:::i;:::-;52821:8;::::0;:25:::2;::::0;-1:-1:-1;;;52821:25:0;;52800:18:::2;::::0;-1:-1:-1;;;;;52821:8:0::2;::::0;:18:::2;::::0;:25:::2;::::0;52840:5;;52821:25:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52877:7;::::0;:24:::2;::::0;-1:-1:-1;;;52877:24:0;;52800:46;;-1:-1:-1;52857:17:0::2;::::0;-1:-1:-1;;;;;52877:7:0;;::::2;::::0;:17:::2;::::0;:24:::2;::::0;52895:5;;52877:24:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52932:7;::::0;:24:::2;::::0;-1:-1:-1;;;52932:24:0;;52857:44;;-1:-1:-1;52912:17:0::2;::::0;-1:-1:-1;;;;;52932:7:0;;::::2;::::0;:17:::2;::::0;:24:::2;::::0;52950:5;;52932:24:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52912:44;;52988:6;52975:9;:19;;52967:68;;;;-1:-1:-1::0;;;52967:68:0::2;;;;;;;:::i;:::-;53067:6;53054:9;:19;;53046:68;;;;-1:-1:-1::0;;;53046:68:0::2;;;;;;;:::i;:::-;53133:4;::::0;:29:::2;::::0;-1:-1:-1;;;53133:29:0;;53166:6;;-1:-1:-1;;;;;53133:4:0::2;::::0;:14:::2;::::0;:29:::2;::::0;53156:4:::2;::::0;53133:29:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;53125:88;;;;-1:-1:-1::0;;;53125:88:0::2;;;;;;;:::i;:::-;53234:20;53257:22;53273:5;53257:15;:22::i;:::-;53234:45;;53290:15;53308;:13;:15::i;:::-;53290:33:::0;-1:-1:-1;53334:11:0::2;53400:3;53392;53379:12:::0;53364:14:::2;53290:33:::0;53364:6;:14:::2;:::i;:::-;:27;;;;:::i;:::-;:31;;;;:::i;:::-;53362:41;;;;:::i;:::-;53356:47;;53427:3;53414:9;;:16;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;53443:19:0::2;::::0;-1:-1:-1;53465:12:0::2;53474:3:::0;53465:6;:12:::2;:::i;:::-;53443:34;;53509:11;53490:15;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;53531:24:0::2;::::0;-1:-1:-1;53531:22:0::2;:24::i;:::-;53572:8;::::0;::::2;;53568:221;;;53597:18;53644:3;53631:12;53618;;:25;;;;:::i;:::-;:29;;;;:::i;:::-;53597:50;;53684:10;53670;:24;;53662:75;;;;-1:-1:-1::0;;;53662:75:0::2;;;;;;;:::i;:::-;53752:8;::::0;:25:::2;::::0;-1:-1:-1;;;53752:25:0;;-1:-1:-1;;;;;53752:8:0;;::::2;::::0;:13:::2;::::0;:25:::2;::::0;53766:10;;53752:25:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;53568:221;;53801:4;::::0;:26:::2;::::0;-1:-1:-1;;;53801:26:0;;-1:-1:-1;;;;;53801:4:0;;::::2;::::0;:13:::2;::::0;:26:::2;::::0;53815:11;;53801:26:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;53838:7:0::2;::::0;:27:::2;::::0;-1:-1:-1;;;53838:27:0;;-1:-1:-1;;;;;53838:7:0;;::::2;::::0;-1:-1:-1;53838:12:0::2;::::0;-1:-1:-1;53838:27:0::2;::::0;53851:5;;53858:6;;53838:27:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;53876:7:0::2;::::0;:27:::2;::::0;-1:-1:-1;;;53876:27:0;;-1:-1:-1;;;;;53876:7:0;;::::2;::::0;-1:-1:-1;53876:12:0::2;::::0;-1:-1:-1;53876:27:0::2;::::0;53889:5;;53896:6;;53876:27:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;53916:28:0::2;::::0;-1:-1:-1;;;;;;;;53916:15:0;::::2;53932:11:::0;53916:15:::2;:28::i;:::-;53965:5;-1:-1:-1::0;;;;;53960:24:0::2;;53972:11;53960:24;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;10058:1:0::1;11012:22:::0;;-1:-1:-1;;;;;;;52593:1399:0:o;38601:34::-;;;;:::o;37977:23::-;;;;:::o;54000:1357::-;14376:8;:6;:8::i;:::-;14375:9;14367:38;;;;-1:-1:-1;;;14367:38:0;;;;;;;:::i;:::-;54084:10:::1;54113:19:::0;54105:65:::1;;;;-1:-1:-1::0;;;54105:65:0::1;;;;;;;:::i;:::-;54204:8;::::0;:25:::1;::::0;-1:-1:-1;;;54204:25:0;;54183:18:::1;::::0;-1:-1:-1;;;;;54204:8:0::1;::::0;:18:::1;::::0;:25:::1;::::0;54223:5;;54204:25:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54260:7;::::0;:24:::1;::::0;-1:-1:-1;;;54260:24:0;;54183:46;;-1:-1:-1;54240:17:0::1;::::0;-1:-1:-1;;;;;54260:7:0;;::::1;::::0;:17:::1;::::0;:24:::1;::::0;54278:5;;54260:24:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54315:7;::::0;:24:::1;::::0;-1:-1:-1;;;54315:24:0;;54240:44;;-1:-1:-1;54295:17:0::1;::::0;-1:-1:-1;;;;;54315:7:0;;::::1;::::0;:17:::1;::::0;:24:::1;::::0;54333:5;;54315:24:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54295:44;;54371:6;54358:9;:19;;54350:68;;;;-1:-1:-1::0;;;54350:68:0::1;;;;;;;:::i;:::-;54450:6;54437:9;:19;;54429:68;;;;-1:-1:-1::0;;;54429:68:0::1;;;;;;;:::i;:::-;54516:4;::::0;:29:::1;::::0;-1:-1:-1;;;54516:29:0;;54549:6;;-1:-1:-1;;;;;54516:4:0::1;::::0;:14:::1;::::0;:29:::1;::::0;54539:4:::1;::::0;54516:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;54508:88;;;;-1:-1:-1::0;;;54508:88:0::1;;;;;;;:::i;:::-;54617:20;54640:22;54656:5;54640:15;:22::i;:::-;54617:45;;54673:15;54691;:13;:15::i;:::-;54673:33:::0;-1:-1:-1;54717:11:0::1;54783:3;54775;54762:12:::0;54747:14:::1;54673:33:::0;54747:6;:14:::1;:::i;:::-;:27;;;;:::i;:::-;:31;;;;:::i;:::-;54745:41;;;;:::i;:::-;54739:47;;54810:3;54797:9;;:16;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;54826:19:0::1;::::0;-1:-1:-1;54848:12:0::1;54857:3:::0;54848:6;:12:::1;:::i;:::-;54826:34;;54892:11;54873:15;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;54914:24:0::1;::::0;-1:-1:-1;54914:22:0::1;:24::i;:::-;54955:8;::::0;::::1;;54951:221;;;54980:18;55027:3;55014:12;55001;;:25;;;;:::i;:::-;:29;;;;:::i;:::-;54980:50;;55067:10;55053;:24;;55045:75;;;;-1:-1:-1::0;;;55045:75:0::1;;;;;;;:::i;:::-;55135:8;::::0;:25:::1;::::0;-1:-1:-1;;;55135:25:0;;-1:-1:-1;;;;;55135:8:0;;::::1;::::0;:13:::1;::::0;:25:::1;::::0;55149:10;;55135:25:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;54951:221;;55184:7;::::0;:27:::1;::::0;-1:-1:-1;;;55184:27:0;;-1:-1:-1;;;;;55184:7:0;;::::1;::::0;:12:::1;::::0;:27:::1;::::0;55197:5;;55204:6;;55184:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;55222:7:0::1;::::0;:27:::1;::::0;-1:-1:-1;;;55222:27:0;;-1:-1:-1;;;;;55222:7:0;;::::1;::::0;-1:-1:-1;55222:12:0::1;::::0;-1:-1:-1;55222:27:0::1;::::0;55235:5;;55242:6;;55222:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;55269:4:0::1;::::0;:33:::1;::::0;-1:-1:-1;;;55269:33:0;;-1:-1:-1;;;;;55269:4:0;;::::1;::::0;-1:-1:-1;55269:13:0::1;::::0;-1:-1:-1;55269:33:0::1;::::0;55283:5;;55290:11;;55269:33:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55262:41;;-1:-1:-1::0;;;55262:41:0::1;;;;;;;;;55330:5;-1:-1:-1::0;;;;;55319:30:0::1;;55337:11;55319:30;;;;;;:::i;:::-;;;;;;;;14416:1;;;;;;;;54000:1357:::0;:::o;39025:28::-;;;;:::o;37538:27::-;;;-1:-1:-1;;;;;37538:27:0;;:::o;59671:338::-;59725:7;;-1:-1:-1;;;;;59725:7:0;:21;59717:59;;;;-1:-1:-1;;;59717:59:0;;;;;;;:::i;:::-;59804:10;59795:20;;;;:8;:20;;;;;;;;:28;;:20;:28;59787:76;;;;-1:-1:-1;;;59787:76:0;;;;;;;:::i;:::-;59905:24;;59882:19;;:47;;59874:88;;;;-1:-1:-1;;;59874:88:0;;;;;;;:::i;:::-;59985:16;;59975:7;:26;;-1:-1:-1;;;;;;59975:26:0;-1:-1:-1;;;;;59985:16:0;;;59975:26;;;;;;59671:338::o;37730:26::-;;;;:::o;14050:86::-;14097:4;14121:7;-1:-1:-1;;;14121:7:0;;;;;14050:86::o;38144:33::-;;;;:::o;38041:24::-;;;;:::o;50846:879::-;14376:8;:6;:8::i;:::-;14375:9;14367:38;;;;-1:-1:-1;;;14367:38:0;;;;;;;:::i;:::-;50932:9:::1;50913:15;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;50952:24:0::1;::::0;-1:-1:-1;50952:22:0::1;:24::i;:::-;51050:15;::::0;51038:11:::1;::::0;51012:9:::1;::::0;-1:-1:-1;51034:524:0::1;;;51082:20;51175:3;51156:15;;51140;;:31;;;;:::i;:::-;51120:15;;51106:11;;:29;;;;:::i;:::-;51105:67;;;;:::i;:::-;:73;;;;:::i;:::-;51082:96;;51212:9;51197:12;:24;51193:354;;;51242:9;::::0;;:70:::1;::::0;-1:-1:-1;;;51242:70:0;;-1:-1:-1;;;;;51242:9:0;;::::1;::::0;:32:::1;::::0;51283:9:::1;::::0;51242:70:::1;::::0;51294:17:::1;::::0;51242:70:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;51346:1;51331:16;;51193:354;;;51401:9;::::0;;:72:::1;::::0;-1:-1:-1;;;51401:72:0;;-1:-1:-1;;;;;51401:9:0;;::::1;::::0;:32:::1;::::0;51441:12;;51401:72:::1;::::0;51455:17:::1;::::0;51401:72:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;51519:12;51507:9;:24;;;;:::i;:::-;51492:39;;51193:354;51034:524;;51568:4;;;;;;;;;-1:-1:-1::0;;;;;51568:4:0::1;-1:-1:-1::0;;;;;51568:12:0::1;;51588;51568:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;51614:7:0::1;::::0;:28:::1;::::0;-1:-1:-1;;;51614:28:0;;-1:-1:-1;;;;;51614:7:0;;::::1;::::0;-1:-1:-1;51614:12:0::1;::::0;-1:-1:-1;51614:28:0::1;::::0;-1:-1:-1;51627:3:0;;51632:9:::1;::::0;51614:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;51653:7:0::1;::::0;:28:::1;::::0;-1:-1:-1;;;51653:28:0;;-1:-1:-1;;;;;51653:7:0;;::::1;::::0;-1:-1:-1;51653:12:0::1;::::0;-1:-1:-1;51653:28:0::1;::::0;51666:3;;51671:9:::1;::::0;51653:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51702:3;-1:-1:-1::0;;;;;51697:20:0::1;;51707:9;51697:20;;;;;;:::i;38691:24::-:0;;;;:::o;49122:739::-;49244:15;;49228;;:31;;;;:::i;:::-;49190:6;:70;49182:126;;;;-1:-1:-1;;;49182:126:0;;;;;;;:::i;:::-;49382:6;49365:16;;:23;;;;:::i;:::-;49344:15;;49328;;:31;;;;:::i;:::-;49327:62;;49319:137;;;;-1:-1:-1;;;49319:137:0;;;;;;;:::i;:::-;49477:7;;-1:-1:-1;;;;;49477:7:0;49469:56;;;;-1:-1:-1;;;49469:56:0;;;;;;;:::i;:::-;49579:7;;-1:-1:-1;;;;;49579:7:0;49565:10;:21;49557:65;;;;-1:-1:-1;;;49557:65:0;;;;;;;:::i;:::-;49667:6;49647:16;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;49684:24:0;;-1:-1:-1;49684:22:0;:24::i;:::-;49721:14;:12;:14::i;:::-;49821:32;49836:16;;49821:32;;;;;;:::i;:::-;;;;;;;;49122:739;:::o;17002:103::-;16582:12;:10;:12::i;:::-;-1:-1:-1;;;;;16571:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16571:23:0;;16563:68;;;;-1:-1:-1;;;16563:68:0;;;;;;;:::i;:::-;17067:30:::1;17094:1;17067:18;:30::i;:::-;17002:103::o:0;58081:409::-;-1:-1:-1;;;;;58149:22:0;;58141:72;;;;-1:-1:-1;;;58141:72:0;;;;;;;:::i;:::-;58232:13;;;;:22;58224:56;;;;-1:-1:-1;;;58224:56:0;;;;;;;:::i;:::-;58308:10;58299:20;;;;:8;:20;;;;;;;;:28;;:20;:28;58291:70;;;;-1:-1:-1;;;58291:70:0;;;;;;;:::i;:::-;58374:13;:20;;-1:-1:-1;;58374:20:0;58390:4;58374:20;;;58429:15;58405:21;:39;58455:16;:27;;-1:-1:-1;;;;;58455:27:0;;;-1:-1:-1;;;;;;58455:27:0;;;;;;;;;58081:409::o;39114:22::-;;;;:::o;38522:31::-;;;;:::o;38248:40::-;;;;;;;;;;;;;;;:::o;38078:23::-;;;;;;:::o;38368:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37802:30::-;;;;:::o;55365:440::-;14376:8;:6;:8::i;:::-;14375:9;14367:38;;;;-1:-1:-1;;;14367:38:0;;;;;;;:::i;:::-;55424:6:::1;::::0;-1:-1:-1;;;;;55424:6:0::1;55416:54;;;;-1:-1:-1::0;;;55416:54:0::1;;;;;;;:::i;:::-;55523:6;::::0;-1:-1:-1;;;;;55523:6:0::1;55509:10;:20;55501:63;;;;-1:-1:-1::0;;;55501:63:0::1;;;;;;;:::i;:::-;55612:13;;55594:15;:31;55586:60;;;;-1:-1:-1::0;;;55586:60:0::1;;;;;;;:::i;:::-;55673:8;:6;:8::i;:::-;55694:11;:9;:11::i;:::-;55790:7;::::0;::::1;::::0;;;::::1;55365:440::o:0;16351:87::-;16397:7;16424:6;-1:-1:-1;;;;;16424:6:0;16351:87;:::o;57684:389::-;-1:-1:-1;;;;;57748:21:0;;57740:70;;;;-1:-1:-1;;;57740:70:0;;;;;;;:::i;:::-;57829:10;;;;:19;57821:53;;;;-1:-1:-1;;;57821:53:0;;;;;;;:::i;:::-;57902:10;57893:20;;;;:8;:20;;;;;;;;:28;;:20;:28;57885:67;;;;-1:-1:-1;;;57885:67:0;;;;;;;:::i;:::-;57965:10;:17;;-1:-1:-1;;57965:17:0;57978:4;57965:17;;;58014:15;57993:18;:36;58040:15;:25;;-1:-1:-1;;;;;58040:25:0;;;-1:-1:-1;;;;;;58040:25:0;;;;;;;;;57684:389::o;37919:22::-;;;;:::o;46454:535::-;46542:6;;-1:-1:-1;;;;;46542:6:0;46534:54;;;;-1:-1:-1;;;46534:54:0;;;;;;;:::i;:::-;46641:6;;-1:-1:-1;;;;;46641:6:0;46627:10;:20;46619:63;;;;-1:-1:-1;;;46619:63:0;;;;;;;:::i;:::-;46730:13;;46712:15;:31;46704:60;;;;-1:-1:-1;;;46704:60:0;;;;;;;:::i;:::-;46791:18;:40;;;46844:11;:9;:11::i;:::-;46940:41;46962:18;;46940:41;;;;;;:::i;48488:626::-;14376:8;:6;:8::i;:::-;14375:9;14367:38;;;;-1:-1:-1;;;14367:38:0;;;;;;;:::i;:::-;48550:5:::1;::::0;-1:-1:-1;;;;;48550:5:0::1;48542:68;;;;-1:-1:-1::0;;;48542:68:0::1;;;;;;;:::i;:::-;48631:6;::::0;-1:-1:-1;;;;;48631:6:0::1;48623:54;;;;-1:-1:-1::0;;;48623:54:0::1;;;;;;;:::i;:::-;48730:6;::::0;-1:-1:-1;;;;;48730:6:0::1;48716:10;:20;48708:63;;;;-1:-1:-1::0;;;48708:63:0::1;;;;;;;:::i;:::-;48819:13;;48801:15;:31;48793:60;;;;-1:-1:-1::0;;;48793:60:0::1;;;;;;;:::i;:::-;48880:14;48897:9;;48880:26;;48936:6;48917:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;48965:1:0::1;48953:9;:13:::0;48979:11:::1;:9;:11::i;:::-;49077:4;::::0;49091:5:::1;::::0;49077:28:::1;::::0;-1:-1:-1;;;49077:28:0;;-1:-1:-1;;;;;49077:4:0;;::::1;::::0;:13:::1;::::0;:28:::1;::::0;49091:5;::::1;::::0;49098:6;;49077:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49070:36;;-1:-1:-1::0;;;49070:36:0::1;;;;;;;;;14416:1;48488:626::o:0;39183:28::-;;;;;;:::o;38948:30::-;;;-1:-1:-1;;;;;38948:30:0;;:::o;37839:31::-;;;;:::o;37948:22::-;;;;:::o;38295:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38108:27::-;;;;:::o;37693:30::-;;;;:::o;38754:25::-;;;;;;:::o;59270:393::-;59323:6;;-1:-1:-1;;;;;59323:6:0;:20;59315:57;;;;-1:-1:-1;;;59315:57:0;;;;;;;:::i;:::-;59400:10;59391:20;;;;:8;:20;;;;;;;;:28;;:20;:28;59383:75;;;;-1:-1:-1;;;59383:75:0;;;;;;;:::i;:::-;59497:24;;59477:16;;:44;;59469:85;;;;-1:-1:-1;;;59469:85:0;;;;;;;:::i;:::-;59576:15;;59567:6;:24;;-1:-1:-1;;;;;;59567:24:0;-1:-1:-1;;;;;59576:15:0;;;59567:24;;;;;;59618;:15;59636:6;59618:24;:::i;:::-;59602:13;:40;59270:393::o;38446:39::-;;;;:::o;58498:371::-;58548:10;;;;:18;;:10;:18;58540:55;;;;-1:-1:-1;;;58540:55:0;;;;;;;:::i;:::-;58623:10;58614:20;;;;:8;:20;;;;;;;;:28;;:20;:28;58606:72;;;;-1:-1:-1;;;58606:72:0;;;;;;;:::i;:::-;58712:9;;58697:25;;;;:14;:25;;;;;;;;58723:10;58697:37;;;;;;;;;;:46;58689:83;;;;-1:-1:-1;;;58689:83:0;;;;;;;:::i;:::-;58800:9;;58785:25;;;;:14;:25;;;;;;;;58811:10;58785:37;;;;;;;:44;;-1:-1:-1;;58785:44:0;58825:4;58785:44;;;;;;58840:16;:21;;58825:4;;58840:16;;:21;;58825:4;;58840:21;:::i;37877:33::-;;;;:::o;38007:27::-;;;;:::o;57150:526::-;57200:13;;;;:21;;:13;:21;57192:55;;;;-1:-1:-1;;;57192:55:0;;;;;;;:::i;:::-;57285:21;;:30;;57309:6;57285:30;:::i;:::-;57266:15;:50;57258:98;;;;-1:-1:-1;;;57258:98:0;;;;;;;:::i;:::-;57397:24;;57375:19;;:46;57367:82;;;;-1:-1:-1;;;57367:82:0;;;;;;;:::i;:::-;57477:10;57468:20;;;;:8;:20;;;;;;;;:28;;:20;:28;57460:68;;;;-1:-1:-1;;;57460:68:0;;;;;;;:::i;:::-;57541:13;:27;;-1:-1:-1;;57541:27:0;;;57579:16;:32;;-1:-1:-1;;;;;;57579:32:0;;;57563:5;57622:19;:23;;;57656:7;:12;;57541:27;;57563:5;57656:12;;57541:27;;57656:12;:::i;37482:25::-;;;-1:-1:-1;;;;;37482:25:0;;:::o;39321:22::-;;;-1:-1:-1;;;;;39321:22:0;;:::o;37572:18::-;;;-1:-1:-1;;;;;37572:18:0;;:::o;41938:131::-;41988:4;;;;;;;;;-1:-1:-1;;;;;41988:4:0;-1:-1:-1;;;;;41988:12:0;;42008:9;41988:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42031:30;42051:9;42031:19;:30::i;44735:615::-;44815:1;44803:6;:13;44795:55;;;;-1:-1:-1;;;44795:55:0;;;;;;;:::i;:::-;44879:3;44869:6;:13;44861:55;;;;-1:-1:-1;;;44861:55:0;;;;;;;:::i;:::-;44937:6;;-1:-1:-1;;;;;44937:6:0;44929:54;;;;-1:-1:-1;;;44929:54:0;;;;;;;:::i;:::-;45036:6;;-1:-1:-1;;;;;45036:6:0;45022:10;:20;45014:63;;;;-1:-1:-1;;;45014:63:0;;;;;;;:::i;:::-;45125:13;;45107:15;:31;45099:60;;;;-1:-1:-1;;;45099:60:0;;;;;;;:::i;:::-;45186:11;:20;;;45219:11;:9;:11::i;:::-;45315:27;45330:11;;45315:27;;;;;;:::i;39248:36::-;;;;:::o;56641:501::-;56688:10;;;;:18;;:10;:18;56680:52;;;;-1:-1:-1;;;56680:52:0;;;;;;;:::i;:::-;56770:18;;:27;;56791:6;56770:27;:::i;:::-;56751:15;:47;56743:95;;;;-1:-1:-1;;;56743:95:0;;;;;;;:::i;:::-;56876:24;;56857:16;;:43;56849:76;;;;-1:-1:-1;;;56849:76:0;;;;;;;:::i;:::-;56953:10;56944:20;;;;:8;:20;;;;;;;;:28;;:20;:28;56936:65;;;;-1:-1:-1;;;56936:65:0;;;;;;;:::i;:::-;57014:10;:24;;-1:-1:-1;;57014:24:0;;;57049:15;:29;;-1:-1:-1;;;;;;57049:29:0;;;57033:5;57089:16;:20;;;57120:9;:14;;57014:24;;57033:5;57120:14;;57014:24;;57120:14;:::i;17260:201::-;16582:12;:10;:12::i;:::-;-1:-1:-1;;;;;16571:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16571:23:0;;16563:68;;;;-1:-1:-1;;;16563:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17349:22:0;::::1;17341:73;;;;-1:-1:-1::0;;;17341:73:0::1;;;;;;;:::i;:::-;17425:28;17444:8;17425:18;:28::i;47974:506::-:0;-1:-1:-1;;;;;48036:20:0;;48028:61;;;;-1:-1:-1;;;48028:61:0;;;;;;;:::i;:::-;48110:6;;-1:-1:-1;;;;;48110:6:0;48102:54;;;;-1:-1:-1;;;48102:54:0;;;;;;;:::i;:::-;48209:6;;-1:-1:-1;;;;;48209:6:0;48195:10;:20;48187:63;;;;-1:-1:-1;;;48187:63:0;;;;;;;:::i;:::-;48298:13;;48280:15;:31;48272:60;;;;-1:-1:-1;;;48272:60:0;;;;;;;:::i;:::-;48359:5;:14;;-1:-1:-1;;;;;;48359:14:0;-1:-1:-1;;;;;48359:14:0;;;;;48386:11;:9;:11::i;42855:752::-;42901:7;42943:3;42929:11;;:17;42921:65;;;;-1:-1:-1;;;42921:65:0;;;;;;;:::i;:::-;42999:20;43059:11;;43053:3;:17;;;;:::i;:::-;43029:15;;43023:21;;:3;:21;:::i;:::-;43022:27;;43046:3;43022:27;:::i;:::-;:49;;;;:::i;:::-;42999:72;;43082:23;43133:3;43120:12;:16;43116:148;;;43172:18;43178:12;43172:3;:18;:::i;:::-;43153:38;;43116:148;;;-1:-1:-1;43251:1:0;43116:148;43299:7;;43280:15;:26;43276:324;;43362:7;;43356:3;43347:8;;43331:15;:24;;;;:::i;:::-;:28;;;;:::i;:::-;:38;;;;:::i;:::-;43323:47;;;;;;43276:324;43412:18;43456:7;;43450:3;43441:8;;43433:7;;:16;;;;:::i;:::-;:20;;;;:::i;:::-;:30;;;;:::i;:::-;43412:51;;43478:18;43517:7;;43499:15;:25;;;;:::i;:::-;43478:46;;43577:10;43571:3;43558:12;;43547:10;:23;;;;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;43539:49;;;;;;;;38813:33;;;;:::o;45358:456::-;45448:7;;-1:-1:-1;;;;;45448:7:0;45440:56;;;;-1:-1:-1;;;45440:56:0;;;;;;;:::i;:::-;45550:7;;-1:-1:-1;;;;;45550:7:0;45536:10;:21;45528:65;;;;-1:-1:-1;;;45528:65:0;;;;;;;:::i;:::-;45618:38;;;;:17;;:38;;;;;:::i;:::-;;45669:14;:12;:14::i;:::-;45788:17;45769:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;45358:456;:::o;56277:169::-;56318:10;:24;;-1:-1:-1;;56318:24:0;;;56353:6;:29;;-1:-1:-1;;;;;;56353:29:0;;;56337:5;56393:16;:20;;;56424:9;:14;;56318:24;;56337:5;56424:14;;56318:24;;56424:14;:::i;50325:513::-;50405:1;50387:15;;:19;50379:85;;;;-1:-1:-1;;;50379:85:0;;;;;;;:::i;:::-;50506:15;;50487;;:34;;50479:111;;;;-1:-1:-1;;;50479:111:0;;;;;;;:::i;:::-;50641:1;50624:15;;50608;;:31;;;;:::i;:::-;50607:35;50603:228;;;50742:15;;50726;;:31;;;;:::i;:::-;50696:18;;50679:16;;:35;;;;:::i;:::-;50678:43;;50718:3;50678:43;:::i;:::-;50677:81;;;;:::i;:::-;50659:15;:99;50603:228;;;50818:1;50800:15;:19;50325:513::o;15109:120::-;14653:8;:6;:8::i;:::-;14645:41;;;;-1:-1:-1;;;14645:41:0;;;;;;;:::i;:::-;15178:5:::1;15168:15:::0;;-1:-1:-1;;;;15168:15:0::1;::::0;;15199:22:::1;15208:12;:10;:12::i;:::-;15199:22;;;;;;:::i;:::-;;;;;;;;15109:120::o:0;2228:317::-;2343:6;2318:21;:31;;2310:73;;;;-1:-1:-1;;;2310:73:0;;;;;;;:::i;:::-;2397:12;2415:9;-1:-1:-1;;;;;2415:14:0;2437:6;2415:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2396:52;;;2467:7;2459:78;;;;-1:-1:-1;;;2459:78:0;;;;;;;:::i;:::-;2228:317;;;:::o;56454:179::-;56498:13;:27;;-1:-1:-1;;56498:27:0;;;56536:7;:32;;-1:-1:-1;;;;;;56536:32:0;;;56520:5;56579:19;:23;;;56613:7;:12;;56498:27;;56520:5;56613:12;;56498:27;;56613:12;:::i;12651:98::-;12731:10;12651:98;:::o;17621:191::-;17695:16;17714:6;;-1:-1:-1;;;;;17731:17:0;;;-1:-1:-1;;;;;;17731:17:0;;;;;;17764:40;;17714:6;;;;;;;17764:40;;17695:16;17764:40;17621:191;;:::o;14850:118::-;14376:8;:6;:8::i;:::-;14375:9;14367:38;;;;-1:-1:-1;;;14367:38:0;;;;;;;:::i;:::-;14910:7:::1;:14:::0;;-1:-1:-1;;;;14910:14:0::1;-1:-1:-1::0;;;14910:14:0::1;::::0;;14940:20:::1;14947:12;:10;:12::i;49869:448::-:0;49979:15;;49963;;:31;;;;:::i;:::-;49942:6;:53;49934:111;;;;-1:-1:-1;;;49934:111:0;;;;;;;:::i;:::-;50104:6;50085:18;;:25;;;;:::i;:::-;50064:16;;:47;;50056:123;;;;-1:-1:-1;;;50056:123:0;;;;;;;:::i;:::-;50212:6;50190:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;50231:24:0;;-1:-1:-1;50231:22:0;:24::i;:::-;50271:38;50290:18;;50271:38;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:259:1;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;:::-;262:5;84:189;-1:-1:-1;;;84:189:1:o;278:327::-;;;407:2;395:9;386:7;382:23;378:32;375:2;;;428:6;420;413:22;375:2;472:9;459:23;491:33;518:5;491:33;:::i;:::-;543:5;595:2;580:18;;;;567:32;;-1:-1:-1;;;365:240:1:o;610:257::-;;730:2;718:9;709:7;705:23;701:32;698:2;;;751:6;743;736:22;698:2;788:9;782:16;807:30;831:5;807:30;:::i;872:321::-;;;998:2;986:9;977:7;973:23;969:32;966:2;;;1019:6;1011;1004:22;966:2;1063:9;1050:23;1082:30;1106:5;1082:30;:::i;1198:907::-;;;;;;1452:3;1440:9;1431:7;1427:23;1423:33;1420:2;;;1474:6;1466;1459:22;1420:2;1518:9;1505:23;1537:33;1564:5;1537:33;:::i;:::-;1589:5;-1:-1:-1;1646:2:1;1631:18;;1618:32;1659:35;1618:32;1659:35;:::i;:::-;1713:7;-1:-1:-1;1772:2:1;1757:18;;1744:32;1785:35;1744:32;1785:35;:::i;:::-;1839:7;-1:-1:-1;1898:2:1;1883:18;;1870:32;1911:35;1870:32;1911:35;:::i;:::-;1965:7;-1:-1:-1;2024:3:1;2009:19;;1996:33;2038:35;1996:33;2038:35;:::i;:::-;2092:7;2082:17;;;1410:695;;;;;;;;:::o;2110:958::-;;2210:2;2253;2241:9;2232:7;2228:23;2224:32;2221:2;;;2274:6;2266;2259:22;2221:2;2319:9;2306:23;2348:18;2389:2;2381:6;2378:14;2375:2;;;2410:6;2402;2395:22;2375:2;2453:6;2442:9;2438:22;2428:32;;2498:7;2491:4;2487:2;2483:13;2479:27;2469:2;;2525:6;2517;2510:22;2469:2;2566;2553:16;2588:2;2584;2581:10;2578:2;;;2594:18;;:::i;:::-;2643:2;2637:9;2712:2;2693:13;;-1:-1:-1;;2689:27:1;2677:40;;2673:49;;2737:18;;;2757:22;;;2734:46;2731:2;;;2783:18;;:::i;:::-;2819:2;2812:22;2843:18;;;2880:11;;;2876:20;;2873:33;-1:-1:-1;2870:2:1;;;2924:6;2916;2909:22;2870:2;2985;2980;2976;2972:11;2967:2;2959:6;2955:15;2942:46;3008:15;;;3004:24;;;2997:40;;;;-1:-1:-1;3012:6:1;2190:878;-1:-1:-1;;;2190:878:1:o;3073:190::-;;3185:2;3173:9;3164:7;3160:23;3156:32;3153:2;;;3206:6;3198;3191:22;3153:2;-1:-1:-1;3234:23:1;;3143:120;-1:-1:-1;3143:120:1:o;3268:194::-;;3391:2;3379:9;3370:7;3366:23;3362:32;3359:2;;;3412:6;3404;3397:22;3359:2;-1:-1:-1;3440:16:1;;3349:113;-1:-1:-1;3349:113:1:o;3467:327::-;;;3596:2;3584:9;3575:7;3571:23;3567:32;3564:2;;;3617:6;3609;3602:22;3564:2;3658:9;3645:23;3635:33;;3718:2;3707:9;3703:18;3690:32;3731:33;3758:5;3731:33;:::i;:::-;3783:5;3773:15;;;3554:240;;;;;:::o;3799:395::-;;;;;3962:3;3950:9;3941:7;3937:23;3933:33;3930:2;;;3984:6;3976;3969:22;3930:2;-1:-1:-1;;4012:23:1;;;4082:2;4067:18;;4054:32;;-1:-1:-1;4133:2:1;4118:18;;4105:32;;4184:2;4169:18;4156:32;;-1:-1:-1;3920:274:1;-1:-1:-1;3920:274:1:o;4199:821::-;;4356:3;4391:6;4385:13;4421:36;4447:9;4421:36;:::i;:::-;4476:1;4493:18;;;4520:104;;;;4638:1;4633:362;;;;4486:509;;4520:104;-1:-1:-1;;4553:24:1;;4541:37;;4598:16;;;;-1:-1:-1;4520:104:1;;4633:362;4666:6;4661:3;4654:19;4696:4;4743:2;4738:3;4728:18;4768:3;4784:165;4798:6;4795:1;4792:13;4784:165;;;4876:14;;4863:11;;;4856:35;4919:16;;;;4813:10;;4784:165;;;4788:3;;;4978:6;4973:3;4969:16;4962:23;;4486:509;-1:-1:-1;5011:3:1;;4335:685;-1:-1:-1;;;;;;4335:685:1:o;5235:203::-;-1:-1:-1;;;;;5399:32:1;;;;5381:51;;5369:2;5354:18;;5336:102::o;5659:282::-;-1:-1:-1;;;;;5859:32:1;;;;5841:51;;5923:2;5908:18;;5901:34;5829:2;5814:18;;5796:145::o;5946:304::-;-1:-1:-1;;;;;6176:15:1;;;6158:34;;6228:15;;6223:2;6208:18;;6201:43;6108:2;6093:18;;6075:175::o;6255:375::-;-1:-1:-1;;;;;6513:15:1;;;6495:34;;6565:15;;;;6560:2;6545:18;;6538:43;6612:2;6597:18;;6590:34;;;;6445:2;6430:18;;6412:218::o;6914:187::-;7079:14;;7072:22;7054:41;;7042:2;7027:18;;7009:92::o;7106:258::-;7299:14;;7292:22;7274:41;;7346:2;7331:18;;7324:34;7262:2;7247:18;;7229:135::o;8491:603::-;;8632:2;8661;8650:9;8643:21;8693:6;8687:13;8736:6;8731:2;8720:9;8716:18;8709:34;8761:4;8774:140;8788:6;8785:1;8782:13;8774:140;;;8883:14;;;8879:23;;8873:30;8849:17;;;8868:2;8845:26;8838:66;8803:10;;8774:140;;;8932:6;8929:1;8926:13;8923:2;;;9002:4;8997:2;8988:6;8977:9;8973:22;8969:31;8962:45;8923:2;-1:-1:-1;9078:2:1;9057:15;-1:-1:-1;;9053:29:1;9038:45;;;;9085:2;9034:54;;8612:482;-1:-1:-1;;;8612:482:1:o;9099:938::-;;9237:2;9266;9255:9;9248:21;9289:4;9325:6;9319:13;9355:36;9381:9;9355:36;:::i;:::-;9427:6;9422:2;9411:9;9407:18;9400:34;9453:2;9474:1;9506:2;9495:9;9491:18;9523:1;9518:121;;;;9653:1;9648:363;;;;9484:527;;9518:121;-1:-1:-1;;9566:24:1;;9546:18;;;9539:52;9626:2;9611:18;;;-1:-1:-1;9518:121:1;;9648:363;9682:6;9676:4;9669:20;9733:2;9727:4;9717:19;9758:4;9775:180;9789:6;9786:1;9783:13;9775:180;;;9882:14;;9858:17;;;9854:26;;9847:50;9925:16;;;;9804:10;;9775:180;;;9979:17;;9975:26;;;-1:-1:-1;;9484:527:1;-1:-1:-1;10028:3:1;;9217:820;-1:-1:-1;;;;;;;;9217:820:1:o;10042:344::-;10244:2;10226:21;;;10283:2;10263:18;;;10256:30;-1:-1:-1;;;10317:2:1;10302:18;;10295:50;10377:2;10362:18;;10216:170::o;10391:344::-;10593:2;10575:21;;;10632:2;10612:18;;;10605:30;-1:-1:-1;;;10666:2:1;10651:18;;10644:50;10726:2;10711:18;;10565:170::o;10740:344::-;10942:2;10924:21;;;10981:2;10961:18;;;10954:30;-1:-1:-1;;;11015:2:1;11000:18;;10993:50;11075:2;11060:18;;10914:170::o;11089:353::-;11291:2;11273:21;;;11330:2;11310:18;;;11303:30;11369:31;11364:2;11349:18;;11342:59;11433:2;11418:18;;11263:179::o;11447:348::-;11649:2;11631:21;;;11688:2;11668:18;;;11661:30;11727:26;11722:2;11707:18;;11700:54;11786:2;11771:18;;11621:174::o;11800:418::-;12002:2;11984:21;;;12041:2;12021:18;;;12014:30;12080:34;12075:2;12060:18;;12053:62;-1:-1:-1;;;12146:2:1;12131:18;;12124:52;12208:3;12193:19;;11974:244::o;12223:397::-;12425:2;12407:21;;;12464:2;12444:18;;;12437:30;12503:34;12498:2;12483:18;;12476:62;-1:-1:-1;;;12569:2:1;12554:18;;12547:31;12610:3;12595:19;;12397:223::o;12625:347::-;12827:2;12809:21;;;12866:2;12846:18;;;12839:30;12905:25;12900:2;12885:18;;12878:53;12963:2;12948:18;;12799:173::o;12977:349::-;13179:2;13161:21;;;13218:2;13198:18;;;13191:30;13257:27;13252:2;13237:18;;13230:55;13317:2;13302:18;;13151:175::o;13331:402::-;13533:2;13515:21;;;13572:2;13552:18;;;13545:30;13611:34;13606:2;13591:18;;13584:62;-1:-1:-1;;;13677:2:1;13662:18;;13655:36;13723:3;13708:19;;13505:228::o;13738:348::-;13940:2;13922:21;;;13979:2;13959:18;;;13952:30;14018:26;14013:2;13998:18;;13991:54;14077:2;14062:18;;13912:174::o;14091:348::-;14293:2;14275:21;;;14332:2;14312:18;;;14305:30;14371:26;14366:2;14351:18;;14344:54;14430:2;14415:18;;14265:174::o;14444:345::-;14646:2;14628:21;;;14685:2;14665:18;;;14658:30;-1:-1:-1;;;14719:2:1;14704:18;;14697:51;14780:2;14765:18;;14618:171::o;14794:398::-;14996:2;14978:21;;;15035:2;15015:18;;;15008:30;15074:34;15069:2;15054:18;;15047:62;-1:-1:-1;;;15140:2:1;15125:18;;15118:32;15182:3;15167:19;;14968:224::o;15197:353::-;15399:2;15381:21;;;15438:2;15418:18;;;15411:30;15477:31;15472:2;15457:18;;15450:59;15541:2;15526:18;;15371:179::o;15555:400::-;15757:2;15739:21;;;15796:2;15776:18;;;15769:30;15835:34;15830:2;15815:18;;15808:62;-1:-1:-1;;;15901:2:1;15886:18;;15879:34;15945:3;15930:19;;15729:226::o;15960:402::-;16162:2;16144:21;;;16201:2;16181:18;;;16174:30;16240:34;16235:2;16220:18;;16213:62;-1:-1:-1;;;16306:2:1;16291:18;;16284:36;16352:3;16337:19;;16134:228::o;16367:400::-;16569:2;16551:21;;;16608:2;16588:18;;;16581:30;16647:34;16642:2;16627:18;;16620:62;-1:-1:-1;;;16713:2:1;16698:18;;16691:34;16757:3;16742:19;;16541:226::o;16772:345::-;16974:2;16956:21;;;17013:2;16993:18;;;16986:30;-1:-1:-1;;;17047:2:1;17032:18;;17025:51;17108:2;17093:18;;16946:171::o;17122:422::-;17324:2;17306:21;;;17363:2;17343:18;;;17336:30;17402:34;17397:2;17382:18;;17375:62;17473:28;17468:2;17453:18;;17446:56;17534:3;17519:19;;17296:248::o;17549:399::-;17751:2;17733:21;;;17790:2;17770:18;;;17763:30;17829:34;17824:2;17809:18;;17802:62;-1:-1:-1;;;17895:2:1;17880:18;;17873:33;17938:3;17923:19;;17723:225::o;17953:353::-;18155:2;18137:21;;;18194:2;18174:18;;;18167:30;18233:31;18228:2;18213:18;;18206:59;18297:2;18282:18;;18127:179::o;18311:348::-;18513:2;18495:21;;;18552:2;18532:18;;;18525:30;18591:26;18586:2;18571:18;;18564:54;18650:2;18635:18;;18485:174::o;18664:356::-;18866:2;18848:21;;;18885:18;;;18878:30;18944:34;18939:2;18924:18;;18917:62;19011:2;18996:18;;18838:182::o;19025:347::-;19227:2;19209:21;;;19266:2;19246:18;;;19239:30;19305:25;19300:2;19285:18;;19278:53;19363:2;19348:18;;19199:173::o;19377:401::-;19579:2;19561:21;;;19618:2;19598:18;;;19591:30;19657:34;19652:2;19637:18;;19630:62;-1:-1:-1;;;19723:2:1;19708:18;;19701:35;19768:3;19753:19;;19551:227::o;19783:355::-;19985:2;19967:21;;;20024:2;20004:18;;;19997:30;20063:33;20058:2;20043:18;;20036:61;20129:2;20114:18;;19957:181::o;20143:340::-;20345:2;20327:21;;;20384:2;20364:18;;;20357:30;-1:-1:-1;;;20418:2:1;20403:18;;20396:46;20474:2;20459:18;;20317:166::o;20488:347::-;20690:2;20672:21;;;20729:2;20709:18;;;20702:30;20768:25;20763:2;20748:18;;20741:53;20826:2;20811:18;;20662:173::o;20840:351::-;21042:2;21024:21;;;21081:2;21061:18;;;21054:30;21120:29;21115:2;21100:18;;21093:57;21182:2;21167:18;;21014:177::o;21196:400::-;21398:2;21380:21;;;21437:2;21417:18;;;21410:30;21476:34;21471:2;21456:18;;21449:62;-1:-1:-1;;;21542:2:1;21527:18;;21520:34;21586:3;21571:19;;21370:226::o;21601:348::-;21803:2;21785:21;;;21842:2;21822:18;;;21815:30;21881:26;21876:2;21861:18;;21854:54;21940:2;21925:18;;21775:174::o;21954:352::-;22156:2;22138:21;;;22195:2;22175:18;;;22168:30;22234;22229:2;22214:18;;22207:58;22297:2;22282:18;;22128:178::o;22311:409::-;22513:2;22495:21;;;22552:2;22532:18;;;22525:30;22591:34;22586:2;22571:18;;22564:62;-1:-1:-1;;;22657:2:1;22642:18;;22635:43;22710:3;22695:19;;22485:235::o;22725:352::-;22927:2;22909:21;;;22966:2;22946:18;;;22939:30;23005;23000:2;22985:18;;22978:58;23068:2;23053:18;;22899:178::o;23082:355::-;23284:2;23266:21;;;23323:2;23303:18;;;23296:30;23362:33;23357:2;23342:18;;23335:61;23428:2;23413:18;;23256:181::o;23442:349::-;23644:2;23626:21;;;23683:2;23663:18;;;23656:30;23722:27;23717:2;23702:18;;23695:55;23782:2;23767:18;;23616:175::o;23796:400::-;23998:2;23980:21;;;24037:2;24017:18;;;24010:30;24076:34;24071:2;24056:18;;24049:62;-1:-1:-1;;;24142:2:1;24127:18;;24120:34;24186:3;24171:19;;23970:226::o;24201:407::-;24403:2;24385:21;;;24442:2;24422:18;;;24415:30;24481:34;24476:2;24461:18;;24454:62;-1:-1:-1;;;24547:2:1;24532:18;;24525:41;24598:3;24583:19;;24375:233::o;24613:356::-;24815:2;24797:21;;;24834:18;;;24827:30;24893:34;24888:2;24873:18;;24866:62;24960:2;24945:18;;24787:182::o;24974:353::-;25176:2;25158:21;;;25215:2;25195:18;;;25188:30;25254:31;25249:2;25234:18;;25227:59;25318:2;25303:18;;25148:179::o;25332:399::-;25534:2;25516:21;;;25573:2;25553:18;;;25546:30;25612:34;25607:2;25592:18;;25585:62;-1:-1:-1;;;25678:2:1;25663:18;;25656:33;25721:3;25706:19;;25506:225::o;25736:400::-;25938:2;25920:21;;;25977:2;25957:18;;;25950:30;26016:34;26011:2;25996:18;;25989:62;-1:-1:-1;;;26082:2:1;26067:18;;26060:34;26126:3;26111:19;;25910:226::o;26141:400::-;26343:2;26325:21;;;26382:2;26362:18;;;26355:30;26421:34;26416:2;26401:18;;26394:62;-1:-1:-1;;;26487:2:1;26472:18;;26465:34;26531:3;26516:19;;26315:226::o;26546:355::-;26748:2;26730:21;;;26787:2;26767:18;;;26760:30;26826:33;26821:2;26806:18;;26799:61;26892:2;26877:18;;26720:181::o;26906:346::-;27108:2;27090:21;;;27147:2;27127:18;;;27120:30;-1:-1:-1;;;27181:2:1;27166:18;;27159:52;27243:2;27228:18;;27080:172::o;27257:345::-;27459:2;27441:21;;;27498:2;27478:18;;;27471:30;-1:-1:-1;;;27532:2:1;27517:18;;27510:51;27593:2;27578:18;;27431:171::o;27607:354::-;27809:2;27791:21;;;27848:2;27828:18;;;27821:30;27887:32;27882:2;27867:18;;27860:60;27952:2;27937:18;;27781:180::o;27966:340::-;28168:2;28150:21;;;28207:2;28187:18;;;28180:30;-1:-1:-1;;;28241:2:1;28226:18;;28219:46;28297:2;28282:18;;28140:166::o;28311:355::-;28513:2;28495:21;;;28552:2;28532:18;;;28525:30;28591:33;28586:2;28571:18;;28564:61;28657:2;28642:18;;28485:181::o;28671:355::-;28873:2;28855:21;;;28912:2;28892:18;;;28885:30;28951:33;28946:2;28931:18;;28924:61;29017:2;29002:18;;28845:181::o;29031:399::-;29233:2;29215:21;;;29272:2;29252:18;;;29245:30;29311:34;29306:2;29291:18;;29284:62;-1:-1:-1;;;29377:2:1;29362:18;;29355:33;29420:3;29405:19;;29205:225::o;29435:421::-;29637:2;29619:21;;;29676:2;29656:18;;;29649:30;29715:34;29710:2;29695:18;;29688:62;29786:27;29781:2;29766:18;;29759:55;29846:3;29831:19;;29609:247::o;29861:428::-;30063:2;30045:21;;;30102:2;30082:18;;;30075:30;;;30141:34;30121:18;;;30114:62;30212:34;30207:2;30192:18;;30185:62;30279:3;30264:19;;30035:254::o;30294:402::-;30496:2;30478:21;;;30535:2;30515:18;;;30508:30;30574:34;30569:2;30554:18;;30547:62;-1:-1:-1;;;30640:2:1;30625:18;;30618:36;30686:3;30671:19;;30468:228::o;30701:398::-;30903:2;30885:21;;;30942:2;30922:18;;;30915:30;30981:34;30976:2;30961:18;;30954:62;-1:-1:-1;;;31047:2:1;31032:18;;31025:32;31089:3;31074:19;;30875:224::o;31104:350::-;31306:2;31288:21;;;31345:2;31325:18;;;31318:30;31384:28;31379:2;31364:18;;31357:56;31445:2;31430:18;;31278:176::o;31459:398::-;31661:2;31643:21;;;31700:2;31680:18;;;31673:30;31739:34;31734:2;31719:18;;31712:62;-1:-1:-1;;;31805:2:1;31790:18;;31783:32;31847:3;31832:19;;31633:224::o;31862:177::-;32008:25;;;31996:2;31981:18;;31963:76::o;32044:391::-;32275:25;;;32331:2;32316:18;;32309:34;;;;32374:2;32359:18;;32352:34;32417:2;32402:18;;32395:34;32262:3;32247:19;;32229:206::o;32440:128::-;;32511:1;32507:6;32504:1;32501:13;32498:2;;;32517:18;;:::i;:::-;-1:-1:-1;32553:9:1;;32488:80::o;32573:217::-;;32639:1;32629:2;;-1:-1:-1;;;32664:31:1;;32718:4;32715:1;32708:15;32746:4;32671:1;32736:15;32629:2;-1:-1:-1;32775:9:1;;32619:171::o;32795:168::-;;32901:1;32897;32893:6;32889:14;32886:1;32883:21;32878:1;32871:9;32864:17;32860:45;32857:2;;;32908:18;;:::i;:::-;-1:-1:-1;32948:9:1;;32847:116::o;32968:125::-;;33036:1;33033;33030:8;33027:2;;;33041:18;;:::i;:::-;-1:-1:-1;33078:9:1;;33017:76::o;33098:380::-;33183:1;33173:12;;33230:1;33220:12;;;33241:2;;33295:4;33287:6;33283:17;33273:27;;33241:2;33348;33340:6;33337:14;33317:18;33314:38;33311:2;;;33394:10;33389:3;33385:20;33382:1;33375:31;33429:4;33426:1;33419:15;33457:4;33454:1;33447:15;33483:127;33544:10;33539:3;33535:20;33532:1;33525:31;33575:4;33572:1;33565:15;33599:4;33596:1;33589:15;33615:127;33676:10;33671:3;33667:20;33664:1;33657:31;33707:4;33704:1;33697:15;33731:4;33728:1;33721:15;33747:133;-1:-1:-1;;;;;33824:31:1;;33814:42;;33804:2;;33870:1;33867;33860:12;33885:120;33973:5;33966:13;33959:21;33952:5;33949:32;33939:2;;33995:1;33992;33985:12
Swarm Source
ipfs://b28595e7d2af68d37f1390fdd6d93ae02577e3658350d8fb7a88d60bf2a99270
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.