⚠️ ⚠️ ⚠️ This explorer will be deprecated soon, please use PolygonScan.com

Contract Address Details

0x839c2D3aDe63DF5b0b8F3E57D5e145057Ab41556

InstaList Last Balance Update: Block #15676035
Created by 0xf68390–47c21e at 0x886527–748bd4

Balance

0 MATIC

(@ /MATIC)

Fetching tokens...

Contract name:
InstaList




Optimization enabled
false
Compiler version
v0.7.0+commit.9e61f92b




EVM Version
default

Constructor Arguments

000000000000000000000000a9b99766e6c676cf1975c0d3166f96c0848ff5ad

Arg [0] (address) : 0xa9b99766e6c676cf1975c0d3166f96c0848ff5ad

              

Contract source code

/**
* Submitted for verification at blockscout.com on 2021-04-03 00:26:10.869397Z
*/
// Sources flattened with hardhat v2.0.8 https://hardhat.org
// File contracts/registry/list.sol
pragma solidity ^0.7.0;
/**
* @title InstaList
* @dev Registry For DeFi Smart Account Authorised user.
*/
interface AccountInterface {
function isAuth(address _user) external view returns (bool);
}
contract DSMath {
function add(uint64 x, uint64 y) internal pure returns (uint64 z) {
require((z = x + y) >= x, "ds-math-add-overflow");
}
function sub(uint64 x, uint64 y) internal pure returns (uint64 z) {
require((z = x - y) <= x, "ds-math-sub-underflow");
}
}
contract Variables is DSMath {
// InstaIndex Address.
address public immutable instaIndex;
constructor (address _instaIndex) {
instaIndex = _instaIndex;
}
// Smart Account Count.
uint64 public accounts;
// Smart Account ID (Smart Account Address => Account ID).
mapping (address => uint64) public accountID;
// Smart Account Address (Smart Account ID => Smart Account Address).
mapping (uint64 => address) public accountAddr;
// User Link (User Address => UserLink(Account ID of First and Last And Count of Smart Accounts)).
mapping (address => UserLink) public userLink;
// Linked List of Users (User Address => Smart Account ID => UserList(Previous and next Account ID)).
mapping (address => mapping(uint64 => UserList)) public userList;
struct UserLink {
uint64 first;
uint64 last;
uint64 count;
}
struct UserList {
uint64 prev;
uint64 next;
}
// Account Link (Smart Account ID => AccountLink).
mapping (uint64 => AccountLink) public accountLink; // account => account linked list connection
// Linked List of Accounts (Smart Account ID => Account Address => AccountList).
mapping (uint64 => mapping (address => AccountList)) public accountList; // account => user address => list
struct AccountLink {
address first;
address last;
uint64 count;
}
struct AccountList {
address prev;
address next;
}
}
contract Configure is Variables {
constructor (address _instaIndex) Variables(_instaIndex) {
}
/**
* @dev Add Account to User Linked List.
* @param _owner Account Owner.
* @param _account Smart Account Address.
*/
function addAccount(address _owner, uint64 _account) internal {
if (userLink[_owner].last != 0) {
userList[_owner][_account].prev = userLink[_owner].last;
userList[_owner][userLink[_owner].last].next = _account;
}
if (userLink[_owner].first == 0) userLink[_owner].first = _account;
userLink[_owner].last = _account;
userLink[_owner].count = add(userLink[_owner].count, 1);
}
/**
* @dev Remove Account from User Linked List.
* @param _owner Account Owner/User.
* @param _account Smart Account Address.
*/
function removeAccount(address _owner, uint64 _account) internal {
uint64 _prev = userList[_owner][_account].prev;
uint64 _next = userList[_owner][_account].next;
if (_prev != 0) userList[_owner][_prev].next = _next;
if (_next != 0) userList[_owner][_next].prev = _prev;
if (_prev == 0) userLink[_owner].first = _next;
if (_next == 0) userLink[_owner].last = _prev;
userLink[_owner].count = sub(userLink[_owner].count, 1);
delete userList[_owner][_account];
}
/**
* @dev Add Owner to Account Linked List.
* @param _owner Account Owner.
* @param _account Smart Account Address.
*/
function addUser(address _owner, uint64 _account) internal {
if (accountLink[_account].last != address(0)) {
accountList[_account][_owner].prev = accountLink[_account].last;
accountList[_account][accountLink[_account].last].next = _owner;
}
if (accountLink[_account].first == address(0)) accountLink[_account].first = _owner;
accountLink[_account].last = _owner;
accountLink[_account].count = add(accountLink[_account].count, 1);
}
/**
* @dev Remove Owner from Account Linked List.
* @param _owner Account Owner.
* @param _account Smart Account Address.
*/
function removeUser(address _owner, uint64 _account) internal {
address _prev = accountList[_account][_owner].prev;
address _next = accountList[_account][_owner].next;
if (_prev != address(0)) accountList[_account][_prev].next = _next;
if (_next != address(0)) accountList[_account][_next].prev = _prev;
if (_prev == address(0)) accountLink[_account].first = _next;
if (_next == address(0)) accountLink[_account].last = _prev;
accountLink[_account].count = sub(accountLink[_account].count, 1);
delete accountList[_account][_owner];
}
}
contract InstaList is Configure {
constructor (address _instaIndex) public Configure(_instaIndex) {}
/**
* @dev Enable Auth for Smart Account.
* @param _owner Owner Address.
*/
function addAuth(address _owner) external {
require(accountID[msg.sender] != 0, "not-account");
require(AccountInterface(msg.sender).isAuth(_owner), "not-owner");
addAccount(_owner, accountID[msg.sender]);
addUser(_owner, accountID[msg.sender]);
}
/**
* @dev Disable Auth for Smart Account.
* @param _owner Owner Address.
*/
function removeAuth(address _owner) external {
require(accountID[msg.sender] != 0, "not-account");
require(!AccountInterface(msg.sender).isAuth(_owner), "already-owner");
removeAccount(_owner, accountID[msg.sender]);
removeUser(_owner, accountID[msg.sender]);
}
/**
* @dev Setup Initial configuration of Smart Account.
* @param _account Smart Account Address.
*/
function init(address _account) external {
require(msg.sender == instaIndex, "not-index");
accounts++;
accountID[_account] = accounts;
accountAddr[accounts] = _account;
}
}

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_instaIndex","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"accountAddr","inputs":[{"type":"uint64","name":"","internalType":"uint64"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"accountID","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"first","internalType":"address"},{"type":"address","name":"last","internalType":"address"},{"type":"uint64","name":"count","internalType":"uint64"}],"name":"accountLink","inputs":[{"type":"uint64","name":"","internalType":"uint64"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"prev","internalType":"address"},{"type":"address","name":"next","internalType":"address"}],"name":"accountList","inputs":[{"type":"uint64","name":"","internalType":"uint64"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"accounts","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addAuth","inputs":[{"type":"address","name":"_owner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"init","inputs":[{"type":"address","name":"_account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"instaIndex","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeAuth","inputs":[{"type":"address","name":"_owner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"first","internalType":"uint64"},{"type":"uint64","name":"last","internalType":"uint64"},{"type":"uint64","name":"count","internalType":"uint64"}],"name":"userLink","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"prev","internalType":"uint64"},{"type":"uint64","name":"next","internalType":"uint64"}],"name":"userList","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint64","name":"","internalType":"uint64"}]}]
            

Contract Byte Code

0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80636cfaf5e9116100715780636cfaf5e91461025f578063748e6e18146102c15780637f3fd918146103485780638028a9fd1461038c578063a41098bf1461041c578063f227a99f14610450576100a9565b806319ab453c146100ae5780635422224e146100f25780635f3c37f91461013657806360330d79146101d557806368cd03f614610237575b600080fd5b6100f0600480360360208110156100c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104d4565b005b6101346004803603602081101561010857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106d3565b005b61018c6004803603604081101561014c57600080fd5b81019080803567ffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610978565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b61020b600480360360208110156101eb57600080fd5b81019080803567ffffffffffffffff1690602001909291905050506109e9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61023f610a1c565b604051808267ffffffffffffffff16815260200191505060405180910390f35b6102a16004803603602081101561027557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a34565b604051808267ffffffffffffffff16815260200191505060405180910390f35b610317600480360360408110156102d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050610a5b565b604051808367ffffffffffffffff1681526020018267ffffffffffffffff1681526020019250505060405180910390f35b61038a6004803603602081101561035e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ab4565b005b6103c2600480360360208110156103a257600080fd5b81019080803567ffffffffffffffff169060200190929190505050610d5a565b604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018267ffffffffffffffff168152602001935050505060405180910390f35b610424610dd8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104926004803603602081101561046657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dfc565b604051808467ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff168152602001935050505060405180910390f35b7f000000000000000000000000a9b99766e6c676cf1975c0d3166f96c0848ff5ad73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610595576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f742d696e646578000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008081819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505060008054906101000a900467ffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600260008060009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614156107a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6e6f742d6163636f756e7400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16632520e7ff826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561080e57600080fd5b505afa158015610822573d6000803e3d6000fd5b505050506040513d602081101561083857600080fd5b81019080805190602001909291905050506108bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f742d6f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61091881600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff16610e62565b61097581600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff1661129c565b50565b6006602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900467ffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900467ffffffffffffffff1681565b6004602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16905082565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415610b88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6e6f742d6163636f756e7400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16632520e7ff826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610bef57600080fd5b505afa158015610c03573d6000803e3d6000fd5b505050506040513d6020811015610c1957600080fd5b810190808051906020019092919050505015610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f616c72656164792d6f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b610cfa81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff166116ea565b610d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff16611b92565b50565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900467ffffffffffffffff16905083565b7f000000000000000000000000a9b99766e6c676cf1975c0d3166f96c0848ff5ad81565b60036020528060005260406000206000915090508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16905083565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff161461109357600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff16600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614156111665780600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550611230600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a900467ffffffffffffffff1660016120f2565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff16600560008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114fb57600560008267ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206000600560008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600560008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115e45781600560008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81600560008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611696600560008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160149054906101000a900467ffffffffffffffff1660016120f2565b600560008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1690506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff16905060008267ffffffffffffffff161461188b5780600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b60008167ffffffffffffffff161461192c5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b60008267ffffffffffffffff1614156119a95780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b60008167ffffffffffffffff161415611a265781600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611a87600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a900467ffffffffffffffff166001612189565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008467ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600080820160006101000a81549067ffffffffffffffff02191690556000820160086101000a81549067ffffffffffffffff0219169055505050505050565b6000600660008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600660008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d855780600660008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e605781600660008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eff5780600560008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f9e5781600560008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b611fe7600560008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160149054906101000a900467ffffffffffffffff166001612189565b600560008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600660008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050565b60008267ffffffffffffffff1682840191508167ffffffffffffffff161015612183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b60008267ffffffffffffffff1682840391508167ffffffffffffffff16111561221a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b9291505056fea26469706673582212204ce34ce52d5dd22f50f7e73ee1bb5bbd0e376efa5a456e0b452ec5f513bd9d0064736f6c63430007000033