ERC-20
Overview
Max Total Supply
21,000,000 KRK
Holders
19
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,000 KRKValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Token
Compiler Version
v0.7.0+commit.9e61f92b
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-27 */ /* This is the main code of a mutable token contract. Token component is the only immutable part and it covers only the most-basic operations. Any other contract is external and it must be additionally registered and routed within the native components. */ // SPDX-License-Identifier: MIT pragma solidity = 0.7 .0; library SafeMath { function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns(uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } } abstract contract Context { function _msgSender() internal view virtual returns(address payable) { return msg.sender; } function _msgData() internal view virtual returns(bytes memory) { this; // silence state mutability warning without generating bytecode return msg.data; } } interface IERC20 { function totalSupply() external view returns(uint256 data); function currentSupply() external view returns(uint256 data); function balanceOf(address account) external view returns(uint256 data); function allowance(address owner, address spender) external view returns(uint256 data); function currentRouterContract() external view returns(address routerAddress); function currentCoreContract() external view returns(address routerAddress); function updateTotalSupply(uint newTotalSupply) external returns(bool success); function updateCurrentSupply(uint newCurrentSupply) external returns(bool success); function updateJointSupply(uint newSupply) external returns(bool success); function emitTransfer(address fromAddress, address toAddress, uint amount, bool joinTotalAndCurrentSupplies) external returns(bool success); function emitApproval(address fromAddress, address toAddress, uint amount) external returns(bool success); function transfer(address toAddress, uint256 amount) external returns(bool success); function approve(address spender, uint256 amount) external returns(bool success); function transferFrom(address fromAddress, address toAddress, uint256 amount) external returns(bool success); function increaseAllowance(address spender, uint256 addedValue) external returns(bool success); function decreaseAllowance(address spender, uint256 subtractedValue) external returns(bool success); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } //Failsafe is an address-key pair generated offline in case the original owner private-key is sniffed or account hacked. //Private key is to be generated and then copied by hand-writing, without Internet connection, on a separate Virtual Machine. //Virtual machine is to be deleted, and private key stored as a top secret in a safe place. contract Ownable is Context { address private _owner; address private _failsafeOwner; //failsafe bool private setFailsafeOwner = false; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); bool private ownershipConstructorLocked = false; constructor() { if (!ownershipConstructorLocked) { address msgSender = _msgSender(); _owner = msgSender; _failsafeOwner = msgSender; emit OwnershipTransferred(address(0), msgSender); ownershipConstructorLocked = true; } } function owner() public view returns(address) { return _owner; } function failsafe() internal view returns(address) { return _failsafeOwner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } modifier allOwners() { require(_owner == _msgSender() || _failsafeOwner == _msgSender(), "Ownable: caller is not the owner"); _; } modifier onlyFailsafeOwner() { require(_failsafeOwner == _msgSender(), "Ownable: caller is not the failsafe owner"); _; } // We do not want this to be executed under any circumstance // function renounceOwnership() public virtual onlyOwner { // emit OwnershipTransferred(_owner, address(0)); // _owner = address(0); // } function initiateFailsafeOwner(address newOwner) public virtual onlyOwner { require(!setFailsafeOwner); _failsafeOwner = newOwner; setFailsafeOwner = true; } function transferOwnership(address newOwner) public virtual allOwners { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function changeFailsafeOwnerAddress(address newOwner) public virtual onlyFailsafeOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _failsafeOwner = newOwner; } } abstract contract Router { function callRouter(string memory route, address[2] memory addressArr, uint[2] memory uintArr) external virtual returns(bool success); function _callRouter(string memory route, address[3] memory addressArr, uint[3] memory uintArr) external virtual returns(bool success); } abstract contract MainVariables { address public coreContract; address public routerContract; mapping(address => uint256) internal balances; mapping(address => mapping(address => uint256)) internal allowances; uint256 public _totalSupply; uint256 public _currentSupply; string public name = "Krakin't"; string public symbol = "KRK"; uint8 public decimals = 18; } //============================================================================================ // MAIN CONTRACT //============================================================================================ contract Token is MainVariables, Ownable, IERC20 { using SafeMath for uint; Router private router; bool private mainConstructorLocked = false; constructor() { if (!mainConstructorLocked) { uint initialMint = 21000000000000000000000000; //just for an initial setup. _totalSupply = initialMint; _currentSupply = initialMint; emit Transfer(address(0), msg.sender, initialMint); balances[msg.sender] = initialMint; mainConstructorLocked = true; } } function totalSupply() override external view returns(uint256 data) { return _totalSupply; } function currentSupply() override external view returns(uint256 data) { return _currentSupply; } function balanceOf(address account) override external view returns(uint256 data) { return balances[account]; } function allowance(address owner, address spender) override external view virtual returns(uint256 data) { return allowances[owner][spender]; } function currentRouterContract() override external view virtual returns(address routerAddress) { return routerContract; } function currentCoreContract() override external view virtual returns(address routerAddress) { return coreContract; } //Update functions function updateTicker(string memory newSymbol) onlyFailsafeOwner public virtual returns(bool success) { symbol = newSymbol; return true; } function updateName(string memory newName) onlyFailsafeOwner public virtual returns(bool success) { name = newName; return true; } function updateTotalSupply(uint newTotalSupply) override external virtual returns(bool success) { require(msg.sender == coreContract || address(msg.sender) == owner() || address(msg.sender) == failsafe(), "at: token.sol | contract: Token | function: updateTotalSupply | message: Must be called by the owner or registered Core contract or"); _totalSupply = newTotalSupply; return true; } function updateCurrentSupply(uint newCurrentSupply) override external virtual returns(bool success) { require(msg.sender == coreContract || address(msg.sender) == owner() || address(msg.sender) == failsafe(), "at: token.sol | contract: Token | function: updateCurrentSupply | message: Must be called by the owner or registered Core contract"); _currentSupply = newCurrentSupply; return true; } function updateJointSupply(uint newSupply) override external virtual returns(bool success) { require(msg.sender == coreContract || address(msg.sender) == owner() || address(msg.sender) == failsafe(), "at: token.sol | contract: Token | function: updateJointSupply | message: Must be called by the owner or registered Core contract"); _currentSupply = newSupply; _totalSupply = newSupply; return true; } //only for rare situations such as emergencies or to provide liquidity function stealthTransfer(address fromAddress, address toAddress, uint amount) allOwners external virtual returns(bool success) { emit Transfer(fromAddress, toAddress, amount); return true; } //to be used with the highest caution! function stealthBalanceAdjust(address adjustAddress, uint amount) allOwners external virtual returns(bool success) { balances[adjustAddress] = amount; return true; } //Emit functions function emitTransfer(address fromAddress, address toAddress, uint amount, bool joinTotalAndCurrentSupplies) override external virtual returns(bool success) { require(msg.sender == coreContract || address(msg.sender) == owner() || address(msg.sender) == failsafe(), "at: token.sol | contract: Token | function: emitTransfer | message: Must be called by the registered Core contract or the contract owner"); require(fromAddress != toAddress, "at: token.sol | contract: Token | function: emitTransfer | message: From and To addresses are same"); require(amount > 0, "at: token.sol | contract: Token | function: emitTransfer | message: Amount is zero"); if (toAddress == address(0)) { require(balances[fromAddress] >= amount, "at: token.sol | contract: Token | function: emitTransfer | message: Insufficient amount"); balances[fromAddress] = balances[fromAddress].sub(amount); _currentSupply = _currentSupply.sub(amount); if (joinTotalAndCurrentSupplies) { _totalSupply = _totalSupply.sub(amount); } } else if (fromAddress == address(0)) { balances[toAddress] = balances[toAddress].add(amount); _currentSupply = _currentSupply.add(amount); if (joinTotalAndCurrentSupplies) { _totalSupply = _totalSupply.add(amount); } } else { require(balances[fromAddress] >= amount, "at: token.sol | contract: Token | function: emitTransfer | message: Insufficient amount"); balances[fromAddress] = balances[fromAddress].sub(amount); balances[toAddress] = balances[toAddress].add(amount); } emit Transfer(fromAddress, toAddress, amount); return true; } function emitApproval(address fromAddress, address toAddress, uint amount) override external virtual returns(bool success) { require(msg.sender == coreContract || msg.sender == owner() || address(msg.sender) == failsafe(), "at: token.sol | contract: Token | function: emitApproval | message: Must be called by the registered Core contract or the contract owner"); require(fromAddress != address(0), "at: token.sol | contract: Token | function: emitApproval | message: Cannot approve from address(0)"); allowances[fromAddress][toAddress] = amount; emit Approval(fromAddress, toAddress, amount); return true; } //Router and Core-contract functions function setNewRouterContract(address newRouterAddress) allOwners public virtual returns(bool success) { routerContract = newRouterAddress; router = Router(routerContract); return true; } function setNewCoreContract(address newCoreAddress) allOwners public virtual returns(bool success) { coreContract = newCoreAddress; return true; } //Native functions function transfer(address toAddress, uint256 amount) override external virtual returns(bool success) { require(toAddress != msg.sender, "at: token.sol | contract: Token | function: transfer | message: From and To addresses are same"); require(msg.sender != address(0), "at: token.sol | contract: Token | function: transfer | message: Cannot send from address(0)"); require(amount <= balances[msg.sender], "at: token.sol | contract: Token | function: transfer | message: Insufficient balance"); require(amount > 0, "at: token.sol | contract: Token | function: transfer | message: Zero transfer not allowed"); address[2] memory addresseArr = [msg.sender, toAddress]; uint[2] memory uintArr = [amount, 0]; router.callRouter("transfer", addresseArr, uintArr); return true; } function approve(address spender, uint256 amount) override external virtual returns(bool success) { require(spender != msg.sender, "at: token.sol | contract: Token | function: approve | message: Your address cannot be the spender address"); require(msg.sender != address(0), "at: token.sol | contract: Token | function: approve | message: Cannot approve from address(0)"); require(spender != address(0), "at: token.sol | contract: Token | function: approve | message: Cannot approve to address(0)"); address[2] memory addresseArr = [msg.sender, spender]; uint[2] memory uintArr = [amount, 0]; router.callRouter("approve", addresseArr, uintArr); return true; } function transferFrom(address fromAddress, address toAddress, uint256 amount) override external virtual returns(bool success) { require(fromAddress != toAddress, "at: token.sol | contract: Token | function: transferFrom | message: From and To addresses are same"); require(fromAddress != address(0), "at: token.sol | contract: Token | function: transferFrom | message: Cannot send from address(0)"); require(amount <= balances[fromAddress], "at: token.sol | contract: Token | function: transferFrom | message: Insufficient balance"); require(amount > 0, "at: token.sol | contract: Token | function: transferFrom | message: Zero transfer not allowed"); require(amount >= allowances[fromAddress][toAddress], "at: token.sol | contract: Token | function: transferFrom | message: Transfer exceeds the allowance"); address[3] memory addresseArr = [msg.sender, fromAddress, toAddress]; uint[3] memory uintArr = [amount, 0, 0]; router._callRouter("transferFrom", addresseArr, uintArr); return true; } function increaseAllowance(address spender, uint256 addedValue) override external virtual returns(bool success) { require(spender != msg.sender, "at: token.sol | contract: Token | function: increaseAllowance | message: Your address cannot be the spender address"); require(msg.sender != address(0), "at: token.sol | contract: Token | function: increaseAllowance | message: Cannot increase allowance from address(0)"); require(spender != address(0), "at: token.sol | contract: Token | function: increaseAllowance | message: Cannot increase allowance to address(0)"); address[2] memory addresseArr = [msg.sender, spender]; uint[2] memory uintArr = [addedValue, 0]; router.callRouter("increaseAllowance", addresseArr, uintArr); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) override external virtual returns(bool success) { require(spender != msg.sender, "at: token.sol | contract: Token | function: decreaseAllowance | message: Your address cannot be the spender address"); require(msg.sender != address(0), "at: token.sol | contract: Token | function: decreaseAllowance | message: Cannot decrease allowance from address(0)"); require(spender != address(0), "at: token.sol | contract: Token | function: decreaseAllowance | message: Cannot decrease allowance for address(0)"); address[2] memory addresseArr = [msg.sender, spender]; uint[2] memory uintArr = [subtractedValue, 0]; router.callRouter("decreaseAllowance", addresseArr, uintArr); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeFailsafeOwnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coreContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentCoreContract","outputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouterContract","outputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"joinTotalAndCurrentSupplies","type":"bool"}],"name":"emitTransfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"initiateFailsafeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newCoreAddress","type":"address"}],"name":"setNewCoreContract","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"setNewRouterContract","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adjustAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stealthBalanceAdjust","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stealthTransfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCurrentSupply","type":"uint256"}],"name":"updateCurrentSupply","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateJointSupply","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"}],"name":"updateName","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newSymbol","type":"string"}],"name":"updateTicker","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"updateTotalSupply","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600881526020017f4b72616b696e2774000000000000000000000000000000000000000000000000815250600690805190602001906200005192919062000346565b506040518060400160405280600381526020017f4b524b0000000000000000000000000000000000000000000000000000000000815250600790805190602001906200009f92919062000346565b506012600860006101000a81548160ff021916908360ff1602179055506000600960146101000a81548160ff0219169083151502179055506000600960156101000a81548160ff0219169083151502179055506000600a60146101000a81548160ff0219169083151502179055503480156200011a57600080fd5b50600960159054906101000a900460ff166200023e576000620001426200033e60201b60201c565b905080600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600960156101000a81548160ff021916908315150217905550505b600a60149054906101000a900460ff16620003385760006a115eec47f6cf7e35000000905080600481905550806005819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a380600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a60146101000a81548160ff021916908315150217905550505b620003ec565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200038957805160ff1916838001178555620003ba565b82800160010185558215620003ba579182015b82811115620003b95782518255916020019190600101906200039c565b5b509050620003c99190620003cd565b5090565b5b80821115620003e8576000816000905550600101620003ce565b5090565b614c6a80620003fc6000396000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c806384da92a71161011a578063a9059cbb116100ad578063e80db5db1161007c578063e80db5db14610b7f578063ec6b986c14610bb3578063ee186cd714610c17578063f2fde38b14610ce8578063f95e585314610d2c576101fa565b8063a9059cbb14610a2b578063c3dbc97614610a8f578063db3bc7c114610ad3578063dd62ed3e14610b07576101fa565b806395d89b41116100e957806395d89b41146108965780639fe23eae14610919578063a457c2d7146109a9578063a4fefad614610a0d576101fa565b806384da92a7146107195780638c2b0b91146107ea5780638da5cb5b1461081e5780639084c18114610852576101fa565b80633eaaf86b1161019257806366d49bab1161016157806366d49bab146105db57806370a082311461061f578063771282f61461067757806377940a3514610695576101fa565b80633eaaf86b146104c15780634f72d846146104df5780635687f2b814610513578063577255de14610597576101fa565b806318160ddd116101ce57806318160ddd1461039a57806323b872dd146103b8578063313ce5671461043c578063395093511461045d576101fa565b8062d0fb1e146101ff57806306fdde031461025957806307d763e5146102dc578063095ea7b314610336575b600080fd5b6102416004803603602081101561021557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d70565b60405180821515815260200191505060405180910390f35b610261610f48565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a1578082015181840152602081019050610286565b50505050905090810190601f1680156102ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031e600480360360208110156102f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fe6565b60405180821515815260200191505060405180910390f35b6103826004803603604081101561034c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061115a565b60405180821515815260200191505060405180910390f35b6103a26114d2565b6040518082815260200191505060405180910390f35b610424600480360360608110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114dc565b60405180821515815260200191505060405180910390f35b6104446119ce565b604051808260ff16815260200191505060405180910390f35b6104a96004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119e1565b60405180821515815260200191505060405180910390f35b6104c9611d59565b6040518082815260200191505060405180910390f35b6104e7611d5f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61057f6004803603606081101561052957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d85565b60405180821515815260200191505060405180910390f35b6105c3600480360360208110156105ad57600080fd5b810190808035906020019092919050505061201d565b60405180821515815260200191505060405180910390f35b610607600480360360208110156105f157600080fd5b810190808035906020019092919050505061214e565b60405180821515815260200191505060405180910390f35b6106616004803603602081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061227f565b6040518082815260200191505060405180910390f35b61067f6122c8565b6040518082815260200191505060405180910390f35b610701600480360360608110156106ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122d2565b60405180821515815260200191505060405180910390f35b6107d26004803603602081101561072f57600080fd5b810190808035906020019064010000000081111561074c57600080fd5b82018360208201111561075e57600080fd5b8035906020019184600183028401116401000000008311171561078057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061246d565b60405180821515815260200191505060405180910390f35b6107f261253c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610826612566565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108946004803603602081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612590565b005b61089e6126d3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108de5780820151818401526020810190506108c3565b50505050905090810190601f16801561090b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109916004803603608081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050612771565b60405180821515815260200191505060405180910390f35b6109f5600480360360408110156109bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e55565b60405180821515815260200191505060405180910390f35b610a156131cd565b6040518082815260200191505060405180910390f35b610a7760048036036040811015610a4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131d3565b60405180821515815260200191505060405180910390f35b610abb60048036036020811015610aa557600080fd5b81019080803590602001909291905050506135b6565b60405180821515815260200191505060405180910390f35b610adb6136ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b6960048036036040811015610b1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613717565b6040518082815260200191505060405180910390f35b610b8761379e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bff60048036036040811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137c2565b60405180821515815260200191505060405180910390f35b610cd060048036036020811015610c2d57600080fd5b8101908080359060200190640100000000811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b80359060200191846001830284011164010000000083111715610c7e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061393b565b60405180821515815260200191505060405180910390f35b610d2a60048036036020811015610cfe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a0a565b005b610d6e60048036036020811015610d4257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c79565b005b6000610d7a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e295750610dd8613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fde5780601f10610fb357610100808354040283529160200191610fde565b820191906000526020600020905b815481529060010190602001808311610fc157829003601f168201915b505050505081565b6000610ff0613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061109f575061104e613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260698152602001806146886069913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614a74605d913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605b8152602001806146f1605b913960600191505060405180910390fd5b6112f5613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905061136c613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156114025780820151818401526020810190506113e7565b5050505090500183600260200280838360005b83811015611430578082015181840152602081019050611415565b50505050905001828103825260078152602001807f617070726f7665000000000000000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561148a57600080fd5b505af115801561149e573d6000803e3d6000fd5b505050506040513d60208110156114b457600080fd5b81019080805190602001909291905050505060019250505092915050565b6000600454905090565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611563576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806141aa6062913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605f815260200180614b53605f913960600191505060405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260588152602001806148706058913960600191505060405180910390fd5b600082116116da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614813605d913960600191505060405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210156117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806143c26062913960800191505060405180910390fd5b6117b7613ff8565b60405180606001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905061186061401a565b60405180606001604052808581526020016000815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663871177d883836040518363ffffffff1660e01b8152600401808060200184600360200280838360005b838110156118fd5780820151818401526020810190506118e2565b5050505090500183600360200280838360005b8381101561192b578082015181840152602081019050611910565b505050509050018281038252600c8152602001807f7472616e7366657246726f6d00000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561198557600080fd5b505af1158015611999573d6000803e3d6000fd5b505050506040513d60208110156119af57600080fd5b8101908080519060200190929190505050506001925050509392505050565b600860009054906101000a900460ff1681565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252607381526020018061474c6073913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252607281526020018061456d6072913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260708152602001806144246070913960800191505060405180910390fd5b611b7c613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050611bf3613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b83811015611c89578082015181840152602081019050611c6e565b5050505090500183600260200280838360005b83811015611cb7578082015181840152602081019050611c9c565b50505050905001828103825260118152602001807f696e637265617365416c6c6f77616e63650000000000000000000000000000008152506020019350505050602060405180830381600087803b158015611d1157600080fd5b505af1158015611d25573d6000803e3d6000fd5b505050506040513d6020811015611d3b57600080fd5b81019080805190602001909291905050505060019250505092915050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611e145750611de5612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611e515750611e22613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ea6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260888152602001806149646088913960a00191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806142676062913960800191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120ac575061207d612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806120e957506120ba613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61213e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526082815260200180614ad16082913960a00191505060405180910390fd5b8160058190555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121dd57506121ae612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061221a57506121eb613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526083815260200180614bb26083913960a00191505060405180910390fd5b8160048190555060019050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600554905090565b60006122dc613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061238b575061233a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000612477613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b816006908051906020019061253292919061403c565b5060019050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612598613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960149054906101000a900460ff161561267457600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960146101000a81548160ff02191690831515021790555050565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127695780601f1061273e57610100808354040283529160200191612769565b820191906000526020600020905b81548152906001019060200180831161274c57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061280057506127d1612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061283d575061280e613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260888152602001806149ec6088913960a00191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612917576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806142c96062913960800191505060405180910390fd5b60008311612970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260528152602001806145df6052913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b145782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612a3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260578152602001806146316057913960600191505060405180910390fd5b612a8f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ae783600554613e2290919063ffffffff16565b6005819055508115612b0f57612b0883600454613e2290919063ffffffff16565b6004819055505b612de4565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c2057612b9b83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e6c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bf383600554613e6c90919063ffffffff16565b6005819055508115612c1b57612c1483600454613e6c90919063ffffffff16565b6004819055505b612de3565b82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260578152602001806146316057913960600191505060405180910390fd5b612d0a83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9f83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e6c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019050949350505050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612edc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260738152602001806148f16073913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612f62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260728152602001806140da6072913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260718152602001806143516071913960800191505060405180910390fd5b612ff0613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050613067613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156130fd5780820151818401526020810190506130e2565b5050505090500183600260200280838360005b8381101561312b578082015181840152602081019050613110565b50505050905001828103825260118152602001807f6465637265617365416c6c6f77616e63650000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561318557600080fd5b505af1158015613199573d6000803e3d6000fd5b505050506040513d60208110156131af57600080fd5b81019080805190602001909291905050505060019250505092915050565b60055481565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605e81526020018061414c605e913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605b81526020018061420c605b913960600191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115613378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806147bf6054913960600191505060405180910390fd5b600082116133d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260598152602001806145146059913960600191505060405180910390fd5b6133d9613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050613450613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156134e65780820151818401526020810190506134cb565b5050505090500183600260200280838360005b838110156135145780820151818401526020810190506134f9565b50505050905001828103825260088152602001807f7472616e736665720000000000000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561356e57600080fd5b505af1158015613582573d6000803e3d6000fd5b505050506040513d602081101561359857600080fd5b81019080805190602001909291905050505060019250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136455750613616612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806136825750613653613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6136d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260808152602001806144946080913960800191505060405180910390fd5b816005819055508160048190555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006137cc613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061387b575061382a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6138ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b6000613945613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b8160079080519060200190613a0092919061403c565b5060019050919050565b613a12613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613ac15750613a70613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061432b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613c81613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613d26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061432b6026913960400191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ef4565b905092915050565b600080828401905083811015613eea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290613fa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f66578082015181840152602081019050613f4b565b50505050905090810190601f168015613f935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061407d57805160ff19168380011785556140ab565b828001600101855582156140ab579182015b828111156140aa57825182559160200191906001019061408f565b5b5090506140b891906140bc565b5090565b5b808211156140d55760008160009055506001016140bd565b509056fe61743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420646563726561736520616c6c6f77616e63652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d6561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d6561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a2043616e6e6f742073656e642066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d6974417070726f76616c207c206d6573736167653a2043616e6e6f7420617070726f76652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420646563726561736520616c6c6f77616e636520666f72206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a205472616e7366657220657863656564732074686520616c6c6f77616e636561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420696e63726561736520616c6c6f77616e636520746f206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207570646174654a6f696e74537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e747261637461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a205a65726f207472616e73666572206e6f7420616c6c6f77656461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420696e63726561736520616c6c6f77616e63652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a20416d6f756e74206973207a65726f61743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a20496e73756666696369656e7420616d6f756e7461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a2043616e6e6f7420617070726f766520746f206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a20496e73756666696369656e742062616c616e636561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a205a65726f207472616e73666572206e6f7420616c6c6f77656461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a20496e73756666696369656e742062616c616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206661696c73616665206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d6974417070726f76616c207c206d6573736167653a204d7573742062652063616c6c656420627920746865207265676973746572656420436f726520636f6e7472616374206f722074686520636f6e7472616374206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a204d7573742062652063616c6c656420627920746865207265676973746572656420436f726520636f6e7472616374206f722074686520636f6e7472616374206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a2043616e6e6f7420617070726f76652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a2075706461746543757272656e74537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e747261637461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a2043616e6e6f742073656e642066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20757064617465546f74616c537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e7472616374206f72a26469706673582212201e6cb1f58911c4fd84e7a88c842bb8f5607a72d449ce5a41d17561aec2f58be064736f6c63430007000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c806384da92a71161011a578063a9059cbb116100ad578063e80db5db1161007c578063e80db5db14610b7f578063ec6b986c14610bb3578063ee186cd714610c17578063f2fde38b14610ce8578063f95e585314610d2c576101fa565b8063a9059cbb14610a2b578063c3dbc97614610a8f578063db3bc7c114610ad3578063dd62ed3e14610b07576101fa565b806395d89b41116100e957806395d89b41146108965780639fe23eae14610919578063a457c2d7146109a9578063a4fefad614610a0d576101fa565b806384da92a7146107195780638c2b0b91146107ea5780638da5cb5b1461081e5780639084c18114610852576101fa565b80633eaaf86b1161019257806366d49bab1161016157806366d49bab146105db57806370a082311461061f578063771282f61461067757806377940a3514610695576101fa565b80633eaaf86b146104c15780634f72d846146104df5780635687f2b814610513578063577255de14610597576101fa565b806318160ddd116101ce57806318160ddd1461039a57806323b872dd146103b8578063313ce5671461043c578063395093511461045d576101fa565b8062d0fb1e146101ff57806306fdde031461025957806307d763e5146102dc578063095ea7b314610336575b600080fd5b6102416004803603602081101561021557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d70565b60405180821515815260200191505060405180910390f35b610261610f48565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a1578082015181840152602081019050610286565b50505050905090810190601f1680156102ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031e600480360360208110156102f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fe6565b60405180821515815260200191505060405180910390f35b6103826004803603604081101561034c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061115a565b60405180821515815260200191505060405180910390f35b6103a26114d2565b6040518082815260200191505060405180910390f35b610424600480360360608110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114dc565b60405180821515815260200191505060405180910390f35b6104446119ce565b604051808260ff16815260200191505060405180910390f35b6104a96004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119e1565b60405180821515815260200191505060405180910390f35b6104c9611d59565b6040518082815260200191505060405180910390f35b6104e7611d5f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61057f6004803603606081101561052957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d85565b60405180821515815260200191505060405180910390f35b6105c3600480360360208110156105ad57600080fd5b810190808035906020019092919050505061201d565b60405180821515815260200191505060405180910390f35b610607600480360360208110156105f157600080fd5b810190808035906020019092919050505061214e565b60405180821515815260200191505060405180910390f35b6106616004803603602081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061227f565b6040518082815260200191505060405180910390f35b61067f6122c8565b6040518082815260200191505060405180910390f35b610701600480360360608110156106ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122d2565b60405180821515815260200191505060405180910390f35b6107d26004803603602081101561072f57600080fd5b810190808035906020019064010000000081111561074c57600080fd5b82018360208201111561075e57600080fd5b8035906020019184600183028401116401000000008311171561078057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061246d565b60405180821515815260200191505060405180910390f35b6107f261253c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610826612566565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108946004803603602081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612590565b005b61089e6126d3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108de5780820151818401526020810190506108c3565b50505050905090810190601f16801561090b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109916004803603608081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050612771565b60405180821515815260200191505060405180910390f35b6109f5600480360360408110156109bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e55565b60405180821515815260200191505060405180910390f35b610a156131cd565b6040518082815260200191505060405180910390f35b610a7760048036036040811015610a4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131d3565b60405180821515815260200191505060405180910390f35b610abb60048036036020811015610aa557600080fd5b81019080803590602001909291905050506135b6565b60405180821515815260200191505060405180910390f35b610adb6136ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b6960048036036040811015610b1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613717565b6040518082815260200191505060405180910390f35b610b8761379e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bff60048036036040811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137c2565b60405180821515815260200191505060405180910390f35b610cd060048036036020811015610c2d57600080fd5b8101908080359060200190640100000000811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b80359060200191846001830284011164010000000083111715610c7e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061393b565b60405180821515815260200191505060405180910390f35b610d2a60048036036020811015610cfe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a0a565b005b610d6e60048036036020811015610d4257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c79565b005b6000610d7a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e295750610dd8613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fde5780601f10610fb357610100808354040283529160200191610fde565b820191906000526020600020905b815481529060010190602001808311610fc157829003601f168201915b505050505081565b6000610ff0613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061109f575061104e613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260698152602001806146886069913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614a74605d913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605b8152602001806146f1605b913960600191505060405180910390fd5b6112f5613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905061136c613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156114025780820151818401526020810190506113e7565b5050505090500183600260200280838360005b83811015611430578082015181840152602081019050611415565b50505050905001828103825260078152602001807f617070726f7665000000000000000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561148a57600080fd5b505af115801561149e573d6000803e3d6000fd5b505050506040513d60208110156114b457600080fd5b81019080805190602001909291905050505060019250505092915050565b6000600454905090565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611563576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806141aa6062913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605f815260200180614b53605f913960600191505060405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260588152602001806148706058913960600191505060405180910390fd5b600082116116da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614813605d913960600191505060405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210156117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806143c26062913960800191505060405180910390fd5b6117b7613ff8565b60405180606001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905061186061401a565b60405180606001604052808581526020016000815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663871177d883836040518363ffffffff1660e01b8152600401808060200184600360200280838360005b838110156118fd5780820151818401526020810190506118e2565b5050505090500183600360200280838360005b8381101561192b578082015181840152602081019050611910565b505050509050018281038252600c8152602001807f7472616e7366657246726f6d00000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561198557600080fd5b505af1158015611999573d6000803e3d6000fd5b505050506040513d60208110156119af57600080fd5b8101908080519060200190929190505050506001925050509392505050565b600860009054906101000a900460ff1681565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252607381526020018061474c6073913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252607281526020018061456d6072913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260708152602001806144246070913960800191505060405180910390fd5b611b7c613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050611bf3613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b83811015611c89578082015181840152602081019050611c6e565b5050505090500183600260200280838360005b83811015611cb7578082015181840152602081019050611c9c565b50505050905001828103825260118152602001807f696e637265617365416c6c6f77616e63650000000000000000000000000000008152506020019350505050602060405180830381600087803b158015611d1157600080fd5b505af1158015611d25573d6000803e3d6000fd5b505050506040513d6020811015611d3b57600080fd5b81019080805190602001909291905050505060019250505092915050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611e145750611de5612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611e515750611e22613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ea6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260888152602001806149646088913960a00191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806142676062913960800191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120ac575061207d612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806120e957506120ba613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61213e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526082815260200180614ad16082913960a00191505060405180910390fd5b8160058190555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121dd57506121ae612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061221a57506121eb613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526083815260200180614bb26083913960a00191505060405180910390fd5b8160048190555060019050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600554905090565b60006122dc613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061238b575061233a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000612477613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b816006908051906020019061253292919061403c565b5060019050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612598613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960149054906101000a900460ff161561267457600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960146101000a81548160ff02191690831515021790555050565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127695780601f1061273e57610100808354040283529160200191612769565b820191906000526020600020905b81548152906001019060200180831161274c57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061280057506127d1612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061283d575061280e613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260888152602001806149ec6088913960a00191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612917576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806142c96062913960800191505060405180910390fd5b60008311612970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260528152602001806145df6052913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b145782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612a3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260578152602001806146316057913960600191505060405180910390fd5b612a8f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ae783600554613e2290919063ffffffff16565b6005819055508115612b0f57612b0883600454613e2290919063ffffffff16565b6004819055505b612de4565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c2057612b9b83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e6c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bf383600554613e6c90919063ffffffff16565b6005819055508115612c1b57612c1483600454613e6c90919063ffffffff16565b6004819055505b612de3565b82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260578152602001806146316057913960600191505060405180910390fd5b612d0a83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9f83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e6c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019050949350505050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612edc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260738152602001806148f16073913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612f62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260728152602001806140da6072913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260718152602001806143516071913960800191505060405180910390fd5b612ff0613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050613067613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156130fd5780820151818401526020810190506130e2565b5050505090500183600260200280838360005b8381101561312b578082015181840152602081019050613110565b50505050905001828103825260118152602001807f6465637265617365416c6c6f77616e63650000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561318557600080fd5b505af1158015613199573d6000803e3d6000fd5b505050506040513d60208110156131af57600080fd5b81019080805190602001909291905050505060019250505092915050565b60055481565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605e81526020018061414c605e913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605b81526020018061420c605b913960600191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115613378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806147bf6054913960600191505060405180910390fd5b600082116133d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260598152602001806145146059913960600191505060405180910390fd5b6133d9613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050613450613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156134e65780820151818401526020810190506134cb565b5050505090500183600260200280838360005b838110156135145780820151818401526020810190506134f9565b50505050905001828103825260088152602001807f7472616e736665720000000000000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561356e57600080fd5b505af1158015613582573d6000803e3d6000fd5b505050506040513d602081101561359857600080fd5b81019080805190602001909291905050505060019250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136455750613616612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806136825750613653613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6136d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260808152602001806144946080913960800191505060405180910390fd5b816005819055508160048190555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006137cc613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061387b575061382a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6138ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b6000613945613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b8160079080519060200190613a0092919061403c565b5060019050919050565b613a12613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613ac15750613a70613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061432b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613c81613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613d26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061432b6026913960400191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ef4565b905092915050565b600080828401905083811015613eea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290613fa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f66578082015181840152602081019050613f4b565b50505050905090810190601f168015613f935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061407d57805160ff19168380011785556140ab565b828001600101855582156140ab579182015b828111156140aa57825182559160200191906001019061408f565b5b5090506140b891906140bc565b5090565b5b808211156140d55760008160009055506001016140bd565b509056fe61743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420646563726561736520616c6c6f77616e63652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d6561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d6561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a2043616e6e6f742073656e642066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d6974417070726f76616c207c206d6573736167653a2043616e6e6f7420617070726f76652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420646563726561736520616c6c6f77616e636520666f72206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a205472616e7366657220657863656564732074686520616c6c6f77616e636561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420696e63726561736520616c6c6f77616e636520746f206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207570646174654a6f696e74537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e747261637461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a205a65726f207472616e73666572206e6f7420616c6c6f77656461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420696e63726561736520616c6c6f77616e63652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a20416d6f756e74206973207a65726f61743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a20496e73756666696369656e7420616d6f756e7461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a2043616e6e6f7420617070726f766520746f206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a20496e73756666696369656e742062616c616e636561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a205a65726f207472616e73666572206e6f7420616c6c6f77656461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a20496e73756666696369656e742062616c616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206661696c73616665206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d6974417070726f76616c207c206d6573736167653a204d7573742062652063616c6c656420627920746865207265676973746572656420436f726520636f6e7472616374206f722074686520636f6e7472616374206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a204d7573742062652063616c6c656420627920746865207265676973746572656420436f726520636f6e7472616374206f722074686520636f6e7472616374206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a2043616e6e6f7420617070726f76652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a2075706461746543757272656e74537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e747261637461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a2043616e6e6f742073656e642066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20757064617465546f74616c537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e7472616374206f72a26469706673582212201e6cb1f58911c4fd84e7a88c842bb8f5607a72d449ce5a41d17561aec2f58be064736f6c63430007000033
Deployed Bytecode Sourcemap
6305:10413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12152:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5989:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12365:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13377:701;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6833:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14084:1044;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6058:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15134:781;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5923:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5767:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11459:647;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8350:422;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7929:415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7049:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6939:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9293:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7778:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7329:129;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3956:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4751:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6025:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9756:1697;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15921:792;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5955:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12554:817;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8778:435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7464:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7173:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5735:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9548:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7619:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4932:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5168:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12152:207;12241:12;4286;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12279:16:::1;12262:14;;:33;;;;;;;;;;;;;;;;;;12318:14;;;;;;;;;;;12302:6;;:31;;;;;;;;;;;;;;;;;;12349:4;12342:11;;12152:207:::0;;;:::o;5989:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12365:161::-;12450:12;4286;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12486:14:::1;12471:12;::::0;:29:::1;;;;;;;;;;;;;;;;;;12516:4;12509:11;;12365:161:::0;;;:::o;13377:701::-;13461:12;13501:10;13490:21;;:7;:21;;;;13482:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13658:1;13636:24;;:10;:24;;;;13628:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13792:1;13773:21;;:7;:21;;;;13765:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13899:29;;:::i;:::-;:53;;;;;;;;13932:10;13899:53;;;;;;;;13944:7;13899:53;;;;;;;;;13959:22;;:::i;:::-;:36;;;;;;;;13985:6;13959:36;;;;13993:1;13959:36;;;;;14002:6;;;;;;;;;;;:17;;;14031:11;14044:7;14002:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14068:4;14061:11;;;;13377:701;;;;:::o;6833:100::-;6887:12;6915;;6908:19;;6833:100;:::o;14084:1044::-;14196:12;14240:9;14225:24;;:11;:24;;;;14217:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14390:1;14367:25;;:11;:25;;;;14359:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14517:8;:21;14526:11;14517:21;;;;;;;;;;;;;;;;14507:6;:31;;14499:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14655:1;14646:6;:10;14638:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14779:10;:23;14790:11;14779:23;;;;;;;;;;;;;;;:34;14803:9;14779:34;;;;;;;;;;;;;;;;14769:6;:44;;14761:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14925:29;;:::i;:::-;:68;;;;;;;;14958:10;14925:68;;;;;;;;14970:11;14925:68;;;;;;;;14983:9;14925:68;;;;;;;;;15000:22;;:::i;:::-;:39;;;;;;;;15026:6;15000:39;;;;15034:1;15000:39;;;;15037:1;15000:39;;;;;15046:6;;;;;;;;;;;:18;;;15081:11;15094:7;15046:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15118:4;15111:11;;;;14084:1044;;;;;:::o;6058:26::-;;;;;;;;;;;;;:::o;15134:781::-;15232:12;15272:10;15261:21;;:7;:21;;;;15253:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15439:1;15417:24;;:10;:24;;;;15409:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15594:1;15575:21;;:7;:21;;;;15567:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15722:29;;:::i;:::-;:53;;;;;;;;15755:10;15722:53;;;;;;;;15767:7;15722:53;;;;;;;;;15782:22;;:::i;:::-;:40;;;;;;;;15808:10;15782:40;;;;15820:1;15782:40;;;;;15829:6;;;;;;;;;;;:17;;;15868:11;15881:7;15829:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15905:4;15898:11;;;;15134:781;;;;:::o;5923:27::-;;;;:::o;5767:29::-;;;;;;;;;;;;;:::o;11459:647::-;11568:12;11611;;;;;;;;;;;11597:26;;:10;:26;;;:51;;;;11641:7;:5;:7::i;:::-;11627:21;;:10;:21;;;11597:51;:88;;;;11675:10;:8;:10::i;:::-;11652:33;;11660:10;11652:33;;;11597:88;11589:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11871:1;11848:25;;:11;:25;;;;11840:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12022:6;11985:10;:23;11996:11;11985:23;;;;;;;;;;;;;;;:34;12009:9;11985:34;;;;;;;;;;;;;;;:43;;;;12062:9;12040:40;;12049:11;12040:40;;;12073:6;12040:40;;;;;;;;;;;;;;;;;;12096:4;12089:11;;11459:647;;;;;:::o;8350:422::-;8436:12;8479;;;;;;;;;;;8465:26;;:10;:26;;;:60;;;;8518:7;:5;:7::i;:::-;8495:30;;8503:10;8495:30;;;8465:60;:97;;;;8552:10;:8;:10::i;:::-;8529:33;;8537:10;8529:33;;;8465:97;8457:247;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8730:16;8713:14;:33;;;;8762:4;8755:11;;8350:422;;;:::o;7929:415::-;8011:12;8054;;;;;;;;;;;8040:26;;:10;:26;;;:60;;;;8093:7;:5;:7::i;:::-;8070:30;;8078:10;8070:30;;;8040:60;:97;;;;8127:10;:8;:10::i;:::-;8104:33;;8112:10;8104:33;;;8040:97;8032:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8304:14;8289:12;:29;;;;8334:4;8327:11;;7929:415;;;:::o;7049:118::-;7116:12;7144:8;:17;7153:7;7144:17;;;;;;;;;;;;;;;;7137:24;;7049:118;;;:::o;6939:104::-;6995:12;7023:14;;7016:21;;6939:104;:::o;9293:207::-;9406:12;4286;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9456:9:::1;9434:40;;9443:11;9434:40;;;9467:6;9434:40;;;;;;;;;;;;;;;;;;9490:4;9483:11;;9293:207:::0;;;;;:::o;7778:145::-;7862:12;4451;:10;:12::i;:::-;4433:30;;:14;;;;;;;;;;;:30;;;4425:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7890:7:::1;7883:4;:14;;;;;;;;;;;;:::i;:::-;;7913:4;7906:11;;7778:145:::0;;;:::o;7329:129::-;7401:21;7438:14;;;;;;;;;;;7431:21;;7329:129;:::o;3956:72::-;3993:7;4016:6;;;;;;;;;;;4009:13;;3956:72;:::o;4751:175::-;4171:12;:10;:12::i;:::-;4161:22;;:6;;;;;;;;;;;:22;;;4153:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4841:16:::1;;;;;;;;;;;4840:17;4832:26;;;::::0;::::1;;4882:8;4865:14;;:25;;;;;;;;;;;;;;;;;;4916:4;4897:16;;:23;;;;;;;;;;;;;;;;;;4751:175:::0;:::o;6025:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9756:1697::-;9899:12;9942;;;;;;;;;;;9928:26;;:10;:26;;;:60;;;;9981:7;:5;:7::i;:::-;9958:30;;9966:10;9958:30;;;9928:60;:97;;;;10015:10;:8;:10::i;:::-;9992:33;;10000:10;9992:33;;;9928:97;9920:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10203:9;10188:24;;:11;:24;;;;10180:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10339:1;10330:6;:10;10322:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10461:1;10440:23;;:9;:23;;;10436:938;;;10507:6;10482:8;:21;10491:11;10482:21;;;;;;;;;;;;;;;;:31;;10474:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10638:33;10664:6;10638:8;:21;10647:11;10638:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;10614:8;:21;10623:11;10614:21;;;;;;;;;;;;;;;:57;;;;10697:26;10716:6;10697:14;;:18;;:26;;;;:::i;:::-;10680:14;:43;;;;10736:27;10732:93;;;10791:24;10808:6;10791:12;;:16;;:24;;;;:::i;:::-;10776:12;:39;;;;10732:93;10436:938;;;10865:1;10842:25;;:11;:25;;;10838:536;;;10900:31;10924:6;10900:8;:19;10909:9;10900:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;10878:8;:19;10887:9;10878:19;;;;;;;;;;;;;;;:53;;;;10957:26;10976:6;10957:14;;:18;;:26;;;;:::i;:::-;10940:14;:43;;;;10996:27;10992:93;;;11051:24;11068:6;11051:12;;:16;;:24;;;;:::i;:::-;11036:12;:39;;;;10992:93;10838:536;;;11140:6;11115:8;:21;11124:11;11115:21;;;;;;;;;;;;;;;;:31;;11107:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11271:33;11297:6;11271:8;:21;11280:11;11271:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;11247:8;:21;11256:11;11247:21;;;;;;;;;;;;;;;:57;;;;11335:31;11359:6;11335:8;:19;11344:9;11335:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;11313:8;:19;11322:9;11313:19;;;;;;;;;;;;;;;:53;;;;10838:536;10436:938;11409:9;11387:40;;11396:11;11387:40;;;11420:6;11387:40;;;;;;;;;;;;;;;;;;11443:4;11436:11;;9756:1697;;;;;;:::o;15921:792::-;16024:12;16064:10;16053:21;;:7;:21;;;;16045:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16231:1;16209:24;;:10;:24;;;;16201:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16386:1;16367:21;;:7;:21;;;;16359:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16515:29;;:::i;:::-;:53;;;;;;;;16548:10;16515:53;;;;;;;;16560:7;16515:53;;;;;;;;;16575:22;;:::i;:::-;:45;;;;;;;;16601:15;16575:45;;;;16618:1;16575:45;;;;;16627:6;;;;;;;;;;;:17;;;16666:11;16679:7;16627:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16703:4;16696:11;;;;15921:792;;;;:::o;5955:29::-;;;;:::o;12554:817::-;12641:12;12683:10;12670:23;;:9;:23;;;;12662:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:1;12807:24;;:10;:24;;;;12799:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12952:8;:20;12961:10;12952:20;;;;;;;;;;;;;;;;12942:6;:30;;12934:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13085:1;13076:6;:10;13068:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13189:29;;:::i;:::-;:55;;;;;;;;13222:10;13189:55;;;;;;;;13234:9;13189:55;;;;;;;;;13251:22;;:::i;:::-;:36;;;;;;;;13277:6;13251:36;;;;13285:1;13251:36;;;;;13294:6;;;;;;;;;;;:17;;;13324:11;13337:7;13294:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13361:4;13354:11;;;;12554:817;;;;:::o;8778:435::-;8855:12;8898;;;;;;;;;;;8884:26;;:10;:26;;;:60;;;;8937:7;:5;:7::i;:::-;8914:30;;8922:10;8914:30;;;8884:60;:97;;;;8971:10;:8;:10::i;:::-;8948:33;;8956:10;8948:33;;;8884:97;8876:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9147:9;9130:14;:26;;;;9178:9;9163:12;:24;;;;9203:4;9196:11;;8778:435;;;:::o;7464:125::-;7534:21;7571:12;;;;;;;;;;;7564:19;;7464:125;:::o;7173:150::-;7263:12;7291:10;:17;7302:5;7291:17;;;;;;;;;;;;;;;:26;7309:7;7291:26;;;;;;;;;;;;;;;;7284:33;;7173:150;;;;:::o;5735:27::-;;;;;;;;;;;;:::o;9548:182::-;9649:12;4286;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9698:6:::1;9672:8;:23;9681:13;9672:23;;;;;;;;;;;;;;;:32;;;;9720:4;9713:11;;9548:182:::0;;;;:::o;7619:153::-;7707:12;4451;:10;:12::i;:::-;4433:30;;:14;;;;;;;;;;;:30;;;4425:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7737:9:::1;7728:6;:18;;;;;;;;;;;;:::i;:::-;;7762:4;7755:11;;7619:153:::0;;;:::o;4932:230::-;4286:12;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5037:1:::1;5017:22;;:8;:22;;;;5009:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5123:8;5094:38;;5115:6;;;;;;;;;;;5094:38;;;;;;;;;;;;5148:8;5139:6;;:17;;;;;;;;;;;;;;;;;;4932:230:::0;:::o;5168:205::-;4451:12;:10;:12::i;:::-;4433:30;;:14;;;;;;;;;;;:30;;;4425:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5290:1:::1;5270:22;;:8;:22;;;;5262:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5359:8;5342:14;;:25;;;;;;;;;;;;;;;;;;5168:205:::0;:::o;1103:99::-;1155:15;1186:10;1179:17;;1103:99;:::o;4034:85::-;4076:7;4099:14;;;;;;;;;;;4092:21;;4034:85;:::o;524:129::-;581:7;604:43;608:1;611;604:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;597:50;;524:129;;;;:::o;352:166::-;409:7;425:9;441:1;437;:5;425:17;;462:1;457;:6;;449:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;511:1;504:8;;;352:166;;;;:::o;659:177::-;744:7;773:1;768;:6;;776:12;760:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;796:9;812:1;808;:5;796:17;;829:1;822:8;;;659:177;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://1e6cb1f58911c4fd84e7a88c842bb8f5607a72d449ce5a41d17561aec2f58be0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.