Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
20,024,856.096656571324471219 CHOP
Holders
304 (0.00%)
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
Porkchop
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.5.10;
import "./Ownable.sol";
import "./DistributedStorage.sol";
import "./SafeMath.sol";
import "./Math.sol";
import "./GasPump.sol";
import "./IERC20.sol";
import "./Pigpen.sol";
contract Porkchop is Ownable, GasPump, IERC20 {
using DistributedStorage for bytes32;
using SafeMath for uint256;
// Pork events
event Winner(address indexed _addr, uint256 _value);
// Managment events
event SetName(string _prev, string _new);
event SetExtraGas(uint256 _prev, uint256 _new);
event SetPigpen(address _prev, address _new);
event WhitelistFrom(address _addr, bool _whitelisted);
event WhitelistTo(address _addr, bool _whitelisted);
uint256 public totalSupply;
bytes32 private constant BALANCE_KEY = keccak256("balance");
// game
uint256 public constant FEE = 100;
// metadata
string public name = "Porkchop";
string public constant symbol = "CHOP";
uint8 public constant decimals = 18;
// fee whitelist
mapping(address => bool) public whitelistFrom;
mapping(address => bool) public whitelistTo;
// pigpen
Pigpen public pigpen;
// internal
uint256 public extraGas;
bool inited;
function init(
address _to,
uint256 _amount
) external {
// Only init once
assert(!inited);
inited = true;
// Sanity checks
assert(totalSupply == 0);
assert(address(pigpen) == address(0));
// Create Pigpen
pigpen = new Pigpen();
emit SetPigpen(address(0), address(pigpen));
// Init contract variables and mint
// entire token balance
extraGas = 15;
emit SetExtraGas(0, extraGas);
emit Transfer(address(0), _to, _amount);
_setBalance(_to, _amount);
totalSupply = _amount;
}
///
// Storage access functions
///
// Getters
function _toKey(address a) internal pure returns (bytes32) {
return bytes32(uint256(a));
}
function _balanceOf(address _addr) internal view returns (uint256) {
return uint256(_toKey(_addr).read(BALANCE_KEY));
}
function _allowance(address _addr, address _spender) internal view returns (uint256) {
return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("allowance", _spender))));
}
function _nonce(address _addr, uint256 _cat) internal view returns (uint256) {
return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("nonce", _cat))));
}
// Setters
function _setAllowance(address _addr, address _spender, uint256 _value) internal {
_toKey(_addr).write(keccak256(abi.encodePacked("allowance", _spender)), bytes32(_value));
}
function _setNonce(address _addr, uint256 _cat, uint256 _value) internal {
_toKey(_addr).write(keccak256(abi.encodePacked("nonce", _cat)), bytes32(_value));
}
function _setBalance(address _addr, uint256 _balance) internal {
_toKey(_addr).write(BALANCE_KEY, bytes32(_balance));
pigpen.update(_addr, _balance);
}
///
// Internal methods
///
function _isWhitelisted(address _from, address _to) internal view returns (bool) {
return whitelistFrom[_from]||whitelistTo[_to];
}
function _random(address _s1, uint256 _s2, uint256 _s3, uint256 _max) internal pure returns (uint256) {
uint256 rand = uint256(keccak256(abi.encodePacked(_s1, _s2, _s3)));
return rand % (_max + 1);
}
function _pickWinner(address _from, uint256 _value) internal returns (address winner) {
// Get order of magnitude of the tx
uint256 magnitude = Math.orderOfMagnitude(_value);
// Pull nonce for a given order of magnitude
uint256 nonce = _nonce(_from, magnitude);
_setNonce(_from, magnitude, nonce + 1);
// pick entry from pigpen
winner = pigpen.addressAt(_random(_from, nonce, magnitude, pigpen.size() - 1));
}
function _transferFrom(address _operator, address _from, address _to, uint256 _value, bool _payFee) internal {
// If transfer amount is zero
// emit event and stop execution
if (_value == 0) {
emit Transfer(_from, _to, 0);
return;
}
// Load sender balance
uint256 balanceFrom = _balanceOf(_from);
require(balanceFrom >= _value, "balance not enough");
// Check if operator is sender
if (_from != _operator) {
// If not, validate allowance
uint256 allowanceFrom = _allowance(_from, _operator);
// If allowance is not 2 ** 256 - 1, consume allowance
if (allowanceFrom != uint(-1)) {
// Check allowance and save new one
require(allowanceFrom >= _value, "allowance not enough");
_setAllowance(_from, _operator, allowanceFrom.sub(_value));
}
}
// Calculate receiver balance
// initial receive is full value
uint256 receive = _value;
uint256 burn = 0;
uint256 chop = 0;
// Change sender balance
_setBalance(_from, balanceFrom.sub(_value));
// If the transaction is not whitelisted
// or if sender requested to pay the fee
// calculate fees
if (_payFee || !_isWhitelisted(_from, _to)) {
// Fee is the same for BURN and CHOP
// If we are sending value one
// give priority to BURN
burn = _value.divRound(FEE);
chop = _value == 1 ? 0 : burn;
// Subtract fees from receiver amount
receive = receive.sub(burn.add(chop));
// Burn tokens
totalSupply = totalSupply.sub(burn);
emit Transfer(_from, address(0), burn);
// Porkchop tokens
// Pick winner pseudo-randomly
address winner = _pickWinner(_from, _value);
// Transfer balance to winner
_setBalance(winner, _balanceOf(winner).add(chop));
emit Winner(winner, chop);
emit Transfer(_from, winner, chop);
}
// Sanity checks
// no tokens where created
assert(burn.add(chop).add(receive) == _value);
// Add tokens to receiver
_setBalance(_to, _balanceOf(_to).add(receive));
emit Transfer(_from, _to, receive);
}
/*
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmy/-```:hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMmysydMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmy-`-:::::/ dMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMo`.::.-odMMMMMMMMMMMMMmmmmmmmmNMMMNo`.:/--::..o /MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMN:`::.-::-.:ymMMNdys+:.............+.`::.-/+/o..+ /MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMs ::.+/:.-::..+:----:::::::::::::::::/-.:+:::o..o /MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMM-`+.-o:/+-.-/::::--.....-----------.....////:+../.-MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMM `+.:+::++...-.-:://+ooooossoooosooooo+///:/+:..:: MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMM- +.-o//:--:/+ooossssoooooooooooooooooosssooo+/:/- mMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMs ::.:::+oosssoooooossssssssssssssssssooooooosssso..hMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMs .o/+ossooooosssoo++//:::------:::://+ooosssooooss-`hMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMo`-ssssooossoo+/:--....................-:---:/+oossos:`yMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMh`-ssooosso+:-......................-::/:-......--:+oss-`mMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMd.-soosoo/-..........................----:::-.........-/o..hMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMN-`ssso/-:::----......-:://////:-......./yhdhyo-.........-+-./ymMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMo +o/-....---::-....-///:::::/:://-....-hddddddy-.........:ys+:-/sdNMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMm -+-....:+so+-.....-o:+s:::::yy::/+....-hddddddy-..........ssssso/-:+symMMMMMMMMMMMM
MMMMMMMMMMMMMMMo +-....ohddddh/....+/:ys:::::/o/::o.....:oyhhyo:.........../ysssssyso+.`yMMMMMMMMMMM
MMMMMMMNMMMMMMM/`+....:dddddddy....:+:::::::::::/+-........--..............-yssssssssy.`NMMMMMMMMMMM
MMMMMMMMMMMMMMM../....-ydddddh/.....-////:::////-...........................ssssssssso +MMMMMMMMMMMM
MMMMMMMMMMMMMMM`-/.....-/ooo/-.........--:::-..............................-+`:sssssy- NMMMMMMMMMMMM
MMMMMMMMMMMMMMM/./........................................................./y- `/ssss +MMMMMMMMMMMMM
MMMMMMMMMMMMMMM/`+........................................................-ysy: `/s: mMMMMMMMMMMMMM
MMMMMMMMMMMMMMMh /:......................................................:ssssy+``.``/MMMMMMMMMMMMMM
MMMMMMMMMMMMMMMM:`+-...................................................-oysssssyo..yMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMN-`/-................................................://yssssssssy: /mMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMN+ :/-...........................................:::.` +yssssssssy+`.dMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMN: `/+:....................................-:::-``/sM.`ssssssssssss- sMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMo`/::::////:--....................--::::-:o:.----`-+md.-ysssssyso+:`.yMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMh /:......:/`.-::::::+::/:::+::::/:/+/.`.:-` `-:.`sy /yso+:..:/shNMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMN:`/-.....:- ./-``::` -/-.-::-` .:-` `....` -:`:s/:-:+sdNMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMm+`-::--:/ `::` ./` `/+-` .--. `:::---+. ./ oMNNMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMmo-`.-/---...:yho:. `:- -::-.` /-.....-/ :..dMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMNmhho:``-/-`./shhy+:.` .:. `::` /-......+ /`.dMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMdo..-:::` .:+yhhys+///` `:-` `::--..:/`.-:.`yMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMmy-..--` `-:. `.-/oyhhdhysooy+::::/+osshyo..:odMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMNh+..--` `.:-` `/ohdhdo+yysyyyhhyyyyyyys`:NMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMm:.-/+. `--..` `+hs:sdy.`-:-``-/:-`````:.`MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMy +-.-/- `.--..-` /++- .--.``--.` -- MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMh ::.../- `--``.---...`` `.--.`.-:-:: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMN/`/:..-+ ````..---:---.```....-------:/:---::: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMm-`--::/------...---:/oyo+:--.----. `/ MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMNho++//////+osyyddNMMMMMMMmhyo+:`:- .: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMo -: :- MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh /: /`:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN`-//-` :- yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd -:.-/-`` .:.`yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:`-/-.-:::/::.`/mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy-`.:::::-`-sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs+/-/ohNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
*/
///
// Managment
///
function setWhitelistedTo(address _addr, bool _whitelisted) external onlyOwner {
emit WhitelistTo(_addr, _whitelisted);
whitelistTo[_addr] = _whitelisted;
}
function setWhitelistedFrom(address _addr, bool _whitelisted) external onlyOwner {
emit WhitelistFrom(_addr, _whitelisted);
whitelistFrom[_addr] = _whitelisted;
}
function setName(string calldata _name) external onlyOwner {
emit SetName(name, _name);
name = _name;
}
function setExtraGas(uint256 _gas) external onlyOwner {
emit SetExtraGas(extraGas, _gas);
extraGas = _gas;
}
function setPigpen(Pigpen _pigpen) external onlyOwner {
emit SetPigpen(address(pigpen), address(_pigpen));
pigpen = _pigpen;
}
/////
// Pigpen methods
/////
function topSize() external view returns (uint256) {
return pigpen.topSize();
}
function pigpenSize() external view returns (uint256) {
return pigpen.size();
}
function pigpenEntry(uint256 _i) external view returns (address, uint256) {
return pigpen.entry(_i);
}
function pigpenTop() external view returns (address, uint256) {
return pigpen.top();
}
function pigpenIndex(address _addr) external view returns (uint256) {
return pigpen.indexOf(_addr);
}
function getNonce(address _addr, uint256 _cat) external view returns (uint256) {
return _nonce(_addr, _cat);
}
/////
// ERC20
/////
function balanceOf(address _addr) external view returns (uint256) {
return _balanceOf(_addr);
}
function allowance(address _addr, address _spender) external view returns (uint256) {
return _allowance(_addr, _spender);
}
function approve(address _spender, uint256 _value) external returns (bool) {
emit Approval(msg.sender, _spender, _value);
_setAllowance(msg.sender, _spender, _value);
return true;
}
function transfer(address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
_transferFrom(msg.sender, msg.sender, _to, _value, false);
return true;
}
function transferWithFee(address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
_transferFrom(msg.sender, msg.sender, _to, _value, true);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
_transferFrom(msg.sender, _from, _to, _value, false);
return true;
}
function transferFromWithFee(address _from, address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
_transferFrom(msg.sender, _from, _to, _value, true);
return true;
}
}
pragma solidity ^0.5.10;
import "./StorageUnit.sol";
import "./IsContract.sol";
library DistributedStorage {
function contractSlot(bytes32 _struct) private view returns (address) {
return address(
uint256(
keccak256(
abi.encodePacked(
byte(0xff),
address(this),
_struct,
keccak256(type(StorageUnit).creationCode)
)
)
)
);
}
function deploy(bytes32 _struct) private {
bytes memory slotcode = type(StorageUnit).creationCode;
/* solium-disable-next-line */
assembly{ pop(create2(0, add(slotcode, 0x20), mload(slotcode), _struct)) }
}
function write(
bytes32 _struct,
bytes32 _key,
bytes32 _value
) internal {
StorageUnit store = StorageUnit(contractSlot(_struct));
if (!IsContract.isContract(address(store))) {
deploy(_struct);
}
/* solium-disable-next-line */
(bool success, ) = address(store).call(
abi.encodeWithSelector(
store.write.selector,
_key,
_value
)
);
require(success, "error writing storage");
}
function read(
bytes32 _struct,
bytes32 _key
) internal view returns (bytes32) {
StorageUnit store = StorageUnit(contractSlot(_struct));
if (!IsContract.isContract(address(store))) {
return bytes32(0);
}
/* solium-disable-next-line */
(bool success, bytes memory data) = address(store).staticcall(
abi.encodeWithSelector(
store.read.selector,
_key
)
);
require(success, "error reading storage");
return abi.decode(data, (bytes32));
}
}
pragma solidity ^0.5.10;
/*
*/
library Farm {
using Farm for Farm.Pigpen;
struct Pigpen {
uint256[] entries;
mapping(address => uint256) index;
}
function initialize(Pigpen storage _pigpen) internal {
require(_pigpen.entries.length == 0, "already initialized");
_pigpen.entries.push(0);
}
function encode(address _addr, uint256 _value) internal pure returns (uint256 _entry) {
/* solium-disable-next-line */
assembly {
_entry := not(or(and(0xffffffffffffffffffffffffffffffffffffffff, _addr), shl(160, _value)))
}
}
function decode(uint256 _entry) internal pure returns (address _addr, uint256 _value) {
/* solium-disable-next-line */
assembly {
let entry := not(_entry)
_addr := and(entry, 0xffffffffffffffffffffffffffffffffffffffff)
_value := shr(160, entry)
}
}
function decodeAddress(uint256 _entry) internal pure returns (address _addr) {
/* solium-disable-next-line */
assembly {
_addr := and(not(_entry), 0xffffffffffffffffffffffffffffffffffffffff)
}
}
function top(Pigpen storage _pigpen) internal view returns(address, uint256) {
if (_pigpen.entries.length < 2) {
return (address(0), 0);
}
return decode(_pigpen.entries[1]);
}
function has(Pigpen storage _pigpen, address _addr) internal view returns (bool) {
return _pigpen.index[_addr] != 0;
}
function size(Pigpen storage _pigpen) internal view returns (uint256) {
return _pigpen.entries.length - 1;
}
function entry(Pigpen storage _pigpen, uint256 _i) internal view returns (address, uint256) {
return decode(_pigpen.entries[_i + 1]);
}
// RemoveMax pops off the root element of the pigpen (the highest value here) and rebalances the pigpen
function popTop(Pigpen storage _pigpen) internal returns(address _addr, uint256 _value) {
// Ensure the pigpen exists
uint256 pigpenLength = _pigpen.entries.length;
require(pigpenLength > 1, "The pigpen does not exists");
// take the root value of the pigpen
(_addr, _value) = decode(_pigpen.entries[1]);
_pigpen.index[_addr] = 0;
if (pigpenLength == 2) {
_pigpen.entries.length = 1;
} else {
// Takes the last element of the array and put it at the root
uint256 val = _pigpen.entries[pigpenLength - 1];
_pigpen.entries[1] = val;
// Delete the last element from the array
_pigpen.entries.length = pigpenLength - 1;
// Start at the top
uint256 ind = 1;
// Bubble down
ind = _pigpen.bubbleDown(ind, val);
// Update index
_pigpen.index[decodeAddress(val)] = ind;
}
}
// Inserts adds in a value to our pigpen.
function insert(Pigpen storage _pigpen, address _addr, uint256 _value) internal {
require(_pigpen.index[_addr] == 0, "The entry already exists");
// Add the value to the end of our array
uint256 encoded = encode(_addr, _value);
_pigpen.entries.push(encoded);
// Start at the end of the array
uint256 currentIndex = _pigpen.entries.length - 1;
// Bubble Up
currentIndex = _pigpen.bubbleUp(currentIndex, encoded);
// Update index
_pigpen.index[_addr] = currentIndex;
}
function update(Pigpen storage _pigpen, address _addr, uint256 _value) internal {
uint256 ind = _pigpen.index[_addr];
require(ind != 0, "The entry does not exists");
uint256 can = encode(_addr, _value);
uint256 val = _pigpen.entries[ind];
uint256 newInd;
if (can < val) {
// Bubble down
newInd = _pigpen.bubbleDown(ind, can);
} else if (can > val) {
// Bubble up
newInd = _pigpen.bubbleUp(ind, can);
} else {
// no changes needed
return;
}
// Update entry
_pigpen.entries[newInd] = can;
// Update index
if (newInd != ind) {
_pigpen.index[_addr] = newInd;
}
}
function bubbleUp(Pigpen storage _pigpen, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
// Bubble up
ind = _ind;
if (ind != 1) {
uint256 pen = _pigpen.entries[ind / 2];
while (pen < _val) {
// If the pen value is lower than our current value, we swap them
(_pigpen.entries[ind / 2], _pigpen.entries[ind]) = (_val, pen);
// Update moved Index
_pigpen.index[decodeAddress(pen)] = ind;
// change our current Index to go up to the pen
ind = ind / 2;
if (ind == 1) {
break;
}
// Update pen
pen = _pigpen.entries[ind / 2];
}
}
}
function bubbleDown(Pigpen storage _pigpen, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
// Bubble down
ind = _ind;
uint256 lenght = _pigpen.entries.length;
uint256 target = lenght - 1;
while (ind * 2 < lenght) {
// get the current index of the pigs
uint256 j = ind * 2;
// left pig value
uint256 leftPig = _pigpen.entries[j];
// Store the value of the pigs
uint256 pigValue;
if (target > j) {
// The pen has two pigs
// Load right pig value
uint256 rightPig = _pigpen.entries[j + 1];
// Compare the left and right pigs
// if the rightPig is greater, then point j to it's index
// and save the value
if (leftPig < rightPig) {
pigValue = rightPig;
j = j + 1;
} else {
// The left pig is greater
pigValue = leftPig;
}
} else {
// The pen has a single pig
pigValue = leftPig;
}
// Check if the pig has a lower value
if (_val > pigValue) {
break;
}
// else swap the value
(_pigpen.entries[ind], _pigpen.entries[j]) = (pigValue, _val);
// Update moved Index
_pigpen.index[decodeAddress(pigValue)] = ind;
// and let's keep going down the pigpen
ind = j;
}
}
}
pragma solidity ^0.5.10;
contract GasPump {
bytes32 private stub;
modifier requestGas(uint256 _factor) {
if (tx.gasprice == 0 || gasleft() > block.gaslimit) {
uint256 startgas = gasleft();
_;
uint256 delta = startgas - gasleft();
uint256 target = (delta * _factor) / 100;
startgas = gasleft();
while (startgas - gasleft() < target) {
// Burn gas
stub = keccak256(abi.encodePacked(stub));
}
} else {
_;
}
}
}pragma solidity ^0.5.10;
interface IERC20 {
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
function transfer(address _to, uint _value) external returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
function allowance(address _owner, address _spender) external view returns (uint256 remaining);
function approve(address _spender, uint256 _value) external returns (bool success);
function balanceOf(address _owner) external view returns (uint256 balance);
}
pragma solidity ^0.5.10;
library IsContract {
function isContract(address _addr) internal view returns (bool) {
bytes32 codehash;
/* solium-disable-next-line */
assembly { codehash := extcodehash(_addr) }
return codehash != bytes32(0) && codehash != bytes32(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470);
}
}
pragma solidity ^0.5.10;
library Math {
function orderOfMagnitude(uint256 input) internal pure returns (uint256){
uint256 counter = uint(-1);
uint256 temp = input;
do {
temp /= 10;
counter++;
} while (temp != 0);
return counter;
}
function min(uint256 _a, uint256 _b) internal pure returns (uint256) {
if (_a < _b) {
return _a;
} else {
return _b;
}
}
function max(uint256 _a, uint256 _b) internal pure returns (uint256) {
if (_a > _b) {
return _a;
} else {
return _b;
}
}
}
pragma solidity ^0.5.10;
contract Ownable {
address public owner;
event TransferOwnership(address _from, address _to);
constructor() public {
owner = msg.sender;
emit TransferOwnership(address(0), msg.sender);
}
modifier onlyOwner() {
require(msg.sender == owner, "only owner");
_;
}
function setOwner(address _owner) external onlyOwner {
emit TransferOwnership(owner, _owner);
owner = _owner;
}
}
pragma solidity ^0.5.10;
import "./Ownable.sol";
import "./Farm.sol";
contract Pigpen is Ownable {
using Farm for Farm.Pigpen;
// pigpen
Farm.Pigpen private pigpen;
// Pigpen events
event JoinPigpen(address indexed _address, uint256 _balance, uint256 _prevSize);
event LeavePigpen(address indexed _address, uint256 _balance, uint256 _prevSize);
uint256 public constant TOP_SIZE = 100;
constructor() public {
pigpen.initialize();
}
function topSize() external pure returns (uint256) {
return TOP_SIZE;
}
function addressAt(uint256 _i) external view returns (address addr) {
(addr, ) = pigpen.entry(_i);
}
function indexOf(address _addr) external view returns (uint256) {
return pigpen.index[_addr];
}
function entry(uint256 _i) external view returns (address, uint256) {
return pigpen.entry(_i);
}
function top() external view returns (address, uint256) {
return pigpen.top();
}
function size() external view returns (uint256) {
return pigpen.size();
}
function update(address _addr, uint256 _new) external onlyOwner {
uint256 _size = pigpen.size();
// If the pigpen is empty
// join the _addr
if (_size == 0) {
emit JoinPigpen(_addr, _new, 0);
pigpen.insert(_addr, _new);
return;
}
// Load top value of the pigpen
(, uint256 lastBal) = pigpen.top();
// If our target address already is in the pigpen
if (pigpen.has(_addr)) {
// Update the target address value
pigpen.update(_addr, _new);
// If the new value is 0
// always pop the pigpen
// we updated the pigpen, so our address should be on top
if (_new == 0) {
pigpen.popTop();
emit LeavePigpen(_addr, 0, _size);
}
} else {
// IF pigpen is full or new balance is higher than pop pigpen
if (_new != 0 && (_size < TOP_SIZE || lastBal < _new)) {
// If pigpen is full pop pigpen
if (_size >= TOP_SIZE) {
(address _poped, uint256 _balance) = pigpen.popTop();
emit LeavePigpen(_poped, _balance, _size);
}
// Insert new value
pigpen.insert(_addr, _new);
emit JoinPigpen(_addr, _new, _size);
}
}
}
}
pragma solidity ^0.5.10;
library SafeMath {
function add(uint256 x, uint256 y) internal pure returns (uint256) {
uint256 z = x + y;
require(z >= x, "Add overflow");
return z;
}
function sub(uint256 x, uint256 y) internal pure returns (uint256) {
require(x >= y, "Sub underflow");
return x - y;
}
function mult(uint256 x, uint256 y) internal pure returns (uint256) {
if (x == 0) {
return 0;
}
uint256 z = x * y;
require(z / x == y, "Mult overflow");
return z;
}
function div(uint256 x, uint256 y) internal pure returns (uint256) {
require(y != 0, "Div by zero");
return x / y;
}
function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
require(y != 0, "Div by zero");
uint256 r = x / y;
if (x % y != 0) {
r = r + 1;
}
return r;
}
}
pragma solidity ^0.5.10;
contract StorageUnit {
address private owner;
mapping(bytes32 => bytes32) private store;
constructor() public {
owner = msg.sender;
}
function write(bytes32 _key, bytes32 _value) external {
/* solium-disable-next-line */
require(msg.sender == owner);
store[_key] = _value;
}
function read(bytes32 _key) external view returns (bytes32) {
return store[_key];
}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_prev","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetExtraGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_prev","type":"string"},{"indexed":false,"internalType":"string","name":"_new","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_prev","type":"address"},{"indexed":false,"internalType":"address","name":"_new","type":"address"}],"name":"SetPigpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Winner","type":"event"},{"constant":true,"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"extraGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_cat","type":"uint256"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pigpen","outputs":[{"internalType":"contract Pigpen","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_i","type":"uint256"}],"name":"pigpenEntry","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"pigpenIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pigpenSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pigpenTop","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"setExtraGas","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract Pigpen","name":"_pigpen","type":"address"}],"name":"setPigpen","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"topSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFromWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526040518060400160405280600881526020017f506f726b63686f70000000000000000000000000000000000000000000000000815250600390805190602001906200005192919062000130565b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600033604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1620001df565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017357805160ff1916838001178555620001a4565b82800160010185558215620001a4579182015b82811115620001a357825182559160200191906001019062000186565b5b509050620001b39190620001b7565b5090565b620001dc91905b80821115620001d8576000816000905550600101620001be565b5090565b90565b614bb880620001ef6000396000f3fe60806040523480156200001157600080fd5b5060043610620002085760003560e01c80636d268e0a116200011d57806395d89b4111620000b1578063c47f0027116200007b578063c47f00271462000aaf578063c57981b51462000b2e578063dd62ed3e1462000b4e578063ff12bbf41462000bc95762000208565b806395d89b41146200094b578063a486309d14620009d3578063a5956a8b1462000a26578063a9059cbb1462000a465762000208565b80638953580311620000f35780638953580314620007e057806389f3546814620008455780638cec999314620008ce5780638da5cb5b14620008ff5762000208565b80636d268e0a146200071257806370a0823114620007655780637c32cdd114620007c05762000208565b806323b872dd11620001a157806343684b21116200016b57806343684b2114620005c557806352d85ab0146200062457806368e7c21a14620006705780636a5935b614620006b75762000208565b806323b872dd14620004a5578063313ce567146200052e5780633767e3391462000554578063399ae72414620005745762000208565b8063095ea7b311620001e3578063095ea7b3146200037657806313af403514620003df57806316b627d1146200042657806318160ddd14620004855762000208565b806306fdde03146200020d578063089cab71146200029557806308acece2146200030d575b600080fd5b6200021762000c1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620002595780820151818401526020810190506200023c565b50505050905090810190601f168015620002875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002c460048036036020811015620002ad57600080fd5b810190808035906020019092919050505062000cbe565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6200035c600480360360408110156200032557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000d84565b604051808215151515815260200191505060405180910390f35b620003c5600480360360408110156200038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000e39565b604051808215151515815260200191505060405180910390f35b6200042460048036036020811015620003f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000eb7565b005b6200046b600480360360208110156200043e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001075565b604051808215151515815260200191505060405180910390f35b6200048f62001095565b6040518082815260200191505060405180910390f35b6200051460048036036060811015620004bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200109b565b604051808215151515815260200191505060405180910390f35b6200053862001151565b604051808260ff1660ff16815260200191505060405180910390f35b6200055e62001156565b6040518082815260200191505060405180910390f35b620005c3600480360360408110156200058c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200115c565b005b6200060a60048036036020811015620005dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620013e2565b604051808215151515815260200191505060405180910390f35b6200062e62001402565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620006b5600480360360208110156200068857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001428565b005b620006fc60048036036020811015620006cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620015e8565b6040518082815260200191505060405180910390f35b6200071c620016ce565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b620007aa600480360360208110156200077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001788565b6040518082815260200191505060405180910390f35b620007ca6200179c565b6040518082815260200191505060405180910390f35b6200082f60048036036040811015620007f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001849565b6040518082815260200191505060405180910390f35b620008b4600480360360608110156200085d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200185f565b604051808215151515815260200191505060405180910390f35b620008fd60048036036020811015620008e657600080fd5b810190808035906020019092919050505062001915565b005b6200090962001a23565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200095562001a48565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620009975780820151818401526020810190506200097a565b50505050905090810190601f168015620009c55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b62000a2460048036036040811015620009eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505062001a81565b005b62000a3062001c0e565b6040518082815260200191505060405180910390f35b62000a956004803603604081101562000a5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001cbb565b604051808215151515815260200191505060405180910390f35b62000b2c6004803603602081101562000ac757600080fd5b810190808035906020019064010000000081111562000ae557600080fd5b82018360208201111562000af857600080fd5b8035906020019184600183028401116401000000008311171562000b1b57600080fd5b909192939192939050505062001d70565b005b62000b3862001f3d565b6040518082815260200191505060405180910390f35b62000bb36004803603604081101562000b6657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001f42565b6040518082815260200191505060405180910390f35b62000c1a6004803603604081101562000be157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505062001f58565b005b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562000cb65780601f1062000c8a5761010080835404028352916020019162000cb6565b820191906000526020600020905b81548152906001019060200180831162000c9857829003601f168201915b505050505081565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2095c07846040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b15801562000d3457600080fd5b505afa15801562000d49573d6000803e3d6000fd5b505050506040513d604081101562000d6057600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b600060075460003a148062000d985750455a115b1562000e1d5760005a905062000db3333387876001620020e5565b6001925060005a82039050600060648483028162000dcd57fe5b0490505a92505b805a8403101562000e1457600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062000dd4565b50505062000e32565b62000e2d333386866001620020e5565b600191505b5092915050565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a362000ead338484620025ca565b6001905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60025481565b600060075460003a1480620010af5750455a115b15620011345760005a9050620010ca338787876000620020e5565b6001925060005a820390506000606484830281620010e457fe5b0490505a92505b805a840310156200112b576001546040516020018082815260200191505060405160208183030381529060405280519060200120600181905550620010eb565b50505062001149565b62001144338686866000620020e5565b600191505b509392505050565b601281565b60075481565b600860009054906101000a900460ff16156200117457fe5b6001600860006101000a81548160ff0219169083151502179055506000600254146200119c57fe5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620011f557fe5b604051620012039062003413565b604051809103906000f08015801562001220573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f032c92aff758f5f3d194f42a11d5128753b8a3c1b02ec011f21efe10f7c167c16000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600f6007819055507fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c96000600754604051808381526020018281526020019250505060405180910390a18173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3620013d7828262002670565b806002819055505050565b60046020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620014eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f032c92aff758f5f3d194f42a11d5128753b8a3c1b02ec011f21efe10f7c167c1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a180600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd6aad25836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156200168a57600080fd5b505afa1580156200169f573d6000803e3d6000fd5b505050506040513d6020811015620016b657600080fd5b81019080805190602001909291905050509050919050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe6dcdba6040518163ffffffff1660e01b8152600401604080518083038186803b1580156200173957600080fd5b505afa1580156200174e573d6000803e3d6000fd5b505050506040513d60408110156200176557600080fd5b810190808051906020019092919080519060200190929190505050915091509091565b6000620017958262002790565b9050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c32cdd16040518163ffffffff1660e01b815260040160206040518083038186803b1580156200180757600080fd5b505afa1580156200181c573d6000803e3d6000fd5b505050506040513d60208110156200183357600080fd5b8101908080519060200190929190505050905090565b6000620018578383620027f0565b905092915050565b600060075460003a1480620018735750455a115b15620018f85760005a90506200188e338787876001620020e5565b6001925060005a820390506000606484830281620018a857fe5b0490505a92505b805a84031015620018ef576001546040516020018082815260200191505060405160208183030381529060405280519060200120600181905550620018af565b5050506200190d565b62001908338686866001620020e5565b600191505b509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620019d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c960075482604051808381526020018281526020019250505060405180910390a18060078190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f43484f500000000000000000000000000000000000000000000000000000000081525081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f113828282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001c7957600080fd5b505afa15801562001c8e573d6000803e3d6000fd5b505050506040513d602081101562001ca557600080fd5b8101908080519060200190929190505050905090565b600060075460003a148062001ccf5750455a115b1562001d545760005a905062001cea333387876000620020e5565b6001925060005a82039050600060648483028162001d0457fe5b0490505a92505b805a8403101562001d4b57600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062001d0b565b50505062001d69565b62001d64333386866000620020e5565b600191505b5092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb16003838360405180806020018060200183810383528681815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801562001ee95780601f1062001ebd5761010080835404028352916020019162001ee9565b820191906000526020600020905b81548152906001019060200180831162001ecb57829003601f168201915b50508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a181816003919062001f3892919062003421565b505050565b606481565b600062001f5083836200286a565b905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008214156200215b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040518082815260200191505060405180910390a3620025c3565b6000620021688562002790565b905082811015620021e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f62616c616e6365206e6f7420656e6f756768000000000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614620022e85760006200222386886200286a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620022e65783811015620022c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616c6c6f77616e6365206e6f7420656e6f75676800000000000000000000000081525060200191505060405180910390fd5b620022e58688620022df87856200291390919063ffffffff16565b620025ca565b5b505b60008390506000809050600080905062002317886200231188876200291390919063ffffffff16565b62002670565b84806200232d57506200232b888862002997565b155b15620024fd576200234960648762002a4390919063ffffffff16565b9150600186146200235b57816200235e565b60005b90506200238962002379828462002aef90919063ffffffff16565b846200291390919063ffffffff16565b9250620023a2826002546200291390919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360006200241c898862002b78565b905062002448816200244284620024338562002790565b62002aef90919063ffffffff16565b62002670565b8073ffffffffffffffffffffffffffffffffffffffff167f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20836040518082815260200191505060405180910390a28073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505b85620025278462002518848662002aef90919063ffffffff16565b62002aef90919063ffffffff16565b146200252f57fe5b62002559876200255385620025448b62002790565b62002aef90919063ffffffff16565b62002670565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505b5050505050565b6200266b8260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001208260001b6200265b8662002d18565b62002d3b9092919063ffffffff16565b505050565b620026c960405180807f62616c616e636500000000000000000000000000000000000000000000000000815250600701905060405180910390208260001b620026b98562002d18565b62002d3b9092919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2d83b5e83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156200277357600080fd5b505af115801562002788573d6000803e3d6000fd5b505050505050565b6000620027e660405180807f62616c616e63650000000000000000000000000000000000000000000000000081525060070190506040518091039020620027d78462002d18565b62002f3390919063ffffffff16565b60001c9050919050565b60006200285f8260405160200180807f6e6f6e636500000000000000000000000000000000000000000000000000000081525060050182815260200191505060405160208183030381529060405280519060200120620028508562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000620029088260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120620028f98562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000818310156200298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f53756220756e646572666c6f770000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062002a3b5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b60008082141562002abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f446976206279207a65726f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082848162002ac857fe5b049050600083858162002ad757fe5b061462002ae5576001810190505b8091505092915050565b60008082840190508381101562002b6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f416464206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b60008062002b868362003152565b9050600062002b968583620027f0565b905062002ba8858360018401620031a8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630af2b3e562002c9c8784866001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562002c5857600080fd5b505afa15801562002c6d573d6000803e3d6000fd5b505050506040513d602081101562002c8457600080fd5b8101908080519060200190929190505050036200321f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562002cd157600080fd5b505afa15801562002ce6573d6000803e3d6000fd5b505050506040513d602081101562002cfd57600080fd5b81019080805190602001909291905050509250505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff1660001b9050919050565b600062002d4884620032a6565b905062002d558162003394565b62002d665762002d6584620033da565b5b60008173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663e2e52ec1905060e01b85856040516024018083815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831062002e4b578051825260208201915060208101905060208303925062002e26565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002eaf576040519150601f19603f3d011682016040523d82523d6000602084013e62002eb4565b606091505b505090508062002f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722077726974696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b5050505050565b60008062002f4184620032a6565b905062002f4e8162003394565b62002f60576000801b9150506200314c565b600060608273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166361da1439905060e01b8660405160240180828152602001915050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106200303f57805182526020820191506020810190506020830392506200301a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114620030a1576040519150601f19603f3d011682016040523d82523d6000602084013e620030a6565b606091505b5091509150816200311f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722072656164696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b8080602001905160208110156200313557600080fd5b810190808051906020019092919050505093505050505b92915050565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060008390505b600a81816200318957fe5b049050818060010192505060008114156200317e578192505050919050565b6200321a8260405160200180807f6e6f6e6365000000000000000000000000000000000000000000000000000000815250600501828152602001915050604051602081830303815290604052805190602001208260001b6200320a8662002d18565b62002d3b9092919063ffffffff16565b505050565b600080858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012060001c90506001830181816200329a57fe5b06915050949350505050565b600060ff60f81b308360405180602001620032c190620034a8565b6020820181038252601f19601f820116604052508051906020012060405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050919050565b600080823f90506000801b8114158015620033d257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b8114155b915050919050565b606060405180602001620033ee90620034a8565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6114c980620034df83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200346457803560ff191683800117855562003495565b8280016001018555821562003495579182015b828111156200349457823582559160200191906001019062003477565b5b509050620034a49190620034b6565b5090565b6101dc80620049a883390190565b620034db91905b80821115620034d7576000816000905550600101620034bd565b5090565b9056fe608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600033604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16100fd600161010260201b6112251760201c565b6101b1565b600081600001805490501461017f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b806000016000908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b611309806101c06000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d146101db578063a2d83b5e146101f9578063e2095c0714610247578063fd6aad25146102bc578063fe6dcdba146103145761009e565b80630af2b3e5146100a357806313af40351461011157806331fb7127146101555780637c32cdd1146101735780638da5cb5b14610191575b600080fd5b6100cf600480360360208110156100b957600080fd5b8101908080359060200190929190505050610365565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101536004803603602081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610385565b005b61015d610542565b6040518082815260200191505060405180910390f35b61017b610547565b6040518082815260200191505060405180910390f35b610199610550565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e3610575565b6040518082815260200191505060405180910390f35b6102456004803603604081101561020f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610586565b005b6102736004803603602081101561025d57600080fd5b8101908080359060200190929190505050610889565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a9565b6040518082815260200191505060405180910390f35b61031c6108f4565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600061037b82600161090990919063ffffffff16565b5080915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606481565b60006064905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610581600161093c565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000610654600161093c565b905060008114156106d2578273ffffffffffffffffffffffffffffffffffffffff167f5c868267078a9f279de15963da697bfbdf4a010ad5735e1c1aee7d7f739abe00836000604051808381526020018281526020019250505060405180910390a26106cc838360016109509092919063ffffffff16565b50610885565b60006106de6001610ab6565b9150506106f5846001610b0890919063ffffffff16565b156107825761071084846001610b579092919063ffffffff16565b600083141561077d576107236001610d0a565b50508373ffffffffffffffffffffffffffffffffffffffff167f887f66ccd9d9731b3c8d6a9f1eca7ad0ea411126868d35bd40e77fc58308a066600084604051808381526020018281526020019250505060405180910390a25b610882565b6000831415801561079d5750606482108061079c57508281105b5b156108815760648210610814576000806107b76001610d0a565b915091508173ffffffffffffffffffffffffffffffffffffffff167f887f66ccd9d9731b3c8d6a9f1eca7ad0ea411126868d35bd40e77fc58308a0668286604051808381526020018281526020019250505060405180910390a250505b61082a848460016109509092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff167f5c868267078a9f279de15963da697bfbdf4a010ad5735e1c1aee7d7f739abe008484604051808381526020018281526020019250505060405180910390a25b5b50505b5050565b6000806108a083600161090990919063ffffffff16565b91509150915091565b60006001800160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806109016001610ab6565b915091509091565b60008061093184600001600185018154811061092157fe5b9060005260206000200154610ee9565b915091509250929050565b600060018260000180549050039050919050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520656e74727920616c726561647920657869737473000000000000000081525060200191505060405180910390fd5b6000610a138383610f13565b905083600001819080600181540180825580915050906001820390600052602060002001600090919290919091505550600060018560000180549050039050610a67818387610f3a9092919063ffffffff16565b9050808560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080600283600001805490501015610adb5760008081915080905091509150610b03565b610afe83600001600181548110610aee57fe5b9060005260206000200154610ee9565b915091505b915091565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610c14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f54686520656e74727920646f6573206e6f74206578697374730000000000000081525060200191505060405180910390fd5b6000610c208484610f13565b90506000856000018381548110610c3357fe5b90600052602060002001549050600081831015610c6657610c5f8484896110639092919063ffffffff16565b9050610c94565b81831115610c8a57610c83848489610f3a9092919063ffffffff16565b9050610c93565b50505050610d05565b5b82876000018281548110610ca457fe5b9060005260206000200181905550838114610d0057808760010160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505b505050565b60008060008360000180549050905060018111610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5468652070696770656e20646f6573206e6f742065786973747300000000000081525060200191505060405180910390fd5b610db284600001600181548110610da257fe5b9060005260206000200154610ee9565b809350819450505060008460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002811415610e215760018460000181610e1b91906111d4565b50610ee3565b6000846000016001830381548110610e3557fe5b906000526020600020015490508085600001600181548110610e5357fe5b9060005260206000200181905550600182038560000181610e7491906111d4565b50600060019050610e908183886110639092919063ffffffff16565b905080866001016000610ea2856111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50915091565b600080821973ffffffffffffffffffffffffffffffffffffffff811692508060a01c915050915091565b60008160a01b8373ffffffffffffffffffffffffffffffffffffffff161719905092915050565b60008290506001811461105c5760008460000160028381610f5757fe5b0481548110610f6257fe5b906000526020600020015490505b8281101561105a5782818660000160028581610f8857fe5b0481548110610f9357fe5b906000526020600020016000886000018681548110610fae57fe5b90600052602060002001600084919050558391905055505081856001016000610fd6846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002828161101e57fe5b049150600182141561102f5761105a565b846000016002838161103d57fe5b048154811061104857fe5b90600052602060002001549050610f70565b505b9392505050565b600082905060008460000180549050905060006001820390505b816002840210156111aa57600060028402905060008760000182815481106110a157fe5b906000526020600020015490506000828411156110f95760008960000160018501815481106110cc57fe5b90600052602060002001549050808310156110ef578091506001840193506110f3565b8291505b506110fd565b8190505b8087111561110d575050506111aa565b80878a600001888154811061111e57fe5b9060005260206000200160008c600001878154811061113957fe5b90600052602060002001600084919050558391905055505085896001016000611161846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082955050505061107d565b50509392505050565b600073ffffffffffffffffffffffffffffffffffffffff8219169050919050565b8154818355818111156111fb578183600052602060002091820191016111fa9190611200565b5b505050565b61122291905b8082111561121e576000816000905550600101611206565b5090565b90565b60008160000180549050146112a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b80600001600090806001815401808255809150509060018203906000526020600020016000909192909190915055505056fea265627a7a723158205121a2a839e4135b7085bd697df16bd79ad62b762a9ebb056e28aa47106172a464736f6c63430005110032608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061017c806100606000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806361da14391461003b578063e2e52ec11461007d575b600080fd5b6100676004803603602081101561005157600080fd5b81019080803590602001909291905050506100b5565b6040518082815260200191505060405180910390f35b6100b36004803603604081101561009357600080fd5b8101908080359060200190929190803590602001909291905050506100d2565b005b600060016000838152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461012b57600080fd5b806001600084815260200190815260200160002081905550505056fea265627a7a723158209dfaebaa604d3ffa2a1c75384a030c7c6747feda5eba3a6520a035fa6fa7fd2f64736f6c63430005110032a265627a7a72315820bbd5f82a62e19b1c598e5cc8fc397223264e00ee6fa368b486f4dffb19454d7364736f6c63430005110032
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620002085760003560e01c80636d268e0a116200011d57806395d89b4111620000b1578063c47f0027116200007b578063c47f00271462000aaf578063c57981b51462000b2e578063dd62ed3e1462000b4e578063ff12bbf41462000bc95762000208565b806395d89b41146200094b578063a486309d14620009d3578063a5956a8b1462000a26578063a9059cbb1462000a465762000208565b80638953580311620000f35780638953580314620007e057806389f3546814620008455780638cec999314620008ce5780638da5cb5b14620008ff5762000208565b80636d268e0a146200071257806370a0823114620007655780637c32cdd114620007c05762000208565b806323b872dd11620001a157806343684b21116200016b57806343684b2114620005c557806352d85ab0146200062457806368e7c21a14620006705780636a5935b614620006b75762000208565b806323b872dd14620004a5578063313ce567146200052e5780633767e3391462000554578063399ae72414620005745762000208565b8063095ea7b311620001e3578063095ea7b3146200037657806313af403514620003df57806316b627d1146200042657806318160ddd14620004855762000208565b806306fdde03146200020d578063089cab71146200029557806308acece2146200030d575b600080fd5b6200021762000c1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620002595780820151818401526020810190506200023c565b50505050905090810190601f168015620002875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002c460048036036020811015620002ad57600080fd5b810190808035906020019092919050505062000cbe565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6200035c600480360360408110156200032557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000d84565b604051808215151515815260200191505060405180910390f35b620003c5600480360360408110156200038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000e39565b604051808215151515815260200191505060405180910390f35b6200042460048036036020811015620003f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000eb7565b005b6200046b600480360360208110156200043e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001075565b604051808215151515815260200191505060405180910390f35b6200048f62001095565b6040518082815260200191505060405180910390f35b6200051460048036036060811015620004bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200109b565b604051808215151515815260200191505060405180910390f35b6200053862001151565b604051808260ff1660ff16815260200191505060405180910390f35b6200055e62001156565b6040518082815260200191505060405180910390f35b620005c3600480360360408110156200058c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200115c565b005b6200060a60048036036020811015620005dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620013e2565b604051808215151515815260200191505060405180910390f35b6200062e62001402565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620006b5600480360360208110156200068857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001428565b005b620006fc60048036036020811015620006cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620015e8565b6040518082815260200191505060405180910390f35b6200071c620016ce565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b620007aa600480360360208110156200077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001788565b6040518082815260200191505060405180910390f35b620007ca6200179c565b6040518082815260200191505060405180910390f35b6200082f60048036036040811015620007f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001849565b6040518082815260200191505060405180910390f35b620008b4600480360360608110156200085d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200185f565b604051808215151515815260200191505060405180910390f35b620008fd60048036036020811015620008e657600080fd5b810190808035906020019092919050505062001915565b005b6200090962001a23565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200095562001a48565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620009975780820151818401526020810190506200097a565b50505050905090810190601f168015620009c55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b62000a2460048036036040811015620009eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505062001a81565b005b62000a3062001c0e565b6040518082815260200191505060405180910390f35b62000a956004803603604081101562000a5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001cbb565b604051808215151515815260200191505060405180910390f35b62000b2c6004803603602081101562000ac757600080fd5b810190808035906020019064010000000081111562000ae557600080fd5b82018360208201111562000af857600080fd5b8035906020019184600183028401116401000000008311171562000b1b57600080fd5b909192939192939050505062001d70565b005b62000b3862001f3d565b6040518082815260200191505060405180910390f35b62000bb36004803603604081101562000b6657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001f42565b6040518082815260200191505060405180910390f35b62000c1a6004803603604081101562000be157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505062001f58565b005b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562000cb65780601f1062000c8a5761010080835404028352916020019162000cb6565b820191906000526020600020905b81548152906001019060200180831162000c9857829003601f168201915b505050505081565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2095c07846040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b15801562000d3457600080fd5b505afa15801562000d49573d6000803e3d6000fd5b505050506040513d604081101562000d6057600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b600060075460003a148062000d985750455a115b1562000e1d5760005a905062000db3333387876001620020e5565b6001925060005a82039050600060648483028162000dcd57fe5b0490505a92505b805a8403101562000e1457600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062000dd4565b50505062000e32565b62000e2d333386866001620020e5565b600191505b5092915050565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a362000ead338484620025ca565b6001905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60025481565b600060075460003a1480620010af5750455a115b15620011345760005a9050620010ca338787876000620020e5565b6001925060005a820390506000606484830281620010e457fe5b0490505a92505b805a840310156200112b576001546040516020018082815260200191505060405160208183030381529060405280519060200120600181905550620010eb565b50505062001149565b62001144338686866000620020e5565b600191505b509392505050565b601281565b60075481565b600860009054906101000a900460ff16156200117457fe5b6001600860006101000a81548160ff0219169083151502179055506000600254146200119c57fe5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620011f557fe5b604051620012039062003413565b604051809103906000f08015801562001220573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f032c92aff758f5f3d194f42a11d5128753b8a3c1b02ec011f21efe10f7c167c16000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600f6007819055507fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c96000600754604051808381526020018281526020019250505060405180910390a18173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3620013d7828262002670565b806002819055505050565b60046020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620014eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f032c92aff758f5f3d194f42a11d5128753b8a3c1b02ec011f21efe10f7c167c1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a180600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd6aad25836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156200168a57600080fd5b505afa1580156200169f573d6000803e3d6000fd5b505050506040513d6020811015620016b657600080fd5b81019080805190602001909291905050509050919050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe6dcdba6040518163ffffffff1660e01b8152600401604080518083038186803b1580156200173957600080fd5b505afa1580156200174e573d6000803e3d6000fd5b505050506040513d60408110156200176557600080fd5b810190808051906020019092919080519060200190929190505050915091509091565b6000620017958262002790565b9050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c32cdd16040518163ffffffff1660e01b815260040160206040518083038186803b1580156200180757600080fd5b505afa1580156200181c573d6000803e3d6000fd5b505050506040513d60208110156200183357600080fd5b8101908080519060200190929190505050905090565b6000620018578383620027f0565b905092915050565b600060075460003a1480620018735750455a115b15620018f85760005a90506200188e338787876001620020e5565b6001925060005a820390506000606484830281620018a857fe5b0490505a92505b805a84031015620018ef576001546040516020018082815260200191505060405160208183030381529060405280519060200120600181905550620018af565b5050506200190d565b62001908338686866001620020e5565b600191505b509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620019d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c960075482604051808381526020018281526020019250505060405180910390a18060078190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f43484f500000000000000000000000000000000000000000000000000000000081525081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f113828282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001c7957600080fd5b505afa15801562001c8e573d6000803e3d6000fd5b505050506040513d602081101562001ca557600080fd5b8101908080519060200190929190505050905090565b600060075460003a148062001ccf5750455a115b1562001d545760005a905062001cea333387876000620020e5565b6001925060005a82039050600060648483028162001d0457fe5b0490505a92505b805a8403101562001d4b57600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062001d0b565b50505062001d69565b62001d64333386866000620020e5565b600191505b5092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb16003838360405180806020018060200183810383528681815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801562001ee95780601f1062001ebd5761010080835404028352916020019162001ee9565b820191906000526020600020905b81548152906001019060200180831162001ecb57829003601f168201915b50508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a181816003919062001f3892919062003421565b505050565b606481565b600062001f5083836200286a565b905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008214156200215b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040518082815260200191505060405180910390a3620025c3565b6000620021688562002790565b905082811015620021e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f62616c616e6365206e6f7420656e6f756768000000000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614620022e85760006200222386886200286a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620022e65783811015620022c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616c6c6f77616e6365206e6f7420656e6f75676800000000000000000000000081525060200191505060405180910390fd5b620022e58688620022df87856200291390919063ffffffff16565b620025ca565b5b505b60008390506000809050600080905062002317886200231188876200291390919063ffffffff16565b62002670565b84806200232d57506200232b888862002997565b155b15620024fd576200234960648762002a4390919063ffffffff16565b9150600186146200235b57816200235e565b60005b90506200238962002379828462002aef90919063ffffffff16565b846200291390919063ffffffff16565b9250620023a2826002546200291390919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360006200241c898862002b78565b905062002448816200244284620024338562002790565b62002aef90919063ffffffff16565b62002670565b8073ffffffffffffffffffffffffffffffffffffffff167f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20836040518082815260200191505060405180910390a28073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505b85620025278462002518848662002aef90919063ffffffff16565b62002aef90919063ffffffff16565b146200252f57fe5b62002559876200255385620025448b62002790565b62002aef90919063ffffffff16565b62002670565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505b5050505050565b6200266b8260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001208260001b6200265b8662002d18565b62002d3b9092919063ffffffff16565b505050565b620026c960405180807f62616c616e636500000000000000000000000000000000000000000000000000815250600701905060405180910390208260001b620026b98562002d18565b62002d3b9092919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2d83b5e83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156200277357600080fd5b505af115801562002788573d6000803e3d6000fd5b505050505050565b6000620027e660405180807f62616c616e63650000000000000000000000000000000000000000000000000081525060070190506040518091039020620027d78462002d18565b62002f3390919063ffffffff16565b60001c9050919050565b60006200285f8260405160200180807f6e6f6e636500000000000000000000000000000000000000000000000000000081525060050182815260200191505060405160208183030381529060405280519060200120620028508562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000620029088260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120620028f98562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000818310156200298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f53756220756e646572666c6f770000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062002a3b5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b60008082141562002abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f446976206279207a65726f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082848162002ac857fe5b049050600083858162002ad757fe5b061462002ae5576001810190505b8091505092915050565b60008082840190508381101562002b6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f416464206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b60008062002b868362003152565b9050600062002b968583620027f0565b905062002ba8858360018401620031a8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630af2b3e562002c9c8784866001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562002c5857600080fd5b505afa15801562002c6d573d6000803e3d6000fd5b505050506040513d602081101562002c8457600080fd5b8101908080519060200190929190505050036200321f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562002cd157600080fd5b505afa15801562002ce6573d6000803e3d6000fd5b505050506040513d602081101562002cfd57600080fd5b81019080805190602001909291905050509250505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff1660001b9050919050565b600062002d4884620032a6565b905062002d558162003394565b62002d665762002d6584620033da565b5b60008173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663e2e52ec1905060e01b85856040516024018083815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831062002e4b578051825260208201915060208101905060208303925062002e26565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002eaf576040519150601f19603f3d011682016040523d82523d6000602084013e62002eb4565b606091505b505090508062002f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722077726974696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b5050505050565b60008062002f4184620032a6565b905062002f4e8162003394565b62002f60576000801b9150506200314c565b600060608273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166361da1439905060e01b8660405160240180828152602001915050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106200303f57805182526020820191506020810190506020830392506200301a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114620030a1576040519150601f19603f3d011682016040523d82523d6000602084013e620030a6565b606091505b5091509150816200311f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722072656164696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b8080602001905160208110156200313557600080fd5b810190808051906020019092919050505093505050505b92915050565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060008390505b600a81816200318957fe5b049050818060010192505060008114156200317e578192505050919050565b6200321a8260405160200180807f6e6f6e6365000000000000000000000000000000000000000000000000000000815250600501828152602001915050604051602081830303815290604052805190602001208260001b6200320a8662002d18565b62002d3b9092919063ffffffff16565b505050565b600080858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012060001c90506001830181816200329a57fe5b06915050949350505050565b600060ff60f81b308360405180602001620032c190620034a8565b6020820181038252601f19601f820116604052508051906020012060405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050919050565b600080823f90506000801b8114158015620033d257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b8114155b915050919050565b606060405180602001620033ee90620034a8565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6114c980620034df83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200346457803560ff191683800117855562003495565b8280016001018555821562003495579182015b828111156200349457823582559160200191906001019062003477565b5b509050620034a49190620034b6565b5090565b6101dc80620049a883390190565b620034db91905b80821115620034d7576000816000905550600101620034bd565b5090565b9056fe608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600033604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16100fd600161010260201b6112251760201c565b6101b1565b600081600001805490501461017f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b806000016000908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b611309806101c06000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d146101db578063a2d83b5e146101f9578063e2095c0714610247578063fd6aad25146102bc578063fe6dcdba146103145761009e565b80630af2b3e5146100a357806313af40351461011157806331fb7127146101555780637c32cdd1146101735780638da5cb5b14610191575b600080fd5b6100cf600480360360208110156100b957600080fd5b8101908080359060200190929190505050610365565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101536004803603602081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610385565b005b61015d610542565b6040518082815260200191505060405180910390f35b61017b610547565b6040518082815260200191505060405180910390f35b610199610550565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e3610575565b6040518082815260200191505060405180910390f35b6102456004803603604081101561020f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610586565b005b6102736004803603602081101561025d57600080fd5b8101908080359060200190929190505050610889565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a9565b6040518082815260200191505060405180910390f35b61031c6108f4565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600061037b82600161090990919063ffffffff16565b5080915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606481565b60006064905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610581600161093c565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000610654600161093c565b905060008114156106d2578273ffffffffffffffffffffffffffffffffffffffff167f5c868267078a9f279de15963da697bfbdf4a010ad5735e1c1aee7d7f739abe00836000604051808381526020018281526020019250505060405180910390a26106cc838360016109509092919063ffffffff16565b50610885565b60006106de6001610ab6565b9150506106f5846001610b0890919063ffffffff16565b156107825761071084846001610b579092919063ffffffff16565b600083141561077d576107236001610d0a565b50508373ffffffffffffffffffffffffffffffffffffffff167f887f66ccd9d9731b3c8d6a9f1eca7ad0ea411126868d35bd40e77fc58308a066600084604051808381526020018281526020019250505060405180910390a25b610882565b6000831415801561079d5750606482108061079c57508281105b5b156108815760648210610814576000806107b76001610d0a565b915091508173ffffffffffffffffffffffffffffffffffffffff167f887f66ccd9d9731b3c8d6a9f1eca7ad0ea411126868d35bd40e77fc58308a0668286604051808381526020018281526020019250505060405180910390a250505b61082a848460016109509092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff167f5c868267078a9f279de15963da697bfbdf4a010ad5735e1c1aee7d7f739abe008484604051808381526020018281526020019250505060405180910390a25b5b50505b5050565b6000806108a083600161090990919063ffffffff16565b91509150915091565b60006001800160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806109016001610ab6565b915091509091565b60008061093184600001600185018154811061092157fe5b9060005260206000200154610ee9565b915091509250929050565b600060018260000180549050039050919050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520656e74727920616c726561647920657869737473000000000000000081525060200191505060405180910390fd5b6000610a138383610f13565b905083600001819080600181540180825580915050906001820390600052602060002001600090919290919091505550600060018560000180549050039050610a67818387610f3a9092919063ffffffff16565b9050808560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080600283600001805490501015610adb5760008081915080905091509150610b03565b610afe83600001600181548110610aee57fe5b9060005260206000200154610ee9565b915091505b915091565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610c14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f54686520656e74727920646f6573206e6f74206578697374730000000000000081525060200191505060405180910390fd5b6000610c208484610f13565b90506000856000018381548110610c3357fe5b90600052602060002001549050600081831015610c6657610c5f8484896110639092919063ffffffff16565b9050610c94565b81831115610c8a57610c83848489610f3a9092919063ffffffff16565b9050610c93565b50505050610d05565b5b82876000018281548110610ca457fe5b9060005260206000200181905550838114610d0057808760010160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505b505050565b60008060008360000180549050905060018111610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5468652070696770656e20646f6573206e6f742065786973747300000000000081525060200191505060405180910390fd5b610db284600001600181548110610da257fe5b9060005260206000200154610ee9565b809350819450505060008460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002811415610e215760018460000181610e1b91906111d4565b50610ee3565b6000846000016001830381548110610e3557fe5b906000526020600020015490508085600001600181548110610e5357fe5b9060005260206000200181905550600182038560000181610e7491906111d4565b50600060019050610e908183886110639092919063ffffffff16565b905080866001016000610ea2856111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50915091565b600080821973ffffffffffffffffffffffffffffffffffffffff811692508060a01c915050915091565b60008160a01b8373ffffffffffffffffffffffffffffffffffffffff161719905092915050565b60008290506001811461105c5760008460000160028381610f5757fe5b0481548110610f6257fe5b906000526020600020015490505b8281101561105a5782818660000160028581610f8857fe5b0481548110610f9357fe5b906000526020600020016000886000018681548110610fae57fe5b90600052602060002001600084919050558391905055505081856001016000610fd6846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002828161101e57fe5b049150600182141561102f5761105a565b846000016002838161103d57fe5b048154811061104857fe5b90600052602060002001549050610f70565b505b9392505050565b600082905060008460000180549050905060006001820390505b816002840210156111aa57600060028402905060008760000182815481106110a157fe5b906000526020600020015490506000828411156110f95760008960000160018501815481106110cc57fe5b90600052602060002001549050808310156110ef578091506001840193506110f3565b8291505b506110fd565b8190505b8087111561110d575050506111aa565b80878a600001888154811061111e57fe5b9060005260206000200160008c600001878154811061113957fe5b90600052602060002001600084919050558391905055505085896001016000611161846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082955050505061107d565b50509392505050565b600073ffffffffffffffffffffffffffffffffffffffff8219169050919050565b8154818355818111156111fb578183600052602060002091820191016111fa9190611200565b5b505050565b61122291905b8082111561121e576000816000905550600101611206565b5090565b90565b60008160000180549050146112a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b80600001600090806001815401808255809150509060018203906000526020600020016000909192909190915055505056fea265627a7a723158205121a2a839e4135b7085bd697df16bd79ad62b762a9ebb056e28aa47106172a464736f6c63430005110032608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061017c806100606000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806361da14391461003b578063e2e52ec11461007d575b600080fd5b6100676004803603602081101561005157600080fd5b81019080803590602001909291905050506100b5565b6040518082815260200191505060405180910390f35b6100b36004803603604081101561009357600080fd5b8101908080359060200190929190803590602001909291905050506100d2565b005b600060016000838152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461012b57600080fd5b806001600084815260200190815260200160002081905550505056fea265627a7a723158209dfaebaa604d3ffa2a1c75384a030c7c6747feda5eba3a6520a035fa6fa7fd2f64736f6c63430005110032a265627a7a72315820bbd5f82a62e19b1c598e5cc8fc397223264e00ee6fa368b486f4dffb19454d7364736f6c63430005110032
Deployed Bytecode Sourcemap
202:14195:8:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;202:14195:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;862:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;862:31:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12615:114;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12615:114:8;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13782:193;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13782:193:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13374:209;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13374:209:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;350:131:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;350:131:6;;;;;;;;;;;;;;;;;;;:::i;:::-;;1057:43:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1057:43:8;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;695:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13981:201;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13981:201:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;943:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1164:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1211:627;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1211:627:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1006:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1006:45:8;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1121:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12226:146;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12226:146:8;;;;;;;;;;;;;;;;;;;:::i;:::-;;12839:113;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12839:113:8;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12735:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13120:107;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13120:107:8;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12421:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12958:122;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12958:122:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14188:207;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14188:207:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12092:128;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12092:128:8;;;;;;;;;;;;;;;;;:::i;:::-;;50:20:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;899:38:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;899:38:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11593:176;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11593:176:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12518:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13589:187;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13589:187:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11963:123;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11963:123:8;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11963:123:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11963:123:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;11963:123:8;;;;;;;;;;;;:::i;:::-;;806:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13233:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13233:135:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11775:182;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11775:182:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;862:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12615:114::-;12671:7;12680;12706:6;;;;;;;;;;;:12;;;12719:2;12706:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12706:16:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12706:16:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12706:16:8;;;;;;;;;;;;;;;;;;;;;;;;;12699:23;;;;12615:114;;;:::o;13782:193::-;13875:4;13856:8;;143:1:2;128:11;:16;:46;;;;160:14;148:9;:26;128:46;124:442;;;190:16;209:9;190:28;;13891:56:8;13905:10;13917;13929:3;13934:6;13942:4;13891:13;:56::i;:::-;13964:4;13957:11;;247:13:2;274:9;263:8;:20;247:36;;297:14;334:3;323:7;315:5;:15;314:23;;;;;;297:40;;362:9;351:20;;385:139;415:6;403:9;392:8;:20;:29;385:139;;;503:4;;486:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;486:22:2;;;476:33;;;;;;469:4;:40;;;;385:139;;;124:442;;;;;;13891:56:8;13905:10;13917;13929:3;13934:6;13942:4;13891:13;:56::i;:::-;13964:4;13957:11;;124:442:2;13782:193:8;;;;;:::o;13374:209::-;13443:4;13485:8;13464:38;;13473:10;13464:38;;;13495:6;13464:38;;;;;;;;;;;;;;;;;;13512:43;13526:10;13538:8;13548:6;13512:13;:43::i;:::-;13572:4;13565:11;;13374:209;;;;:::o;350:131:6:-;306:5;;;;;;;;;;;292:19;;:10;:19;;;284:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;418:32;436:5;;;;;;;;;;;443:6;418:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;468:6;460:5;;:14;;;;;;;;;;;;;;;;;;350:131;:::o;1057:43:8:-;;;;;;;;;;;;;;;;;;;;;;:::o;695:26::-;;;;:::o;13981:201::-;14086:4;14067:8;;143:1:2;128:11;:16;:46;;;;160:14;148:9;:26;128:46;124:442;;;190:16;209:9;190:28;;14102:52:8;14116:10;14128:5;14135:3;14140:6;14148:5;14102:13;:52::i;:::-;14171:4;14164:11;;247:13:2;274:9;263:8;:20;247:36;;297:14;334:3;323:7;315:5;:15;314:23;;;;;;297:40;;362:9;351:20;;385:139;415:6;403:9;392:8;:20;:29;385:139;;;503:4;;486:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;486:22:2;;;476:33;;;;;;469:4;:40;;;;385:139;;;124:442;;;;;;14102:52:8;14116:10;14128:5;14135:3;14140:6;14148:5;14102:13;:52::i;:::-;14171:4;14164:11;;124:442:2;13981:201:8;;;;;;:::o;943:35::-;976:2;943:35;:::o;1164:23::-;;;;:::o;1211:627::-;1330:6;;;;;;;;;;;1329:7;1322:15;;;;1356:4;1347:6;;:13;;;;;;;;;;;;;;;;;;1418:1;1403:11;;:16;1396:24;;;;1464:1;1437:29;;1445:6;;;;;;;;;;;1437:29;;;1430:37;;;;1512:12;;;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1512:12:8;1503:6;;:21;;;;;;;;;;;;;;;;;;1539:38;1557:1;1569:6;;;;;;;;;;;1539:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1675:2;1664:8;:13;;;;1692:24;1704:1;1707:8;;1692:24;;;;;;;;;;;;;;;;;;;;;;;;1752:3;1731:34;;1748:1;1731:34;;;1757:7;1731:34;;;;;;;;;;;;;;;;;;1775:25;1787:3;1792:7;1775:11;:25::i;:::-;1824:7;1810:11;:21;;;;1211:627;;:::o;1006:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;1121:20::-;;;;;;;;;;;;;:::o;12226:146::-;306:5:6;;;;;;;;;;;292:19;;:10;:19;;;284:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12295:44:8;12313:6;;;;;;;;;;;12330:7;12295:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12358:7;12349:6;;:16;;;;;;;;;;;;;;;;;;12226:146;:::o;12839:113::-;12898:7;12924:6;;;;;;;;;;;:14;;;12939:5;12924:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12924:21:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12924:21:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12924:21:8;;;;;;;;;;;;;;;;12917:28;;12839:113;;;:::o;12735:98::-;12779:7;12788;12814:6;;;;;;;;;;;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12814:12:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12814:12:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12814:12:8;;;;;;;;;;;;;;;;;;;;;;;;;12807:19;;;;12735:98;;:::o;13120:107::-;13177:7;13203:17;13214:5;13203:10;:17::i;:::-;13196:24;;13120:107;;;:::o;12421:91::-;12463:7;12489:6;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12489:16:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12489:16:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12489:16:8;;;;;;;;;;;;;;;;12482:23;;12421:91;:::o;12958:122::-;13028:7;13054:19;13061:5;13068:4;13054:6;:19::i;:::-;13047:26;;12958:122;;;;:::o;14188:207::-;14300:4;14281:8;;143:1:2;128:11;:16;:46;;;;160:14;148:9;:26;128:46;124:442;;;190:16;209:9;190:28;;14316:51:8;14330:10;14342:5;14349:3;14354:6;14362:4;14316:13;:51::i;:::-;14384:4;14377:11;;247:13:2;274:9;263:8;:20;247:36;;297:14;334:3;323:7;315:5;:15;314:23;;;;;;297:40;;362:9;351:20;;385:139;415:6;403:9;392:8;:20;:29;385:139;;;503:4;;486:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;486:22:2;;;476:33;;;;;;469:4;:40;;;;385:139;;;124:442;;;;;;14316:51:8;14330:10;14342:5;14349:3;14354:6;14362:4;14316:13;:51::i;:::-;14384:4;14377:11;;124:442:2;14188:207:8;;;;;;:::o;12092:128::-;306:5:6;;;;;;;;;;;292:19;;:10;:19;;;284:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12161:27:8;12173:8;;12183:4;12161:27;;;;;;;;;;;;;;;;;;;;;;;;12209:4;12198:8;:15;;;;12092:128;:::o;50:20:6:-;;;;;;;;;;;;;:::o;899:38:8:-;;;;;;;;;;;;;;;;;;;:::o;11593:176::-;306:5:6;;;;;;;;;;;292:19;;:10;:19;;;284:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11687:32:8;11699:5;11706:12;11687:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11750:12;11729:11;:18;11741:5;11729:18;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;11593:176;;:::o;12518:91::-;12563:7;12589:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12589:13:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12589:13:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12589:13:8;;;;;;;;;;;;;;;;12582:20;;12518:91;:::o;13589:187::-;13675:4;13656:8;;143:1:2;128:11;:16;:46;;;;160:14;148:9;:26;128:46;124:442;;;190:16;209:9;190:28;;13691:57:8;13705:10;13717;13729:3;13734:6;13742:5;13691:13;:57::i;:::-;13765:4;13758:11;;247:13:2;274:9;263:8;:20;247:36;;297:14;334:3;323:7;315:5;:15;314:23;;;;;;297:40;;362:9;351:20;;385:139;415:6;403:9;392:8;:20;:29;385:139;;;503:4;;486:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;486:22:2;;;476:33;;;;;;469:4;:40;;;;385:139;;;124:442;;;;;;13691:57:8;13705:10;13717;13729:3;13734:6;13742:5;13691:13;:57::i;:::-;13765:4;13758:11;;124:442:2;13589:187:8;;;;;:::o;11963:123::-;306:5:6;;;;;;;;;;;292:19;;:10;:19;;;284:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12037:20:8;12045:4;12051:5;;12037:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;12037:20:8;;;;;;;;;;;;;;;;12074:5;;12067:4;:12;;;;;;;:::i;:::-;;11963:123;;:::o;806:33::-;836:3;806:33;:::o;13233:135::-;13308:7;13334:27;13345:5;13352:8;13334:10;:27::i;:::-;13327:34;;13233:135;;;;:::o;11775:182::-;306:5:6;;;;;;;;;;;292:19;;:10;:19;;;284:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11871:34:8;11885:5;11892:12;11871:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11938:12;11915:13;:20;11929:5;11915:20;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;11775:182;;:::o;3977:2418::-;4189:1;4179:6;:11;4175:90;;;4227:3;4211:23;;4220:5;4211:23;;;4232:1;4211:23;;;;;;;;;;;;;;;;;;4248:7;;4175:90;4306:19;4328:17;4339:5;4328:10;:17::i;:::-;4306:39;;4378:6;4363:11;:21;;4355:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4470:9;4461:18;;:5;:18;;;4457:471;;4537:21;4561:28;4572:5;4579:9;4561:10;:28::i;:::-;4537:52;;4696:2;4674:13;:25;4670:248;;4796:6;4779:13;:23;;4771:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4845:58;4859:5;4866:9;4877:25;4895:6;4877:13;:17;;:25;;;;:::i;:::-;4845:13;:58::i;:::-;4670:248;4457:471;;5017:15;5035:6;5017:24;;5051:12;5066:1;5051:16;;5077:12;5092:1;5077:16;;5137:43;5149:5;5156:23;5172:6;5156:11;:15;;:23;;;;:::i;:::-;5137:11;:43::i;:::-;5319:7;:38;;;;5331:26;5346:5;5353:3;5331:14;:26::i;:::-;5330:27;5319:38;5315:823;;;5509:20;836:3;5509:6;:15;;:20;;;;:::i;:::-;5502:27;;5560:1;5550:6;:11;:22;;5568:4;5550:22;;;5564:1;5550:22;5543:29;;5647:27;5659:14;5668:4;5659;:8;;:14;;;;:::i;:::-;5647:7;:11;;:27;;;;:::i;:::-;5637:37;;5730:21;5746:4;5730:11;;:15;;:21;;;;:::i;:::-;5716:11;:35;;;;5794:1;5770:33;;5779:5;5770:33;;;5798:4;5770:33;;;;;;;;;;;;;;;;;;5892:14;5909:26;5921:5;5928:6;5909:11;:26::i;:::-;5892:43;;5991:49;6003:6;6011:28;6034:4;6011:18;6022:6;6011:10;:18::i;:::-;:22;;:28;;;;:::i;:::-;5991:11;:49::i;:::-;6066:6;6059:20;;;6074:4;6059:20;;;;;;;;;;;;;;;;;;6114:6;6098:29;;6107:5;6098:29;;;6122:4;6098:29;;;;;;;;;;;;;;;;;;5315:823;;6246:6;6215:27;6234:7;6215:14;6224:4;6215;:8;;:14;;;;:::i;:::-;:18;;:27;;;;:::i;:::-;:37;6208:45;;;;6298:46;6310:3;6315:28;6335:7;6315:15;6326:3;6315:10;:15::i;:::-;:19;;:28;;;;:::i;:::-;6298:11;:46::i;:::-;6375:3;6359:29;;6368:5;6359:29;;;6380:7;6359:29;;;;;;;;;;;;;;;;;;3977:2418;;;;;;;;;;:::o;2542:186::-;2633:88;2693:8;2663:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2663:39:8;;;2653:50;;;;;;2713:6;2705:15;;2633:13;2640:5;2633:6;:13::i;:::-;:19;;:88;;;;;:::i;:::-;2542:186;;;:::o;2910:171::-;2983:51;767:20;;;;;;;;;;;;;;;;;;;3024:8;3016:17;;2983:13;2990:5;2983:6;:13::i;:::-;:19;;:51;;;;;:::i;:::-;3044:6;;;;;;;;;;;:13;;;3058:5;3065:8;3044:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3044:30:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3044:30:8;;;;2910:171;;:::o;2017:131::-;2075:7;2109:31;767:20;;;;;;;;;;;;;;;;;;;2109:13;2116:5;2109:6;:13::i;:::-;:18;;:31;;;;:::i;:::-;2101:40;;2094:47;;2017:131;;;:::o;2348:172::-;2416:7;2450:62;2505:4;2479:31;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2479:31:8;;;2469:42;;;;;;2450:13;2457:5;2450:6;:13::i;:::-;:18;;:62;;;;:::i;:::-;2442:71;;2435:78;;2348:172;;;;:::o;2154:188::-;2230:7;2264:70;2323:8;2293:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2293:39:8;;;2283:50;;;;;;2264:13;2271:5;2264:6;:13::i;:::-;:18;;:70;;;;:::i;:::-;2256:79;;2249:86;;2154:188;;;;:::o;216:138:9:-;274:7;306:1;301;:6;;293:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;346:1;342;:5;335:12;;216:138;;;;:::o;3128:143:8:-;3203:4;3226:13;:20;3240:5;3226:20;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;3248:11;:16;3260:3;3248:16;;;;;;;;;;;;;;;;;;;;;;;;;3226:38;3219:45;;3128:143;;;;:::o;729:224:9:-;792:7;824:1;819;:6;;811:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:9;867:1;863;:5;;;;;;851:17;;891:1;886;882;:5;;;;;;:10;878:50;;916:1;912;:5;908:9;;878:50;945:1;938:8;;;729:224;;;;:::o;50:160::-;108:7;127:9;143:1;139;:5;127:17;;167:1;162;:6;;154:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;202:1;195:8;;;50:160;;;;:::o;3502:469:8:-;3572:14;3642:17;3662:29;3684:6;3662:21;:29::i;:::-;3642:49;;3754:13;3770:24;3777:5;3784:9;3770:6;:24::i;:::-;3754:40;;3804:38;3814:5;3821:9;3840:1;3832:5;:9;3804;:38::i;:::-;3895:6;;;;;;;;;;;:16;;;3912:51;3920:5;3927;3934:9;3961:1;3945:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3945:13:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3945:13:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3945:13:8;;;;;;;;;;;;;;;;:17;3912:7;:51::i;:::-;3895:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3895:69:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3895:69:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3895:69:8;;;;;;;;;;;;;;;;3886:78;;3502:469;;;;;;:::o;1909:102::-;1959:7;2001:1;1993:10;;1985:19;;1978:26;;1909:102;;;:::o;788:549:0:-;899:17;931:21;944:7;931:12;:21::i;:::-;899:54;;968:37;998:5;968:21;:37::i;:::-;963:84;;1021:15;1028:7;1021:6;:15::i;:::-;963:84;1097:12;1123:5;1115:19;;1188:5;:11;;;:20;;;;1226:4;1248:6;1148:120;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1148:120:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;1148:120:0;1115:163;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1115:163:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1096:182:0;;;1297:7;1289:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;788:549;;;;;:::o;1343:591::-;1433:7;1452:17;1484:21;1497:7;1484:12;:21::i;:::-;1452:54;;1521:37;1551:5;1521:21;:37::i;:::-;1516:86;;1589:1;1581:10;;1574:17;;;;;1516:86;1652:12;1666:17;1695:5;1687:25;;1766:5;:10;;;:19;;;;1803:4;1726:95;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1726:95:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;1726:95:0;1687:144;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1687:144:0;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1651:180:0;;;;1850:7;1842:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1911:4;1900:27;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1900:27:0;;;;;;;;;;;;;;;;1893:34;;;;;1343:591;;;;;:::o;46:260:5:-;110:7;128:15;151:2;128:26;;164:12;179:5;164:20;;195:80;220:2;212:10;;;;;;;;;236:9;;;;;;;272:1;264:4;:9;;195:80;;292:7;285:14;;;;46:260;;;:::o;2734:170:8:-;2817:80;2873:4;2847:31;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2847:31:8;;;2837:42;;;;;;2889:6;2881:15;;2817:13;2824:5;2817:6;:13::i;:::-;:19;;:80;;;;;:::i;:::-;2734:170;;;:::o;3277:219::-;3370:7;3389:12;3439:3;3444;3449;3422:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3422:31:8;;;3412:42;;;;;;3404:51;;3389:66;;3487:1;3480:4;:8;3472:4;:17;;;;;;3465:24;;;3277:219;;;;;;:::o;116:426:0:-;177:7;327:4;322:10;;366:4;397:7;440:30;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;440:30:0;430:41;;;;;;280:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;280:213:0;;;249:262;;;;;;224:301;;196:339;;116:426;;;:::o;52:318:4:-;110:4;126:16;226:5;214:18;202:30;;270:1;262:10;;250:8;:22;;:113;;;;;296:66;288:75;;276:8;:87;;250:113;243:120;;;52:318;;;:::o;548:234:0:-;599:21;623:30;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;623:30:0;599:54;;765:7;754:8;748:15;741:4;731:8;727:19;724:1;716:57;712:62;710:66;;:::o;202:14195:8:-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://bbd5f82a62e19b1c598e5cc8fc397223264e00ee6fa368b486f4dffb19454d73
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)