| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| 0xb9532f8d0ccebe4508f0e8371f1fca91c169a539decaca2a4dd9dbcd8c1c99e0 | Multicall | (pending) | 3 days ago | IN | 0 ETH | (Pending) | |||
| Get Reward | 24511588 | 13 mins ago | IN | 0 ETH | 0.00011322 | ||||
| Get Reward | 24511586 | 14 mins ago | IN | 0 ETH | 0.00011505 | ||||
| Get Reward | 24511582 | 15 mins ago | IN | 0 ETH | 0.00012975 | ||||
| Multicall | 24511448 | 41 mins ago | IN | 0 ETH | 0.00069086 | ||||
| Multicall | 24511421 | 47 mins ago | IN | 0 ETH | 0.00002191 | ||||
| Multicall | 24510841 | 2 hrs ago | IN | 0 ETH | 0.00001736 | ||||
| Get Reward | 24510490 | 3 hrs ago | IN | 0 ETH | 0.00000486 | ||||
| Get Reward | 24510084 | 5 hrs ago | IN | 0 ETH | 0.00022513 | ||||
| Multicall | 24509889 | 5 hrs ago | IN | 0 ETH | 0.00001033 | ||||
| Multicall | 24509590 | 6 hrs ago | IN | 0 ETH | 0.00001147 | ||||
| Multicall | 24509356 | 7 hrs ago | IN | 0 ETH | 0.00000917 | ||||
| Multicall | 24508663 | 10 hrs ago | IN | 0 ETH | 0.00000812 | ||||
| Multicall | 24508656 | 10 hrs ago | IN | 0 ETH | 0.00005161 | ||||
| Select Farm | 24508402 | 10 hrs ago | IN | 0 ETH | 0.00002578 | ||||
| Get Reward | 24508380 | 10 hrs ago | IN | 0 ETH | 0.00001448 | ||||
| Get Reward | 24508373 | 10 hrs ago | IN | 0 ETH | 0.00001496 | ||||
| Multicall | 24508356 | 11 hrs ago | IN | 0 ETH | 0.00005025 | ||||
| Get Reward | 24508200 | 11 hrs ago | IN | 0 ETH | 0.00022525 | ||||
| Get Reward | 24508097 | 11 hrs ago | IN | 0 ETH | 0.00000911 | ||||
| Get Reward | 24508091 | 11 hrs ago | IN | 0 ETH | 0.00000687 | ||||
| Multicall | 24507945 | 12 hrs ago | IN | 0 ETH | 0.00001193 | ||||
| Lock | 24507871 | 12 hrs ago | IN | 0 ETH | 0.00001341 | ||||
| Select Vote Dele... | 24507842 | 12 hrs ago | IN | 0 ETH | 0.00028143 | ||||
| Get Reward | 24507826 | 12 hrs ago | IN | 0 ETH | 0.0002252 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x3d602d80 | 24509786 | 6 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24507836 | 12 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24505659 | 20 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24505149 | 21 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24504860 | 22 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24504801 | 22 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24504214 | 24 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24502831 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24501847 | 32 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24501203 | 34 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24499579 | 40 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24498944 | 42 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24497678 | 46 hrs ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24497178 | 2 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24496166 | 2 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24491768 | 2 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24491668 | 2 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24490983 | 2 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24490331 | 2 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24488517 | 3 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24487990 | 3 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24487882 | 3 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24487018 | 3 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24486828 | 3 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 24486110 | 3 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x6E7BfAEB...06eAe7795 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
LockstakeEngine
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-FileCopyrightText: © 2023 Dai Foundation <www.daifoundation.org>
// SPDX-License-Identifier: AGPL-3.0-or-later
//
// 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.8.21;
import { LockstakeUrn } from "src/LockstakeUrn.sol";
import { Multicall } from "src/Multicall.sol";
interface VoteDelegateFactoryLike {
function created(address) external returns (uint256);
}
interface VoteDelegateLike {
function lock(uint256) external;
function free(uint256) external;
}
interface VatLike {
function ilks(bytes32) external view returns (uint256, uint256, uint256, uint256, uint256);
function urns(bytes32, address) external view returns (uint256, uint256);
function hope(address) external;
function slip(bytes32, address, int256) external;
function frob(bytes32, address, address, address, int256, int256) external;
function grab(bytes32, address, address, address, int256, int256) external;
}
interface UsdsJoinLike {
function vat() external view returns (VatLike);
function usds() external view returns (GemLike);
function join(address, uint256) external;
function exit(address, uint256) external;
}
interface GemLike {
function approve(address, uint256) external;
function transfer(address, uint256) external;
function transferFrom(address, address, uint256) external;
function mint(address, uint256) external;
function burn(address, uint256) external;
}
interface JugLike {
function drip(bytes32) external returns (uint256);
}
contract LockstakeEngine is Multicall {
// --- storage variables ---
mapping(address usr => uint256 allowed) public wards;
mapping(address farm => FarmStatus) public farms;
mapping(address owner => uint256 count) public ownerUrnsCount;
mapping(address owner => mapping(uint256 index => address urn)) public ownerUrns;
mapping(address urn => address owner) public urnOwners;
mapping(address urn => mapping(address usr => uint256 allowed)) public urnCan;
mapping(address urn => address voteDelegate) public urnVoteDelegates;
mapping(address urn => address farm) public urnFarms;
mapping(address urn => uint256 auctionsCount) public urnAuctions;
JugLike public jug;
// --- constants and enums ---
uint256 constant WAD = 10**18;
uint256 constant RAY = 10**27;
enum FarmStatus { UNSUPPORTED, ACTIVE, DELETED }
// --- immutables ---
VoteDelegateFactoryLike immutable public voteDelegateFactory;
VatLike immutable public vat;
UsdsJoinLike immutable public usdsJoin;
GemLike immutable public usds;
bytes32 immutable public ilk;
GemLike immutable public sky;
GemLike immutable public lssky;
address immutable public urnImplementation;
uint256 immutable public fee;
// --- events ---
event Rely(address indexed usr);
event Deny(address indexed usr);
event File(bytes32 indexed what, address data);
event AddFarm(address farm);
event DelFarm(address farm);
event Open(address indexed owner, uint256 indexed index, address urn);
event Hope(address indexed owner, uint256 indexed index, address indexed usr);
event Nope(address indexed owner, uint256 indexed index, address indexed usr);
event SelectVoteDelegate(address indexed owner, uint256 indexed index, address indexed voteDelegate);
event SelectFarm(address indexed owner, uint256 indexed index, address indexed farm, uint16 ref);
event Lock(address indexed owner, uint256 indexed index, uint256 wad, uint16 ref);
event Free(address indexed owner, uint256 indexed index, address to, uint256 wad, uint256 freed);
event FreeNoFee(address indexed owner, uint256 indexed index, address to, uint256 wad);
event Draw(address indexed owner, uint256 indexed index, address to, uint256 wad);
event Wipe(address indexed owner, uint256 indexed index, uint256 wad);
event GetReward(address indexed owner, uint256 indexed index, address indexed farm, address to, uint256 amt);
event OnKick(address indexed urn, uint256 wad);
event OnTake(address indexed urn, address indexed who, uint256 wad);
event OnRemove(address indexed urn, uint256 sold, uint256 burn, uint256 refund);
// --- modifiers ---
modifier auth {
require(wards[msg.sender] == 1, "LockstakeEngine/not-authorized");
_;
}
// --- constructor ---
constructor(address voteDelegateFactory_, address usdsJoin_, bytes32 ilk_, address sky_, address lssky_, uint256 fee_) {
require(fee_ < WAD, "LockstakeEngine/fee-equal-or-greater-wad");
voteDelegateFactory = VoteDelegateFactoryLike(voteDelegateFactory_);
usdsJoin = UsdsJoinLike(usdsJoin_);
vat = usdsJoin.vat();
usds = usdsJoin.usds();
ilk = ilk_;
sky = GemLike(sky_);
lssky = GemLike(lssky_);
fee = fee_;
urnImplementation = address(new LockstakeUrn(address(vat), lssky_));
vat.hope(usdsJoin_);
usds.approve(usdsJoin_, type(uint256).max);
wards[msg.sender] = 1;
emit Rely(msg.sender);
}
// --- internals ---
function _min(uint256 x, uint256 y) internal pure returns (uint256 z) {
z = x <= y ? x : y;
}
function _divup(uint256 x, uint256 y) internal pure returns (uint256 z) {
// Note: _divup(0,0) will return 0 differing from natural solidity division
unchecked {
z = x != 0 ? ((x - 1) / y) + 1 : 0;
}
}
function _urnAuth(address owner, address urn, address usr) internal view returns (bool ok) {
ok = owner == usr || urnCan[urn][usr] == 1;
}
function _getUrn(address owner, uint256 index) internal view returns (address urn) {
urn = ownerUrns[owner][index];
require(urn != address(0), "LockstakeEngine/invalid-urn");
}
function _getAuthedUrn(address owner, uint256 index) internal view returns (address urn) {
urn = _getUrn(owner, index);
require(_urnAuth(owner, urn, msg.sender), "LockstakeEngine/urn-not-authorized");
}
// See the reference implementation in https://eips.ethereum.org/EIPS/eip-1167
function _initCode() internal view returns (bytes memory code) {
code = new bytes(0x37);
bytes20 impl = bytes20(urnImplementation);
assembly {
mstore(add(code, 0x20), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
mstore(add(code, add(0x20, 0x14)), impl)
mstore(add(code, add(0x20, 0x28)), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
}
}
// --- administration ---
function rely(address usr) external auth {
wards[usr] = 1;
emit Rely(usr);
}
function deny(address usr) external auth {
wards[usr] = 0;
emit Deny(usr);
}
function file(bytes32 what, address data) external auth {
if (what == "jug") {
jug = JugLike(data);
} else revert("LockstakeEngine/file-unrecognized-param");
emit File(what, data);
}
function addFarm(address farm) external auth {
farms[farm] = FarmStatus.ACTIVE;
emit AddFarm(farm);
}
function delFarm(address farm) external auth {
farms[farm] = FarmStatus.DELETED;
emit DelFarm(farm);
}
// --- getters ---
function isUrnAuth(address owner, uint256 index, address usr) external view returns (bool ok) {
ok = _urnAuth(owner, _getUrn(owner, index), usr);
}
// --- urn management functions ---
function open(uint256 index) external returns (address urn) {
require(index == ownerUrnsCount[msg.sender]++, "LockstakeEngine/wrong-urn-index");
bytes memory initCode = _initCode();
assembly { urn := create(0, add(initCode, 0x20), 0x37) }
LockstakeUrn(urn).init(); // would revert if create had failed
ownerUrns[msg.sender][index] = urn;
urnOwners[urn] = msg.sender;
emit Open(msg.sender, index, urn);
}
function hope(address owner, uint256 index, address usr) external {
address urn = _getAuthedUrn(owner, index);
urnCan[urn][usr] = 1;
emit Hope(owner, index, usr);
}
function nope(address owner, uint256 index, address usr) external {
address urn = _getAuthedUrn(owner, index);
urnCan[urn][usr] = 0;
emit Nope(owner, index, usr);
}
// --- delegation/staking functions ---
function selectVoteDelegate(address owner, uint256 index, address voteDelegate) external {
address urn = _getAuthedUrn(owner, index);
require(urnAuctions[urn] == 0, "LockstakeEngine/urn-in-auction");
require(voteDelegate == address(0) || voteDelegateFactory.created(voteDelegate) == 1, "LockstakeEngine/not-valid-vote-delegate");
address prevVoteDelegate = urnVoteDelegates[urn];
require(prevVoteDelegate != voteDelegate, "LockstakeEngine/same-vote-delegate");
(uint256 ink, uint256 art) = vat.urns(ilk, urn);
if (art > 0 && voteDelegate != address(0)) {
(,, uint256 spot,,) = vat.ilks(ilk);
require(ink * spot >= art * jug.drip(ilk), "LockstakeEngine/urn-unsafe");
}
_selectVoteDelegate(urn, ink, prevVoteDelegate, voteDelegate);
emit SelectVoteDelegate(owner, index, voteDelegate);
}
function _selectVoteDelegate(address urn, uint256 wad, address prevVoteDelegate, address voteDelegate) internal {
if (wad > 0) {
if (prevVoteDelegate != address(0)) {
VoteDelegateLike(prevVoteDelegate).free(wad);
}
if (voteDelegate != address(0)) {
sky.approve(voteDelegate, wad);
VoteDelegateLike(voteDelegate).lock(wad);
}
}
urnVoteDelegates[urn] = voteDelegate;
}
function selectFarm(address owner, uint256 index, address farm, uint16 ref) external {
address urn = _getAuthedUrn(owner, index);
require(urnAuctions[urn] == 0, "LockstakeEngine/urn-in-auction");
require(farm == address(0) || farms[farm] == FarmStatus.ACTIVE, "LockstakeEngine/farm-unsupported-or-deleted");
address prevFarm = urnFarms[urn];
require(prevFarm != farm, "LockstakeEngine/same-farm");
(uint256 ink,) = vat.urns(ilk, urn);
_selectFarm(urn, ink, prevFarm, farm, ref);
emit SelectFarm(owner, index, farm, ref);
}
function _selectFarm(address urn, uint256 wad, address prevFarm, address farm, uint16 ref) internal {
if (wad > 0) {
if (prevFarm != address(0)) {
LockstakeUrn(urn).withdraw(prevFarm, wad);
}
if (farm != address(0)) {
LockstakeUrn(urn).stake(farm, wad, ref);
}
}
urnFarms[urn] = farm;
}
function lock(address owner, uint256 index, uint256 wad, uint16 ref) external {
address urn = _getUrn(owner, index);
sky.transferFrom(msg.sender, address(this), wad);
require(wad <= uint256(type(int256).max), "LockstakeEngine/overflow");
address voteDelegate = urnVoteDelegates[urn];
if (voteDelegate != address(0)) {
sky.approve(voteDelegate, wad);
VoteDelegateLike(voteDelegate).lock(wad);
}
vat.slip(ilk, urn, int256(wad));
vat.frob(ilk, urn, urn, address(0), int256(wad), 0);
lssky.mint(urn, wad);
address urnFarm = urnFarms[urn];
if (urnFarm != address(0)) {
require(farms[urnFarm] == FarmStatus.ACTIVE, "LockstakeEngine/farm-deleted");
LockstakeUrn(urn).stake(urnFarm, wad, ref);
}
emit Lock(owner, index, wad, ref);
}
function free(address owner, uint256 index, address to, uint256 wad) external returns (uint256 freed) {
address urn = _getAuthedUrn(owner, index);
freed = _free(urn, wad, fee);
sky.transfer(to, freed);
emit Free(owner, index, to, wad, freed);
}
function freeNoFee(address owner, uint256 index, address to, uint256 wad) external auth {
address urn = _getAuthedUrn(owner, index);
_free(urn, wad, 0);
sky.transfer(to, wad);
emit FreeNoFee(owner, index, to, wad);
}
function _free(address urn, uint256 wad, uint256 fee_) internal returns (uint256 freed) {
require(wad <= uint256(type(int256).max), "LockstakeEngine/overflow");
address urnFarm = urnFarms[urn];
if (urnFarm != address(0)) {
LockstakeUrn(urn).withdraw(urnFarm, wad);
}
lssky.burn(urn, wad);
vat.frob(ilk, urn, urn, address(0), -int256(wad), 0);
vat.slip(ilk, urn, -int256(wad));
address voteDelegate = urnVoteDelegates[urn];
if (voteDelegate != address(0)) {
VoteDelegateLike(voteDelegate).free(wad);
}
uint256 burn = wad * fee_ / WAD;
if (burn > 0) {
sky.burn(address(this), burn);
}
unchecked { freed = wad - burn; } // burn <= wad always
}
// --- loan functions ---
function draw(address owner, uint256 index, address to, uint256 wad) external {
address urn = _getAuthedUrn(owner, index);
uint256 rate = jug.drip(ilk);
uint256 dart = _divup(wad * RAY, rate);
require(dart <= uint256(type(int256).max), "LockstakeEngine/overflow");
vat.frob(ilk, urn, address(0), address(this), 0, int256(dart));
usdsJoin.exit(to, wad);
emit Draw(owner, index, to, wad);
}
function wipe(address owner, uint256 index, uint256 wad) external {
address urn = _getUrn(owner, index);
usds.transferFrom(msg.sender, address(this), wad);
usdsJoin.join(address(this), wad);
(, uint256 rate,,,) = vat.ilks(ilk);
uint256 dart = wad * RAY / rate;
require(dart <= uint256(type(int256).max), "LockstakeEngine/overflow");
vat.frob(ilk, urn, address(0), address(this), 0, -int256(dart));
emit Wipe(owner, index, wad);
}
function wipeAll(address owner, uint256 index) external returns (uint256 wad) {
address urn = _getUrn(owner, index);
(, uint256 art) = vat.urns(ilk, urn);
require(art <= uint256(type(int256).max), "LockstakeEngine/overflow");
(, uint256 rate,,,) = vat.ilks(ilk);
wad = _divup(art * rate, RAY);
usds.transferFrom(msg.sender, address(this), wad);
usdsJoin.join(address(this), wad);
vat.frob(ilk, urn, address(0), address(this), 0, -int256(art));
emit Wipe(owner, index, wad);
}
// --- staking rewards function ---
function getReward(address owner, uint256 index, address farm, address to) external returns (uint256 amt) {
address urn = _getAuthedUrn(owner, index);
require(farms[farm] > FarmStatus.UNSUPPORTED, "LockstakeEngine/farm-unsupported");
amt = LockstakeUrn(urn).getReward(farm, to);
emit GetReward(owner, index, farm, to, amt);
}
// --- liquidation callback functions ---
function onKick(address urn, uint256 wad) external auth {
// Urn confiscation happens in Dog contract where ilk vat.gem is sent to the LockstakeClipper
(uint256 ink,) = vat.urns(ilk, urn);
uint256 inkBeforeKick = ink + wad;
_selectVoteDelegate(urn, inkBeforeKick, urnVoteDelegates[urn], address(0));
_selectFarm(urn, inkBeforeKick, urnFarms[urn], address(0), 0);
lssky.burn(urn, wad);
urnAuctions[urn]++;
emit OnKick(urn, wad);
}
function onTake(address urn, address who, uint256 wad) external auth {
sky.transfer(who, wad); // Free SKY to the auction buyer
emit OnTake(urn, who, wad);
}
function onRemove(address urn, uint256 sold, uint256 left) external auth {
uint256 burn;
uint256 refund;
if (left > 0) {
uint256 fee_ = fee;
burn = _min(sold * fee_ / (WAD - fee_), left);
sky.burn(address(this), burn);
unchecked { refund = left - burn; }
if (refund > 0) {
// The following is ensured by the dog and clip but we still prefer to be explicit
require(refund <= uint256(type(int256).max), "LockstakeEngine/overflow");
vat.slip(ilk, urn, int256(refund));
vat.grab(ilk, urn, urn, address(0), int256(refund), 0);
lssky.mint(urn, refund);
}
}
urnAuctions[urn]--;
emit OnRemove(urn, sold, burn, refund);
}
}// SPDX-FileCopyrightText: © 2023 Dai Foundation <www.daifoundation.org>
// SPDX-License-Identifier: AGPL-3.0-or-later
//
// 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.8.21;
interface VatLike {
function hope(address) external;
}
interface GemLike {
function balanceOf(address) external view returns (uint256);
function approve(address, uint256) external;
function transfer(address, uint256) external;
}
interface StakingRewardsLike {
function rewardsToken() external view returns (GemLike);
function stake(uint256, uint16) external;
function withdraw(uint256) external;
function getReward() external;
}
contract LockstakeUrn {
// --- immutables ---
address immutable public engine;
GemLike immutable public lssky;
VatLike immutable public vat;
// --- modifiers ---
modifier isEngine {
require(msg.sender == engine, "LockstakeUrn/not-engine");
_;
}
// --- constructor & init ---
constructor(address vat_, address lssky_) {
engine = msg.sender;
vat = VatLike(vat_);
lssky = GemLike(lssky_);
}
function init() external isEngine {
vat.hope(msg.sender);
lssky.approve(msg.sender, type(uint256).max);
}
// --- staking functions ---
function stake(address farm, uint256 wad, uint16 ref) external isEngine {
lssky.approve(farm, wad);
StakingRewardsLike(farm).stake(wad, ref);
}
function withdraw(address farm, uint256 wad) external isEngine {
StakingRewardsLike(farm).withdraw(wad);
}
function getReward(address farm, address to) external isEngine returns (uint256 amt) {
StakingRewardsLike(farm).getReward();
GemLike rewardsToken = StakingRewardsLike(farm).rewardsToken();
amt = rewardsToken.balanceOf(address(this));
rewardsToken.transfer(to, amt);
}
}// SPDX-License-Identifier: GPL-2.0-or-later
// Based on https://github.com/Uniswap/v3-periphery/blob/697c2474757ea89fec12a4e6db16a574fe259610/contracts/base/Multicall.sol
pragma solidity ^0.8.21;
// Enables calling multiple methods in a single call to the contract
abstract contract Multicall {
function multicall(bytes[] calldata data) external returns (bytes[] memory results) {
results = new bytes[](data.length);
for (uint256 i = 0; i < data.length; i++) {
(bool success, bytes memory result) = address(this).delegatecall(data[i]);
if (!success) {
if (result.length == 0) revert("multicall failed");
assembly ("memory-safe") {
revert(add(32, result), mload(result))
}
}
results[i] = result;
}
}
}{
"remappings": [],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"voteDelegateFactory_","type":"address"},{"internalType":"address","name":"usdsJoin_","type":"address"},{"internalType":"bytes32","name":"ilk_","type":"bytes32"},{"internalType":"address","name":"sky_","type":"address"},{"internalType":"address","name":"lssky_","type":"address"},{"internalType":"uint256","name":"fee_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"farm","type":"address"}],"name":"AddFarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"farm","type":"address"}],"name":"DelFarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Draw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"address","name":"data","type":"address"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"freed","type":"uint256"}],"name":"Free","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"FreeNoFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"farm","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"GetReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Hope","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"ref","type":"uint16"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Nope","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"urn","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"OnKick","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"urn","type":"address"},{"indexed":false,"internalType":"uint256","name":"sold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"refund","type":"uint256"}],"name":"OnRemove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"urn","type":"address"},{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"OnTake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"urn","type":"address"}],"name":"Open","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"farm","type":"address"},{"indexed":false,"internalType":"uint16","name":"ref","type":"uint16"}],"name":"SelectFarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"voteDelegate","type":"address"}],"name":"SelectVoteDelegate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Wipe","type":"event"},{"inputs":[{"internalType":"address","name":"farm","type":"address"}],"name":"addFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"farm","type":"address"}],"name":"delFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"draw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"farm","type":"address"}],"name":"farms","outputs":[{"internalType":"enum LockstakeEngine.FarmStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"free","outputs":[{"internalType":"uint256","name":"freed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"freeNoFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"farm","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"usr","type":"address"}],"name":"hope","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ilk","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"usr","type":"address"}],"name":"isUrnAuth","outputs":[{"internalType":"bool","name":"ok","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jug","outputs":[{"internalType":"contract JugLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"},{"internalType":"uint16","name":"ref","type":"uint16"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lssky","outputs":[{"internalType":"contract GemLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"usr","type":"address"}],"name":"nope","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"onKick","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"},{"internalType":"uint256","name":"sold","type":"uint256"},{"internalType":"uint256","name":"left","type":"uint256"}],"name":"onRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"},{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"onTake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"open","outputs":[{"internalType":"address","name":"urn","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"ownerUrns","outputs":[{"internalType":"address","name":"urn","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ownerUrnsCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"farm","type":"address"},{"internalType":"uint16","name":"ref","type":"uint16"}],"name":"selectFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"voteDelegate","type":"address"}],"name":"selectVoteDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sky","outputs":[{"internalType":"contract GemLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"}],"name":"urnAuctions","outputs":[{"internalType":"uint256","name":"auctionsCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"},{"internalType":"address","name":"usr","type":"address"}],"name":"urnCan","outputs":[{"internalType":"uint256","name":"allowed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"}],"name":"urnFarms","outputs":[{"internalType":"address","name":"farm","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"urnImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"}],"name":"urnOwners","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"}],"name":"urnVoteDelegates","outputs":[{"internalType":"address","name":"voteDelegate","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usds","outputs":[{"internalType":"contract GemLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdsJoin","outputs":[{"internalType":"contract UsdsJoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voteDelegateFactory","outputs":[{"internalType":"contract VoteDelegateFactoryLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"allowed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"wipe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"wipeAll","outputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
0x6101a060405234801562000011575f80fd5b506040516200495a3803806200495a833981016040819052620000349162000331565b670de0b6b3a76400008110620000a15760405162461bcd60e51b815260206004820152602860248201527f4c6f636b7374616b65456e67696e652f6665652d657175616c2d6f722d677265604482015267185d195c8b5dd85960c21b606482015260840160405180910390fd5b6001600160a01b03808716608052851660c0819052604080516336569e7760e01b815290516336569e77916004808201926020929091908290030181865afa158015620000f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001169190620003a9565b6001600160a01b031660a0816001600160a01b03168152505060c0516001600160a01b0316634cf282fb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001949190620003a9565b6001600160a01b0390811660e0526101008590528381166101205282166101405261018081905260a0516040518390620001ce906200030b565b6001600160a01b03928316815291166020820152604001604051809103905ff080158015620001ff573d5f803e3d5ffd5b506001600160a01b039081166101605260a0516040516328ec8bf160e21b8152878316600482015291169063a3b22fc4906024015f604051808303815f87803b1580156200024b575f80fd5b505af11580156200025e573d5f803e3d5ffd5b505060e05160405163095ea7b360e01b81526001600160a01b0389811660048301525f196024830152909116925063095ea7b391506044015f604051808303815f87803b158015620002ae575f80fd5b505af1158015620002c1573d5f803e3d5ffd5b5050335f8181526020819052604080822060019055519193507fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a60925090a2505050505050620003ce565b61088780620040d383390190565b6001600160a01b03811681146200032e575f80fd5b50565b5f805f805f8060c0878903121562000347575f80fd5b8651620003548162000319565b6020880151909650620003678162000319565b604088015160608901519196509450620003818162000319565b6080880151909350620003948162000319565b8092505060a087015190509295509295509295565b5f60208284031215620003ba575f80fd5b8151620003c78162000319565b9392505050565b60805160a05160c05160e0516101005161012051610140516101605161018051613b1e620005b55f395f818161067e01528181610cfe015261269b01525f81816106a5015261344901525f818161044301528181610f58015281816112e9015281816118a30152612f2e01525f818161041c01528181610c1701528181610d66015281816115d10152818161168e015281816126d901528181612ad801528181612d8901526131ad01525f81816105d601528181610905015281816109d601528181610a8301528181610e0c01528181610ee4015281816111cb015281816117570152818161182f01528181611a7a01528181611b5601528181611d4601528181611e2b01528181611f3801528181612583015281816128ae015281816129cd01528181612fc3015261306f01525f818161037801528181611c3b01526127c701525f81816106cc01528181611caf01528181611fac015261283b01525f81816102fa0152818161093f015281816109fe01528181610e4901528181610eb501528181611203015281816117940152818161180001528181611ab501528181611b7e01528181611d1701528181611f0b015281816125bb015281816128d7015281816129a601528181612f94015261304001525f818161026801526107b50152613b1e5ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c806390a0144111610140578063bf353dbb116100bf578063d9c415f411610084578063d9c415f41461061e578063d9f0619214610646578063ddca3f4314610679578063e88e94be146106a0578063fa1e2e86146106c7578063fdc56a18146106ee575f80fd5b8063bf353dbb1461059f578063c3b6cb4b146105be578063c5ce281e146105d1578063d0294ea5146105f8578063d4e8be831461060b575f80fd5b8063ac9650d811610105578063ac9650d81461051c578063aff7b07d1461053c578063b2b192e61461054f578063b5331d5e14610579578063bf0700fe1461058c575f80fd5b806390a01441146104b15780639c52a7f1146104c4578063a1c03731146104d7578063a496d520146104f6578063ac57c9bc14610509575f80fd5b80635c2e41c1116101cc5780636a6e9edf116101915780636a6e9edf1461043e5780636c3dead4146104655780636ddb4566146104785780637abdf2501461048b57806384718d891461049e575f80fd5b80635c2e41c1146103bb578063631c84a5146103ce57806365fae35e146103f1578063690e7c09146104045780636923180414610417575f80fd5b806336569e771161021257806336569e77146102f55780633d64fc521461031c578063421adfa0146103445780634cf282fb14610373578063587710791461039a575f80fd5b80630adfd1bf1461024e5780631b7a353e146102635780631c6eb67b146102a75780632a95b45d146102ba5780632d074bbd146102e2575b5f80fd5b61026161025c3660046134d3565b61070d565b005b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6102616102b536600461350c565b610bb9565b61028a6102c836600461354d565b60076020525f90815260409020546001600160a01b031681565b6102616102f0366004613566565b610cc6565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b61028a61032a36600461354d565b60046020525f90815260409020546001600160a01b031681565b61036661035236600461354d565b60016020525f908152604090205460ff1681565b60405161029e91906135aa565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b6103ad6103a83660046135d0565b61103c565b60405190815260200161029e565b6102616103c936600461361a565b61118e565b6103e16103dc3660046134d3565b6113be565b604051901515815260200161029e565b6102616103ff36600461354d565b6113db565b61028a610412366004613642565b61144d565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b61026161047336600461366a565b6115a1565b6103ad61048636600461361a565b611a5f565b61026161049936600461350c565b611e0e565b60095461028a906001600160a01b031681565b6102616104bf3660046134d3565b61204e565b6102616104d236600461354d565b6120b6565b6103ad6104e536600461354d565b60026020525f908152604090205481565b6102616105043660046134d3565b612127565b61026161051736600461354d565b61218e565b61052f61052a3660046136a2565b612216565b60405161029e9190613711565b61026161054a36600461354d565b612372565b6103ad61055d3660046137a1565b600560209081525f928352604080842090915290825290205481565b6102616105873660046137d2565b6123f4565b6103ad61059a36600461350c565b612686565b6103ad6105ad36600461354d565b5f6020819052908152604090205481565b6102616105cc366004613566565b612797565b6103ad7f000000000000000000000000000000000000000000000000000000000000000081565b610261610606366004613811565b612a93565b61026161061936600461384a565b612b8e565b61028a61062c36600461354d565b60066020525f90815260409020546001600160a01b031681565b61028a61065436600461361a565b600360209081525f92835260408084209091529082529020546001600160a01b031681565b6103ad7f000000000000000000000000000000000000000000000000000000000000000081565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b6103ad6106fc36600461354d565b60086020525f908152604090205481565b5f6107188484612c83565b6001600160a01b0381165f90815260086020526040902054909150156107855760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e000060448201526064015b60405180910390fd5b6001600160a01b0382161580610823575060405163d42efd8360e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063d42efd83906024016020604051808303815f875af11580156107fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081f919061386b565b6001145b61087f5760405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f6e6f742d76616c69642d766f74652d64604482015266656c656761746560c81b606482015260840161077c565b6001600160a01b038082165f90815260066020526040902054811690831681036108f65760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f73616d652d766f74652d64656c656761604482015261746560f01b606482015260840161077c565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301525f9182917f00000000000000000000000000000000000000000000000000000000000000001690632424be5c906044016040805180830381865afa158015610983573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a79190613882565b915091505f811180156109c257506001600160a01b03851615155b15610b6357604051636cb1c69b60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d9638d369060240160a060405180830381865afa158015610a4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6f91906138a4565b505060095460405163089c54b560e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201529194506001600160a01b031692506344e2a5a891506024016020604051808303815f875af1158015610adb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aff919061386b565b610b0990836138f4565b610b1382856138f4565b1015610b615760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b7374616b65456e67696e652f75726e2d756e73616665000000000000604482015260640161077c565b505b610b6f84838588612cf8565b846001600160a01b031686886001600160a01b03167f7af85b23b513d22f5f9daec6f2ad07e68c4953757a0d52e2d1013a5cc4995cef60405160405180910390a450505050505050565b335f90815260208190526040902054600114610be75760405162461bcd60e51b815260040161077c9061390b565b5f610bf28585612c83565b9050610bff81835f612e73565b5060405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90610c4e9086908690600401613942565b5f604051808303815f87803b158015610c65575f80fd5b505af1158015610c77573d5f803e3d5ffd5b5050505083856001600160a01b03167fcd6427026c24aea1d465d0e880edc743f7ba98ea5a30a21702762edbb61c148d8585604051610cb7929190613942565b60405180910390a35050505050565b335f90815260208190526040902054600114610cf45760405162461bcd60e51b815260040161077c9061390b565b5f808215610fc1577f0000000000000000000000000000000000000000000000000000000000000000610d4c610d3282670de0b6b3a764000061395b565b610d3c83886138f4565b610d469190613982565b8561321e565b604051632770a7eb60e21b81529093506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90610d9d9030908790600401613942565b5f604051808303815f87803b158015610db4575f80fd5b505af1158015610dc6573d5f803e3d5ffd5b505050838503925050838314610fbf576001600160ff1b03821115610dfd5760405162461bcd60e51b815260040161077c906139a1565b604051633e6e9fef60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b038781166024830152604482018490527f00000000000000000000000000000000000000000000000000000000000000001690637cdd3fde906064015f604051808303815f87803b158015610e8a575f80fd5b505af1158015610e9c573d5f803e3d5ffd5b50506040516301eeacfd60e61b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250637bab3f409150610f16907f0000000000000000000000000000000000000000000000000000000000000000908a9081905f90899082906004016139d8565b5f604051808303815f87803b158015610f2d575f80fd5b505af1158015610f3f573d5f803e3d5ffd5b50506040516340c10f1960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506340c10f199150610f919089908690600401613942565b5f604051808303815f87803b158015610fa8575f80fd5b505af1158015610fba573d5f803e3d5ffd5b505050505b505b6001600160a01b0385165f908152600860205260408120805491610fe483613a0d565b909155505060408051858152602081018490529081018290526001600160a01b038616907fbb73c7bd9a4eafb9de35122e727b77695cc0d396aedc338b3589407028b568f69060600160405180910390a25050505050565b5f806110488686612c83565b90505f6001600160a01b0385165f9081526001602052604090205460ff16600281111561107757611077613596565b116110c45760405162461bcd60e51b815260206004820181905260248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f72746564604482015260640161077c565b604051636b09169560e01b81526001600160a01b0385811660048301528481166024830152821690636b091695906044016020604051808303815f875af1158015611111573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611135919061386b565b9150836001600160a01b031685876001600160a01b03167fb0787e3944c17543aef2eb910c82d62e9ba80dabf5b15e371b09ac5728839700868660405161117d929190613942565b60405180910390a450949350505050565b335f908152602081905260409020546001146111bc5760405162461bcd60e51b815260040161077c9061390b565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301525f917f000000000000000000000000000000000000000000000000000000000000000090911690632424be5c906044016040805180830381865afa158015611249573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126d9190613882565b5090505f61127b8383613a22565b6001600160a01b038086165f908152600660205260408120549293506112a79287928592911690612cf8565b6001600160a01b038085165f908152600760205260408120546112d292879285929091169080613236565b604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac906113209087908790600401613942565b5f604051808303815f87803b158015611337575f80fd5b505af1158015611349573d5f803e3d5ffd5b505050506001600160a01b0384165f90815260086020526040812080549161137083613a35565b9190505550836001600160a01b03167fee91ffe09782821749e0fd00ad3d404b7fb3e2e8520e77aa5549c900f696f557846040516113b091815260200190565b60405180910390a250505050565b5f6113d3846113cd868661334f565b846133c1565b949350505050565b335f908152602081905260409020546001146114095760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f8181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b335f9081526002602052604081208054908261146883613a35565b9190505582146114ba5760405162461bcd60e51b815260206004820152601f60248201527f4c6f636b7374616b65456e67696e652f77726f6e672d75726e2d696e64657800604482015260640161077c565b5f6114c361340d565b90506037602082015ff09150816001600160a01b031663e1c7392a6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611507575f80fd5b505af1158015611519573d5f803e3d5ffd5b5050335f818152600360209081526040808320898452825280832080546001600160a01b038a166001600160a01b03199182168117909255818552600484529382902080549094168517909355519182528794509192507fdde6dd354074cad07a2dacbb612a6d2bac55ac537264d73250bf5c76bc15d64d910160405180910390a350919050565b5f6115ac858561334f565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b15801561161a575f80fd5b505af115801561162c573d5f803e3d5ffd5b505050506001600160ff1b038311156116575760405162461bcd60e51b815260040161077c906139a1565b6001600160a01b038082165f908152600660205260409020541680156117485760405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906116c59084908890600401613942565b5f604051808303815f87803b1580156116dc575f80fd5b505af11580156116ee573d5f803e3d5ffd5b50506040516337519c1960e21b8152600481018790526001600160a01b038416925063dd46706491506024015f604051808303815f87803b158015611731575f80fd5b505af1158015611743573d5f803e3d5ffd5b505050505b604051633e6e9fef60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b038381166024830152604482018690527f00000000000000000000000000000000000000000000000000000000000000001690637cdd3fde906064015f604051808303815f87803b1580156117d5575f80fd5b505af11580156117e7573d5f803e3d5ffd5b5050604051637608870360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063760887039150611861907f000000000000000000000000000000000000000000000000000000000000000090869081905f908b9082906004016139d8565b5f604051808303815f87803b158015611878575f80fd5b505af115801561188a573d5f803e3d5ffd5b50506040516340c10f1960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506340c10f1991506118dc9085908890600401613942565b5f604051808303815f87803b1580156118f3575f80fd5b505af1158015611905573d5f803e3d5ffd5b505050506001600160a01b038281165f90815260076020526040902054168015611a0c5760016001600160a01b0382165f9081526001602052604090205460ff16600281111561195757611957613596565b146119a45760405162461bcd60e51b815260206004820152601c60248201527f4c6f636b7374616b65456e67696e652f6661726d2d64656c6574656400000000604482015260640161077c565b60405163e62d29df60e01b81526001600160a01b0382811660048301526024820187905261ffff8616604483015284169063e62d29df906064015f604051808303815f87803b1580156119f5575f80fd5b505af1158015611a07573d5f803e3d5ffd5b505050505b6040805186815261ffff8616602082015287916001600160a01b038a16917f15a082f86d911273b558eb3797fc962ebe7cb22d787d8d13989e1ff0dc73a60791015b60405180910390a350505050505050565b5f80611a6b848461334f565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0380831660248301529192505f917f00000000000000000000000000000000000000000000000000000000000000001690632424be5c906044016040805180830381865afa158015611af9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1d9190613882565b9150506001600160ff1b03811115611b475760405162461bcd60e51b815260040161077c906139a1565b604051636cb1c69b60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d9638d369060240160a060405180830381865afa158015611bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bef91906138a4565b505050915050611c168183611c0491906138f4565b6b033b2e3c9fd0803ce800000061348d565b6040516323b872dd60e01b8152336004820152306024820152604481018290529094507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b158015611c84575f80fd5b505af1158015611c96573d5f803e3d5ffd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250633b4da69f9150611ce89030908890600401613942565b5f604051808303815f87803b158015611cff575f80fd5b505af1158015611d11573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663760887037f0000000000000000000000000000000000000000000000000000000000000000855f305f88611d7390613a4d565b6040518763ffffffff1660e01b8152600401611d94969594939291906139d8565b5f604051808303815f87803b158015611dab575f80fd5b505af1158015611dbd573d5f803e3d5ffd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051611dfd91815260200190565b60405180910390a350505092915050565b5f611e198585612c83565b60095460405163089c54b560e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201529192505f916001600160a01b03909116906344e2a5a8906024016020604051808303815f875af1158015611e85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ea9919061386b565b90505f611ecb611ec56b033b2e3c9fd0803ce8000000866138f4565b8361348d565b90506001600160ff1b03811115611ef45760405162461bcd60e51b815260040161077c906139a1565b604051637608870360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637608870390611f6a907f00000000000000000000000000000000000000000000000000000000000000009087905f903090829089906004016139d8565b5f604051808303815f87803b158015611f81575f80fd5b505af1158015611f93573d5f803e3d5ffd5b505060405163ef693bed60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063ef693bed9150611fe59088908890600401613942565b5f604051808303815f87803b158015611ffc575f80fd5b505af115801561200e573d5f803e3d5ffd5b5050505085876001600160a01b03167f970ddd008a8a27402f3bcac48972a48da4954fbd2493769baba2ad596e4895668787604051611a4e929190613942565b5f6120598484612c83565b6001600160a01b038082165f908152600560209081526040808320878516808552925280832060019055519394509286928816917fda1655dfbc632499abfa84202e0f5eda082634c6c927410ed51fc2213c3fb7d891a450505050565b335f908152602081905260409020546001146120e45760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f81815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b5f6121328484612c83565b6001600160a01b038082165f9081526005602090815260408083208785168085529252808320839055519394509286928816917f81a57ff14cc36197cdb39b8075f925696024dc426d81c0c798dc4632a0eb4eb891a450505050565b335f908152602081905260409020546001146121bc5760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f81815260016020908152604091829020805460ff1916600217905590519182527ffae8feabc29b75519fe202a936053f133aa6ee03453dcb7bbbe544d3b697061691015b60405180910390a150565b60608167ffffffffffffffff81111561223157612231613a67565b60405190808252806020026020018201604052801561226457816020015b606081526020019060019003908161224f5790505b5090505f5b8281101561236b575f803086868581811061228657612286613a7b565b90506020028101906122989190613a8f565b6040516122a6929190613ad9565b5f60405180830381855af49150503d805f81146122de576040519150601f19603f3d011682016040523d82523d5f602084013e6122e3565b606091505b5091509150816123385780515f036123305760405162461bcd60e51b815260206004820152601060248201526f1b5d5b1d1a58d85b1b0819985a5b195960821b604482015260640161077c565b805181602001fd5b8084848151811061234b5761234b613a7b565b60200260200101819052505050808061236390613a35565b915050612269565b5092915050565b335f908152602081905260409020546001146123a05760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f81815260016020818152604092839020805460ff191690921790915590519182527f169dc17e0067f1d5a355eb6a2ab8d282a8569a96f0f3dc4776e9d62023fe6c36910161220b565b5f6123ff8585612c83565b6001600160a01b0381165f90815260086020526040902054909150156124675760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e0000604482015260640161077c565b6001600160a01b03831615806124a8575060016001600160a01b0384165f9081526001602052604090205460ff1660028111156124a6576124a6613596565b145b6125085760405162461bcd60e51b815260206004820152602b60248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f7274656460448201526a0b5bdc8b59195b195d195960aa1b606482015260840161077c565b6001600160a01b038082165f90815260076020526040902054811690841681036125745760405162461bcd60e51b815260206004820152601960248201527f4c6f636b7374616b65456e67696e652f73616d652d6661726d00000000000000604482015260640161077c565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301525f917f000000000000000000000000000000000000000000000000000000000000000090911690632424be5c906044016040805180830381865afa158015612601573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126259190613882565b5090506126358382848888613236565b60405161ffff851681526001600160a01b038087169188918a16907fd434da22811bf2b5c3a8fc79e3d6644a80549c3159b7b28388eace49036f44c39060200160405180910390a450505050505050565b5f806126928686612c83565b90506126bf81847f0000000000000000000000000000000000000000000000000000000000000000612e73565b60405163a9059cbb60e01b81529092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906127109087908690600401613942565b5f604051808303815f87803b158015612727575f80fd5b505af1158015612739573d5f803e3d5ffd5b5050604080516001600160a01b0388811682526020820188905291810186905288935090891691507fde1819362eecc26ff17e717ad1e56b0154734cd5cc609494230256154e6c7ff09060600160405180910390a350949350505050565b5f6127a2848461334f565b6040516323b872dd60e01b8152336004820152306024820152604481018490529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b158015612810575f80fd5b505af1158015612822573d5f803e3d5ffd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250633b4da69f91506128749030908690600401613942565b5f604051808303815f87803b15801561288b575f80fd5b505af115801561289d573d5f803e3d5ffd5b5050604051636cb1c69b60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063d9638d369060240160a060405180830381865afa158015612925573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294991906138a4565b5050509150505f816b033b2e3c9fd0803ce80000008561296991906138f4565b6129739190613982565b90506001600160ff1b0381111561299c5760405162461bcd60e51b815260040161077c906139a1565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663760887037f0000000000000000000000000000000000000000000000000000000000000000855f30816129f988613a4d565b6040518763ffffffff1660e01b8152600401612a1a969594939291906139d8565b5f604051808303815f87803b158015612a31575f80fd5b505af1158015612a43573d5f803e3d5ffd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051612a8391815260200190565b60405180910390a3505050505050565b335f90815260208190526040902054600114612ac15760405162461bcd60e51b815260040161077c9061390b565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90612b0f9085908590600401613942565b5f604051808303815f87803b158015612b26575f80fd5b505af1158015612b38573d5f803e3d5ffd5b50505050816001600160a01b0316836001600160a01b03167f451bc655099856594a05cf3a385ce798360d63bc64e37b85d96e99a4b988fca683604051612b8191815260200190565b60405180910390a3505050565b335f90815260208190526040902054600114612bbc5760405162461bcd60e51b815260040161077c9061390b565b81626a756760e81b03612be957600980546001600160a01b0319166001600160a01b038316179055612c41565b60405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f66696c652d756e7265636f676e697a65604482015266642d706172616d60c81b606482015260840161077c565b6040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba9060200160405180910390a25050565b5f612c8e838361334f565b9050612c9b8382336133c1565b612cf25760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f75726e2d6e6f742d617574686f72697a604482015261195960f21b606482015260840161077c565b92915050565b8215612e43576001600160a01b03821615612d635760405163d8ccd0f360e01b8152600481018490526001600160a01b0383169063d8ccd0f3906024015f604051808303815f87803b158015612d4c575f80fd5b505af1158015612d5e573d5f803e3d5ffd5b505050505b6001600160a01b03811615612e435760405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390612dc09084908790600401613942565b5f604051808303815f87803b158015612dd7575f80fd5b505af1158015612de9573d5f803e3d5ffd5b50506040516337519c1960e21b8152600481018690526001600160a01b038416925063dd46706491506024015f604051808303815f87803b158015612e2c575f80fd5b505af1158015612e3e573d5f803e3d5ffd5b505050505b6001600160a01b039384165f90815260066020526040902080546001600160a01b03191691909416179092555050565b5f6001600160ff1b03831115612e9b5760405162461bcd60e51b815260040161077c906139a1565b6001600160a01b038085165f90815260076020526040902054168015612f175760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a390612ee99084908890600401613942565b5f604051808303815f87803b158015612f00575f80fd5b505af1158015612f12573d5f803e3d5ffd5b505050505b604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90612f659088908890600401613942565b5f604051808303815f87803b158015612f7c575f80fd5b505af1158015612f8e573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663760887037f000000000000000000000000000000000000000000000000000000000000000087885f89612fef90613a4d565b5f6040518763ffffffff1660e01b8152600401613011969594939291906139d8565b5f604051808303815f87803b158015613028575f80fd5b505af115801561303a573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637cdd3fde7f0000000000000000000000000000000000000000000000000000000000000000878761309990613a4d565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b03909116602483015260448201526064015f604051808303815f87803b1580156130e4575f80fd5b505af11580156130f6573d5f803e3d5ffd5b505050506001600160a01b038581165f908152600660205260409020541680156131705760405163d8ccd0f360e01b8152600481018690526001600160a01b0382169063d8ccd0f3906024015f604051808303815f87803b158015613159575f80fd5b505af115801561316b573d5f803e3d5ffd5b505050505b5f670de0b6b3a764000061318486886138f4565b61318e9190613982565b9050801561321257604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac906131e49030908590600401613942565b5f604051808303815f87803b1580156131fb575f80fd5b505af115801561320d573d5f803e3d5ffd5b505050505b90940395945050505050565b5f8183111561322d578161322f565b825b9392505050565b831561331e576001600160a01b038316156132a75760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a3906132799086908890600401613942565b5f604051808303815f87803b158015613290575f80fd5b505af11580156132a2573d5f803e3d5ffd5b505050505b6001600160a01b0382161561331e5760405163e62d29df60e01b81526001600160a01b0383811660048301526024820186905261ffff8316604483015286169063e62d29df906064015f604051808303815f87803b158015613307575f80fd5b505af1158015613319573d5f803e3d5ffd5b505050505b506001600160a01b039384165f90815260076020526040902080546001600160a01b03191691909416179092555050565b6001600160a01b038083165f9081526003602090815260408083208584529091529020541680612cf25760405162461bcd60e51b815260206004820152601b60248201527f4c6f636b7374616b65456e67696e652f696e76616c69642d75726e0000000000604482015260640161077c565b5f816001600160a01b0316846001600160a01b031614806113d357506001600160a01b038084165f90815260056020908152604080832093861683529290522054600114949350505050565b60408051603780825260608281019093526020820181803683375050733d602d80600a3d3981f3363d3d373d3d3d363d7360601b6020830152507f000000000000000000000000000000000000000000000000000000000000000060601b60348201526e5af43d82803e903d91602b57fd5bf360881b6048820152919050565b5f825f0361349b575f61322f565b8160018403816134ad576134ad61396e565b046001019392505050565b80356001600160a01b03811681146134ce575f80fd5b919050565b5f805f606084860312156134e5575f80fd5b6134ee846134b8565b925060208401359150613503604085016134b8565b90509250925092565b5f805f806080858703121561351f575f80fd5b613528856134b8565b93506020850135925061353d604086016134b8565b9396929550929360600135925050565b5f6020828403121561355d575f80fd5b61322f826134b8565b5f805f60608486031215613578575f80fd5b613581846134b8565b95602085013595506040909401359392505050565b634e487b7160e01b5f52602160045260245ffd5b60208101600383106135ca57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f805f80608085870312156135e3575f80fd5b6135ec856134b8565b935060208501359250613601604086016134b8565b915061360f606086016134b8565b905092959194509250565b5f806040838503121561362b575f80fd5b613634836134b8565b946020939093013593505050565b5f60208284031215613652575f80fd5b5035919050565b803561ffff811681146134ce575f80fd5b5f805f806080858703121561367d575f80fd5b613686856134b8565b9350602085013592506040850135915061360f60608601613659565b5f80602083850312156136b3575f80fd5b823567ffffffffffffffff808211156136ca575f80fd5b818501915085601f8301126136dd575f80fd5b8135818111156136eb575f80fd5b8660208260051b85010111156136ff575f80fd5b60209290920196919550909350505050565b5f602080830181845280855180835260408601915060408160051b87010192508387015f805b8381101561379357888603603f1901855282518051808852835b8181101561376c578281018a01518982018b01528901613751565b508781018901849052601f01601f1916909601870195509386019391860191600101613737565b509398975050505050505050565b5f80604083850312156137b2575f80fd5b6137bb836134b8565b91506137c9602084016134b8565b90509250929050565b5f805f80608085870312156137e5575f80fd5b6137ee856134b8565b935060208501359250613803604086016134b8565b915061360f60608601613659565b5f805f60608486031215613823575f80fd5b61382c846134b8565b925061383a602085016134b8565b9150604084013590509250925092565b5f806040838503121561385b575f80fd5b823591506137c9602084016134b8565b5f6020828403121561387b575f80fd5b5051919050565b5f8060408385031215613893575f80fd5b505080516020909101519092909150565b5f805f805f60a086880312156138b8575f80fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612cf257612cf26138e0565b6020808252601e908201527f4c6f636b7374616b65456e67696e652f6e6f742d617574686f72697a65640000604082015260600190565b6001600160a01b03929092168252602082015260400190565b81810381811115612cf257612cf26138e0565b634e487b7160e01b5f52601260045260245ffd5b5f8261399c57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526018908201527f4c6f636b7374616b65456e67696e652f6f766572666c6f770000000000000000604082015260600190565b9586526001600160a01b039485166020870152928416604086015292166060840152608083019190915260a082015260c00190565b5f81613a1b57613a1b6138e0565b505f190190565b80820180821115612cf257612cf26138e0565b5f60018201613a4657613a466138e0565b5060010190565b5f600160ff1b8201613a6157613a616138e0565b505f0390565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112613aa4575f80fd5b83018035915067ffffffffffffffff821115613abe575f80fd5b602001915036819003821315613ad2575f80fd5b9250929050565b818382375f910190815291905056fea26469706673582212204985d945cdd439127a92536aa61e6397332d44fce3f1a7fee51221d8b8a52b9964736f6c6343000815003360e060405234801561000f575f80fd5b5060405161088738038061088783398101604081905261002e91610064565b336080526001600160a01b0391821660c0521660a052610095565b80516001600160a01b038116811461005f575f80fd5b919050565b5f8060408385031215610075575f80fd5b61007e83610049565b915061008c60208401610049565b90509250929050565b60805160a05160c0516107996100ee5f395f81816083015261039001525f818160c70152818161040901526104da01525f818161010f0152818161016d0152818161033e0152818161047701526105a001526107995ff3fe608060405234801561000f575f80fd5b506004361061007a575f3560e01c8063c9d4623f11610058578063c9d4623f1461010a578063e1c7392a14610131578063e62d29df1461013b578063f3fef3a31461014e575f80fd5b806336569e771461007e5780636a6e9edf146100c25780636b091695146100e9575b5f80fd5b6100a57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a57f000000000000000000000000000000000000000000000000000000000000000081565b6100fc6100f736600461064d565b610161565b6040519081526020016100b9565b6100a57f000000000000000000000000000000000000000000000000000000000000000081565b610139610333565b005b610139610149366004610684565b61046c565b61013961015c3660046106c9565b610595565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101b35760405162461bcd60e51b81526004016101aa906106f3565b60405180910390fd5b826001600160a01b0316633d18b9126040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156101eb575f80fd5b505af11580156101fd573d5f803e3d5ffd5b505050505f836001600160a01b031663d1af0c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561023e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610262919061072a565b6040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa1580156102a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102cb919061074c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529193509082169063a9059cbb906044015f604051808303815f87803b158015610316575f80fd5b505af1158015610328573d5f803e3d5ffd5b505050505092915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037b5760405162461bcd60e51b81526004016101aa906106f3565b6040516328ec8bf160e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a3b22fc4906024015f604051808303815f87803b1580156103d9575f80fd5b505af11580156103eb573d5f803e3d5ffd5b505060405163095ea7b360e01b81523360048201525f1960248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063095ea7b391506044015f604051808303815f87803b158015610454575f80fd5b505af1158015610466573d5f803e3d5ffd5b50505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104b45760405162461bcd60e51b81526004016101aa906106f3565b60405163095ea7b360e01b81526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044015f604051808303815f87803b15801561051b575f80fd5b505af115801561052d573d5f803e3d5ffd5b50506040516342ea02c160e01b81526004810185905261ffff841660248201526001600160a01b03861692506342ea02c191506044015f604051808303815f87803b15801561057a575f80fd5b505af115801561058c573d5f803e3d5ffd5b50505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105dd5760405162461bcd60e51b81526004016101aa906106f3565b604051632e1a7d4d60e01b8152600481018290526001600160a01b03831690632e1a7d4d906024015f604051808303815f87803b15801561061c575f80fd5b505af115801561062e573d5f803e3d5ffd5b505050505050565b6001600160a01b038116811461064a575f80fd5b50565b5f806040838503121561065e575f80fd5b823561066981610636565b9150602083013561067981610636565b809150509250929050565b5f805f60608486031215610696575f80fd5b83356106a181610636565b925060208401359150604084013561ffff811681146106be575f80fd5b809150509250925092565b5f80604083850312156106da575f80fd5b82356106e581610636565b946020939093013593505050565b60208082526017908201527f4c6f636b7374616b6555726e2f6e6f742d656e67696e65000000000000000000604082015260600190565b5f6020828403121561073a575f80fd5b815161074581610636565b9392505050565b5f6020828403121561075c575f80fd5b505191905056fea2646970667358221220f6faae402162a76ea9ec3da4620c6175e90af57556afc3a45d6883032be9fd8e64736f6c634300081500330000000000000000000000004cf3daefa2683cd18df00f7aff5169c00a9eccd50000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb4c534556322d534b592d4100000000000000000000000000000000000000000000000000000000000000000056072c95faa701256059aa122697b133aded9279000000000000000000000000f9a9cfd3229e985b91f99bc866d42938044ffa1c0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061024a575f3560e01c806390a0144111610140578063bf353dbb116100bf578063d9c415f411610084578063d9c415f41461061e578063d9f0619214610646578063ddca3f4314610679578063e88e94be146106a0578063fa1e2e86146106c7578063fdc56a18146106ee575f80fd5b8063bf353dbb1461059f578063c3b6cb4b146105be578063c5ce281e146105d1578063d0294ea5146105f8578063d4e8be831461060b575f80fd5b8063ac9650d811610105578063ac9650d81461051c578063aff7b07d1461053c578063b2b192e61461054f578063b5331d5e14610579578063bf0700fe1461058c575f80fd5b806390a01441146104b15780639c52a7f1146104c4578063a1c03731146104d7578063a496d520146104f6578063ac57c9bc14610509575f80fd5b80635c2e41c1116101cc5780636a6e9edf116101915780636a6e9edf1461043e5780636c3dead4146104655780636ddb4566146104785780637abdf2501461048b57806384718d891461049e575f80fd5b80635c2e41c1146103bb578063631c84a5146103ce57806365fae35e146103f1578063690e7c09146104045780636923180414610417575f80fd5b806336569e771161021257806336569e77146102f55780633d64fc521461031c578063421adfa0146103445780634cf282fb14610373578063587710791461039a575f80fd5b80630adfd1bf1461024e5780631b7a353e146102635780631c6eb67b146102a75780632a95b45d146102ba5780632d074bbd146102e2575b5f80fd5b61026161025c3660046134d3565b61070d565b005b61028a7f0000000000000000000000004cf3daefa2683cd18df00f7aff5169c00a9eccd581565b6040516001600160a01b0390911681526020015b60405180910390f35b6102616102b536600461350c565b610bb9565b61028a6102c836600461354d565b60076020525f90815260409020546001600160a01b031681565b6102616102f0366004613566565b610cc6565b61028a7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b61028a61032a36600461354d565b60046020525f90815260409020546001600160a01b031681565b61036661035236600461354d565b60016020525f908152604090205460ff1681565b60405161029e91906135aa565b61028a7f000000000000000000000000dc035d45d973e3ec169d2276ddab16f1e407384f81565b6103ad6103a83660046135d0565b61103c565b60405190815260200161029e565b6102616103c936600461361a565b61118e565b6103e16103dc3660046134d3565b6113be565b604051901515815260200161029e565b6102616103ff36600461354d565b6113db565b61028a610412366004613642565b61144d565b61028a7f00000000000000000000000056072c95faa701256059aa122697b133aded927981565b61028a7f000000000000000000000000f9a9cfd3229e985b91f99bc866d42938044ffa1c81565b61026161047336600461366a565b6115a1565b6103ad61048636600461361a565b611a5f565b61026161049936600461350c565b611e0e565b60095461028a906001600160a01b031681565b6102616104bf3660046134d3565b61204e565b6102616104d236600461354d565b6120b6565b6103ad6104e536600461354d565b60026020525f908152604090205481565b6102616105043660046134d3565b612127565b61026161051736600461354d565b61218e565b61052f61052a3660046136a2565b612216565b60405161029e9190613711565b61026161054a36600461354d565b612372565b6103ad61055d3660046137a1565b600560209081525f928352604080842090915290825290205481565b6102616105873660046137d2565b6123f4565b6103ad61059a36600461350c565b612686565b6103ad6105ad36600461354d565b5f6020819052908152604090205481565b6102616105cc366004613566565b612797565b6103ad7f4c534556322d534b592d4100000000000000000000000000000000000000000081565b610261610606366004613811565b612a93565b61026161061936600461384a565b612b8e565b61028a61062c36600461354d565b60066020525f90815260409020546001600160a01b031681565b61028a61065436600461361a565b600360209081525f92835260408084209091529082529020546001600160a01b031681565b6103ad7f000000000000000000000000000000000000000000000000000000000000000081565b61028a7f0000000000000000000000007b4cb30d13983bf81767531433cebd4214908a9981565b61028a7f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb81565b6103ad6106fc36600461354d565b60086020525f908152604090205481565b5f6107188484612c83565b6001600160a01b0381165f90815260086020526040902054909150156107855760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e000060448201526064015b60405180910390fd5b6001600160a01b0382161580610823575060405163d42efd8360e01b81526001600160a01b0383811660048301527f0000000000000000000000004cf3daefa2683cd18df00f7aff5169c00a9eccd5169063d42efd83906024016020604051808303815f875af11580156107fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081f919061386b565b6001145b61087f5760405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f6e6f742d76616c69642d766f74652d64604482015266656c656761746560c81b606482015260840161077c565b6001600160a01b038082165f90815260066020526040902054811690831681036108f65760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f73616d652d766f74652d64656c656761604482015261746560f01b606482015260840161077c565b6040516309092f9760e21b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201526001600160a01b0383811660248301525f9182917f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690632424be5c906044016040805180830381865afa158015610983573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a79190613882565b915091505f811180156109c257506001600160a01b03851615155b15610b6357604051636cb1c69b60e11b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201525f907f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b03169063d9638d369060240160a060405180830381865afa158015610a4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6f91906138a4565b505060095460405163089c54b560e31b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201529194506001600160a01b031692506344e2a5a891506024016020604051808303815f875af1158015610adb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aff919061386b565b610b0990836138f4565b610b1382856138f4565b1015610b615760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b7374616b65456e67696e652f75726e2d756e73616665000000000000604482015260640161077c565b505b610b6f84838588612cf8565b846001600160a01b031686886001600160a01b03167f7af85b23b513d22f5f9daec6f2ad07e68c4953757a0d52e2d1013a5cc4995cef60405160405180910390a450505050505050565b335f90815260208190526040902054600114610be75760405162461bcd60e51b815260040161077c9061390b565b5f610bf28585612c83565b9050610bff81835f612e73565b5060405163a9059cbb60e01b81526001600160a01b037f00000000000000000000000056072c95faa701256059aa122697b133aded9279169063a9059cbb90610c4e9086908690600401613942565b5f604051808303815f87803b158015610c65575f80fd5b505af1158015610c77573d5f803e3d5ffd5b5050505083856001600160a01b03167fcd6427026c24aea1d465d0e880edc743f7ba98ea5a30a21702762edbb61c148d8585604051610cb7929190613942565b60405180910390a35050505050565b335f90815260208190526040902054600114610cf45760405162461bcd60e51b815260040161077c9061390b565b5f808215610fc1577f0000000000000000000000000000000000000000000000000000000000000000610d4c610d3282670de0b6b3a764000061395b565b610d3c83886138f4565b610d469190613982565b8561321e565b604051632770a7eb60e21b81529093506001600160a01b037f00000000000000000000000056072c95faa701256059aa122697b133aded92791690639dc29fac90610d9d9030908790600401613942565b5f604051808303815f87803b158015610db4575f80fd5b505af1158015610dc6573d5f803e3d5ffd5b505050838503925050838314610fbf576001600160ff1b03821115610dfd5760405162461bcd60e51b815260040161077c906139a1565b604051633e6e9fef60e11b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201526001600160a01b038781166024830152604482018490527f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690637cdd3fde906064015f604051808303815f87803b158015610e8a575f80fd5b505af1158015610e9c573d5f803e3d5ffd5b50506040516301eeacfd60e61b81526001600160a01b037f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b169250637bab3f409150610f16907f4c534556322d534b592d41000000000000000000000000000000000000000000908a9081905f90899082906004016139d8565b5f604051808303815f87803b158015610f2d575f80fd5b505af1158015610f3f573d5f803e3d5ffd5b50506040516340c10f1960e01b81526001600160a01b037f000000000000000000000000f9a9cfd3229e985b91f99bc866d42938044ffa1c1692506340c10f199150610f919089908690600401613942565b5f604051808303815f87803b158015610fa8575f80fd5b505af1158015610fba573d5f803e3d5ffd5b505050505b505b6001600160a01b0385165f908152600860205260408120805491610fe483613a0d565b909155505060408051858152602081018490529081018290526001600160a01b038616907fbb73c7bd9a4eafb9de35122e727b77695cc0d396aedc338b3589407028b568f69060600160405180910390a25050505050565b5f806110488686612c83565b90505f6001600160a01b0385165f9081526001602052604090205460ff16600281111561107757611077613596565b116110c45760405162461bcd60e51b815260206004820181905260248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f72746564604482015260640161077c565b604051636b09169560e01b81526001600160a01b0385811660048301528481166024830152821690636b091695906044016020604051808303815f875af1158015611111573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611135919061386b565b9150836001600160a01b031685876001600160a01b03167fb0787e3944c17543aef2eb910c82d62e9ba80dabf5b15e371b09ac5728839700868660405161117d929190613942565b60405180910390a450949350505050565b335f908152602081905260409020546001146111bc5760405162461bcd60e51b815260040161077c9061390b565b6040516309092f9760e21b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201526001600160a01b0383811660248301525f917f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b90911690632424be5c906044016040805180830381865afa158015611249573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126d9190613882565b5090505f61127b8383613a22565b6001600160a01b038086165f908152600660205260408120549293506112a79287928592911690612cf8565b6001600160a01b038085165f908152600760205260408120546112d292879285929091169080613236565b604051632770a7eb60e21b81526001600160a01b037f000000000000000000000000f9a9cfd3229e985b91f99bc866d42938044ffa1c1690639dc29fac906113209087908790600401613942565b5f604051808303815f87803b158015611337575f80fd5b505af1158015611349573d5f803e3d5ffd5b505050506001600160a01b0384165f90815260086020526040812080549161137083613a35565b9190505550836001600160a01b03167fee91ffe09782821749e0fd00ad3d404b7fb3e2e8520e77aa5549c900f696f557846040516113b091815260200190565b60405180910390a250505050565b5f6113d3846113cd868661334f565b846133c1565b949350505050565b335f908152602081905260409020546001146114095760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f8181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b335f9081526002602052604081208054908261146883613a35565b9190505582146114ba5760405162461bcd60e51b815260206004820152601f60248201527f4c6f636b7374616b65456e67696e652f77726f6e672d75726e2d696e64657800604482015260640161077c565b5f6114c361340d565b90506037602082015ff09150816001600160a01b031663e1c7392a6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611507575f80fd5b505af1158015611519573d5f803e3d5ffd5b5050335f818152600360209081526040808320898452825280832080546001600160a01b038a166001600160a01b03199182168117909255818552600484529382902080549094168517909355519182528794509192507fdde6dd354074cad07a2dacbb612a6d2bac55ac537264d73250bf5c76bc15d64d910160405180910390a350919050565b5f6115ac858561334f565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091507f00000000000000000000000056072c95faa701256059aa122697b133aded92796001600160a01b0316906323b872dd906064015f604051808303815f87803b15801561161a575f80fd5b505af115801561162c573d5f803e3d5ffd5b505050506001600160ff1b038311156116575760405162461bcd60e51b815260040161077c906139a1565b6001600160a01b038082165f908152600660205260409020541680156117485760405163095ea7b360e01b81526001600160a01b037f00000000000000000000000056072c95faa701256059aa122697b133aded9279169063095ea7b3906116c59084908890600401613942565b5f604051808303815f87803b1580156116dc575f80fd5b505af11580156116ee573d5f803e3d5ffd5b50506040516337519c1960e21b8152600481018790526001600160a01b038416925063dd46706491506024015f604051808303815f87803b158015611731575f80fd5b505af1158015611743573d5f803e3d5ffd5b505050505b604051633e6e9fef60e11b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201526001600160a01b038381166024830152604482018690527f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690637cdd3fde906064015f604051808303815f87803b1580156117d5575f80fd5b505af11580156117e7573d5f803e3d5ffd5b5050604051637608870360e01b81526001600160a01b037f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b16925063760887039150611861907f4c534556322d534b592d4100000000000000000000000000000000000000000090869081905f908b9082906004016139d8565b5f604051808303815f87803b158015611878575f80fd5b505af115801561188a573d5f803e3d5ffd5b50506040516340c10f1960e01b81526001600160a01b037f000000000000000000000000f9a9cfd3229e985b91f99bc866d42938044ffa1c1692506340c10f1991506118dc9085908890600401613942565b5f604051808303815f87803b1580156118f3575f80fd5b505af1158015611905573d5f803e3d5ffd5b505050506001600160a01b038281165f90815260076020526040902054168015611a0c5760016001600160a01b0382165f9081526001602052604090205460ff16600281111561195757611957613596565b146119a45760405162461bcd60e51b815260206004820152601c60248201527f4c6f636b7374616b65456e67696e652f6661726d2d64656c6574656400000000604482015260640161077c565b60405163e62d29df60e01b81526001600160a01b0382811660048301526024820187905261ffff8616604483015284169063e62d29df906064015f604051808303815f87803b1580156119f5575f80fd5b505af1158015611a07573d5f803e3d5ffd5b505050505b6040805186815261ffff8616602082015287916001600160a01b038a16917f15a082f86d911273b558eb3797fc962ebe7cb22d787d8d13989e1ff0dc73a60791015b60405180910390a350505050505050565b5f80611a6b848461334f565b6040516309092f9760e21b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201526001600160a01b0380831660248301529192505f917f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690632424be5c906044016040805180830381865afa158015611af9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1d9190613882565b9150506001600160ff1b03811115611b475760405162461bcd60e51b815260040161077c906139a1565b604051636cb1c69b60e11b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201525f907f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b03169063d9638d369060240160a060405180830381865afa158015611bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bef91906138a4565b505050915050611c168183611c0491906138f4565b6b033b2e3c9fd0803ce800000061348d565b6040516323b872dd60e01b8152336004820152306024820152604481018290529094507f000000000000000000000000dc035d45d973e3ec169d2276ddab16f1e407384f6001600160a01b0316906323b872dd906064015f604051808303815f87803b158015611c84575f80fd5b505af1158015611c96573d5f803e3d5ffd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb169250633b4da69f9150611ce89030908890600401613942565b5f604051808303815f87803b158015611cff575f80fd5b505af1158015611d11573d5f803e3d5ffd5b505050507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b031663760887037f4c534556322d534b592d41000000000000000000000000000000000000000000855f305f88611d7390613a4d565b6040518763ffffffff1660e01b8152600401611d94969594939291906139d8565b5f604051808303815f87803b158015611dab575f80fd5b505af1158015611dbd573d5f803e3d5ffd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051611dfd91815260200190565b60405180910390a350505092915050565b5f611e198585612c83565b60095460405163089c54b560e31b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201529192505f916001600160a01b03909116906344e2a5a8906024016020604051808303815f875af1158015611e85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ea9919061386b565b90505f611ecb611ec56b033b2e3c9fd0803ce8000000866138f4565b8361348d565b90506001600160ff1b03811115611ef45760405162461bcd60e51b815260040161077c906139a1565b604051637608870360e01b81526001600160a01b037f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690637608870390611f6a907f4c534556322d534b592d410000000000000000000000000000000000000000009087905f903090829089906004016139d8565b5f604051808303815f87803b158015611f81575f80fd5b505af1158015611f93573d5f803e3d5ffd5b505060405163ef693bed60e01b81526001600160a01b037f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb16925063ef693bed9150611fe59088908890600401613942565b5f604051808303815f87803b158015611ffc575f80fd5b505af115801561200e573d5f803e3d5ffd5b5050505085876001600160a01b03167f970ddd008a8a27402f3bcac48972a48da4954fbd2493769baba2ad596e4895668787604051611a4e929190613942565b5f6120598484612c83565b6001600160a01b038082165f908152600560209081526040808320878516808552925280832060019055519394509286928816917fda1655dfbc632499abfa84202e0f5eda082634c6c927410ed51fc2213c3fb7d891a450505050565b335f908152602081905260409020546001146120e45760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f81815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b5f6121328484612c83565b6001600160a01b038082165f9081526005602090815260408083208785168085529252808320839055519394509286928816917f81a57ff14cc36197cdb39b8075f925696024dc426d81c0c798dc4632a0eb4eb891a450505050565b335f908152602081905260409020546001146121bc5760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f81815260016020908152604091829020805460ff1916600217905590519182527ffae8feabc29b75519fe202a936053f133aa6ee03453dcb7bbbe544d3b697061691015b60405180910390a150565b60608167ffffffffffffffff81111561223157612231613a67565b60405190808252806020026020018201604052801561226457816020015b606081526020019060019003908161224f5790505b5090505f5b8281101561236b575f803086868581811061228657612286613a7b565b90506020028101906122989190613a8f565b6040516122a6929190613ad9565b5f60405180830381855af49150503d805f81146122de576040519150601f19603f3d011682016040523d82523d5f602084013e6122e3565b606091505b5091509150816123385780515f036123305760405162461bcd60e51b815260206004820152601060248201526f1b5d5b1d1a58d85b1b0819985a5b195960821b604482015260640161077c565b805181602001fd5b8084848151811061234b5761234b613a7b565b60200260200101819052505050808061236390613a35565b915050612269565b5092915050565b335f908152602081905260409020546001146123a05760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f81815260016020818152604092839020805460ff191690921790915590519182527f169dc17e0067f1d5a355eb6a2ab8d282a8569a96f0f3dc4776e9d62023fe6c36910161220b565b5f6123ff8585612c83565b6001600160a01b0381165f90815260086020526040902054909150156124675760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e0000604482015260640161077c565b6001600160a01b03831615806124a8575060016001600160a01b0384165f9081526001602052604090205460ff1660028111156124a6576124a6613596565b145b6125085760405162461bcd60e51b815260206004820152602b60248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f7274656460448201526a0b5bdc8b59195b195d195960aa1b606482015260840161077c565b6001600160a01b038082165f90815260076020526040902054811690841681036125745760405162461bcd60e51b815260206004820152601960248201527f4c6f636b7374616b65456e67696e652f73616d652d6661726d00000000000000604482015260640161077c565b6040516309092f9760e21b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201526001600160a01b0383811660248301525f917f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b90911690632424be5c906044016040805180830381865afa158015612601573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126259190613882565b5090506126358382848888613236565b60405161ffff851681526001600160a01b038087169188918a16907fd434da22811bf2b5c3a8fc79e3d6644a80549c3159b7b28388eace49036f44c39060200160405180910390a450505050505050565b5f806126928686612c83565b90506126bf81847f0000000000000000000000000000000000000000000000000000000000000000612e73565b60405163a9059cbb60e01b81529092506001600160a01b037f00000000000000000000000056072c95faa701256059aa122697b133aded9279169063a9059cbb906127109087908690600401613942565b5f604051808303815f87803b158015612727575f80fd5b505af1158015612739573d5f803e3d5ffd5b5050604080516001600160a01b0388811682526020820188905291810186905288935090891691507fde1819362eecc26ff17e717ad1e56b0154734cd5cc609494230256154e6c7ff09060600160405180910390a350949350505050565b5f6127a2848461334f565b6040516323b872dd60e01b8152336004820152306024820152604481018490529091507f000000000000000000000000dc035d45d973e3ec169d2276ddab16f1e407384f6001600160a01b0316906323b872dd906064015f604051808303815f87803b158015612810575f80fd5b505af1158015612822573d5f803e3d5ffd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb169250633b4da69f91506128749030908690600401613942565b5f604051808303815f87803b15801561288b575f80fd5b505af115801561289d573d5f803e3d5ffd5b5050604051636cb1c69b60e11b81527f4c534556322d534b592d4100000000000000000000000000000000000000000060048201525f92507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b0316915063d9638d369060240160a060405180830381865afa158015612925573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294991906138a4565b5050509150505f816b033b2e3c9fd0803ce80000008561296991906138f4565b6129739190613982565b90506001600160ff1b0381111561299c5760405162461bcd60e51b815260040161077c906139a1565b6001600160a01b037f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1663760887037f4c534556322d534b592d41000000000000000000000000000000000000000000855f30816129f988613a4d565b6040518763ffffffff1660e01b8152600401612a1a969594939291906139d8565b5f604051808303815f87803b158015612a31575f80fd5b505af1158015612a43573d5f803e3d5ffd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051612a8391815260200190565b60405180910390a3505050505050565b335f90815260208190526040902054600114612ac15760405162461bcd60e51b815260040161077c9061390b565b60405163a9059cbb60e01b81526001600160a01b037f00000000000000000000000056072c95faa701256059aa122697b133aded9279169063a9059cbb90612b0f9085908590600401613942565b5f604051808303815f87803b158015612b26575f80fd5b505af1158015612b38573d5f803e3d5ffd5b50505050816001600160a01b0316836001600160a01b03167f451bc655099856594a05cf3a385ce798360d63bc64e37b85d96e99a4b988fca683604051612b8191815260200190565b60405180910390a3505050565b335f90815260208190526040902054600114612bbc5760405162461bcd60e51b815260040161077c9061390b565b81626a756760e81b03612be957600980546001600160a01b0319166001600160a01b038316179055612c41565b60405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f66696c652d756e7265636f676e697a65604482015266642d706172616d60c81b606482015260840161077c565b6040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba9060200160405180910390a25050565b5f612c8e838361334f565b9050612c9b8382336133c1565b612cf25760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f75726e2d6e6f742d617574686f72697a604482015261195960f21b606482015260840161077c565b92915050565b8215612e43576001600160a01b03821615612d635760405163d8ccd0f360e01b8152600481018490526001600160a01b0383169063d8ccd0f3906024015f604051808303815f87803b158015612d4c575f80fd5b505af1158015612d5e573d5f803e3d5ffd5b505050505b6001600160a01b03811615612e435760405163095ea7b360e01b81526001600160a01b037f00000000000000000000000056072c95faa701256059aa122697b133aded9279169063095ea7b390612dc09084908790600401613942565b5f604051808303815f87803b158015612dd7575f80fd5b505af1158015612de9573d5f803e3d5ffd5b50506040516337519c1960e21b8152600481018690526001600160a01b038416925063dd46706491506024015f604051808303815f87803b158015612e2c575f80fd5b505af1158015612e3e573d5f803e3d5ffd5b505050505b6001600160a01b039384165f90815260066020526040902080546001600160a01b03191691909416179092555050565b5f6001600160ff1b03831115612e9b5760405162461bcd60e51b815260040161077c906139a1565b6001600160a01b038085165f90815260076020526040902054168015612f175760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a390612ee99084908890600401613942565b5f604051808303815f87803b158015612f00575f80fd5b505af1158015612f12573d5f803e3d5ffd5b505050505b604051632770a7eb60e21b81526001600160a01b037f000000000000000000000000f9a9cfd3229e985b91f99bc866d42938044ffa1c1690639dc29fac90612f659088908890600401613942565b5f604051808303815f87803b158015612f7c575f80fd5b505af1158015612f8e573d5f803e3d5ffd5b505050507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b031663760887037f4c534556322d534b592d4100000000000000000000000000000000000000000087885f89612fef90613a4d565b5f6040518763ffffffff1660e01b8152600401613011969594939291906139d8565b5f604051808303815f87803b158015613028575f80fd5b505af115801561303a573d5f803e3d5ffd5b505050507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b0316637cdd3fde7f4c534556322d534b592d41000000000000000000000000000000000000000000878761309990613a4d565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b03909116602483015260448201526064015f604051808303815f87803b1580156130e4575f80fd5b505af11580156130f6573d5f803e3d5ffd5b505050506001600160a01b038581165f908152600660205260409020541680156131705760405163d8ccd0f360e01b8152600481018690526001600160a01b0382169063d8ccd0f3906024015f604051808303815f87803b158015613159575f80fd5b505af115801561316b573d5f803e3d5ffd5b505050505b5f670de0b6b3a764000061318486886138f4565b61318e9190613982565b9050801561321257604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000056072c95faa701256059aa122697b133aded92791690639dc29fac906131e49030908590600401613942565b5f604051808303815f87803b1580156131fb575f80fd5b505af115801561320d573d5f803e3d5ffd5b505050505b90940395945050505050565b5f8183111561322d578161322f565b825b9392505050565b831561331e576001600160a01b038316156132a75760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a3906132799086908890600401613942565b5f604051808303815f87803b158015613290575f80fd5b505af11580156132a2573d5f803e3d5ffd5b505050505b6001600160a01b0382161561331e5760405163e62d29df60e01b81526001600160a01b0383811660048301526024820186905261ffff8316604483015286169063e62d29df906064015f604051808303815f87803b158015613307575f80fd5b505af1158015613319573d5f803e3d5ffd5b505050505b506001600160a01b039384165f90815260076020526040902080546001600160a01b03191691909416179092555050565b6001600160a01b038083165f9081526003602090815260408083208584529091529020541680612cf25760405162461bcd60e51b815260206004820152601b60248201527f4c6f636b7374616b65456e67696e652f696e76616c69642d75726e0000000000604482015260640161077c565b5f816001600160a01b0316846001600160a01b031614806113d357506001600160a01b038084165f90815260056020908152604080832093861683529290522054600114949350505050565b60408051603780825260608281019093526020820181803683375050733d602d80600a3d3981f3363d3d373d3d3d363d7360601b6020830152507f0000000000000000000000007b4cb30d13983bf81767531433cebd4214908a9960601b60348201526e5af43d82803e903d91602b57fd5bf360881b6048820152919050565b5f825f0361349b575f61322f565b8160018403816134ad576134ad61396e565b046001019392505050565b80356001600160a01b03811681146134ce575f80fd5b919050565b5f805f606084860312156134e5575f80fd5b6134ee846134b8565b925060208401359150613503604085016134b8565b90509250925092565b5f805f806080858703121561351f575f80fd5b613528856134b8565b93506020850135925061353d604086016134b8565b9396929550929360600135925050565b5f6020828403121561355d575f80fd5b61322f826134b8565b5f805f60608486031215613578575f80fd5b613581846134b8565b95602085013595506040909401359392505050565b634e487b7160e01b5f52602160045260245ffd5b60208101600383106135ca57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f805f80608085870312156135e3575f80fd5b6135ec856134b8565b935060208501359250613601604086016134b8565b915061360f606086016134b8565b905092959194509250565b5f806040838503121561362b575f80fd5b613634836134b8565b946020939093013593505050565b5f60208284031215613652575f80fd5b5035919050565b803561ffff811681146134ce575f80fd5b5f805f806080858703121561367d575f80fd5b613686856134b8565b9350602085013592506040850135915061360f60608601613659565b5f80602083850312156136b3575f80fd5b823567ffffffffffffffff808211156136ca575f80fd5b818501915085601f8301126136dd575f80fd5b8135818111156136eb575f80fd5b8660208260051b85010111156136ff575f80fd5b60209290920196919550909350505050565b5f602080830181845280855180835260408601915060408160051b87010192508387015f805b8381101561379357888603603f1901855282518051808852835b8181101561376c578281018a01518982018b01528901613751565b508781018901849052601f01601f1916909601870195509386019391860191600101613737565b509398975050505050505050565b5f80604083850312156137b2575f80fd5b6137bb836134b8565b91506137c9602084016134b8565b90509250929050565b5f805f80608085870312156137e5575f80fd5b6137ee856134b8565b935060208501359250613803604086016134b8565b915061360f60608601613659565b5f805f60608486031215613823575f80fd5b61382c846134b8565b925061383a602085016134b8565b9150604084013590509250925092565b5f806040838503121561385b575f80fd5b823591506137c9602084016134b8565b5f6020828403121561387b575f80fd5b5051919050565b5f8060408385031215613893575f80fd5b505080516020909101519092909150565b5f805f805f60a086880312156138b8575f80fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612cf257612cf26138e0565b6020808252601e908201527f4c6f636b7374616b65456e67696e652f6e6f742d617574686f72697a65640000604082015260600190565b6001600160a01b03929092168252602082015260400190565b81810381811115612cf257612cf26138e0565b634e487b7160e01b5f52601260045260245ffd5b5f8261399c57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526018908201527f4c6f636b7374616b65456e67696e652f6f766572666c6f770000000000000000604082015260600190565b9586526001600160a01b039485166020870152928416604086015292166060840152608083019190915260a082015260c00190565b5f81613a1b57613a1b6138e0565b505f190190565b80820180821115612cf257612cf26138e0565b5f60018201613a4657613a466138e0565b5060010190565b5f600160ff1b8201613a6157613a616138e0565b505f0390565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112613aa4575f80fd5b83018035915067ffffffffffffffff821115613abe575f80fd5b602001915036819003821315613ad2575f80fd5b9250929050565b818382375f910190815291905056fea26469706673582212204985d945cdd439127a92536aa61e6397332d44fce3f1a7fee51221d8b8a52b9964736f6c63430008150033
Deployed Bytecode Sourcemap
2150:15450:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9477:893;;;;;;:::i;:::-;;:::i;:::-;;3293:60;;;;;;;;-1:-1:-1;;;;;719:32:3;;;701:51;;689:2;674:18;3293:60:0;;;;;;;;13040:252;;;;;;:::i;:::-;;:::i;2845:81::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2845:81:0;;;16782:816;;;;;;:::i;:::-;;:::i;3359:44::-;;;;;2577:82;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2577:82:0;;;2312:78;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;3464:45::-;;;;;15682:361;;;;;;:::i;:::-;;:::i;:::-;;;3369:25:3;;;3357:2;3342:18;15682:361:0;3223:177:3;16096:497:0;;;;;;:::i;:::-;;:::i;8361:159::-;;;;;;:::i;:::-;;:::i;:::-;;;3829:14:3;;3822:22;3804:41;;3792:2;3777:18;8361:159:0;3664:187:3;7650:96:0;;;;;;:::i;:::-;;:::i;8567:463::-;;;;;;:::i;:::-;;:::i;3565:44::-;;;;;3615:46;;;;;11868:880;;;;;;:::i;:::-;;:::i;15084:551::-;;;;;;:::i;:::-;;:::i;14127:448::-;;;;;;:::i;:::-;;:::i;3022:76::-;;;;;-1:-1:-1;;;;;3022:76:0;;;9036:192;;;;;;:::i;:::-;;:::i;7752:96::-;;;;;;:::i;:::-;;:::i;2396:87::-;;;;;;:::i;:::-;;;;;;;;;;;;;;9234:192;;;;;;:::i;:::-;;:::i;8209:122::-;;;;;;:::i;:::-;;:::i;304:549:2:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8082:121:0:-;;;;;;:::i;:::-;;:::i;2665:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10872:590;;;;;;:::i;:::-;;:::i;12754:280::-;;;;;;:::i;:::-;;:::i;2228:78::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;14581:497;;;;;;:::i;:::-;;:::i;3515:44::-;;;;;16599:177;;;;;;:::i;:::-;;:::i;7854:222::-;;;;;;:::i;:::-;;:::i;2750:89::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2750:89:0;;;2489:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2489:82:0;;;3731:44;;;;;3667:58;;;;;3409:49;;;;;2932:84;;;;;;:::i;:::-;;;;;;;;;;;;;;9477:893;9576:11;9590:27;9604:5;9611;9590:13;:27::i;:::-;-1:-1:-1;;;;;9635:16:0;;;;;;:11;:16;;;;;;9576:41;;-1:-1:-1;9635:21:0;9627:64;;;;-1:-1:-1;;;9627:64:0;;8540:2:3;9627:64:0;;;8522:21:3;8579:2;8559:18;;;8552:30;8618:32;8598:18;;;8591:60;8668:18;;9627:64:0;;;;;;;;;-1:-1:-1;;;;;9709:26:0;;;;:76;;-1:-1:-1;9739:41:0;;-1:-1:-1;;;9739:41:0;;-1:-1:-1;;;;;719:32:3;;;9739:41:0;;;701:51:3;9739:19:0;:27;;;;674:18:3;;9739:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9784:1;9739:46;9709:76;9701:128;;;;-1:-1:-1;;;9701:128:0;;9088:2:3;9701:128:0;;;9070:21:3;9127:2;9107:18;;;9100:30;9166:34;9146:18;;;9139:62;-1:-1:-1;;;9217:18:3;;;9210:37;9264:19;;9701:128:0;8886:403:3;9701:128:0;-1:-1:-1;;;;;9866:21:0;;;9839:24;9866:21;;;:16;:21;;;;;;;;;9905:32;;;;9897:79;;;;-1:-1:-1;;;9897:79:0;;9496:2:3;9897:79:0;;;9478:21:3;9535:2;9515:18;;;9508:30;9574:34;9554:18;;;9547:62;-1:-1:-1;;;9625:18:3;;;9618:32;9667:19;;9897:79:0;9294:398:3;9897:79:0;10015:18;;-1:-1:-1;;;10015:18:0;;10024:3;10015:18;;;9871:25:3;-1:-1:-1;;;;;9932:32:3;;;9912:18;;;9905:60;9987:11:0;;;;10015:3;:8;;;;9844:18:3;;10015::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9986:47;;;;10053:1;10047:3;:7;:37;;;;-1:-1:-1;;;;;;10058:26:0;;;;10047:37;10043:189;;;10122:13;;-1:-1:-1;;;10122:13:0;;10131:3;10122:13;;;3369:25:3;10104:12:0;;10122:3;-1:-1:-1;;;;;10122:8:0;;;;3342:18:3;;10122:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;10177:3:0;;:13;;-1:-1:-1;;;10177:13:0;;10186:3;10177:13;;;3369:25:3;10100:35:0;;-1:-1:-1;;;;;;10177:3:0;;-1:-1:-1;10177:8:0;;-1:-1:-1;3342:18:3;;10177:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10171:19;;:3;:19;:::i;:::-;10157:10;10163:4;10157:3;:10;:::i;:::-;:33;;10149:72;;;;-1:-1:-1;;;10149:72:0;;11168:2:3;10149:72:0;;;11150:21:3;11207:2;11187:18;;;11180:30;11246:28;11226:18;;;11219:56;11292:18;;10149:72:0;10966:350:3;10149:72:0;10086:146;10043:189;10241:61;10261:3;10266;10271:16;10289:12;10241:19;:61::i;:::-;10350:12;-1:-1:-1;;;;;10317:46:0;10343:5;10336;-1:-1:-1;;;;;10317:46:0;;;;;;;;;;;9566:804;;;;9477:893;;;:::o;13040:252::-;5281:10;5275:5;:17;;;;;;;;;;;5296:1;5275:22;5267:65;;;;-1:-1:-1;;;5267:65:0;;;;;;;:::i;:::-;13138:11:::1;13152:27;13166:5;13173;13152:13;:27::i;:::-;13138:41;;13189:18;13195:3;13200;13205:1;13189:5;:18::i;:::-;-1:-1:-1::0;13217:21:0::1;::::0;-1:-1:-1;;;13217:21:0;;-1:-1:-1;;;;;13217:3:0::1;:12;::::0;::::1;::::0;:21:::1;::::0;13230:2;;13234:3;;13217:21:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13270:5;13263;-1:-1:-1::0;;;;;13253:32:0::1;;13277:2;13281:3;13253:32;;;;;;;:::i;:::-;;;;;;;;13128:164;13040:252:::0;;;;:::o;16782:816::-;5281:10;5275:5;:17;;;;;;;;;;;5296:1;5275:22;5267:65;;;;-1:-1:-1;;;5267:65:0;;;;;;;:::i;:::-;16865:12:::1;::::0;16915:8;;16911:605:::1;;16954:3;16978:38;16998:10;16954:3:::0;3164:6:::1;16998:10;:::i;:::-;16983:11;16990:4:::0;16983;:11:::1;:::i;:::-;:26;;;;:::i;:::-;17011:4;16978;:38::i;:::-;17030:29;::::0;-1:-1:-1;;;17030:29:0;;16971:45;;-1:-1:-1;;;;;;17030:3:0::1;:8;::::0;::::1;::::0;:29:::1;::::0;17047:4:::1;::::0;16971:45;;17030:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;17094:11:0;;::::1;::::0;-1:-1:-1;;17125:10:0;;;17121:385:::1;;-1:-1:-1::0;;;;;17262:6:0::1;:35;;17254:72;;;;-1:-1:-1::0;;;17254:72:0::1;;;;;;;:::i;:::-;17344:34;::::0;-1:-1:-1;;;17344:34:0;;17353:3:::1;17344:34;::::0;::::1;12999:25:3::0;-1:-1:-1;;;;;13060:32:3;;;13040:18;;;13033:60;13109:18;;;13102:34;;;17344:3:0::1;:8;::::0;::::1;::::0;12972:18:3;;17344:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17396:54:0::1;::::0;-1:-1:-1;;;17396:54:0;;-1:-1:-1;;;;;17396:3:0::1;:8;::::0;-1:-1:-1;17396:8:0::1;::::0;-1:-1:-1;17396:54:0::1;::::0;17405:3:::1;::::0;17410;;;;17428:1:::1;::::0;17439:6;;17428:1;;17396:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17468:23:0::1;::::0;-1:-1:-1;;;17468:23:0;;-1:-1:-1;;;;;17468:5:0::1;:10;::::0;-1:-1:-1;17468:10:0::1;::::0;-1:-1:-1;17468:23:0::1;::::0;17479:3;;17484:6;;17468:23:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17121:385;16925:591;16911:605;-1:-1:-1::0;;;;;17525:16:0;::::1;;::::0;;;:11:::1;:16;::::0;;;;:18;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;17558:33:0::1;::::0;;14100:25:3;;;14156:2;14141:18;;14134:34;;;14184:18;;;14177:34;;;-1:-1:-1;;;;;17558:33:0;::::1;::::0;::::1;::::0;14088:2:3;14073:18;17558:33:0::1;;;;;;;16855:743;;16782:816:::0;;;:::o;15682:361::-;15775:11;15798;15812:27;15826:5;15833;15812:13;:27::i;:::-;15798:41;-1:-1:-1;15871:22:0;-1:-1:-1;;;;;15857:11:0;;;;;;:5;:11;;;;;;;;:36;;;;;;;;:::i;:::-;;15849:81;;;;-1:-1:-1;;;15849:81:0;;14424:2:3;15849:81:0;;;14406:21:3;;;14443:18;;;14436:30;14502:34;14482:18;;;14475:62;14554:18;;15849:81:0;14222:356:3;15849:81:0;15946:37;;-1:-1:-1;;;15946:37:0;;-1:-1:-1;;;;;14813:15:3;;;15946:37:0;;;14795:34:3;14865:15;;;14845:18;;;14838:43;15946:27:0;;;;;14730:18:3;;15946:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15940:43;;16022:4;-1:-1:-1;;;;;15998:38:0;16015:5;16008;-1:-1:-1;;;;;15998:38:0;;16028:2;16032:3;15998:38;;;;;;;:::i;:::-;;;;;;;;15788:255;15682:361;;;;;;:::o;16096:497::-;5281:10;5275:5;:17;;;;;;;;;;;5296:1;5275:22;5267:65;;;;-1:-1:-1;;;5267:65:0;;;;;;;:::i;:::-;16281:18:::1;::::0;-1:-1:-1;;;16281:18:0;;16290:3:::1;16281:18;::::0;::::1;9871:25:3::0;-1:-1:-1;;;;;9932:32:3;;;9912:18;;;9905:60;16265:11:0::1;::::0;16281:3:::1;:8:::0;;::::1;::::0;::::1;::::0;9844:18:3;;16281::0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;16264:35:0;-1:-1:-1;16309:21:0::1;16333:9;16339:3:::0;16264:35;16333:9:::1;:::i;:::-;-1:-1:-1::0;;;;;16392:21:0;;::::1;;::::0;;;:16:::1;:21;::::0;;;;;16309:33;;-1:-1:-1;16352:74:0::1;::::0;16372:3;;16309:33;;16392:21;::::1;::::0;16352:19:::1;:74::i;:::-;-1:-1:-1::0;;;;;16468:13:0;;::::1;;::::0;;;:8:::1;:13;::::0;;;;;16436:61:::1;::::0;16448:3;;16453:13;;16468;;::::1;::::0;;16436:11:::1;:61::i;:::-;16507:20;::::0;-1:-1:-1;;;16507:20:0;;-1:-1:-1;;;;;16507:5:0::1;:10;::::0;::::1;::::0;:20:::1;::::0;16518:3;;16523;;16507:20:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;;16537:16:0;::::1;;::::0;;;:11:::1;:16;::::0;;;;:18;;;::::1;::::0;::::1;:::i;:::-;;;;;;16577:3;-1:-1:-1::0;;;;;16570:16:0::1;;16582:3;16570:16;;;;3369:25:3::0;;3357:2;3342:18;;3223:177;16570:16:0::1;;;;;;;;16152:441;;16096:497:::0;;:::o;8361:159::-;8446:7;8470:43;8479:5;8486:21;8494:5;8501;8486:7;:21::i;:::-;8509:3;8470:8;:43::i;:::-;8465:48;8361:159;-1:-1:-1;;;;8361:159:0:o;7650:96::-;5281:10;5275:5;:17;;;;;;;;;;;5296:1;5275:22;5267:65;;;;-1:-1:-1;;;5267:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7701:10:0;::::1;:5;:10:::0;;;::::1;::::0;;;;;;;7714:1:::1;7701:14:::0;;7730:9;::::1;::::0;7701:5;7730:9:::1;7650:96:::0;:::o;8567:463::-;8669:10;8614:11;8654:26;;;:14;:26;;;;;:28;;;8614:11;8654:28;;;:::i;:::-;;;;;8645:5;:37;8637:81;;;;-1:-1:-1;;;8637:81:0;;15364:2:3;8637:81:0;;;15346:21:3;15403:2;15383:18;;;15376:30;15442:33;15422:18;;;15415:61;15493:18;;8637:81:0;15162:355:3;8637:81:0;8728:21;8752:11;:9;:11::i;:::-;8728:35;;8822:4;8815;8805:8;8801:19;8798:1;8791:36;8784:43;;8851:3;-1:-1:-1;;;;;8838:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8919:10:0;8909:21;;;;:9;:21;;;;;;;;:28;;;;;;;;:34;;-1:-1:-1;;;;;8909:34:0;;-1:-1:-1;;;;;;8909:34:0;;;;;;;;8953:14;;;:9;:14;;;;;;:27;;;;;;;;;;8995:28;701:51:3;;;8909:28:0;;-1:-1:-1;8919:10:0;;-1:-1:-1;8995:28:0;;674:18:3;8995:28:0;;;;;;;8627:403;8567:463;;;:::o;11868:880::-;11956:11;11970:21;11978:5;11985;11970:7;:21::i;:::-;12001:48;;-1:-1:-1;;;12001:48:0;;12018:10;12001:48;;;15762:34:3;12038:4:0;15812:18:3;;;15805:43;15864:18;;;15857:34;;;11956:35:0;;-1:-1:-1;12001:3:0;-1:-1:-1;;;;;12001:16:0;;;;15697:18:3;;12001:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12067:3:0;:32;;12059:69;;;;-1:-1:-1;;;12059:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12161:21:0;;;12138:20;12161:21;;;:16;:21;;;;;;;12196:26;;12192:141;;12238:30;;-1:-1:-1;;;12238:30:0;;-1:-1:-1;;;;;12238:3:0;:11;;;;:30;;12250:12;;12264:3;;12238:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12282:40:0;;-1:-1:-1;;;12282:40:0;;;;;3369:25:3;;;-1:-1:-1;;;;;12282:35:0;;;-1:-1:-1;12282:35:0;;-1:-1:-1;3342:18:3;;12282:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12192:141;12342:31;;-1:-1:-1;;;12342:31:0;;12351:3;12342:31;;;12999:25:3;-1:-1:-1;;;;;13060:32:3;;;13040:18;;;13033:60;13109:18;;;13102:34;;;12342:3:0;:8;;;;12972:18:3;;12342:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12383:51:0;;-1:-1:-1;;;12383:51:0;;-1:-1:-1;;;;;12383:3:0;:8;;-1:-1:-1;12383:8:0;;-1:-1:-1;12383:51:0;;12392:3;;12397;;;;12415:1;;12426:3;;12415:1;;12383:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12444:20:0;;-1:-1:-1;;;12444:20:0;;-1:-1:-1;;;;;12444:5:0;:10;;-1:-1:-1;12444:10:0;;-1:-1:-1;12444:20:0;;12455:3;;12460;;12444:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;12492:13:0;;;12474:15;12492:13;;;:8;:13;;;;;;;12519:21;;12515:184;;12582:17;-1:-1:-1;;;;;12564:14:0;;;;;;:5;:14;;;;;;;;:35;;;;;;;;:::i;:::-;;12556:76;;;;-1:-1:-1;;;12556:76:0;;16104:2:3;12556:76:0;;;16086:21:3;16143:2;16123:18;;;16116:30;16182;16162:18;;;16155:58;16230:18;;12556:76:0;15902:352:3;12556:76:0;12646:42;;-1:-1:-1;;;12646:42:0;;-1:-1:-1;;;;;16477:32:3;;;12646:42:0;;;16459:51:3;16526:18;;;16519:34;;;16601:6;16589:19;;16569:18;;;16562:47;12646:23:0;;;;;16432:18:3;;12646:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12515:184;12713:28;;;16792:25:3;;;16865:6;16853:19;;16848:2;16833:18;;16826:47;12725:5:0;;-1:-1:-1;;;;;12713:28:0;;;;;16765:18:3;12713:28:0;;;;;;;;11946:802;;;11868:880;;;;:::o;15084:551::-;15149:11;15172;15186:21;15194:5;15201;15186:7;:21::i;:::-;15235:18;;-1:-1:-1;;;15235:18:0;;15244:3;15235:18;;;9871:25:3;-1:-1:-1;;;;;9932:32:3;;;9912:18;;;9905:60;15172:35:0;;-1:-1:-1;15220:11:0;;15235:3;:8;;;;9844:18:3;;15235::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15217:36;;;-1:-1:-1;;;;;15271:3:0;:32;;15263:69;;;;-1:-1:-1;;;15263:69:0;;;;;;;:::i;:::-;15364:13;;-1:-1:-1;;;15364:13:0;;15373:3;15364:13;;;3369:25:3;15345:12:0;;15364:3;-1:-1:-1;;;;;15364:8:0;;;;3342:18:3;;15364:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15342:35;;;;;;15393:23;15406:4;15400:3;:10;;;;:::i;:::-;3199:6;15393;:23::i;:::-;15426:49;;-1:-1:-1;;;15426:49:0;;15444:10;15426:49;;;15762:34:3;15464:4:0;15812:18:3;;;15805:43;15864:18;;;15857:34;;;15387:29:0;;-1:-1:-1;15426:4:0;-1:-1:-1;;;;;15426:17:0;;;;15697:18:3;;15426:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15485:33:0;;-1:-1:-1;;;15485:33:0;;-1:-1:-1;;;;;15485:8:0;:13;;-1:-1:-1;15485:13:0;;-1:-1:-1;15485:33:0;;15507:4;;15514:3;;15485:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15528:3;-1:-1:-1;;;;;15528:8:0;;15537:3;15542;15555:1;15567:4;15574:1;15585:3;15577:12;;;:::i;:::-;15528:62;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15617:5;15610;-1:-1:-1;;;;;15605:23:0;;15624:3;15605:23;;;;3369:25:3;;3357:2;3342:18;;3223:177;15605:23:0;;;;;;;;15162:473;;;15084:551;;;;:::o;14127:448::-;14215:11;14229:27;14243:5;14250;14229:13;:27::i;:::-;14281:3;;:13;;-1:-1:-1;;;14281:13:0;;14290:3;14281:13;;;3369:25:3;14215:41:0;;-1:-1:-1;14266:12:0;;-1:-1:-1;;;;;14281:3:0;;;;:8;;3342:18:3;;14281:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14266:28;-1:-1:-1;14304:12:0;14319:23;14326:9;3199:6;14326:3;:9;:::i;:::-;14337:4;14319:6;:23::i;:::-;14304:38;;-1:-1:-1;;;;;14360:4:0;:33;;14352:70;;;;-1:-1:-1;;;14352:70:0;;;;;;;:::i;:::-;14432:62;;-1:-1:-1;;;14432:62:0;;-1:-1:-1;;;;;14432:3:0;:8;;;;:62;;14441:3;;14446;;14459:1;;14471:4;;14459:1;;14488:4;;14432:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14504:22:0;;-1:-1:-1;;;14504:22:0;;-1:-1:-1;;;;;14504:8:0;:13;;-1:-1:-1;14504:13:0;;-1:-1:-1;14504:22:0;;14518:2;;14522:3;;14504:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14553:5;14546;-1:-1:-1;;;;;14541:27:0;;14560:2;14564:3;14541:27;;;;;;;:::i;9036:192::-;9112:11;9126:27;9140:5;9147;9126:13;:27::i;:::-;-1:-1:-1;;;;;9163:11:0;;;;;;;:6;:11;;;;;;;;:16;;;;;;;;;;;9182:1;9163:20;;9198:23;9112:41;;-1:-1:-1;9163:16:0;9210:5;;9198:23;;;;;;9102:126;9036:192;;;:::o;7752:96::-;5281:10;5275:5;:17;;;;;;;;;;;5296:1;5275:22;5267:65;;;;-1:-1:-1;;;5267:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7803:10:0;::::1;7816:1;7803:10:::0;;;::::1;::::0;;;;;;;:14;;;7832:9;::::1;::::0;7816:1;7832:9:::1;7752:96:::0;:::o;9234:192::-;9310:11;9324:27;9338:5;9345;9324:13;:27::i;:::-;-1:-1:-1;;;;;9361:11:0;;;9380:1;9361:11;;;:6;:11;;;;;;;;:16;;;;;;;;;;;:20;;;9396:23;9310:41;;-1:-1:-1;9361:16:0;9408:5;;9396:23;;;;;;9300:126;9234:192;;;:::o;8209:122::-;5281:10;5275:5;:17;;;;;;;;;;;5296:1;5275:22;5267:65;;;;-1:-1:-1;;;5267:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8264:11:0;::::1;;::::0;;;:5:::1;:11;::::0;;;;;;;;:32;;-1:-1:-1;;8264:32:0::1;8278:18;8264:32;::::0;;8311:13;;701:51:3;;;8311:13:0::1;::::0;674:18:3;8311:13:0::1;;;;;;;;8209:122:::0;:::o;304:549:2:-;364:22;420:4;408:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;398:34;;447:9;442:405;462:15;;;442:405;;;499:12;;544:4;563;;568:1;563:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;536:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;498:73;;;;591:7;586:217;;622:6;:13;639:1;622:18;618:50;;642:26;;-1:-1:-1;;;642:26:2;;18903:2:3;642:26:2;;;18885:21:3;18942:2;18922:18;;;18915:30;-1:-1:-1;;;18961:18:3;;;18954:46;19017:18;;642:26:2;18701:340:3;618:50:2;763:6;757:13;748:6;744:2;740:15;733:38;586:217;830:6;817:7;825:1;817:10;;;;;;;;:::i;:::-;;;;;;:19;;;;484:363;;479:3;;;;;:::i;:::-;;;;442:405;;;;304:549;;;;:::o;8082:121:0:-;5281:10;5275:5;:17;;;;;;;;;;;5296:1;5275:22;5267:65;;;;-1:-1:-1;;;5267:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8137:11:0;::::1;;::::0;;;8151:17:::1;8137:11;::::0;;;;;;;;:31;;-1:-1:-1;;8137:31:0::1;::::0;;::::1;::::0;;;8183:13;;701:51:3;;;8183:13:0::1;::::0;674:18:3;8183:13:0::1;525:233:3::0;10872:590:0;10967:11;10981:27;10995:5;11002;10981:13;:27::i;:::-;-1:-1:-1;;;;;11026:16:0;;;;;;:11;:16;;;;;;10967:41;;-1:-1:-1;11026:21:0;11018:64;;;;-1:-1:-1;;;11018:64:0;;8540:2:3;11018:64:0;;;8522:21:3;8579:2;8559:18;;;8552:30;8618:32;8598:18;;;8591:60;8668:18;;11018:64:0;8338:354:3;11018:64:0;-1:-1:-1;;;;;11100:18:0;;;;:54;;-1:-1:-1;11137:17:0;-1:-1:-1;;;;;11122:11:0;;;;;;:5;:11;;;;;;;;:32;;;;;;;;:::i;:::-;;11100:54;11092:110;;;;-1:-1:-1;;;11092:110:0;;19248:2:3;11092:110:0;;;19230:21:3;19287:2;19267:18;;;19260:30;19326:34;19306:18;;;19299:62;-1:-1:-1;;;19377:18:3;;;19370:41;19428:19;;11092:110:0;19046:407:3;11092:110:0;-1:-1:-1;;;;;11231:13:0;;;11212:16;11231:13;;;:8;:13;;;;;;;;;11262:16;;;;11254:54;;;;-1:-1:-1;;;11254:54:0;;19660:2:3;11254:54:0;;;19642:21:3;19699:2;19679:18;;;19672:30;19738:27;19718:18;;;19711:55;19783:18;;11254:54:0;19458:349:3;11254:54:0;11335:18;;-1:-1:-1;;;11335:18:0;;11344:3;11335:18;;;9871:25:3;-1:-1:-1;;;;;9932:32:3;;;9912:18;;;9905:60;11319:11:0;;11335:3;:8;;;;;;9844:18:3;;11335::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11318:35;;;11363:42;11375:3;11380;11385:8;11395:4;11401:3;11363:11;:42::i;:::-;11420:35;;19986:6:3;19974:19;;19956:38;;-1:-1:-1;;;;;11420:35:0;;;;11438:5;;11420:35;;;;;19944:2:3;19929:18;11420:35:0;;;;;;;10957:505;;;10872:590;;;;:::o;12754:280::-;12841:13;12866:11;12880:27;12894:5;12901;12880:13;:27::i;:::-;12866:41;;12925:20;12931:3;12936;12941;12925:5;:20::i;:::-;12955:23;;-1:-1:-1;;;12955:23:0;;12917:28;;-1:-1:-1;;;;;;12955:3:0;:12;;;;:23;;12968:2;;12917:28;;12955:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12993:34:0;;;-1:-1:-1;;;;;20225:32:3;;;20207:51;;20289:2;20274:18;;20267:34;;;20317:18;;;20310:34;;;13005:5:0;;-1:-1:-1;12993:34:0;;;;-1:-1:-1;12993:34:0;;20195:2:3;20180:18;12993:34:0;;;;;;;12856:178;12754:280;;;;;;:::o;14581:497::-;14657:11;14671:21;14679:5;14686;14671:7;:21::i;:::-;14702:49;;-1:-1:-1;;;14702:49:0;;14720:10;14702:49;;;15762:34:3;14740:4:0;15812:18:3;;;15805:43;15864:18;;;15857:34;;;14657:35:0;;-1:-1:-1;14702:4:0;-1:-1:-1;;;;;14702:17:0;;;;15697:18:3;;14702:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14761:33:0;;-1:-1:-1;;;14761:33:0;;-1:-1:-1;;;;;14761:8:0;:13;;-1:-1:-1;14761:13:0;;-1:-1:-1;14761:33:0;;14783:4;;14790:3;;14761:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14826:13:0;;-1:-1:-1;;;14826:13:0;;14835:3;14826:13;;;3369:25:3;14807:12:0;;-1:-1:-1;14826:3:0;-1:-1:-1;;;;;14826:8:0;;-1:-1:-1;14826:8:0;;3342:18:3;;14826:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14804:35;;;;;;14849:12;14876:4;3199:6;14864:3;:9;;;;:::i;:::-;:16;;;;:::i;:::-;14849:31;;-1:-1:-1;;;;;14898:4:0;:33;;14890:70;;;;-1:-1:-1;;;14890:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14970:3:0;:8;;14979:3;14984;14997:1;15009:4;14997:1;15019:13;15027:4;15019:13;:::i;:::-;14970:63;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15060:5;15053;-1:-1:-1;;;;;15048:23:0;;15067:3;15048:23;;;;3369:25:3;;3357:2;3342:18;;3223:177;15048:23:0;;;;;;;;14647:431;;;14581:497;;;:::o;16599:177::-;5281:10;5275:5;:17;;;;;;;;;;;5296:1;5275:22;5267:65;;;;-1:-1:-1;;;5267:65:0;;;;;;;:::i;:::-;16678:22:::1;::::0;-1:-1:-1;;;16678:22:0;;-1:-1:-1;;;;;16678:3:0::1;:12;::::0;::::1;::::0;:22:::1;::::0;16691:3;;16696;;16678:22:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16760:3;-1:-1:-1::0;;;;;16748:21:0::1;16755:3;-1:-1:-1::0;;;;;16748:21:0::1;;16765:3;16748:21;;;;3369:25:3::0;;3357:2;3342:18;;3223:177;16748:21:0::1;;;;;;;;16599:177:::0;;;:::o;7854:222::-;5281:10;5275:5;:17;;;;;;;;;;;5296:1;5275:22;5267:65;;;;-1:-1:-1;;;5267:65:0;;;;;;;:::i;:::-;7924:4:::1;-1:-1:-1::0;;;7924:13:0;7920:118:::1;;7953:3;:19:::0;;-1:-1:-1;;;;;;7953:19:0::1;-1:-1:-1::0;;;;;7953:19:0;::::1;;::::0;;7920:118:::1;;;7989:49;::::0;-1:-1:-1;;;7989:49:0;;20557:2:3;7989:49:0::1;::::0;::::1;20539:21:3::0;20596:2;20576:18;;;20569:30;20635:34;20615:18;;;20608:62;-1:-1:-1;;;20686:18:3;;;20679:37;20733:19;;7989:49:0::1;20355:403:3::0;7920:118:0::1;8053:16;::::0;-1:-1:-1;;;;;719:32:3;;701:51;;8058:4:0;;8053:16:::1;::::0;689:2:3;674:18;8053:16:0::1;;;;;;;7854:222:::0;;:::o;6837:::-;6913:11;6942:21;6950:5;6957;6942:7;:21::i;:::-;6936:27;;6981:32;6990:5;6997:3;7002:10;6981:8;:32::i;:::-;6973:79;;;;-1:-1:-1;;;6973:79:0;;20965:2:3;6973:79:0;;;20947:21:3;21004:2;20984:18;;;20977:30;21043:34;21023:18;;;21016:62;-1:-1:-1;;;21094:18:3;;;21087:32;21136:19;;6973:79:0;20763:398:3;6973:79:0;6837:222;;;;:::o;10376:490::-;10502:7;;10498:316;;-1:-1:-1;;;;;10529:30:0;;;10525:113;;10579:44;;-1:-1:-1;;;10579:44:0;;;;;3369:25:3;;;-1:-1:-1;;;;;10579:39:0;;;;;3342:18:3;;10579:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10525:113;-1:-1:-1;;;;;10655:26:0;;;10651:153;;10701:30;;-1:-1:-1;;;10701:30:0;;-1:-1:-1;;;;;10701:3:0;:11;;;;:30;;10713:12;;10727:3;;10701:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10749:40:0;;-1:-1:-1;;;10749:40:0;;;;;3369:25:3;;;-1:-1:-1;;;;;10749:35:0;;;-1:-1:-1;10749:35:0;;-1:-1:-1;3342:18:3;;10749:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10651:153;-1:-1:-1;;;;;10823:21:0;;;;;;;:16;:21;;;;;:36;;-1:-1:-1;;;;;;10823:36:0;;;;;;;;;-1:-1:-1;;10376:490:0:o;13298:792::-;13371:13;-1:-1:-1;;;;;13404:3:0;:32;;13396:69;;;;-1:-1:-1;;;13396:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13493:13:0;;;13475:15;13493:13;;;:8;:13;;;;;;;13520:21;;13516:92;;13557:40;;-1:-1:-1;;;13557:40:0;;-1:-1:-1;;;;;13557:26:0;;;;;:40;;13584:7;;13593:3;;13557:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13516:92;13617:20;;-1:-1:-1;;;13617:20:0;;-1:-1:-1;;;;;13617:5:0;:10;;;;:20;;13628:3;;13633;;13617:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13647:3;-1:-1:-1;;;;;13647:8:0;;13656:3;13661;13666;13679:1;13691:3;13683:12;;;:::i;:::-;13697:1;13647:52;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13709:3;-1:-1:-1;;;;;13709:8:0;;13718:3;13723;13736;13728:12;;;:::i;:::-;13709:32;;-1:-1:-1;;;;;;13709:32:0;;;;;;;;;;12999:25:3;;;;-1:-1:-1;;;;;13060:32:3;;;13040:18;;;13033:60;13109:18;;;13102:34;12972:18;;13709:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;13774:21:0;;;13751:20;13774:21;;;:16;:21;;;;;;;13809:26;;13805:97;;13851:40;;-1:-1:-1;;;13851:40:0;;;;;3369:25:3;;;-1:-1:-1;;;;;13851:35:0;;;;;3342:18:3;;13851:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13805:97;13911:12;3164:6;13926:10;13932:4;13926:3;:10;:::i;:::-;:16;;;;:::i;:::-;13911:31;-1:-1:-1;13956:8:0;;13952:68;;13980:29;;-1:-1:-1;;;13980:29:0;;-1:-1:-1;;;;;13980:3:0;:8;;;;:29;;13997:4;;14004;;13980:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13952:68;14049:10;;;;13298:792;-1:-1:-1;;;;;13298:792:0:o;6121:105::-;6180:9;6210:1;6205;:6;;:14;;6218:1;6205:14;;;6214:1;6205:14;6201:18;6121:105;-1:-1:-1;;;6121:105:0:o;11468:394::-;11582:7;;11578:248;;-1:-1:-1;;;;;11609:22:0;;;11605:102;;11651:41;;-1:-1:-1;;;11651:41:0;;-1:-1:-1;;;;;11651:26:0;;;;;:41;;11678:8;;11688:3;;11651:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11605:102;-1:-1:-1;;;;;11724:18:0;;;11720:96;;11762:39;;-1:-1:-1;;;11762:39:0;;-1:-1:-1;;;;;16477:32:3;;;11762:39:0;;;16459:51:3;16526:18;;;16519:34;;;16601:6;16589:19;;16569:18;;;16562:47;11762:23:0;;;;;16432:18:3;;11762:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11720:96;-1:-1:-1;;;;;;11835:13:0;;;;;;;:8;:13;;;;;:20;;-1:-1:-1;;;;;;11835:20:0;;;;;;;;;-1:-1:-1;;11468:394:0:o;6635:196::-;-1:-1:-1;;;;;6734:16:0;;;6705:11;6734:16;;;:9;:16;;;;;;;;:23;;;;;;;;;;;6767:57;;;;-1:-1:-1;;;6767:57:0;;21368:2:3;6767:57:0;;;21350:21:3;21407:2;21387:18;;;21380:30;21446:29;21426:18;;;21419:57;21493:18;;6767:57:0;21166:351:3;6479:150:0;6561:7;6594:3;-1:-1:-1;;;;;6585:12:0;:5;-1:-1:-1;;;;;6585:12:0;;:37;;;-1:-1:-1;;;;;;6601:11:0;;;;;;;:6;:11;;;;;;;;:16;;;;;;;;;;6621:1;6601:21;6580:42;6479:150;-1:-1:-1;;;;6479:150:0:o;7148:465::-;7228:15;;;7238:4;7228:15;;;7192:17;7228:15;;;;;;;;;;;;;;-1:-1:-1;;;;;7348:4:0;7334:19;;7327:102;-1:-1:-1;7276:17:0;7268:26;;7459:15;7449:26;;7442:40;-1:-1:-1;;;7512:15:0;7502:26;;7495:102;7334:19;7221:22;-1:-1:-1;7148:465:0:o;6232:241::-;6293:9;6426:1;6431;6426:6;:30;;6455:1;6426:30;;;6446:1;6441;6437;:5;6436:11;;;;;:::i;:::-;;6451:1;6435:17;6422:34;6232:241;-1:-1:-1;;;6232:241:0:o;14:173:3:-;82:20;;-1:-1:-1;;;;;131:31:3;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:328::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;453:2;442:9;438:18;425:32;415:42;;476:38;510:2;499:9;495:18;476:38;:::i;:::-;466:48;;192:328;;;;;:::o;763:397::-;849:6;857;865;873;926:3;914:9;905:7;901:23;897:33;894:53;;;943:1;940;933:12;894:53;966:29;985:9;966:29;:::i;:::-;956:39;;1042:2;1031:9;1027:18;1014:32;1004:42;;1065:38;1099:2;1088:9;1084:18;1065:38;:::i;:::-;763:397;;;;-1:-1:-1;1055:48:3;;1150:2;1135:18;1122:32;;-1:-1:-1;;763:397:3:o;1165:186::-;1224:6;1277:2;1265:9;1256:7;1252:23;1248:32;1245:52;;;1293:1;1290;1283:12;1245:52;1316:29;1335:9;1316:29;:::i;1564:322::-;1641:6;1649;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:52;;;1726:1;1723;1716:12;1678:52;1749:29;1768:9;1749:29;:::i;:::-;1739:39;1825:2;1810:18;;1797:32;;-1:-1:-1;1876:2:3;1861:18;;;1848:32;;1564:322;-1:-1:-1;;;1564:322:3:o;2113:127::-;2174:10;2169:3;2165:20;2162:1;2155:31;2205:4;2202:1;2195:15;2229:4;2226:1;2219:15;2245:342;2391:2;2376:18;;2424:1;2413:13;;2403:144;;2469:10;2464:3;2460:20;2457:1;2450:31;2504:4;2501:1;2494:15;2532:4;2529:1;2522:15;2403:144;2556:25;;;2245:342;:::o;2815:403::-;2901:6;2909;2917;2925;2978:3;2966:9;2957:7;2953:23;2949:33;2946:53;;;2995:1;2992;2985:12;2946:53;3018:29;3037:9;3018:29;:::i;:::-;3008:39;;3094:2;3083:9;3079:18;3066:32;3056:42;;3117:38;3151:2;3140:9;3136:18;3117:38;:::i;:::-;3107:48;;3174:38;3208:2;3197:9;3193:18;3174:38;:::i;:::-;3164:48;;2815:403;;;;;;;:::o;3405:254::-;3473:6;3481;3534:2;3522:9;3513:7;3509:23;3505:32;3502:52;;;3550:1;3547;3540:12;3502:52;3573:29;3592:9;3573:29;:::i;:::-;3563:39;3649:2;3634:18;;;;3621:32;;-1:-1:-1;;;3405:254:3:o;3856:180::-;3915:6;3968:2;3956:9;3947:7;3943:23;3939:32;3936:52;;;3984:1;3981;3974:12;3936:52;-1:-1:-1;4007:23:3;;3856:180;-1:-1:-1;3856:180:3:o;4041:159::-;4108:20;;4168:6;4157:18;;4147:29;;4137:57;;4190:1;4187;4180:12;4205:395;4290:6;4298;4306;4314;4367:3;4355:9;4346:7;4342:23;4338:33;4335:53;;;4384:1;4381;4374:12;4335:53;4407:29;4426:9;4407:29;:::i;:::-;4397:39;;4483:2;4472:9;4468:18;4455:32;4445:42;;4534:2;4523:9;4519:18;4506:32;4496:42;;4557:37;4590:2;4579:9;4575:18;4557:37;:::i;4828:626::-;4925:6;4933;4986:2;4974:9;4965:7;4961:23;4957:32;4954:52;;;5002:1;4999;4992:12;4954:52;5042:9;5029:23;5071:18;5112:2;5104:6;5101:14;5098:34;;;5128:1;5125;5118:12;5098:34;5166:6;5155:9;5151:22;5141:32;;5211:7;5204:4;5200:2;5196:13;5192:27;5182:55;;5233:1;5230;5223:12;5182:55;5273:2;5260:16;5299:2;5291:6;5288:14;5285:34;;;5315:1;5312;5305:12;5285:34;5368:7;5363:2;5353:6;5350:1;5346:14;5342:2;5338:23;5334:32;5331:45;5328:65;;;5389:1;5386;5379:12;5328:65;5420:2;5412:11;;;;;5442:6;;-1:-1:-1;4828:626:3;;-1:-1:-1;;;;4828:626:3:o;5459:1201::-;5619:4;5648:2;5688;5677:9;5673:18;5718:2;5707:9;5700:21;5741:6;5776;5770:13;5807:6;5799;5792:22;5845:2;5834:9;5830:18;5823:25;;5907:2;5897:6;5894:1;5890:14;5879:9;5875:30;5871:39;5857:53;;5945:2;5937:6;5933:15;5966:1;5987;5997:634;6013:6;6008:3;6005:15;5997:634;;;6082:22;;;-1:-1:-1;;6078:36:3;6066:49;;6138:13;;6180:9;;6202:24;;;6250:1;6264:157;6280:8;6275:3;6272:17;6264:157;;;6388:12;;;6384:21;;6378:28;6355:16;;;6351:25;;6344:63;6299:12;;6264:157;;;-1:-1:-1;6445:21:3;;;6441:30;;6434:41;;;6541:2;6518:17;-1:-1:-1;;6514:31:3;6502:44;;;6498:53;;;-1:-1:-1;6609:12:3;;;;6574:15;;;;6039:1;6030:11;5997:634;;;-1:-1:-1;6648:6:3;;5459:1201;-1:-1:-1;;;;;;;;5459:1201:3:o;6665:260::-;6733:6;6741;6794:2;6782:9;6773:7;6769:23;6765:32;6762:52;;;6810:1;6807;6800:12;6762:52;6833:29;6852:9;6833:29;:::i;:::-;6823:39;;6881:38;6915:2;6904:9;6900:18;6881:38;:::i;:::-;6871:48;;6665:260;;;;;:::o;6930:401::-;7015:6;7023;7031;7039;7092:3;7080:9;7071:7;7067:23;7063:33;7060:53;;;7109:1;7106;7099:12;7060:53;7132:29;7151:9;7132:29;:::i;:::-;7122:39;;7208:2;7197:9;7193:18;7180:32;7170:42;;7231:38;7265:2;7254:9;7250:18;7231:38;:::i;:::-;7221:48;;7288:37;7321:2;7310:9;7306:18;7288:37;:::i;7518:328::-;7595:6;7603;7611;7664:2;7652:9;7643:7;7639:23;7635:32;7632:52;;;7680:1;7677;7670:12;7632:52;7703:29;7722:9;7703:29;:::i;:::-;7693:39;;7751:38;7785:2;7774:9;7770:18;7751:38;:::i;:::-;7741:48;;7836:2;7825:9;7821:18;7808:32;7798:42;;7518:328;;;;;:::o;7851:254::-;7919:6;7927;7980:2;7968:9;7959:7;7955:23;7951:32;7948:52;;;7996:1;7993;7986:12;7948:52;8032:9;8019:23;8009:33;;8061:38;8095:2;8084:9;8080:18;8061:38;:::i;8697:184::-;8767:6;8820:2;8808:9;8799:7;8795:23;8791:32;8788:52;;;8836:1;8833;8826:12;8788:52;-1:-1:-1;8859:16:3;;8697:184;-1:-1:-1;8697:184:3:o;9976:245::-;10055:6;10063;10116:2;10104:9;10095:7;10091:23;10087:32;10084:52;;;10132:1;10129;10122:12;10084:52;-1:-1:-1;;10155:16:3;;10211:2;10196:18;;;10190:25;10155:16;;10190:25;;-1:-1:-1;9976:245:3:o;10226:430::-;10332:6;10340;10348;10356;10364;10417:3;10405:9;10396:7;10392:23;10388:33;10385:53;;;10434:1;10431;10424:12;10385:53;-1:-1:-1;;10457:16:3;;10513:2;10498:18;;10492:25;10557:2;10542:18;;10536:25;10601:2;10586:18;;10580:25;10645:3;10630:19;;;10624:26;10457:16;;10492:25;;-1:-1:-1;10536:25:3;10580;-1:-1:-1;10624:26:3;;-1:-1:-1;10226:430:3;-1:-1:-1;10226:430:3:o;10661:127::-;10722:10;10717:3;10713:20;10710:1;10703:31;10753:4;10750:1;10743:15;10777:4;10774:1;10767:15;10793:168;10866:9;;;10897;;10914:15;;;10908:22;;10894:37;10884:71;;10935:18;;:::i;11321:354::-;11523:2;11505:21;;;11562:2;11542:18;;;11535:30;11601:32;11596:2;11581:18;;11574:60;11666:2;11651:18;;11321:354::o;11680:274::-;-1:-1:-1;;;;;11872:32:3;;;;11854:51;;11936:2;11921:18;;11914:34;11842:2;11827:18;;11680:274::o;11959:128::-;12026:9;;;12047:11;;;12044:37;;;12061:18;;:::i;12092:127::-;12153:10;12148:3;12144:20;12141:1;12134:31;12184:4;12181:1;12174:15;12208:4;12205:1;12198:15;12224:217;12264:1;12290;12280:132;;12334:10;12329:3;12325:20;12322:1;12315:31;12369:4;12366:1;12359:15;12397:4;12394:1;12387:15;12280:132;-1:-1:-1;12426:9:3;;12224:217::o;12446:348::-;12648:2;12630:21;;;12687:2;12667:18;;;12660:30;12726:26;12721:2;12706:18;;12699:54;12785:2;12770:18;;12446:348::o;13147:605::-;13439:25;;;-1:-1:-1;;;;;13538:15:3;;;13533:2;13518:18;;13511:43;13590:15;;;13585:2;13570:18;;13563:43;13642:15;;13637:2;13622:18;;13615:43;13689:3;13674:19;;13667:35;;;;13491:3;13718:19;;13711:35;13426:3;13411:19;;13147:605::o;13757:136::-;13796:3;13824:5;13814:39;;13833:18;;:::i;:::-;-1:-1:-1;;;13869:18:3;;13757:136::o;14892:125::-;14957:9;;;14978:10;;;14975:36;;;14991:18;;:::i;15022:135::-;15061:3;15082:17;;;15079:43;;15102:18;;:::i;:::-;-1:-1:-1;15149:1:3;15138:13;;15022:135::o;16884:136::-;16919:3;-1:-1:-1;;;16940:22:3;;16937:48;;16965:18;;:::i;:::-;-1:-1:-1;17005:1:3;17001:13;;16884:136::o;17635:127::-;17696:10;17691:3;17687:20;17684:1;17677:31;17727:4;17724:1;17717:15;17751:4;17748:1;17741:15;17767:127;17828:10;17823:3;17819:20;17816:1;17809:31;17859:4;17856:1;17849:15;17883:4;17880:1;17873:15;17899:521;17976:4;17982:6;18042:11;18029:25;18136:2;18132:7;18121:8;18105:14;18101:29;18097:43;18077:18;18073:68;18063:96;;18155:1;18152;18145:12;18063:96;18182:33;;18234:20;;;-1:-1:-1;18277:18:3;18266:30;;18263:50;;;18309:1;18306;18299:12;18263:50;18342:4;18330:17;;-1:-1:-1;18373:14:3;18369:27;;;18359:38;;18356:58;;;18410:1;18407;18400:12;18356:58;17899:521;;;;;:::o;18425:271::-;18608:6;18600;18595:3;18582:33;18564:3;18634:16;;18659:13;;;18634:16;18425:271;-1:-1:-1;18425:271:3:o
Swarm Source
ipfs://f6faae402162a76ea9ec3da4620c6175e90af57556afc3a45d6883032be9fd8e
Loading...
Loading
Loading...
Loading
Net Worth in USD
$578,600,140.74
Net Worth in ETH
292,907.112113
Token Allocations
SKY
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.065269 | 8,864,853,770.3534 | $578,600,140.74 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.