Contract 0x1875794551585d349b916deA2F45e0c14cF4929d

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xce3133ab0c36e8c813951fab282138f9461c93b35f30e0a5929ae7a3fe33aa15Update Supply Ra...563792312023-01-29 14:19:2948 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007855
0x8140b65265fbc4ebb8eca1bd048c93aea5ae6bb73b493aadf5ab1fed1913cb61Update Supply Ra...563632902023-01-29 13:04:302 hrs 3 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00009321
0xf58a2e5d6b2064901c8bd89e507c0a94b18f3ecb9e660e4c1d3b5603b22db802Update Supply Ra...563495502023-01-29 11:49:303 hrs 18 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00008317
0x8585f84aba49b3ff576da5d57c5a8174b938850dd622394108df4c6f4f76c8bbUpdate Supply Ra...563356852023-01-29 10:34:304 hrs 33 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.0000819
0x29cc5cbab3b7dd651c557fe2f3770108d491a0a78521ffb988119f3a15051969Update Supply Ra...563209272023-01-29 9:19:305 hrs 48 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007772
0x796732b5e8cde7323621e81710a924cbfeb217f04a9232d346e57429b46f41c4Update Supply Ra...563068362023-01-29 8:04:307 hrs 3 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00008136
0x70481d63d3843b69cd9edfdce638a245d7b2818fccd58e1b9d0e7a2904fabc15Update Supply Ra...562956312023-01-29 6:49:318 hrs 18 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007661
0x0636935983227edf5b597eecc09bcfe813ba4d4d60fea4046d97b52608fd0f6fUpdate Supply Ra...562838152023-01-29 5:34:319 hrs 33 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.0000811
0x222ec04cb1696e4d001028ade6a5e05da60301c94a187c5ee0136ba517fd924fUpdate Supply Ra...562737222023-01-29 4:19:3010 hrs 48 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00008509
0x206dbc7924c21fdfecabab30efe80251727ba8397ed606405a42972d06582ca9Update Supply Ra...562627932023-01-29 3:04:3012 hrs 3 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00009312
0x3a81f9f4b7ff585b25dd00a27b9e38011b886f6a8b51813b8a2b422f50d16800Update Supply Ra...562522242023-01-29 1:49:2913 hrs 18 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00008916
0x4d647c9bbd49ed0d681b87244b453be08d9bb93365be97756874e052059f11aeUpdate Supply Ra...562409342023-01-29 0:34:3014 hrs 33 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00008077
0x826d6e5d780c6b73a287c4ac89bb3c27cb5c8a819b377a82f48d5cc2edcfd046Update Supply Ra...562320382023-01-28 23:19:3115 hrs 48 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00008509
0xb7cf6166b8f214a6f9577ace2a332b9a77bc53291564b8afbc6744522d359184Update Supply Ra...562228742023-01-28 22:04:3117 hrs 3 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00009001
0x397f3e429a9e1ded399f56b3b3fccded3c3ea7751fa7d0d0a38b2de88ff8eb22Update Supply Ra...562127632023-01-28 20:49:3018 hrs 18 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007923
0x161d52a26f6fbfeef2c0c9f3b413b81bf172209892a86d132a92e9cf14441e3bUpdate Supply Ra...562023002023-01-28 19:34:3119 hrs 33 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00008361
0x7eb1d5dcffe101b17156fce30aede70c467eab10ecb5e0b4e2f658ea8011f7a1Update Supply Ra...561900802023-01-28 18:19:3120 hrs 48 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00008403
0x754d11c1ec525830d1211655a8d7286126d1528798608d8e90b8e8ab79c2a55cUpdate Supply Ra...561777622023-01-28 17:04:3022 hrs 3 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.0000876
0x8ce55d0bff8d845290045b9a382f0267c8a894205ed751b6a184d1e9263640b8Update Supply Ra...561650572023-01-28 15:49:3023 hrs 18 mins ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.0000803
0xbeee45c8d1f0027045cde57fc8f74dd6b4c0195ea01948b1893e732e87a579f8Update Supply Ra...561404422023-01-28 13:34:301 day 1 hr ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007937
0x86678066453296edf2ebf7912e72c3f93df474f1b687692e5e94c350e20cc72fUpdate Supply Ra...561254892023-01-28 12:19:301 day 2 hrs ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007699
0xf07b623b9028d5d5c2f37524443b06c9c4c20d8808875863d0dbf9b2fc164189Update Supply Ra...561112962023-01-28 11:04:301 day 4 hrs ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007804
0x34bf4f68ae21ee5e85559b1ba34889e3958e29068e5b78f10084b2ca3530d951Update Supply Ra...560968942023-01-28 9:49:301 day 5 hrs ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007907
0x4c2c0493d8af3c14b5f4b2ea4acab1197212c52b31fbc59b64b0c612f16dcae2Update Supply Ra...560823382023-01-28 8:34:301 day 6 hrs ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007709
0x08b92dc2af6c977db37ecffb190bae6f5bdd51751c16f21d10f74dc954ebe1beUpdate Supply Ra...560672242023-01-28 7:19:301 day 7 hrs ago0xd7bec5de0a1047fcf2849b2804952648cc550d9b IN  0x1875794551585d349b916dea2f45e0c14cf4929d0 ETH0.00007751
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xce3133ab0c36e8c813951fab282138f9461c93b35f30e0a5929ae7a3fe33aa15563792312023-01-29 14:19:2948 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0xce3133ab0c36e8c813951fab282138f9461c93b35f30e0a5929ae7a3fe33aa15563792312023-01-29 14:19:2948 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x300fdd222687db8686ea51847db43fa988b518e00 ETH
0xce3133ab0c36e8c813951fab282138f9461c93b35f30e0a5929ae7a3fe33aa15563792312023-01-29 14:19:2948 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x300fdd222687db8686ea51847db43fa988b518e00 ETH
0xce3133ab0c36e8c813951fab282138f9461c93b35f30e0a5929ae7a3fe33aa15563792312023-01-29 14:19:2948 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0xce3133ab0c36e8c813951fab282138f9461c93b35f30e0a5929ae7a3fe33aa15563792312023-01-29 14:19:2948 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0xce3133ab0c36e8c813951fab282138f9461c93b35f30e0a5929ae7a3fe33aa15563792312023-01-29 14:19:2948 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0x8140b65265fbc4ebb8eca1bd048c93aea5ae6bb73b493aadf5ab1fed1913cb61563632902023-01-29 13:04:302 hrs 3 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0x8140b65265fbc4ebb8eca1bd048c93aea5ae6bb73b493aadf5ab1fed1913cb61563632902023-01-29 13:04:302 hrs 3 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x300fdd222687db8686ea51847db43fa988b518e00 ETH
0x8140b65265fbc4ebb8eca1bd048c93aea5ae6bb73b493aadf5ab1fed1913cb61563632902023-01-29 13:04:302 hrs 3 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x300fdd222687db8686ea51847db43fa988b518e00 ETH
0x8140b65265fbc4ebb8eca1bd048c93aea5ae6bb73b493aadf5ab1fed1913cb61563632902023-01-29 13:04:302 hrs 3 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0x8140b65265fbc4ebb8eca1bd048c93aea5ae6bb73b493aadf5ab1fed1913cb61563632902023-01-29 13:04:302 hrs 3 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0x8140b65265fbc4ebb8eca1bd048c93aea5ae6bb73b493aadf5ab1fed1913cb61563632902023-01-29 13:04:302 hrs 3 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0xf58a2e5d6b2064901c8bd89e507c0a94b18f3ecb9e660e4c1d3b5603b22db802563495502023-01-29 11:49:303 hrs 18 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0xf58a2e5d6b2064901c8bd89e507c0a94b18f3ecb9e660e4c1d3b5603b22db802563495502023-01-29 11:49:303 hrs 18 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x300fdd222687db8686ea51847db43fa988b518e00 ETH
0xf58a2e5d6b2064901c8bd89e507c0a94b18f3ecb9e660e4c1d3b5603b22db802563495502023-01-29 11:49:303 hrs 18 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x300fdd222687db8686ea51847db43fa988b518e00 ETH
0xf58a2e5d6b2064901c8bd89e507c0a94b18f3ecb9e660e4c1d3b5603b22db802563495502023-01-29 11:49:303 hrs 18 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0xf58a2e5d6b2064901c8bd89e507c0a94b18f3ecb9e660e4c1d3b5603b22db802563495502023-01-29 11:49:303 hrs 18 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0xf58a2e5d6b2064901c8bd89e507c0a94b18f3ecb9e660e4c1d3b5603b22db802563495502023-01-29 11:49:303 hrs 18 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0x8585f84aba49b3ff576da5d57c5a8174b938850dd622394108df4c6f4f76c8bb563356852023-01-29 10:34:304 hrs 33 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0x8585f84aba49b3ff576da5d57c5a8174b938850dd622394108df4c6f4f76c8bb563356852023-01-29 10:34:304 hrs 33 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x300fdd222687db8686ea51847db43fa988b518e00 ETH
0x8585f84aba49b3ff576da5d57c5a8174b938850dd622394108df4c6f4f76c8bb563356852023-01-29 10:34:304 hrs 33 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x300fdd222687db8686ea51847db43fa988b518e00 ETH
0x8585f84aba49b3ff576da5d57c5a8174b938850dd622394108df4c6f4f76c8bb563356852023-01-29 10:34:304 hrs 33 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0x8585f84aba49b3ff576da5d57c5a8174b938850dd622394108df4c6f4f76c8bb563356852023-01-29 10:34:304 hrs 33 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0x8585f84aba49b3ff576da5d57c5a8174b938850dd622394108df4c6f4f76c8bb563356852023-01-29 10:34:304 hrs 33 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
0x29cc5cbab3b7dd651c557fe2f3770108d491a0a78521ffb988119f3a15051969563209272023-01-29 9:19:305 hrs 48 mins ago 0x1875794551585d349b916dea2f45e0c14cf4929d 0x92ebd1ad7b699b9abe11d38a8f8062a05251cb0e0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PanaTreasuryV2

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 800 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 12 : PanaAccessControlled.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.7.5;

import "../interfaces/IPanaAuthority.sol";

abstract contract PanaAccessControlled {

    /* ========== EVENTS ========== */

    event AuthorityUpdated(IPanaAuthority indexed authority);

    string UNAUTHORIZED = "UNAUTHORIZED"; // save gas

    /* ========== STATE VARIABLES ========== */

    IPanaAuthority public authority;


    /* ========== Constructor ========== */

    constructor(IPanaAuthority _authority) {
        authority = _authority;
        emit AuthorityUpdated(_authority);
    }
    

    /* ========== MODIFIERS ========== */
    
    modifier onlyGovernor() {
        require(msg.sender == authority.governor(), UNAUTHORIZED);
        _;
    }
    
    modifier onlyGuardian() {
        require(msg.sender == authority.guardian(), UNAUTHORIZED);
        _;
    }
    
    modifier onlyPolicy() {
        require(msg.sender == authority.policy(), UNAUTHORIZED);
        _;
    }

    modifier onlyVault() {
        require(msg.sender == authority.vault(), UNAUTHORIZED);
        _;
    }
    
    /* ========== GOV ONLY ========== */
    
    function setAuthority(IPanaAuthority _newAuthority) external onlyGovernor {
        authority = _newAuthority;
        emit AuthorityUpdated(_newAuthority);
    }
}

File 2 of 12 : IBondingCalculator.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.7.5;

interface IBondingCalculator {
    function valuation( address pair_, uint amount_, uint256 _baseValue ) external view returns ( uint _value );
}

File 3 of 12 : IERC20.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.7.5;

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 12 : IERC20Metadata.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.7.5;

import "./IERC20.sol";

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

File 5 of 12 : IPana.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.7.5;

import "./IERC20.sol";

interface IPana is IERC20 {
  event DistributionConcluded(uint256 totalDistributed);

  function mint(address account_, uint256 amount_) external;

  function burn(uint256 amount) external;

  function burnFrom(address account_, uint256 amount_) external;
}

File 6 of 12 : IPanaAuthority.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.7.5;

interface IPanaAuthority {
    /* ========== EVENTS ========== */
    
    event GovernorPushed(address indexed from, address indexed to, bool _effectiveImmediately);
    event GuardianPushed(address indexed from, address indexed to, bool _effectiveImmediately);
    event PolicyPushed(address indexed from, address indexed to, bool _effectiveImmediately);
    event VaultPushed(address indexed from, address indexed to, bool _effectiveImmediately);
    event DistributionVaultPushed(address indexed from, address indexed to, bool _effectiveImmediately); 

    event GovernorPulled(address indexed from, address indexed to);
    event GuardianPulled(address indexed from, address indexed to);
    event PolicyPulled(address indexed from, address indexed to);
    event VaultPulled(address indexed from, address indexed to);
    event DistributionVaultPulled(address indexed from, address indexed to);

    /* ========== VIEW ========== */
    
    function governor() external view returns (address);
    function guardian() external view returns (address);
    function policy() external view returns (address);
    function vault() external view returns (address);
    function distributionVault() external view returns (address);
}

File 7 of 12 : ISupplyContoller.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.7.5;

interface ISupplyContoller {
        
    /* ========== EVENTS ========== */
    event SupplyControlParamsSet(uint256 lossRatio, uint256 cf, uint256 cc, uint256 samplingTime,
        uint256 oldLossRatio, uint256 oldCf, uint256 oldCc, uint256 oldSamplingTime);
    event Burnt(uint256 totalSupply, uint256 panaInPool, uint256 slp, uint256 panaResidue, uint256 tokenResidue);
    event Supplied(uint256 totalSupply, uint256 panaInPool, uint256 slp, uint256 panaSupplied, uint256 panaResidue, uint256 tokenResidue);
    
    function supplyControlEnabled() external view returns (bool);

    function paramsSet() external view returns (bool);

    function setSupplyControlParams(uint256 _lossRatio, uint256 _cf, uint256 _cc, uint256 _samplingTime) external;

    function enableSupplyControl() external;

    function disableSupplyControl() external;

    function compute() external view returns (uint256 _pana, uint256 _slp, bool _burn);

    function burn(uint256 _slp) external;

    function add(uint256 _pana) external;
}

File 8 of 12 : ITreasury.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.7.5;

interface ITreasury {
    function deposit(
        uint256 _amount,
        address _token,
        uint256 _payout
    ) external returns (uint256);

    function depositForRedemption(uint _amount, address _token) external returns (uint256 send_);

    function tokenValue(address _token, uint256 _amount) external view returns (uint256 value_);

    function mint(address _recipient, uint256 _amount) external;

    function manage(address _token, uint256 _amount) external;

    function baseSupply() external view returns (uint256);
}

File 9 of 12 : IsPana.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.7.5;

import "./IERC20.sol";

interface IsPana is IERC20 {
    function rebase( uint256 panaProfit_, uint epoch_) external returns (uint256);

    function circulatingSupply() external view returns (uint256);

    function gonsForBalance( uint amount ) external view returns ( uint );

    function balanceForGons( uint gons ) external view returns ( uint );

    function index() external view returns ( uint );

    function toKARSHA(uint amount) external view returns (uint);

    function fromKARSHA(uint amount) external view returns (uint);
    
}

File 10 of 12 : SafeERC20.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.7.5;

import {IERC20} from "../interfaces/IERC20.sol";

/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)
/// Taken from Solmate
library SafeERC20 {
    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)
        );

        require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FROM_FAILED");
    }

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(IERC20.transfer.selector, to, amount)
        );

        require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED");
    }

    function safeApprove(
        IERC20 token,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(IERC20.approve.selector, to, amount)
        );

        require(success && (data.length == 0 || abi.decode(data, (bool))), "APPROVE_FAILED");
    }

    function safeTransferETH(address to, uint256 amount) internal {
        (bool success, ) = to.call{value: amount}(new bytes(0));

        require(success, "ETH_TRANSFER_FAILED");
    }
}

File 11 of 12 : SafeMath.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.7.5;


// TODO(zx): Replace all instances of SafeMath with OZ implementation
library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    // Only used in the  BondingCalculator.sol
    function sqrrt(uint256 a) internal pure returns (uint c) {
        if (a > 3) {
            c = a;
            uint b = add( div( a, 2), 1 );
            while (b < c) {
                c = b;
                b = div( add( div( a, b ), b), 2 );
            }
        } else if (a != 0) {
            c = 1;
        }
    }

}

File 12 of 12 : TreasuryV2.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.7.5;

import "../libraries/SafeMath.sol";
import "../libraries/SafeERC20.sol";

import "../interfaces/IERC20.sol";
import "../interfaces/IERC20Metadata.sol";
import "../interfaces/IPana.sol";
import "../interfaces/IsPana.sol";
import "../interfaces/IBondingCalculator.sol";
import "../interfaces/ITreasury.sol";
import "../interfaces/ISupplyContoller.sol";

import "../access/PanaAccessControlled.sol";

contract PanaTreasuryV2 is PanaAccessControlled, ITreasury {
    /* ========== DEPENDENCIES ========== */

    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    /* ========== EVENTS ========== */

    event Deposit(address indexed token, uint256 amount, uint256 payout);
    event DepositForRedemption(address indexed token, uint256 amount, uint256 send);
    event Managed(address indexed token, uint256 amount);
    event Minted(address indexed caller, address indexed recipient, uint256 amount);
    event TreasuryPanaUsed(address indexed caller, address indexed recipient, uint256 amount);
    event PermissionQueued(STATUS indexed status, address queued);
    event Permissioned(address addr, STATUS indexed status, bool result);
    event MintedForNFTTreasury(uint256 amount, address treasury);

    /* ========== DATA STRUCTURES ========== */

    enum STATUS {
        RESERVEDEPOSITOR,
        RESERVETOKEN,
        RESERVEMANAGER,
        LIQUIDITYDEPOSITOR,
        LIQUIDITYTOKEN,
        LIQUIDITYMANAGER,
        REWARDMANAGER,
        SPANA,
        PANAREDEEMER,
        NFTTREASURY
    }

    struct Queue {
        STATUS managing;
        address toPermit;
        address supplyController;
        uint256 timelockEnd;
        bool nullify;
        bool executed;
    }

    /* ========== STATE VARIABLES ========== */

    IPana public immutable PANA;
    IsPana public sPANA;

    mapping(STATUS => address[]) public registry;
    mapping(STATUS => mapping(address => bool)) public permissions;
    mapping(address => address) public supplyController;

    Queue[] public permissionQueue;
    uint256 public immutable blocksNeededForQueue;

    bool public timelockEnabled;
    bool public initialized;

    uint256 public onChainGovernanceTimelock;

    // Percentage of PANA balance available for redemption.
    // Percentage specified to 4 precision digits. 100 = 1% = 0.01
    uint256 public redemptionLimit;

    /* boolean variable use to drive if Treasury fund (Pana) should be used 
        before minting new Pana at various actions in Protocol life cycle. */
    bool public useTreasuryPana;

    string internal notAccepted = "Treasury: not accepted";
    string internal notApproved = "Treasury: not approved";
    string internal invalidToken = "Treasury: invalid token";
    string internal noValuation = "Treasury: asset is not a reserve token";

    /* ========== CONSTRUCTOR ========== */

    constructor(
        address _pana,
        uint256 _timelock,
        address _authority
    ) PanaAccessControlled(IPanaAuthority(_authority)) {
        require(_pana != address(0), "Zero address: PANA");
        PANA = IPana(_pana);

        timelockEnabled = false;
        initialized = false;
        blocksNeededForQueue = _timelock;
    }

    /* ========== MUTATIVE FUNCTIONS ========== */

    /**
     * @notice allow approved address to deposit an asset for PANA
     * @param _amount uint256
     * @param _token address
     * @param _payout uint256
     * @return send_ uint256
     */
    function deposit(
        uint256 _amount,
        address _token,
        uint256 _payout
    ) external override returns (uint256) {
        if (permissions[STATUS.RESERVETOKEN][_token]) {
            require(permissions[STATUS.RESERVEDEPOSITOR][msg.sender], notApproved);
        } else if (permissions[STATUS.LIQUIDITYTOKEN][_token]) {
            require(permissions[STATUS.LIQUIDITYDEPOSITOR][msg.sender], notApproved);
        } else {
            revert(invalidToken);
        }

        IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);
        _doMinting(msg.sender, _payout);

        emit Deposit(_token, _amount, _payout);

        if(permissions[STATUS.LIQUIDITYTOKEN][_token] 
            && supplyController[_token] != address(0)
            && ISupplyContoller(supplyController[_token]).supplyControlEnabled()
            && ISupplyContoller(supplyController[_token]).paramsSet()) {
                _updateSupplyRatio(_token);
        }

        return _payout;
    }

    /**
     * @notice allow approved address to deposit reserve token for available PANA. No new PANA is minted.
     * @param _amount uint256
     * @param _token address
     * @return send_ uint256
     */
    function depositForRedemption(uint _amount, address _token) external override returns (uint256 send_) {
        require(permissions[STATUS.RESERVETOKEN][_token], notAccepted);
        require(permissions[STATUS.PANAREDEEMER][msg.sender], notApproved);

        // redemption is always calculated as 1:100
        send_ = tokenValue(_token, _amount);
        require(send_ <= availableForRedemption(), "Not enough PANA reserves");
       
        IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);
        IERC20(PANA).safeTransfer(msg.sender, send_);

        emit DepositForRedemption(_token, _amount, send_);
    }

    /**
     * @notice  executes loss ratio management
     * @dev     this function is for internal usage, it expects all required checks to be performed before a call
     * @param   _lpToken a target liquidity token
     */
    function _updateSupplyRatio(address _lpToken) internal {
        ISupplyContoller controller = ISupplyContoller(supplyController[_lpToken]);

        (uint256 pana, uint256 slp, bool burn) = controller.compute();
        if (pana > 0) {
            if (burn) {
                // send LP tokens to supplyController and burn liquidity
                uint256 toBurn = IERC20(_lpToken).balanceOf(address(this));
                if (toBurn != 0){
                    if (toBurn > slp) {
                        toBurn = slp;
                    }

                    IERC20(_lpToken).safeTransfer(address(controller), toBurn);
                    controller.burn(toBurn);
                }
            } else {
                // send PANA to supplyController and add liquidity
                uint256 toAdd = IERC20(PANA).balanceOf(address(this));
                if (toAdd != 0){
                    if (toAdd > pana) {
                        toAdd = pana;
                    }

                    IERC20(PANA).safeTransfer(address(controller), toAdd);
                    controller.add(toAdd);
                }
            }
        }
    }

    /**
     * @notice  internal minting function of Pana based upon useTreasuryPana variable.
     */
    function _doMinting(address _recipient, uint256 _amount) internal {
        if (useTreasuryPana) {
            uint256 availablePana = PANA.balanceOf(address(this));
            if (availablePana >= _amount) {
                // Use Treasury fund to pay Pana
                IERC20(PANA).safeTransfer(_recipient, _amount);
                emit TreasuryPanaUsed(msg.sender, _recipient, _amount);
            } else {
                // if fund is not available in Treasury, Mint fresh Pana.
                PANA.mint(_recipient, _amount);
                emit Minted(msg.sender, _recipient, _amount);
            }
        } else {
            PANA.mint(_recipient, _amount);
            emit Minted(msg.sender, _recipient, _amount);
        }
    }

    /**
     * @notice  externally called version of _updateSupplyRatio
     * @dev     performs additional configuration checks and reverts if any condition fails
     * @param   _lpToken a target liquidity token
     */
    function updateSupplyRatio(address _lpToken) external {
        require(permissions[STATUS.LIQUIDITYTOKEN][_lpToken], "Not an LP token");
        require(supplyController[_lpToken] != address(0), "Supply controller is not configured");
        require(ISupplyContoller(supplyController[_lpToken]).supplyControlEnabled(), "Supply controller is not enabled");
        require(ISupplyContoller(supplyController[_lpToken]).paramsSet(), "Supply controller is not initialized");

        _updateSupplyRatio(_lpToken);
    }
    
    /**
     * @notice allow approved Assurance/Parametrics Insurance NFT Treasury to mint Pana from Master Treasury.
     * @param _amount uint256 amount of Pana to mint
     */
    function mintForNFTTreasury(uint256 _amount) external {
        require(permissions[STATUS.NFTTREASURY][msg.sender], notApproved);
        _doMinting(msg.sender, _amount);
        emit MintedForNFTTreasury(_amount, msg.sender);
    }

    /**
     * @notice allow approved address to withdraw assets
     * @param _token address
     * @param _amount uint256
     */
    function manage(address _token, uint256 _amount) external override {
        if (permissions[STATUS.LIQUIDITYTOKEN][_token]) {
            require(permissions[STATUS.LIQUIDITYMANAGER][msg.sender], notApproved);
        } else {
            require(permissions[STATUS.RESERVEMANAGER][msg.sender], notApproved);
        }

        IERC20(_token).safeTransfer(msg.sender, _amount);
        emit Managed(_token, _amount);
    }

    
    /**
     * @notice mint new PANA
     * @param _recipient address
     * @param _amount uint256
     */
    function mint(address _recipient, uint256 _amount) external override {
        require(permissions[STATUS.REWARDMANAGER][msg.sender], notApproved);
        _doMinting(_recipient, _amount);
    }

    /**
     * @notice sets new PANA redemption limit
     * @param _limit percentage (as a decimal with 4 precision digits) of PANA balance available for redemption
     */
    function setRedemptionLimit(uint256 _limit) external onlyGovernor {
        require(_limit <= 10000, "Limit cannot exceed 100 percent");
        redemptionLimit = _limit;
    }

    /**
     * @notice sets variable that drive decision to use Treasury funds before minting new Pana.
     * @param _useTreasuryPana boolean value
     */
    function setTreasuryPanaUsageFlag(bool _useTreasuryPana) external onlyGovernor {
        useTreasuryPana = _useTreasuryPana;
    }

    /**
     * @notice enable permission from queue
     * @param _status STATUS
     * @param _address address
     * @param _supplyController address
     */
    function enable(
        STATUS _status,
        address _address,
        address _supplyController
    ) external onlyGovernor {
        require(timelockEnabled == false, "Use queueTimelock");
        if (_status == STATUS.SPANA) {
            sPANA = IsPana(_address);
        } else {
            permissions[_status][_address] = true;

            if (_status == STATUS.LIQUIDITYTOKEN) {
                supplyController[_address] = _supplyController;
            }

            (bool registered, ) = indexInRegistry(_address, _status);
            if (!registered) {
                registry[_status].push(_address);
            }
        }
        emit Permissioned(_address, _status, true);
    }

    /**
     *  @notice disable permission from address
     *  @param _status STATUS
     *  @param _toDisable address
     */
    function disable(STATUS _status, address _toDisable) external {
        require(msg.sender == authority.governor() || msg.sender == authority.guardian(), "Only governor or guardian");
        permissions[_status][_toDisable] = false;
        emit Permissioned(_toDisable, _status, false);
    }

    /**
     * @notice check if registry contains address
     * @return (bool, uint256)
     */
    function indexInRegistry(address _address, STATUS _status) public view returns (bool, uint256) {
        address[] memory entries = registry[_status];
        for (uint256 i = 0; i < entries.length; i++) {
            if (_address == entries[i]) {
                return (true, i);
            }
        }
        return (false, 0);
    }

    /* ========== TIMELOCKED FUNCTIONS ========== */

    // functions are used prior to enabling on-chain governance

    /**
     * @notice queue address to receive permission
     * @param _status STATUS
     * @param _address address
     * @param _supplyController address
     */
    function queueTimelock(
        STATUS _status,
        address _address,
        address _supplyController
    ) external onlyGovernor {
        require(_address != address(0));
        require(timelockEnabled == true, "Timelock is disabled, use enable");

        uint256 timelock = block.number.add(blocksNeededForQueue);
        if (_status == STATUS.RESERVEMANAGER || _status == STATUS.LIQUIDITYMANAGER) {
            timelock = block.number.add(blocksNeededForQueue.mul(2));
        }
        permissionQueue.push(
            Queue({managing: _status, toPermit: _address, supplyController: _supplyController, timelockEnd: timelock, nullify: false, executed: false})
        );
        emit PermissionQueued(_status, _address);
    }

    /**
     *  @notice enable queued permission
     *  @param _index uint256
     */
    function execute(uint256 _index) external {
        require(timelockEnabled == true, "Timelock is disabled, use enable");

        Queue memory info = permissionQueue[_index];

        require(!info.nullify, "Action has been nullified");
        require(!info.executed, "Action has already been executed");
        require(block.number >= info.timelockEnd, "Timelock not complete");

        if (info.managing == STATUS.SPANA) {
            // 9
            sPANA = IsPana(info.toPermit);
        } else {
            permissions[info.managing][info.toPermit] = true;

            if (info.managing == STATUS.LIQUIDITYTOKEN) {
                supplyController[info.toPermit] = info.supplyController;
            }
            (bool registered, ) = indexInRegistry(info.toPermit, info.managing);
            if (!registered) {
                registry[info.managing].push(info.toPermit);

                if (info.managing == STATUS.LIQUIDITYTOKEN) {
                    (bool reg, uint256 index) = indexInRegistry(info.toPermit, STATUS.RESERVETOKEN);
                    if (reg) {
                        delete registry[STATUS.RESERVETOKEN][index];
                    }
                } else if (info.managing == STATUS.RESERVETOKEN) {
                    (bool reg, uint256 index) = indexInRegistry(info.toPermit, STATUS.LIQUIDITYTOKEN);
                    if (reg) {
                        delete registry[STATUS.LIQUIDITYTOKEN][index];
                    }
                }
            }
        }
        permissionQueue[_index].executed = true;
        emit Permissioned(info.toPermit, info.managing, true);
    }

    /**
     * @notice cancel timelocked action
     * @param _index uint256
     */
    function nullify(uint256 _index) external onlyGovernor {
        permissionQueue[_index].nullify = true;
    }

    /**
     * @notice disables timelocked functions
     */
    function disableTimelock() external onlyGovernor {
        require(timelockEnabled == true, "timelock already disabled");
        if (onChainGovernanceTimelock != 0 && onChainGovernanceTimelock <= block.number) {
            timelockEnabled = false;
        } else {
            onChainGovernanceTimelock = block.number.add(blocksNeededForQueue.mul(7)); // 7-day timelock
        }
    }

    /**
     * @notice enables timelocks after initilization
     */
    function initialize() external onlyGovernor {
        require(initialized == false, "Already initialized");
        timelockEnabled = true;
        initialized = true;
    }

    /* ========== VIEW FUNCTIONS ========== */

    /**
     * @notice returns PANA valuation of asset as 1:100
     * The protocol has no intrinsic valuation for external tokens
     * This function values any given asset at 100 PANA
     * Only to be used for valuation of RESERVE TOKENS
     * Not to be used to valuate LP tokens
     * @param _token address
     * @param _amount uint256
     * @return value_ uint256
     */
    function tokenValue(address _token, uint256 _amount) public view override returns (uint256 value_) {
        require(permissions[STATUS.RESERVETOKEN][_token], noValuation);

        value_ = _amount.mul(1e11).mul(10**IERC20Metadata(address(PANA)).decimals())
                            .div(10**9).div(10**IERC20Metadata(_token).decimals());
    }

    /**
     * @notice returns supply metric
     * @dev use this any time you need to query supply
     * @return uint256
     */
    function baseSupply() external view override returns (uint256) {
        return PANA.totalSupply();
    }

    /**
     * @notice returns current amount of PANA available for redemption
     * @return uint256
     */
    function availableForRedemption() public view returns (uint256) {
        return PANA.balanceOf(address(this)).mul(redemptionLimit).div(10**4);
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 800
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_pana","type":"address"},{"internalType":"uint256","name":"_timelock","type":"uint256"},{"internalType":"address","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IPanaAuthority","name":"authority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"send","type":"uint256"}],"name":"DepositForRedemption","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Managed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"}],"name":"MintedForNFTTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum PanaTreasuryV2.STATUS","name":"status","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"PermissionQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"enum PanaTreasuryV2.STATUS","name":"status","type":"uint8"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"Permissioned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasuryPanaUsed","type":"event"},{"inputs":[],"name":"PANA","outputs":[{"internalType":"contract IPana","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract IPanaAuthority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"availableForRedemption","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_payout","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"depositForRedemption","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"_status","type":"uint8"},{"internalType":"address","name":"_toDisable","type":"address"}],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"_status","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_supplyController","type":"address"}],"name":"enable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"enum PanaTreasuryV2.STATUS","name":"_status","type":"uint8"}],"name":"indexInRegistry","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintForNFTTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"nullify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"onChainGovernanceTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"permissionQueue","outputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"managing","type":"uint8"},{"internalType":"address","name":"toPermit","type":"address"},{"internalType":"address","name":"supplyController","type":"address"},{"internalType":"uint256","name":"timelockEnd","type":"uint256"},{"internalType":"bool","name":"nullify","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"permissions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"_status","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_supplyController","type":"address"}],"name":"queueTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redemptionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"registry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sPANA","outputs":[{"internalType":"contract IsPana","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPanaAuthority","name":"_newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setRedemptionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_useTreasuryPana","type":"bool"}],"name":"setTreasuryPanaUsageFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenValue","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"updateSupplyRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useTreasuryPana","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

610100604052600c60c08190526b15539055551213d49256915160a21b60e090815262000030916000919062000240565b506040805180820190915260168082527f54726561737572793a206e6f742061636365707465640000000000000000000060209092019182526200007791600b9162000240565b506040805180820190915260168082527f54726561737572793a206e6f7420617070726f766564000000000000000000006020909201918252620000be91600c9162000240565b506040805180820190915260178082527f54726561737572793a20696e76616c696420746f6b656e00000000000000000060209092019182526200010591600d9162000240565b5060405180606001604052806026815260200162003aa26026913980516200013691600e9160209091019062000240565b503480156200014457600080fd5b5060405162003ac838038062003ac8833981810160405260608110156200016a57600080fd5b5080516020820151604092830151600180546001600160a01b0319166001600160a01b038316908117909155935192939192909182917f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a2506001600160a01b03831662000218576040805162461bcd60e51b81526020600482015260126024820152715a65726f20616464726573733a2050414e4160701b604482015290519081900360640190fd5b5060609190911b6001600160601b0319166080526007805461ffff1916905560a052620002ec565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002785760008555620002c3565b82601f106200029357805160ff1916838001178555620002c3565b82800160010185558215620002c3579182015b82811115620002c3578251825591602001919060010190620002a6565b50620002d1929150620002d5565b5090565b5b80821115620002d15760008155600101620002d6565b60805160601c60a05161374e62000354600039806109d05280610a2852806115595280611f5e52508061128a52806116ec5280611ec2528061238852806124335280612e775280612f245280612f92528061306852806132e7528061339e525061374e6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806393988b531161012a578063bf7e214f116100bd578063f18217831161008c578063f417f22111610071578063f417f221146105fd578063fe0d94c11461061c578063ffb29023146106395761020b565b8063f1821783146105c9578063f2adbe57146105f55761020b565b8063bf7e214f1461055c578063ce2b7f0c14610564578063d07f390f1461058a578063e4e33ef8146105925761020b565b8063b39df88e116100f9578063b39df88e146104d9578063bbb11112146104e1578063bc157ac1146104fe578063bcb8e701146105305761020b565b806393988b53146104595780639fef32cc146104a3578063a44b8287146104ab578063b320f6a9146104d15761020b565b80635a941ea2116101a25780637a9e5e4b116101715780637a9e5e4b1461041b5780637d921af0146104415780638129fc1c14610449578063860f5048146104515761020b565b80635a941ea21461039a57806366e991c4146103b457806371a45c95146103da57806377e93ca8146103f75761020b565b806340c10f19116101de57806340c10f19146102c05780634146f103146102ec578063503edcf0146102f4578063529918311461036b5761020b565b80630b0eee3014610210578063158ef93e1461023e5780631d6d5f051461025a578063330dd34514610291575b600080fd5b61023c6004803603604081101561022657600080fd5b506001600160a01b038135169060200135610656565b005b61024661085f565b604080519115158252519081900360200190f35b61023c6004803603606081101561027057600080fd5b5060ff813516906001600160a01b036020820135811691604001351661086d565b610246600480360360408110156102a757600080fd5b50803560ff1690602001356001600160a01b0316610bbf565b61023c600480360360408110156102d657600080fd5b506001600160a01b038135169060200135610bdf565b610246610c86565b6103116004803603602081101561030a57600080fd5b5035610c8f565b6040518087600981111561032157fe5b8152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183151581526020018215158152602001965050505050505060405180910390f35b61023c6004803603604081101561038157600080fd5b50803560ff1690602001356001600160a01b0316610ce6565b6103a2610eee565b60408051918252519081900360200190f35b61023c600480360360208110156103ca57600080fd5b50356001600160a01b0316610ef4565b61023c600480360360208110156103f057600080fd5b5035611168565b6103ff611288565b604080516001600160a01b039092168252519081900360200190f35b61023c6004803603602081101561043157600080fd5b50356001600160a01b03166112ac565b61023c6113e2565b61023c611585565b6103a26116e8565b6104886004803603604081101561046f57600080fd5b5080356001600160a01b0316906020013560ff16611774565b60408051921515835260208301919091528051918290030190f35b6103ff61185c565b6103ff600480360360408110156104c157600080fd5b5060ff813516906020013561186b565b6102466118a3565b6103a26118ac565b61023c600480360360208110156104f757600080fd5b50356118b2565b6103a26004803603606081101561051457600080fd5b508035906001600160a01b036020820135169060400135611992565b6103a26004803603604081101561054657600080fd5b50803590602001356001600160a01b0316611cfd565b6103ff611f32565b6103ff6004803603602081101561057a57600080fd5b50356001600160a01b0316611f41565b6103a2611f5c565b61023c600480360360608110156105a857600080fd5b5060ff813516906001600160a01b0360208201358116916040013516611f80565b6103a2600480360360408110156105df57600080fd5b506001600160a01b03813516906020013561224f565b6103a2612423565b61023c6004803603602081101561061357600080fd5b503515156124d5565b61023c6004803603602081101561063257600080fd5b50356125d4565b61023c6004803603602081101561064f57600080fd5b5035612ae5565b6001600160a01b03821660009081527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f602052604090205460ff161561076e573360009081527f04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f056020526040902054600c9060ff166107685760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b820191906000526020600020905b81548152906001019060200180831161073c57829003601f168201915b50509250505060405180910390fd5b50610808565b3360009081527f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a76020526040902054600c9060ff166108065760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b505b61081c6001600160a01b0383163383612c2d565b6040805182815290516001600160a01b038416917fb4460e34f1e91c4fa28eb7fac4cbd88cf530ef54a67e1978cd5edd9f77033ead919081900360200190a25050565b600754610100900460ff1681565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156108bb57600080fd5b505afa1580156108cf573d6000803e3d6000fd5b505050506040513d60208110156108e557600080fd5b50516000906001600160a01b031633146109585760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b506001600160a01b03821661096c57600080fd5b60075460ff1615156001146109c8576040805162461bcd60e51b815260206004820181905260248201527f54696d656c6f636b2069732064697361626c65642c2075736520656e61626c65604482015290519081900360640190fd5b60006109f4437f0000000000000000000000000000000000000000000000000000000000000000612dac565b90506002846009811115610a0457fe5b1480610a1b57506005846009811115610a1957fe5b145b15610a5857610a55610a4e7f00000000000000000000000000000000000000000000000000000000000000006002612e0f565b4390612dac565b90505b60066040518060c00160405280866009811115610a7157fe5b81526001600160a01b0380871660208084019190915290861660408301526060820185905260006080830181905260a090920182905283546001818101865594835291208251600490920201805492939092839160ff1990911690836009811115610ad857fe5b0217905550602082015181547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03928316810291909117835560408401516001840180546001600160a01b03191691909316179091556060830151600283015560808301516003909201805460a09094015160ff199094169215159290921761ff00191692151502919091179055836009811115610b7d57fe5b604080516001600160a01b038616815290517fc822ff41836a6dc998393c71843db8adcbbf01721f41b32389f6838ecb1ea9c89181900360200190a250505050565b600460209081526000928352604080842090915290825290205460ff1681565b3360009081527fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f6020526040902054600c9060ff16610c775760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50610c828282612e68565b5050565b600a5460ff1681565b60068181548110610c9f57600080fd5b6000918252602090912060049091020180546001820154600283015460039093015460ff80841695506001600160a01b036101009485900481169593169382821692041686565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3457600080fd5b505afa158015610d48573d6000803e3d6000fd5b505050506040513d6020811015610d5e57600080fd5b50516001600160a01b0316331480610df75750600160009054906101000a90046001600160a01b03166001600160a01b031663452a93206040518163ffffffff1660e01b815260040160206040518083038186803b158015610dbf57600080fd5b505afa158015610dd3573d6000803e3d6000fd5b505050506040513d6020811015610de957600080fd5b50516001600160a01b031633145b610e48576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920676f7665726e6f72206f7220677561726469616e00000000000000604482015290519081900360640190fd5b600060046000846009811115610e5a57fe5b6009811115610e6557fe5b8152602080820192909252604090810160009081206001600160a01b03861682529092529020805460ff1916911515919091179055816009811115610ea657fe5b604080516001600160a01b03841681526000602082015281517f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713929181900390910190a25050565b60095481565b6001600160a01b03811660009081527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f602052604090205460ff16610f80576040805162461bcd60e51b815260206004820152600f60248201527f4e6f7420616e204c5020746f6b656e0000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381811660009081526005602052604090205416610fd65760405162461bcd60e51b81526004018080602001828103825260238152602001806136da6023913960400191505060405180910390fd5b6001600160a01b038082166000908152600560209081526040918290205482516376ad5a4d60e01b815292519316926376ad5a4d926004808201939291829003018186803b15801561102757600080fd5b505afa15801561103b573d6000803e3d6000fd5b505050506040513d602081101561105157600080fd5b50516110a4576040805162461bcd60e51b815260206004820181905260248201527f537570706c7920636f6e74726f6c6c6572206973206e6f7420656e61626c6564604482015290519081900360640190fd5b6001600160a01b0380821660009081526005602090815260409182902054825163506bedc760e11b8152925193169263a0d7db8e926004808201939291829003018186803b1580156110f557600080fd5b505afa158015611109573d6000803e3d6000fd5b505050506040513d602081101561111f57600080fd5b505161115c5760405162461bcd60e51b81526004018080602001828103825260248152602001806136fd6024913960400191505060405180910390fd5b61116581613139565b50565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156111b657600080fd5b505afa1580156111ca573d6000803e3d6000fd5b505050506040513d60208110156111e057600080fd5b50516000906001600160a01b031633146112535760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b5060016006828154811061126357fe5b60009182526020909120600490910201600301805460ff191691151591909117905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156112fa57600080fd5b505afa15801561130e573d6000803e3d6000fd5b505050506040513d602081101561132457600080fd5b50516000906001600160a01b031633146113975760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50600180546001600160a01b0319166001600160a01b0383169081179091556040517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a250565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561143057600080fd5b505afa158015611444573d6000803e3d6000fd5b505050506040513d602081101561145a57600080fd5b50516000906001600160a01b031633146114cd5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b5060075460ff16151560011461152a576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b20616c72656164792064697361626c656400000000000000604482015290519081900360640190fd5b6008541580159061153d57504360085411155b15611551576007805460ff19169055611583565b61157f610a4e7f00000000000000000000000000000000000000000000000000000000000000006007612e0f565b6008555b565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156115d357600080fd5b505afa1580156115e7573d6000803e3d6000fd5b505050506040513d60208110156115fd57600080fd5b50516000906001600160a01b031633146116705760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50600754610100900460ff16156116ce576040805162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b6007805461ff001960ff1990911660011716610100179055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561174357600080fd5b505afa158015611757573d6000803e3d6000fd5b505050506040513d602081101561176d57600080fd5b5051905090565b60008060606003600085600981111561178957fe5b600981111561179457fe5b81526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156117f657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117d8575b5050505050905060005b815181101561184b5781818151811061181557fe5b60200260200101516001600160a01b0316866001600160a01b03161415611843576001935091506118559050565b600101611800565b5060008092509250505b9250929050565b6002546001600160a01b031681565b6003602052816000526040600020818154811061188757600080fd5b6000918252602090912001546001600160a01b03169150829050565b60075460ff1681565b60085481565b3360009081527f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b9336020526040902054600c9060ff1661194a5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b506119553382612e68565b6040805182815233602082015281517f090407aa1149a57c208d834ce95f1e5f0dbc47bac5b4858b4a2e5306c650db96929181900390910190a150565b6001600160a01b03821660009081527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05602052604081205460ff1615611a705760046000805b60098111156119e357fe5b815260208082019290925260409081016000908120338252909252902054600c9060ff16611a6a5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50611b1c565b6001600160a01b03831660009081527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f602052604090205460ff1615611abb576004600060036119d8565b60405162461bcd60e51b8152602060048201908152600d8054600260001961010060018416150201909116046024840181905290928291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b611b316001600160a01b03841633308761342c565b611b3b3383612e68565b604080518581526020810184905281516001600160a01b038616927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a26001600160a01b03831660009081527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f602052604090205460ff168015611bde57506001600160a01b038381166000908152600560205260409020541615155b8015611c6357506001600160a01b038084166000908152600560209081526040918290205482516376ad5a4d60e01b815292519316926376ad5a4d926004808201939291829003018186803b158015611c3657600080fd5b505afa158015611c4a573d6000803e3d6000fd5b505050506040513d6020811015611c6057600080fd5b50515b8015611ce857506001600160a01b0380841660009081526005602090815260409182902054825163506bedc760e11b8152925193169263a0d7db8e926004808201939291829003018186803b158015611cbb57600080fd5b505afa158015611ccf573d6000803e3d6000fd5b505050506040513d6020811015611ce557600080fd5b50515b15611cf657611cf683613139565b5092915050565b6001600160a01b03811660009081527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056020526040812054600b9060ff16611d9e5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b503360009081527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a46020526040902054600c9060ff16611e375760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50611e42828461224f565b9050611e4c612423565b811115611ea0576040805162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f7567682050414e412072657365727665730000000000000000604482015290519081900360640190fd5b611eb56001600160a01b03831633308661342c565b611ee96001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383612c2d565b604080518481526020810183905281516001600160a01b038516927f4a4b015d5d009102c176c319f709dd2078a8f42103ac46297c4ded381b1d9db9928290030190a292915050565b6001546001600160a01b031681565b6005602052600090815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015611fce57600080fd5b505afa158015611fe2573d6000803e3d6000fd5b505050506040513d6020811015611ff857600080fd5b50516000906001600160a01b0316331461206b5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b5060075460ff16156120c4576040805162461bcd60e51b815260206004820152601160248201527f55736520717565756554696d656c6f636b000000000000000000000000000000604482015290519081900360640190fd5b60078360098111156120d257fe5b14156120f857600280546001600160a01b0319166001600160a01b0384161790556121fa565b60016004600085600981111561210a57fe5b600981111561211557fe5b8152602080820192909252604090810160009081206001600160a01b03871682529092529020805460ff1916911515919091179055600483600981111561215857fe5b141561218d576001600160a01b03828116600090815260056020526040902080546001600160a01b0319169183169190911790555b60006121998385611774565b509050806121f857600360008560098111156121b157fe5b60098111156121bc57fe5b8152602080820192909252604001600090812080546001810182559082529190200180546001600160a01b0319166001600160a01b0385161790555b505b82600981111561220657fe5b604080516001600160a01b03851681526001602082015281517f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713929181900390910190a2505050565b6001600160a01b03821660009081527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056020526040812054600e9060ff166122f05760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b5061241c836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561232d57600080fd5b505afa158015612341573d6000803e3d6000fd5b505050506040513d602081101561235757600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a9161241691633b9aca009183916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b1580156123cf57600080fd5b505afa1580156123e3573d6000803e3d6000fd5b505050506040513d60208110156123f957600080fd5b505160ff16600a0a6124108864174876e800612e0f565b90612e0f565b906135ac565b9392505050565b60006124d06127106124166009547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561249e57600080fd5b505afa1580156124b2573d6000803e3d6000fd5b505050506040513d60208110156124c857600080fd5b505190612e0f565b905090565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561252357600080fd5b505afa158015612537573d6000803e3d6000fd5b505050506040513d602081101561254d57600080fd5b50516000906001600160a01b031633146125c05760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50600a805460ff1916911515919091179055565b60075460ff161515600114612630576040805162461bcd60e51b815260206004820181905260248201527f54696d656c6f636b2069732064697361626c65642c2075736520656e61626c65604482015290519081900360640190fd5b6126386136a2565b6006828154811061264557fe5b600091825260209091206040805160c081019091526004909202018054829060ff16600981111561267257fe5b600981111561267d57fe5b815281546001600160a01b03610100918290048116602084015260018401541660408301526002830154606083015260039092015460ff80821615156080808501919091529390910416151560a09091015281015190915015612727576040805162461bcd60e51b815260206004820152601960248201527f416374696f6e20686173206265656e206e756c6c696669656400000000000000604482015290519081900360640190fd5b8060a001511561277e576040805162461bcd60e51b815260206004820181905260248201527f416374696f6e2068617320616c7265616479206265656e206578656375746564604482015290519081900360640190fd5b80606001514310156127d7576040805162461bcd60e51b815260206004820152601560248201527f54696d656c6f636b206e6f7420636f6d706c6574650000000000000000000000604482015290519081900360640190fd5b6007815160098111156127e657fe5b1415612815576020810151600280546001600160a01b0319166001600160a01b03909216919091179055612a4d565b6001600460008360000151600981111561282b57fe5b600981111561283657fe5b815260208082019290925260409081016000908120858401516001600160a01b031682529092529020805460ff191691151591909117905560048151600981111561287d57fe5b14156128be576040818101516020808401516001600160a01b039081166000908152600590925292902080546001600160a01b031916929091169190911790555b60006128d282602001518360000151611774565b50905080612a4b5760036000836000015160098111156128ee57fe5b60098111156128f957fe5b81526020808201929092526040016000908120848301518154600181018355918352929091200180546001600160a01b0319166001600160a01b0390921691909117905560048251600981111561294c57fe5b14156129c65760008061296484602001516001611774565b9150915081156129bf57600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c8054829081106129a557fe5b600091825260209091200180546001600160a01b03191690555b5050612a4b565b6001825160098111156129d557fe5b1415612a4b576000806129ed84602001516004611774565b915091508115612a4857600460005260036020527f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772465805482908110612a2e57fe5b600091825260209091200180546001600160a01b03191690555b50505b505b600160068381548110612a5c57fe5b6000918252602090912060036004909202010180549115156101000261ff001990921691909117905580516009811115612a9257fe5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e17138260200151600160405180836001600160a01b0316815260200182151581526020019250505060405180910390a25050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015612b3357600080fd5b505afa158015612b47573d6000803e3d6000fd5b505050506040513d6020811015612b5d57600080fd5b50516000906001600160a01b03163314612bd05760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50612710811115612c28576040805162461bcd60e51b815260206004820152601f60248201527f4c696d69742063616e6e6f7420657863656564203130302070657263656e7400604482015290519081900360640190fd5b600955565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612cbf5780518252601f199092019160209182019101612ca0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d21576040519150601f19603f3d011682016040523d82523d6000602084013e612d26565b606091505b5091509150818015612d54575080511580612d545750808060200190516020811015612d5157600080fd5b50515b612da5576040805162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b600082820183811015612e06576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082612e1e57506000612e09565b82820282848281612e2b57fe5b0414612e065760405162461bcd60e51b81526004018080602001828103825260218152602001806137216021913960400191505060405180910390fd5b600a5460ff16156130665760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612ee257600080fd5b505afa158015612ef6573d6000803e3d6000fd5b505050506040513d6020811015612f0c57600080fd5b50519050818110612f9057612f4b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168484612c2d565b6040805183815290516001600160a01b0385169133917fbbcdd4054b9d2897b75da71421b17d4b9f024932923d789d0de25635d7b26ad39181900360200190a3613060565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1984846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561300757600080fd5b505af115801561301b573d6000803e3d6000fd5b50506040805185815290516001600160a01b03871693503392507f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f09181900360200190a35b50610c82565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156130dd57600080fd5b505af11580156130f1573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f09181900360200190a35050565b6001600160a01b03808216600090815260056020526040808220548151630348786760e31b81529151931692829182918591631a43c338916004808301926060929190829003018186803b15801561319057600080fd5b505afa1580156131a4573d6000803e3d6000fd5b505050506040513d60608110156131ba57600080fd5b508051602082015160409092015190945090925090508215612da55780156132e3576000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561322b57600080fd5b505afa15801561323f573d6000803e3d6000fd5b505050506040513d602081101561325557600080fd5b5051905080156132dd578281111561326a5750815b61327e6001600160a01b0387168683612c2d565b846001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156132c457600080fd5b505af11580156132d8573d6000803e3d6000fd5b505050505b50612da5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561335257600080fd5b505afa158015613366573d6000803e3d6000fd5b505050506040513d602081101561337c57600080fd5b50519050801561342457838111156133915750825b6133c56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612c2d565b846001600160a01b0316631003e2d2826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561340b57600080fd5b505af115801561341f573d6000803e3d6000fd5b505050505b505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106134c65780518252601f1990920191602091820191016134a7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613528576040519150601f19603f3d011682016040523d82523d6000602084013e61352d565b606091505b509150915081801561355b57508051158061355b575080806020019051602081101561355857600080fd5b50515b613424576040805162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015290519081900360640190fd5b600061241c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836136755760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561363a578181015183820152602001613622565b50505050905090810190601f1680156136675780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161368157fe5b04905083858161368d57fe5b0681850201851461369a57fe5b949350505050565b6040805160c08101909152806000815260006020820181905260408201819052606082018190526080820181905260a0909101529056fe537570706c7920636f6e74726f6c6c6572206973206e6f7420636f6e66696775726564537570706c7920636f6e74726f6c6c6572206973206e6f7420696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a164736f6c6343000705000a54726561737572793a206173736574206973206e6f742061207265736572766520746f6b656e000000000000000000000000369eb8197062093a20402935d3a707b4ae414e9d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc654fbb3c1b12be82d36bc9c7e1ce075a422f80

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000369eb8197062093a20402935d3a707b4ae414e9d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc654fbb3c1b12be82d36bc9c7e1ce075a422f80

-----Decoded View---------------
Arg [0] : _pana (address): 0x369eb8197062093a20402935d3a707b4ae414e9d
Arg [1] : _timelock (uint256): 0
Arg [2] : _authority (address): 0xcc654fbb3c1b12be82d36bc9c7e1ce075a422f80

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000369eb8197062093a20402935d3a707b4ae414e9d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 000000000000000000000000cc654fbb3c1b12be82d36bc9c7e1ce075a422f80


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.