Source Code
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
UserHistory
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "./IOwnerGroupContract.sol";
import "./IUserHistory.sol";
import "./IBlastPoints.sol";
contract UserHistory is IUserHistory {
uint8 private constant _decimal = 18;
uint private constant _seconds_per_day = 24*60*60;
uint private constant _history_per_page = 100;
IOwnerGroupContract private _ownerGroupContract;
mapping(address whitelist => bool) private whitelist_mapping;
address[] private whitelist_list;
uint16 private _deposit_rate;
uint16 private _withdraw_rate;
uint16 private _inviter_rate;
uint16 private _invitee_rate;
uint16 private _gen_code_rate;
uint16 private _daily_rate;
uint16 private _throne_rate;
uint16 private _usurp_rate;
uint16 private _abandon_rate;
bool private _trust_contract_check;
enum ActType {
DEPOSIT, // 100 * ETH
WITHDRAW, // 20
INVITER, // 250 // code owner
INVITEE, // 500 // code user
GEN_CODE, // 50
DAILY, // 20
THRONE, // 100
USURP, // 200
ABANDON, // 10
PREV_POINT
}
struct ActVals {
uint timestamp;
ActType act_type;
uint256 tor_changes;
uint256 tor_balance;
uint256 count_invitee;
uint256 activity_points;
uint256 deposit_points;
uint256 total_points;
}
struct RankVals {
address account;
uint timestamp;
uint256 point;
}
mapping(address => ActVals[]) private activity_history;
mapping(address => ActVals) private activity_lastval;
RankVals[] private _rank;
mapping(address => uint) private _my_rank;
address[] private user_list;
uint256 private board_total_users;
uint256 private board_total_points;
modifier onlyOwner (){
require(_ownerGroupContract.isOwner(msg.sender), "Only Owner have a permission.");
_;
}
modifier onlyTrustedContract(){
// tx.origin != msg.sender
// require(whitelist_mapping[msg.sender], "You are not the RefThrone Contract.");
if (_trust_contract_check) {
require(_ownerGroupContract.isTrustedContract(msg.sender), "Only TrustedContract have a permission.");
}
_;
}
constructor(address ownerGroupContractAddress, address blastPointAddress, address operatorAddress) {
_trust_contract_check = false;
_ownerGroupContract = IOwnerGroupContract(ownerGroupContractAddress);
_deposit_rate = 100;
_withdraw_rate = 20;
_inviter_rate = 250;
_invitee_rate = 500;
_gen_code_rate = 50;
_daily_rate = 20;
_throne_rate = 100;
_usurp_rate = 200;
_abandon_rate = 10;
board_total_users = 0;
board_total_points = 0;
IBlastPoints(blastPointAddress).configurePointsOperator(operatorAddress);
}
function _getLastAct(address account, uint timestamp) private view returns (ActVals memory) {
ActVals memory _my_acts = activity_lastval[account];
if (_my_acts.timestamp != 0)
return _my_acts;
else
return ActVals(timestamp,ActType.DEPOSIT,0,0,0,0,0,0);
}
function _holdTorPoint(uint timestamp1, uint timestamp2, uint tor_balance) private pure returns (uint) {
return (timestamp1 - timestamp2) * tor_balance / 2000000; // * 0.0000005 // 216 point per daily with 5000 tor
}
function _calcRank(address account) private {
ActVals memory _my_acts = activity_lastval[account];
RankVals memory _temp_val;
uint last_rank = _my_rank[account]; // if I have ranking, start from my rank.
if (last_rank == 0) {// if not, start last rank
_my_rank[account] = _rank.length+1;
last_rank = _rank.length+1;
if (_rank.length < 200) {
_rank.push(RankVals(account, _my_acts.timestamp, _my_acts.total_points));
}
user_list.push(account);
board_total_users = board_total_users + 1;
}
if (last_rank <= 200) {
_rank[last_rank-1] = RankVals(account, _my_acts.timestamp, _my_acts.total_points);
} else if (_rank[_rank.length-1].point < _my_acts.total_points) {
_my_rank[_rank[_rank.length-1].account] = 201;
_rank[_rank.length-1] = RankVals(account, _my_acts.timestamp, _my_acts.total_points);
last_rank = 200;
} else {
last_rank = 0;
}
for (uint i = last_rank - 1; i > 0; --i) {
if (_rank[i-1].point < _rank[i].point) {
_temp_val = _rank[i];
_rank[i] = _rank[i-1];
_rank[i-1] = _temp_val;
_my_rank[_rank[i-1].account] = i;
_my_rank[_rank[i].account] = i+1;
} else {
break;
}
}
}
function getRank() public view returns (RankVals[] memory) {
return _rank;
}
function getMyRank(address account) public view returns (uint) {
return _my_rank[account];
}
function getMyRank() public view returns (uint) {
return _my_rank[msg.sender];
}
function getLastHistory(address account) public view returns (ActVals memory) {
return activity_lastval[account];
}
function _isContractCheck(bool flag) public onlyOwner {
_trust_contract_check = flag;
}
function _getRewardRates() public view onlyOwner returns (uint16[8] memory) {
return [_deposit_rate, _withdraw_rate, _inviter_rate, _invitee_rate, _gen_code_rate, _daily_rate, _throne_rate, _usurp_rate];
// return reward_rates;
}
function _setRewardRate(ActType act_type, uint16 rate_value) public onlyOwner {
if (act_type == ActType.DEPOSIT) _deposit_rate = rate_value;
else if (act_type == ActType.WITHDRAW) _withdraw_rate = rate_value;
else if (act_type == ActType.INVITER) _inviter_rate = rate_value;
else if (act_type == ActType.INVITEE) _invitee_rate = rate_value;
else if (act_type == ActType.GEN_CODE) _gen_code_rate = rate_value;
else if (act_type == ActType.DAILY) _daily_rate = rate_value;
else if (act_type == ActType.THRONE) _throne_rate = rate_value;
else if (act_type == ActType.USURP) _usurp_rate = rate_value;
else if (act_type == ActType.ABANDON) _abandon_rate = rate_value;
// reward_rates[act_type] = rate_value;
}
function _getWhiteListContract() public view onlyOwner returns(address[] memory) {
return whitelist_list;
}
function _setWhiteListContract(address ref_contract) public onlyOwner {
whitelist_mapping[ref_contract] = true;
whitelist_list.push(ref_contract);
}
function checkDuplicateCheckIn(address account) public view returns (bool) {
uint _today = block.timestamp / _seconds_per_day;
uint _act_day;
ActVals[] memory _arr_my_acts = activity_history[account];
uint activity_len = _arr_my_acts.length;
for (uint i=activity_len; i > 0; --i) {
_act_day = _arr_my_acts[i-1].timestamp / _seconds_per_day;
if (_act_day == _today) { // history is today
if (_arr_my_acts[i-1].act_type == ActType.DAILY) { // act_type is daily check in
return true;
}
} else {
break; // no more history today, not check in today
}
}
return false;
}
function doDailyCheckIn() public {
address account = msg.sender;
require(!checkDuplicateCheckIn(account), "Already Checked-in");
uint _timestamp = block.timestamp;
ActVals memory _last_act = _getLastAct(account, _timestamp);
uint activity_points = _daily_rate * (10 ** _decimal);
uint deposit_points = _holdTorPoint(_timestamp, _last_act.timestamp, _last_act.tor_balance);
uint total_points = _last_act.total_points + activity_points + deposit_points;
board_total_points = board_total_points + activity_points + deposit_points;
ActVals memory _act = ActVals(
block.timestamp,
ActType.DAILY,
0,
_last_act.tor_balance,
_last_act.count_invitee,
activity_points,
deposit_points,
total_points);
activity_history[account].push(_act);
activity_lastval[account] = _act;
_calcRank(account);
}
function _AllActivity (
address account,
uint timestamp,
ActType act_type,
uint256 tor_changes,
uint256 tor_balance
) private {
ActVals memory _last_act = _getLastAct(account, timestamp);
uint count_invitee = _last_act.count_invitee;
uint activity_points;
if (act_type == ActType.DEPOSIT) { // for DEPOSIT, "tor_change" include 10**18 unit already
activity_points = (tor_changes/5000) * _deposit_rate;
} else {
activity_points = (10 ** _decimal); // except DEPOSIT, need 10**18 unit for rate calculate
if (act_type == ActType.WITHDRAW) {
activity_points *= _withdraw_rate;
} else { // except DEPOSIT and WITHDRAW, tor is not change. keep balance
tor_changes = 0;
tor_balance = _last_act.tor_balance;
if (act_type == ActType.INVITER) { activity_points *= _inviter_rate; count_invitee++; }
else if (act_type == ActType.INVITEE) { activity_points *= _invitee_rate; }
else if (act_type == ActType.GEN_CODE) { activity_points *= _gen_code_rate; }
// else if (act_type == ActType.DAILY) { activity_points *= _daily_rate; }
else if (act_type == ActType.THRONE) { activity_points *= _throne_rate; }
else if (act_type == ActType.USURP) { activity_points *= _usurp_rate; }
else if (act_type == ActType.ABANDON) { activity_points *= _abandon_rate; }
}
}
uint deposit_points = _holdTorPoint(timestamp, _last_act.timestamp, _last_act.tor_balance);
uint total_points = _last_act.total_points + activity_points + deposit_points;
board_total_points = board_total_points + activity_points + deposit_points;
ActVals memory _act = ActVals(
timestamp,
act_type,
tor_changes,
tor_balance,
count_invitee,
activity_points,
deposit_points,
total_points);
activity_history[account].push(_act);
activity_lastval[account] = _act;
_calcRank(account);
}
function _initialHistory(address account, uint[] memory account_history) external onlyOwner {
for (uint i = (account_history.length/8); i > 0; i--) {
ActVals memory _act = ActVals(
account_history[i*8-8],//timestamp,
(ActType)(account_history[i*8-7]),//act_type,
account_history[i*8-6],//tor_changes,
account_history[i*8-5],//tor_balance,
account_history[i*8-4],//count_invitee,
account_history[i*8-3],//activity_points,
account_history[i*8-2],//deposit_points,
account_history[i*8-1]); //total_points);
board_total_points = board_total_points + _act.activity_points + _act.deposit_points;
activity_history[account].push(_act);
activity_lastval[account] = _act;
_calcRank(account);
}
}
function setDepositActivity(address account, uint timestamp, uint256 tor_changes, uint256 tor_balance) external onlyTrustedContract {
_AllActivity(account, timestamp, ActType.DEPOSIT, tor_changes, tor_balance);
}
function setWithdrawActivity(address account, uint timestamp, uint256 tor_changes, uint256 tor_balance) external onlyTrustedContract {
_AllActivity(account, timestamp, ActType.WITHDRAW, tor_changes, tor_balance);
}
function setInviterActivity(address account, uint timestamp) external onlyTrustedContract {
_AllActivity(account, timestamp, ActType.INVITER, 0, 0);
}
function setInviteeActivity(address account, uint timestamp) external onlyTrustedContract {
_AllActivity(account, timestamp, ActType.INVITEE, 0, 0);
}
function setGenCodeActivity(address account, uint timestamp) external onlyTrustedContract {
_AllActivity(account, timestamp, ActType.GEN_CODE, 0, 0);
}
function setThroneActivity(address account, uint timestamp) external onlyTrustedContract {
_AllActivity(account, timestamp, ActType.THRONE, 0, 0);
}
function setUsurpActivity(address account, uint timestamp) external onlyTrustedContract {
_AllActivity(account, timestamp, ActType.USURP, 0, 0);
}
function setAbandonActivity(address account, uint timestamp) external onlyTrustedContract {
_AllActivity(account, timestamp, ActType.ABANDON, 0, 0);
}
function getHistoryLength(address account) public view returns (uint){
return activity_history[account].length;
}
function getHistory(address account, uint page, uint count_per_page) public view returns (ActVals[] memory) {
ActVals[] memory _arr_my_acts = activity_history[account];
uint activity_len = _arr_my_acts.length;
require (activity_len > 0, "NO_DATA");
require (activity_len > count_per_page * (page-1), "INVALID_PAGE : no Data in this page");
uint start_index;
uint end_index;
start_index = activity_len - (count_per_page * (page - 1));
if (start_index <= count_per_page)
end_index = 0;
else
end_index = start_index - count_per_page;
ActVals[] memory _inpage_acts = new ActVals[](start_index - end_index);
for (uint i = start_index; i > end_index; --i)
_inpage_acts[start_index-i] = _arr_my_acts[i-1];
return _inpage_acts;
}
function getHistory(address account, uint page) public view returns (ActVals[] memory) {
return getHistory(account, page, 100);
}
function getHistory(address account) public view returns (ActVals[] memory) {
return getHistory(account, 1, 100);
}
function getTotalUsers() public view returns (uint) {
return board_total_users;
}
function getTotalPoints() public view returns (uint) {
return board_total_points;
}
function _getAllUsers() public view onlyOwner returns (ActVals[] memory) {
ActVals[] memory _inpage_acts = new ActVals[](board_total_users);
for (uint i = 0; i < board_total_users; ++i)
_inpage_acts[i] = activity_lastval[user_list[i]];
return _inpage_acts;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IBlastPoints {
function configurePointsOperator(address operator) external;
function configurePointsOperatorOnBehalf(address contractAddress, address operator) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IOwnerGroupContract {
function isOwner(address owenerAddress) external view returns (bool);
function isAdmin(address adminAddress) external view returns (bool);
function getOwnerCount() external view returns (uint);
function getAdminCount() external view returns (uint);
function isTrustedContract(address contractAddress) external view returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IUserHistory {
function setDepositActivity(address account, uint timestamp, uint256 tor_changes, uint256 tor_balance) external;
function setWithdrawActivity(address account, uint timestamp, uint256 tor_changes, uint256 tor_balance) external;
function setInviterActivity(address account, uint timestamp) external;
function setInviteeActivity(address account, uint timestamp) external;
function setGenCodeActivity(address account, uint timestamp) external;
function setThroneActivity(address account, uint timestamp) external;
function setUsurpActivity(address account, uint timestamp) external;
function setAbandonActivity(address account, uint timestamp) external;
}{
"evmVersion": "paris",
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"ownerGroupContractAddress","type":"address"},{"internalType":"address","name":"blastPointAddress","type":"address"},{"internalType":"address","name":"operatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"_getAllUsers","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"enum UserHistory.ActType","name":"act_type","type":"uint8"},{"internalType":"uint256","name":"tor_changes","type":"uint256"},{"internalType":"uint256","name":"tor_balance","type":"uint256"},{"internalType":"uint256","name":"count_invitee","type":"uint256"},{"internalType":"uint256","name":"activity_points","type":"uint256"},{"internalType":"uint256","name":"deposit_points","type":"uint256"},{"internalType":"uint256","name":"total_points","type":"uint256"}],"internalType":"struct UserHistory.ActVals[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getRewardRates","outputs":[{"internalType":"uint16[8]","name":"","type":"uint16[8]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getWhiteListContract","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"account_history","type":"uint256[]"}],"name":"_initialHistory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"_isContractCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum UserHistory.ActType","name":"act_type","type":"uint8"},{"internalType":"uint16","name":"rate_value","type":"uint16"}],"name":"_setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ref_contract","type":"address"}],"name":"_setWhiteListContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkDuplicateCheckIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doDailyCheckIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getHistory","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"enum UserHistory.ActType","name":"act_type","type":"uint8"},{"internalType":"uint256","name":"tor_changes","type":"uint256"},{"internalType":"uint256","name":"tor_balance","type":"uint256"},{"internalType":"uint256","name":"count_invitee","type":"uint256"},{"internalType":"uint256","name":"activity_points","type":"uint256"},{"internalType":"uint256","name":"deposit_points","type":"uint256"},{"internalType":"uint256","name":"total_points","type":"uint256"}],"internalType":"struct UserHistory.ActVals[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"page","type":"uint256"}],"name":"getHistory","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"enum UserHistory.ActType","name":"act_type","type":"uint8"},{"internalType":"uint256","name":"tor_changes","type":"uint256"},{"internalType":"uint256","name":"tor_balance","type":"uint256"},{"internalType":"uint256","name":"count_invitee","type":"uint256"},{"internalType":"uint256","name":"activity_points","type":"uint256"},{"internalType":"uint256","name":"deposit_points","type":"uint256"},{"internalType":"uint256","name":"total_points","type":"uint256"}],"internalType":"struct UserHistory.ActVals[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"page","type":"uint256"},{"internalType":"uint256","name":"count_per_page","type":"uint256"}],"name":"getHistory","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"enum UserHistory.ActType","name":"act_type","type":"uint8"},{"internalType":"uint256","name":"tor_changes","type":"uint256"},{"internalType":"uint256","name":"tor_balance","type":"uint256"},{"internalType":"uint256","name":"count_invitee","type":"uint256"},{"internalType":"uint256","name":"activity_points","type":"uint256"},{"internalType":"uint256","name":"deposit_points","type":"uint256"},{"internalType":"uint256","name":"total_points","type":"uint256"}],"internalType":"struct UserHistory.ActVals[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getHistoryLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLastHistory","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"enum UserHistory.ActType","name":"act_type","type":"uint8"},{"internalType":"uint256","name":"tor_changes","type":"uint256"},{"internalType":"uint256","name":"tor_balance","type":"uint256"},{"internalType":"uint256","name":"count_invitee","type":"uint256"},{"internalType":"uint256","name":"activity_points","type":"uint256"},{"internalType":"uint256","name":"deposit_points","type":"uint256"},{"internalType":"uint256","name":"total_points","type":"uint256"}],"internalType":"struct UserHistory.ActVals","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMyRank","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getMyRank","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRank","outputs":[{"components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"point","type":"uint256"}],"internalType":"struct UserHistory.RankVals[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setAbandonActivity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"tor_changes","type":"uint256"},{"internalType":"uint256","name":"tor_balance","type":"uint256"}],"name":"setDepositActivity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setGenCodeActivity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setInviteeActivity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setInviterActivity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setThroneActivity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setUsurpActivity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"tor_changes","type":"uint256"},{"internalType":"uint256","name":"tor_balance","type":"uint256"}],"name":"setWithdrawActivity","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162004d1838038062004d18833981810160405281019062000037919062000293565b6000600360126101000a81548160ff021916908315150217905550826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064600360006101000a81548161ffff021916908361ffff1602179055506014600360026101000a81548161ffff021916908361ffff16021790555060fa600360046101000a81548161ffff021916908361ffff1602179055506101f4600360066101000a81548161ffff021916908361ffff1602179055506032600360086101000a81548161ffff021916908361ffff16021790555060146003600a6101000a81548161ffff021916908361ffff16021790555060646003600c6101000a81548161ffff021916908361ffff16021790555060c86003600e6101000a81548161ffff021916908361ffff160217905550600a600360106101000a81548161ffff021916908361ffff16021790555060006009819055506000600a819055508173ffffffffffffffffffffffffffffffffffffffff166336b91f2b826040518263ffffffff1660e01b8152600401620001ec919062000300565b600060405180830381600087803b1580156200020757600080fd5b505af11580156200021c573d6000803e3d6000fd5b505050505050506200031d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200025b826200022e565b9050919050565b6200026d816200024e565b81146200027957600080fd5b50565b6000815190506200028d8162000262565b92915050565b600080600060608486031215620002af57620002ae62000229565b5b6000620002bf868287016200027c565b9350506020620002d2868287016200027c565b9250506040620002e5868287016200027c565b9150509250925092565b620002fa816200024e565b82525050565b6000602082019050620003176000830184620002ef565b92915050565b6149eb806200032d6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806372870132116100f95780639e39b80611610097578063c04143ec11610071578063c04143ec146104a2578063ca7e0062146104be578063d303e7b2146104dc578063ec29f4e9146104fa576101a9565b80639e39b8061461044c5780639f8c6bcd14610456578063b14e52e814610472576101a9565b80638bdf5803116100d35780638bdf5803146103b25780639452185f146103e257806396240b68146104125780639be572f61461042e576101a9565b80637287013214610348578063793a298e146103665780638039681114610382576101a9565b80634233d88011610166578063525b881f11610140578063525b881f146102c45780635ae0e952146102e05780635b8dc8e71461031057806372316ef31461032c576101a9565b80634233d8801461025c5780634867080e146102785780634bf29b97146102a8576101a9565b8063127b9015146101ae57806319e9ee75146101ca5780631d9ff429146101e65780632722673f14610204578063326bfcc11461022057806336df3c261461023e575b600080fd5b6101c860048036038101906101c3919061396a565b61052a565b005b6101e460048036038101906101df9190613a2b565b610620565b005b6101ee610722565b6040516101fb9190613a7a565b60405180910390f35b61021e60048036038101906102199190613af4565b610769565b005b610228610b08565b6040516102359190613a7a565b60405180910390f35b610246610b12565b6040516102539190613bf2565b60405180910390f35b61027660048036038101906102719190613c14565b610c79565b005b610292600480360381019061028d9190613c7b565b610d7c565b60405161029f9190613dd0565b60405180910390f35b6102c260048036038101906102bd9190613a2b565b610e57565b005b6102de60048036038101906102d99190613c7b565b610f59565b005b6102fa60048036038101906102f59190613c7b565b6110ef565b6040516103079190613dfb565b60405180910390f35b61032a60048036038101906103259190613f6f565b611304565b005b61034660048036038101906103419190613a2b565b6117cd565b005b6103506118cf565b60405161035d919061411d565b60405180910390f35b610380600480360381019061037b9190613c14565b611b4c565b005b61039c60048036038101906103979190613c7b565b611c4f565b6040516103a9919061411d565b60405180910390f35b6103cc60048036038101906103c79190613a2b565b611c65565b6040516103d9919061411d565b60405180910390f35b6103fc60048036038101906103f79190613c7b565b611c7b565b6040516104099190613a7a565b60405180910390f35b61042c60048036038101906104279190613a2b565b611cc4565b005b610436611dc6565b6040516104439190613a7a565b60405180910390f35b610454611dd0565b005b610470600480360381019061046b9190613a2b565b6120bd565b005b61048c60048036038101906104879190613c7b565b6121bf565b6040516104999190613a7a565b60405180910390f35b6104bc60048036038101906104b79190613a2b565b61220b565b005b6104c661230d565b6040516104d391906141ea565b60405180910390f35b6104e46124ed565b6040516104f191906142f7565b60405180910390f35b610514600480360381019061050f9190614319565b6125b6565b604051610521919061411d565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401610583919061437b565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c491906143ab565b610603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fa90614435565b60405180910390fd5b80600360126101000a81548160ff02191690831515021790555050565b600360129054906101000a900460ff161561070f5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b815260040161068e919061437b565b602060405180830381865afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf91906143ab565b61070e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610705906144c7565b60405180910390fd5b5b61071e8282600760008061289e565b5050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b81526004016107c2919061437b565b602060405180830381865afa1580156107df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080391906143ab565b610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083990614435565b60405180910390fd5b6000600981111561085657610855613cb7565b5b82600981111561086957610868613cb7565b5b036108905780600360006101000a81548161ffff021916908361ffff160217905550610b04565b600160098111156108a4576108a3613cb7565b5b8260098111156108b7576108b6613cb7565b5b036108de5780600360026101000a81548161ffff021916908361ffff160217905550610b03565b600260098111156108f2576108f1613cb7565b5b82600981111561090557610904613cb7565b5b0361092c5780600360046101000a81548161ffff021916908361ffff160217905550610b02565b600360098111156109405761093f613cb7565b5b82600981111561095357610952613cb7565b5b0361097a5780600360066101000a81548161ffff021916908361ffff160217905550610b01565b6004600981111561098e5761098d613cb7565b5b8260098111156109a1576109a0613cb7565b5b036109c85780600360086101000a81548161ffff021916908361ffff160217905550610b00565b600560098111156109dc576109db613cb7565b5b8260098111156109ef576109ee613cb7565b5b03610a1657806003600a6101000a81548161ffff021916908361ffff160217905550610aff565b60066009811115610a2a57610a29613cb7565b5b826009811115610a3d57610a3c613cb7565b5b03610a6457806003600c6101000a81548161ffff021916908361ffff160217905550610afe565b60076009811115610a7857610a77613cb7565b5b826009811115610a8b57610a8a613cb7565b5b03610ab257806003600e6101000a81548161ffff021916908361ffff160217905550610afd565b60086009811115610ac657610ac5613cb7565b5b826009811115610ad957610ad8613cb7565b5b03610afc5780600360106101000a81548161ffff021916908361ffff1602179055505b5b5b5b5b5b5b5b5b5050565b6000600a54905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401610b6d919061437b565b602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae91906143ab565b610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490614435565b60405180910390fd5b6002805480602002602001604051908101604052809291908181526020018280548015610c6f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610c25575b5050505050905090565b600360129054906101000a900460ff1615610d685760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401610ce7919061437b565b602060405180830381865afa158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2891906143ab565b610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e906144c7565b60405180910390fd5b5b610d7684846000858561289e565b50505050565b610d8461386d565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff166009811115610dfe57610dfd613cb7565b5b6009811115610e1057610e0f613cb7565b5b815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b600360129054906101000a900460ff1615610f465760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401610ec5919061437b565b602060405180830381865afa158015610ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0691906143ab565b610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c906144c7565b60405180910390fd5b5b610f558282600460008061289e565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401610fb2919061437b565b602060405180830381865afa158015610fcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff391906143ab565b611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102990614435565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008062015180426111019190614545565b9050600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611219578382906000526020600020906008020160405180610100016040529081600082015481526020016001820160009054906101000a900460ff1660098111156111b8576111b7613cb7565b5b60098111156111ca576111c9613cb7565b5b8152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505081526020019060010190611165565b50505050905060008151905060008190505b60008111156112f55762015180836001836112469190614576565b81518110611257576112566145aa565b5b60200260200101516000015161126d9190614545565b93508484036112df576005600981111561128a57611289613cb7565b5b836001836112989190614576565b815181106112a9576112a86145aa565b5b60200260200101516020015160098111156112c7576112c6613cb7565b5b036112da576001955050505050506112ff565b6112e4565b6112f5565b806112ee906145d9565b905061122b565b5060009450505050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b815260040161135d919061437b565b602060405180830381865afa15801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139e91906143ab565b6113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490614435565b60405180910390fd5b6000600882516113ed9190614545565b90505b60008111156117c857600060405180610100016040528084600880866114169190614602565b6114209190614576565b81518110611431576114306145aa565b5b6020026020010151815260200184600760088661144e9190614602565b6114589190614576565b81518110611469576114686145aa565b5b6020026020010151600981111561148357611482613cb7565b5b600981111561149557611494613cb7565b5b81526020018460066008866114aa9190614602565b6114b49190614576565b815181106114c5576114c46145aa565b5b602002602001015181526020018460056008866114e29190614602565b6114ec9190614576565b815181106114fd576114fc6145aa565b5b6020026020010151815260200184600460088661151a9190614602565b6115249190614576565b81518110611535576115346145aa565b5b602002602001015181526020018460036008866115529190614602565b61155c9190614576565b8151811061156d5761156c6145aa565b5b6020026020010151815260200184600260088661158a9190614602565b6115949190614576565b815181106115a5576115a46145aa565b5b602002602001015181526020018460016008866115c29190614602565b6115cc9190614576565b815181106115dd576115dc6145aa565b5b602002602001015181525090508060c001518160a00151600a546116019190614644565b61160b9190614644565b600a81905550600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010160006101000a81548160ff021916908360098111156116af576116ae613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155505080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083600981111561176757611766613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506117b484612ddc565b5080806117c0906145d9565b9150506113f0565b505050565b600360129054906101000a900460ff16156118bc5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b815260040161183b919061437b565b602060405180830381865afa158015611858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187c91906143ab565b6118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b2906144c7565b60405180910390fd5b5b6118cb8282600660008061289e565b5050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b815260040161192a919061437b565b602060405180830381865afa158015611947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196b91906143ab565b6119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190614435565b60405180910390fd5b600060095467ffffffffffffffff8111156119c8576119c7613e2c565b5b604051908082528060200260200182016040528015611a0157816020015b6119ee61386d565b8152602001906001900390816119e65790505b50905060005b600954811015611b44576005600060088381548110611a2957611a286145aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff166009811115611ac957611ac8613cb7565b5b6009811115611adb57611ada613cb7565b5b81526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050828281518110611b2e57611b2d6145aa565b5b6020026020010181905250806001019050611a07565b508091505090565b600360129054906101000a900460ff1615611c3b5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401611bba919061437b565b602060405180830381865afa158015611bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfb91906143ab565b611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c31906144c7565b60405180910390fd5b5b611c4984846001858561289e565b50505050565b6060611c5e82600160646125b6565b9050919050565b6060611c73838360646125b6565b905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360129054906101000a900460ff1615611db35760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401611d32919061437b565b602060405180830381865afa158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7391906143ab565b611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da9906144c7565b60405180910390fd5b5b611dc28282600260008061289e565b5050565b6000600954905090565b6000339050611dde816110ef565b15611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e15906146c4565b60405180910390fd5b60004290506000611e2f83836136f3565b905060006012600a611e419190614824565b6003600a9054906101000a900461ffff1661ffff16611e609190614602565b90506000611e77848460000151856060015161383d565b9050600081838560e00151611e8c9190614644565b611e969190614644565b90508183600a54611ea79190614644565b611eb19190614644565b600a81905550600060405180610100016040528042815260200160056009811115611edf57611ede613cb7565b5b8152602001600081526020018660600151815260200186608001518152602001858152602001848152602001838152509050600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010160006101000a81548160ff02191690836009811115611faf57611fae613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155505080600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083600981111561206757612066613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506120b487612ddc565b50505050505050565b600360129054906101000a900460ff16156121ac5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b815260040161212b919061437b565b602060405180830381865afa158015612148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216c91906143ab565b6121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a2906144c7565b60405180910390fd5b5b6121bb8282600360008061289e565b5050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600360129054906101000a900460ff16156122fa5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401612279919061437b565b602060405180830381865afa158015612296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ba91906143ab565b6122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f0906144c7565b60405180910390fd5b5b6123098282600860008061289e565b5050565b6123156138c4565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b815260040161236e919061437b565b602060405180830381865afa15801561238b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123af91906143ab565b6123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614435565b60405180910390fd5b604051806101000160405280600360009054906101000a900461ffff1661ffff1661ffff168152602001600360029054906101000a900461ffff1661ffff1661ffff168152602001600360049054906101000a900461ffff1661ffff1661ffff168152602001600360069054906101000a900461ffff1661ffff1661ffff168152602001600360089054906101000a900461ffff1661ffff1661ffff1681526020016003600a9054906101000a900461ffff1661ffff1661ffff1681526020016003600c9054906101000a900461ffff1661ffff1661ffff1681526020016003600e9054906101000a900461ffff1661ffff1661ffff16815250905090565b60606006805480602002602001604051908101604052809291908181526020016000905b828210156125ad57838290600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505081526020019060010190612511565b50505050905090565b60606000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156126cd578382906000526020600020906008020160405180610100016040529081600082015481526020016001820160009054906101000a900460ff16600981111561266c5761266b613cb7565b5b600981111561267e5761267d613cb7565b5b8152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505081526020019060010190612619565b5050505090506000815190506000811161271c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612713906148bb565b60405180910390fd5b6001856127299190614576565b846127349190614602565b8111612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c9061494d565b60405180910390fd5b6000806001876127859190614576565b866127909190614602565b8361279b9190614576565b91508582116127ad57600090506127bc565b85826127b99190614576565b90505b600081836127ca9190614576565b67ffffffffffffffff8111156127e3576127e2613e2c565b5b60405190808252806020026020018201604052801561281c57816020015b61280961386d565b8152602001906001900390816128015790505b50905060008390505b8281111561288e578560018261283b9190614576565b8151811061284c5761284b6145aa565b5b60200260200101518282866128619190614576565b81518110612872576128716145aa565b5b602002602001018190525080612887906145d9565b9050612825565b5080955050505050509392505050565b60006128aa86866136f3565b905060008160800151905060008060098111156128ca576128c9613cb7565b5b8660098111156128dd576128dc613cb7565b5b0361291657600360009054906101000a900461ffff1661ffff16611388866129059190614545565b61290f9190614602565b9050612b87565b6012600a6129249190614824565b90506001600981111561293a57612939613cb7565b5b86600981111561294d5761294c613cb7565b5b0361297957600360029054906101000a900461ffff1661ffff16816129729190614602565b9050612b86565b60009450826060015193506002600981111561299857612997613cb7565b5b8660098111156129ab576129aa613cb7565b5b036129e557600360049054906101000a900461ffff1661ffff16816129d09190614602565b905081806129dd9061496d565b925050612b85565b600360098111156129f9576129f8613cb7565b5b866009811115612a0c57612a0b613cb7565b5b03612a3857600360069054906101000a900461ffff1661ffff1681612a319190614602565b9050612b84565b60046009811115612a4c57612a4b613cb7565b5b866009811115612a5f57612a5e613cb7565b5b03612a8b57600360089054906101000a900461ffff1661ffff1681612a849190614602565b9050612b83565b60066009811115612a9f57612a9e613cb7565b5b866009811115612ab257612ab1613cb7565b5b03612ade576003600c9054906101000a900461ffff1661ffff1681612ad79190614602565b9050612b82565b60076009811115612af257612af1613cb7565b5b866009811115612b0557612b04613cb7565b5b03612b31576003600e9054906101000a900461ffff1661ffff1681612b2a9190614602565b9050612b81565b60086009811115612b4557612b44613cb7565b5b866009811115612b5857612b57613cb7565b5b03612b8057600360109054906101000a900461ffff1661ffff1681612b7d9190614602565b90505b5b5b5b5b5b5b5b6000612b9c888560000151866060015161383d565b9050600081838660e00151612bb19190614644565b612bbb9190614644565b90508183600a54612bcc9190614644565b612bd69190614644565b600a8190555060006040518061010001604052808b81526020018a6009811115612c0357612c02613cb7565b5b8152602001898152602001888152602001868152602001858152602001848152602001838152509050600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010160006101000a81548160ff02191690836009811115612cca57612cc9613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155505080600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff02191690836009811115612d8257612d81613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155905050612dcf8b612ddc565b5050505050505050505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff166009811115612e5857612e57613cb7565b5b6009811115612e6a57612e69613cb7565b5b815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050612eb46138e7565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081036130b2576001600680549050612f129190614644565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600680549050612f679190614644565b905060c8600680549050101561303957600660405180606001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001856000015181526020018560e00151815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015550505b6008849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009546130ab9190614644565b6009819055505b60c881116131845760405180606001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001846000015181526020018460e0015181525060066001836131029190614576565b81548110613113576131126145aa565b5b906000526020600020906003020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505061333a565b8260e001516006600160068054905061319d9190614576565b815481106131ae576131ad6145aa565b5b90600052602060002090600302016002015410156133345760c960076000600660016006805490506131e09190614576565b815481106131f1576131f06145aa565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060405180606001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001846000015181526020018460e00151815250600660016006805490506132ae9190614576565b815481106132bf576132be6145aa565b5b906000526020600020906003020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505060c89050613339565b600090505b5b60006001826133499190614576565b90505b60008111156136ec5760068181548110613369576133686145aa565b5b906000526020600020906003020160020154600660018361338a9190614576565b8154811061339b5761339a6145aa565b5b90600052602060002090600302016002015410156136d657600681815481106133c7576133c66145aa565b5b90600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815250509250600660018261345b9190614576565b8154811061346c5761346b6145aa565b5b90600052602060002090600302016006828154811061348e5761348d6145aa565b5b90600052602060002090600302016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015590505082600660018361352a9190614576565b8154811061353b5761353a6145aa565b5b906000526020600020906003020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155905050806007600060066001856135bb9190614576565b815481106135cc576135cb6145aa565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001816136499190614644565b6007600060068481548110613661576136606145aa565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136db565b6136ec565b806136e5906145d9565b905061334c565b5050505050565b6136fb61386d565b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff16600981111561377757613776613cb7565b5b600981111561378957613788613cb7565b5b81526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050905060008160000151146137e05780915050613837565b6040518061010001604052808481526020016000600981111561380657613805613cb7565b5b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509150505b92915050565b6000621e84808284866138509190614576565b61385a9190614602565b6138649190614545565b90509392505050565b604051806101000160405280600081526020016000600981111561389457613893613cb7565b5b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806101000160405280600890602082028036833780820191505090505090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b60008115159050919050565b61394781613932565b811461395257600080fd5b50565b6000813590506139648161393e565b92915050565b6000602082840312156139805761397f613928565b5b600061398e84828501613955565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139c282613997565b9050919050565b6139d2816139b7565b81146139dd57600080fd5b50565b6000813590506139ef816139c9565b92915050565b6000819050919050565b613a08816139f5565b8114613a1357600080fd5b50565b600081359050613a25816139ff565b92915050565b60008060408385031215613a4257613a41613928565b5b6000613a50858286016139e0565b9250506020613a6185828601613a16565b9150509250929050565b613a74816139f5565b82525050565b6000602082019050613a8f6000830184613a6b565b92915050565b600a8110613aa257600080fd5b50565b600081359050613ab481613a95565b92915050565b600061ffff82169050919050565b613ad181613aba565b8114613adc57600080fd5b50565b600081359050613aee81613ac8565b92915050565b60008060408385031215613b0b57613b0a613928565b5b6000613b1985828601613aa5565b9250506020613b2a85828601613adf565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b69816139b7565b82525050565b6000613b7b8383613b60565b60208301905092915050565b6000602082019050919050565b6000613b9f82613b34565b613ba98185613b3f565b9350613bb483613b50565b8060005b83811015613be5578151613bcc8882613b6f565b9750613bd783613b87565b925050600181019050613bb8565b5085935050505092915050565b60006020820190508181036000830152613c0c8184613b94565b905092915050565b60008060008060808587031215613c2e57613c2d613928565b5b6000613c3c878288016139e0565b9450506020613c4d87828801613a16565b9350506040613c5e87828801613a16565b9250506060613c6f87828801613a16565b91505092959194509250565b600060208284031215613c9157613c90613928565b5b6000613c9f848285016139e0565b91505092915050565b613cb1816139f5565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600a8110613cf757613cf6613cb7565b5b50565b6000819050613d0882613ce6565b919050565b6000613d1882613cfa565b9050919050565b613d2881613d0d565b82525050565b61010082016000820151613d456000850182613ca8565b506020820151613d586020850182613d1f565b506040820151613d6b6040850182613ca8565b506060820151613d7e6060850182613ca8565b506080820151613d916080850182613ca8565b5060a0820151613da460a0850182613ca8565b5060c0820151613db760c0850182613ca8565b5060e0820151613dca60e0850182613ca8565b50505050565b600061010082019050613de66000830184613d2e565b92915050565b613df581613932565b82525050565b6000602082019050613e106000830184613dec565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613e6482613e1b565b810181811067ffffffffffffffff82111715613e8357613e82613e2c565b5b80604052505050565b6000613e9661391e565b9050613ea28282613e5b565b919050565b600067ffffffffffffffff821115613ec257613ec1613e2c565b5b602082029050602081019050919050565b600080fd5b6000613eeb613ee684613ea7565b613e8c565b90508083825260208201905060208402830185811115613f0e57613f0d613ed3565b5b835b81811015613f375780613f238882613a16565b845260208401935050602081019050613f10565b5050509392505050565b600082601f830112613f5657613f55613e16565b5b8135613f66848260208601613ed8565b91505092915050565b60008060408385031215613f8657613f85613928565b5b6000613f94858286016139e0565b925050602083013567ffffffffffffffff811115613fb557613fb461392d565b5b613fc185828601613f41565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6101008201600082015161400e6000850182613ca8565b5060208201516140216020850182613d1f565b5060408201516140346040850182613ca8565b5060608201516140476060850182613ca8565b50608082015161405a6080850182613ca8565b5060a082015161406d60a0850182613ca8565b5060c082015161408060c0850182613ca8565b5060e082015161409360e0850182613ca8565b50505050565b60006140a58383613ff7565b6101008301905092915050565b6000602082019050919050565b60006140ca82613fcb565b6140d48185613fd6565b93506140df83613fe7565b8060005b838110156141105781516140f78882614099565b9750614102836140b2565b9250506001810190506140e3565b5085935050505092915050565b6000602082019050818103600083015261413781846140bf565b905092915050565b600060089050919050565b600081905092915050565b6000819050919050565b61416881613aba565b82525050565b600061417a838361415f565b60208301905092915050565b6000602082019050919050565b61419c8161413f565b6141a6818461414a565b92506141b182614155565b8060005b838110156141e25781516141c9878261416e565b96506141d483614186565b9250506001810190506141b5565b505050505050565b6000610100820190506142006000830184614193565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6060820160008201516142486000850182613b60565b50602082015161425b6020850182613ca8565b50604082015161426e6040850182613ca8565b50505050565b60006142808383614232565b60608301905092915050565b6000602082019050919050565b60006142a482614206565b6142ae8185614211565b93506142b983614222565b8060005b838110156142ea5781516142d18882614274565b97506142dc8361428c565b9250506001810190506142bd565b5085935050505092915050565b600060208201905081810360008301526143118184614299565b905092915050565b60008060006060848603121561433257614331613928565b5b6000614340868287016139e0565b935050602061435186828701613a16565b925050604061436286828701613a16565b9150509250925092565b614375816139b7565b82525050565b6000602082019050614390600083018461436c565b92915050565b6000815190506143a58161393e565b92915050565b6000602082840312156143c1576143c0613928565b5b60006143cf84828501614396565b91505092915050565b600082825260208201905092915050565b7f4f6e6c79204f776e657220686176652061207065726d697373696f6e2e000000600082015250565b600061441f601d836143d8565b915061442a826143e9565b602082019050919050565b6000602082019050818103600083015261444e81614412565b9050919050565b7f4f6e6c792054727573746564436f6e747261637420686176652061207065726d60008201527f697373696f6e2e00000000000000000000000000000000000000000000000000602082015250565b60006144b16027836143d8565b91506144bc82614455565b604082019050919050565b600060208201905081810360008301526144e0816144a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614550826139f5565b915061455b836139f5565b92508261456b5761456a6144e7565b5b828204905092915050565b6000614581826139f5565b915061458c836139f5565b92508282039050818111156145a4576145a3614516565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006145e4826139f5565b9150600082036145f7576145f6614516565b5b600182039050919050565b600061460d826139f5565b9150614618836139f5565b9250828202614626816139f5565b9150828204841483151761463d5761463c614516565b5b5092915050565b600061464f826139f5565b915061465a836139f5565b925082820190508082111561467257614671614516565b5b92915050565b7f416c726561647920436865636b65642d696e0000000000000000000000000000600082015250565b60006146ae6012836143d8565b91506146b982614678565b602082019050919050565b600060208201905081810360008301526146dd816146a1565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561473b5780860481111561471757614716614516565b5b60018516156147265780820291505b8081029050614734856146e4565b94506146fb565b94509492505050565b6000826147545760019050614810565b816147625760009050614810565b81600181146147785760028114614782576147b1565b6001915050614810565b60ff84111561479457614793614516565b5b8360020a9150848211156147ab576147aa614516565b5b50614810565b5060208310610133831016604e8410600b84101617156147e65782820a9050838111156147e1576147e0614516565b5b614810565b6147f384848460016146f1565b9250905081840481111561480a57614809614516565b5b81810290505b9392505050565b600060ff82169050919050565b600061482f826139f5565b915061483a83614817565b92506148677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614744565b905092915050565b7f4e4f5f4441544100000000000000000000000000000000000000000000000000600082015250565b60006148a56007836143d8565b91506148b08261486f565b602082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f494e56414c49445f50414745203a206e6f204461746120696e2074686973207060008201527f6167650000000000000000000000000000000000000000000000000000000000602082015250565b60006149376023836143d8565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b6000614978826139f5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149aa576149a9614516565b5b60018201905091905056fea26469706673582212204015ac48831a80442c39dc5c95f8fb6d058be6a8a071505f5ec98db9690d4e5b64736f6c63430008180033000000000000000000000000b4006ccac99b73f227b314fd1d0274daaab8021f0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000005b50de0439c6ecf939856d2fdcfe191659aa4ee7
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806372870132116100f95780639e39b80611610097578063c04143ec11610071578063c04143ec146104a2578063ca7e0062146104be578063d303e7b2146104dc578063ec29f4e9146104fa576101a9565b80639e39b8061461044c5780639f8c6bcd14610456578063b14e52e814610472576101a9565b80638bdf5803116100d35780638bdf5803146103b25780639452185f146103e257806396240b68146104125780639be572f61461042e576101a9565b80637287013214610348578063793a298e146103665780638039681114610382576101a9565b80634233d88011610166578063525b881f11610140578063525b881f146102c45780635ae0e952146102e05780635b8dc8e71461031057806372316ef31461032c576101a9565b80634233d8801461025c5780634867080e146102785780634bf29b97146102a8576101a9565b8063127b9015146101ae57806319e9ee75146101ca5780631d9ff429146101e65780632722673f14610204578063326bfcc11461022057806336df3c261461023e575b600080fd5b6101c860048036038101906101c3919061396a565b61052a565b005b6101e460048036038101906101df9190613a2b565b610620565b005b6101ee610722565b6040516101fb9190613a7a565b60405180910390f35b61021e60048036038101906102199190613af4565b610769565b005b610228610b08565b6040516102359190613a7a565b60405180910390f35b610246610b12565b6040516102539190613bf2565b60405180910390f35b61027660048036038101906102719190613c14565b610c79565b005b610292600480360381019061028d9190613c7b565b610d7c565b60405161029f9190613dd0565b60405180910390f35b6102c260048036038101906102bd9190613a2b565b610e57565b005b6102de60048036038101906102d99190613c7b565b610f59565b005b6102fa60048036038101906102f59190613c7b565b6110ef565b6040516103079190613dfb565b60405180910390f35b61032a60048036038101906103259190613f6f565b611304565b005b61034660048036038101906103419190613a2b565b6117cd565b005b6103506118cf565b60405161035d919061411d565b60405180910390f35b610380600480360381019061037b9190613c14565b611b4c565b005b61039c60048036038101906103979190613c7b565b611c4f565b6040516103a9919061411d565b60405180910390f35b6103cc60048036038101906103c79190613a2b565b611c65565b6040516103d9919061411d565b60405180910390f35b6103fc60048036038101906103f79190613c7b565b611c7b565b6040516104099190613a7a565b60405180910390f35b61042c60048036038101906104279190613a2b565b611cc4565b005b610436611dc6565b6040516104439190613a7a565b60405180910390f35b610454611dd0565b005b610470600480360381019061046b9190613a2b565b6120bd565b005b61048c60048036038101906104879190613c7b565b6121bf565b6040516104999190613a7a565b60405180910390f35b6104bc60048036038101906104b79190613a2b565b61220b565b005b6104c661230d565b6040516104d391906141ea565b60405180910390f35b6104e46124ed565b6040516104f191906142f7565b60405180910390f35b610514600480360381019061050f9190614319565b6125b6565b604051610521919061411d565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401610583919061437b565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c491906143ab565b610603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fa90614435565b60405180910390fd5b80600360126101000a81548160ff02191690831515021790555050565b600360129054906101000a900460ff161561070f5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b815260040161068e919061437b565b602060405180830381865afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf91906143ab565b61070e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610705906144c7565b60405180910390fd5b5b61071e8282600760008061289e565b5050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b81526004016107c2919061437b565b602060405180830381865afa1580156107df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080391906143ab565b610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083990614435565b60405180910390fd5b6000600981111561085657610855613cb7565b5b82600981111561086957610868613cb7565b5b036108905780600360006101000a81548161ffff021916908361ffff160217905550610b04565b600160098111156108a4576108a3613cb7565b5b8260098111156108b7576108b6613cb7565b5b036108de5780600360026101000a81548161ffff021916908361ffff160217905550610b03565b600260098111156108f2576108f1613cb7565b5b82600981111561090557610904613cb7565b5b0361092c5780600360046101000a81548161ffff021916908361ffff160217905550610b02565b600360098111156109405761093f613cb7565b5b82600981111561095357610952613cb7565b5b0361097a5780600360066101000a81548161ffff021916908361ffff160217905550610b01565b6004600981111561098e5761098d613cb7565b5b8260098111156109a1576109a0613cb7565b5b036109c85780600360086101000a81548161ffff021916908361ffff160217905550610b00565b600560098111156109dc576109db613cb7565b5b8260098111156109ef576109ee613cb7565b5b03610a1657806003600a6101000a81548161ffff021916908361ffff160217905550610aff565b60066009811115610a2a57610a29613cb7565b5b826009811115610a3d57610a3c613cb7565b5b03610a6457806003600c6101000a81548161ffff021916908361ffff160217905550610afe565b60076009811115610a7857610a77613cb7565b5b826009811115610a8b57610a8a613cb7565b5b03610ab257806003600e6101000a81548161ffff021916908361ffff160217905550610afd565b60086009811115610ac657610ac5613cb7565b5b826009811115610ad957610ad8613cb7565b5b03610afc5780600360106101000a81548161ffff021916908361ffff1602179055505b5b5b5b5b5b5b5b5b5050565b6000600a54905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401610b6d919061437b565b602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae91906143ab565b610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490614435565b60405180910390fd5b6002805480602002602001604051908101604052809291908181526020018280548015610c6f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610c25575b5050505050905090565b600360129054906101000a900460ff1615610d685760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401610ce7919061437b565b602060405180830381865afa158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2891906143ab565b610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e906144c7565b60405180910390fd5b5b610d7684846000858561289e565b50505050565b610d8461386d565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff166009811115610dfe57610dfd613cb7565b5b6009811115610e1057610e0f613cb7565b5b815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b600360129054906101000a900460ff1615610f465760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401610ec5919061437b565b602060405180830381865afa158015610ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0691906143ab565b610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c906144c7565b60405180910390fd5b5b610f558282600460008061289e565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401610fb2919061437b565b602060405180830381865afa158015610fcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff391906143ab565b611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102990614435565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008062015180426111019190614545565b9050600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611219578382906000526020600020906008020160405180610100016040529081600082015481526020016001820160009054906101000a900460ff1660098111156111b8576111b7613cb7565b5b60098111156111ca576111c9613cb7565b5b8152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505081526020019060010190611165565b50505050905060008151905060008190505b60008111156112f55762015180836001836112469190614576565b81518110611257576112566145aa565b5b60200260200101516000015161126d9190614545565b93508484036112df576005600981111561128a57611289613cb7565b5b836001836112989190614576565b815181106112a9576112a86145aa565b5b60200260200101516020015160098111156112c7576112c6613cb7565b5b036112da576001955050505050506112ff565b6112e4565b6112f5565b806112ee906145d9565b905061122b565b5060009450505050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b815260040161135d919061437b565b602060405180830381865afa15801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139e91906143ab565b6113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490614435565b60405180910390fd5b6000600882516113ed9190614545565b90505b60008111156117c857600060405180610100016040528084600880866114169190614602565b6114209190614576565b81518110611431576114306145aa565b5b6020026020010151815260200184600760088661144e9190614602565b6114589190614576565b81518110611469576114686145aa565b5b6020026020010151600981111561148357611482613cb7565b5b600981111561149557611494613cb7565b5b81526020018460066008866114aa9190614602565b6114b49190614576565b815181106114c5576114c46145aa565b5b602002602001015181526020018460056008866114e29190614602565b6114ec9190614576565b815181106114fd576114fc6145aa565b5b6020026020010151815260200184600460088661151a9190614602565b6115249190614576565b81518110611535576115346145aa565b5b602002602001015181526020018460036008866115529190614602565b61155c9190614576565b8151811061156d5761156c6145aa565b5b6020026020010151815260200184600260088661158a9190614602565b6115949190614576565b815181106115a5576115a46145aa565b5b602002602001015181526020018460016008866115c29190614602565b6115cc9190614576565b815181106115dd576115dc6145aa565b5b602002602001015181525090508060c001518160a00151600a546116019190614644565b61160b9190614644565b600a81905550600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010160006101000a81548160ff021916908360098111156116af576116ae613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155505080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083600981111561176757611766613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506117b484612ddc565b5080806117c0906145d9565b9150506113f0565b505050565b600360129054906101000a900460ff16156118bc5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b815260040161183b919061437b565b602060405180830381865afa158015611858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187c91906143ab565b6118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b2906144c7565b60405180910390fd5b5b6118cb8282600660008061289e565b5050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b815260040161192a919061437b565b602060405180830381865afa158015611947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196b91906143ab565b6119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190614435565b60405180910390fd5b600060095467ffffffffffffffff8111156119c8576119c7613e2c565b5b604051908082528060200260200182016040528015611a0157816020015b6119ee61386d565b8152602001906001900390816119e65790505b50905060005b600954811015611b44576005600060088381548110611a2957611a286145aa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff166009811115611ac957611ac8613cb7565b5b6009811115611adb57611ada613cb7565b5b81526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050828281518110611b2e57611b2d6145aa565b5b6020026020010181905250806001019050611a07565b508091505090565b600360129054906101000a900460ff1615611c3b5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401611bba919061437b565b602060405180830381865afa158015611bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfb91906143ab565b611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c31906144c7565b60405180910390fd5b5b611c4984846001858561289e565b50505050565b6060611c5e82600160646125b6565b9050919050565b6060611c73838360646125b6565b905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360129054906101000a900460ff1615611db35760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401611d32919061437b565b602060405180830381865afa158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7391906143ab565b611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da9906144c7565b60405180910390fd5b5b611dc28282600260008061289e565b5050565b6000600954905090565b6000339050611dde816110ef565b15611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e15906146c4565b60405180910390fd5b60004290506000611e2f83836136f3565b905060006012600a611e419190614824565b6003600a9054906101000a900461ffff1661ffff16611e609190614602565b90506000611e77848460000151856060015161383d565b9050600081838560e00151611e8c9190614644565b611e969190614644565b90508183600a54611ea79190614644565b611eb19190614644565b600a81905550600060405180610100016040528042815260200160056009811115611edf57611ede613cb7565b5b8152602001600081526020018660600151815260200186608001518152602001858152602001848152602001838152509050600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010160006101000a81548160ff02191690836009811115611faf57611fae613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155505080600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083600981111561206757612066613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506120b487612ddc565b50505050505050565b600360129054906101000a900460ff16156121ac5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b815260040161212b919061437b565b602060405180830381865afa158015612148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216c91906143ab565b6121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a2906144c7565b60405180910390fd5b5b6121bb8282600360008061289e565b5050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600360129054906101000a900460ff16156122fa5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635bf3a315336040518263ffffffff1660e01b8152600401612279919061437b565b602060405180830381865afa158015612296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ba91906143ab565b6122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f0906144c7565b60405180910390fd5b5b6123098282600860008061289e565b5050565b6123156138c4565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b815260040161236e919061437b565b602060405180830381865afa15801561238b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123af91906143ab565b6123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614435565b60405180910390fd5b604051806101000160405280600360009054906101000a900461ffff1661ffff1661ffff168152602001600360029054906101000a900461ffff1661ffff1661ffff168152602001600360049054906101000a900461ffff1661ffff1661ffff168152602001600360069054906101000a900461ffff1661ffff1661ffff168152602001600360089054906101000a900461ffff1661ffff1661ffff1681526020016003600a9054906101000a900461ffff1661ffff1661ffff1681526020016003600c9054906101000a900461ffff1661ffff1661ffff1681526020016003600e9054906101000a900461ffff1661ffff1661ffff16815250905090565b60606006805480602002602001604051908101604052809291908181526020016000905b828210156125ad57838290600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505081526020019060010190612511565b50505050905090565b60606000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156126cd578382906000526020600020906008020160405180610100016040529081600082015481526020016001820160009054906101000a900460ff16600981111561266c5761266b613cb7565b5b600981111561267e5761267d613cb7565b5b8152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505081526020019060010190612619565b5050505090506000815190506000811161271c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612713906148bb565b60405180910390fd5b6001856127299190614576565b846127349190614602565b8111612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c9061494d565b60405180910390fd5b6000806001876127859190614576565b866127909190614602565b8361279b9190614576565b91508582116127ad57600090506127bc565b85826127b99190614576565b90505b600081836127ca9190614576565b67ffffffffffffffff8111156127e3576127e2613e2c565b5b60405190808252806020026020018201604052801561281c57816020015b61280961386d565b8152602001906001900390816128015790505b50905060008390505b8281111561288e578560018261283b9190614576565b8151811061284c5761284b6145aa565b5b60200260200101518282866128619190614576565b81518110612872576128716145aa565b5b602002602001018190525080612887906145d9565b9050612825565b5080955050505050509392505050565b60006128aa86866136f3565b905060008160800151905060008060098111156128ca576128c9613cb7565b5b8660098111156128dd576128dc613cb7565b5b0361291657600360009054906101000a900461ffff1661ffff16611388866129059190614545565b61290f9190614602565b9050612b87565b6012600a6129249190614824565b90506001600981111561293a57612939613cb7565b5b86600981111561294d5761294c613cb7565b5b0361297957600360029054906101000a900461ffff1661ffff16816129729190614602565b9050612b86565b60009450826060015193506002600981111561299857612997613cb7565b5b8660098111156129ab576129aa613cb7565b5b036129e557600360049054906101000a900461ffff1661ffff16816129d09190614602565b905081806129dd9061496d565b925050612b85565b600360098111156129f9576129f8613cb7565b5b866009811115612a0c57612a0b613cb7565b5b03612a3857600360069054906101000a900461ffff1661ffff1681612a319190614602565b9050612b84565b60046009811115612a4c57612a4b613cb7565b5b866009811115612a5f57612a5e613cb7565b5b03612a8b57600360089054906101000a900461ffff1661ffff1681612a849190614602565b9050612b83565b60066009811115612a9f57612a9e613cb7565b5b866009811115612ab257612ab1613cb7565b5b03612ade576003600c9054906101000a900461ffff1661ffff1681612ad79190614602565b9050612b82565b60076009811115612af257612af1613cb7565b5b866009811115612b0557612b04613cb7565b5b03612b31576003600e9054906101000a900461ffff1661ffff1681612b2a9190614602565b9050612b81565b60086009811115612b4557612b44613cb7565b5b866009811115612b5857612b57613cb7565b5b03612b8057600360109054906101000a900461ffff1661ffff1681612b7d9190614602565b90505b5b5b5b5b5b5b5b6000612b9c888560000151866060015161383d565b9050600081838660e00151612bb19190614644565b612bbb9190614644565b90508183600a54612bcc9190614644565b612bd69190614644565b600a8190555060006040518061010001604052808b81526020018a6009811115612c0357612c02613cb7565b5b8152602001898152602001888152602001868152602001858152602001848152602001838152509050600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010160006101000a81548160ff02191690836009811115612cca57612cc9613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155505080600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff02191690836009811115612d8257612d81613cb7565b5b021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155905050612dcf8b612ddc565b5050505050505050505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff166009811115612e5857612e57613cb7565b5b6009811115612e6a57612e69613cb7565b5b815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050612eb46138e7565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081036130b2576001600680549050612f129190614644565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600680549050612f679190614644565b905060c8600680549050101561303957600660405180606001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001856000015181526020018560e00151815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015550505b6008849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009546130ab9190614644565b6009819055505b60c881116131845760405180606001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001846000015181526020018460e0015181525060066001836131029190614576565b81548110613113576131126145aa565b5b906000526020600020906003020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505061333a565b8260e001516006600160068054905061319d9190614576565b815481106131ae576131ad6145aa565b5b90600052602060002090600302016002015410156133345760c960076000600660016006805490506131e09190614576565b815481106131f1576131f06145aa565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060405180606001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001846000015181526020018460e00151815250600660016006805490506132ae9190614576565b815481106132bf576132be6145aa565b5b906000526020600020906003020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505060c89050613339565b600090505b5b60006001826133499190614576565b90505b60008111156136ec5760068181548110613369576133686145aa565b5b906000526020600020906003020160020154600660018361338a9190614576565b8154811061339b5761339a6145aa565b5b90600052602060002090600302016002015410156136d657600681815481106133c7576133c66145aa565b5b90600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815250509250600660018261345b9190614576565b8154811061346c5761346b6145aa565b5b90600052602060002090600302016006828154811061348e5761348d6145aa565b5b90600052602060002090600302016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015590505082600660018361352a9190614576565b8154811061353b5761353a6145aa565b5b906000526020600020906003020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155905050806007600060066001856135bb9190614576565b815481106135cc576135cb6145aa565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001816136499190614644565b6007600060068481548110613661576136606145aa565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136db565b6136ec565b806136e5906145d9565b905061334c565b5050505050565b6136fb61386d565b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff16600981111561377757613776613cb7565b5b600981111561378957613788613cb7565b5b81526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050905060008160000151146137e05780915050613837565b6040518061010001604052808481526020016000600981111561380657613805613cb7565b5b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509150505b92915050565b6000621e84808284866138509190614576565b61385a9190614602565b6138649190614545565b90509392505050565b604051806101000160405280600081526020016000600981111561389457613893613cb7565b5b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806101000160405280600890602082028036833780820191505090505090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b60008115159050919050565b61394781613932565b811461395257600080fd5b50565b6000813590506139648161393e565b92915050565b6000602082840312156139805761397f613928565b5b600061398e84828501613955565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139c282613997565b9050919050565b6139d2816139b7565b81146139dd57600080fd5b50565b6000813590506139ef816139c9565b92915050565b6000819050919050565b613a08816139f5565b8114613a1357600080fd5b50565b600081359050613a25816139ff565b92915050565b60008060408385031215613a4257613a41613928565b5b6000613a50858286016139e0565b9250506020613a6185828601613a16565b9150509250929050565b613a74816139f5565b82525050565b6000602082019050613a8f6000830184613a6b565b92915050565b600a8110613aa257600080fd5b50565b600081359050613ab481613a95565b92915050565b600061ffff82169050919050565b613ad181613aba565b8114613adc57600080fd5b50565b600081359050613aee81613ac8565b92915050565b60008060408385031215613b0b57613b0a613928565b5b6000613b1985828601613aa5565b9250506020613b2a85828601613adf565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b69816139b7565b82525050565b6000613b7b8383613b60565b60208301905092915050565b6000602082019050919050565b6000613b9f82613b34565b613ba98185613b3f565b9350613bb483613b50565b8060005b83811015613be5578151613bcc8882613b6f565b9750613bd783613b87565b925050600181019050613bb8565b5085935050505092915050565b60006020820190508181036000830152613c0c8184613b94565b905092915050565b60008060008060808587031215613c2e57613c2d613928565b5b6000613c3c878288016139e0565b9450506020613c4d87828801613a16565b9350506040613c5e87828801613a16565b9250506060613c6f87828801613a16565b91505092959194509250565b600060208284031215613c9157613c90613928565b5b6000613c9f848285016139e0565b91505092915050565b613cb1816139f5565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600a8110613cf757613cf6613cb7565b5b50565b6000819050613d0882613ce6565b919050565b6000613d1882613cfa565b9050919050565b613d2881613d0d565b82525050565b61010082016000820151613d456000850182613ca8565b506020820151613d586020850182613d1f565b506040820151613d6b6040850182613ca8565b506060820151613d7e6060850182613ca8565b506080820151613d916080850182613ca8565b5060a0820151613da460a0850182613ca8565b5060c0820151613db760c0850182613ca8565b5060e0820151613dca60e0850182613ca8565b50505050565b600061010082019050613de66000830184613d2e565b92915050565b613df581613932565b82525050565b6000602082019050613e106000830184613dec565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613e6482613e1b565b810181811067ffffffffffffffff82111715613e8357613e82613e2c565b5b80604052505050565b6000613e9661391e565b9050613ea28282613e5b565b919050565b600067ffffffffffffffff821115613ec257613ec1613e2c565b5b602082029050602081019050919050565b600080fd5b6000613eeb613ee684613ea7565b613e8c565b90508083825260208201905060208402830185811115613f0e57613f0d613ed3565b5b835b81811015613f375780613f238882613a16565b845260208401935050602081019050613f10565b5050509392505050565b600082601f830112613f5657613f55613e16565b5b8135613f66848260208601613ed8565b91505092915050565b60008060408385031215613f8657613f85613928565b5b6000613f94858286016139e0565b925050602083013567ffffffffffffffff811115613fb557613fb461392d565b5b613fc185828601613f41565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6101008201600082015161400e6000850182613ca8565b5060208201516140216020850182613d1f565b5060408201516140346040850182613ca8565b5060608201516140476060850182613ca8565b50608082015161405a6080850182613ca8565b5060a082015161406d60a0850182613ca8565b5060c082015161408060c0850182613ca8565b5060e082015161409360e0850182613ca8565b50505050565b60006140a58383613ff7565b6101008301905092915050565b6000602082019050919050565b60006140ca82613fcb565b6140d48185613fd6565b93506140df83613fe7565b8060005b838110156141105781516140f78882614099565b9750614102836140b2565b9250506001810190506140e3565b5085935050505092915050565b6000602082019050818103600083015261413781846140bf565b905092915050565b600060089050919050565b600081905092915050565b6000819050919050565b61416881613aba565b82525050565b600061417a838361415f565b60208301905092915050565b6000602082019050919050565b61419c8161413f565b6141a6818461414a565b92506141b182614155565b8060005b838110156141e25781516141c9878261416e565b96506141d483614186565b9250506001810190506141b5565b505050505050565b6000610100820190506142006000830184614193565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6060820160008201516142486000850182613b60565b50602082015161425b6020850182613ca8565b50604082015161426e6040850182613ca8565b50505050565b60006142808383614232565b60608301905092915050565b6000602082019050919050565b60006142a482614206565b6142ae8185614211565b93506142b983614222565b8060005b838110156142ea5781516142d18882614274565b97506142dc8361428c565b9250506001810190506142bd565b5085935050505092915050565b600060208201905081810360008301526143118184614299565b905092915050565b60008060006060848603121561433257614331613928565b5b6000614340868287016139e0565b935050602061435186828701613a16565b925050604061436286828701613a16565b9150509250925092565b614375816139b7565b82525050565b6000602082019050614390600083018461436c565b92915050565b6000815190506143a58161393e565b92915050565b6000602082840312156143c1576143c0613928565b5b60006143cf84828501614396565b91505092915050565b600082825260208201905092915050565b7f4f6e6c79204f776e657220686176652061207065726d697373696f6e2e000000600082015250565b600061441f601d836143d8565b915061442a826143e9565b602082019050919050565b6000602082019050818103600083015261444e81614412565b9050919050565b7f4f6e6c792054727573746564436f6e747261637420686176652061207065726d60008201527f697373696f6e2e00000000000000000000000000000000000000000000000000602082015250565b60006144b16027836143d8565b91506144bc82614455565b604082019050919050565b600060208201905081810360008301526144e0816144a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614550826139f5565b915061455b836139f5565b92508261456b5761456a6144e7565b5b828204905092915050565b6000614581826139f5565b915061458c836139f5565b92508282039050818111156145a4576145a3614516565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006145e4826139f5565b9150600082036145f7576145f6614516565b5b600182039050919050565b600061460d826139f5565b9150614618836139f5565b9250828202614626816139f5565b9150828204841483151761463d5761463c614516565b5b5092915050565b600061464f826139f5565b915061465a836139f5565b925082820190508082111561467257614671614516565b5b92915050565b7f416c726561647920436865636b65642d696e0000000000000000000000000000600082015250565b60006146ae6012836143d8565b91506146b982614678565b602082019050919050565b600060208201905081810360008301526146dd816146a1565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561473b5780860481111561471757614716614516565b5b60018516156147265780820291505b8081029050614734856146e4565b94506146fb565b94509492505050565b6000826147545760019050614810565b816147625760009050614810565b81600181146147785760028114614782576147b1565b6001915050614810565b60ff84111561479457614793614516565b5b8360020a9150848211156147ab576147aa614516565b5b50614810565b5060208310610133831016604e8410600b84101617156147e65782820a9050838111156147e1576147e0614516565b5b614810565b6147f384848460016146f1565b9250905081840481111561480a57614809614516565b5b81810290505b9392505050565b600060ff82169050919050565b600061482f826139f5565b915061483a83614817565b92506148677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614744565b905092915050565b7f4e4f5f4441544100000000000000000000000000000000000000000000000000600082015250565b60006148a56007836143d8565b91506148b08261486f565b602082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f494e56414c49445f50414745203a206e6f204461746120696e2074686973207060008201527f6167650000000000000000000000000000000000000000000000000000000000602082015250565b60006149376023836143d8565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b6000614978826139f5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149aa576149a9614516565b5b60018201905091905056fea26469706673582212204015ac48831a80442c39dc5c95f8fb6d058be6a8a071505f5ec98db9690d4e5b64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b4006ccac99b73f227b314fd1d0274daaab8021f0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000005b50de0439c6ecf939856d2fdcfe191659aa4ee7
-----Decoded View---------------
Arg [0] : ownerGroupContractAddress (address): 0xB4006ccac99b73F227B314fD1d0274DAAAB8021F
Arg [1] : blastPointAddress (address): 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800
Arg [2] : operatorAddress (address): 0x5b50De0439C6ecF939856d2FDcFE191659Aa4ee7
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b4006ccac99b73f227b314fd1d0274daaab8021f
Arg [1] : 0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800
Arg [2] : 0000000000000000000000005b50de0439c6ecf939856d2fdcfe191659aa4ee7
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.