Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AccessHub
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
12345678910111213141516171819202122232425// SPDX-License-Identifier: MITpragma solidity ^0.8.26;import {IAccessHub} from "./interfaces/IAccessHub.sol";import {AccessControlEnumerableUpgradeable, Initializable} from "@openzeppelin-contracts-upgradeable/access/extensions/AccessControlEnumerableUpgradeable.sol";import {IVoter} from "./interfaces/IVoter.sol";import {IMinter} from "./interfaces/IMinter.sol";import {ILauncherPlugin} from "./interfaces/ILauncherPlugin.sol";import {IXShadow} from "./interfaces/IXShadow.sol";import {IX33} from "./interfaces/IX33.sol";import {IRamsesV3Factory} from "./CL/core/interfaces/IRamsesV3Factory.sol";import {IPairFactory} from "./interfaces/IPairFactory.sol";import {IFeeRecipientFactory} from "./interfaces/IFeeRecipientFactory.sol";import {IRamsesV3Pool} from "./CL/core/interfaces/IRamsesV3Pool.sol";import {IFeeCollector} from "./CL/gauge/interfaces/IFeeCollector.sol";import {IVoteModule} from "./interfaces/IVoteModule.sol";contract AccessHub isIAccessHub,Initializable,AccessControlEnumerableUpgradeable{/** Start of Storage Slots */
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.26;interface IAccessHub {error SAME_ADDRESS();error NOT_TIMELOCK(address);error MANUAL_EXECUTION_FAILURE(bytes);/// @dev Struct to hold initialization parametersstruct InitParams {address timelock;address treasury;address voter;address minter;address launcherPlugin;address xShadow;address x33;address ramsesV3PoolFactory;address poolFactory;address clGaugeFactory;address gaugeFactory;address feeRecipientFactory;address feeDistributorFactory;address feeCollector;address voteModule;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (access/extensions/AccessControlEnumerable.sol)pragma solidity ^0.8.20;import {IAccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/IAccessControlEnumerable.sol";import {AccessControlUpgradeable} from "../AccessControlUpgradeable.sol";import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";import {Initializable} from "../../proxy/utils/Initializable.sol";/*** @dev Extension of {AccessControl} that allows enumerating the members of each role.*/abstract contract AccessControlEnumerableUpgradeable is Initializable, IAccessControlEnumerable, AccessControlUpgradeable {using EnumerableSet for EnumerableSet.AddressSet;/// @custom:storage-location erc7201:openzeppelin.storage.AccessControlEnumerablestruct AccessControlEnumerableStorage {mapping(bytes32 role => EnumerableSet.AddressSet) _roleMembers;}// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.AccessControlEnumerable")) - 1)) & ~bytes32(uint256(0xff))bytes32 private constant AccessControlEnumerableStorageLocation = 0xc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000;function _getAccessControlEnumerableStorage() private pure returns (AccessControlEnumerableStorage storage $) {assembly {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity ^0.8.26;pragma abicoder v2;interface IVoter {error ACTIVE_GAUGE(address gauge);error GAUGE_INACTIVE(address gauge);error ALREADY_WHITELISTED();error NOT_AUTHORIZED(address caller);error NOT_WHITELISTED();error NOT_POOL();error FORBIDDEN();error NOT_INIT();error LENGTH_MISMATCH();error NO_GAUGE();error ALREADY_DISTRIBUTED(address gauge, uint256 period);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.0;interface IMinter {/// @dev error for if epoch 0 has already startederror STARTED();/// @dev error for if update_period is attempted to be called before startEmissionserror EMISSIONS_NOT_STARTED();/// @dev deviation too higherror TOO_HIGH();/// @dev no change in valueserror NO_CHANGE();/// @dev when attempting to update emissions more than once per perioderror SAME_PERIOD();/// @dev error for if a contract is not set correctlyerror INVALID_CONTRACT();event SetVeDist(address _value);event SetVoter(address _value);event Mint(address indexed sender, uint256 weekly);event RebaseUnsuccessful(uint256 _current, uint256 _currentPeriod);event EmissionsMultiplierUpdated(uint256 _emissionsMultiplier);/// @notice decay or inflation scaled to 10_000 = 100%/// @return _multiplier the emissions multiplierfunction emissionsMultiplier() external view returns (uint256 _multiplier);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.26;interface ILauncherPlugin {error NOT_AUTHORITY();error ALREADY_AUTHORITY();error NOT_OPERATOR();error ALREADY_OPERATOR();error NOT_ENABLED(address pool);error NO_FEEDIST();error ENABLED();error INVALID_TAKE();/// @dev struct that holds the configurations of each specific poolstruct LauncherConfigs {uint256 launcherTake;address takeRecipient;}event NewOperator(address indexed _old, address indexed _new);event NewAuthority(address indexed _newAuthority);event RemovedAuthority(address indexed _previousAuthority);event EnabledPool(address indexed pool, string indexed _name);event DisabledPool(address indexed pool);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.24;import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import {IVoter} from "./IVoter.sol";interface IXShadow is IERC20 {struct VestPosition {/// @dev amount of xShadowuint256 amount;/// @dev start unix timestampuint256 start;/// @dev start + MAX_VEST (end timestamp)uint256 maxEnd;/// @dev vest identifier (starting from 0)uint256 vestID;}error NOT_WHITELISTED(address);error NOT_MINTER();error ZERO();error NO_VEST();error ALREADY_EXEMPT();error NOT_EXEMPT();error CANT_RESCUE();error NO_CHANGE();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.24;import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";interface IX33 is IERC20 {error ZERO();error NOT_ENOUGH();error NOT_CONFORMED_TO_SCALE();error NOT_ACCESSHUB(address);error LOCKED();error REBASE_IN_PROGRESS();event Entered(address indexed user, uint256 amount, uint256 ratioAtDeposit);event Exited(address indexed user,uint256 _outAmount,uint256 ratioAtWithdrawal);event NewOperator(address _oldOperator, address _newOperator);event Compounded(uint256 oldRatio, uint256 newRatio, uint256 amount);event Rebased(uint256 oldRatio, uint256 newRatio, uint256 amount);event Unlocked(uint256 _ts);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title The interface for the Ramses V3 Factory/// @notice The Ramses V3 Factory facilitates creation of Ramses V3 pools and control over the protocol feesinterface IRamsesV3Factory {error IT();/// @dev Fee Too Largeerror FTL();error A0();error F0();error PE();/// @notice Emitted when a pool is created/// @param token0 The first token of the pool by address sort order/// @param token1 The second token of the pool by address sort order/// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip/// @param tickSpacing The minimum number of ticks between initialized ticks/// @param pool The address of the created poolevent PoolCreated(address indexed token0,address indexed token1,uint24 indexed fee,int24 tickSpacing,address pool);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.26;interface IPairFactory {error FEE_TOO_HIGH();error ZERO_FEE();/// @dev invalid assortmenterror IA();/// @dev zero addresserror ZA();/// @dev pair existserror PE();error NOT_AUTHORIZED();error INVALID_FEE_SPLIT();event PairCreated(address indexed token0,address indexed token1,address pair,uint256);event SetFee(uint256 indexed fee);event SetPairFee(address indexed pair, uint256 indexed fee);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.26;interface IFeeRecipientFactory {error INVALID_TREASURY_FEE();error NOT_AUTHORIZED();/// @notice the pair fees for a specific pair/// @param pair the pair to check/// @return feeRecipient the feeRecipient contract address for the pairfunction feeRecipientForPair(address pair) external view returns (address feeRecipient);/// @notice the last feeRecipient address created/// @return _feeRecipient the address of the last pair fees contractfunction lastFeeRecipient() external view returns (address _feeRecipient);/// @notice create the pair fees for a pair/// @param pair the address of the pair/// @return _feeRecipient the address of the newly created feeRecipientfunction createFeeRecipient(address pair) external returns (address _feeRecipient);/// @notice the fee % going to the treasury/// @return _feeToTreasury the fee %
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;import {IRamsesV3PoolImmutables} from './pool/IRamsesV3PoolImmutables.sol';import {IRamsesV3PoolState} from './pool/IRamsesV3PoolState.sol';import {IRamsesV3PoolDerivedState} from './pool/IRamsesV3PoolDerivedState.sol';import {IRamsesV3PoolActions} from './pool/IRamsesV3PoolActions.sol';import {IRamsesV3PoolOwnerActions} from './pool/IRamsesV3PoolOwnerActions.sol';import {IRamsesV3PoolErrors} from './pool/IRamsesV3PoolErrors.sol';import {IRamsesV3PoolEvents} from './pool/IRamsesV3PoolEvents.sol';/// @title The interface for a Ramses V3 Pool/// @notice A Ramses pool facilitates swapping and automated market making between any two assets that strictly conform/// to the ERC20 specification/// @dev The pool interface is broken up into many smaller piecesinterface IRamsesV3Pool isIRamsesV3PoolImmutables,IRamsesV3PoolState,IRamsesV3PoolDerivedState,IRamsesV3PoolActions,IRamsesV3PoolOwnerActions,IRamsesV3PoolErrors,IRamsesV3PoolEvents{/// @notice if a new period, advance on interactionfunction _advancePeriod() external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.26;import {IRamsesV3Pool} from "../../core/interfaces/IRamsesV3Pool.sol";interface IFeeCollector {error NOT_AUTHORIZED();error FTL();/// @notice Emitted when the treasury address is changed./// @param oldTreasury The previous treasury address./// @param newTreasury The new treasury address.event TreasuryChanged(address oldTreasury, address newTreasury);/// @notice Emitted when the treasury fees value is changed./// @param oldTreasuryFees The previous value of the treasury fees./// @param newTreasuryFees The new value of the treasury fees.event TreasuryFeesChanged(uint256 oldTreasuryFees, uint256 newTreasuryFees);/// @notice Emitted when protocol fees are collected from a pool and distributed to the fee distributor and treasury./// @param pool The address of the pool from which the fees were collected./// @param feeDistAmount0 The amount of fee tokens (token 0) distributed to the fee distributor./// @param feeDistAmount1 The amount of fee tokens (token 1) distributed to the fee distributor./// @param treasuryAmount0 The amount of fee tokens (token 0) allocated to the treasury./// @param treasuryAmount1 The amount of fee tokens (token 1) allocated to the treasury.event FeesCollected(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.26;interface IVoteModule {/** Custom Errors *//// @dev == 0error ZERO_AMOUNT();/// @dev if address is not xShadowerror NOT_XSHADOW();/// @dev error for when the cooldown period has not been passed yeterror COOLDOWN_ACTIVE();/// @dev error for when you try to deposit or withdraw for someone who isn't the msg.sendererror NOT_VOTEMODULE();/// @dev error for when the caller is not authorizederror UNAUTHORIZED();/// @dev error for accessHub gated functionserror NOT_ACCESSHUB();/// @dev error for when there is no change of stateerror NO_CHANGE();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (access/extensions/IAccessControlEnumerable.sol)pragma solidity ^0.8.20;import {IAccessControl} from "../IAccessControl.sol";/*** @dev External interface of AccessControlEnumerable declared to support ERC-165 detection.*/interface IAccessControlEnumerable is IAccessControl {/*** @dev Returns one of the accounts that have `role`. `index` must be a* value between 0 and {getRoleMemberCount}, non-inclusive.** Role bearers are not sorted in any particular way, and their ordering may* change at any point.** WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure* you perform all queries on the same block. See the following* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]* for more information.*/function getRoleMember(bytes32 role, uint256 index) external view returns (address);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)pragma solidity ^0.8.20;import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol";import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol";import {ERC165Upgradeable} from "../utils/introspection/ERC165Upgradeable.sol";import {Initializable} from "../proxy/utils/Initializable.sol";/*** @dev Contract module that allows children to implement role-based access* control mechanisms. This is a lightweight version that doesn't allow enumerating role* members except through off-chain means by accessing the contract event logs. Some* applications may benefit from on-chain enumerability, for those cases see* {AccessControlEnumerable}.** Roles are referred to by their `bytes32` identifier. These should be exposed* in the external API and be unique. The best way to achieve this is by* using `public constant` hash digests:** ```solidity* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");* ```** Roles can be used to represent a set of permissions. To restrict access to a
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/structs/EnumerableSet.sol)// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.pragma solidity ^0.8.20;/*** @dev Library for managing* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive* types.** Sets have the following properties:** - Elements are added, removed, and checked for existence in constant time* (O(1)).* - Elements are enumerated in O(n). No guarantees are made on the ordering.** ```solidity* contract Example {* // Add the library methods* using EnumerableSet for EnumerableSet.AddressSet;** // Declare a set state variable* EnumerableSet.AddressSet private mySet;* }* ```
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)pragma solidity ^0.8.20;/*** @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.** The initialization functions use a version number. Once a version number is used, it is consumed and cannot be* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in* case an upgrade adds a module that needs to be initialized.** For example:** [.hljs-theme-light.nopadding]* ```solidity* contract MyToken is ERC20Upgradeable {* function initialize() initializer public {* __ERC20_init("MyToken", "MTK");* }* }** contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-20 standard as defined in the ERC.*/interface IERC20 {/*** @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);/*** @dev Returns the value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that never changes/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same valuesinterface IRamsesV3PoolImmutables {/// @notice The contract that deployed the pool, which must adhere to the IRamsesV3Factory interface/// @return The contract addressfunction factory() external view returns (address);/// @notice The first of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token0() external view returns (address);/// @notice The second of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token1() external view returns (address);/// @notice The pool's fee in hundredths of a bip, i.e. 1e-6/// @return The feefunction fee() external view returns (uint24);/// @notice The pool tick spacing/// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive/// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, .../// This value is an int24 to avoid casting even though it is always positive.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that can change/// @notice These methods compose the pool's state, and can change with any frequency including multiple times/// per transactioninterface IRamsesV3PoolState {/// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas/// when accessed externally./// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value/// @return tick The current tick of the pool, i.e. according to the last tick transition that was run./// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick/// boundary./// @return observationIndex The index of the last oracle observation that was written,/// @return observationCardinality The current maximum number of observations stored in the pool,/// @return observationCardinalityNext The next maximum number of observations, to be updated when the observation./// @return feeProtocol The protocol fee for both tokens of the pool./// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0/// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee./// unlocked Whether the pool is currently locked to reentrancyfunction slot0()externalviewreturns (uint160 sqrtPriceX96,int24 tick,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that is not stored/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the/// blockchain. The functions here may have variable gas costs.interface IRamsesV3PoolDerivedState {/// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp/// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing/// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,/// you must call it with secondsAgos = [3600, 0]./// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in/// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio./// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned/// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp/// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block/// timestampfunction observe(uint32[] calldata secondsAgos) external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);/// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range/// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed./// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first/// snapshot is taken and the second snapshot is taken./// @param tickLower The lower tick of the range
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Permissionless pool actions/// @notice Contains pool methods that can be called by anyoneinterface IRamsesV3PoolActions {/// @notice Sets the initial price for the pool/// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value/// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96function initialize(uint160 sqrtPriceX96) external;/// @notice Adds liquidity for the given recipient/tickLower/tickUpper position/// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback/// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends/// on tickLower, tickUpper, the amount of liquidity, and the current price./// @param recipient The address for which the liquidity will be created/// @param index The index for which the liquidity will be created/// @param tickLower The lower tick of the position in which to add liquidity/// @param tickUpper The upper tick of the position in which to add liquidity/// @param amount The amount of liquidity to mint/// @param data Any data that should be passed through to the callback/// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback/// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callbackfunction mint(address recipient,uint256 index,
1234567891011121314151617181920212223// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Permissioned pool actions/// @notice Contains pool methods that may only be called by the factory ownerinterface IRamsesV3PoolOwnerActions {/// @notice Set the denominator of the protocol's % share of the feesfunction setFeeProtocol() external;/// @notice Collect the protocol fee accrued to the pool/// @param recipient The address to which collected protocol fees should be sent/// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1/// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0/// @return amount0 The protocol fee collected in token0/// @return amount1 The protocol fee collected in token1function collectProtocol(address recipient,uint128 amount0Requested,uint128 amount1Requested) external returns (uint128 amount0, uint128 amount1);function setFee(uint24 _fee) external;}
1234567891011121314151617181920// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Errors emitted by a pool/// @notice Contains all events emitted by the poolinterface IRamsesV3PoolErrors {error LOK();error TLU();error TLM();error TUM();error AI();error M0();error M1();error AS();error IIA();error L();error F0();error F1();error SPL();}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Events emitted by a pool/// @notice Contains all events emitted by the poolinterface IRamsesV3PoolEvents {/// @notice Emitted exactly once by a pool when #initialize is first called on the pool/// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize/// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96/// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the poolevent Initialize(uint160 sqrtPriceX96, int24 tick);/// @notice Emitted when liquidity is minted for a given position/// @param sender The address that minted the liquidity/// @param owner The owner of the position and recipient of any minted liquidity/// @param tickLower The lower tick of the position/// @param tickUpper The upper tick of the position/// @param amount The amount of liquidity minted to the position range/// @param amount0 How much token0 was required for the minted liquidity/// @param amount1 How much token1 was required for the minted liquidityevent Mint(address sender,address indexed owner,int24 indexed tickLower,int24 indexed tickUpper,uint128 amount,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (access/IAccessControl.sol)pragma solidity ^0.8.20;/*** @dev External interface of AccessControl declared to support ERC-165 detection.*/interface IAccessControl {/*** @dev The `account` is missing a role.*/error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);/*** @dev The caller of a function is not the expected one.** NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.*/error AccessControlBadConfirmation();/*** @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`** `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite* {RoleAdminChanged} not being emitted signaling this.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)pragma solidity ^0.8.20;import {Initializable} from "../proxy/utils/Initializable.sol";/*** @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 ContextUpgradeable is Initializable {function __Context_init() internal onlyInitializing {}function __Context_init_unchained() internal onlyInitializing {}function _msgSender() internal view virtual returns (address) {return msg.sender;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)pragma solidity ^0.8.20;import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";import {Initializable} from "../../proxy/utils/Initializable.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check* for the additional interface id that will be supported. For example:** ```solidity* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);* }* ```*/abstract contract ERC165Upgradeable is Initializable, IERC165 {function __ERC165_init() internal onlyInitializing {}function __ERC165_init_unchained() internal onlyInitializing {}
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[ERC].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526{"remappings": ["@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/","@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/","@forge-std-1.9.4/=dependencies/forge-std-1.9.4/","@openzeppelin-contracts-upgradeable/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/","@openzeppelin-contracts/contracts/=dependencies/@openzeppelin-contracts-5.1.0/","@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-5.1.0/","forge-std/=dependencies/forge-std-1.9.4/src/","permit2/=lib/permit2/","@openzeppelin-3.4.2/=node_modules/@openzeppelin-3.4.2/","@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/","@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/","@uniswap/=node_modules/@uniswap/","base64-sol/=node_modules/base64-sol/","eth-gas-reporter/=node_modules/eth-gas-reporter/","forge-std-1.9.4/=dependencies/forge-std-1.9.4/src/","hardhat/=node_modules/hardhat/","solmate/=node_modules/solmate/"],"optimizer": {"enabled": true,"runs": 200000},"metadata": {"useLiteralContent": false,
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"LENGTH_MISMATCH","type":"error"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"MANUAL_EXECUTION_FAILURE","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NOT_TIMELOCK","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"SAME_ADDRESS","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROTOCOL_OPERATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_FEE_SETTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"address[]","name":"_rewards","type":"address[]"},{"internalType":"bool[]","name":"_addReward","type":"bool[]"}],"name":"augmentGaugeRewardsForPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clGaugeFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositToken","type":"address"}],"name":"createArbitraryGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"disablePoolInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"enablePoolInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"uint24","name":"initialFee","type":"uint24"}],"name":"enableTickSpacing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"contract IFeeCollector","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDistributorFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipientFactory","outputs":[{"internalType":"contract IFeeRecipientFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gaugeFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMembers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_token","type":"address[]"},{"internalType":"bool[]","name":"_whitelisted","type":"bool[]"}],"name":"governanceWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAuthority","type":"address"},{"internalType":"string","name":"_label","type":"string"}],"name":"grantAuthorityInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"timelock","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"voter","type":"address"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"address","name":"launcherPlugin","type":"address"},{"internalType":"address","name":"xShadow","type":"address"},{"internalType":"address","name":"x33","type":"address"},{"internalType":"address","name":"ramsesV3PoolFactory","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"},{"internalType":"address","name":"clGaugeFactory","type":"address"},{"internalType":"address","name":"gaugeFactory","type":"address"},{"internalType":"address","name":"feeRecipientFactory","type":"address"},{"internalType":"address","name":"feeDistributorFactory","type":"address"},{"internalType":"address","name":"feeCollector","type":"address"},{"internalType":"address","name":"voteModule","type":"address"}],"internalType":"struct IAccessHub.InitParams","name":"params","type":"tuple"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_emissionsToken","type":"address"},{"internalType":"address","name":"_legacyFactory","type":"address"},{"internalType":"address","name":"_gauges","type":"address"},{"internalType":"address","name":"_feeDistributorFactory","type":"address"},{"internalType":"address","name":"_minter","type":"address"},{"internalType":"address","name":"_msig","type":"address"},{"internalType":"address","name":"_xShadow","type":"address"},{"internalType":"address","name":"_clFactory","type":"address"},{"internalType":"address","name":"_clGaugeFactory","type":"address"},{"internalType":"address","name":"_nfpManager","type":"address"},{"internalType":"address","name":"_feeRecipientFactory","type":"address"},{"internalType":"address","name":"_voteModule","type":"address"},{"internalType":"address","name":"_launcherPlugin","type":"address"}],"name":"initializeVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pairs","type":"address[]"}],"name":"killGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_authority","type":"address"},{"internalType":"string","name":"_label","type":"string"}],"name":"labelAuthorityInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launcherPlugin","outputs":[{"internalType":"contract ILauncherPlugin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"migrateOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldPool","type":"address"},{"internalType":"address","name":"_newPool","type":"address"}],"name":"migratePoolInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"contract IMinter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"operatorRedeemXShadow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"poolFactory","outputs":[{"internalType":"contract IPairFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ramsesV3PoolFactory","outputs":[{"internalType":"contract IRamsesV3Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"address[]","name":"_rewards","type":"address[]"}],"name":"removeFeeDistributorRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"rescueTrappedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"retrieveStuckEmissionsToGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pairs","type":"address[]"}],"name":"reviveGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldAuthority","type":"address"}],"name":"revokeAuthorityInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_take","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"setConfigsInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_candidates","type":"address[]"},{"internalType":"bool[]","name":"_exempt","type":"bool[]"}],"name":"setCooldownExemption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"setEmissionsMultiplierInMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pct","type":"uint256"}],"name":"setEmissionsRatioInVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeCollector","type":"address"}],"name":"setFeeCollectorInFactoryV3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"uint8[]","name":"_feeProtocol","type":"uint8[]"}],"name":"setFeeSplitCL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"uint256[]","name":"_feeSplits","type":"uint256[]"}],"name":"setFeeSplitLegacy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setFeeSplitWhenNoGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeToTreasury","type":"uint256"}],"name":"setFeeToTreasuryInFeeRecipientFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_feeProtocolGlobal","type":"uint8"}],"name":"setGlobalClFeeProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setLegacyFeeGlobal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeSplit","type":"uint256"}],"name":"setLegacyFeeSplitGlobal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"setMainTickSpacingInVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"setNewGovernorInVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDuration","type":"uint256"}],"name":"setNewRebaseStreamingDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setNewTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCooldown","type":"uint256"}],"name":"setNewVoteModuleCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"setOperatorInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setSkimEnabledLegacy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"uint24[]","name":"_swapFees","type":"uint24[]"},{"internalType":"bool[]","name":"_concentrated","type":"bool[]"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFees","type":"uint256"}],"name":"setTreasuryFeesInFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"setTreasuryInFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasuryInFeeRecipientFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasuryInLegacyFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"setVoterAddressInFactoryV3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleXShadowGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"transferOperatorInX33","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_who","type":"address[]"},{"internalType":"bool[]","name":"_whitelisted","type":"bool[]"}],"name":"transferWhitelistInXShadow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voteModule","outputs":[{"internalType":"contract IVoteModule","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"contract IVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x33","outputs":[{"internalType":"contract IX33","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xShadow","outputs":[{"internalType":"contract IXShadow","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080806040523460aa575f51602061558f5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b6040516154e090816100af8239f35b6001600160401b0319166001600160401b039081175f51602061558f5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c806271cdfc146145b857806301ffc9a7146144c657806302be9a90146143d2578063075461721461438057806307a8d4ef146140b657806309651f7d14613ed25780630c2e061f14613e165780630d52333c14613dc45780631635880614613d085780631cff79cd14613bea5780631eadbd8b14613b20578063248a9ca314613aaf5780632a59c80614613a105780632eb64795146139565780632f2ff15d146138da578063360e16de146137fa57806336568abe146137715780633abdbf2a146136ba5780633eadd56e1461361b5780634135afbe146135445780634219dc40146134f2578063421f2aae14612c965780634256f5e714612c445780634345f59a14612b5457806346c96aac14612b0257806349fe822814612a465780634b9880c11461298c5780634cb4d8271461288f5780634d4ce1c11461278857806352e0970f146126cc5780635cb62a081461262d57806361d027b3146125db5780636379808f1461251f578063687b01351461248057806369e0bc051461229d5780636e57f00e146121e157806378b1a8c7146121885780637a707730146120e95780637bebe3811461209757806380a1ebbb14611f9057806382169aec14611dd257806385caf28b14611d805780638cb422f014611d275780639010d07c14611c985780639029105814611bef57806390bcc5a2146118c457806391742be0146117a057806391d148541461170b57806393208a2b146116b95780639647d141146116675780639987e757146115ab578063a217fddf14611571578063a3246ad314611477578063a71504ad146113d8578063ab0e01921461131c578063ac33ef85146112ca578063b7923cd014611252578063ba013510146111b3578063be02ec3814610f13578063beb7dc3414610e20578063c1463c1514610d4b578063c415b95c14610cf9578063c5f720e414610ca7578063c9d068fd14610beb578063ca15c87314610b84578063ca1699e8146108d9578063ca62573a1461082c578063d32af6c1146107da578063d33219b414610789578063d547741f14610704578063dbb466df1461063e578063e6dca2b214610582578063e95245fd146104c6578063eee0fdb4146103fd5763f7553c5214610352575f80fd5b346103eb57806103613661479a565b61036c929192614b1e565b73ffffffffffffffffffffffffffffffffffffffff60075416803b156103f9576103c993858094604051968795869485937f2cd21e0000000000000000000000000000000000000000000000000000000000855260048501614aee565b03925af180156103ee576103da5750f35b816103e4916148a4565b6103eb5780f35b80fd5b6040513d84823e3d90fd5b8480fd5b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806004358060020b8091036104c3576024359062ffffff82168092036104c157610455614b1e565b73ffffffffffffffffffffffffffffffffffffffff600a541691823b156104bf57604484928360405195869485937feee0fdb4000000000000000000000000000000000000000000000000000000008552600485015260248401525af180156103ee576103da5750f35b505b505b50fd5b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806104ff61466d565b610507614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937fb3ab15fb0000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806105bb61466d565b6105c3614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937fdcaaa61b0000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061067761466d565b61067f614690565b90610688614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541691823b156104bf576040517f772b7e9700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201529082908290818381604481016103c9565b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57610785600435610742614690565b9061078061077b825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b614c2e565b614d18565b5080f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600c5416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578060043560ff81168091036104c357610873614b1e565b73ffffffffffffffffffffffffffffffffffffffff600a541690813b156104c15782916024839260405194859384927fb613a14100000000000000000000000000000000000000000000000000000000845260048401525af180156103ee576103da5750f35b50346103eb576108e836614707565b919093946108f4614b1e565b81861480610b7b575b15610b53579086939291845b878110610914578580f35b73ffffffffffffffffffffffffffffffffffffffff6005541661094061093b838b86614988565b614a18565b9073ffffffffffffffffffffffffffffffffffffffff604051927f2045be90000000000000000000000000000000000000000000000000000000008452166004830152602082602481845afa918215610b48578892610b18575b506109ae6109a984888c614988565b6149c5565b15610a7d575073ffffffffffffffffffffffffffffffffffffffff60055416906109dc61093b84878a614988565b823b15610a79576040517fd36f072800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201529087908290604490829084905af1908115610a6e578791610a55575b50506001905b01610909565b81610a5f916148a4565b610a6a57855f610a49565b8580fd5b6040513d89823e3d90fd5b8880fd5b90610a8c61093b84878a614988565b823b15610a79576040517fffc0a01e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201529087908290604490829084905af1908115610a6e578791610b03575b5050600190610a4f565b81610b0d916148a4565b610a6a57855f610af9565b610b3a91925060203d8111610b41575b610b3281836148a4565b810190614912565b905f61099a565b503d610b28565b6040513d8a823e3d90fd5b6004877f899ef10d000000000000000000000000000000000000000000000000000000008152fd5b508282146108fd565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57604060209160043581527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200083522054604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780610c2461466d565b610c2c614b1e565b73ffffffffffffffffffffffffffffffffffffffff600b541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937ff0f442600000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60095416604051908152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600d5416604051908152f35b50346103eb5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780610d8461466d565b610d8c6146b3565b90610d95614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104bf57606473ffffffffffffffffffffffffffffffffffffffff918580948460405197889687957fd309dbc600000000000000000000000000000000000000000000000000000000875216600486015260243560248601521660448401525af180156103ee576103da5750f35b50346103eb5780610e3036614838565b909192610e3b614b1e565b73ffffffffffffffffffffffffffffffffffffffff6008541690813b15610a6a57610e9890604051957fbeb7dc34000000000000000000000000000000000000000000000000000000008752604060048801526044870191614a87565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8584030160248601528083527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610a6a578560208682968196829560051b809285830137010301925af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578060043567ffffffffffffffff81116104c357610f649036906004016146d6565b9190610f6e614b1e565b815b838110610f7b578280f35b610f8961093b828685614988565b73ffffffffffffffffffffffffffffffffffffffff80600d5416911690803b156103f9578480916024604051809481937f2a54db010000000000000000000000000000000000000000000000000000000083528760048401525af190811561116a57859161119e575b505073ffffffffffffffffffffffffffffffffffffffff600554166040517f2045be90000000000000000000000000000000000000000000000000000000008152826004820152602081602481855afa908115611193578691611175575b50813b15610a6a5773ffffffffffffffffffffffffffffffffffffffff602487928360405195869485937f992a79330000000000000000000000000000000000000000000000000000000085521660048401525af190811561116a578591611151575b505073ffffffffffffffffffffffffffffffffffffffff600a541690813b156103f95784916044839260405194859384927f76734e3e0000000000000000000000000000000000000000000000000000000084526004840152600560248401525af190811561114657849161112d575b5050600101610f70565b81611137916148a4565b61114257825f611123565b8280fd5b6040513d86823e3d90fd5b8161115b916148a4565b61116657835f6110b3565b8380fd5b6040513d87823e3d90fd5b61118d915060203d8111610b4157610b3281836148a4565b5f611050565b6040513d88823e3d90fd5b816111a8916148a4565b61116657835f610ff2565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576111eb614b1e565b8073ffffffffffffffffffffffffffffffffffffffff60055416803b156104c3578180916024604051809481937f0f14763200000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb57806112623661479a565b61126d929192614b1e565b73ffffffffffffffffffffffffffffffffffffffff60075416803b156103f9576103c993858094604051968795869485937fc657c71800000000000000000000000000000000000000000000000000000000855260048501614aee565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600a5416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061135561466d565b61135d614b1e565b73ffffffffffffffffffffffffffffffffffffffff600c541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937ff0f442600000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57611410614b1e565b8073ffffffffffffffffffffffffffffffffffffffff600c5416803b156104c3578180916024604051809481937f019494b300000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5760043581527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060205260408120604051908160208254918281520190819285526020852090855b81811061155b57505050826115049103836148a4565b604051928392602084019060208552518091526040840192915b81811061152c575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff1684528594506020938401939092019160010161151e565b82548452602090930192600192830192016114ee565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602090604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806115e461466d565b6115ec614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937f595aeb500000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60075416604051908152f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5773ffffffffffffffffffffffffffffffffffffffff604061175a614690565b9260043581527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020522091165f52602052602060ff60405f2054166040519015158152f35b50346103eb576117af36614838565b6117ba949394614b1e565b80830361189c5773ffffffffffffffffffffffffffffffffffffffff6008541694853b156103f957611820602091604051957f94126bb1000000000000000000000000000000000000000000000000000000008752604060048801526044870191614a87565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85820301602486015282815201919084905b80821061187657505050818394818581819503925af180156103ee576103da5750f35b9091928335801515809103611898578152602090810193019160010190611853565b8680fd5b6004847f899ef10d000000000000000000000000000000000000000000000000000000008152fd5b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5760043567ffffffffffffffff8111611bad576119149036906004016146d6565b9061191d614b1e565b825b82811061192a578380f35b8361193961093b838686614988565b73ffffffffffffffffffffffffffffffffffffffff600d541673ffffffffffffffffffffffffffffffffffffffff821690803b15611166578380916024604051809481937f2a54db010000000000000000000000000000000000000000000000000000000083528760048401525af1908115611146578491611bda575b505073ffffffffffffffffffffffffffffffffffffffff6005541690604051907f2045be900000000000000000000000000000000000000000000000000000000082526004820152602081602481855afa908115611146578491611bbc575b50813b156111665773ffffffffffffffffffffffffffffffffffffffff602485928360405195869485937f9f06247b0000000000000000000000000000000000000000000000000000000085521660048401525af1908115611bb1578391611b98575b505073ffffffffffffffffffffffffffffffffffffffff600a5416906040517f527eb4bc000000000000000000000000000000000000000000000000000000008152602081600481865afa908115611146578491611b5d575b50823b15611166576040517f76734e3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260ff1660248201529082908290604490829084905af180156103ee57611b48575b505060010161191f565b81611b52916148a4565b61116657835f611b3e565b90506020813d8211611b90575b81611b77602093836148a4565b81010312611166575160ff81168103611166575f611ad1565b3d9150611b6a565b81611ba2916148a4565b611bad57815f611a78565b5080fd5b6040513d85823e3d90fd5b611bd4915060203d8111610b4157610b3281836148a4565b5f611a15565b81611be4916148a4565b61114257825f6119b6565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780611c28614829565b611c30614b1e565b73ffffffffffffffffffffffffffffffffffffffff600b541690813b156104c15782916024839260405194859384927f90291058000000000000000000000000000000000000000000000000000000008452151560048401525af180156103ee576103da5750f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5773ffffffffffffffffffffffffffffffffffffffff611d1760209260043581527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000845260406024359120615281565b90549060031b1c16604051908152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5760206040517f0cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c4598152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600e5416604051908152f35b50346103eb57611de136614838565b909291611dec614b1e565b818103611f6857908491825b818110611e03578380f35b611e116109a9828589614988565b15611ec05773ffffffffffffffffffffffffffffffffffffffff60055416611e3d61093b838589614988565b813b15610a6a5773ffffffffffffffffffffffffffffffffffffffff602487928360405195869485937f9b19251a0000000000000000000000000000000000000000000000000000000085521660048401525af190811561116a578591611eab575b50506001905b01611df8565b81611eb5916148a4565b61116657835f611e9f565b73ffffffffffffffffffffffffffffffffffffffff60055416611ee761093b838589614988565b813b15610a6a5773ffffffffffffffffffffffffffffffffffffffff602487928360405195869485937f9c7f33150000000000000000000000000000000000000000000000000000000085521660048401525af190811561116a578591611f53575b5050600190611ea5565b81611f5d916148a4565b61116657835f611f49565b6004857f899ef10d000000000000000000000000000000000000000000000000000000008152fd5b50346103eb5780611fa036614838565b9391611fc89391933373ffffffffffffffffffffffffffffffffffffffff855416331461493e565b825b818110611fd5578380f35b73ffffffffffffffffffffffffffffffffffffffff600e5416611ffc61093b838587614988565b61200a6109a9848a8a614988565b823b15611898576040517fc717374a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092166004830152151560248201529085908290604490829084905af190811561116a578591612082575b5050600101611fca565b8161208c916148a4565b61116657835f612078565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57612121614b1e565b8073ffffffffffffffffffffffffffffffffffffffff60085416803b156104c3578180916024604051809481937f32fef3cf00000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5760206040517fb3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e58152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061221a61466d565b612222614b1e565b73ffffffffffffffffffffffffffffffffffffffff6009541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937f29605e770000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb576122ac36614838565b6122b893919293614b1e565b808403611f6857908491825b8581106122cf578380f35b73ffffffffffffffffffffffffffffffffffffffff600554166122f661093b838987614988565b73ffffffffffffffffffffffffffffffffffffffff604051917f2045be90000000000000000000000000000000000000000000000000000000008352166004820152602081602481855afa908115611193578691612462575b5073ffffffffffffffffffffffffffffffffffffffff604051917ff55858b0000000000000000000000000000000000000000000000000000000008352166004820152602081602481855afa908115611193578691612444575b506123b861093b84868a614988565b823b15611898576040517f234823d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201529085908290604490829084905af190811561116a57859161242f575b50506001016122c4565b81612439916148a4565b61116657835f612425565b61245c915060203d8111610b4157610b3281836148a4565b5f6123a9565b61247a915060203d8111610b4157610b3281836148a4565b5f61234f565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576124b8614b1e565b8073ffffffffffffffffffffffffffffffffffffffff600b5416803b156104c3578180916024604051809481937f69fe0e2d00000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061255861466d565b612560614b1e565b73ffffffffffffffffffffffffffffffffffffffff6008541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937f6379808f0000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57612665614b1e565b8073ffffffffffffffffffffffffffffffffffffffff600b5416803b156104c3578180916024604051809481937fcd962a0600000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061270561466d565b61270d614b1e565b73ffffffffffffffffffffffffffffffffffffffff600d541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937ff0f442600000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576127c0614829565b6127c8614b1e565b1561282e578073ffffffffffffffffffffffffffffffffffffffff60085416803b156104c3578180916004604051809481937f3f4ba83a0000000000000000000000000000000000000000000000000000000083525af180156103ee576103da57505080f35b8073ffffffffffffffffffffffffffffffffffffffff60085416803b156104c3578180916004604051809481937f8456cb590000000000000000000000000000000000000000000000000000000083525af180156103ee576103da57505080f35b50346103eb5761289e36614838565b6128aa93919293614ba6565b808403611f6857908491825b8581106128c1578380f35b73ffffffffffffffffffffffffffffffffffffffff600a54166128e861093b838987614988565b6128f3838589614988565b3560ff8116810361189857823b15611898576040517f76734e3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260ff1660248201529085908290604490829084905af190811561116a578591612977575b50506001016128b6565b81612981916148a4565b61116657835f61296d565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576129df3373ffffffffffffffffffffffffffffffffffffffff835416331461493e565b8073ffffffffffffffffffffffffffffffffffffffff600e5416803b156104c3578180916024604051809481937ff8f1c1ea00000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780612a7f61466d565b612a87614b1e565b73ffffffffffffffffffffffffffffffffffffffff6005541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937fc42cf5350000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60055416604051908152f35b50346103eb57612b6336614838565b612b6f93919293614ba6565b808403611f6857908491825b858110612b86578380f35b73ffffffffffffffffffffffffffffffffffffffff600b5416612bad61093b838987614988565b612bb8838589614988565b35823b15611898576040517f407c301e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260248201529085908290604490829084905af190811561116a578591612c2f575b5050600101612b7b565b81612c39916148a4565b61116657835f612c25565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60085416604051908152f35b50346103eb576101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159067ffffffffffffffff8116801590816134ea575b60011490816134e0575b1590816134d7575b506134af578160017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005561345a575b5073ffffffffffffffffffffffffffffffffffffffff612d896149d2565b167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff612dce6149f5565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015560443573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600554161760055560643573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600654161760065560843573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600754161760075560a43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600854161760085560c43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600954161760095560e43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a556101043573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b556101643573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600c541617600c556101a43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600d541617600d556101c43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600e541617600e556101243573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002556101443573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff000000000000000000000000000000000000000060035416176003556101843573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff000000000000000000000000000000000000000060045416176004556131e36149f5565b6131ec81614d78565b6133e8575b506131fa6149f5565b61320381614e81565b613376575b506132116149f5565b61321a81614f85565b613324575b506132286149d2565b61323181614f85565b6132d2575b5061323e5780f35b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b8280527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020526040832061331d9173ffffffffffffffffffffffffffffffffffffffff1690615296565b505f613236565b8280527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020526040832061336f9173ffffffffffffffffffffffffffffffffffffffff1690615296565b505f61321f565b7fb3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e583527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602052604083206133e19173ffffffffffffffffffffffffffffffffffffffff1690615296565b505f613208565b7f0cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c45983527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602052604083206134539173ffffffffffffffffffffffffffffffffffffffff1690615296565b505f6131f1565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f612d6b565b6004837ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f612d18565b303b159150612d10565b839150612d06565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600b5416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061357d61466d565b6135a03373ffffffffffffffffffffffffffffffffffffffff845416331461493e565b73ffffffffffffffffffffffffffffffffffffffff600a541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937fa42dce800000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57613653614b1e565b8073ffffffffffffffffffffffffffffffffffffffff60065416803b156104c3578180916024604051809481937fd47ffef100000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576136f261466d565b815473ffffffffffffffffffffffffffffffffffffffff808216926137193385331461493e565b16809214613749577fffffffffffffffffffffffff00000000000000000000000000000000000000001617815580f35b6004837fcb105135000000000000000000000000000000000000000000000000000000008152fd5b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576137a9614690565b3373ffffffffffffffffffffffffffffffffffffffff8216036137d25761078590600435614d18565b6004827f6697b232000000000000000000000000000000000000000000000000000000008152fd5b50346103eb5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061383361466d565b61383b614690565b906044358060020b8091036104bf57613852614b1e565b73ffffffffffffffffffffffffffffffffffffffff60055416803b156103f95784928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967fe48bcc7d00000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af180156103ee576103da5750f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57610785600435613918614690565b9061395161077b825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b614cb4565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576139a93373ffffffffffffffffffffffffffffffffffffffff835416331461493e565b8073ffffffffffffffffffffffffffffffffffffffff600e5416803b156104c3578180916024604051809481937fd8e2d8f300000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57613a48614b1e565b8073ffffffffffffffffffffffffffffffffffffffff600d5416803b156104c3578180916024604051809481937fd8e0d20c00000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576020613b186004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780613b5961466d565b6024359081151582036104c157613b6e614b1e565b73ffffffffffffffffffffffffffffffffffffffff600b541691823b156104bf576040517fe0bd111d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152151560248201529082908290818381604481016103c9565b50346103eb578080613bfb3661479a565b9291613c239491943373ffffffffffffffffffffffffffffffffffffffff845416331461493e565b60405184868237828186810182815203925af13d15613d03573d67ffffffffffffffff8111613cd65760405190613c8260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601836148a4565b81528460203d92013e5b15613c95578280f35b613cd26040519283927f47158033000000000000000000000000000000000000000000000000000000008452602060048501526024840191614a49565b0390fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b613c8c565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780613d4161466d565b613d49614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937f2aeb8f220000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780613e4f61466d565b613e57614b1e565b73ffffffffffffffffffffffffffffffffffffffff60055416803b156104c1576040517f5824780d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602480359083015282908290818381604481016103c9565b50346103eb57613ee136614707565b91909493613eed614ba6565b818114806140ad575b15610b53579086939291845b818110613f0d578580f35b613f1b6109a982868b614988565b15613fea5773ffffffffffffffffffffffffffffffffffffffff600a5416613f4761093b83858b614988565b90613f5b613f5684878a614988565b614a39565b91813b15610a7957604473ffffffffffffffffffffffffffffffffffffffff918a809462ffffff60405197889687957fba364c3d0000000000000000000000000000000000000000000000000000000087521660048601521660248401525af1908115610a6e578791613fd5575b50506001905b01613f02565b81613fdf916148a4565b610a6a57855f613fc9565b73ffffffffffffffffffffffffffffffffffffffff600b541661401161093b83858b614988565b90614020613f5684878a614988565b91813b15610a7957604473ffffffffffffffffffffffffffffffffffffffff918a809462ffffff60405197889687957fa93a897d0000000000000000000000000000000000000000000000000000000087521660048601521660248401525af1908115610a6e578791614098575b5050600190613fcf565b816140a2916148a4565b610a6a57855f61408e565b50828214613ef6565b50346103eb576101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806140f061466d565b6140f8614690565b6141006146b3565b9060643573ffffffffffffffffffffffffffffffffffffffff81168091036103f95760843573ffffffffffffffffffffffffffffffffffffffff8116809103610a6a5760a43573ffffffffffffffffffffffffffffffffffffffff81168091036118985760c43573ffffffffffffffffffffffffffffffffffffffff811680910361437c5760e43573ffffffffffffffffffffffffffffffffffffffff8116809103610a79576101043573ffffffffffffffffffffffffffffffffffffffff811680910361437857610124359173ffffffffffffffffffffffffffffffffffffffff831680930361437457610144359373ffffffffffffffffffffffffffffffffffffffff851680950361437057610164359573ffffffffffffffffffffffffffffffffffffffff871680970361436c57610184359773ffffffffffffffffffffffffffffffffffffffff8916809903614368576142788e73ffffffffffffffffffffffffffffffffffffffff33915416331461493e565b73ffffffffffffffffffffffffffffffffffffffff60055416998a3b15614364578e9c6040519e8f9d8e917f2fdd983d00000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff16600483015273ffffffffffffffffffffffffffffffffffffffff16906024015273ffffffffffffffffffffffffffffffffffffffff1660448d015260648c015260848b015260a48a015260c489015260e488015261010487015261012486015261014485015261016484015261018483015281835a926101a493f180156103ee576103da5750f35b8e80fd5b8d80fd5b8c80fd5b8b80fd5b8a80fd5b8980fd5b8780fd5b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b50346144c25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126144c25761440a61466d565b61442d3373ffffffffffffffffffffffffffffffffffffffff5f5416331461493e565b73ffffffffffffffffffffffffffffffffffffffff600a541690813b156144c25773ffffffffffffffffffffffffffffffffffffffff60245f928360405195869485937f4bc2a6570000000000000000000000000000000000000000000000000000000085521660048401525af180156144b7576144a9575080f35b6144b591505f906148a4565b005b6040513d5f823e3d90fd5b5f80fd5b346144c25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126144c2576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036144c257807f5a05180f000000000000000000000000000000000000000000000000000000006020921490811561455b575b506040519015158152f35b7f7965db0b0000000000000000000000000000000000000000000000000000000081149150811561458e575b5082614550565b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482614587565b346144c25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126144c2576145ef61466d565b6145f7614b1e565b602073ffffffffffffffffffffffffffffffffffffffff60248160055416935f60405195869485937e71cdfc0000000000000000000000000000000000000000000000000000000085521660048401525af180156144b75761465557005b6144b59060203d602011610b4157610b3281836148a4565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036144c257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036144c257565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036144c257565b9181601f840112156144c25782359167ffffffffffffffff83116144c2576020808501948460051b0101116144c257565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126144c25760043567ffffffffffffffff81116144c25781614750916004016146d6565b9290929160243567ffffffffffffffff81116144c25781614773916004016146d6565b929092916044359067ffffffffffffffff82116144c257614796916004016146d6565b9091565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126144c25760043573ffffffffffffffffffffffffffffffffffffffff811681036144c2579160243567ffffffffffffffff81116144c25760040182601f820112156144c25780359267ffffffffffffffff84116144c257602084818401930101116144c2579190565b6004359081151582036144c257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126144c25760043567ffffffffffffffff81116144c25781614881916004016146d6565b929092916024359067ffffffffffffffff82116144c257614796916004016146d6565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176148e557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b908160209103126144c2575173ffffffffffffffffffffffffffffffffffffffff811681036144c25790565b156149465750565b73ffffffffffffffffffffffffffffffffffffffff907fc483b14a000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b91908110156149985760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3580151581036144c25790565b60043573ffffffffffffffffffffffffffffffffffffffff811681036144c25790565b60243573ffffffffffffffffffffffffffffffffffffffff811681036144c25790565b3573ffffffffffffffffffffffffffffffffffffffff811681036144c25790565b3562ffffff811681036144c25790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b916020908281520191905f905b808210614aa15750505090565b90919283359073ffffffffffffffffffffffffffffffffffffffff821682036144c2576020809173ffffffffffffffffffffffffffffffffffffffff600194168152019401920190614a94565b60409073ffffffffffffffffffffffffffffffffffffffff614b1b95931681528160208201520191614a49565b90565b335f9081527f3b05fb06f7501e09d6a8a50c59dac59cd7c8dab47e848ae345bfca5e4d5d9e3c602052604090205460ff1615614b5657565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527fb3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e560245260445ffd5b335f9081527f9eacbbea19e14d84ae6fc89bafe3fe4134e0cfcdae6894d6d7239131d0cd8325602052604090205460ff1615614bde57565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f0cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c45960245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f20541615614c855750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b614cbe8282615067565b9182614cc957505090565b614d14915f527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060205273ffffffffffffffffffffffffffffffffffffffff60405f20911690615296565b5090565b614d228282615179565b9182614d2d57505090565b614d14915f527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060205273ffffffffffffffffffffffffffffffffffffffff60405f20911690615324565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f9eacbbea19e14d84ae6fc89bafe3fe4134e0cfcdae6894d6d7239131d0cd8325602052604090205460ff16614e7c5773ffffffffffffffffffffffffffffffffffffffff165f8181527f9eacbbea19e14d84ae6fc89bafe3fe4134e0cfcdae6894d6d7239131d0cd83256020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f0cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c459907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b505f90565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f3b05fb06f7501e09d6a8a50c59dac59cd7c8dab47e848ae345bfca5e4d5d9e3c602052604090205460ff16614e7c5773ffffffffffffffffffffffffffffffffffffffff165f8181527f3b05fb06f7501e09d6a8a50c59dac59cd7c8dab47e848ae345bfca5e4d5d9e3c6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907fb3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e5907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16614e7c5773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f1461517357805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f1461517357805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b8054821015614998575f5260205f2001905f90565b6001810190825f528160205260405f2054155f1461531d578054680100000000000000008110156148e55761530a6152d5826001879401855584615281565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b905554915f5260205260405f2055600190565b5050505f90565b906001820191815f528260205260405f20548015155f146154a2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111615475578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161547557818103615440575b50505080548015615413577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906153d68282615281565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b6154606154506152d59386615281565b90549060031b1c92839286615281565b90555f528360205260405f20555f808061539e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b505050505f9056fea26469706673582212200449ca72b0687823f1457d0142828e438ee405bca799581598e82f22c697b75964736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00
Deployed Bytecode
0x60806040526004361015610011575f80fd5b5f5f3560e01c806271cdfc146145b857806301ffc9a7146144c657806302be9a90146143d2578063075461721461438057806307a8d4ef146140b657806309651f7d14613ed25780630c2e061f14613e165780630d52333c14613dc45780631635880614613d085780631cff79cd14613bea5780631eadbd8b14613b20578063248a9ca314613aaf5780632a59c80614613a105780632eb64795146139565780632f2ff15d146138da578063360e16de146137fa57806336568abe146137715780633abdbf2a146136ba5780633eadd56e1461361b5780634135afbe146135445780634219dc40146134f2578063421f2aae14612c965780634256f5e714612c445780634345f59a14612b5457806346c96aac14612b0257806349fe822814612a465780634b9880c11461298c5780634cb4d8271461288f5780634d4ce1c11461278857806352e0970f146126cc5780635cb62a081461262d57806361d027b3146125db5780636379808f1461251f578063687b01351461248057806369e0bc051461229d5780636e57f00e146121e157806378b1a8c7146121885780637a707730146120e95780637bebe3811461209757806380a1ebbb14611f9057806382169aec14611dd257806385caf28b14611d805780638cb422f014611d275780639010d07c14611c985780639029105814611bef57806390bcc5a2146118c457806391742be0146117a057806391d148541461170b57806393208a2b146116b95780639647d141146116675780639987e757146115ab578063a217fddf14611571578063a3246ad314611477578063a71504ad146113d8578063ab0e01921461131c578063ac33ef85146112ca578063b7923cd014611252578063ba013510146111b3578063be02ec3814610f13578063beb7dc3414610e20578063c1463c1514610d4b578063c415b95c14610cf9578063c5f720e414610ca7578063c9d068fd14610beb578063ca15c87314610b84578063ca1699e8146108d9578063ca62573a1461082c578063d32af6c1146107da578063d33219b414610789578063d547741f14610704578063dbb466df1461063e578063e6dca2b214610582578063e95245fd146104c6578063eee0fdb4146103fd5763f7553c5214610352575f80fd5b346103eb57806103613661479a565b61036c929192614b1e565b73ffffffffffffffffffffffffffffffffffffffff60075416803b156103f9576103c993858094604051968795869485937f2cd21e0000000000000000000000000000000000000000000000000000000000855260048501614aee565b03925af180156103ee576103da5750f35b816103e4916148a4565b6103eb5780f35b80fd5b6040513d84823e3d90fd5b8480fd5b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806004358060020b8091036104c3576024359062ffffff82168092036104c157610455614b1e565b73ffffffffffffffffffffffffffffffffffffffff600a541691823b156104bf57604484928360405195869485937feee0fdb4000000000000000000000000000000000000000000000000000000008552600485015260248401525af180156103ee576103da5750f35b505b505b50fd5b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806104ff61466d565b610507614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937fb3ab15fb0000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806105bb61466d565b6105c3614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937fdcaaa61b0000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061067761466d565b61067f614690565b90610688614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541691823b156104bf576040517f772b7e9700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201529082908290818381604481016103c9565b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57610785600435610742614690565b9061078061077b825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b614c2e565b614d18565b5080f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600c5416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578060043560ff81168091036104c357610873614b1e565b73ffffffffffffffffffffffffffffffffffffffff600a541690813b156104c15782916024839260405194859384927fb613a14100000000000000000000000000000000000000000000000000000000845260048401525af180156103ee576103da5750f35b50346103eb576108e836614707565b919093946108f4614b1e565b81861480610b7b575b15610b53579086939291845b878110610914578580f35b73ffffffffffffffffffffffffffffffffffffffff6005541661094061093b838b86614988565b614a18565b9073ffffffffffffffffffffffffffffffffffffffff604051927f2045be90000000000000000000000000000000000000000000000000000000008452166004830152602082602481845afa918215610b48578892610b18575b506109ae6109a984888c614988565b6149c5565b15610a7d575073ffffffffffffffffffffffffffffffffffffffff60055416906109dc61093b84878a614988565b823b15610a79576040517fd36f072800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201529087908290604490829084905af1908115610a6e578791610a55575b50506001905b01610909565b81610a5f916148a4565b610a6a57855f610a49565b8580fd5b6040513d89823e3d90fd5b8880fd5b90610a8c61093b84878a614988565b823b15610a79576040517fffc0a01e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201529087908290604490829084905af1908115610a6e578791610b03575b5050600190610a4f565b81610b0d916148a4565b610a6a57855f610af9565b610b3a91925060203d8111610b41575b610b3281836148a4565b810190614912565b905f61099a565b503d610b28565b6040513d8a823e3d90fd5b6004877f899ef10d000000000000000000000000000000000000000000000000000000008152fd5b508282146108fd565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57604060209160043581527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200083522054604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780610c2461466d565b610c2c614b1e565b73ffffffffffffffffffffffffffffffffffffffff600b541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937ff0f442600000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60095416604051908152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600d5416604051908152f35b50346103eb5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780610d8461466d565b610d8c6146b3565b90610d95614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104bf57606473ffffffffffffffffffffffffffffffffffffffff918580948460405197889687957fd309dbc600000000000000000000000000000000000000000000000000000000875216600486015260243560248601521660448401525af180156103ee576103da5750f35b50346103eb5780610e3036614838565b909192610e3b614b1e565b73ffffffffffffffffffffffffffffffffffffffff6008541690813b15610a6a57610e9890604051957fbeb7dc34000000000000000000000000000000000000000000000000000000008752604060048801526044870191614a87565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8584030160248601528083527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610a6a578560208682968196829560051b809285830137010301925af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578060043567ffffffffffffffff81116104c357610f649036906004016146d6565b9190610f6e614b1e565b815b838110610f7b578280f35b610f8961093b828685614988565b73ffffffffffffffffffffffffffffffffffffffff80600d5416911690803b156103f9578480916024604051809481937f2a54db010000000000000000000000000000000000000000000000000000000083528760048401525af190811561116a57859161119e575b505073ffffffffffffffffffffffffffffffffffffffff600554166040517f2045be90000000000000000000000000000000000000000000000000000000008152826004820152602081602481855afa908115611193578691611175575b50813b15610a6a5773ffffffffffffffffffffffffffffffffffffffff602487928360405195869485937f992a79330000000000000000000000000000000000000000000000000000000085521660048401525af190811561116a578591611151575b505073ffffffffffffffffffffffffffffffffffffffff600a541690813b156103f95784916044839260405194859384927f76734e3e0000000000000000000000000000000000000000000000000000000084526004840152600560248401525af190811561114657849161112d575b5050600101610f70565b81611137916148a4565b61114257825f611123565b8280fd5b6040513d86823e3d90fd5b8161115b916148a4565b61116657835f6110b3565b8380fd5b6040513d87823e3d90fd5b61118d915060203d8111610b4157610b3281836148a4565b5f611050565b6040513d88823e3d90fd5b816111a8916148a4565b61116657835f610ff2565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576111eb614b1e565b8073ffffffffffffffffffffffffffffffffffffffff60055416803b156104c3578180916024604051809481937f0f14763200000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb57806112623661479a565b61126d929192614b1e565b73ffffffffffffffffffffffffffffffffffffffff60075416803b156103f9576103c993858094604051968795869485937fc657c71800000000000000000000000000000000000000000000000000000000855260048501614aee565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600a5416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061135561466d565b61135d614b1e565b73ffffffffffffffffffffffffffffffffffffffff600c541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937ff0f442600000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57611410614b1e565b8073ffffffffffffffffffffffffffffffffffffffff600c5416803b156104c3578180916024604051809481937f019494b300000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5760043581527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060205260408120604051908160208254918281520190819285526020852090855b81811061155b57505050826115049103836148a4565b604051928392602084019060208552518091526040840192915b81811061152c575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff1684528594506020938401939092019160010161151e565b82548452602090930192600192830192016114ee565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602090604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806115e461466d565b6115ec614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937f595aeb500000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60075416604051908152f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5773ffffffffffffffffffffffffffffffffffffffff604061175a614690565b9260043581527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020522091165f52602052602060ff60405f2054166040519015158152f35b50346103eb576117af36614838565b6117ba949394614b1e565b80830361189c5773ffffffffffffffffffffffffffffffffffffffff6008541694853b156103f957611820602091604051957f94126bb1000000000000000000000000000000000000000000000000000000008752604060048801526044870191614a87565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85820301602486015282815201919084905b80821061187657505050818394818581819503925af180156103ee576103da5750f35b9091928335801515809103611898578152602090810193019160010190611853565b8680fd5b6004847f899ef10d000000000000000000000000000000000000000000000000000000008152fd5b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5760043567ffffffffffffffff8111611bad576119149036906004016146d6565b9061191d614b1e565b825b82811061192a578380f35b8361193961093b838686614988565b73ffffffffffffffffffffffffffffffffffffffff600d541673ffffffffffffffffffffffffffffffffffffffff821690803b15611166578380916024604051809481937f2a54db010000000000000000000000000000000000000000000000000000000083528760048401525af1908115611146578491611bda575b505073ffffffffffffffffffffffffffffffffffffffff6005541690604051907f2045be900000000000000000000000000000000000000000000000000000000082526004820152602081602481855afa908115611146578491611bbc575b50813b156111665773ffffffffffffffffffffffffffffffffffffffff602485928360405195869485937f9f06247b0000000000000000000000000000000000000000000000000000000085521660048401525af1908115611bb1578391611b98575b505073ffffffffffffffffffffffffffffffffffffffff600a5416906040517f527eb4bc000000000000000000000000000000000000000000000000000000008152602081600481865afa908115611146578491611b5d575b50823b15611166576040517f76734e3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260ff1660248201529082908290604490829084905af180156103ee57611b48575b505060010161191f565b81611b52916148a4565b61116657835f611b3e565b90506020813d8211611b90575b81611b77602093836148a4565b81010312611166575160ff81168103611166575f611ad1565b3d9150611b6a565b81611ba2916148a4565b611bad57815f611a78565b5080fd5b6040513d85823e3d90fd5b611bd4915060203d8111610b4157610b3281836148a4565b5f611a15565b81611be4916148a4565b61114257825f6119b6565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780611c28614829565b611c30614b1e565b73ffffffffffffffffffffffffffffffffffffffff600b541690813b156104c15782916024839260405194859384927f90291058000000000000000000000000000000000000000000000000000000008452151560048401525af180156103ee576103da5750f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5773ffffffffffffffffffffffffffffffffffffffff611d1760209260043581527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000845260406024359120615281565b90549060031b1c16604051908152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5760206040517f0cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c4598152f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600e5416604051908152f35b50346103eb57611de136614838565b909291611dec614b1e565b818103611f6857908491825b818110611e03578380f35b611e116109a9828589614988565b15611ec05773ffffffffffffffffffffffffffffffffffffffff60055416611e3d61093b838589614988565b813b15610a6a5773ffffffffffffffffffffffffffffffffffffffff602487928360405195869485937f9b19251a0000000000000000000000000000000000000000000000000000000085521660048401525af190811561116a578591611eab575b50506001905b01611df8565b81611eb5916148a4565b61116657835f611e9f565b73ffffffffffffffffffffffffffffffffffffffff60055416611ee761093b838589614988565b813b15610a6a5773ffffffffffffffffffffffffffffffffffffffff602487928360405195869485937f9c7f33150000000000000000000000000000000000000000000000000000000085521660048401525af190811561116a578591611f53575b5050600190611ea5565b81611f5d916148a4565b61116657835f611f49565b6004857f899ef10d000000000000000000000000000000000000000000000000000000008152fd5b50346103eb5780611fa036614838565b9391611fc89391933373ffffffffffffffffffffffffffffffffffffffff855416331461493e565b825b818110611fd5578380f35b73ffffffffffffffffffffffffffffffffffffffff600e5416611ffc61093b838587614988565b61200a6109a9848a8a614988565b823b15611898576040517fc717374a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092166004830152151560248201529085908290604490829084905af190811561116a578591612082575b5050600101611fca565b8161208c916148a4565b61116657835f612078565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57612121614b1e565b8073ffffffffffffffffffffffffffffffffffffffff60085416803b156104c3578180916024604051809481937f32fef3cf00000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5760206040517fb3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e58152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061221a61466d565b612222614b1e565b73ffffffffffffffffffffffffffffffffffffffff6009541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937f29605e770000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb576122ac36614838565b6122b893919293614b1e565b808403611f6857908491825b8581106122cf578380f35b73ffffffffffffffffffffffffffffffffffffffff600554166122f661093b838987614988565b73ffffffffffffffffffffffffffffffffffffffff604051917f2045be90000000000000000000000000000000000000000000000000000000008352166004820152602081602481855afa908115611193578691612462575b5073ffffffffffffffffffffffffffffffffffffffff604051917ff55858b0000000000000000000000000000000000000000000000000000000008352166004820152602081602481855afa908115611193578691612444575b506123b861093b84868a614988565b823b15611898576040517f234823d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201529085908290604490829084905af190811561116a57859161242f575b50506001016122c4565b81612439916148a4565b61116657835f612425565b61245c915060203d8111610b4157610b3281836148a4565b5f6123a9565b61247a915060203d8111610b4157610b3281836148a4565b5f61234f565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576124b8614b1e565b8073ffffffffffffffffffffffffffffffffffffffff600b5416803b156104c3578180916024604051809481937f69fe0e2d00000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061255861466d565b612560614b1e565b73ffffffffffffffffffffffffffffffffffffffff6008541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937f6379808f0000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57612665614b1e565b8073ffffffffffffffffffffffffffffffffffffffff600b5416803b156104c3578180916024604051809481937fcd962a0600000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061270561466d565b61270d614b1e565b73ffffffffffffffffffffffffffffffffffffffff600d541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937ff0f442600000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576127c0614829565b6127c8614b1e565b1561282e578073ffffffffffffffffffffffffffffffffffffffff60085416803b156104c3578180916004604051809481937f3f4ba83a0000000000000000000000000000000000000000000000000000000083525af180156103ee576103da57505080f35b8073ffffffffffffffffffffffffffffffffffffffff60085416803b156104c3578180916004604051809481937f8456cb590000000000000000000000000000000000000000000000000000000083525af180156103ee576103da57505080f35b50346103eb5761289e36614838565b6128aa93919293614ba6565b808403611f6857908491825b8581106128c1578380f35b73ffffffffffffffffffffffffffffffffffffffff600a54166128e861093b838987614988565b6128f3838589614988565b3560ff8116810361189857823b15611898576040517f76734e3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260ff1660248201529085908290604490829084905af190811561116a578591612977575b50506001016128b6565b81612981916148a4565b61116657835f61296d565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576129df3373ffffffffffffffffffffffffffffffffffffffff835416331461493e565b8073ffffffffffffffffffffffffffffffffffffffff600e5416803b156104c3578180916024604051809481937ff8f1c1ea00000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780612a7f61466d565b612a87614b1e565b73ffffffffffffffffffffffffffffffffffffffff6005541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937fc42cf5350000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60055416604051908152f35b50346103eb57612b6336614838565b612b6f93919293614ba6565b808403611f6857908491825b858110612b86578380f35b73ffffffffffffffffffffffffffffffffffffffff600b5416612bad61093b838987614988565b612bb8838589614988565b35823b15611898576040517f407c301e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260248201529085908290604490829084905af190811561116a578591612c2f575b5050600101612b7b565b81612c39916148a4565b61116657835f612c25565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60085416604051908152f35b50346103eb576101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159067ffffffffffffffff8116801590816134ea575b60011490816134e0575b1590816134d7575b506134af578160017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005561345a575b5073ffffffffffffffffffffffffffffffffffffffff612d896149d2565b167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff612dce6149f5565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015560443573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600554161760055560643573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600654161760065560843573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600754161760075560a43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600854161760085560c43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600954161760095560e43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a556101043573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b556101643573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600c541617600c556101a43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600d541617600d556101c43573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff0000000000000000000000000000000000000000600e541617600e556101243573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002556101443573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff000000000000000000000000000000000000000060035416176003556101843573ffffffffffffffffffffffffffffffffffffffff81169081810361116657507fffffffffffffffffffffffff000000000000000000000000000000000000000060045416176004556131e36149f5565b6131ec81614d78565b6133e8575b506131fa6149f5565b61320381614e81565b613376575b506132116149f5565b61321a81614f85565b613324575b506132286149d2565b61323181614f85565b6132d2575b5061323e5780f35b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b8280527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020526040832061331d9173ffffffffffffffffffffffffffffffffffffffff1690615296565b505f613236565b8280527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020526040832061336f9173ffffffffffffffffffffffffffffffffffffffff1690615296565b505f61321f565b7fb3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e583527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602052604083206133e19173ffffffffffffffffffffffffffffffffffffffff1690615296565b505f613208565b7f0cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c45983527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602052604083206134539173ffffffffffffffffffffffffffffffffffffffff1690615296565b505f6131f1565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f612d6b565b6004837ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f612d18565b303b159150612d10565b839150612d06565b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff600b5416604051908152f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061357d61466d565b6135a03373ffffffffffffffffffffffffffffffffffffffff845416331461493e565b73ffffffffffffffffffffffffffffffffffffffff600a541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937fa42dce800000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57613653614b1e565b8073ffffffffffffffffffffffffffffffffffffffff60065416803b156104c3578180916024604051809481937fd47ffef100000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576136f261466d565b815473ffffffffffffffffffffffffffffffffffffffff808216926137193385331461493e565b16809214613749577fffffffffffffffffffffffff00000000000000000000000000000000000000001617815580f35b6004837fcb105135000000000000000000000000000000000000000000000000000000008152fd5b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576137a9614690565b3373ffffffffffffffffffffffffffffffffffffffff8216036137d25761078590600435614d18565b6004827f6697b232000000000000000000000000000000000000000000000000000000008152fd5b50346103eb5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb578061383361466d565b61383b614690565b906044358060020b8091036104bf57613852614b1e565b73ffffffffffffffffffffffffffffffffffffffff60055416803b156103f95784928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967fe48bcc7d00000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af180156103ee576103da5750f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57610785600435613918614690565b9061395161077b825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b614cb4565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576139a93373ffffffffffffffffffffffffffffffffffffffff835416331461493e565b8073ffffffffffffffffffffffffffffffffffffffff600e5416803b156104c3578180916024604051809481937fd8e2d8f300000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57613a48614b1e565b8073ffffffffffffffffffffffffffffffffffffffff600d5416803b156104c3578180916024604051809481937fd8e0d20c00000000000000000000000000000000000000000000000000000000835260043560048401525af180156103ee576103da5750f35b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb576020613b186004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780613b5961466d565b6024359081151582036104c157613b6e614b1e565b73ffffffffffffffffffffffffffffffffffffffff600b541691823b156104bf576040517fe0bd111d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152151560248201529082908290818381604481016103c9565b50346103eb578080613bfb3661479a565b9291613c239491943373ffffffffffffffffffffffffffffffffffffffff845416331461493e565b60405184868237828186810182815203925af13d15613d03573d67ffffffffffffffff8111613cd65760405190613c8260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601836148a4565b81528460203d92013e5b15613c95578280f35b613cd26040519283927f47158033000000000000000000000000000000000000000000000000000000008452602060048501526024840191614a49565b0390fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b613c8c565b50346103eb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780613d4161466d565b613d49614b1e565b73ffffffffffffffffffffffffffffffffffffffff6007541690813b156104c15773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937f2aeb8f220000000000000000000000000000000000000000000000000000000085521660048401525af180156103ee576103da5750f35b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b50346103eb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb5780613e4f61466d565b613e57614b1e565b73ffffffffffffffffffffffffffffffffffffffff60055416803b156104c1576040517f5824780d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602480359083015282908290818381604481016103c9565b50346103eb57613ee136614707565b91909493613eed614ba6565b818114806140ad575b15610b53579086939291845b818110613f0d578580f35b613f1b6109a982868b614988565b15613fea5773ffffffffffffffffffffffffffffffffffffffff600a5416613f4761093b83858b614988565b90613f5b613f5684878a614988565b614a39565b91813b15610a7957604473ffffffffffffffffffffffffffffffffffffffff918a809462ffffff60405197889687957fba364c3d0000000000000000000000000000000000000000000000000000000087521660048601521660248401525af1908115610a6e578791613fd5575b50506001905b01613f02565b81613fdf916148a4565b610a6a57855f613fc9565b73ffffffffffffffffffffffffffffffffffffffff600b541661401161093b83858b614988565b90614020613f5684878a614988565b91813b15610a7957604473ffffffffffffffffffffffffffffffffffffffff918a809462ffffff60405197889687957fa93a897d0000000000000000000000000000000000000000000000000000000087521660048601521660248401525af1908115610a6e578791614098575b5050600190613fcf565b816140a2916148a4565b610a6a57855f61408e565b50828214613ef6565b50346103eb576101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57806140f061466d565b6140f8614690565b6141006146b3565b9060643573ffffffffffffffffffffffffffffffffffffffff81168091036103f95760843573ffffffffffffffffffffffffffffffffffffffff8116809103610a6a5760a43573ffffffffffffffffffffffffffffffffffffffff81168091036118985760c43573ffffffffffffffffffffffffffffffffffffffff811680910361437c5760e43573ffffffffffffffffffffffffffffffffffffffff8116809103610a79576101043573ffffffffffffffffffffffffffffffffffffffff811680910361437857610124359173ffffffffffffffffffffffffffffffffffffffff831680930361437457610144359373ffffffffffffffffffffffffffffffffffffffff851680950361437057610164359573ffffffffffffffffffffffffffffffffffffffff871680970361436c57610184359773ffffffffffffffffffffffffffffffffffffffff8916809903614368576142788e73ffffffffffffffffffffffffffffffffffffffff33915416331461493e565b73ffffffffffffffffffffffffffffffffffffffff60055416998a3b15614364578e9c6040519e8f9d8e917f2fdd983d00000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff16600483015273ffffffffffffffffffffffffffffffffffffffff16906024015273ffffffffffffffffffffffffffffffffffffffff1660448d015260648c015260848b015260a48a015260c489015260e488015261010487015261012486015261014485015261016484015261018483015281835a926101a493f180156103ee576103da5750f35b8e80fd5b8d80fd5b8c80fd5b8b80fd5b8a80fd5b8980fd5b8780fd5b50346103eb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103eb57602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b50346144c25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126144c25761440a61466d565b61442d3373ffffffffffffffffffffffffffffffffffffffff5f5416331461493e565b73ffffffffffffffffffffffffffffffffffffffff600a541690813b156144c25773ffffffffffffffffffffffffffffffffffffffff60245f928360405195869485937f4bc2a6570000000000000000000000000000000000000000000000000000000085521660048401525af180156144b7576144a9575080f35b6144b591505f906148a4565b005b6040513d5f823e3d90fd5b5f80fd5b346144c25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126144c2576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036144c257807f5a05180f000000000000000000000000000000000000000000000000000000006020921490811561455b575b506040519015158152f35b7f7965db0b0000000000000000000000000000000000000000000000000000000081149150811561458e575b5082614550565b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482614587565b346144c25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126144c2576145ef61466d565b6145f7614b1e565b602073ffffffffffffffffffffffffffffffffffffffff60248160055416935f60405195869485937e71cdfc0000000000000000000000000000000000000000000000000000000085521660048401525af180156144b75761465557005b6144b59060203d602011610b4157610b3281836148a4565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036144c257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036144c257565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036144c257565b9181601f840112156144c25782359167ffffffffffffffff83116144c2576020808501948460051b0101116144c257565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126144c25760043567ffffffffffffffff81116144c25781614750916004016146d6565b9290929160243567ffffffffffffffff81116144c25781614773916004016146d6565b929092916044359067ffffffffffffffff82116144c257614796916004016146d6565b9091565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126144c25760043573ffffffffffffffffffffffffffffffffffffffff811681036144c2579160243567ffffffffffffffff81116144c25760040182601f820112156144c25780359267ffffffffffffffff84116144c257602084818401930101116144c2579190565b6004359081151582036144c257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126144c25760043567ffffffffffffffff81116144c25781614881916004016146d6565b929092916024359067ffffffffffffffff82116144c257614796916004016146d6565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176148e557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b908160209103126144c2575173ffffffffffffffffffffffffffffffffffffffff811681036144c25790565b156149465750565b73ffffffffffffffffffffffffffffffffffffffff907fc483b14a000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b91908110156149985760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3580151581036144c25790565b60043573ffffffffffffffffffffffffffffffffffffffff811681036144c25790565b60243573ffffffffffffffffffffffffffffffffffffffff811681036144c25790565b3573ffffffffffffffffffffffffffffffffffffffff811681036144c25790565b3562ffffff811681036144c25790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b916020908281520191905f905b808210614aa15750505090565b90919283359073ffffffffffffffffffffffffffffffffffffffff821682036144c2576020809173ffffffffffffffffffffffffffffffffffffffff600194168152019401920190614a94565b60409073ffffffffffffffffffffffffffffffffffffffff614b1b95931681528160208201520191614a49565b90565b335f9081527f3b05fb06f7501e09d6a8a50c59dac59cd7c8dab47e848ae345bfca5e4d5d9e3c602052604090205460ff1615614b5657565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527fb3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e560245260445ffd5b335f9081527f9eacbbea19e14d84ae6fc89bafe3fe4134e0cfcdae6894d6d7239131d0cd8325602052604090205460ff1615614bde57565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f0cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c45960245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f20541615614c855750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b614cbe8282615067565b9182614cc957505090565b614d14915f527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060205273ffffffffffffffffffffffffffffffffffffffff60405f20911690615296565b5090565b614d228282615179565b9182614d2d57505090565b614d14915f527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060205273ffffffffffffffffffffffffffffffffffffffff60405f20911690615324565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f9eacbbea19e14d84ae6fc89bafe3fe4134e0cfcdae6894d6d7239131d0cd8325602052604090205460ff16614e7c5773ffffffffffffffffffffffffffffffffffffffff165f8181527f9eacbbea19e14d84ae6fc89bafe3fe4134e0cfcdae6894d6d7239131d0cd83256020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f0cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c459907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b505f90565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f3b05fb06f7501e09d6a8a50c59dac59cd7c8dab47e848ae345bfca5e4d5d9e3c602052604090205460ff16614e7c5773ffffffffffffffffffffffffffffffffffffffff165f8181527f3b05fb06f7501e09d6a8a50c59dac59cd7c8dab47e848ae345bfca5e4d5d9e3c6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907fb3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e5907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16614e7c5773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f1461517357805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f1461517357805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b8054821015614998575f5260205f2001905f90565b6001810190825f528160205260405f2054155f1461531d578054680100000000000000008110156148e55761530a6152d5826001879401855584615281565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b905554915f5260205260405f2055600190565b5050505f90565b906001820191815f528260205260405f20548015155f146154a2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111615475578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161547557818103615440575b50505080548015615413577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906153d68282615281565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b6154606154506152d59386615281565b90549060031b1c92839286615281565b90555f528360205260405f20555f808061539e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b505050505f9056fea26469706673582212200449ca72b0687823f1457d0142828e438ee405bca799581598e82f22c697b75964736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
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.