Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 59 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve SAFE Mod... | 18049445 | 441 days ago | IN | 0 ETH | 0.00066557 | ||||
Approve SAFE Mod... | 18049442 | 441 days ago | IN | 0 ETH | 0.00067373 | ||||
Approve SAFE Mod... | 18049408 | 441 days ago | IN | 0 ETH | 0.00065947 | ||||
Approve SAFE Mod... | 11898360 | 1364 days ago | IN | 0 ETH | 0.00475915 | ||||
Approve SAFE Mod... | 11898358 | 1364 days ago | IN | 0 ETH | 0.00480241 | ||||
Approve SAFE Mod... | 11898357 | 1364 days ago | IN | 0 ETH | 0.00480241 | ||||
Approve SAFE Mod... | 11778208 | 1383 days ago | IN | 0 ETH | 0.00944816 | ||||
Approve SAFE Mod... | 11739633 | 1389 days ago | IN | 0 ETH | 0.00456229 | ||||
Approve SAFE Mod... | 11739571 | 1389 days ago | IN | 0 ETH | 0.0039025 | ||||
Modify SAFE Coll... | 11642199 | 1404 days ago | IN | 0 ETH | 0.0047208 | ||||
Modify SAFE Coll... | 11642194 | 1404 days ago | IN | 0 ETH | 0.0042324 | ||||
Modify SAFE Coll... | 11642192 | 1404 days ago | IN | 0 ETH | 0.00531739 | ||||
Modify SAFE Coll... | 11638096 | 1404 days ago | IN | 0 ETH | 0.00716535 | ||||
Modify SAFE Coll... | 11590057 | 1412 days ago | IN | 0 ETH | 0.00640866 | ||||
Modify SAFE Coll... | 11589885 | 1412 days ago | IN | 0 ETH | 0.00884513 | ||||
Modify SAFE Coll... | 11589638 | 1412 days ago | IN | 0 ETH | 0.00654603 | ||||
Modify SAFE Coll... | 11565794 | 1415 days ago | IN | 0 ETH | 0.00410479 | ||||
Modify SAFE Coll... | 11465937 | 1431 days ago | IN | 0 ETH | 0.00397689 | ||||
Modify SAFE Coll... | 11465883 | 1431 days ago | IN | 0 ETH | 0.00467952 | ||||
Modify SAFE Coll... | 11465864 | 1431 days ago | IN | 0 ETH | 0.00267245 | ||||
Approve SAFE Mod... | 11453398 | 1433 days ago | IN | 0 ETH | 0.00107675 | ||||
Approve SAFE Mod... | 11453279 | 1433 days ago | IN | 0 ETH | 0.0017306 | ||||
Modify SAFE Coll... | 11290026 | 1458 days ago | IN | 0 ETH | 0.00232008 | ||||
Modify SAFE Coll... | 11284239 | 1458 days ago | IN | 0 ETH | 0.00137005 | ||||
Modify SAFE Coll... | 11284239 | 1458 days ago | IN | 0 ETH | 0.00295979 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11120952 | 1484 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
SAFEEngine
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-25 */ /// SAFEEngine.sol -- SAFE database // Copyright (C) 2018 Rain <[email protected]> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity ^0.6.7; contract SAFEEngine { // --- Auth --- mapping (address => uint) public authorizedAccounts; /** * @notice Add auth to an account * @param account Account to add auth to */ function addAuthorization(address account) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); authorizedAccounts[account] = 1; emit AddAuthorization(account); } /** * @notice Remove auth from an account * @param account Account to remove auth from */ function removeAuthorization(address account) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); authorizedAccounts[account] = 0; emit RemoveAuthorization(account); } /** * @notice Checks whether msg.sender can call an authed function **/ modifier isAuthorized { require(authorizedAccounts[msg.sender] == 1, "SAFEEngine/account-not-authorized"); _; } // Who can transfer collateral & debt in/out of a SAFE mapping(address => mapping (address => uint)) public safeRights; /** * @notice Allow an address to modify your SAFE * @param account Account to give SAFE permissions to */ function approveSAFEModification(address account) external { safeRights[msg.sender][account] = 1; emit ApproveSAFEModification(msg.sender, account); } /** * @notice Deny an address the rights to modify your SAFE * @param account Account to give SAFE permissions to */ function denySAFEModification(address account) external { safeRights[msg.sender][account] = 0; emit DenySAFEModification(msg.sender, account); } /** * @notice Checks whether msg.sender has the right to modify a SAFE **/ function canModifySAFE(address safe, address account) public view returns (bool) { return either(safe == account, safeRights[safe][account] == 1); } // --- Data --- struct CollateralType { // Total debt issued for this specific collateral type uint256 debtAmount; // [wad] // Accumulator for interest accrued on this collateral type uint256 accumulatedRate; // [ray] // Floor price at which a SAFE is allowed to generate debt uint256 safetyPrice; // [ray] // Maximum amount of debt that can be generated with this collateral type uint256 debtCeiling; // [rad] // Minimum amount of debt that must be generated by a SAFE using this collateral uint256 debtFloor; // [rad] // Price at which a SAFE gets liquidated uint256 liquidationPrice; // [ray] } struct SAFE { // Total amount of collateral locked in a SAFE uint256 lockedCollateral; // [wad] // Total amount of debt generated by a SAFE uint256 generatedDebt; // [wad] } // Data about each collateral type mapping (bytes32 => CollateralType) public collateralTypes; // Data about each SAFE mapping (bytes32 => mapping (address => SAFE )) public safes; // Balance of each collateral type mapping (bytes32 => mapping (address => uint)) public tokenCollateral; // [wad] // Internal balance of system coins mapping (address => uint) public coinBalance; // [rad] // Amount of debt held by an account. Coins & debt are like matter and antimatter. They nullify each other mapping (address => uint) public debtBalance; // [rad] // Total amount of debt that a single safe can generate uint256 public safeDebtCeiling; // [wad] // Total amount of debt (coins) currently issued uint256 public globalDebt; // [rad] // 'Bad' debt that's not covered by collateral uint256 public globalUnbackedDebt; // [rad] // Maximum amount of debt that can be issued uint256 public globalDebtCeiling; // [rad] // Access flag, indicates whether this contract is still active uint256 public contractEnabled; // --- Events --- event AddAuthorization(address account); event RemoveAuthorization(address account); event ApproveSAFEModification(address sender, address account); event DenySAFEModification(address sender, address account); event InitializeCollateralType(bytes32 collateralType); event ModifyParameters(bytes32 parameter, uint data); event ModifyParameters(bytes32 collateralType, bytes32 parameter, uint data); event DisableContract(); event ModifyCollateralBalance(bytes32 collateralType, address account, int256 wad); event TransferCollateral(bytes32 collateralType, address src, address dst, uint256 wad); event TransferInternalCoins(address src, address dst, uint256 rad); event ModifySAFECollateralization( bytes32 collateralType, address safe, address collateralSource, address debtDestination, int deltaCollateral, int deltaDebt, uint lockedCollateral, uint generatedDebt, uint globalDebt ); event TransferSAFECollateralAndDebt( bytes32 collateralType, address src, address dst, int deltaCollateral, int deltaDebt, uint srcLockedCollateral, uint srcGeneratedDebt, uint dstLockedCollateral, uint dstGeneratedDebt ); event ConfiscateSAFECollateralAndDebt( bytes32 collateralType, address safe, address collateralCounterparty, address debtCounterparty, int deltaCollateral, int deltaDebt, uint globalUnbackedDebt ); event SettleDebt(address account, uint rad, uint debtBalance, uint coinBalance, uint globalUnbackedDebt, uint globalDebt); event CreateUnbackedDebt( address debtDestination, address coinDestination, uint rad, uint debtDstBalance, uint coinDstBalance, uint globalUnbackedDebt, uint globalDebt ); event UpdateAccumulatedRate( bytes32 collateralType, address surplusDst, int rateMultiplier, uint dstCoinBalance, uint globalDebt ); // --- Init --- constructor() public { authorizedAccounts[msg.sender] = 1; safeDebtCeiling = uint(-1); contractEnabled = 1; emit AddAuthorization(msg.sender); emit ModifyParameters("safeDebtCeiling", uint(-1)); } // --- Math --- function addition(uint x, int y) internal pure returns (uint z) { z = x + uint(y); require(y >= 0 || z <= x); require(y <= 0 || z >= x); } function addition(int x, int y) internal pure returns (int z) { z = x + y; require(y >= 0 || z <= x); require(y <= 0 || z >= x); } function subtract(uint x, int y) internal pure returns (uint z) { z = x - uint(y); require(y <= 0 || z <= x); require(y >= 0 || z >= x); } function subtract(int x, int y) internal pure returns (int z) { z = x - y; require(y <= 0 || z <= x); require(y >= 0 || z >= x); } function multiply(uint x, int y) internal pure returns (int z) { z = int(x) * y; require(int(x) >= 0); require(y == 0 || z / y == int(x)); } function addition(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function subtract(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function multiply(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } // --- Administration --- /** * @notice Creates a brand new collateral type * @param collateralType Collateral type name (e.g ETH-A, TBTC-B) */ function initializeCollateralType(bytes32 collateralType) external isAuthorized { require(collateralTypes[collateralType].accumulatedRate == 0, "SAFEEngine/collateral-type-already-exists"); collateralTypes[collateralType].accumulatedRate = 10 ** 27; emit InitializeCollateralType(collateralType); } /** * @notice Modify general uint params * @param parameter The name of the parameter modified * @param data New value for the parameter */ function modifyParameters(bytes32 parameter, uint data) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); if (parameter == "globalDebtCeiling") globalDebtCeiling = data; else if (parameter == "safeDebtCeiling") safeDebtCeiling = data; else revert("SAFEEngine/modify-unrecognized-param"); emit ModifyParameters(parameter, data); } /** * @notice Modify collateral specific params * @param collateralType Collateral type we modify params for * @param parameter The name of the parameter modified * @param data New value for the parameter */ function modifyParameters( bytes32 collateralType, bytes32 parameter, uint data ) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); if (parameter == "safetyPrice") collateralTypes[collateralType].safetyPrice = data; else if (parameter == "liquidationPrice") collateralTypes[collateralType].liquidationPrice = data; else if (parameter == "debtCeiling") collateralTypes[collateralType].debtCeiling = data; else if (parameter == "debtFloor") collateralTypes[collateralType].debtFloor = data; else revert("SAFEEngine/modify-unrecognized-param"); emit ModifyParameters(collateralType, parameter, data); } /** * @notice Disable this contract (normally called by GlobalSettlement) */ function disableContract() external isAuthorized { contractEnabled = 0; emit DisableContract(); } // --- Fungibility --- /** * @notice Join/exit collateral into and and out of the system * @param collateralType Collateral type we join/exit * @param account Account that gets credited/debited * @param wad Amount of collateral */ function modifyCollateralBalance( bytes32 collateralType, address account, int256 wad ) external isAuthorized { tokenCollateral[collateralType][account] = addition(tokenCollateral[collateralType][account], wad); emit ModifyCollateralBalance(collateralType, account, wad); } /** * @notice Transfer collateral between accounts * @param collateralType Collateral type transferred * @param src Collateral source * @param dst Collateral destination * @param wad Amount of collateral transferred */ function transferCollateral( bytes32 collateralType, address src, address dst, uint256 wad ) external { require(canModifySAFE(src, msg.sender), "SAFEEngine/not-allowed"); tokenCollateral[collateralType][src] = subtract(tokenCollateral[collateralType][src], wad); tokenCollateral[collateralType][dst] = addition(tokenCollateral[collateralType][dst], wad); emit TransferCollateral(collateralType, src, dst, wad); } /** * @notice Transfer internal coins (does not affect external balances from Coin.sol) * @param src Coins source * @param dst Coins destination * @param rad Amount of coins transferred */ function transferInternalCoins(address src, address dst, uint256 rad) external { require(canModifySAFE(src, msg.sender), "SAFEEngine/not-allowed"); coinBalance[src] = subtract(coinBalance[src], rad); coinBalance[dst] = addition(coinBalance[dst], rad); emit TransferInternalCoins(src, dst, rad); } function either(bool x, bool y) internal pure returns (bool z) { assembly{ z := or(x, y)} } function both(bool x, bool y) internal pure returns (bool z) { assembly{ z := and(x, y)} } // --- SAFE Manipulation --- /** * @notice Add/remove collateral or put back/generate more debt in a SAFE * @param collateralType Type of collateral to withdraw/deposit in and from the SAFE * @param safe Target SAFE * @param collateralSource Account we take collateral from/put collateral into * @param debtDestination Account from which we credit/debit coins and debt * @param deltaCollateral Amount of collateral added/extract from the SAFE (wad) * @param deltaDebt Amount of debt to generate/repay (wad) */ function modifySAFECollateralization( bytes32 collateralType, address safe, address collateralSource, address debtDestination, int deltaCollateral, int deltaDebt ) external { // system is live require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); SAFE memory safeData = safes[collateralType][safe]; CollateralType memory collateralTypeData = collateralTypes[collateralType]; // collateral type has been initialised require(collateralTypeData.accumulatedRate != 0, "SAFEEngine/collateral-type-not-initialized"); safeData.lockedCollateral = addition(safeData.lockedCollateral, deltaCollateral); safeData.generatedDebt = addition(safeData.generatedDebt, deltaDebt); collateralTypeData.debtAmount = addition(collateralTypeData.debtAmount, deltaDebt); int deltaAdjustedDebt = multiply(collateralTypeData.accumulatedRate, deltaDebt); uint totalDebtIssued = multiply(collateralTypeData.accumulatedRate, safeData.generatedDebt); globalDebt = addition(globalDebt, deltaAdjustedDebt); // either debt has decreased, or debt ceilings are not exceeded require( either( deltaDebt <= 0, both(multiply(collateralTypeData.debtAmount, collateralTypeData.accumulatedRate) <= collateralTypeData.debtCeiling, globalDebt <= globalDebtCeiling) ), "SAFEEngine/ceiling-exceeded" ); // safe is either less risky than before, or it is safe require( either( both(deltaDebt <= 0, deltaCollateral >= 0), totalDebtIssued <= multiply(safeData.lockedCollateral, collateralTypeData.safetyPrice) ), "SAFEEngine/not-safe" ); // safe is either more safe, or the owner consents require(either(both(deltaDebt <= 0, deltaCollateral >= 0), canModifySAFE(safe, msg.sender)), "SAFEEngine/not-allowed-to-modify-safe"); // collateral src consents require(either(deltaCollateral <= 0, canModifySAFE(collateralSource, msg.sender)), "SAFEEngine/not-allowed-collateral-src"); // debt dst consents require(either(deltaDebt >= 0, canModifySAFE(debtDestination, msg.sender)), "SAFEEngine/not-allowed-debt-dst"); // safe has no debt, or a non-dusty amount require(either(safeData.generatedDebt == 0, totalDebtIssued >= collateralTypeData.debtFloor), "SAFEEngine/dust"); // safe didn't go above the safe debt limit if (deltaDebt > 0) { require(safeData.generatedDebt <= safeDebtCeiling, "SAFEEngine/above-debt-limit"); } tokenCollateral[collateralType][collateralSource] = subtract(tokenCollateral[collateralType][collateralSource], deltaCollateral); coinBalance[debtDestination] = addition(coinBalance[debtDestination], deltaAdjustedDebt); safes[collateralType][safe] = safeData; collateralTypes[collateralType] = collateralTypeData; emit ModifySAFECollateralization( collateralType, safe, collateralSource, debtDestination, deltaCollateral, deltaDebt, safeData.lockedCollateral, safeData.generatedDebt, globalDebt ); } // --- SAFE Fungibility --- /** * @notice Transfer collateral and/or debt between SAFEs * @param collateralType Collateral type transferred between SAFEs * @param src Source SAFE * @param dst Destination SAFE * @param deltaCollateral Amount of collateral to take/add into src and give/take from dst (wad) * @param deltaDebt Amount of debt to take/add into src and give/take from dst (wad) */ function transferSAFECollateralAndDebt( bytes32 collateralType, address src, address dst, int deltaCollateral, int deltaDebt ) external { SAFE storage srcSAFE = safes[collateralType][src]; SAFE storage dstSAFE = safes[collateralType][dst]; CollateralType storage collateralType_ = collateralTypes[collateralType]; srcSAFE.lockedCollateral = subtract(srcSAFE.lockedCollateral, deltaCollateral); srcSAFE.generatedDebt = subtract(srcSAFE.generatedDebt, deltaDebt); dstSAFE.lockedCollateral = addition(dstSAFE.lockedCollateral, deltaCollateral); dstSAFE.generatedDebt = addition(dstSAFE.generatedDebt, deltaDebt); uint srcTotalDebtIssued = multiply(srcSAFE.generatedDebt, collateralType_.accumulatedRate); uint dstTotalDebtIssued = multiply(dstSAFE.generatedDebt, collateralType_.accumulatedRate); // both sides consent require(both(canModifySAFE(src, msg.sender), canModifySAFE(dst, msg.sender)), "SAFEEngine/not-allowed"); // both sides safe require(srcTotalDebtIssued <= multiply(srcSAFE.lockedCollateral, collateralType_.safetyPrice), "SAFEEngine/not-safe-src"); require(dstTotalDebtIssued <= multiply(dstSAFE.lockedCollateral, collateralType_.safetyPrice), "SAFEEngine/not-safe-dst"); // both sides non-dusty require(either(srcTotalDebtIssued >= collateralType_.debtFloor, srcSAFE.generatedDebt == 0), "SAFEEngine/dust-src"); require(either(dstTotalDebtIssued >= collateralType_.debtFloor, dstSAFE.generatedDebt == 0), "SAFEEngine/dust-dst"); emit TransferSAFECollateralAndDebt( collateralType, src, dst, deltaCollateral, deltaDebt, srcSAFE.lockedCollateral, srcSAFE.generatedDebt, dstSAFE.lockedCollateral, dstSAFE.generatedDebt ); } // --- SAFE Confiscation --- /** * @notice Normally used by the LiquidationEngine in order to confiscate collateral and debt from a SAFE and give them to someone else * @param collateralType Collateral type the SAFE has locked inside * @param safe Target SAFE * @param collateralCounterparty Who we take/give collateral to * @param debtCounterparty Who we take/give debt to * @param deltaCollateral Amount of collateral taken/added into the SAFE (wad) * @param deltaDebt Amount of collateral taken/added into the SAFE (wad) */ function confiscateSAFECollateralAndDebt( bytes32 collateralType, address safe, address collateralCounterparty, address debtCounterparty, int deltaCollateral, int deltaDebt ) external isAuthorized { SAFE storage safe_ = safes[collateralType][safe]; CollateralType storage collateralType_ = collateralTypes[collateralType]; safe_.lockedCollateral = addition(safe_.lockedCollateral, deltaCollateral); safe_.generatedDebt = addition(safe_.generatedDebt, deltaDebt); collateralType_.debtAmount = addition(collateralType_.debtAmount, deltaDebt); int deltaTotalIssuedDebt = multiply(collateralType_.accumulatedRate, deltaDebt); tokenCollateral[collateralType][collateralCounterparty] = subtract( tokenCollateral[collateralType][collateralCounterparty], deltaCollateral ); debtBalance[debtCounterparty] = subtract( debtBalance[debtCounterparty], deltaTotalIssuedDebt ); globalUnbackedDebt = subtract( globalUnbackedDebt, deltaTotalIssuedDebt ); emit ConfiscateSAFECollateralAndDebt( collateralType, safe, collateralCounterparty, debtCounterparty, deltaCollateral, deltaDebt, globalUnbackedDebt ); } // --- Settlement --- /** * @notice Nullify an amount of coins with an equal amount of debt * @param rad Amount of debt & coins to destroy */ function settleDebt(uint rad) external { address account = msg.sender; debtBalance[account] = subtract(debtBalance[account], rad); coinBalance[account] = subtract(coinBalance[account], rad); globalUnbackedDebt = subtract(globalUnbackedDebt, rad); globalDebt = subtract(globalDebt, rad); emit SettleDebt(account, rad, debtBalance[account], coinBalance[account], globalUnbackedDebt, globalDebt); } /** * @notice Usually called by CoinSavingsAccount in order to create unbacked debt * @param debtDestination Usually AccountingEngine that can settle debt with surplus * @param coinDestination Usually CoinSavingsAccount that passes the new coins to depositors * @param rad Amount of debt to create */ function createUnbackedDebt( address debtDestination, address coinDestination, uint rad ) external isAuthorized { debtBalance[debtDestination] = addition(debtBalance[debtDestination], rad); coinBalance[coinDestination] = addition(coinBalance[coinDestination], rad); globalUnbackedDebt = addition(globalUnbackedDebt, rad); globalDebt = addition(globalDebt, rad); emit CreateUnbackedDebt( debtDestination, coinDestination, rad, debtBalance[debtDestination], coinBalance[coinDestination], globalUnbackedDebt, globalDebt ); } // --- Rates --- /** * @notice Usually called by TaxCollector in order to accrue interest on a specific collateral type * @param collateralType Collateral type we accrue interest for * @param surplusDst Destination for amount of surplus created by applying the interest rate to debt created by SAFEs with 'collateralType' * @param rateMultiplier Multiplier applied to the debtAmount in order to calculate the surplus [ray] */ function updateAccumulatedRate( bytes32 collateralType, address surplusDst, int rateMultiplier ) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); CollateralType storage collateralType_ = collateralTypes[collateralType]; collateralType_.accumulatedRate = addition(collateralType_.accumulatedRate, rateMultiplier); int deltaSurplus = multiply(collateralType_.debtAmount, rateMultiplier); coinBalance[surplusDst] = addition(coinBalance[surplusDst], deltaSurplus); globalDebt = addition(globalDebt, deltaSurplus); emit UpdateAccumulatedRate( collateralType, surplusDst, rateMultiplier, coinBalance[surplusDst], globalDebt ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AddAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ApproveSAFEModification","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"safe","type":"address"},{"indexed":false,"internalType":"address","name":"collateralCounterparty","type":"address"},{"indexed":false,"internalType":"address","name":"debtCounterparty","type":"address"},{"indexed":false,"internalType":"int256","name":"deltaCollateral","type":"int256"},{"indexed":false,"internalType":"int256","name":"deltaDebt","type":"int256"},{"indexed":false,"internalType":"uint256","name":"globalUnbackedDebt","type":"uint256"}],"name":"ConfiscateSAFECollateralAndDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"debtDestination","type":"address"},{"indexed":false,"internalType":"address","name":"coinDestination","type":"address"},{"indexed":false,"internalType":"uint256","name":"rad","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"debtDstBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"coinDstBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalUnbackedDebt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalDebt","type":"uint256"}],"name":"CreateUnbackedDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"DenySAFEModification","type":"event"},{"anonymous":false,"inputs":[],"name":"DisableContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"}],"name":"InitializeCollateralType","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"int256","name":"wad","type":"int256"}],"name":"ModifyCollateralBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"parameter","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"ModifyParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"parameter","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"ModifyParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"safe","type":"address"},{"indexed":false,"internalType":"address","name":"collateralSource","type":"address"},{"indexed":false,"internalType":"address","name":"debtDestination","type":"address"},{"indexed":false,"internalType":"int256","name":"deltaCollateral","type":"int256"},{"indexed":false,"internalType":"int256","name":"deltaDebt","type":"int256"},{"indexed":false,"internalType":"uint256","name":"lockedCollateral","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"generatedDebt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalDebt","type":"uint256"}],"name":"ModifySAFECollateralization","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"RemoveAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"rad","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"debtBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"coinBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalUnbackedDebt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalDebt","type":"uint256"}],"name":"SettleDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"TransferCollateral","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"rad","type":"uint256"}],"name":"TransferInternalCoins","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"int256","name":"deltaCollateral","type":"int256"},{"indexed":false,"internalType":"int256","name":"deltaDebt","type":"int256"},{"indexed":false,"internalType":"uint256","name":"srcLockedCollateral","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"srcGeneratedDebt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dstLockedCollateral","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dstGeneratedDebt","type":"uint256"}],"name":"TransferSAFECollateralAndDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"surplusDst","type":"address"},{"indexed":false,"internalType":"int256","name":"rateMultiplier","type":"int256"},{"indexed":false,"internalType":"uint256","name":"dstCoinBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalDebt","type":"uint256"}],"name":"UpdateAccumulatedRate","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"approveSAFEModification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedAccounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"canModifySAFE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coinBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"collateralTypes","outputs":[{"internalType":"uint256","name":"debtAmount","type":"uint256"},{"internalType":"uint256","name":"accumulatedRate","type":"uint256"},{"internalType":"uint256","name":"safetyPrice","type":"uint256"},{"internalType":"uint256","name":"debtCeiling","type":"uint256"},{"internalType":"uint256","name":"debtFloor","type":"uint256"},{"internalType":"uint256","name":"liquidationPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"collateralCounterparty","type":"address"},{"internalType":"address","name":"debtCounterparty","type":"address"},{"internalType":"int256","name":"deltaCollateral","type":"int256"},{"internalType":"int256","name":"deltaDebt","type":"int256"}],"name":"confiscateSAFECollateralAndDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractEnabled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"debtDestination","type":"address"},{"internalType":"address","name":"coinDestination","type":"address"},{"internalType":"uint256","name":"rad","type":"uint256"}],"name":"createUnbackedDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"denySAFEModification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"globalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalDebtCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalUnbackedDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"}],"name":"initializeCollateralType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"wad","type":"int256"}],"name":"modifyCollateralBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"bytes32","name":"parameter","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"modifyParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"parameter","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"modifyParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"collateralSource","type":"address"},{"internalType":"address","name":"debtDestination","type":"address"},{"internalType":"int256","name":"deltaCollateral","type":"int256"},{"internalType":"int256","name":"deltaDebt","type":"int256"}],"name":"modifySAFECollateralization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safeDebtCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"safeRights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"safes","outputs":[{"internalType":"uint256","name":"lockedCollateral","type":"uint256"},{"internalType":"uint256","name":"generatedDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rad","type":"uint256"}],"name":"settleDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"tokenCollateral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rad","type":"uint256"}],"name":"transferInternalCoins","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"int256","name":"deltaCollateral","type":"int256"},{"internalType":"int256","name":"deltaDebt","type":"int256"}],"name":"transferSAFECollateralAndDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"surplusDst","type":"address"},{"internalType":"int256","name":"rateMultiplier","type":"int256"}],"name":"updateAccumulatedRate","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b503360008181526020818152604091829020600190819055600019600755600b55815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a1604080516e73616665446562744365696c696e6760881b8152600019602082015281517fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a929181900390910190a16123b7806100bf6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806350de215d11610104578063d07900bb116100a2578063efabcadc11610071578063efabcadc1461063b578063fabde80c14610671578063fd450fb714610697578063fe4f58901461069f576101da565b8063d07900bb14610576578063d49d7867146105c6578063d4b9311d146105ec578063d94d420814610615576101da565b80638543d5e0116100de5780638543d5e0146104f8578063894ba8331461050057806394f3f81d1461050857806399bec3151461052e576101da565b806350de215d1461046d5780635e412858146104af57806376e0b4ca146104cc576101da565b80632efcc8661161017c578063476bb6ef1161014b578063476bb6ef146103755780634a11825e146103b75780634e14a967146103e95780634e5111a614610431576101da565b80632efcc866146102fa57806335b28153146103025780633d4225041461032857806341b3a0d91461036d576101da565b80631b142820116101b85780631b142820146102795780631d2a783d146102af57806324ba5884146102b757806327a0bb33146102dd576101da565b806306eb54df146101df5780630e9e11d31461021f57806311005b0714610253575b600080fd5b61020d600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106c2565b60408051918252519081900360200190f35b6102516004803603606081101561023557600080fd5b508035906001600160a01b0360208201351690604001356106df565b005b61020d6004803603602081101561026957600080fd5b50356001600160a01b0316610866565b6102516004803603606081101561028f57600080fd5b506001600160a01b03813581169160208101359091169060400135610878565b61020d6109e8565b61020d600480360360208110156102cd57600080fd5b50356001600160a01b03166109ee565b610251600480360360208110156102f357600080fd5b5035610a00565b61020d610b03565b6102516004803603602081101561031857600080fd5b50356001600160a01b0316610b09565b6103546004803603604081101561033e57600080fd5b50803590602001356001600160a01b0316610bee565b6040805192835260208301919091528051918290030190f35b61020d610c12565b610251600480360360a081101561038b57600080fd5b508035906001600160a01b03602082013581169160408101359091169060608101359060800135610c18565b610251600480360360608110156103cd57600080fd5b508035906001600160a01b036020820135169060400135610f68565b610251600480360360c08110156103ff57600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a0013561104f565b6102516004803603608081101561044757600080fd5b508035906001600160a01b03602082013581169160408101359091169060600135611215565b61049b6004803603604081101561048357600080fd5b506001600160a01b0381358116916020013516611346565b604080519115158252519081900360200190f35b610251600480360360208110156104c557600080fd5b5035611386565b61020d600480360360408110156104e257600080fd5b50803590602001356001600160a01b031661147b565b61020d611498565b61025161149e565b6102516004803603602081101561051e57600080fd5b50356001600160a01b031661151c565b610251600480360360c081101561054457600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a00135611600565b6105936004803603602081101561058c57600080fd5b5035611c46565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b610251600480360360208110156105dc57600080fd5b50356001600160a01b0316611c7d565b6102516004803603606081101561060257600080fd5b5080359060208101359060400135611ce1565b6102516004803603602081101561062b57600080fd5b50356001600160a01b0316611eb0565b6102516004803603606081101561065157600080fd5b506001600160a01b03813581169160208101359091169060400135611f14565b61020d6004803603602081101561068757600080fd5b50356001600160a01b031661201d565b61020d61202f565b610251600480360360408110156106b557600080fd5b5080359060200135612035565b600160209081526000928352604080842090915290825290205481565b3360009081526020819052604090205460011461072d5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b54600114610772576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b6000838152600260205260409020600181015461078f908361214d565b600182015580546000906107a39084612182565b6001600160a01b0385166000908152600560205260409020549091506107c9908261214d565b6001600160a01b0385166000908152600560205260409020556008546107ef908261214d565b60088190556001600160a01b0385166000818152600560209081526040918290205482518a8152918201939093528082018790526060810192909252608082019290925290517f5b9f54db46fa62a65324e3e9cad8e6fa0deb965ce36134b30377d7edd3a8136f9181900360a00190a15050505050565b60066020526000908152604090205481565b336000908152602081905260409020546001146108c65760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b6001600160a01b0383166000908152600660205260409020546108e990826121b0565b6001600160a01b0380851660009081526006602090815260408083209490945591851681526005909152205461091f90826121b0565b6001600160a01b03831660009081526005602052604090205560095461094590826121b0565b60095560085461095590826121b0565b60088190556001600160a01b038085166000818152600660209081526040808320549488168084526005835292819020546009548251958652928501939093528381018790526060840194909452608083019190915260a082015260c0810192909252517fede723541c3aae745504c3732f6a7161031353ddf05caba15d48b1edd35646b99181900360e00190a1505050565b60095481565b60006020819052908152604090205481565b33600081815260066020526040902054610a1a90836121c0565b6001600160a01b038216600090815260066020908152604080832093909355600590522054610a4990836121c0565b6001600160a01b038216600090815260056020526040902055600954610a6f90836121c0565b600955600854610a7f90836121c0565b60088190556001600160a01b0382166000818152600660209081526040808320546005835292819020546009548251958652928501889052848201939093526060840192909252608083015260a082019290925290517f11000f3497809a546a9de313df16f9ce615e1c65098ba758180e1cac823ed4159181900360c00190a15050565b600a5481565b33600090815260208190526040902054600114610b575760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b54600114610b9c576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152602081815260409182902060019055815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a150565b60036020908152600092835260408084209091529082529020805460019091015482565b600b5481565b60008581526003602090815260408083206001600160a01b0388811685529083528184209087168452818420898552600290935292208254610c5a90866121d0565b83556001830154610c6b90856121d0565b60018401558154610c7c908661214d565b82556001820154610c8d908561214d565b82600101819055506000610ca984600101548360010154612204565b90506000610cbf84600101548460010154612204565b9050610cdd610cce8a33611346565b610cd88a33611346565b612227565b610d27576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b610d3985600001548460020154612204565b821115610d8d576040805162461bcd60e51b815260206004820152601760248201527f53414645456e67696e652f6e6f742d736166652d737263000000000000000000604482015290519081900360640190fd5b610d9f84600001548460020154612204565b811115610df3576040805162461bcd60e51b815260206004820152601760248201527f53414645456e67696e652f6e6f742d736166652d647374000000000000000000604482015290519081900360640190fd5b610e0b8360040154831015866001015460001461222b565b610e52576040805162461bcd60e51b815260206004820152601360248201527253414645456e67696e652f647573742d73726360681b604482015290519081900360640190fd5b610e6a8360040154821015856001015460001461222b565b610eb1576040805162461bcd60e51b815260206004820152601360248201527214d05191515b99da5b994bd91d5cdd0b591cdd606a1b604482015290519081900360640190fd5b7f4b49cc19514005253f36d0517c21b92404f50cc0d9e0c070af00b96e296b08358a8a8a8a8a8a600001548b600101548b600001548c60010154604051808a8152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390a150505050505050505050565b33600090815260208190526040902054600114610fb65760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b60008381526004602090815260408083206001600160a01b0386168452909152902054610fe3908261214d565b60008481526004602090815260408083206001600160a01b038716808552908352928190209390935582518681529081019190915280820183905290517f488ac1e40bb6e5ee1f88b998568d1de4cb595e9ce0e0d4e4d4cc4c202053f1079181900360600190a1505050565b3360009081526020819052604090205460011461109d5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b60008681526003602090815260408083206001600160a01b03891684528252808320898452600290925290912081546110d6908561214d565b825560018201546110e7908461214d565b600183015580546110f8908461214d565b8155600181015460009061110c9085612182565b60008a81526004602090815260408083206001600160a01b038c16845290915290205490915061113c90866121d0565b60008a81526004602090815260408083206001600160a01b03808d16855290835281842094909455928916825260069052205461117990826121d0565b6001600160a01b03871660009081526006602052604090205560095461119f90826121d0565b6009819055604080518b81526001600160a01b03808c166020830152808b1682840152891660608201526080810188905260a0810187905260c0810192909252517f9bef7b734be54aaed05e906c2ccf923767f44a93d136b674e212ce858a6d031c9181900360e00190a1505050505050505050565b61121f8333611346565b611269576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b60008481526004602090815260408083206001600160a01b038716845290915290205461129690826121c0565b60008581526004602090815260408083206001600160a01b0388811685529252808320939093558416815220546112cd90826121b0565b60008581526004602090815260408083206001600160a01b038088168086529184529382902094909455805188815292871691830191909152818101929092526060810183905290517fb08760a077e71005cf3651212fdbd4028d6ebc8e1844c0475f36000f2756c0d79181900360800190a150505050565b6001600160a01b03828116600081815260016020818152604080842095871680855295909152822054919361137d9314911461222b565b90505b92915050565b336000908152602081905260409020546001146113d45760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600081815260026020526040902060010154156114225760405162461bcd60e51b815260040180806020018281038252602981526020018061230e6029913960400191505060405180910390fd5b6000818152600260209081526040918290206b033b2e3c9fd0803ce8000000600190910155815183815291517f715b265758bcd4ecd311bede8dcca05c4b5819e0a2a5c4103abd702862ae2c359281900390910190a150565b600460209081526000928352604080842090915290825290205481565b60085481565b336000908152602081905260409020546001146114ec5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b6000600b8190556040517f2d4b4ecff7bd7503135271925520a2f6c0d98c9473ffc1a1e72c92502f51b25e9190a1565b3360009081526020819052604090205460011461156a5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b546001146115af576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020818152604080832092909255815192835290517f8834a87e641e9716be4f34527af5d23e11624f1ddeefede6ad75a9acfc31b9039281900390910190a150565b600b54600114611645576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b61164d61222f565b5060008681526003602090815260408083206001600160a01b0389168452825291829020825180840190935280548352600101549082015261168d612249565b50600087815260026020818152604092839020835160c0810185528154815260018201549281018390529281015493830193909352600383015460608301526004830154608083015260059092015460a08201529061171d5760405162461bcd60e51b815260040180806020018281038252602a815260200180612337602a913960400191505060405180910390fd5b8151611729908561214d565b8252602082015161173a908461214d565b6020830152805161174b908461214d565b8152602081015160009061175f9085612182565b9050600061177583602001518560200151612204565b90506117836008548361214d565b6008819055506117bf60008613156117ba85606001516117ab87600001518860200151612204565b1115600a546008541115612227565b61222b565b611810576040805162461bcd60e51b815260206004820152601b60248201527f53414645456e67696e652f6365696c696e672d65786365656465640000000000604482015290519081900360640190fd5b61183f61182560008713156000891215612227565b61183786600001518660400151612204565b83111561222b565b611886576040805162461bcd60e51b815260206004820152601360248201527253414645456e67696e652f6e6f742d7361666560681b604482015290519081900360640190fd5b6118a561189b60008713156000891215612227565b6117ba8b33611346565b6118e05760405162461bcd60e51b81526004018080602001828103825260258152602001806122806025913960400191505060405180910390fd5b6118f260008713156117ba8a33611346565b61192d5760405162461bcd60e51b81526004018080602001828103825260258152602001806122e96025913960400191505060405180910390fd5b61193f60008612156117ba8933611346565b611990576040805162461bcd60e51b815260206004820152601f60248201527f53414645456e67696e652f6e6f742d616c6c6f7765642d646562742d64737400604482015290519081900360640190fd5b6119a88460200151600014846080015183101561222b565b6119eb576040805162461bcd60e51b815260206004820152600f60248201526e14d05191515b99da5b994bd91d5cdd608a1b604482015290519081900360640190fd5b6000851315611a4f5760075484602001511115611a4f576040805162461bcd60e51b815260206004820152601b60248201527f53414645456e67696e652f61626f76652d646562742d6c696d69740000000000604482015290519081900360640190fd5b60008a81526004602090815260408083206001600160a01b038c168452909152902054611a7c90876121d0565b60008b81526004602090815260408083206001600160a01b03808e16855290835281842094909455928a168252600590522054611ab9908361214d565b60056000896001600160a01b03166001600160a01b031681526020019081526020016000208190555083600360008c815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501559050507f182725621f9c0d485fb256f86699c82616bd6e4670325087fd08f643cab7d9178a8a8a8a8a8a8a600001518b60200151600854604051808a8152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390a150505050505050505050565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290919086565b3360008181526001602090815260408083206001600160a01b0386168085529083528184209390935580519384529083019190915280517fb1b0368dbc2a1d366ba32be3f455812a3db862c3f52fd3434020a262442b1bb09281900390910190a150565b33600090815260208190526040902054600114611d2f5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b54600114611d74576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b816a736166657479507269636560a81b1415611da457600083815260026020819052604090912001819055611e6b565b816f6c69717569646174696f6e507269636560801b1415611dd8576000838152600260205260409020600501819055611e6b565b816a646562744365696c696e6760a81b1415611e07576000838152600260205260409020600301819055611e6b565b81683232b13a233637b7b960b91b1415611e34576000838152600260205260409020600401819055611e6b565b60405162461bcd60e51b81526004018080602001828103825260248152602001806122c56024913960400191505060405180910390fd5b604080518481526020810184905280820183905290517fc59b1109b54f213212d2f5af5c1dae5e887f9daa63b595578fae847cb048e8f49181900360600190a1505050565b3360008181526001602081815260408084206001600160a01b0387168086529083529381902092909255815193845283019190915280517ff7db8b086d1ab5e5802059364bff5428c7622c6d4623f9780947306d492770539281900390910190a150565b611f1e8333611346565b611f68576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b6001600160a01b038316600090815260056020526040902054611f8b90826121c0565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611fba90826121b0565b6001600160a01b0380841660008181526005602090815260409182902094909455805192871683529282015280820183905290517f4cd53b0b754082a31f5a6f3dc965c36d1d901c309830e0b4c17949aff97f0b149181900360600190a1505050565b60056020526000908152604090205481565b60075481565b336000908152602081905260409020546001146120835760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b546001146120c8576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b8170676c6f62616c446562744365696c696e6760781b14156120ee57600a81905561210e565b816e73616665446562744365696c696e6760881b1415611e345760078190555b604080518381526020810183905281517fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a929181900390910190a15050565b8181016000821215806121605750828111155b61216957600080fd5b6000821315806121795750828110155b61138057600080fd5b818102600083121561219357600080fd5b8115806121795750828282816121a557fe5b051461138057600080fd5b8082018281101561138057600080fd5b8082038281111561138057600080fd5b8082036000821315806121e35750828111155b6121ec57600080fd5b60008212158061217957508281101561138057600080fd5b60008115806121795750508082028282828161221c57fe5b041461138057600080fd5b1690565b1790565b604051806040016040528060008152602001600081525090565b6040518060c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe53414645456e67696e652f6e6f742d616c6c6f7765642d746f2d6d6f646966792d7361666553414645456e67696e652f636f6e74726163742d6e6f742d656e61626c65640053414645456e67696e652f6d6f646966792d756e7265636f676e697a65642d706172616d53414645456e67696e652f6e6f742d616c6c6f7765642d636f6c6c61746572616c2d73726353414645456e67696e652f636f6c6c61746572616c2d747970652d616c72656164792d65786973747353414645456e67696e652f636f6c6c61746572616c2d747970652d6e6f742d696e697469616c697a656453414645456e67696e652f6163636f756e742d6e6f742d617574686f72697a6564a264697066735822122019acaf0b758e88d7398641f8e6524b72e4cc129cbad4170247a0f607b8938f9664736f6c63430006070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806350de215d11610104578063d07900bb116100a2578063efabcadc11610071578063efabcadc1461063b578063fabde80c14610671578063fd450fb714610697578063fe4f58901461069f576101da565b8063d07900bb14610576578063d49d7867146105c6578063d4b9311d146105ec578063d94d420814610615576101da565b80638543d5e0116100de5780638543d5e0146104f8578063894ba8331461050057806394f3f81d1461050857806399bec3151461052e576101da565b806350de215d1461046d5780635e412858146104af57806376e0b4ca146104cc576101da565b80632efcc8661161017c578063476bb6ef1161014b578063476bb6ef146103755780634a11825e146103b75780634e14a967146103e95780634e5111a614610431576101da565b80632efcc866146102fa57806335b28153146103025780633d4225041461032857806341b3a0d91461036d576101da565b80631b142820116101b85780631b142820146102795780631d2a783d146102af57806324ba5884146102b757806327a0bb33146102dd576101da565b806306eb54df146101df5780630e9e11d31461021f57806311005b0714610253575b600080fd5b61020d600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106c2565b60408051918252519081900360200190f35b6102516004803603606081101561023557600080fd5b508035906001600160a01b0360208201351690604001356106df565b005b61020d6004803603602081101561026957600080fd5b50356001600160a01b0316610866565b6102516004803603606081101561028f57600080fd5b506001600160a01b03813581169160208101359091169060400135610878565b61020d6109e8565b61020d600480360360208110156102cd57600080fd5b50356001600160a01b03166109ee565b610251600480360360208110156102f357600080fd5b5035610a00565b61020d610b03565b6102516004803603602081101561031857600080fd5b50356001600160a01b0316610b09565b6103546004803603604081101561033e57600080fd5b50803590602001356001600160a01b0316610bee565b6040805192835260208301919091528051918290030190f35b61020d610c12565b610251600480360360a081101561038b57600080fd5b508035906001600160a01b03602082013581169160408101359091169060608101359060800135610c18565b610251600480360360608110156103cd57600080fd5b508035906001600160a01b036020820135169060400135610f68565b610251600480360360c08110156103ff57600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a0013561104f565b6102516004803603608081101561044757600080fd5b508035906001600160a01b03602082013581169160408101359091169060600135611215565b61049b6004803603604081101561048357600080fd5b506001600160a01b0381358116916020013516611346565b604080519115158252519081900360200190f35b610251600480360360208110156104c557600080fd5b5035611386565b61020d600480360360408110156104e257600080fd5b50803590602001356001600160a01b031661147b565b61020d611498565b61025161149e565b6102516004803603602081101561051e57600080fd5b50356001600160a01b031661151c565b610251600480360360c081101561054457600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a00135611600565b6105936004803603602081101561058c57600080fd5b5035611c46565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b610251600480360360208110156105dc57600080fd5b50356001600160a01b0316611c7d565b6102516004803603606081101561060257600080fd5b5080359060208101359060400135611ce1565b6102516004803603602081101561062b57600080fd5b50356001600160a01b0316611eb0565b6102516004803603606081101561065157600080fd5b506001600160a01b03813581169160208101359091169060400135611f14565b61020d6004803603602081101561068757600080fd5b50356001600160a01b031661201d565b61020d61202f565b610251600480360360408110156106b557600080fd5b5080359060200135612035565b600160209081526000928352604080842090915290825290205481565b3360009081526020819052604090205460011461072d5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b54600114610772576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b6000838152600260205260409020600181015461078f908361214d565b600182015580546000906107a39084612182565b6001600160a01b0385166000908152600560205260409020549091506107c9908261214d565b6001600160a01b0385166000908152600560205260409020556008546107ef908261214d565b60088190556001600160a01b0385166000818152600560209081526040918290205482518a8152918201939093528082018790526060810192909252608082019290925290517f5b9f54db46fa62a65324e3e9cad8e6fa0deb965ce36134b30377d7edd3a8136f9181900360a00190a15050505050565b60066020526000908152604090205481565b336000908152602081905260409020546001146108c65760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b6001600160a01b0383166000908152600660205260409020546108e990826121b0565b6001600160a01b0380851660009081526006602090815260408083209490945591851681526005909152205461091f90826121b0565b6001600160a01b03831660009081526005602052604090205560095461094590826121b0565b60095560085461095590826121b0565b60088190556001600160a01b038085166000818152600660209081526040808320549488168084526005835292819020546009548251958652928501939093528381018790526060840194909452608083019190915260a082015260c0810192909252517fede723541c3aae745504c3732f6a7161031353ddf05caba15d48b1edd35646b99181900360e00190a1505050565b60095481565b60006020819052908152604090205481565b33600081815260066020526040902054610a1a90836121c0565b6001600160a01b038216600090815260066020908152604080832093909355600590522054610a4990836121c0565b6001600160a01b038216600090815260056020526040902055600954610a6f90836121c0565b600955600854610a7f90836121c0565b60088190556001600160a01b0382166000818152600660209081526040808320546005835292819020546009548251958652928501889052848201939093526060840192909252608083015260a082019290925290517f11000f3497809a546a9de313df16f9ce615e1c65098ba758180e1cac823ed4159181900360c00190a15050565b600a5481565b33600090815260208190526040902054600114610b575760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b54600114610b9c576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152602081815260409182902060019055815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a150565b60036020908152600092835260408084209091529082529020805460019091015482565b600b5481565b60008581526003602090815260408083206001600160a01b0388811685529083528184209087168452818420898552600290935292208254610c5a90866121d0565b83556001830154610c6b90856121d0565b60018401558154610c7c908661214d565b82556001820154610c8d908561214d565b82600101819055506000610ca984600101548360010154612204565b90506000610cbf84600101548460010154612204565b9050610cdd610cce8a33611346565b610cd88a33611346565b612227565b610d27576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b610d3985600001548460020154612204565b821115610d8d576040805162461bcd60e51b815260206004820152601760248201527f53414645456e67696e652f6e6f742d736166652d737263000000000000000000604482015290519081900360640190fd5b610d9f84600001548460020154612204565b811115610df3576040805162461bcd60e51b815260206004820152601760248201527f53414645456e67696e652f6e6f742d736166652d647374000000000000000000604482015290519081900360640190fd5b610e0b8360040154831015866001015460001461222b565b610e52576040805162461bcd60e51b815260206004820152601360248201527253414645456e67696e652f647573742d73726360681b604482015290519081900360640190fd5b610e6a8360040154821015856001015460001461222b565b610eb1576040805162461bcd60e51b815260206004820152601360248201527214d05191515b99da5b994bd91d5cdd0b591cdd606a1b604482015290519081900360640190fd5b7f4b49cc19514005253f36d0517c21b92404f50cc0d9e0c070af00b96e296b08358a8a8a8a8a8a600001548b600101548b600001548c60010154604051808a8152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390a150505050505050505050565b33600090815260208190526040902054600114610fb65760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b60008381526004602090815260408083206001600160a01b0386168452909152902054610fe3908261214d565b60008481526004602090815260408083206001600160a01b038716808552908352928190209390935582518681529081019190915280820183905290517f488ac1e40bb6e5ee1f88b998568d1de4cb595e9ce0e0d4e4d4cc4c202053f1079181900360600190a1505050565b3360009081526020819052604090205460011461109d5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b60008681526003602090815260408083206001600160a01b03891684528252808320898452600290925290912081546110d6908561214d565b825560018201546110e7908461214d565b600183015580546110f8908461214d565b8155600181015460009061110c9085612182565b60008a81526004602090815260408083206001600160a01b038c16845290915290205490915061113c90866121d0565b60008a81526004602090815260408083206001600160a01b03808d16855290835281842094909455928916825260069052205461117990826121d0565b6001600160a01b03871660009081526006602052604090205560095461119f90826121d0565b6009819055604080518b81526001600160a01b03808c166020830152808b1682840152891660608201526080810188905260a0810187905260c0810192909252517f9bef7b734be54aaed05e906c2ccf923767f44a93d136b674e212ce858a6d031c9181900360e00190a1505050505050505050565b61121f8333611346565b611269576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b60008481526004602090815260408083206001600160a01b038716845290915290205461129690826121c0565b60008581526004602090815260408083206001600160a01b0388811685529252808320939093558416815220546112cd90826121b0565b60008581526004602090815260408083206001600160a01b038088168086529184529382902094909455805188815292871691830191909152818101929092526060810183905290517fb08760a077e71005cf3651212fdbd4028d6ebc8e1844c0475f36000f2756c0d79181900360800190a150505050565b6001600160a01b03828116600081815260016020818152604080842095871680855295909152822054919361137d9314911461222b565b90505b92915050565b336000908152602081905260409020546001146113d45760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600081815260026020526040902060010154156114225760405162461bcd60e51b815260040180806020018281038252602981526020018061230e6029913960400191505060405180910390fd5b6000818152600260209081526040918290206b033b2e3c9fd0803ce8000000600190910155815183815291517f715b265758bcd4ecd311bede8dcca05c4b5819e0a2a5c4103abd702862ae2c359281900390910190a150565b600460209081526000928352604080842090915290825290205481565b60085481565b336000908152602081905260409020546001146114ec5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b6000600b8190556040517f2d4b4ecff7bd7503135271925520a2f6c0d98c9473ffc1a1e72c92502f51b25e9190a1565b3360009081526020819052604090205460011461156a5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b546001146115af576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020818152604080832092909255815192835290517f8834a87e641e9716be4f34527af5d23e11624f1ddeefede6ad75a9acfc31b9039281900390910190a150565b600b54600114611645576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b61164d61222f565b5060008681526003602090815260408083206001600160a01b0389168452825291829020825180840190935280548352600101549082015261168d612249565b50600087815260026020818152604092839020835160c0810185528154815260018201549281018390529281015493830193909352600383015460608301526004830154608083015260059092015460a08201529061171d5760405162461bcd60e51b815260040180806020018281038252602a815260200180612337602a913960400191505060405180910390fd5b8151611729908561214d565b8252602082015161173a908461214d565b6020830152805161174b908461214d565b8152602081015160009061175f9085612182565b9050600061177583602001518560200151612204565b90506117836008548361214d565b6008819055506117bf60008613156117ba85606001516117ab87600001518860200151612204565b1115600a546008541115612227565b61222b565b611810576040805162461bcd60e51b815260206004820152601b60248201527f53414645456e67696e652f6365696c696e672d65786365656465640000000000604482015290519081900360640190fd5b61183f61182560008713156000891215612227565b61183786600001518660400151612204565b83111561222b565b611886576040805162461bcd60e51b815260206004820152601360248201527253414645456e67696e652f6e6f742d7361666560681b604482015290519081900360640190fd5b6118a561189b60008713156000891215612227565b6117ba8b33611346565b6118e05760405162461bcd60e51b81526004018080602001828103825260258152602001806122806025913960400191505060405180910390fd5b6118f260008713156117ba8a33611346565b61192d5760405162461bcd60e51b81526004018080602001828103825260258152602001806122e96025913960400191505060405180910390fd5b61193f60008612156117ba8933611346565b611990576040805162461bcd60e51b815260206004820152601f60248201527f53414645456e67696e652f6e6f742d616c6c6f7765642d646562742d64737400604482015290519081900360640190fd5b6119a88460200151600014846080015183101561222b565b6119eb576040805162461bcd60e51b815260206004820152600f60248201526e14d05191515b99da5b994bd91d5cdd608a1b604482015290519081900360640190fd5b6000851315611a4f5760075484602001511115611a4f576040805162461bcd60e51b815260206004820152601b60248201527f53414645456e67696e652f61626f76652d646562742d6c696d69740000000000604482015290519081900360640190fd5b60008a81526004602090815260408083206001600160a01b038c168452909152902054611a7c90876121d0565b60008b81526004602090815260408083206001600160a01b03808e16855290835281842094909455928a168252600590522054611ab9908361214d565b60056000896001600160a01b03166001600160a01b031681526020019081526020016000208190555083600360008c815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501559050507f182725621f9c0d485fb256f86699c82616bd6e4670325087fd08f643cab7d9178a8a8a8a8a8a8a600001518b60200151600854604051808a8152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390a150505050505050505050565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290919086565b3360008181526001602090815260408083206001600160a01b0386168085529083528184209390935580519384529083019190915280517fb1b0368dbc2a1d366ba32be3f455812a3db862c3f52fd3434020a262442b1bb09281900390910190a150565b33600090815260208190526040902054600114611d2f5760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b54600114611d74576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b816a736166657479507269636560a81b1415611da457600083815260026020819052604090912001819055611e6b565b816f6c69717569646174696f6e507269636560801b1415611dd8576000838152600260205260409020600501819055611e6b565b816a646562744365696c696e6760a81b1415611e07576000838152600260205260409020600301819055611e6b565b81683232b13a233637b7b960b91b1415611e34576000838152600260205260409020600401819055611e6b565b60405162461bcd60e51b81526004018080602001828103825260248152602001806122c56024913960400191505060405180910390fd5b604080518481526020810184905280820183905290517fc59b1109b54f213212d2f5af5c1dae5e887f9daa63b595578fae847cb048e8f49181900360600190a1505050565b3360008181526001602081815260408084206001600160a01b0387168086529083529381902092909255815193845283019190915280517ff7db8b086d1ab5e5802059364bff5428c7622c6d4623f9780947306d492770539281900390910190a150565b611f1e8333611346565b611f68576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b6001600160a01b038316600090815260056020526040902054611f8b90826121c0565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611fba90826121b0565b6001600160a01b0380841660008181526005602090815260409182902094909455805192871683529282015280820183905290517f4cd53b0b754082a31f5a6f3dc965c36d1d901c309830e0b4c17949aff97f0b149181900360600190a1505050565b60056020526000908152604090205481565b60075481565b336000908152602081905260409020546001146120835760405162461bcd60e51b81526004018080602001828103825260218152602001806123616021913960400191505060405180910390fd5b600b546001146120c8576040805162461bcd60e51b815260206004820152601f60248201526000805160206122a5833981519152604482015290519081900360640190fd5b8170676c6f62616c446562744365696c696e6760781b14156120ee57600a81905561210e565b816e73616665446562744365696c696e6760881b1415611e345760078190555b604080518381526020810183905281517fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a929181900390910190a15050565b8181016000821215806121605750828111155b61216957600080fd5b6000821315806121795750828110155b61138057600080fd5b818102600083121561219357600080fd5b8115806121795750828282816121a557fe5b051461138057600080fd5b8082018281101561138057600080fd5b8082038281111561138057600080fd5b8082036000821315806121e35750828111155b6121ec57600080fd5b60008212158061217957508281101561138057600080fd5b60008115806121795750508082028282828161221c57fe5b041461138057600080fd5b1690565b1790565b604051806040016040528060008152602001600081525090565b6040518060c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe53414645456e67696e652f6e6f742d616c6c6f7765642d746f2d6d6f646966792d7361666553414645456e67696e652f636f6e74726163742d6e6f742d656e61626c65640053414645456e67696e652f6d6f646966792d756e7265636f676e697a65642d706172616d53414645456e67696e652f6e6f742d616c6c6f7765642d636f6c6c61746572616c2d73726353414645456e67696e652f636f6c6c61746572616c2d747970652d616c72656164792d65786973747353414645456e67696e652f636f6c6c61746572616c2d747970652d6e6f742d696e697469616c697a656453414645456e67696e652f6163636f756e742d6e6f742d617574686f72697a6564a264697066735822122019acaf0b758e88d7398641f8e6524b72e4cc129cbad4170247a0f607b8938f9664736f6c63430006070033
Deployed Bytecode Sourcemap
803:24084:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;803:24084:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;1894:63:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;1894:63:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23975:909;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23975:909:0;;;-1:-1:-1;;;;;23975:909:0;;;;;;;;;;:::i;:::-;;4404:66;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4404:66:0;-1:-1:-1;;;;;4404:66:0;;:::i;22758:735::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;22758:735:0;;;;;;;;;;;;;;;;;:::i;4762:34::-;;;:::i;851:51::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;851:51:0;-1:-1:-1;;;;;851:51:0;;:::i;21940:476::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21940:476:0;;:::i;4863:33::-;;;:::i;1012:231::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1012:231:0;-1:-1:-1;;;;;1012:231:0;;:::i;3970:60::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3970:60:0;;;;;;-1:-1:-1;;;;;3970:60:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4983:31;;;:::i;17719:1996::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;17719:1996:0;;;-1:-1:-1;;;;;17719:1996:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;11334:328::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11334:328:0;;;-1:-1:-1;;;;;11334:328:0;;;;;;;;;;:::i;20316:1446::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20316:1446:0;;;-1:-1:-1;;;;;20316:1446:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11928:494::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;11928:494:0;;;-1:-1:-1;;;;;11928:494:0;;;;;;;;;;;;;;;;;;;:::i;2676:162::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;2676:162:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8923:330;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8923:330:0;;:::i;4077:70::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4077:70:0;;;;;;-1:-1:-1;;;;;4077:70:0;;:::i;4659:26::-;;;:::i;10935:120::-;;;:::i;1362:237::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1362:237:0;-1:-1:-1;;;;;1362:237:0;;:::i;13788:3479::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;13788:3479:0;;;-1:-1:-1;;;;;13788:3479:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3864:70::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3864:70:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2413:167;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2413:167:0;-1:-1:-1;;;;;2413:167:0;;:::i;10096:739::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10096:739:0;;;;;;;;;;;;:::i;2094:173::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2094:173:0;-1:-1:-1;;;;;2094:173:0;;:::i;12652:337::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;12652:337:0;;;;;;;;;;;;;;;;;:::i;4205:66::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4205:66:0;-1:-1:-1;;;;;4205:66:0;;:::i;4554:30::-;;;:::i;9428:419::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9428:419:0;;;;;;;:::i;1894:63::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;23975:909::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24145:15:::1;;24164:1;24145:20;24137:64;;;::::0;;-1:-1:-1;;;24137:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24137:64:0;;;;;;;;;;;;;::::1;;24212:38;24253:31:::0;;;:15:::1;:31;::::0;;;;24345::::1;::::0;::::1;::::0;24336:57:::1;::::0;24378:14;24336:8:::1;:57::i;:::-;24295:31;::::0;::::1;:98:::0;24454:26;;24404:16:::1;::::0;24445:52:::1;::::0;24482:14;24445:8:::1;:52::i;:::-;-1:-1:-1::0;;;;;24558:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;;24404:93;;-1:-1:-1;24549:47:0::1;::::0;24404:93;24549:8:::1;:47::i;:::-;-1:-1:-1::0;;;;;24508:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;:88;24657:10:::1;::::0;24648:34:::1;::::0;24669:12;24648:8:::1;:34::i;:::-;24607:10;:75:::0;;;-1:-1:-1;;;;;24817:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;;;;;;24698:178;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;1817:1;;23975:909:::0;;;:::o;4404:66::-;;;;;;;;;;;;;:::o;22758:735::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22954:28:0;::::1;;::::0;;;:11:::1;:28;::::0;;;;;22945:43:::1;::::0;22984:3;22945:8:::1;:43::i;:::-;-1:-1:-1::0;;;;;22913:28:0;;::::1;;::::0;;;:11:::1;:28;::::0;;;;;;;:75;;;;23040:28;;::::1;::::0;;:11:::1;:28:::0;;;;;23031:43:::1;::::0;23070:3;23031:8:::1;:43::i;:::-;-1:-1:-1::0;;;;;22999:28:0;::::1;;::::0;;;:11:::1;:28;::::0;;;;:75;23126:18:::1;::::0;23117:33:::1;::::0;23146:3;23117:8:::1;:33::i;:::-;23085:18;:65:::0;23202:10:::1;::::0;23193:25:::1;::::0;23214:3;23193:8:::1;:25::i;:::-;23161:10;:57:::0;;;-1:-1:-1;;;;;23345:28:0;;::::1;;::::0;;;:11:::1;:28;::::0;;;;;;;;23388;;::::1;::::0;;;:11:::1;:28:::0;;;;;;;23431:18:::1;::::0;23234:251;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;22758:735:::0;;;:::o;4762:34::-;;;;:::o;851:51::-;;;;;;;;;;;;;;:::o;21940:476::-;22014:10;21990:15;22068:20;;;:11;:20;;;;;;22059:35;;22090:3;22059:8;:35::i;:::-;-1:-1:-1;;;;;22035:20:0;;;;;;:11;:20;;;;;;;;:59;;;;22138:11;:20;;;;22129:35;;22160:3;22129:8;:35::i;:::-;-1:-1:-1;;;;;22105:20:0;;;;;;:11;:20;;;;;:59;22208:18;;22199:33;;22228:3;22199:8;:33::i;:::-;22175:18;:57;22276:10;;22267:25;;22288:3;22267:8;:25::i;:::-;22243:10;:49;;;-1:-1:-1;;;;;22333:20:0;;;;;;:11;:20;;;;;;;;;22355:11;:20;;;;;;;22377:18;;22308:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21940:476;;:::o;4863:33::-;;;;:::o;1012:231::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1096:15:::1;;1115:1;1096:20;1088:64;;;::::0;;-1:-1:-1;;;1088:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;1088:64:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;1163:27:0;::::1;:18;:27:::0;;;::::1;::::0;;;;;;;;1193:1:::1;1163:31:::0;;1210:25;;;;;;;::::1;::::0;;;;;;;;::::1;1012:231:::0;:::o;3970:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4983:31::-;;;;:::o;17719:1996::-;17916:20;17939:21;;;:5;:21;;;;;;;;-1:-1:-1;;;;;17939:26:0;;;;;;;;;;;17999;;;;;;;;18077:31;;;:15;:31;;;;;18157:24;;18148:51;;18183:15;18148:8;:51::i;:::-;18121:78;;18246:21;;;;18237:42;;18269:9;18237:8;:42::i;:::-;18210:21;;;:69;18326:24;;18317:51;;18352:15;18317:8;:51::i;:::-;18290:78;;18415:21;;;;18406:42;;18438:9;18406:8;:42::i;:::-;18379:7;:21;;:69;;;;18461:23;18487:64;18496:7;:21;;;18519:15;:31;;;18487:8;:64::i;:::-;18461:90;;18562:23;18588:64;18597:7;:21;;;18620:15;:31;;;18588:8;:64::i;:::-;18562:90;;18704:68;18709:30;18723:3;18728:10;18709:13;:30::i;:::-;18741;18755:3;18760:10;18741:13;:30::i;:::-;18704:4;:68::i;:::-;18696:103;;;;;-1:-1:-1;;;18696:103:0;;;;;;;;;;;;-1:-1:-1;;;18696:103:0;;;;;;;;;;;;;;;18870:63;18879:7;:24;;;18905:15;:27;;;18870:8;:63::i;:::-;18848:18;:85;;18840:121;;;;;-1:-1:-1;;;18840:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19002:63;19011:7;:24;;;19037:15;:27;;;19002:8;:63::i;:::-;18980:18;:85;;18972:121;;;;;-1:-1:-1;;;18972:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19147:83;19176:15;:25;;;19154:18;:47;;19203:7;:21;;;19228:1;19203:26;19147:6;:83::i;:::-;19139:115;;;;;-1:-1:-1;;;19139:115:0;;;;;;;;;;;;-1:-1:-1;;;19139:115:0;;;;;;;;;;;;;;;19273:83;19302:15;:25;;;19280:18;:47;;19329:7;:21;;;19354:1;19329:26;19273:6;:83::i;:::-;19265:115;;;;;-1:-1:-1;;;19265:115:0;;;;;;;;;;;;-1:-1:-1;;;19265:115:0;;;;;;;;;;;;;;;19398:309;19442:14;19471:3;19489;19507:15;19537:9;19561:7;:24;;;19600:7;:21;;;19636:7;:24;;;19675:7;:21;;;19398:309;;;;;;;;;-1:-1:-1;;;;;19398:309:0;-1:-1:-1;;;;;19398:309:0;;;;;;-1:-1:-1;;;;;19398:309:0;-1:-1:-1;;;;;19398:309:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17719:1996;;;;;;;;;;:::o;11334:328::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11539:31:::1;::::0;;;:15:::1;:31;::::0;;;;;;;-1:-1:-1;;;;;11539:40:0;::::1;::::0;;;;;;;;11530:55:::1;::::0;11581:3;11530:8:::1;:55::i;:::-;11487:31;::::0;;;:15:::1;:31;::::0;;;;;;;-1:-1:-1;;;;;11487:40:0;::::1;::::0;;;;;;;;;;:98;;;;11601:53;;;;;;;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;11334:328:::0;;;:::o;20316:1446::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20583:18:::1;20604:21:::0;;;:5:::1;:21;::::0;;;;;;;-1:-1:-1;;;;;20604:27:0;::::1;::::0;;;;;;;20683:31;;;:15:::1;:31:::0;;;;;;20761:22;;20752:49:::1;::::0;20785:15;20752:8:::1;:49::i;:::-;20727:74:::0;;20843:19:::1;::::0;::::1;::::0;20834:40:::1;::::0;20864:9;20834:8:::1;:40::i;:::-;20812:19;::::0;::::1;:62:::0;20923:26;;20914:47:::1;::::0;20951:9;20914:8:::1;:47::i;:::-;20885:76:::0;;21010:31:::1;::::0;::::1;::::0;20885:26:::1;::::0;21001:52:::1;::::0;21043:9;21001:8:::1;:52::i;:::-;21145:31;::::0;;;:15:::1;:31;::::0;;;;;;;-1:-1:-1;;;;;21145:55:0;::::1;::::0;;;;;;;;20974:79;;-1:-1:-1;21124:115:0::1;::::0;21213:15;21124:8:::1;:115::i;:::-;21066:31;::::0;;;:15:::1;:31;::::0;;;;;;;-1:-1:-1;;;;;21066:55:0;;::::1;::::0;;;;;;;;:173;;;;21303:29;;::::1;::::0;;:11:::1;:29:::0;;;;21282:94:::1;::::0;21345:20;21282:8:::1;:94::i;:::-;-1:-1:-1::0;;;;;21250:29:0;::::1;;::::0;;;:11:::1;:29;::::0;;;;:126;21429:18:::1;::::0;21408:83:::1;::::0;21460:20;21408:8:::1;:83::i;:::-;21387:18;:104:::0;;;21509:245:::1;::::0;;;;;-1:-1:-1;;;;;21509:245:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;1817:1;;;20316:1446:::0;;;;;;:::o;11928:494::-;12090:30;12104:3;12109:10;12090:13;:30::i;:::-;12082:65;;;;;-1:-1:-1;;;12082:65:0;;;;;;;;;;;;-1:-1:-1;;;12082:65:0;;;;;;;;;;;;;;;12206:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;12206:36:0;;;;;;;;;;12197:51;;12244:3;12197:8;:51::i;:::-;12158:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;12158:36:0;;;;;;;;;;:90;;;;12307:36;;;;;;12298:51;;12345:3;12298:8;:51::i;:::-;12259:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;12259:36:0;;;;;;;;;;;;;:90;;;;12365:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11928:494;;;;:::o;2676:162::-;-1:-1:-1;;;;;2782:15:0;;;2751:4;2799:16;;;:10;:16;;;;;;;;2782:15;;;2799:25;;;;;;;;;;2751:4;;2775:55;;2782:15;;2799:30;2775:6;:55::i;:::-;2768:62;;2676:162;;;;;:::o;8923:330::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9022:31:::1;::::0;;;:15:::1;:31;::::0;;;;:47:::1;;::::0;:52;9014:106:::1;;;;-1:-1:-1::0;;;9014:106:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9131:31;::::0;;;:15:::1;:31;::::0;;;;;;;;9181:8:::1;9131:47;::::0;;::::1;:58:::0;9205:40;;;;;;;::::1;::::0;;;;;;;;::::1;8923:330:::0;:::o;4077:70::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;4659:26::-;;;;:::o;10935:120::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11013:1:::1;10995:15;:19:::0;;;11030:17:::1;::::0;::::1;::::0;11013:1;11030:17:::1;10935:120::o:0;1362:237::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1449:15:::1;;1468:1;1449:20;1441:64;;;::::0;;-1:-1:-1;;;1441:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;1441:64:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;1516:27:0;::::1;1546:1;1516:27:::0;;;::::1;::::0;;;;;;;:31;;;;1563:28;;;;;;;::::1;::::0;;;;;;;;::::1;1362:237:::0;:::o;13788:3479::-;14066:15;;14085:1;14066:20;14058:64;;;;;-1:-1:-1;;;14058:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14058:64:0;;;;;;;;;;;;;;;14135:20;;:::i;:::-;-1:-1:-1;14158:21:0;;;;:5;:21;;;;;;;;-1:-1:-1;;;;;14158:27:0;;;;;;;;;;14135:50;;;;;;;;;;;;;;;;;;;14196:40;;:::i;:::-;-1:-1:-1;14239:31:0;;;;:15;:31;;;;;;;;;14196:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14330:94;;;;-1:-1:-1;;;14330:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14479:25;;14470:52;;14506:15;14470:8;:52::i;:::-;14437:85;;14575:22;;;;14566:43;;14599:9;14566:8;:43::i;:::-;14533:22;;;:76;14662:29;;14653:50;;14693:9;14653:8;:50::i;:::-;14620:83;;14749:34;;;;14620:29;;14740:55;;14785:9;14740:8;:55::i;:::-;14716:79;;14806:20;14830:68;14839:18;:34;;;14875:8;:22;;;14830:8;:68::i;:::-;14806:92;;14933:39;14942:10;;14954:17;14933:8;:39::i;:::-;14909:10;:63;;;;15078:228;15112:1;15099:9;:14;;15128:163;15212:18;:30;;;15133:75;15142:18;:29;;;15173:18;:34;;;15133:8;:75::i;:::-;:109;;15273:17;;15259:10;;:31;;15128:4;:163::i;:::-;15078:6;:228::i;:::-;15058:301;;;;;-1:-1:-1;;;15058:301:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15455:177;15476:42;15494:1;15481:9;:14;;15516:1;15497:15;:20;;15476:4;:42::i;:::-;15552:67;15561:8;:25;;;15588:18;:30;;;15552:8;:67::i;:::-;15533:15;:86;;15455:6;:177::i;:::-;15435:242;;;;;-1:-1:-1;;;15435:242:0;;;;;;;;;;;;-1:-1:-1;;;15435:242:0;;;;;;;;;;;;;;;15758:83;15765:42;15783:1;15770:9;:14;;15805:1;15786:15;:20;;15765:4;:42::i;:::-;15809:31;15823:4;15829:10;15809:13;:31::i;15758:83::-;15750:133;;;;-1:-1:-1;;;15750:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15938:73;15964:1;15945:15;:20;;15967:43;15981:16;15999:10;15967:13;:43::i;15938:73::-;15930:123;;;;-1:-1:-1;;;15930:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16102:66;16122:1;16109:9;:14;;16125:42;16139:15;16156:10;16125:13;:42::i;16102:66::-;16094:110;;;;;-1:-1:-1;;;16094:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16277:84;16284:8;:22;;;16310:1;16284:27;16332:18;:28;;;16313:15;:47;;16277:6;:84::i;:::-;16269:112;;;;;-1:-1:-1;;;16269:112:0;;;;;;;;;;;;-1:-1:-1;;;16269:112:0;;;;;;;;;;;;;;;16463:1;16451:9;:13;16447:125;;;16513:15;;16487:8;:22;;;:41;;16479:81;;;;;-1:-1:-1;;;16479:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16656:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;16656:49:0;;;;;;;;;;16647:76;;16707:15;16647:8;:76::i;:::-;16584:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;16584:49:0;;;;;;;;;;;:139;;;;16776:28;;;;;:11;:28;;;;16767:57;;16806:17;16767:8;:57::i;:::-;16736:11;:28;16748:15;-1:-1:-1;;;;;16736:28:0;-1:-1:-1;;;;;16736:28:0;;;;;;;;;;;;:88;;;;16867:8;16837:5;:21;16843:14;16837:21;;;;;;;;;;;:27;16859:4;-1:-1:-1;;;;;16837:27:0;-1:-1:-1;;;;;16837:27:0;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;;16920:18;16886:15;:31;16902:14;16886:31;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16956:303;16998:14;17027:4;17046:16;17077:15;17107;17137:9;17161:8;:25;;;17201:8;:22;;;17238:10;;16956:303;;;;;;;;;-1:-1:-1;;;;;16956:303:0;-1:-1:-1;;;;;16956:303:0;;;;;;-1:-1:-1;;;;;16956:303:0;-1:-1:-1;;;;;16956:303:0;;;;;;-1:-1:-1;;;;;16956:303:0;-1:-1:-1;;;;;16956:303:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13788:3479;;;;;;;;;;:::o;3864:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2413:167::-;2491:10;2514:1;2480:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;2480:31:0;;;;;;;;;;;:35;;;;2531:41;;;;;;;;;;;;;;;;;;;;;;;;2413:167;:::o;10096:739::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10251:15:::1;;10270:1;10251:20;10243:64;;;::::0;;-1:-1:-1;;;10243:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;10243:64:0;;;;;;;;;;;;;::::1;;10322:9;-1:-1:-1::0;;;10322:26:0::1;10318:444;;;10350:31;::::0;;;:15:::1;:31;::::0;;;;;;;:43:::1;:50:::0;;;10318:444:::1;;;10420:9;-1:-1:-1::0;;;10420:31:0::1;10416:346;;;10453:31;::::0;;;:15:::1;:31;::::0;;;;:48:::1;;:55:::0;;;10416:346:::1;;;10528:9;-1:-1:-1::0;;;10528:26:0::1;10524:238;;;10556:31;::::0;;;:15:::1;:31;::::0;;;;:43:::1;;:50:::0;;;10524:238:::1;;;10626:9;-1:-1:-1::0;;;10626:24:0::1;10622:140;;;10652:31;::::0;;;:15:::1;:31;::::0;;;;:41:::1;;:48:::0;;;10622:140:::1;;;10716:46;;-1:-1:-1::0;;;10716:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10622:140;10778:49;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;10096:739:::0;;;:::o;2094:173::-;2175:10;2164:22;;;;2198:1;2164:22;;;;;;;;-1:-1:-1;;;;;2164:31:0;;;;;;;;;;;;:35;;;;2215:44;;;;;;;;;;;;;;;;;;;;;;;2094:173;:::o;12652:337::-;12750:30;12764:3;12769:10;12750:13;:30::i;:::-;12742:65;;;;;-1:-1:-1;;;12742:65:0;;;;;;;;;;;;-1:-1:-1;;;12742:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;12846:16:0;;;;;;:11;:16;;;;;;12837:31;;12864:3;12837:8;:31::i;:::-;-1:-1:-1;;;;;12818:16:0;;;;;;;:11;:16;;;;;;:50;;;;12907:16;;;;;;;12898:31;;12925:3;12898:8;:31::i;:::-;-1:-1:-1;;;;;12879:16:0;;;;;;;:11;:16;;;;;;;;;:50;;;;12945:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;12652:337;;;:::o;4205:66::-;;;;;;;;;;;;;:::o;4554:30::-;;;;:::o;9428:419::-;1752:10;1733:18;:30;;;;;;;;;;;1767:1;1733:35;1725:81;;;;-1:-1:-1;;;1725:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9525:15:::1;;9544:1;9525:20;9517:64;;;::::0;;-1:-1:-1;;;9517:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;9517:64:0;;;;;;;;;;;;;::::1;;9596:9;-1:-1:-1::0;;;9596:32:0::1;9592:198;;;9630:17;:24:::0;;;9592:198:::1;;;9674:9;-1:-1:-1::0;;;9674:30:0::1;9670:120;;;9706:15;:22:::0;;;9670:120:::1;9806:33;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;9428:419:::0;;:::o;7522:170::-;7601:11;;;7578:6;7631;;;;:16;;;7646:1;7641;:6;;7631:16;7623:25;;12:1:-1;9;2:12;7623:25:0;7672:1;7667;:6;;:16;;;;7682:1;7677;:6;;7667:16;7659:25;;12:1:-1;9;2:12;8210:172:0;8288:10;;;8266:5;8317:11;;;8309:20;;12:1:-1;9;2:12;8309:20:0;8348:6;;;:25;;;8371:1;8362;8358;:5;;;;;;:15;8340:34;;12:1:-1;9;2:12;8388:109:0;8477:5;;;8472:16;;;;8464:25;;12:1:-1;9;2:12;8503:109:0;8592:5;;;8587:16;;;;8579:25;;12:1:-1;9;2:12;7866:170:0;7945:11;;;7922:6;7975;;;;:16;;;7990:1;7985;:6;;7975:16;7967:25;;12:1:-1;9;2:12;7967:25:0;8016:1;8011;:6;;:16;;;;8026:1;8021;:6;;8003:25;;12:1:-1;9;2:12;8618:123:0;8675:6;8702;;;:30;;-1:-1:-1;;8717:5:0;;;8731:1;8726;8717:5;8726:1;8712:15;;;;;:20;8694:39;;12:1:-1;9;2:12;13108:104:0;13195:9;;13188:17::o;12997:105::-;13086:8;;13079:16::o;803:24084::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://19acaf0b758e88d7398641f8e6524b72e4cc129cbad4170247a0f607b8938f96
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.