More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 744 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Monthly To... | 18241027 | 462 days ago | IN | 0 ETH | 0.0012214 | ||||
Claim Monthly To... | 18241024 | 462 days ago | IN | 0 ETH | 0.00340903 | ||||
Claim Monthly To... | 18240899 | 462 days ago | IN | 0 ETH | 0.0010558 | ||||
Claim Monthly To... | 17689131 | 539 days ago | IN | 0 ETH | 0.00138309 | ||||
Claim Monthly To... | 16657006 | 685 days ago | IN | 0 ETH | 0.00072868 | ||||
Claim Monthly To... | 16557050 | 699 days ago | IN | 0 ETH | 0.00176029 | ||||
Claim Monthly To... | 16465035 | 712 days ago | IN | 0 ETH | 0.00197462 | ||||
Claim Monthly To... | 16230787 | 744 days ago | IN | 0 ETH | 0.00098801 | ||||
Claim Monthly To... | 16005468 | 776 days ago | IN | 0 ETH | 0.00107633 | ||||
Claim Monthly To... | 15915461 | 788 days ago | IN | 0 ETH | 0.00031931 | ||||
Claim Initial To... | 15915460 | 788 days ago | IN | 0 ETH | 0.00032685 | ||||
Claim Monthly To... | 15910326 | 789 days ago | IN | 0 ETH | 0.00098963 | ||||
Claim Monthly To... | 15740879 | 813 days ago | IN | 0 ETH | 0.0019565 | ||||
Claim Initial To... | 15740868 | 813 days ago | IN | 0 ETH | 0.00072408 | ||||
Claim Monthly To... | 15723298 | 815 days ago | IN | 0 ETH | 0.00235618 | ||||
Claim Initial To... | 15723274 | 815 days ago | IN | 0 ETH | 0.00069175 | ||||
Claim Initial To... | 15723268 | 815 days ago | IN | 0 ETH | 0.00073079 | ||||
Claim Monthly To... | 15701579 | 818 days ago | IN | 0 ETH | 0.00061499 | ||||
Claim Monthly To... | 15677342 | 822 days ago | IN | 0 ETH | 0.00110165 | ||||
Claim Monthly To... | 15631447 | 828 days ago | IN | 0 ETH | 0.00095348 | ||||
Claim Monthly To... | 15519638 | 844 days ago | IN | 0 ETH | 0.00060656 | ||||
Claim Monthly To... | 15438104 | 857 days ago | IN | 0 ETH | 0.00119823 | ||||
Claim Monthly To... | 15335275 | 874 days ago | IN | 0 ETH | 0.00058264 | ||||
Claim Initial To... | 15335273 | 874 days ago | IN | 0 ETH | 0.0002551 | ||||
Claim Monthly To... | 15096232 | 911 days ago | IN | 0 ETH | 0.00097322 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BRingClaim
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-05-03 */ // SPDX-License-Identifier: MIT pragma solidity >=0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } enum Round { Strategic, Private, Team } struct Investor { uint256 boughtTokens; uint256 initialPercent; uint256 monthlyPercent; bool initialRewardReceived; uint256 monthlyRewardsReceived; uint256 totalPercentReceived; uint256 totalReceived; } contract BRingClaim is Ownable { using SafeMath for uint256; address public TOKEN_CONTRACT_ADDRESS = address(0x3Ecb96039340630c8B82E5A7732bc88b2aeadE82); uint256 public constant CLAIMING_PERIOD = 30 days; uint256 public STRATEGIC_ROUND_START_TIME; uint256 public PRIVATE_ROUND_START_TIME; uint256 public TEAM_ROUND_START_TIME; mapping(address => Investor)[3] public investors; mapping(address => uint256) public claimedTokens; event NewAddress(address indexed _address, uint256 _boughtTokens, Round indexed _round, uint256 _initialPercent, uint256 _monthlyPercent); event RoundTimeConfigured(Round _round, uint256 _time); event InitialClaimWithdrawn(address indexed _address, Round indexed _round, uint256 _tokensAmount); event MonthlyClaimWithdrawn(address indexed _address, Round indexed _round, uint256 _tokensAmount); constructor() { addAddress(address(0x1958662bF4b23B638cBa463C134D2Cf414027288), 500 ether, Round.Private, 15, 5); addAddress(address(0xa187dC724624877a97F5d02734E9871E2427C3B7), 2000 ether, Round.Private, 15, 5); addAddress(address(0x56373aec74a28117BA5bD85cca8bfCec515453f0), 1000 ether, Round.Private, 15, 5); addAddress(address(0x02fEC1e5e224Da14Dfe29237042D56a96523949E), 1000 ether, Round.Private, 15, 5); addAddress(address(0x98Ff7895075fE2978eCe7580F74f4025E396A732), 1000 ether, Round.Private, 15, 5); addAddress(address(0x5e4B9eE7Bc57D77e13b050e078885651B4D092cc), 800 ether, Round.Private, 15, 5); addAddress(address(0x380351fEfAAabcAFF0aBE9e5609c3f5089B59d52), 325 ether, Round.Private, 15, 5); addAddress(address(0xc557936e8D79aDc6b9dCA2C67D9a7b1A47391d87), 1000 ether, Round.Private, 15, 5); addAddress(address(0x121D26685013baf726e309F5762ecEe520Fcc702), 1000 ether, Round.Private, 15, 5); addAddress(address(0x8cEC27A195145143E0B6e75574e0ebCD0C0D4805), 1000 ether, Round.Private, 15, 5); addAddress(address(0xBba738A1A98a3F2E7312Ca71896416f69F9e7bf2), 1000 ether, Round.Private, 15, 5); addAddress(address(0xA4d3eA01e5205f349aFfa727632d6B8b6FC28Da9), 700 ether, Round.Private, 15, 5); addAddress(address(0xFB3018F1366219eD3fE8CE1B844860F9c4Fac5e7), 250 ether, Round.Private, 15, 5); addAddress(address(0xc7d23FE48F3DAE21b5B91568eDFF2a103b1E2E6A), 1000 ether, Round.Private, 15, 5); addAddress(address(0x0D1f7fd6DcccB4e9C00Fe1c0F869543813F342c0), 2000 ether, Round.Private, 15, 5); addAddress(address(0x7604100fc7d73FB2179dafd86A93a3215502ebae), 2000 ether, Round.Private, 15, 5); addAddress(address(0xF9c229512B62434eB5dE37823C9c899c100B9050), 300 ether, Round.Private, 15, 5); addAddress(address(0x68daaf91EaAA05f56Fb929441E646f4E190C8e9A), 1000 ether, Round.Private, 15, 5); addAddress(address(0xb74B327CC230fDa53E5b0262C2773fced1e8Ab2d), 1000 ether, Round.Private, 15, 5); addAddress(address(0xFf3D84eC5A84A71Db1ada84E66D90395c81d7ba2), 2000 ether, Round.Private, 15, 5); addAddress(address(0xb2AbB01a1896673Bf166830C5dC01fB35c0C9F67), 500 ether, Round.Private, 15, 5); addAddress(address(0x8fBAadd3a7ae19C66EA9f00502626988313ac96c), 1000 ether, Round.Private, 15, 5); addAddress(address(0xFC5374ABf90Bc9217fd88628E4847dD27950B92c), 1000 ether, Round.Private, 15, 5); addAddress(address(0xaADA0f64aA9e3Fa0461eF5efAcD1D879D5e66848), 3000 ether, Round.Private, 15, 5); addAddress(address(0xB15d2ABeC2CDB7d41b30C4537203EF15a509fBB5), 600 ether, Round.Private, 15, 5); addAddress(address(0xa31978A297a8e78E7c8AeF86eEC055786d65804D), 500 ether, Round.Private, 15, 5); addAddress(address(0xAe3E0020b64bc91C373012aa3B01ec4ff85ef581), 1000 ether, Round.Private, 15, 5); addAddress(address(0x691B48454D5E2aCc7bb8aCB4a7a992a983Af2872), 500 ether, Round.Private, 15, 5); addAddress(address(0xd40f0D8f08Eb702Ce5b4Aa039a7B004043433098), 400 ether, Round.Private, 15, 5); addAddress(address(0x202be7E4F66ab72Fe6Cf042938c7A19eA332f112), 300 ether, Round.Private, 15, 5); addAddress(address(0x8084d3FB905F31663153898FE034Dce72B7D2297), 450 ether, Round.Private, 15, 5); addAddress(address(0x3e8204402560493824e5D75fF2333128D7e9F109), 1000 ether, Round.Private, 15, 5); addAddress(address(0x1dC122dB61D53A8E088d63Af743F4D4c713e8A20), 500 ether, Round.Private, 15, 5); addAddress(address(0x0269ACB6DC3f5672A2295e018896Eb75095D790A), 500 ether, Round.Private, 15, 5); addAddress(address(0xDDF33967Ff57A679E3B65f8f70eE393e075Bfa59), 1000 ether, Round.Private, 15, 5); addAddress(address(0x9C5366709CA3889c4E4E27693301B456d5213a13), 500 ether, Round.Private, 15, 5); addAddress(address(0xB234A630062161F8376507e773e23bC4cBa49676), 1000 ether, Round.Private, 15, 5); addAddress(address(0xD1A7Ed463BbeE05a6BFb6e2e8912677214A30d19), 2000 ether, Round.Private, 15, 5); addAddress(address(0x7E2FF036697A7D4614E549B8e6E0AaF123B5F8Bf), 1000 ether, Round.Private, 15, 5); addAddress(address(0xCbB74E8eAbCD36B160D1fC3BEd7bc6E52D327632), 3000 ether, Round.Private, 15, 5); addAddress(address(0xd90dF6D33d457e87949dd5288B923f71F90f38ba), 1000 ether, Round.Private, 15, 5); } function init() external onlyOwner { addAddress(address(0x494E35c0A11dc16a109fc161d785385F874F2359), 1000 ether, Round.Private, 15, 5); addAddress(address(0x9349284Cc71056d28885c18036ea9bCBc2436959), 1000 ether, Round.Private, 15, 5); addAddress(address(0x80182C753895eceB93F78b9df66741A59cda5d0F), 1000 ether, Round.Private, 15, 5); addAddress(address(0x46A659Ad8aEcB89Df20Cf37A96C307299e9A4d74), 1000 ether, Round.Private, 15, 5); addAddress(address(0x646e41e681c94b5dAC8E9dFbd9DDA3BbC1CC6563), 1000 ether, Round.Private, 15, 5); addAddress(address(0x059236F121b5721cfbf3c56e9C49c3A0a7b45AcF), 1000 ether, Round.Private, 15, 5); addAddress(address(0x881e1Fb021469Ac31A00D393BaB2e7b7c0e99CAc), 2000 ether, Round.Private, 15, 5); addAddress(address(0x50b3E08D5c3a2386e0c9585031B1152a5f0E2370), 3000 ether, Round.Private, 15, 5); addAddress(address(0x0B0907E91724A293DF256A0064d931aD9f1F6Ead), 1000 ether, Round.Private, 15, 5); addAddress(address(0x9fb358896C9B2f872be9006E80bBAa810b8E142d), 1000 ether, Round.Private, 15, 5); addAddress(address(0x64ec24675d7bbC80f954FF15EDD57d381f5b3E1a), 1000 ether, Round.Private, 15, 5); addAddress(address(0xe64eF0c08E4F0039faD4B4dDe982541D3Aa30381), 500 ether, Round.Private, 15, 5); addAddress(address(0x50899582199c06d5264edDCD12879E5210783Ba8), 1500 ether, Round.Private, 15, 5); addAddress(address(0xaC6dE9f16c7b9B44C4e5C9073C3a10fA45aB4d5a), 15000 ether, Round.Private, 15, 5); addAddress(address(0x2c8AF617E2f0908bd4F39dC534de13bf31D6c604), 1000 ether, Round.Private, 15, 5); addAddress(address(0x1F89f28490E4F4a544dF6F23782F19b9dC0855dB), 1000 ether, Round.Private, 15, 5); addAddress(address(0xa4daf8feD578EcbF4B0a507a8Ac9C9deB16C5e73), 1500 ether, Round.Private, 15, 5); addAddress(address(0x2a2619e81D61C09aa9206535BAc1B7A5921EA050), 1500 ether, Round.Private, 15, 5); addAddress(address(0xB67e49A45858F3CBf2bC2026A4347B5518279798), 1000 ether, Round.Private, 15, 5); addAddress(address(0x423Ad4906d23DF9fb8a09D383280f9289C1C73dB), 1000 ether, Round.Private, 15, 5); addAddress(address(0x5210474644728370626bf848707c55F1d8159E34), 1000 ether, Round.Private, 15, 5); addAddress(address(0x33a44839BD3544b08a5f315125199cc2Cd64cAc6), 1000 ether, Round.Private, 15, 5); addAddress(address(0xeB3Ed720c708152065d9119E63C3D7e727CFA789), 500 ether, Round.Private, 15, 5); addAddress(address(0xb0dcE0A78E7602Ca791fFd8a6A9Aa86D4375452b), 500 ether, Round.Private, 15, 5); addAddress(address(0x4f70eD6b19cc733D5C45A40250227C0c020Ab3cD), 1000 ether, Round.Private, 15, 5); addAddress(address(0xBa172e6BA2Adf181F18fcb698B77F3f9b5531F45), 500 ether, Round.Private, 15, 5); addAddress(address(0xe92D80a90bc050A12F1c6fBE0e50e1B5A874B595), 2000 ether, Round.Private, 15, 5); addAddress(address(0xd62a38Bd99376013D485214CC968322C20A6cC40), 2500 ether, Round.Private, 15, 5); addAddress(address(0x399b282c17F8ed9F542C2376917947d6B79E2Cc6), 1000 ether, Round.Private, 15, 5); addAddress(address(0xFE932efB9dbB8E563E95CEe05ce106509cF06905), 500 ether, Round.Private, 15, 5); addAddress(address(0x9Fa68bc48398e4c9716226FF410D26C5487E679c), 500 ether, Round.Private, 15, 5); addAddress(address(0x2fb8bd9D8D50acc377E2629d124C7dcD0388ab24), 1500 ether, Round.Private, 15, 5); addAddress(address(0xD16E4384225B313204AdafE41bDb866e710899A6), 500 ether, Round.Private, 15, 5); addAddress(address(0x54D07CFa91F05Fe3B45d8810feF05705117AFe53), 7500 ether, Round.Private, 15, 5); addAddress(address(0x782dB3aE31A7406849C84f9BB0189DEFDd26b4D2), 1000 ether, Round.Private, 15, 5); addAddress(address(0xa44A524DEd85efCD0a671771327b5e75B0Fe6964), 500 ether, Round.Private, 15, 5); } function init2() external onlyOwner { addAddress(address(0x44833Cf54c530525d1b37c38CB342e63bc879857), 10000 ether, Round.Private, 15, 5); addAddress(address(0xAef18C8794cA00e914E318743732AE4E32c1b614), 100000 ether, Round.Private, 15, 5); addAddress(address(0xBfe663805129915942980bC86BD832aB031Bb2f9), 40000 ether, Round.Private, 15, 5); addAddress(address(0xB6b49986253f9234D2526cd5F8e94Ceb4Ae62D25), 20000 ether, Round.Private, 15, 5); addAddress(address(0xC199f30251e9cef67C6B89a695E99C66F996DEA0), 10000 ether, Round.Private, 15, 5); addAddress(address(0xd33619B122B27f712AA5F784BC54DE9c95c7588d), 5000 ether, Round.Private, 15, 5); addAddress(address(0x53F470A909d7CE7f35e62f4470fD440B1eD5D8CD), 25000 ether, Round.Private, 15, 5); addAddress(address(0xCF280dF3da6405EabF27E1d85e2c03d3B9047309), 50000 ether, Round.Strategic, 10, 5); addAddress(address(0x12e8987C762701d60f0FcfeE687Bb8E4c07555aa), 10000 ether, Round.Strategic, 10, 5); addAddress(address(0x53F470A909d7CE7f35e62f4470fD440B1eD5D8CD), 50000 ether, Round.Strategic, 10, 5); } function init3() external onlyOwner { addAddress(address(0x13aEEC0Bc33FBb015800c45514C7B58a73c13979), 350 ether, Round.Private, 15, 5); addAddress(address(0x108B3731b012C4F2Cd11E777EDb6dB4f92216aBC), 1000 ether, Round.Private, 15, 5); addAddress(address(0xF2Dc8De5D42BE1f1Fd916f4e532E051351d71aa5), 2001 ether, Round.Private, 15, 5); addAddress(address(0x77EC698AFcBAA2e55522B050eB595CE2E75cea3E), 1000 ether, Round.Private, 15, 5); addAddress(address(0xff356f8726b337a8b12fd28077C1601F88a67fBd), 500 ether, Round.Private, 15, 5); addAddress(address(0x50693E63A0Abb825B1Ba99564954D45B6e45A632), 2000 ether, Round.Private, 15, 5); addAddress(address(0x20997325098692337A03961317eBf912Bf913b65), 2000 ether, Round.Private, 15, 5); addAddress(address(0x5fb716a4B09d42F5894f3a2C7D3da3Ee1711c3f8), 1000 ether, Round.Private, 15, 5); addAddress(address(0x5b4630ECC58BE1De71aD53b3699850A49E892d32), 2000 ether, Round.Private, 15, 5); addAddress(address(0xa01DfAf99c765Dc3f3a6BDDb9afdC1797CF6493E), 500 ether, Round.Private, 15, 5); addAddress(address(0x2c4b8AD42b4b9984E56Da0dbf3b2362D096F7574), 380 ether, Round.Private, 15, 5); addAddress(address(0x25B77f97b373556469Fed882f35832BceA6Ca931), 2000 ether, Round.Private, 15, 5); addAddress(address(0x7d0B9F4f0C9a476A6E9B1Dd05BB228A85b82Af2d), 2000 ether, Round.Private, 15, 5); addAddress(address(0x7Fd7eA0043De720F8aAe10E0ccb232A5905F0e27), 1938 ether, Round.Private, 15, 5); addAddress(address(0x337ab2c4e48b8b65Da792c22665282184f9E5AA8), 1388 ether, Round.Private, 15, 5); addAddress(address(0x68303a858D10f9cfF32373e3f5Ca6B2a13Af8c3c), 2000 ether, Round.Private, 15, 5); addAddress(address(0x10E6dAD4bB48ae5F8B73D140d61dc2057Df25a5f), 1980 ether, Round.Private, 15, 5); addAddress(address(0x90b956D2A705F8BF79a70DEF26cA1eb8863FC4d0), 2000 ether, Round.Private, 15, 5); addAddress(address(0x60D900365BB8cC8d8E817a7EA884b37db8923Ba1), 500 ether, Round.Private, 15, 5); addAddress(address(0xA2b2c17461C79Fe69E95a8eA9822551E72EcF6F7), 2000 ether, Round.Private, 15, 5); addAddress(address(0x723d812E1499a607bE2749a7926acD99422f4743), 250 ether, Round.Private, 15, 5); addAddress(address(0x345aACb3D6F8f84E3c09cf2c908eF413Dc34d673), 1025 ether, Round.Private, 15, 5); addAddress(address(0xf05577445FacCD1A0441061a187d810Bf5363CC6), 1000 ether, Round.Private, 15, 5); addAddress(address(0x744aAd2dfadeAAbfa07035eEDbbc7428d43124c8), 356 ether, Round.Private, 15, 5); addAddress(address(0x54DCAc795bf85f78f9c23B5d72b849E4a78e309d), 1000 ether, Round.Private, 15, 5); addAddress(address(0x0196aD265c56F2b18B708C75CE9358A0b6DF64CF), 2000 ether, Round.Private, 15, 5); addAddress(address(0x3aBa77F76f2CfbAC1389878959E24fAA1afCA68F), 500 ether, Round.Private, 15, 5); addAddress(address(0x1CBba9dE3883329b5356ADE705425Da569cf5b78), 2000 ether, Round.Private, 15, 5); addAddress(address(0xcbC4a69a93C52693A0812780f216EfAc684353b0), 1985 ether, Round.Private, 15, 5); addAddress(address(0x3B04a70f8AE1aB4009FDb5863Bdf1611b287e661), 700 ether, Round.Private, 15, 5); addAddress(address(0x444a52988A40355f6f55cEf439bc2A5F816B2c00), 980 ether, Round.Private, 15, 5); addAddress(address(0xFc134b2469BbdDa973047485F86c83dF0C4dF16D), 1230 ether, Round.Private, 15, 5); addAddress(address(0x4F9476A750Aa3dEbcd3e72340A53c590AeA288a4), 2000 ether, Round.Private, 15, 5); addAddress(address(0x5b540E038c0c263268C8997543B8271DBFb87E33), 1000 ether, Round.Private, 15, 5); addAddress(address(0x3C97c372B45cC96Fe73814721ebbE6db02C9D88E), 2000 ether, Round.Private, 15, 5); addAddress(address(0x5382A0739b47F592af1c15559c29Fe0CA44B98B3), 1200 ether, Round.Private, 15, 5); addAddress(address(0x922f2928f4d244611e8beF9e8dAD88A5B6E2B59C), 1005 ether, Round.Private, 15, 5); addAddress(address(0x4524331C52A73bdfD1668907f28a4860307201Ae), 1161 ether, Round.Private, 15, 5); addAddress(address(0x64882d0F5513c0Fdf8c6225D01971B10026AE778), 368 ether, Round.Private, 15, 5); } function batchAddAddresses(address[] memory _addresses, uint256[] memory _boughtTokensAmounts, Round _round) external onlyOwner { require(_addresses.length == _boughtTokensAmounts.length, "Invalid input data"); uint256 initialPercent; uint256 monthlyPercent; if (_round == Round.Strategic) { initialPercent = 10; monthlyPercent = 5; } else if (_round == Round.Private) { initialPercent = 15; monthlyPercent = 5; } else if (_round == Round.Team) { initialPercent = 0; monthlyPercent = 2; } for (uint8 i = 0; i < _addresses.length; i++) { addAddress(_addresses[i], _boughtTokensAmounts[i], _round, initialPercent, monthlyPercent); } } function setStrategicRoundStartTime(uint256 _timestamp) external onlyOwner { require(STRATEGIC_ROUND_START_TIME == 0, "Time is already configured"); require(_timestamp >= block.timestamp, "Trying to set time in the past"); STRATEGIC_ROUND_START_TIME = _timestamp; emit RoundTimeConfigured(Round.Strategic, _timestamp); } function setPrivateRoundStartTime(uint256 _timestamp) external onlyOwner { require(PRIVATE_ROUND_START_TIME == 0, "Time is already configured"); require(_timestamp >= block.timestamp, "Trying to set time in the past"); PRIVATE_ROUND_START_TIME = _timestamp; emit RoundTimeConfigured(Round.Private, _timestamp); } function setTeamRoundStartTime(uint256 _timestamp) external onlyOwner { require(TEAM_ROUND_START_TIME == 0, "Time is already configured"); require(_timestamp >= block.timestamp, "Trying to set time in the past"); TEAM_ROUND_START_TIME = _timestamp; emit RoundTimeConfigured(Round.Team, _timestamp); } function addAddress(address _address, uint256 _boughtTokens, Round _round, uint256 _initialPercent, uint256 _monthlyPercent) public onlyOwner { require(_address != address(0x0), "Invalid address provided"); require(_boughtTokens >= 10**9, "Invalid tokens amount"); require(_initialPercent.add(_monthlyPercent) <= 100, "Invalid percents amount"); require(investors[uint256(_round)][_address].boughtTokens == 0, "Address already exists"); investors[uint256(_round)][_address] = Investor({ boughtTokens: _boughtTokens, initialPercent: _initialPercent, monthlyPercent: _monthlyPercent, initialRewardReceived: false, monthlyRewardsReceived: 0, totalPercentReceived: 0, totalReceived: 0 }); emit NewAddress(_address, _boughtTokens, _round, _initialPercent, _monthlyPercent); } function claimInitialTokens() external { uint256 totalTokens; for (uint8 round = 0; round < 3; round++) { if (investors[round][msg.sender].boughtTokens <= 0) { continue; } if (investors[round][msg.sender].initialRewardReceived) { continue; } if (investors[round][msg.sender].initialPercent <= 0) { continue; } uint256 tokensAmount = investors[round][msg.sender].boughtTokens.mul(investors[round][msg.sender].initialPercent).div(100); investors[round][msg.sender].initialRewardReceived = true; investors[round][msg.sender].totalPercentReceived = investors[round][msg.sender].totalPercentReceived.add(investors[round][msg.sender].initialPercent); investors[round][msg.sender].totalReceived = investors[round][msg.sender].totalReceived.add(tokensAmount); totalTokens = totalTokens.add(tokensAmount); emit InitialClaimWithdrawn(msg.sender, Round(round), tokensAmount); } if (totalTokens > 0) { require(IERC20(TOKEN_CONTRACT_ADDRESS).transfer(msg.sender, totalTokens), "Tokens transfer error"); } } function claimMonthlyTokens() external { uint256 totalTokens; for (uint8 round = 0; round < 3; round++) { if (investors[round][msg.sender].boughtTokens <= 0) { continue; } if (investors[round][msg.sender].monthlyPercent <= 0) { continue; } if (investors[round][msg.sender].totalPercentReceived >= 100) { continue; } uint256 roundStartTime; if (round == uint8(Round.Strategic)) { roundStartTime = STRATEGIC_ROUND_START_TIME; } else if (round == uint8(Round.Private)) { roundStartTime = PRIVATE_ROUND_START_TIME; } else if (round == uint8(Round.Team)) { roundStartTime = TEAM_ROUND_START_TIME; } if (roundStartTime <= 0 || roundStartTime > block.timestamp) { continue; } uint256 months = block.timestamp.sub(roundStartTime).div(CLAIMING_PERIOD); if (months > investors[round][msg.sender].monthlyRewardsReceived) { uint256 rewardsNumber = months.sub(investors[round][msg.sender].monthlyRewardsReceived); uint256 percent = investors[round][msg.sender].monthlyPercent.mul(rewardsNumber); if (investors[round][msg.sender].totalPercentReceived.add(percent) > 100) { percent = uint256(100).sub(investors[round][msg.sender].totalPercentReceived); } uint256 tokensAmount = investors[round][msg.sender].boughtTokens.mul(percent).div(100); investors[round][msg.sender].monthlyRewardsReceived = investors[round][msg.sender].monthlyRewardsReceived.add(rewardsNumber); investors[round][msg.sender].totalPercentReceived = investors[round][msg.sender].totalPercentReceived.add(percent); investors[round][msg.sender].totalReceived = investors[round][msg.sender].totalReceived.add(tokensAmount); totalTokens = totalTokens.add(tokensAmount); emit MonthlyClaimWithdrawn(msg.sender, Round(round), tokensAmount); } } if (totalTokens > 0) { require(IERC20(TOKEN_CONTRACT_ADDRESS).transfer(msg.sender, totalTokens), "Tokens transfer error"); } } function retrieveTokens(address _tokenAddress, uint256 _amount) public onlyOwner { require(_amount > 0, "Invalid amount"); require( IERC20(_tokenAddress).balanceOf(address(this)) >= _amount, "Insufficient Balance" ); require( IERC20(_tokenAddress).transfer(owner(), _amount), "Transfer failed" ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":true,"internalType":"enum Round","name":"_round","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_tokensAmount","type":"uint256"}],"name":"InitialClaimWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":true,"internalType":"enum Round","name":"_round","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_tokensAmount","type":"uint256"}],"name":"MonthlyClaimWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"_boughtTokens","type":"uint256"},{"indexed":true,"internalType":"enum Round","name":"_round","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_initialPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_monthlyPercent","type":"uint256"}],"name":"NewAddress","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":false,"internalType":"enum Round","name":"_round","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"RoundTimeConfigured","type":"event"},{"inputs":[],"name":"CLAIMING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRIVATE_ROUND_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STRATEGIC_ROUND_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_ROUND_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_CONTRACT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_boughtTokens","type":"uint256"},{"internalType":"enum Round","name":"_round","type":"uint8"},{"internalType":"uint256","name":"_initialPercent","type":"uint256"},{"internalType":"uint256","name":"_monthlyPercent","type":"uint256"}],"name":"addAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_boughtTokensAmounts","type":"uint256[]"},{"internalType":"enum Round","name":"_round","type":"uint8"}],"name":"batchAddAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimInitialTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMonthlyTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"init2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"init3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"investors","outputs":[{"internalType":"uint256","name":"boughtTokens","type":"uint256"},{"internalType":"uint256","name":"initialPercent","type":"uint256"},{"internalType":"uint256","name":"monthlyPercent","type":"uint256"},{"internalType":"bool","name":"initialRewardReceived","type":"bool"},{"internalType":"uint256","name":"monthlyRewardsReceived","type":"uint256"},{"internalType":"uint256","name":"totalPercentReceived","type":"uint256"},{"internalType":"uint256","name":"totalReceived","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"retrieveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPrivateRoundStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setStrategicRoundStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setTeamRoundStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052733ecb96039340630c8b82e5a7732bc88b2aeade82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b506000620000796200099a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200014c731958662bf4b23b638cba463c134d2cf414027288681b1ae4d6e2ef5000006001600f6005620009a260201b60201c565b6200018173a187dc724624877a97f5d02734e9871e2427c3b7686c6b935b8bbd4000006001600f6005620009a260201b60201c565b620001b67356373aec74a28117ba5bd85cca8bfcec515453f0683635c9adc5dea000006001600f6005620009a260201b60201c565b620001eb7302fec1e5e224da14dfe29237042d56a96523949e683635c9adc5dea000006001600f6005620009a260201b60201c565b620002207398ff7895075fe2978ece7580f74f4025e396a732683635c9adc5dea000006001600f6005620009a260201b60201c565b62000255735e4b9ee7bc57d77e13b050e078885651b4d092cc682b5e3af16b188000006001600f6005620009a260201b60201c565b6200028a73380351fefaaabcaff0abe9e5609c3f5089b59d5268119e47f21381f400006001600f6005620009a260201b60201c565b620002bf73c557936e8d79adc6b9dca2c67d9a7b1a47391d87683635c9adc5dea000006001600f6005620009a260201b60201c565b620002f473121d26685013baf726e309f5762ecee520fcc702683635c9adc5dea000006001600f6005620009a260201b60201c565b62000329738cec27a195145143e0b6e75574e0ebcd0c0d4805683635c9adc5dea000006001600f6005620009a260201b60201c565b6200035e73bba738a1a98a3f2e7312ca71896416f69f9e7bf2683635c9adc5dea000006001600f6005620009a260201b60201c565b6200039373a4d3ea01e5205f349affa727632d6b8b6fc28da96825f273933db57000006001600f6005620009a260201b60201c565b620003c873fb3018f1366219ed3fe8ce1b844860f9c4fac5e7680d8d726b7177a800006001600f6005620009a260201b60201c565b620003fd73c7d23fe48f3dae21b5b91568edff2a103b1e2e6a683635c9adc5dea000006001600f6005620009a260201b60201c565b62000432730d1f7fd6dcccb4e9c00fe1c0f869543813f342c0686c6b935b8bbd4000006001600f6005620009a260201b60201c565b62000467737604100fc7d73fb2179dafd86a93a3215502ebae686c6b935b8bbd4000006001600f6005620009a260201b60201c565b6200049c73f9c229512b62434eb5de37823c9c899c100b9050681043561a88293000006001600f6005620009a260201b60201c565b620004d17368daaf91eaaa05f56fb929441e646f4e190c8e9a683635c9adc5dea000006001600f6005620009a260201b60201c565b6200050673b74b327cc230fda53e5b0262c2773fced1e8ab2d683635c9adc5dea000006001600f6005620009a260201b60201c565b6200053b73ff3d84ec5a84a71db1ada84e66d90395c81d7ba2686c6b935b8bbd4000006001600f6005620009a260201b60201c565b6200057073b2abb01a1896673bf166830c5dc01fb35c0c9f67681b1ae4d6e2ef5000006001600f6005620009a260201b60201c565b620005a5738fbaadd3a7ae19c66ea9f00502626988313ac96c683635c9adc5dea000006001600f6005620009a260201b60201c565b620005da73fc5374abf90bc9217fd88628e4847dd27950b92c683635c9adc5dea000006001600f6005620009a260201b60201c565b6200060f73aada0f64aa9e3fa0461ef5efacd1d879d5e6684868a2a15d09519be000006001600f6005620009a260201b60201c565b6200064473b15d2abec2cdb7d41b30c4537203ef15a509fbb5682086ac3510526000006001600f6005620009a260201b60201c565b6200067973a31978a297a8e78e7c8aef86eec055786d65804d681b1ae4d6e2ef5000006001600f6005620009a260201b60201c565b620006ae73ae3e0020b64bc91c373012aa3b01ec4ff85ef581683635c9adc5dea000006001600f6005620009a260201b60201c565b620006e373691b48454d5e2acc7bb8acb4a7a992a983af2872681b1ae4d6e2ef5000006001600f6005620009a260201b60201c565b6200071873d40f0d8f08eb702ce5b4aa039a7b0040434330986815af1d78b58c4000006001600f6005620009a260201b60201c565b6200074d73202be7e4f66ab72fe6cf042938c7a19ea332f112681043561a88293000006001600f6005620009a260201b60201c565b62000782738084d3fb905f31663153898fe034dce72b7d22976818650127cc3dc800006001600f6005620009a260201b60201c565b620007b7733e8204402560493824e5d75ff2333128d7e9f109683635c9adc5dea000006001600f6005620009a260201b60201c565b620007ec731dc122db61d53a8e088d63af743f4d4c713e8a20681b1ae4d6e2ef5000006001600f6005620009a260201b60201c565b62000821730269acb6dc3f5672a2295e018896eb75095d790a681b1ae4d6e2ef5000006001600f6005620009a260201b60201c565b6200085673ddf33967ff57a679e3b65f8f70ee393e075bfa59683635c9adc5dea000006001600f6005620009a260201b60201c565b6200088b739c5366709ca3889c4e4e27693301b456d5213a13681b1ae4d6e2ef5000006001600f6005620009a260201b60201c565b620008c073b234a630062161f8376507e773e23bc4cba49676683635c9adc5dea000006001600f6005620009a260201b60201c565b620008f573d1a7ed463bbee05a6bfb6e2e8912677214a30d19686c6b935b8bbd4000006001600f6005620009a260201b60201c565b6200092a737e2ff036697a7d4614e549b8e6e0aaf123b5f8bf683635c9adc5dea000006001600f6005620009a260201b60201c565b6200095f73cbb74e8eabcd36b160d1fc3bed7bc6e52d32763268a2a15d09519be000006001600f6005620009a260201b60201c565b6200099473d90df6d33d457e87949dd5288b923f71f90f38ba683635c9adc5dea000006001600f6005620009a260201b60201c565b62001198565b600033905090565b620009b26200099a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009d862000e2860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a289062000fa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141562000aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9b9062000f3d565b60405180910390fd5b633b9aca0084101562000aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae59062000f5f565b60405180910390fd5b606462000b0a828462000e5160201b620038d11790919060201c565b111562000b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b459062000f81565b60405180910390fd5b6000600584600281111562000b8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811062000bc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541462000c49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c409062000fc5565b60405180910390fd5b6040518060e0016040528085815260200183815260200182815260200160001515815260200160008152602001600081526020016000815250600584600281111562000cbe577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811062000cf6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015560a0820151816005015560c0820151816006015590505082600281111562000dcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8573ffffffffffffffffffffffffffffffffffffffff167f678becf675e8698f70ae79402eac1ebdd7975b293697b159e2ce6a4cbe980e1a86858560405162000e199392919062000fe7565b60405180910390a35050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000818362000e61919062001035565b905092915050565b600062000e7860188362001024565b915062000e8582620010cb565b602082019050919050565b600062000e9f60158362001024565b915062000eac82620010f4565b602082019050919050565b600062000ec660178362001024565b915062000ed3826200111d565b602082019050919050565b600062000eed60208362001024565b915062000efa8262001146565b602082019050919050565b600062000f1460168362001024565b915062000f21826200116f565b602082019050919050565b62000f378162001092565b82525050565b6000602082019050818103600083015262000f588162000e69565b9050919050565b6000602082019050818103600083015262000f7a8162000e90565b9050919050565b6000602082019050818103600083015262000f9c8162000eb7565b9050919050565b6000602082019050818103600083015262000fbe8162000ede565b9050919050565b6000602082019050818103600083015262000fe08162000f05565b9050919050565b600060608201905062000ffe600083018662000f2c565b6200100d602083018562000f2c565b6200101c604083018462000f2c565b949350505050565b600082825260208201905092915050565b6000620010428262001092565b91506200104f8362001092565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200108757620010866200109c565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f496e76616c696420616464726573732070726f76696465640000000000000000600082015250565b7f496e76616c696420746f6b656e7320616d6f756e740000000000000000000000600082015250565b7f496e76616c69642070657263656e747320616d6f756e74000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4164647265737320616c72656164792065786973747300000000000000000000600082015250565b6147c880620011a86000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80637b43191d116100b8578063cde07b081161007c578063cde07b08146102a2578063dc1ce3fc146102be578063e1c7392a146102dc578063e61dd2a6146102e6578063e7e3f3c11461031c578063f2fde38b1461033a57610137565b80637b43191d146101fe5780637c60354e1461021a5780638da5cb5b146102365780639bb029a014610254578063a960c65f1461027257610137565b80634e70d1a9116100ff5780634e70d1a9146101a85780635d4cc593146101b2578063682ee8ed146101ce57806370a5889e146101ea578063715018a6146101f457610137565b8063069489a21461013c578063093160d014610146578063288dee3b1461016457806334e8c67914610182578063486e3cd71461019e575b600080fd5b610144610356565b005b61014e6105a0565b60405161015b9190613edb565b60405180910390f35b61016c6105c6565b60405161017991906140e8565b60405180910390f35b61019c60048036038101906101979190613aef565b6105cc565b005b6101a661082d565b005b6101b0610f86565b005b6101cc60048036038101906101c79190613c4a565b61178f565b005b6101e860048036038101906101e39190613c4a565b6118d7565b005b6101f2611a1f565b005b6101fc6125b7565b005b61021860048036038101906102139190613b2b565b6126f1565b005b610234600480360381019061022f9190613ba2565b612b4a565b005b61023e612e59565b60405161024b9190613edb565b60405180910390f35b61025c612e82565b60405161026991906140e8565b60405180910390f35b61028c60048036038101906102879190613ac6565b612e88565b60405161029991906140e8565b60405180910390f35b6102bc60048036038101906102b79190613c4a565b612ea0565b005b6102c6612fe8565b6040516102d391906140e8565b60405180910390f35b6102e4612fee565b005b61030060048036038101906102fb9190613c9c565b6136c2565b604051610313979695949392919061413a565b60405180910390f35b610324613721565b60405161033191906140e8565b60405180910390f35b610354600480360381019061034f9190613ac6565b613728565b005b61035e6138e7565b73ffffffffffffffffffffffffffffffffffffffff1661037c612e59565b73ffffffffffffffffffffffffffffffffffffffff16146103d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c990614088565b60405180910390fd5b6104007344833cf54c530525d1b37c38cb342e63bc87985769021e19e0c9bab24000006001600f60056126f1565b61042e73aef18c8794ca00e914e318743732ae4e32c1b61469152d02c7e14af68000006001600f60056126f1565b61045c73bfe663805129915942980bc86bd832ab031bb2f9690878678326eac90000006001600f60056126f1565b61048a73b6b49986253f9234d2526cd5f8e94ceb4ae62d2569043c33c19375648000006001600f60056126f1565b6104b873c199f30251e9cef67c6b89a695e99c66f996dea069021e19e0c9bab24000006001600f60056126f1565b6104e673d33619b122b27f712aa5f784bc54de9c95c7588d69010f0cf064dd592000006001600f60056126f1565b6105147353f470a909d7ce7f35e62f4470fd440b1ed5d8cd69054b40b1f852bda000006001600f60056126f1565b61054273cf280df3da6405eabf27e1d85e2c03d3b9047309690a968163f0a57b4000006000600a60056126f1565b6105707312e8987c762701d60f0fcfee687bb8e4c07555aa69021e19e0c9bab24000006000600a60056126f1565b61059e7353f470a909d7ce7f35e62f4470fd440b1ed5d8cd690a968163f0a57b4000006000600a60056126f1565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b6105d46138e7565b73ffffffffffffffffffffffffffffffffffffffff166105f2612e59565b73ffffffffffffffffffffffffffffffffffffffff1614610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063f90614088565b60405180910390fd5b6000811161068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290613fc8565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106c59190613edb565b60206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107159190613c73565b1015610756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074d906140c8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61077a612e59565b836040518363ffffffff1660e01b8152600401610798929190613ef6565b602060405180830381600087803b1580156107b257600080fd5b505af11580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea9190613c21565b610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082090613fa8565b60405180910390fd5b5050565b6108356138e7565b73ffffffffffffffffffffffffffffffffffffffff16610853612e59565b73ffffffffffffffffffffffffffffffffffffffff16146108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090614088565b60405180910390fd5b6108d67313aeec0bc33fbb015800c45514c7b58a73c139796812f939c99edab800006001600f60056126f1565b61090373108b3731b012c4f2cd11e777edb6db4f92216abc683635c9adc5dea000006001600f60056126f1565b61093073f2dc8de5d42be1f1fd916f4e532e051351d71aa5686c7974123f64a400006001600f60056126f1565b61095d7377ec698afcbaa2e55522b050eb595ce2e75cea3e683635c9adc5dea000006001600f60056126f1565b61098a73ff356f8726b337a8b12fd28077c1601f88a67fbd681b1ae4d6e2ef5000006001600f60056126f1565b6109b77350693e63a0abb825b1ba99564954d45b6e45a632686c6b935b8bbd4000006001600f60056126f1565b6109e47320997325098692337a03961317ebf912bf913b65686c6b935b8bbd4000006001600f60056126f1565b610a11735fb716a4b09d42f5894f3a2c7d3da3ee1711c3f8683635c9adc5dea000006001600f60056126f1565b610a3e735b4630ecc58be1de71ad53b3699850a49e892d32686c6b935b8bbd4000006001600f60056126f1565b610a6b73a01dfaf99c765dc3f3a6bddb9afdc1797cf6493e681b1ae4d6e2ef5000006001600f60056126f1565b610a98732c4b8ad42b4b9984e56da0dbf3b2362d096f75746814998f32ac787000006001600f60056126f1565b610ac57325b77f97b373556469fed882f35832bcea6ca931686c6b935b8bbd4000006001600f60056126f1565b610af2737d0b9f4f0c9a476a6e9b1dd05bb228a85b82af2d686c6b935b8bbd4000006001600f60056126f1565b610b1f737fd7ea0043de720f8aae10e0ccb232a5905f0e2768690f271c09330800006001600f60056126f1565b610b4c73337ab2c4e48b8b65da792c22665282184f9e5aa8684b3e5e960f923000006001600f60056126f1565b610b797368303a858d10f9cff32373e3f5ca6b2a13af8c3c686c6b935b8bbd4000006001600f60056126f1565b610ba67310e6dad4bb48ae5f8b73d140d61dc2057df25a5f686b56051582a97000006001600f60056126f1565b610bd37390b956d2a705f8bf79a70def26ca1eb8863fc4d0686c6b935b8bbd4000006001600f60056126f1565b610c007360d900365bb8cc8d8e817a7ea884b37db8923ba1681b1ae4d6e2ef5000006001600f60056126f1565b610c2d73a2b2c17461c79fe69e95a8ea9822551e72ecf6f7686c6b935b8bbd4000006001600f60056126f1565b610c5a73723d812e1499a607be2749a7926acd99422f4743680d8d726b7177a800006001600f60056126f1565b610c8773345aacb3d6f8f84e3c09cf2c908ef413dc34d673683790bb8551376400006001600f60056126f1565b610cb473f05577445faccd1a0441061a187d810bf5363cc6683635c9adc5dea000006001600f60056126f1565b610ce173744aad2dfadeaabfa07035eedbbc7428d43124c868134c7e11d4c71000006001600f60056126f1565b610d0e7354dcac795bf85f78f9c23b5d72b849e4a78e309d683635c9adc5dea000006001600f60056126f1565b610d3b730196ad265c56f2b18b708c75ce9358a0b6df64cf686c6b935b8bbd4000006001600f60056126f1565b610d68733aba77f76f2cfbac1389878959e24faa1afca68f681b1ae4d6e2ef5000006001600f60056126f1565b610d95731cbba9de3883329b5356ade705425da569cf5b78686c6b935b8bbd4000006001600f60056126f1565b610dc273cbc4a69a93c52693a0812780f216efac684353b0686b9b68a704ee6400006001600f60056126f1565b610def733b04a70f8ae1ab4009fdb5863bdf1611b287e6616825f273933db57000006001600f60056126f1565b610e1c73444a52988a40355f6f55cef439bc2a5f816b2c006835203b67bccad000006001600f60056126f1565b610e4973fc134b2469bbdda973047485f86c83df0c4df16d6842adadd32e427800006001600f60056126f1565b610e76734f9476a750aa3debcd3e72340a53c590aea288a4686c6b935b8bbd4000006001600f60056126f1565b610ea3735b540e038c0c263268c8997543b8271dbfb87e33683635c9adc5dea000006001600f60056126f1565b610ed0733c97c372b45cc96fe73814721ebbe6db02c9d88e686c6b935b8bbd4000006001600f60056126f1565b610efd735382a0739b47f592af1c15559c29fe0ca44b98b368410d586a20a4c000006001600f60056126f1565b610f2a73922f2928f4d244611e8bef9e8dad88a5b6e2b59c68367b2d3f48239400006001600f60056126f1565b610f57734524331c52a73bdfd1668907f28a4860307201ae683ef01c94c2248400006001600f60056126f1565b610f847364882d0f5513c0fdf8c6225d01971b10026ae7786813f306a2409fc000006001600f60056126f1565b565b600080600090505b60038160ff16101561169357600060058260ff1660038110610fd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541161102557611680565b60058160ff1660038110611062577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff16156110bb57611680565b600060058260ff16600381106110fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541161114657611680565b600061126a606461125c60058560ff166003811061118d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460058660ff166003811061120c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546138ef90919063ffffffff16565b61390590919063ffffffff16565b9050600160058360ff16600381106112ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548160ff02191690831515021790555061141260058360ff1660038110611343577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460058460ff16600381106113c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546138d190919063ffffffff16565b60058360ff166003811061144f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506115258160058460ff16600381106114d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601546138d190919063ffffffff16565b60058360ff1660038110611562577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506115ba81846138d190919063ffffffff16565b92508160ff1660028111156115f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115611630577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b3373ffffffffffffffffffffffffffffffffffffffff167fe48ee1b16d86c8dbb309fadc2b79c027f3e8991f08a09cc648e1fdf50678e2658360405161167691906140e8565b60405180910390a3505b808061168b906143f7565b915050610f8e565b50600081111561178c57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116fa929190613ef6565b602060405180830381600087803b15801561171457600080fd5b505af1158015611728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174c9190613c21565b61178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178290614028565b60405180910390fd5b5b50565b6117976138e7565b73ffffffffffffffffffffffffffffffffffffffff166117b5612e59565b73ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290614088565b60405180910390fd5b600060025414611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790614068565b60405180910390fd5b42811015611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613f68565b60405180910390fd5b806002819055507ff51efc96b722a647c5ab48ee1dd71f79900770dcfc08b67c388db6ab173064d86000826040516118cc929190613f1f565b60405180910390a150565b6118df6138e7565b73ffffffffffffffffffffffffffffffffffffffff166118fd612e59565b73ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90614088565b60405180910390fd5b600060035414611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90614068565b60405180910390fd5b428110156119db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d290613f68565b60405180910390fd5b806003819055507ff51efc96b722a647c5ab48ee1dd71f79900770dcfc08b67c388db6ab173064d8600182604051611a14929190613f1f565b60405180910390a150565b600080600090505b60038160ff1610156124bb57600060058260ff1660038110611a72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611abe576124a8565b600060058260ff1660038110611afd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411611b49576124a8565b606460058260ff1660038110611b88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015410611bd4576124a8565b6000806002811115611c0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff168260ff161415611c26576002549050611cc5565b60016002811115611c60577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff168260ff161415611c77576003549050611cc4565b600280811115611cb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff168260ff161415611cc35760045490505b5b5b600081111580611cd457504281115b15611cdf57506124a8565b6000611d0962278d00611cfb844261391b90919063ffffffff16565b61390590919063ffffffff16565b905060058360ff1660038110611d48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401548111156124a5576000611e2460058560ff1660038110611dd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401548361391b90919063ffffffff16565b90506000611eb98260058760ff1660038110611e69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546138ef90919063ffffffff16565b90506064611f4e8260058860ff1660038110611efe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546138d190919063ffffffff16565b1115611fe957611fe660058660ff1660038110611f94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154606461391b90919063ffffffff16565b90505b600061208f60646120818460058a60ff1660038110612031577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546138ef90919063ffffffff16565b61390590919063ffffffff16565b90506121228360058860ff16600381106120d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138d190919063ffffffff16565b60058760ff166003811061215f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506122358260058860ff16600381106121e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546138d190919063ffffffff16565b60058760ff1660038110612272577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506123488160058860ff16600381106122f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601546138d190919063ffffffff16565b60058760ff1660038110612385577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506123dd81886138d190919063ffffffff16565b96508560ff16600281111561241b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612453577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b3373ffffffffffffffffffffffffffffffffffffffff167faa14d10daf4d653914cd2ece93d3e8852dbdddaf7b88fcff9cd2adafec54dad98360405161249991906140e8565b60405180910390a35050505b50505b80806124b3906143f7565b915050611a27565b5060008111156125b457600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612522929190613ef6565b602060405180830381600087803b15801561253c57600080fd5b505af1158015612550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125749190613c21565b6125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa90614028565b60405180910390fd5b5b50565b6125bf6138e7565b73ffffffffffffffffffffffffffffffffffffffff166125dd612e59565b73ffffffffffffffffffffffffffffffffffffffff1614612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90614088565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6126f96138e7565b73ffffffffffffffffffffffffffffffffffffffff16612717612e59565b73ffffffffffffffffffffffffffffffffffffffff161461276d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276490614088565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490613f48565b60405180910390fd5b633b9aca00841015612824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281b90614008565b60405180910390fd5b606461283982846138d190919063ffffffff16565b111561287a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287190614048565b60405180910390fd5b600060058460028111156128b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106128ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414612970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612967906140a8565b60405180910390fd5b6040518060e001604052808581526020018381526020018281526020016000151581526020016000815260200160008152602001600081525060058460028111156129e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110612a1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015560a0820151816005015560c08201518160060155905050826002811115612af1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8573ffffffffffffffffffffffffffffffffffffffff167f678becf675e8698f70ae79402eac1ebdd7975b293697b159e2ce6a4cbe980e1a868585604051612b3b93929190614103565b60405180910390a35050505050565b612b526138e7565b73ffffffffffffffffffffffffffffffffffffffff16612b70612e59565b73ffffffffffffffffffffffffffffffffffffffff1614612bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbd90614088565b60405180910390fd5b8151835114612c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0190613fe8565b60405180910390fd5b60008060006002811115612c47577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b836002811115612c80577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612c9357600a915060059050612d9c565b60016002811115612ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b836002811115612d06577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612d1957600f915060059050612d9b565b600280811115612d52577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b836002811115612d8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612d9a5760009150600290505b5b5b60005b85518160ff161015612e5157612e3e868260ff1681518110612dea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151868360ff1681518110612e2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518686866126f1565b8080612e49906143f7565b915050612d9f565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b60086020528060005260406000206000915090505481565b612ea86138e7565b73ffffffffffffffffffffffffffffffffffffffff16612ec6612e59565b73ffffffffffffffffffffffffffffffffffffffff1614612f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1390614088565b60405180910390fd5b600060045414612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5890614068565b60405180910390fd5b42811015612fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9b90613f68565b60405180910390fd5b806004819055507ff51efc96b722a647c5ab48ee1dd71f79900770dcfc08b67c388db6ab173064d8600282604051612fdd929190613f1f565b60405180910390a150565b60025481565b612ff66138e7565b73ffffffffffffffffffffffffffffffffffffffff16613014612e59565b73ffffffffffffffffffffffffffffffffffffffff161461306a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306190614088565b60405180910390fd5b61309773494e35c0a11dc16a109fc161d785385f874f2359683635c9adc5dea000006001600f60056126f1565b6130c4739349284cc71056d28885c18036ea9bcbc2436959683635c9adc5dea000006001600f60056126f1565b6130f17380182c753895eceb93f78b9df66741a59cda5d0f683635c9adc5dea000006001600f60056126f1565b61311e7346a659ad8aecb89df20cf37a96c307299e9a4d74683635c9adc5dea000006001600f60056126f1565b61314b73646e41e681c94b5dac8e9dfbd9dda3bbc1cc6563683635c9adc5dea000006001600f60056126f1565b61317873059236f121b5721cfbf3c56e9c49c3a0a7b45acf683635c9adc5dea000006001600f60056126f1565b6131a573881e1fb021469ac31a00d393bab2e7b7c0e99cac686c6b935b8bbd4000006001600f60056126f1565b6131d27350b3e08d5c3a2386e0c9585031b1152a5f0e237068a2a15d09519be000006001600f60056126f1565b6131ff730b0907e91724a293df256a0064d931ad9f1f6ead683635c9adc5dea000006001600f60056126f1565b61322c739fb358896c9b2f872be9006e80bbaa810b8e142d683635c9adc5dea000006001600f60056126f1565b6132597364ec24675d7bbc80f954ff15edd57d381f5b3e1a683635c9adc5dea000006001600f60056126f1565b61328673e64ef0c08e4f0039fad4b4dde982541d3aa30381681b1ae4d6e2ef5000006001600f60056126f1565b6132b37350899582199c06d5264eddcd12879e5210783ba8685150ae84a8cdf000006001600f60056126f1565b6132e173ac6de9f16c7b9b44c4e5c9073c3a10fa45ab4d5a69032d26d12e980b6000006001600f60056126f1565b61330e732c8af617e2f0908bd4f39dc534de13bf31d6c604683635c9adc5dea000006001600f60056126f1565b61333b731f89f28490e4f4a544df6f23782f19b9dc0855db683635c9adc5dea000006001600f60056126f1565b61336873a4daf8fed578ecbf4b0a507a8ac9c9deb16c5e73685150ae84a8cdf000006001600f60056126f1565b613395732a2619e81d61c09aa9206535bac1b7a5921ea050685150ae84a8cdf000006001600f60056126f1565b6133c273b67e49a45858f3cbf2bc2026a4347b5518279798683635c9adc5dea000006001600f60056126f1565b6133ef73423ad4906d23df9fb8a09d383280f9289c1c73db683635c9adc5dea000006001600f60056126f1565b61341c735210474644728370626bf848707c55f1d8159e34683635c9adc5dea000006001600f60056126f1565b6134497333a44839bd3544b08a5f315125199cc2cd64cac6683635c9adc5dea000006001600f60056126f1565b61347673eb3ed720c708152065d9119e63c3d7e727cfa789681b1ae4d6e2ef5000006001600f60056126f1565b6134a373b0dce0a78e7602ca791ffd8a6a9aa86d4375452b681b1ae4d6e2ef5000006001600f60056126f1565b6134d0734f70ed6b19cc733d5c45a40250227c0c020ab3cd683635c9adc5dea000006001600f60056126f1565b6134fd73ba172e6ba2adf181f18fcb698b77f3f9b5531f45681b1ae4d6e2ef5000006001600f60056126f1565b61352a73e92d80a90bc050a12f1c6fbe0e50e1b5a874b595686c6b935b8bbd4000006001600f60056126f1565b61355773d62a38bd99376013d485214cc968322c20a6cc4068878678326eac9000006001600f60056126f1565b61358473399b282c17f8ed9f542c2376917947d6b79e2cc6683635c9adc5dea000006001600f60056126f1565b6135b173fe932efb9dbb8e563e95cee05ce106509cf06905681b1ae4d6e2ef5000006001600f60056126f1565b6135de739fa68bc48398e4c9716226ff410d26c5487e679c681b1ae4d6e2ef5000006001600f60056126f1565b61360b732fb8bd9d8d50acc377e2629d124c7dcd0388ab24685150ae84a8cdf000006001600f60056126f1565b61363873d16e4384225b313204adafe41bdb866e710899a6681b1ae4d6e2ef5000006001600f60056126f1565b6136667354d07cfa91f05fe3b45d8810fef05705117afe536901969368974c05b000006001600f60056126f1565b61369373782db3ae31a7406849c84f9bb0189defdd26b4d2683635c9adc5dea000006001600f60056126f1565b6136c073a44a524ded85efcd0a671771327b5e75b0fe6964681b1ae4d6e2ef5000006001600f60056126f1565b565b600582600381106136d257600080fd5b01602052806000526040600020600091509150508060000154908060010154908060020154908060030160009054906101000a900460ff16908060040154908060050154908060060154905087565b62278d0081565b6137306138e7565b73ffffffffffffffffffffffffffffffffffffffff1661374e612e59565b73ffffffffffffffffffffffffffffffffffffffff16146137a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379b90614088565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380b90613f88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081836138df9190614237565b905092915050565b600033905090565b600081836138fd91906142be565b905092915050565b60008183613913919061428d565b905092915050565b600081836139299190614318565b905092915050565b600061394461393f846141ce565b6141a9565b9050808382526020820190508285602086028201111561396357600080fd5b60005b8581101561399357816139798882613a09565b845260208401935060208301925050600181019050613966565b5050509392505050565b60006139b06139ab846141fa565b6141a9565b905080838252602082019050828560208602820111156139cf57600080fd5b60005b858110156139ff57816139e58882613a9c565b8452602084019350602083019250506001810190506139d2565b5050509392505050565b600081359050613a188161473d565b92915050565b600082601f830112613a2f57600080fd5b8135613a3f848260208601613931565b91505092915050565b600082601f830112613a5957600080fd5b8135613a6984826020860161399d565b91505092915050565b600081519050613a8181614754565b92915050565b600081359050613a968161476b565b92915050565b600081359050613aab8161477b565b92915050565b600081519050613ac08161477b565b92915050565b600060208284031215613ad857600080fd5b6000613ae684828501613a09565b91505092915050565b60008060408385031215613b0257600080fd5b6000613b1085828601613a09565b9250506020613b2185828601613a9c565b9150509250929050565b600080600080600060a08688031215613b4357600080fd5b6000613b5188828901613a09565b9550506020613b6288828901613a9c565b9450506040613b7388828901613a87565b9350506060613b8488828901613a9c565b9250506080613b9588828901613a9c565b9150509295509295909350565b600080600060608486031215613bb757600080fd5b600084013567ffffffffffffffff811115613bd157600080fd5b613bdd86828701613a1e565b935050602084013567ffffffffffffffff811115613bfa57600080fd5b613c0686828701613a48565b9250506040613c1786828701613a87565b9150509250925092565b600060208284031215613c3357600080fd5b6000613c4184828501613a72565b91505092915050565b600060208284031215613c5c57600080fd5b6000613c6a84828501613a9c565b91505092915050565b600060208284031215613c8557600080fd5b6000613c9384828501613ab1565b91505092915050565b60008060408385031215613caf57600080fd5b6000613cbd85828601613a9c565b9250506020613cce85828601613a09565b9150509250929050565b613ce18161434c565b82525050565b613cf08161435e565b82525050565b613cff816143b4565b82525050565b6000613d12601883614226565b9150613d1d826144ee565b602082019050919050565b6000613d35601e83614226565b9150613d4082614517565b602082019050919050565b6000613d58602683614226565b9150613d6382614540565b604082019050919050565b6000613d7b600f83614226565b9150613d868261458f565b602082019050919050565b6000613d9e600e83614226565b9150613da9826145b8565b602082019050919050565b6000613dc1601283614226565b9150613dcc826145e1565b602082019050919050565b6000613de4601583614226565b9150613def8261460a565b602082019050919050565b6000613e07601583614226565b9150613e1282614633565b602082019050919050565b6000613e2a601783614226565b9150613e358261465c565b602082019050919050565b6000613e4d601a83614226565b9150613e5882614685565b602082019050919050565b6000613e70602083614226565b9150613e7b826146ae565b602082019050919050565b6000613e93601683614226565b9150613e9e826146d7565b602082019050919050565b6000613eb6601483614226565b9150613ec182614700565b602082019050919050565b613ed58161439d565b82525050565b6000602082019050613ef06000830184613cd8565b92915050565b6000604082019050613f0b6000830185613cd8565b613f186020830184613ecc565b9392505050565b6000604082019050613f346000830185613cf6565b613f416020830184613ecc565b9392505050565b60006020820190508181036000830152613f6181613d05565b9050919050565b60006020820190508181036000830152613f8181613d28565b9050919050565b60006020820190508181036000830152613fa181613d4b565b9050919050565b60006020820190508181036000830152613fc181613d6e565b9050919050565b60006020820190508181036000830152613fe181613d91565b9050919050565b6000602082019050818103600083015261400181613db4565b9050919050565b6000602082019050818103600083015261402181613dd7565b9050919050565b6000602082019050818103600083015261404181613dfa565b9050919050565b6000602082019050818103600083015261406181613e1d565b9050919050565b6000602082019050818103600083015261408181613e40565b9050919050565b600060208201905081810360008301526140a181613e63565b9050919050565b600060208201905081810360008301526140c181613e86565b9050919050565b600060208201905081810360008301526140e181613ea9565b9050919050565b60006020820190506140fd6000830184613ecc565b92915050565b60006060820190506141186000830186613ecc565b6141256020830185613ecc565b6141326040830184613ecc565b949350505050565b600060e08201905061414f600083018a613ecc565b61415c6020830189613ecc565b6141696040830188613ecc565b6141766060830187613ce7565b6141836080830186613ecc565b61419060a0830185613ecc565b61419d60c0830184613ecc565b98975050505050505050565b60006141b36141c4565b90506141bf82826143c6565b919050565b6000604051905090565b600067ffffffffffffffff8211156141e9576141e86144ae565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614215576142146144ae565b5b602082029050602081019050919050565b600082825260208201905092915050565b60006142428261439d565b915061424d8361439d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561428257614281614421565b5b828201905092915050565b60006142988261439d565b91506142a38361439d565b9250826142b3576142b2614450565b5b828204905092915050565b60006142c98261439d565b91506142d48361439d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561430d5761430c614421565b5b828202905092915050565b60006143238261439d565b915061432e8361439d565b92508282101561434157614340614421565b5b828203905092915050565b60006143578261437d565b9050919050565b60008115159050919050565b600081905061437882614729565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006143bf8261436a565b9050919050565b6143cf826144dd565b810181811067ffffffffffffffff821117156143ee576143ed6144ae565b5b80604052505050565b6000614402826143a7565b915060ff82141561441657614415614421565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e76616c696420616464726573732070726f76696465640000000000000000600082015250565b7f547279696e6720746f207365742074696d6520696e2074686520706173740000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f496e76616c696420696e70757420646174610000000000000000000000000000600082015250565b7f496e76616c696420746f6b656e7320616d6f756e740000000000000000000000600082015250565b7f546f6b656e73207472616e73666572206572726f720000000000000000000000600082015250565b7f496e76616c69642070657263656e747320616d6f756e74000000000000000000600082015250565b7f54696d6520697320616c726561647920636f6e66696775726564000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4164647265737320616c72656164792065786973747300000000000000000000600082015250565b7f496e73756666696369656e742042616c616e6365000000000000000000000000600082015250565b6003811061473a5761473961447f565b5b50565b6147468161434c565b811461475157600080fd5b50565b61475d8161435e565b811461476857600080fd5b50565b6003811061477857600080fd5b50565b6147848161439d565b811461478f57600080fd5b5056fea2646970667358221220cd8e706a507b6a2c3a2b9f242459f5f4bd51d22ec0cff0208fbbc4ab2053bdef64736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80637b43191d116100b8578063cde07b081161007c578063cde07b08146102a2578063dc1ce3fc146102be578063e1c7392a146102dc578063e61dd2a6146102e6578063e7e3f3c11461031c578063f2fde38b1461033a57610137565b80637b43191d146101fe5780637c60354e1461021a5780638da5cb5b146102365780639bb029a014610254578063a960c65f1461027257610137565b80634e70d1a9116100ff5780634e70d1a9146101a85780635d4cc593146101b2578063682ee8ed146101ce57806370a5889e146101ea578063715018a6146101f457610137565b8063069489a21461013c578063093160d014610146578063288dee3b1461016457806334e8c67914610182578063486e3cd71461019e575b600080fd5b610144610356565b005b61014e6105a0565b60405161015b9190613edb565b60405180910390f35b61016c6105c6565b60405161017991906140e8565b60405180910390f35b61019c60048036038101906101979190613aef565b6105cc565b005b6101a661082d565b005b6101b0610f86565b005b6101cc60048036038101906101c79190613c4a565b61178f565b005b6101e860048036038101906101e39190613c4a565b6118d7565b005b6101f2611a1f565b005b6101fc6125b7565b005b61021860048036038101906102139190613b2b565b6126f1565b005b610234600480360381019061022f9190613ba2565b612b4a565b005b61023e612e59565b60405161024b9190613edb565b60405180910390f35b61025c612e82565b60405161026991906140e8565b60405180910390f35b61028c60048036038101906102879190613ac6565b612e88565b60405161029991906140e8565b60405180910390f35b6102bc60048036038101906102b79190613c4a565b612ea0565b005b6102c6612fe8565b6040516102d391906140e8565b60405180910390f35b6102e4612fee565b005b61030060048036038101906102fb9190613c9c565b6136c2565b604051610313979695949392919061413a565b60405180910390f35b610324613721565b60405161033191906140e8565b60405180910390f35b610354600480360381019061034f9190613ac6565b613728565b005b61035e6138e7565b73ffffffffffffffffffffffffffffffffffffffff1661037c612e59565b73ffffffffffffffffffffffffffffffffffffffff16146103d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c990614088565b60405180910390fd5b6104007344833cf54c530525d1b37c38cb342e63bc87985769021e19e0c9bab24000006001600f60056126f1565b61042e73aef18c8794ca00e914e318743732ae4e32c1b61469152d02c7e14af68000006001600f60056126f1565b61045c73bfe663805129915942980bc86bd832ab031bb2f9690878678326eac90000006001600f60056126f1565b61048a73b6b49986253f9234d2526cd5f8e94ceb4ae62d2569043c33c19375648000006001600f60056126f1565b6104b873c199f30251e9cef67c6b89a695e99c66f996dea069021e19e0c9bab24000006001600f60056126f1565b6104e673d33619b122b27f712aa5f784bc54de9c95c7588d69010f0cf064dd592000006001600f60056126f1565b6105147353f470a909d7ce7f35e62f4470fd440b1ed5d8cd69054b40b1f852bda000006001600f60056126f1565b61054273cf280df3da6405eabf27e1d85e2c03d3b9047309690a968163f0a57b4000006000600a60056126f1565b6105707312e8987c762701d60f0fcfee687bb8e4c07555aa69021e19e0c9bab24000006000600a60056126f1565b61059e7353f470a909d7ce7f35e62f4470fd440b1ed5d8cd690a968163f0a57b4000006000600a60056126f1565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b6105d46138e7565b73ffffffffffffffffffffffffffffffffffffffff166105f2612e59565b73ffffffffffffffffffffffffffffffffffffffff1614610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063f90614088565b60405180910390fd5b6000811161068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290613fc8565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106c59190613edb565b60206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107159190613c73565b1015610756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074d906140c8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61077a612e59565b836040518363ffffffff1660e01b8152600401610798929190613ef6565b602060405180830381600087803b1580156107b257600080fd5b505af11580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea9190613c21565b610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082090613fa8565b60405180910390fd5b5050565b6108356138e7565b73ffffffffffffffffffffffffffffffffffffffff16610853612e59565b73ffffffffffffffffffffffffffffffffffffffff16146108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090614088565b60405180910390fd5b6108d67313aeec0bc33fbb015800c45514c7b58a73c139796812f939c99edab800006001600f60056126f1565b61090373108b3731b012c4f2cd11e777edb6db4f92216abc683635c9adc5dea000006001600f60056126f1565b61093073f2dc8de5d42be1f1fd916f4e532e051351d71aa5686c7974123f64a400006001600f60056126f1565b61095d7377ec698afcbaa2e55522b050eb595ce2e75cea3e683635c9adc5dea000006001600f60056126f1565b61098a73ff356f8726b337a8b12fd28077c1601f88a67fbd681b1ae4d6e2ef5000006001600f60056126f1565b6109b77350693e63a0abb825b1ba99564954d45b6e45a632686c6b935b8bbd4000006001600f60056126f1565b6109e47320997325098692337a03961317ebf912bf913b65686c6b935b8bbd4000006001600f60056126f1565b610a11735fb716a4b09d42f5894f3a2c7d3da3ee1711c3f8683635c9adc5dea000006001600f60056126f1565b610a3e735b4630ecc58be1de71ad53b3699850a49e892d32686c6b935b8bbd4000006001600f60056126f1565b610a6b73a01dfaf99c765dc3f3a6bddb9afdc1797cf6493e681b1ae4d6e2ef5000006001600f60056126f1565b610a98732c4b8ad42b4b9984e56da0dbf3b2362d096f75746814998f32ac787000006001600f60056126f1565b610ac57325b77f97b373556469fed882f35832bcea6ca931686c6b935b8bbd4000006001600f60056126f1565b610af2737d0b9f4f0c9a476a6e9b1dd05bb228a85b82af2d686c6b935b8bbd4000006001600f60056126f1565b610b1f737fd7ea0043de720f8aae10e0ccb232a5905f0e2768690f271c09330800006001600f60056126f1565b610b4c73337ab2c4e48b8b65da792c22665282184f9e5aa8684b3e5e960f923000006001600f60056126f1565b610b797368303a858d10f9cff32373e3f5ca6b2a13af8c3c686c6b935b8bbd4000006001600f60056126f1565b610ba67310e6dad4bb48ae5f8b73d140d61dc2057df25a5f686b56051582a97000006001600f60056126f1565b610bd37390b956d2a705f8bf79a70def26ca1eb8863fc4d0686c6b935b8bbd4000006001600f60056126f1565b610c007360d900365bb8cc8d8e817a7ea884b37db8923ba1681b1ae4d6e2ef5000006001600f60056126f1565b610c2d73a2b2c17461c79fe69e95a8ea9822551e72ecf6f7686c6b935b8bbd4000006001600f60056126f1565b610c5a73723d812e1499a607be2749a7926acd99422f4743680d8d726b7177a800006001600f60056126f1565b610c8773345aacb3d6f8f84e3c09cf2c908ef413dc34d673683790bb8551376400006001600f60056126f1565b610cb473f05577445faccd1a0441061a187d810bf5363cc6683635c9adc5dea000006001600f60056126f1565b610ce173744aad2dfadeaabfa07035eedbbc7428d43124c868134c7e11d4c71000006001600f60056126f1565b610d0e7354dcac795bf85f78f9c23b5d72b849e4a78e309d683635c9adc5dea000006001600f60056126f1565b610d3b730196ad265c56f2b18b708c75ce9358a0b6df64cf686c6b935b8bbd4000006001600f60056126f1565b610d68733aba77f76f2cfbac1389878959e24faa1afca68f681b1ae4d6e2ef5000006001600f60056126f1565b610d95731cbba9de3883329b5356ade705425da569cf5b78686c6b935b8bbd4000006001600f60056126f1565b610dc273cbc4a69a93c52693a0812780f216efac684353b0686b9b68a704ee6400006001600f60056126f1565b610def733b04a70f8ae1ab4009fdb5863bdf1611b287e6616825f273933db57000006001600f60056126f1565b610e1c73444a52988a40355f6f55cef439bc2a5f816b2c006835203b67bccad000006001600f60056126f1565b610e4973fc134b2469bbdda973047485f86c83df0c4df16d6842adadd32e427800006001600f60056126f1565b610e76734f9476a750aa3debcd3e72340a53c590aea288a4686c6b935b8bbd4000006001600f60056126f1565b610ea3735b540e038c0c263268c8997543b8271dbfb87e33683635c9adc5dea000006001600f60056126f1565b610ed0733c97c372b45cc96fe73814721ebbe6db02c9d88e686c6b935b8bbd4000006001600f60056126f1565b610efd735382a0739b47f592af1c15559c29fe0ca44b98b368410d586a20a4c000006001600f60056126f1565b610f2a73922f2928f4d244611e8bef9e8dad88a5b6e2b59c68367b2d3f48239400006001600f60056126f1565b610f57734524331c52a73bdfd1668907f28a4860307201ae683ef01c94c2248400006001600f60056126f1565b610f847364882d0f5513c0fdf8c6225d01971b10026ae7786813f306a2409fc000006001600f60056126f1565b565b600080600090505b60038160ff16101561169357600060058260ff1660038110610fd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541161102557611680565b60058160ff1660038110611062577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff16156110bb57611680565b600060058260ff16600381106110fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541161114657611680565b600061126a606461125c60058560ff166003811061118d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460058660ff166003811061120c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546138ef90919063ffffffff16565b61390590919063ffffffff16565b9050600160058360ff16600381106112ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548160ff02191690831515021790555061141260058360ff1660038110611343577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460058460ff16600381106113c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546138d190919063ffffffff16565b60058360ff166003811061144f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506115258160058460ff16600381106114d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601546138d190919063ffffffff16565b60058360ff1660038110611562577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506115ba81846138d190919063ffffffff16565b92508160ff1660028111156115f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115611630577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b3373ffffffffffffffffffffffffffffffffffffffff167fe48ee1b16d86c8dbb309fadc2b79c027f3e8991f08a09cc648e1fdf50678e2658360405161167691906140e8565b60405180910390a3505b808061168b906143f7565b915050610f8e565b50600081111561178c57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116fa929190613ef6565b602060405180830381600087803b15801561171457600080fd5b505af1158015611728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174c9190613c21565b61178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178290614028565b60405180910390fd5b5b50565b6117976138e7565b73ffffffffffffffffffffffffffffffffffffffff166117b5612e59565b73ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290614088565b60405180910390fd5b600060025414611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790614068565b60405180910390fd5b42811015611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613f68565b60405180910390fd5b806002819055507ff51efc96b722a647c5ab48ee1dd71f79900770dcfc08b67c388db6ab173064d86000826040516118cc929190613f1f565b60405180910390a150565b6118df6138e7565b73ffffffffffffffffffffffffffffffffffffffff166118fd612e59565b73ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90614088565b60405180910390fd5b600060035414611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90614068565b60405180910390fd5b428110156119db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d290613f68565b60405180910390fd5b806003819055507ff51efc96b722a647c5ab48ee1dd71f79900770dcfc08b67c388db6ab173064d8600182604051611a14929190613f1f565b60405180910390a150565b600080600090505b60038160ff1610156124bb57600060058260ff1660038110611a72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611abe576124a8565b600060058260ff1660038110611afd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411611b49576124a8565b606460058260ff1660038110611b88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015410611bd4576124a8565b6000806002811115611c0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff168260ff161415611c26576002549050611cc5565b60016002811115611c60577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff168260ff161415611c77576003549050611cc4565b600280811115611cb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff168260ff161415611cc35760045490505b5b5b600081111580611cd457504281115b15611cdf57506124a8565b6000611d0962278d00611cfb844261391b90919063ffffffff16565b61390590919063ffffffff16565b905060058360ff1660038110611d48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401548111156124a5576000611e2460058560ff1660038110611dd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401548361391b90919063ffffffff16565b90506000611eb98260058760ff1660038110611e69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546138ef90919063ffffffff16565b90506064611f4e8260058860ff1660038110611efe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546138d190919063ffffffff16565b1115611fe957611fe660058660ff1660038110611f94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154606461391b90919063ffffffff16565b90505b600061208f60646120818460058a60ff1660038110612031577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546138ef90919063ffffffff16565b61390590919063ffffffff16565b90506121228360058860ff16600381106120d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138d190919063ffffffff16565b60058760ff166003811061215f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506122358260058860ff16600381106121e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546138d190919063ffffffff16565b60058760ff1660038110612272577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506123488160058860ff16600381106122f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601546138d190919063ffffffff16565b60058760ff1660038110612385577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506123dd81886138d190919063ffffffff16565b96508560ff16600281111561241b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612453577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b3373ffffffffffffffffffffffffffffffffffffffff167faa14d10daf4d653914cd2ece93d3e8852dbdddaf7b88fcff9cd2adafec54dad98360405161249991906140e8565b60405180910390a35050505b50505b80806124b3906143f7565b915050611a27565b5060008111156125b457600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612522929190613ef6565b602060405180830381600087803b15801561253c57600080fd5b505af1158015612550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125749190613c21565b6125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa90614028565b60405180910390fd5b5b50565b6125bf6138e7565b73ffffffffffffffffffffffffffffffffffffffff166125dd612e59565b73ffffffffffffffffffffffffffffffffffffffff1614612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90614088565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6126f96138e7565b73ffffffffffffffffffffffffffffffffffffffff16612717612e59565b73ffffffffffffffffffffffffffffffffffffffff161461276d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276490614088565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490613f48565b60405180910390fd5b633b9aca00841015612824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281b90614008565b60405180910390fd5b606461283982846138d190919063ffffffff16565b111561287a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287190614048565b60405180910390fd5b600060058460028111156128b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106128ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414612970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612967906140a8565b60405180910390fd5b6040518060e001604052808581526020018381526020018281526020016000151581526020016000815260200160008152602001600081525060058460028111156129e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110612a1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015560a0820151816005015560c08201518160060155905050826002811115612af1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8573ffffffffffffffffffffffffffffffffffffffff167f678becf675e8698f70ae79402eac1ebdd7975b293697b159e2ce6a4cbe980e1a868585604051612b3b93929190614103565b60405180910390a35050505050565b612b526138e7565b73ffffffffffffffffffffffffffffffffffffffff16612b70612e59565b73ffffffffffffffffffffffffffffffffffffffff1614612bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbd90614088565b60405180910390fd5b8151835114612c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0190613fe8565b60405180910390fd5b60008060006002811115612c47577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b836002811115612c80577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612c9357600a915060059050612d9c565b60016002811115612ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b836002811115612d06577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612d1957600f915060059050612d9b565b600280811115612d52577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b836002811115612d8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612d9a5760009150600290505b5b5b60005b85518160ff161015612e5157612e3e868260ff1681518110612dea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151868360ff1681518110612e2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518686866126f1565b8080612e49906143f7565b915050612d9f565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b60086020528060005260406000206000915090505481565b612ea86138e7565b73ffffffffffffffffffffffffffffffffffffffff16612ec6612e59565b73ffffffffffffffffffffffffffffffffffffffff1614612f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1390614088565b60405180910390fd5b600060045414612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5890614068565b60405180910390fd5b42811015612fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9b90613f68565b60405180910390fd5b806004819055507ff51efc96b722a647c5ab48ee1dd71f79900770dcfc08b67c388db6ab173064d8600282604051612fdd929190613f1f565b60405180910390a150565b60025481565b612ff66138e7565b73ffffffffffffffffffffffffffffffffffffffff16613014612e59565b73ffffffffffffffffffffffffffffffffffffffff161461306a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306190614088565b60405180910390fd5b61309773494e35c0a11dc16a109fc161d785385f874f2359683635c9adc5dea000006001600f60056126f1565b6130c4739349284cc71056d28885c18036ea9bcbc2436959683635c9adc5dea000006001600f60056126f1565b6130f17380182c753895eceb93f78b9df66741a59cda5d0f683635c9adc5dea000006001600f60056126f1565b61311e7346a659ad8aecb89df20cf37a96c307299e9a4d74683635c9adc5dea000006001600f60056126f1565b61314b73646e41e681c94b5dac8e9dfbd9dda3bbc1cc6563683635c9adc5dea000006001600f60056126f1565b61317873059236f121b5721cfbf3c56e9c49c3a0a7b45acf683635c9adc5dea000006001600f60056126f1565b6131a573881e1fb021469ac31a00d393bab2e7b7c0e99cac686c6b935b8bbd4000006001600f60056126f1565b6131d27350b3e08d5c3a2386e0c9585031b1152a5f0e237068a2a15d09519be000006001600f60056126f1565b6131ff730b0907e91724a293df256a0064d931ad9f1f6ead683635c9adc5dea000006001600f60056126f1565b61322c739fb358896c9b2f872be9006e80bbaa810b8e142d683635c9adc5dea000006001600f60056126f1565b6132597364ec24675d7bbc80f954ff15edd57d381f5b3e1a683635c9adc5dea000006001600f60056126f1565b61328673e64ef0c08e4f0039fad4b4dde982541d3aa30381681b1ae4d6e2ef5000006001600f60056126f1565b6132b37350899582199c06d5264eddcd12879e5210783ba8685150ae84a8cdf000006001600f60056126f1565b6132e173ac6de9f16c7b9b44c4e5c9073c3a10fa45ab4d5a69032d26d12e980b6000006001600f60056126f1565b61330e732c8af617e2f0908bd4f39dc534de13bf31d6c604683635c9adc5dea000006001600f60056126f1565b61333b731f89f28490e4f4a544df6f23782f19b9dc0855db683635c9adc5dea000006001600f60056126f1565b61336873a4daf8fed578ecbf4b0a507a8ac9c9deb16c5e73685150ae84a8cdf000006001600f60056126f1565b613395732a2619e81d61c09aa9206535bac1b7a5921ea050685150ae84a8cdf000006001600f60056126f1565b6133c273b67e49a45858f3cbf2bc2026a4347b5518279798683635c9adc5dea000006001600f60056126f1565b6133ef73423ad4906d23df9fb8a09d383280f9289c1c73db683635c9adc5dea000006001600f60056126f1565b61341c735210474644728370626bf848707c55f1d8159e34683635c9adc5dea000006001600f60056126f1565b6134497333a44839bd3544b08a5f315125199cc2cd64cac6683635c9adc5dea000006001600f60056126f1565b61347673eb3ed720c708152065d9119e63c3d7e727cfa789681b1ae4d6e2ef5000006001600f60056126f1565b6134a373b0dce0a78e7602ca791ffd8a6a9aa86d4375452b681b1ae4d6e2ef5000006001600f60056126f1565b6134d0734f70ed6b19cc733d5c45a40250227c0c020ab3cd683635c9adc5dea000006001600f60056126f1565b6134fd73ba172e6ba2adf181f18fcb698b77f3f9b5531f45681b1ae4d6e2ef5000006001600f60056126f1565b61352a73e92d80a90bc050a12f1c6fbe0e50e1b5a874b595686c6b935b8bbd4000006001600f60056126f1565b61355773d62a38bd99376013d485214cc968322c20a6cc4068878678326eac9000006001600f60056126f1565b61358473399b282c17f8ed9f542c2376917947d6b79e2cc6683635c9adc5dea000006001600f60056126f1565b6135b173fe932efb9dbb8e563e95cee05ce106509cf06905681b1ae4d6e2ef5000006001600f60056126f1565b6135de739fa68bc48398e4c9716226ff410d26c5487e679c681b1ae4d6e2ef5000006001600f60056126f1565b61360b732fb8bd9d8d50acc377e2629d124c7dcd0388ab24685150ae84a8cdf000006001600f60056126f1565b61363873d16e4384225b313204adafe41bdb866e710899a6681b1ae4d6e2ef5000006001600f60056126f1565b6136667354d07cfa91f05fe3b45d8810fef05705117afe536901969368974c05b000006001600f60056126f1565b61369373782db3ae31a7406849c84f9bb0189defdd26b4d2683635c9adc5dea000006001600f60056126f1565b6136c073a44a524ded85efcd0a671771327b5e75b0fe6964681b1ae4d6e2ef5000006001600f60056126f1565b565b600582600381106136d257600080fd5b01602052806000526040600020600091509150508060000154908060010154908060020154908060030160009054906101000a900460ff16908060040154908060050154908060060154905087565b62278d0081565b6137306138e7565b73ffffffffffffffffffffffffffffffffffffffff1661374e612e59565b73ffffffffffffffffffffffffffffffffffffffff16146137a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379b90614088565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380b90613f88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081836138df9190614237565b905092915050565b600033905090565b600081836138fd91906142be565b905092915050565b60008183613913919061428d565b905092915050565b600081836139299190614318565b905092915050565b600061394461393f846141ce565b6141a9565b9050808382526020820190508285602086028201111561396357600080fd5b60005b8581101561399357816139798882613a09565b845260208401935060208301925050600181019050613966565b5050509392505050565b60006139b06139ab846141fa565b6141a9565b905080838252602082019050828560208602820111156139cf57600080fd5b60005b858110156139ff57816139e58882613a9c565b8452602084019350602083019250506001810190506139d2565b5050509392505050565b600081359050613a188161473d565b92915050565b600082601f830112613a2f57600080fd5b8135613a3f848260208601613931565b91505092915050565b600082601f830112613a5957600080fd5b8135613a6984826020860161399d565b91505092915050565b600081519050613a8181614754565b92915050565b600081359050613a968161476b565b92915050565b600081359050613aab8161477b565b92915050565b600081519050613ac08161477b565b92915050565b600060208284031215613ad857600080fd5b6000613ae684828501613a09565b91505092915050565b60008060408385031215613b0257600080fd5b6000613b1085828601613a09565b9250506020613b2185828601613a9c565b9150509250929050565b600080600080600060a08688031215613b4357600080fd5b6000613b5188828901613a09565b9550506020613b6288828901613a9c565b9450506040613b7388828901613a87565b9350506060613b8488828901613a9c565b9250506080613b9588828901613a9c565b9150509295509295909350565b600080600060608486031215613bb757600080fd5b600084013567ffffffffffffffff811115613bd157600080fd5b613bdd86828701613a1e565b935050602084013567ffffffffffffffff811115613bfa57600080fd5b613c0686828701613a48565b9250506040613c1786828701613a87565b9150509250925092565b600060208284031215613c3357600080fd5b6000613c4184828501613a72565b91505092915050565b600060208284031215613c5c57600080fd5b6000613c6a84828501613a9c565b91505092915050565b600060208284031215613c8557600080fd5b6000613c9384828501613ab1565b91505092915050565b60008060408385031215613caf57600080fd5b6000613cbd85828601613a9c565b9250506020613cce85828601613a09565b9150509250929050565b613ce18161434c565b82525050565b613cf08161435e565b82525050565b613cff816143b4565b82525050565b6000613d12601883614226565b9150613d1d826144ee565b602082019050919050565b6000613d35601e83614226565b9150613d4082614517565b602082019050919050565b6000613d58602683614226565b9150613d6382614540565b604082019050919050565b6000613d7b600f83614226565b9150613d868261458f565b602082019050919050565b6000613d9e600e83614226565b9150613da9826145b8565b602082019050919050565b6000613dc1601283614226565b9150613dcc826145e1565b602082019050919050565b6000613de4601583614226565b9150613def8261460a565b602082019050919050565b6000613e07601583614226565b9150613e1282614633565b602082019050919050565b6000613e2a601783614226565b9150613e358261465c565b602082019050919050565b6000613e4d601a83614226565b9150613e5882614685565b602082019050919050565b6000613e70602083614226565b9150613e7b826146ae565b602082019050919050565b6000613e93601683614226565b9150613e9e826146d7565b602082019050919050565b6000613eb6601483614226565b9150613ec182614700565b602082019050919050565b613ed58161439d565b82525050565b6000602082019050613ef06000830184613cd8565b92915050565b6000604082019050613f0b6000830185613cd8565b613f186020830184613ecc565b9392505050565b6000604082019050613f346000830185613cf6565b613f416020830184613ecc565b9392505050565b60006020820190508181036000830152613f6181613d05565b9050919050565b60006020820190508181036000830152613f8181613d28565b9050919050565b60006020820190508181036000830152613fa181613d4b565b9050919050565b60006020820190508181036000830152613fc181613d6e565b9050919050565b60006020820190508181036000830152613fe181613d91565b9050919050565b6000602082019050818103600083015261400181613db4565b9050919050565b6000602082019050818103600083015261402181613dd7565b9050919050565b6000602082019050818103600083015261404181613dfa565b9050919050565b6000602082019050818103600083015261406181613e1d565b9050919050565b6000602082019050818103600083015261408181613e40565b9050919050565b600060208201905081810360008301526140a181613e63565b9050919050565b600060208201905081810360008301526140c181613e86565b9050919050565b600060208201905081810360008301526140e181613ea9565b9050919050565b60006020820190506140fd6000830184613ecc565b92915050565b60006060820190506141186000830186613ecc565b6141256020830185613ecc565b6141326040830184613ecc565b949350505050565b600060e08201905061414f600083018a613ecc565b61415c6020830189613ecc565b6141696040830188613ecc565b6141766060830187613ce7565b6141836080830186613ecc565b61419060a0830185613ecc565b61419d60c0830184613ecc565b98975050505050505050565b60006141b36141c4565b90506141bf82826143c6565b919050565b6000604051905090565b600067ffffffffffffffff8211156141e9576141e86144ae565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614215576142146144ae565b5b602082029050602081019050919050565b600082825260208201905092915050565b60006142428261439d565b915061424d8361439d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561428257614281614421565b5b828201905092915050565b60006142988261439d565b91506142a38361439d565b9250826142b3576142b2614450565b5b828204905092915050565b60006142c98261439d565b91506142d48361439d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561430d5761430c614421565b5b828202905092915050565b60006143238261439d565b915061432e8361439d565b92508282101561434157614340614421565b5b828203905092915050565b60006143578261437d565b9050919050565b60008115159050919050565b600081905061437882614729565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006143bf8261436a565b9050919050565b6143cf826144dd565b810181811067ffffffffffffffff821117156143ee576143ed6144ae565b5b80604052505050565b6000614402826143a7565b915060ff82141561441657614415614421565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e76616c696420616464726573732070726f76696465640000000000000000600082015250565b7f547279696e6720746f207365742074696d6520696e2074686520706173740000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f496e76616c696420696e70757420646174610000000000000000000000000000600082015250565b7f496e76616c696420746f6b656e7320616d6f756e740000000000000000000000600082015250565b7f546f6b656e73207472616e73666572206572726f720000000000000000000000600082015250565b7f496e76616c69642070657263656e747320616d6f756e74000000000000000000600082015250565b7f54696d6520697320616c726561647920636f6e66696775726564000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4164647265737320616c72656164792065786973747300000000000000000000600082015250565b7f496e73756666696369656e742042616c616e6365000000000000000000000000600082015250565b6003811061473a5761473961447f565b5b50565b6147468161434c565b811461475157600080fd5b50565b61475d8161435e565b811461476857600080fd5b50565b6003811061477857600080fd5b50565b6147848161439d565b811461478f57600080fd5b5056fea2646970667358221220cd8e706a507b6a2c3a2b9f242459f5f4bd51d22ec0cff0208fbbc4ab2053bdef64736f6c63430008040033
Deployed Bytecode Sourcemap
8270:20474:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17216:1114;;;:::i;:::-;;8341:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8542:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28381:358;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18336:4087;;;:::i;:::-;;25066:1152;;;:::i;:::-;;23168:347;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23521:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26224:2151;;;:::i;:::-;;904:148;;;:::i;:::-;;24199:861;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22429:733;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;669:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8586:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8682:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23866:327;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8496:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13426:3784;;;:::i;:::-;;8629:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;8440:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1066:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17216:1114;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17259:98:::1;17278:42;17323:11;17336:13;17351:2;17355:1;17259:10;:98::i;:::-;17365:99;17384:42;17429:12;17443:13;17458:2;17462:1;17365:10;:99::i;:::-;17472:98;17491:42;17536:11;17549:13;17564:2;17568:1;17472:10;:98::i;:::-;17578;17597:42;17642:11;17655:13;17670:2;17674:1;17578:10;:98::i;:::-;17684;17703:42;17748:11;17761:13;17776:2;17780:1;17684:10;:98::i;:::-;17790:97;17809:42;17854:10;17866:13;17881:2;17885:1;17790:10;:97::i;:::-;17895:98;17914:42;17959:11;17972:13;17987:2;17991:1;17895:10;:98::i;:::-;18008:100;18027:42;18072:11;18085:15;18102:2;18106:1;18008:10;:100::i;:::-;18116;18135:42;18180:11;18193:15;18210:2;18214:1;18116:10;:100::i;:::-;18224;18243:42;18288:11;18301:15;18318:2;18322:1;18224:10;:100::i;:::-;17216:1114::o:0;8341:91::-;;;;;;;;;;;;;:::o;8542:39::-;;;;:::o;28381:358::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28487:1:::1;28477:7;:11;28469:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;28582:7;28539:13;28532:31;;;28572:4;28532:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;28516:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28659:13;28652:30;;;28683:7;:5;:7::i;:::-;28692;28652:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28636:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;28381:358:::0;;:::o;18336:4087::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18379:96:::1;18398:42;18443:9;18454:13;18469:2;18473:1;18379:10;:96::i;:::-;18482:97;18501:42;18546:10;18558:13;18573:2;18577:1;18482:10;:97::i;:::-;18586;18605:42;18650:10;18662:13;18677:2;18681:1;18586:10;:97::i;:::-;18690;18709:42;18754:10;18766:13;18781:2;18785:1;18690:10;:97::i;:::-;18794:96;18813:42;18858:9;18869:13;18884:2;18888:1;18794:10;:96::i;:::-;18897:97;18916:42;18961:10;18973:13;18988:2;18992:1;18897:10;:97::i;:::-;19001;19020:42;19065:10;19077:13;19092:2;19096:1;19001:10;:97::i;:::-;19105;19124:42;19169:10;19181:13;19196:2;19200:1;19105:10;:97::i;:::-;19209;19228:42;19273:10;19285:13;19300:2;19304:1;19209:10;:97::i;:::-;19313:96;19332:42;19377:9;19388:13;19403:2;19407:1;19313:10;:96::i;:::-;19416;19435:42;19480:9;19491:13;19506:2;19510:1;19416:10;:96::i;:::-;19519:97;19538:42;19583:10;19595:13;19610:2;19614:1;19519:10;:97::i;:::-;19623;19642:42;19687:10;19699:13;19714:2;19718:1;19623:10;:97::i;:::-;19727;19746:42;19791:10;19803:13;19818:2;19822:1;19727:10;:97::i;:::-;19831;19850:42;19895:10;19907:13;19922:2;19926:1;19831:10;:97::i;:::-;19935;19954:42;19999:10;20011:13;20026:2;20030:1;19935:10;:97::i;:::-;20039;20058:42;20103:10;20115:13;20130:2;20134:1;20039:10;:97::i;:::-;20143;20162:42;20207:10;20219:13;20234:2;20238:1;20143:10;:97::i;:::-;20247:96;20266:42;20311:9;20322:13;20337:2;20341:1;20247:10;:96::i;:::-;20350:97;20369:42;20414:10;20426:13;20441:2;20445:1;20350:10;:97::i;:::-;20454:96;20473:42;20518:9;20529:13;20544:2;20548:1;20454:10;:96::i;:::-;20557:97;20576:42;20621:10;20633:13;20648:2;20652:1;20557:10;:97::i;:::-;20661;20680:42;20725:10;20737:13;20752:2;20756:1;20661:10;:97::i;:::-;20765:96;20784:42;20829:9;20840:13;20855:2;20859:1;20765:10;:96::i;:::-;20868:97;20887:42;20932:10;20944:13;20959:2;20963:1;20868:10;:97::i;:::-;20972;20991:42;21036:10;21048:13;21063:2;21067:1;20972:10;:97::i;:::-;21076:96;21095:42;21140:9;21151:13;21166:2;21170:1;21076:10;:96::i;:::-;21179:97;21198:42;21243:10;21255:13;21270:2;21274:1;21179:10;:97::i;:::-;21283;21302:42;21347:10;21359:13;21374:2;21378:1;21283:10;:97::i;:::-;21387:96;21406:42;21451:9;21462:13;21477:2;21481:1;21387:10;:96::i;:::-;21490;21509:42;21554:9;21565:13;21580:2;21584:1;21490:10;:96::i;:::-;21593:97;21612:42;21657:10;21669:13;21684:2;21688:1;21593:10;:97::i;:::-;21697;21716:42;21761:10;21773:13;21788:2;21792:1;21697:10;:97::i;:::-;21801;21820:42;21865:10;21877:13;21892:2;21896:1;21801:10;:97::i;:::-;21905;21924:42;21969:10;21981:13;21996:2;22000:1;21905:10;:97::i;:::-;22009;22028:42;22073:10;22085:13;22100:2;22104:1;22009:10;:97::i;:::-;22113;22132:42;22177:10;22189:13;22204:2;22208:1;22113:10;:97::i;:::-;22217;22236:42;22281:10;22293:13;22308:2;22312:1;22217:10;:97::i;:::-;22321:96;22340:42;22385:9;22396:13;22411:2;22415:1;22321:10;:96::i;:::-;18336:4087::o:0;25066:1152::-;25112:19;25145:11;25159:1;25145:15;;25140:929;25170:1;25162:5;:9;;;25140:929;;;25240:1;25195:9;25205:5;25195:16;;;;;;;;;;;;;;;;;;:28;25212:10;25195:28;;;;;;;;;;;;;;;:41;;;:46;25191:82;;25255:8;;25191:82;25285:9;25295:5;25285:16;;;;;;;;;;;;;;;;;;:28;25302:10;25285:28;;;;;;;;;;;;;;;:50;;;;;;;;;;;;25281:86;;;25349:8;;25281:86;25426:1;25379:9;25389:5;25379:16;;;;;;;;;;;;;;;;;;:28;25396:10;25379:28;;;;;;;;;;;;;;;:43;;;:48;25375:84;;25441:8;;25375:84;25469:20;25492:99;25587:3;25492:90;25538:9;25548:5;25538:16;;;;;;;;;;;;;;;;;;:28;25555:10;25538:28;;;;;;;;;;;;;;;:43;;;25492:9;25502:5;25492:16;;;;;;;;;;;;;;;;;;:28;25509:10;25492:28;;;;;;;;;;;;;;;:41;;;:45;;:90;;;;:::i;:::-;:94;;:99;;;;:::i;:::-;25469:122;;25653:4;25600:9;25610:5;25600:16;;;;;;;;;;;;;;;;;;:28;25617:10;25600:28;;;;;;;;;;;;;;;:50;;;:57;;;;;;;;;;;;;;;;;;25718:98;25772:9;25782:5;25772:16;;;;;;;;;;;;;;;;;;:28;25789:10;25772:28;;;;;;;;;;;;;;;:43;;;25718:9;25728:5;25718:16;;;;;;;;;;;;;;;;;;:28;25735:10;25718:28;;;;;;;;;;;;;;;:49;;;:53;;:98;;;;:::i;:::-;25666:9;25676:5;25666:16;;;;;;;;;;;;;;;;;;:28;25683:10;25666:28;;;;;;;;;;;;;;;:49;;:150;;;;25870:60;25917:12;25870:9;25880:5;25870:16;;;;;;;;;;;;;;;;;;:28;25887:10;25870:28;;;;;;;;;;;;;;;:42;;;:46;;:60;;;;:::i;:::-;25825:9;25835:5;25825:16;;;;;;;;;;;;;;;;;;:28;25842:10;25825:28;;;;;;;;;;;;;;;:42;;:105;;;;25955:29;25971:12;25955:11;:15;;:29;;;;:::i;:::-;25941:43;;26040:5;26034:12;;;;;;;;;;;;;;;;;;26000:61;;;;;;;;;;;;;;;;26022:10;26000:61;;;26048:12;26000:61;;;;;;:::i;:::-;;;;;;;;25140:929;;25173:7;;;;;:::i;:::-;;;;25140:929;;;;26095:1;26081:11;:15;26077:136;;;26122:22;;;;;;;;;;;26115:39;;;26155:10;26167:11;26115:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26107:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;26077:136;25066:1152;:::o;23168:347::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23288:1:::1;23258:26;;:31;23250:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23349:15;23335:10;:29;;23327:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23437:10;23408:26;:39;;;;23461:48;23481:15;23498:10;23461:48;;;;;;;:::i;:::-;;;;;;;;23168:347:::0;:::o;23521:339::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23637:1:::1;23609:24;;:29;23601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23698:15;23684:10;:29;;23676:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23784:10;23757:24;:37;;;;23808:46;23828:13;23843:10;23808:46;;;;;;;:::i;:::-;;;;;;;;23521:339:::0;:::o;26224:2151::-;26270:19;26303:11;26317:1;26303:15;;26298:1928;26328:1;26320:5;:9;;;26298:1928;;;26398:1;26353:9;26363:5;26353:16;;;;;;;;;;;;;;;;;;:28;26370:10;26353:28;;;;;;;;;;;;;;;:41;;;:46;26349:82;;26413:8;;26349:82;26490:1;26443:9;26453:5;26443:16;;;;;;;;;;;;;;;;;;:28;26460:10;26443:28;;;;;;;;;;;;;;;:43;;;:48;26439:84;;26505:8;;26439:84;26588:3;26535:9;26545:5;26535:16;;;;;;;;;;;;;;;;;;:28;26552:10;26535:28;;;;;;;;;;;;;;;:49;;;:56;26531:92;;26605:8;;26531:92;26633:22;26683:15;26677:22;;;;;;;;;;;;;;;;26668:31;;:5;:31;;;26664:301;;;26729:26;;26712:43;;26664:301;;;26790:13;26784:20;;;;;;;;;;;;;;;;26775:29;;:5;:29;;;26771:194;;;26834:24;;26817:41;;26771:194;;;26893:10;26887:17;;;;;;;;;;;;;;;;26878:26;;:5;:26;;;26874:91;;;26934:21;;26917:38;;26874:91;26771:194;26664:301;26995:1;26977:14;:19;;:55;;;;27017:15;27000:14;:32;26977:55;26973:91;;;27046:8;;;26973:91;27074:14;27091:56;8482:7;27091:35;27111:14;27091:15;:19;;:35;;;;:::i;:::-;:39;;:56;;;;:::i;:::-;27074:73;;27169:9;27179:5;27169:16;;;;;;;;;;;;;;;;;;:28;27186:10;27169:28;;;;;;;;;;;;;;;:51;;;27160:6;:60;27156:1063;;;27233:21;27257:63;27268:9;27278:5;27268:16;;;;;;;;;;;;;;;;;;:28;27285:10;27268:28;;;;;;;;;;;;;;;:51;;;27257:6;:10;;:63;;;;:::i;:::-;27233:87;;27333:15;27351:62;27399:13;27351:9;27361:5;27351:16;;;;;;;;;;;;;;;;;;:28;27368:10;27351:28;;;;;;;;;;;;;;;:43;;;:47;;:62;;;;:::i;:::-;27333:80;;27493:3;27428:62;27482:7;27428:9;27438:5;27428:16;;;;;;;;;;;;;;;;;;:28;27445:10;27428:28;;;;;;;;;;;;;;;:49;;;:53;;:62;;;;:::i;:::-;:68;27424:176;;;27521:67;27538:9;27548:5;27538:16;;;;;;;;;;;;;;;;;;:28;27555:10;27538:28;;;;;;;;;;;;;;;:49;;;27529:3;27521:16;;:67;;;;:::i;:::-;27511:77;;27424:176;27610:20;27633:63;27692:3;27633:54;27679:7;27633:9;27643:5;27633:16;;;;;;;;;;;;;;;;;;:28;27650:10;27633:28;;;;;;;;;;;;;;;:41;;;:45;;:54;;;;:::i;:::-;:58;;:63;;;;:::i;:::-;27610:86;;27763:70;27819:13;27763:9;27773:5;27763:16;;;;;;;;;;;;;;;;;;:28;27780:10;27763:28;;;;;;;;;;;;;;;:51;;;:55;;:70;;;;:::i;:::-;27709:9;27719:5;27709:16;;;;;;;;;;;;;;;;;;:28;27726:10;27709:28;;;;;;;;;;;;;;;:51;;:124;;;;27896:62;27950:7;27896:9;27906:5;27896:16;;;;;;;;;;;;;;;;;;:28;27913:10;27896:28;;;;;;;;;;;;;;;:49;;;:53;;:62;;;;:::i;:::-;27844:9;27854:5;27844:16;;;;;;;;;;;;;;;;;;:28;27861:10;27844:28;;;;;;;;;;;;;;;:49;;:114;;;;28014:60;28061:12;28014:9;28024:5;28014:16;;;;;;;;;;;;;;;;;;:28;28031:10;28014:28;;;;;;;;;;;;;;;:42;;;:46;;:60;;;;:::i;:::-;27969:9;27979:5;27969:16;;;;;;;;;;;;;;;;;;:28;27986:10;27969:28;;;;;;;;;;;;;;;:42;;:105;;;;28101:29;28117:12;28101:11;:15;;:29;;;;:::i;:::-;28087:43;;28188:5;28182:12;;;;;;;;;;;;;;;;;;28148:61;;;;;;;;;;;;;;;;28170:10;28148:61;;;28196:12;28148:61;;;;;;:::i;:::-;;;;;;;;27156:1063;;;;26298:1928;;;26331:7;;;;;:::i;:::-;;;;26298:1928;;;;28252:1;28238:11;:15;28234:136;;;28279:22;;;;;;;;;;;28272:39;;;28312:10;28324:11;28272:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28264:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;28234:136;26224:2151;:::o;904:148::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1011:1:::1;974:40;;995:6;::::0;::::1;;;;;;;;974:40;;;;;;;;;;;;1042:1;1025:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;904:148::o:0;24199:861::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24376:3:::1;24356:24;;:8;:24;;;;24348:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24441:5;24424:13;:22;;24416:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24527:3;24487:36;24507:15;24487;:19;;:36;;;;:::i;:::-;:43;;24479:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;24626:1;24573:9;24591:6;24583:15;;;;;;;;;;;;;;;;24573:26;;;;;;;;;;;;;;;;:36;24600:8;24573:36;;;;;;;;;;;;;;;:49;;;:54;24565:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;24702:261;;;;;;;;24734:13;24702:261;;;;24772:15;24702:261;;;;24812:15;24702:261;;;;24859:5;24702:261;;;;;;24897:1;24702:261;;;;24929:1;24702:261;;;;24954:1;24702:261;;::::0;24663:9:::1;24681:6;24673:15;;;;;;;;;;;;;;;;24663:26;;;;;;;;;;;;;;;;:36;24690:8;24663:36;;;;;;;;;;;;;;;:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25013:6;24977:77;;;;;;;;;;;;;;;;24988:8;24977:77;;;24998:13;25021:15;25038;24977:77;;;;;;;;:::i;:::-;;;;;;;;24199:861:::0;;;;;:::o;22429:733::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22593:20:::1;:27;22572:10;:17;:48;22564:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22652:22;22681::::0;22724:15:::1;22714:25;;;;;;;;;;;;;;;;:6;:25;;;;;;;;;;;;;;;;;22710:286;;;22767:2;22750:19;;22795:1;22778:18;;22710:286;;;22824:13;22814:23;;;;;;;;;;;;;;;;:6;:23;;;;;;;;;;;;;;;;;22810:186;;;22865:2;22848:19;;22893:1;22876:18;;22810:186;;;22922:10;22912:20:::0;::::1;;;;;;;;;;;;;;;:6;:20;;;;;;;;;;;;;;;;;22908:88;;;22960:1;22943:18;;22987:1;22970:18;;22908:88;22810:186;22710:286;23009:7;23004:153;23026:10;:17;23022:1;:21;;;23004:153;;;23059:90;23070:10;23081:1;23070:13;;;;;;;;;;;;;;;;;;;;;;;;23085:20;23106:1;23085:23;;;;;;;;;;;;;;;;;;;;;;;;23110:6;23118:14;23134;23059:10;:90::i;:::-;23045:3;;;;;:::i;:::-;;;;23004:153;;;;881:1;;22429:733:::0;;;:::o;669:87::-;715:7;742:6;;;;;;;;;;;735:13;;669:87;:::o;8586:36::-;;;;:::o;8682:48::-;;;;;;;;;;;;;;;;;:::o;23866:327::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23976:1:::1;23951:21;;:26;23943:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24037:15;24023:10;:29;;24015:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;24120:10;24096:21;:34;;;;24144:43;24164:10;24176;24144:43;;;;;;;:::i;:::-;;;;;;;;23866:327:::0;:::o;8496:41::-;;;;:::o;13426:3784::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13474:97:::1;13493:42;13538:10;13550:13;13565:2;13569:1;13474:10;:97::i;:::-;13578;13597:42;13642:10;13654:13;13669:2;13673:1;13578:10;:97::i;:::-;13682;13701:42;13746:10;13758:13;13773:2;13777:1;13682:10;:97::i;:::-;13786;13805:42;13850:10;13862:13;13877:2;13881:1;13786:10;:97::i;:::-;13890;13909:42;13954:10;13966:13;13981:2;13985:1;13890:10;:97::i;:::-;13994;14013:42;14058:10;14070:13;14085:2;14089:1;13994:10;:97::i;:::-;14098;14117:42;14162:10;14174:13;14189:2;14193:1;14098:10;:97::i;:::-;14202;14221:42;14266:10;14278:13;14293:2;14297:1;14202:10;:97::i;:::-;14306;14325:42;14370:10;14382:13;14397:2;14401:1;14306:10;:97::i;:::-;14410;14429:42;14474:10;14486:13;14501:2;14505:1;14410:10;:97::i;:::-;14514;14533:42;14578:10;14590:13;14605:2;14609:1;14514:10;:97::i;:::-;14618:96;14637:42;14682:9;14693:13;14708:2;14712:1;14618:10;:96::i;:::-;14721:97;14740:42;14785:10;14797:13;14812:2;14816:1;14721:10;:97::i;:::-;14825:98;14844:42;14889:11;14902:13;14917:2;14921:1;14825:10;:98::i;:::-;14930:97;14949:42;14994:10;15006:13;15021:2;15025:1;14930:10;:97::i;:::-;15034;15053:42;15098:10;15110:13;15125:2;15129:1;15034:10;:97::i;:::-;15138;15157:42;15202:10;15214:13;15229:2;15233:1;15138:10;:97::i;:::-;15242;15261:42;15306:10;15318:13;15333:2;15337:1;15242:10;:97::i;:::-;15346;15365:42;15410:10;15422:13;15437:2;15441:1;15346:10;:97::i;:::-;15450;15469:42;15514:10;15526:13;15541:2;15545:1;15450:10;:97::i;:::-;15554;15573:42;15618:10;15630:13;15645:2;15649:1;15554:10;:97::i;:::-;15658;15677:42;15722:10;15734:13;15749:2;15753:1;15658:10;:97::i;:::-;15762:96;15781:42;15826:9;15837:13;15852:2;15856:1;15762:10;:96::i;:::-;15865;15884:42;15929:9;15940:13;15955:2;15959:1;15865:10;:96::i;:::-;15968:97;15987:42;16032:10;16044:13;16059:2;16063:1;15968:10;:97::i;:::-;16072:96;16091:42;16136:9;16147:13;16162:2;16166:1;16072:10;:96::i;:::-;16175:97;16194:42;16239:10;16251:13;16266:2;16270:1;16175:10;:97::i;:::-;16279;16298:42;16343:10;16355:13;16370:2;16374:1;16279:10;:97::i;:::-;16383;16402:42;16447:10;16459:13;16474:2;16478:1;16383:10;:97::i;:::-;16487:96;16506:42;16551:9;16562:13;16577:2;16581:1;16487:10;:96::i;:::-;16590;16609:42;16654:9;16665:13;16680:2;16684:1;16590:10;:96::i;:::-;16693:97;16712:42;16757:10;16769:13;16784:2;16788:1;16693:10;:97::i;:::-;16797:96;16816:42;16861:9;16872:13;16887:2;16891:1;16797:10;:96::i;:::-;16900:97;16919:42;16964:10;16976:13;16991:2;16995:1;16900:10;:97::i;:::-;17004;17023:42;17068:10;17080:13;17095:2;17099:1;17004:10;:97::i;:::-;17108:96;17127:42;17172:9;17183:13;17198:2;17202:1;17108:10;:96::i;:::-;13426:3784::o:0;8629:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8440:49::-;8482:7;8440:49;:::o;1066:244::-;821:12;:10;:12::i;:::-;810:23;;:7;:5;:7::i;:::-;:23;;;802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1175:1:::1;1155:22;;:8;:22;;;;1147:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1265:8;1236:38;;1257:6;::::0;::::1;;;;;;;;1236:38;;;;;;;;;;;;1294:8;1285:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1066:244:::0;:::o;6035:98::-;6093:7;6124:1;6120;:5;;;;:::i;:::-;6113:12;;6035:98;;;;:::o;98:::-;151:7;178:10;171:17;;98:98;:::o;6259:::-;6317:7;6348:1;6344;:5;;;;:::i;:::-;6337:12;;6259:98;;;;:::o;6371:::-;6429:7;6460:1;6456;:5;;;;:::i;:::-;6449:12;;6371:98;;;;:::o;6147:::-;6205:7;6236:1;6232;:5;;;;:::i;:::-;6225:12;;6147:98;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:139::-;1409:5;1447:6;1434:20;1425:29;;1463:33;1490:5;1463:33;:::i;:::-;1415:87;;;;:::o;1525:303::-;1596:5;1645:3;1638:4;1630:6;1626:17;1622:27;1612:2;;1663:1;1660;1653:12;1612:2;1703:6;1690:20;1728:94;1818:3;1810:6;1803:4;1795:6;1791:17;1728:94;:::i;:::-;1719:103;;1602:226;;;;;:::o;1851:303::-;1922:5;1971:3;1964:4;1956:6;1952:17;1948:27;1938:2;;1989:1;1986;1979:12;1938:2;2029:6;2016:20;2054:94;2144:3;2136:6;2129:4;2121:6;2117:17;2054:94;:::i;:::-;2045:103;;1928:226;;;;;:::o;2160:137::-;2214:5;2245:6;2239:13;2230:22;;2261:30;2285:5;2261:30;:::i;:::-;2220:77;;;;:::o;2303:157::-;2358:5;2396:6;2383:20;2374:29;;2412:42;2448:5;2412:42;:::i;:::-;2364:96;;;;:::o;2466:139::-;2512:5;2550:6;2537:20;2528:29;;2566:33;2593:5;2566:33;:::i;:::-;2518:87;;;;:::o;2611:143::-;2668:5;2699:6;2693:13;2684:22;;2715:33;2742:5;2715:33;:::i;:::-;2674:80;;;;:::o;2760:262::-;2819:6;2868:2;2856:9;2847:7;2843:23;2839:32;2836:2;;;2884:1;2881;2874:12;2836:2;2927:1;2952:53;2997:7;2988:6;2977:9;2973:22;2952:53;:::i;:::-;2942:63;;2898:117;2826:196;;;;:::o;3028:407::-;3096:6;3104;3153:2;3141:9;3132:7;3128:23;3124:32;3121:2;;;3169:1;3166;3159:12;3121:2;3212:1;3237:53;3282:7;3273:6;3262:9;3258:22;3237:53;:::i;:::-;3227:63;;3183:117;3339:2;3365:53;3410:7;3401:6;3390:9;3386:22;3365:53;:::i;:::-;3355:63;;3310:118;3111:324;;;;;:::o;3441:862::-;3545:6;3553;3561;3569;3577;3626:3;3614:9;3605:7;3601:23;3597:33;3594:2;;;3643:1;3640;3633:12;3594:2;3686:1;3711:53;3756:7;3747:6;3736:9;3732:22;3711:53;:::i;:::-;3701:63;;3657:117;3813:2;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3784:118;3941:2;3967:62;4021:7;4012:6;4001:9;3997:22;3967:62;:::i;:::-;3957:72;;3912:127;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:3;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4177:119;3584:719;;;;;;;;:::o;4309:856::-;4445:6;4453;4461;4510:2;4498:9;4489:7;4485:23;4481:32;4478:2;;;4526:1;4523;4516:12;4478:2;4597:1;4586:9;4582:17;4569:31;4627:18;4619:6;4616:30;4613:2;;;4659:1;4656;4649:12;4613:2;4687:78;4757:7;4748:6;4737:9;4733:22;4687:78;:::i;:::-;4677:88;;4540:235;4842:2;4831:9;4827:18;4814:32;4873:18;4865:6;4862:30;4859:2;;;4905:1;4902;4895:12;4859:2;4933:78;5003:7;4994:6;4983:9;4979:22;4933:78;:::i;:::-;4923:88;;4785:236;5060:2;5086:62;5140:7;5131:6;5120:9;5116:22;5086:62;:::i;:::-;5076:72;;5031:127;4468:697;;;;;:::o;5171:278::-;5238:6;5287:2;5275:9;5266:7;5262:23;5258:32;5255:2;;;5303:1;5300;5293:12;5255:2;5346:1;5371:61;5424:7;5415:6;5404:9;5400:22;5371:61;:::i;:::-;5361:71;;5317:125;5245:204;;;;:::o;5455:262::-;5514:6;5563:2;5551:9;5542:7;5538:23;5534:32;5531:2;;;5579:1;5576;5569:12;5531:2;5622:1;5647:53;5692:7;5683:6;5672:9;5668:22;5647:53;:::i;:::-;5637:63;;5593:117;5521:196;;;;:::o;5723:284::-;5793:6;5842:2;5830:9;5821:7;5817:23;5813:32;5810:2;;;5858:1;5855;5848:12;5810:2;5901:1;5926:64;5982:7;5973:6;5962:9;5958:22;5926:64;:::i;:::-;5916:74;;5872:128;5800:207;;;;:::o;6013:407::-;6081:6;6089;6138:2;6126:9;6117:7;6113:23;6109:32;6106:2;;;6154:1;6151;6144:12;6106:2;6197:1;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;:::i;:::-;6212:63;;6168:117;6324:2;6350:53;6395:7;6386:6;6375:9;6371:22;6350:53;:::i;:::-;6340:63;;6295:118;6096:324;;;;;:::o;6426:118::-;6513:24;6531:5;6513:24;:::i;:::-;6508:3;6501:37;6491:53;;:::o;6550:109::-;6631:21;6646:5;6631:21;:::i;:::-;6626:3;6619:34;6609:50;;:::o;6665:145::-;6759:44;6797:5;6759:44;:::i;:::-;6754:3;6747:57;6737:73;;:::o;6816:366::-;6958:3;6979:67;7043:2;7038:3;6979:67;:::i;:::-;6972:74;;7055:93;7144:3;7055:93;:::i;:::-;7173:2;7168:3;7164:12;7157:19;;6962:220;;;:::o;7188:366::-;7330:3;7351:67;7415:2;7410:3;7351:67;:::i;:::-;7344:74;;7427:93;7516:3;7427:93;:::i;:::-;7545:2;7540:3;7536:12;7529:19;;7334:220;;;:::o;7560:366::-;7702:3;7723:67;7787:2;7782:3;7723:67;:::i;:::-;7716:74;;7799:93;7888:3;7799:93;:::i;:::-;7917:2;7912:3;7908:12;7901:19;;7706:220;;;:::o;7932:366::-;8074:3;8095:67;8159:2;8154:3;8095:67;:::i;:::-;8088:74;;8171:93;8260:3;8171:93;:::i;:::-;8289:2;8284:3;8280:12;8273:19;;8078:220;;;:::o;8304:366::-;8446:3;8467:67;8531:2;8526:3;8467:67;:::i;:::-;8460:74;;8543:93;8632:3;8543:93;:::i;:::-;8661:2;8656:3;8652:12;8645:19;;8450:220;;;:::o;8676:366::-;8818:3;8839:67;8903:2;8898:3;8839:67;:::i;:::-;8832:74;;8915:93;9004:3;8915:93;:::i;:::-;9033:2;9028:3;9024:12;9017:19;;8822:220;;;:::o;9048:366::-;9190:3;9211:67;9275:2;9270:3;9211:67;:::i;:::-;9204:74;;9287:93;9376:3;9287:93;:::i;:::-;9405:2;9400:3;9396:12;9389:19;;9194:220;;;:::o;9420:366::-;9562:3;9583:67;9647:2;9642:3;9583:67;:::i;:::-;9576:74;;9659:93;9748:3;9659:93;:::i;:::-;9777:2;9772:3;9768:12;9761:19;;9566:220;;;:::o;9792:366::-;9934:3;9955:67;10019:2;10014:3;9955:67;:::i;:::-;9948:74;;10031:93;10120:3;10031:93;:::i;:::-;10149:2;10144:3;10140:12;10133:19;;9938:220;;;:::o;10164:366::-;10306:3;10327:67;10391:2;10386:3;10327:67;:::i;:::-;10320:74;;10403:93;10492:3;10403:93;:::i;:::-;10521:2;10516:3;10512:12;10505:19;;10310:220;;;:::o;10536:366::-;10678:3;10699:67;10763:2;10758:3;10699:67;:::i;:::-;10692:74;;10775:93;10864:3;10775:93;:::i;:::-;10893:2;10888:3;10884:12;10877:19;;10682:220;;;:::o;10908:366::-;11050:3;11071:67;11135:2;11130:3;11071:67;:::i;:::-;11064:74;;11147:93;11236:3;11147:93;:::i;:::-;11265:2;11260:3;11256:12;11249:19;;11054:220;;;:::o;11280:366::-;11422:3;11443:67;11507:2;11502:3;11443:67;:::i;:::-;11436:74;;11519:93;11608:3;11519:93;:::i;:::-;11637:2;11632:3;11628:12;11621:19;;11426:220;;;:::o;11652:118::-;11739:24;11757:5;11739:24;:::i;:::-;11734:3;11727:37;11717:53;;:::o;11776:222::-;11869:4;11907:2;11896:9;11892:18;11884:26;;11920:71;11988:1;11977:9;11973:17;11964:6;11920:71;:::i;:::-;11874:124;;;;:::o;12004:332::-;12125:4;12163:2;12152:9;12148:18;12140:26;;12176:71;12244:1;12233:9;12229:17;12220:6;12176:71;:::i;:::-;12257:72;12325:2;12314:9;12310:18;12301:6;12257:72;:::i;:::-;12130:206;;;;;:::o;12342:346::-;12470:4;12508:2;12497:9;12493:18;12485:26;;12521:78;12596:1;12585:9;12581:17;12572:6;12521:78;:::i;:::-;12609:72;12677:2;12666:9;12662:18;12653:6;12609:72;:::i;:::-;12475:213;;;;;:::o;12694:419::-;12860:4;12898:2;12887:9;12883:18;12875:26;;12947:9;12941:4;12937:20;12933:1;12922:9;12918:17;12911:47;12975:131;13101:4;12975:131;:::i;:::-;12967:139;;12865:248;;;:::o;13119:419::-;13285:4;13323:2;13312:9;13308:18;13300:26;;13372:9;13366:4;13362:20;13358:1;13347:9;13343:17;13336:47;13400:131;13526:4;13400:131;:::i;:::-;13392:139;;13290:248;;;:::o;13544:419::-;13710:4;13748:2;13737:9;13733:18;13725:26;;13797:9;13791:4;13787:20;13783:1;13772:9;13768:17;13761:47;13825:131;13951:4;13825:131;:::i;:::-;13817:139;;13715:248;;;:::o;13969:419::-;14135:4;14173:2;14162:9;14158:18;14150:26;;14222:9;14216:4;14212:20;14208:1;14197:9;14193:17;14186:47;14250:131;14376:4;14250:131;:::i;:::-;14242:139;;14140:248;;;:::o;14394:419::-;14560:4;14598:2;14587:9;14583:18;14575:26;;14647:9;14641:4;14637:20;14633:1;14622:9;14618:17;14611:47;14675:131;14801:4;14675:131;:::i;:::-;14667:139;;14565:248;;;:::o;14819:419::-;14985:4;15023:2;15012:9;15008:18;15000:26;;15072:9;15066:4;15062:20;15058:1;15047:9;15043:17;15036:47;15100:131;15226:4;15100:131;:::i;:::-;15092:139;;14990:248;;;:::o;15244:419::-;15410:4;15448:2;15437:9;15433:18;15425:26;;15497:9;15491:4;15487:20;15483:1;15472:9;15468:17;15461:47;15525:131;15651:4;15525:131;:::i;:::-;15517:139;;15415:248;;;:::o;15669:419::-;15835:4;15873:2;15862:9;15858:18;15850:26;;15922:9;15916:4;15912:20;15908:1;15897:9;15893:17;15886:47;15950:131;16076:4;15950:131;:::i;:::-;15942:139;;15840:248;;;:::o;16094:419::-;16260:4;16298:2;16287:9;16283:18;16275:26;;16347:9;16341:4;16337:20;16333:1;16322:9;16318:17;16311:47;16375:131;16501:4;16375:131;:::i;:::-;16367:139;;16265:248;;;:::o;16519:419::-;16685:4;16723:2;16712:9;16708:18;16700:26;;16772:9;16766:4;16762:20;16758:1;16747:9;16743:17;16736:47;16800:131;16926:4;16800:131;:::i;:::-;16792:139;;16690:248;;;:::o;16944:419::-;17110:4;17148:2;17137:9;17133:18;17125:26;;17197:9;17191:4;17187:20;17183:1;17172:9;17168:17;17161:47;17225:131;17351:4;17225:131;:::i;:::-;17217:139;;17115:248;;;:::o;17369:419::-;17535:4;17573:2;17562:9;17558:18;17550:26;;17622:9;17616:4;17612:20;17608:1;17597:9;17593:17;17586:47;17650:131;17776:4;17650:131;:::i;:::-;17642:139;;17540:248;;;:::o;17794:419::-;17960:4;17998:2;17987:9;17983:18;17975:26;;18047:9;18041:4;18037:20;18033:1;18022:9;18018:17;18011:47;18075:131;18201:4;18075:131;:::i;:::-;18067:139;;17965:248;;;:::o;18219:222::-;18312:4;18350:2;18339:9;18335:18;18327:26;;18363:71;18431:1;18420:9;18416:17;18407:6;18363:71;:::i;:::-;18317:124;;;;:::o;18447:442::-;18596:4;18634:2;18623:9;18619:18;18611:26;;18647:71;18715:1;18704:9;18700:17;18691:6;18647:71;:::i;:::-;18728:72;18796:2;18785:9;18781:18;18772:6;18728:72;:::i;:::-;18810;18878:2;18867:9;18863:18;18854:6;18810:72;:::i;:::-;18601:288;;;;;;:::o;18895:874::-;19150:4;19188:3;19177:9;19173:19;19165:27;;19202:71;19270:1;19259:9;19255:17;19246:6;19202:71;:::i;:::-;19283:72;19351:2;19340:9;19336:18;19327:6;19283:72;:::i;:::-;19365;19433:2;19422:9;19418:18;19409:6;19365:72;:::i;:::-;19447:66;19509:2;19498:9;19494:18;19485:6;19447:66;:::i;:::-;19523:73;19591:3;19580:9;19576:19;19567:6;19523:73;:::i;:::-;19606;19674:3;19663:9;19659:19;19650:6;19606:73;:::i;:::-;19689;19757:3;19746:9;19742:19;19733:6;19689:73;:::i;:::-;19155:614;;;;;;;;;;:::o;19775:129::-;19809:6;19836:20;;:::i;:::-;19826:30;;19865:33;19893:4;19885:6;19865:33;:::i;:::-;19816:88;;;:::o;19910:75::-;19943:6;19976:2;19970:9;19960:19;;19950:35;:::o;19991:311::-;20068:4;20158:18;20150:6;20147:30;20144:2;;;20180:18;;:::i;:::-;20144:2;20230:4;20222:6;20218:17;20210:25;;20290:4;20284;20280:15;20272:23;;20073:229;;;:::o;20308:311::-;20385:4;20475:18;20467:6;20464:30;20461:2;;;20497:18;;:::i;:::-;20461:2;20547:4;20539:6;20535:17;20527:25;;20607:4;20601;20597:15;20589:23;;20390:229;;;:::o;20625:169::-;20709:11;20743:6;20738:3;20731:19;20783:4;20778:3;20774:14;20759:29;;20721:73;;;;:::o;20800:305::-;20840:3;20859:20;20877:1;20859:20;:::i;:::-;20854:25;;20893:20;20911:1;20893:20;:::i;:::-;20888:25;;21047:1;20979:66;20975:74;20972:1;20969:81;20966:2;;;21053:18;;:::i;:::-;20966:2;21097:1;21094;21090:9;21083:16;;20844:261;;;;:::o;21111:185::-;21151:1;21168:20;21186:1;21168:20;:::i;:::-;21163:25;;21202:20;21220:1;21202:20;:::i;:::-;21197:25;;21241:1;21231:2;;21246:18;;:::i;:::-;21231:2;21288:1;21285;21281:9;21276:14;;21153:143;;;;:::o;21302:348::-;21342:7;21365:20;21383:1;21365:20;:::i;:::-;21360:25;;21399:20;21417:1;21399:20;:::i;:::-;21394:25;;21587:1;21519:66;21515:74;21512:1;21509:81;21504:1;21497:9;21490:17;21486:105;21483:2;;;21594:18;;:::i;:::-;21483:2;21642:1;21639;21635:9;21624:20;;21350:300;;;;:::o;21656:191::-;21696:4;21716:20;21734:1;21716:20;:::i;:::-;21711:25;;21750:20;21768:1;21750:20;:::i;:::-;21745:25;;21789:1;21786;21783:8;21780:2;;;21794:18;;:::i;:::-;21780:2;21839:1;21836;21832:9;21824:17;;21701:146;;;;:::o;21853:96::-;21890:7;21919:24;21937:5;21919:24;:::i;:::-;21908:35;;21898:51;;;:::o;21955:90::-;21989:7;22032:5;22025:13;22018:21;22007:32;;21997:48;;;:::o;22051:129::-;22097:7;22126:5;22115:16;;22132:42;22168:5;22132:42;:::i;:::-;22105:75;;;:::o;22186:126::-;22223:7;22263:42;22256:5;22252:54;22241:65;;22231:81;;;:::o;22318:77::-;22355:7;22384:5;22373:16;;22363:32;;;:::o;22401:86::-;22436:7;22476:4;22469:5;22465:16;22454:27;;22444:43;;;:::o;22493:129::-;22550:9;22583:33;22610:5;22583:33;:::i;:::-;22570:46;;22560:62;;;:::o;22628:281::-;22711:27;22733:4;22711:27;:::i;:::-;22703:6;22699:40;22841:6;22829:10;22826:22;22805:18;22793:10;22790:34;22787:62;22784:2;;;22852:18;;:::i;:::-;22784:2;22892:10;22888:2;22881:22;22671:238;;;:::o;22915:167::-;22952:3;22975:22;22991:5;22975:22;:::i;:::-;22966:31;;23019:4;23012:5;23009:15;23006:2;;;23027:18;;:::i;:::-;23006:2;23074:1;23067:5;23063:13;23056:20;;22956:126;;;:::o;23088:180::-;23136:77;23133:1;23126:88;23233:4;23230:1;23223:15;23257:4;23254:1;23247:15;23274:180;23322:77;23319:1;23312:88;23419:4;23416:1;23409:15;23443:4;23440:1;23433:15;23460:180;23508:77;23505:1;23498:88;23605:4;23602:1;23595:15;23629:4;23626:1;23619:15;23646:180;23694:77;23691:1;23684:88;23791:4;23788:1;23781:15;23815:4;23812:1;23805:15;23832:102;23873:6;23924:2;23920:7;23915:2;23908:5;23904:14;23900:28;23890:38;;23880:54;;;:::o;23940:174::-;24080:26;24076:1;24068:6;24064:14;24057:50;24046:68;:::o;24120:180::-;24260:32;24256:1;24248:6;24244:14;24237:56;24226:74;:::o;24306:225::-;24446:34;24442:1;24434:6;24430:14;24423:58;24515:8;24510:2;24502:6;24498:15;24491:33;24412:119;:::o;24537:165::-;24677:17;24673:1;24665:6;24661:14;24654:41;24643:59;:::o;24708:164::-;24848:16;24844:1;24836:6;24832:14;24825:40;24814:58;:::o;24878:168::-;25018:20;25014:1;25006:6;25002:14;24995:44;24984:62;:::o;25052:171::-;25192:23;25188:1;25180:6;25176:14;25169:47;25158:65;:::o;25229:171::-;25369:23;25365:1;25357:6;25353:14;25346:47;25335:65;:::o;25406:173::-;25546:25;25542:1;25534:6;25530:14;25523:49;25512:67;:::o;25585:176::-;25725:28;25721:1;25713:6;25709:14;25702:52;25691:70;:::o;25767:182::-;25907:34;25903:1;25895:6;25891:14;25884:58;25873:76;:::o;25955:172::-;26095:24;26091:1;26083:6;26079:14;26072:48;26061:66;:::o;26133:170::-;26273:22;26269:1;26261:6;26257:14;26250:46;26239:64;:::o;26309:114::-;26391:1;26384:5;26381:12;26371:2;;26397:18;;:::i;:::-;26371:2;26361:62;:::o;26429:122::-;26502:24;26520:5;26502:24;:::i;:::-;26495:5;26492:35;26482:2;;26541:1;26538;26531:12;26482:2;26472:79;:::o;26557:116::-;26627:21;26642:5;26627:21;:::i;:::-;26620:5;26617:32;26607:2;;26663:1;26660;26653:12;26607:2;26597:76;:::o;26679:108::-;26761:1;26754:5;26751:12;26741:2;;26777:1;26774;26767:12;26741:2;26731:56;:::o;26793:122::-;26866:24;26884:5;26866:24;:::i;:::-;26859:5;26856:35;26846:2;;26905:1;26902;26895:12;26846:2;26836:79;:::o
Swarm Source
ipfs://cd8e706a507b6a2c3a2b9f242459f5f4bd51d22ec0cff0208fbbc4ab2053bdef
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.