[ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "contract IERC20", "name": "_tig", "type": "address" }, { "internalType": "contract IGovernanceStaking", "name": "_staking", "type": "address" }, { "internalType": "address", "name": "_treasury", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "penalty", "type": "uint256" } ], "name": "EarlyTigClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "percent", "type": "uint256" } ], "name": "EarlyUnlockPenaltyUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "protocol", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "permission", "type": "bool" } ], "name": "FeePermissionUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_trader", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_tigAsset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "FeesAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "RewardClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extraRewards", "type": "address" } ], "name": "SetExtraRewards", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_tigAsset", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "TigAssetValueUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TigClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TigRewardsAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TigVested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" } ], "name": "TokenUnwhitelisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" } ], "name": "TokenWhitelisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "treasury", "type": "address" } ], "name": "TreasuryUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "time", "type": "uint256" } ], "name": "VestingPeriodUpdated", "type": "event" }, { "inputs": [], "name": "DIVISION_CONSTANT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "EPOCH_PERIOD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_EARLY_UNLOCK_PENALTY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_VESTING_PERIOD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "accRewardsPerToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_trader", "type": "address" }, { "internalType": "address", "name": "_tigAsset", "type": "address" }, { "internalType": "uint256", "name": "_fees", "type": "uint256" } ], "name": "addFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_epoch", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "addTigRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "canAddFees", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimTig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_from", "type": "uint256" }, { "internalType": "uint256", "name": "_to", "type": "uint256" } ], "name": "claimTigRanged", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_from", "type": "uint256" } ], "name": "claimableXTig", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_from", "type": "uint256" }, { "internalType": "uint256", "name": "_to", "type": "uint256" } ], "name": "claimableXTigTo", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "contractPending", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_from", "type": "uint256" } ], "name": "createVest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_from", "type": "uint256" }, { "internalType": "uint256", "name": "_to", "type": "uint256" } ], "name": "createVestTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentEpoch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "earlyClaimTig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_from", "type": "uint256" }, { "internalType": "uint256", "name": "_to", "type": "uint256" } ], "name": "earlyClaimTigRanged", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "earlyUnlockPenalty", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "epochAllocation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "epochAllocationClaimed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "epochFeesGenerated", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "extraRewards", "outputs": [ { "internalType": "contract IExtraRewards", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "extraRewardsPending", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "feesGenerated", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "hasEarnedBefore", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "lastClaimedEpoch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "address", "name": "_token", "type": "address" } ], "name": "pending", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "pendingEarlyTig", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "pendingTig", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" }, { "internalType": "bool", "name": "_allowed", "type": "bool" } ], "name": "setCanAddFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_percent", "type": "uint256" } ], "name": "setEarlyUnlockPenalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" } ], "name": "setExtraRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tigAsset", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "setTigAssetValue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" } ], "name": "setTreasury", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_time", "type": "uint256" } ], "name": "setVestingPeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stakedTigBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "staking", "outputs": [ { "internalType": "contract IGovernanceStaking", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tig", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tigAssetValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "trading", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_epoch", "type": "uint256" } ], "name": "unclaimedAllocation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "unwhitelistReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "upcomingXTig", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "userPaid", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "userRewardBatches", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "unlockTime", "type": "uint256" } ], "internalType": "struct IxTIG.RewardBatch[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "userRewards", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "unlockTime", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vestingPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "whitelistReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60c060405262278d0060095564012a05f200600a553480156200002157600080fd5b5060405162004697380380620046978339810160408190526200004491620002d3565b848460036200005483826200040e565b5060046200006382826200040e565b505050620000806200007a6200019f60201b60201c565b620001a3565b6001600160a01b03831615801590620000a157506001600160a01b03821615155b8015620000b657506001600160a01b03811615155b620000f65760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640160405180910390fd5b6001600160a01b03838116608081905283821660a0819052600680546001600160a01b0319169385169390931790925560405163095ea7b360e01b8152600481019290925260001960248301529063095ea7b3906044016020604051808303816000875af11580156200016d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001939190620004da565b50505050505062000505565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021d57600080fd5b81516001600160401b03808211156200023a576200023a620001f5565b604051601f8301601f19908116603f01168101908282118183101715620002655762000265620001f5565b816040528381526020925086838588010111156200028257600080fd5b600091505b83821015620002a6578582018301518183018401529082019062000287565b600093810190920192909252949350505050565b6001600160a01b0381168114620002d057600080fd5b50565b600080600080600060a08688031215620002ec57600080fd5b85516001600160401b03808211156200030457600080fd5b6200031289838a016200020b565b965060208801519150808211156200032957600080fd5b5062000338888289016200020b565b94505060408601516200034b81620002ba565b60608701519093506200035e81620002ba565b60808701519092506200037181620002ba565b809150509295509295909350565b600181811c908216806200039457607f821691505b602082108103620003b557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200040957600081815260208120601f850160051c81016020861015620003e45750805b601f850160051c820191505b818110156200040557828155600101620003f0565b5050505b505050565b81516001600160401b038111156200042a576200042a620001f5565b62000442816200043b84546200037f565b84620003bb565b602080601f8311600181146200047a5760008415620004615750858301515b600019600386901b1c1916600185901b17855562000405565b600085815260208120601f198616915b82811015620004ab578886015182559484019460019091019084016200048a565b5085821015620004ca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620004ed57600080fd5b81518015158114620004fe57600080fd5b9392505050565b60805160a05161412662000571600039600081816105be01528181610b790152818161165c015281816119aa01528181611b4e0152818161253e01526133a601526000818161080a015281816115d201528181611a5201528181611a9501526125d201526141266000f3fe608060405234801561001057600080fd5b50600436106103eb5760003560e01c80636b949d141161021a578063ab14154f11610135578063ddff6c0b116100c8578063ec44acf211610097578063f2fde38b1161007c578063f2fde38b14610991578063f41c33e9146109a4578063ff05db80146109c457600080fd5b8063ec44acf21461095e578063f0f442601461097e57600080fd5b8063ddff6c0b14610901578063e21c81d314610921578063e5a5e67414610941578063ea24ea3c1461094b57600080fd5b8063d642831f11610104578063d642831f14610882578063db89461b14610895578063dd62ed3e146108a8578063ddb52072146108ee57600080fd5b8063ab14154f1461083f578063bc2fde6014610847578063d294f0931461085a578063d3ff8e091461086257600080fd5b806395d89b41116101ad578063a457c2d71161017c578063a457c2d7146107e6578063a4813488146107f9578063a8780f5314610805578063a9059cbb1461082c57600080fd5b806395d89b41146107b95780639afe4d41146107c15780639c511ad4146107d4578063a2d6942e146107de57600080fd5b806376671808116101e9578063766718081461076d57806386e32fe9146107755780638da5cb5b14610788578063929b629c146107a657600080fd5b80636b949d141461071357806370a0823114610726578063715018a61461075c5780637313ee5a1461076457600080fd5b8063395093511161030a5780635d252bd61161029d57806362907ea31161026c57806362907ea3146106a457806363c2a20a146106ad57806365708083146106d55780636955fb36146106e857600080fd5b80635d252bd61461063e5780635eaca60414610651578063605544151461067157806361d027b31461068457600080fd5b80634cf088d9116102d95780634cf088d9146105b957806353e3f083146106055780635794f0d7146106185780635cf5272d1461062b57600080fd5b806339509351146105605780633dd7c05a1461057357806340bee0ed1461059357806344c95eb9146105a657600080fd5b806318160ddd1161038257806328d3eabe1161035157806328d3eabe14610512578063313ce567146105255780633299eac514610534578063388d89421461054057600080fd5b806318160ddd146104c157806319bc9ae8146104c957806323b872dd146104dc578063279efc63146104ef57600080fd5b8063095ea7b3116103be578063095ea7b314610460578063103d52251461048357806313814e2a1461048b57806317e72cdb1461049e57600080fd5b806304570ebd146103f057806305a251de1461041657806306fdde031461043657806308b4bd631461044b575b600080fd5b6104036103fe366004613c5c565b6109ef565b6040519081526020015b60405180910390f35b610403610424366004613c77565b60126020526000908152604090205481565b61043e610a7d565b60405161040d9190613cb4565b61045e610459366004613c77565b610b0f565b005b61047361046e366004613d05565b610b2e565b604051901515815260200161040d565b610403610b48565b61045e610499366004613d2f565b610bfe565b6104736104ac366004613c5c565b600f6020526000908152604090205460ff1681565b600254610403565b6104036104d7366004613d6b565b610e37565b6104736104ea366004613d2f565b610f6f565b6104736104fd366004613c5c565b60186020526000908152604090205460ff1681565b61045e610520366004613dac565b610f93565b6040516012815260200161040d565b6104036401bf08eb0081565b61040361054e366004613c5c565b60136020526000908152604090205481565b61047361056e366004613d05565b611026565b610586610581366004613c5c565b611072565b60405161040d9190613de3565b61045e6105a1366004613c77565b611108565b61045e6105b4366004613c5c565b6111b9565b6105e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161040d565b61045e610613366004613e32565b6112a1565b61045e610626366004613d05565b6114de565b61045e610639366004613e32565b61153a565b61045e61064c366004613e32565b6116ff565b61040361065f366004613c77565b60116020526000908152604090205481565b61040361067f366004613c5c565b611b00565b6006546105e09073ffffffffffffffffffffffffffffffffffffffff1681565b610403600a5481565b6106c06106bb366004613d05565b611bbc565b6040805192835260208301919091520161040d565b61045e6106e3366004613c77565b611bf8565b6104036106f6366004613e54565b601560209081526000928352604080842090915290825290205481565b61045e610721366004613c5c565b611ca4565b610403610734366004613c5c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61045e611d23565b61040360095481565b610403611d37565b610403610783366004613d05565b611d46565b60055473ffffffffffffffffffffffffffffffffffffffff166105e0565b6104036107b4366004613c5c565b611d6b565b61043e611df1565b6104036107cf366004613c5c565b611e00565b6104036201518081565b61045e611ef1565b6104736107f4366004613d05565b611f0f565b6104036402540be40081565b6105e07f000000000000000000000000000000000000000000000000000000000000000081565b61047361083a366004613d05565b611fe0565b61045e611fee565b610403610855366004613c5c565b612009565b61045e612131565b610403610870366004613c5c565b600b6020526000908152604090205481565b610403610890366004613e77565b61213a565b61045e6108a3366004613c5c565b6121d1565b6104036108b6366004613d6b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6104036108fc366004613c77565b6122ba565b61040361090f366004613c77565b60106020526000908152604090205481565b6008546105e09073ffffffffffffffffffffffffffffffffffffffff1681565b61040362278d0081565b61045e610959366004613e32565b6122de565b6007546105e09073ffffffffffffffffffffffffffffffffffffffff1681565b61045e61098c366004613c5c565b612635565b61045e61099f366004613c5c565b612729565b6104036109b2366004613c5c565b60176020526000908152604090205481565b6104036109d2366004613d6b565b601460209081526000928352604080842090915290825290205481565b6000806109ff6201518042613ed9565b60008181526010602052604081205491925003610a1f5750600092915050565b6000818152601060209081526040808320546015835281842073ffffffffffffffffffffffffffffffffffffffff881685528352818420548585526011909352922054610a6c9190613f14565b610a769190613ed9565b9392505050565b606060038054610a8c90613f2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab890613f2b565b8015610b055780601f10610ada57610100808354040283529160200191610b05565b820191906000526020600020905b815481529060010190602001808311610ae857829003601f168201915b5050505050905090565b6000610b1e6201518042613ed9565b9050610b2a82826112a1565b5050565b600033610b3c8185856127dd565b60019150505b92915050565b6040517facc3a9390000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063acc3a93990602401602060405180830381865afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190613f7e565b905090565b336000908152600f602052604090205460ff16610c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f215065726d697373696f6e00000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b6020526040812054670de0b6b3a764000090610cb69084613f14565b610cc09190613ed9565b90506000610cd16201518042613ed9565b600081815260156020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152812080549293508492909190610d15908490613f97565b909155505073ffffffffffffffffffffffffffffffffffffffff851660009081526018602052604090205460ff16610da35773ffffffffffffffffffffffffffffffffffffffff8516600090815260186020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055601790915290208190555b60008181526010602052604081208054849290610dc1908490613f97565b92505081905550818473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2bd3738c816b3b49aa6fdfd3d94fe964af5ad3398d3dfbf62c0251a772b62cf086604051610e2891815260200190565b60405180910390a45050505050565b6000610e41610b48565b1580610e4d5750600254155b15610e5a57506000610b42565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260146020908152604080832093861683529290522054670de0b6b3a7640000610e9f60025490565b610ea885611d6b565b610eba90670de0b6b3a7640000613f14565b610ec49190613ed9565b610ecc610b48565b610ed586611b00565b610ee790670de0b6b3a7640000613f14565b610ef19190613ed9565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260136020526040902054610f219190613f97565b610f2b9190613f97565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054610f5b9190613f14565b610f659190613ed9565b610a769190613faa565b600033610f7d858285612990565b610f88858585612a67565b506001949350505050565b610f9b612ac9565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f4f47723fd7a04e5bd2c3ead0e8548b357d18e02b9c3ef9cfd741a2e29f1a409491015b60405180910390a25050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190610b3c908290869061106d908790613f97565b6127dd565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601660209081526040808320805482518185028101850190935280835260609492939192909184015b828210156110fd578382906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050815260200190600101906110b7565b505050509050919050565b611110612ac9565b62278d0081111561117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f506572696f6420746f6f206c6f6e6700000000000000000000000000000000006044820152606401610c73565b60098190556040518181527fc21cb0f112058f1eb0e3313a577dfc27e6be5b39127591e05245343a422e4915906020015b60405180910390a150565b6111c1612ac9565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d602052604090205460ff16611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f742077686974656c697374656400000000000000000000000000000000006044820152606401610c73565b61125b600c82612b4a565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f108cc7e243d7eb6c2052789466e0961bb24cd62395e2c99e704001b48107a061906020016111ae565b6000825b828110156113725760008181526010602052604090205415611360576000818152601060209081526040808320546015835281842033855283528184205485855260119093529083205490916112fa91613f14565b6113049190613ed9565b9050806000036113145750611360565b61131e8184613f97565b600083815260156020908152604080832033845282528083208390558583526012909152812080549295508392909190611359908490613f97565b9091555050505b8061136a81613fbd565b9150506112a5565b50806000036113dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4e6f20666565732067656e6572617465642062792074726164657200000000006044820152606401610c73565b3360008181526017602052604090208390556113f890612d0f565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280838152602001600954426114569190613f97565b90528154600181810184556000938452602093849020835160029093020191825592909101519101556114893382612e98565b61149233612f8b565b60405181815233907fd3a0ae61a716b832878d3efa7e651dda495884aa726d26e17e4754f17ae72a0e9060200160405180910390a26009546000036114d9576114d9611fee565b505050565b6114e6612ac9565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600b6020526040808220849055518392917f3afbd4812bfd207933fdf7c147e3b75b1b74dda74766701c2a0ec79c9ada842591a35050565b611542612ac9565b61154f6201518042613ed9565b8210156115b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f20706173742065706f6368730000000000000000000000000000000000006044820152606401610c73565b6115fa73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846130f9565b60008281526011602052604081208054839290611618908490613f97565b9091555061162690506131d5565b6040517f7b0472f000000000000000000000000000000000000000000000000000000000815260048101829052600060248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690637b0472f090604401600060405180830381600087803b1580156116b557600080fd5b505af11580156116c9573d6000803e3d6000fd5b50506040518381523392507f870afb07fca67b69dd3985591162df5e817f6cab84fb60f2c7b49aa2823c7ed7915060200161101a565b3360009081526016602052604081208054909181900361177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f2054494720746f20636c61696d00000000000000000000000000000000006044820152606401610c73565b828110156117e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5f746f2065786365656473206c656e00000000000000000000000000000000006044820152606401610c73565b6117ee33612d0f565b6000805b8486101561197157600084878154811061180e5761180e613ff5565b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050905080600001518361184d9190613f97565b92508060200151421061186d5780516118669083613f97565b91506118a9565b6402540be400600a546402540be4006118869190613faa565b82516118929190613f14565b61189c9190613ed9565b6118a69083613f97565b91505b846118b5600186613faa565b815481106118c5576118c5613ff5565b90600052602060002090600202018588815481106118e5576118e5613ff5565b600091825260209091208254600290920201908155600191820154910155845485908061191457611914614024565b60008281526020812060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909301928302018181556001015590558361195a81614053565b945050858061196890614053565b965050506117f2565b61197b338361361d565b6040517f2e17de78000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e17de7890602401600060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b5050505060008183611a299190613faa565b9050611a3433612f8b565b600654611a7b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169116836137e1565b611abc73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633846137e1565b604080518381526020810183905233917fb034e6fe6c451f4adf82dae982ae1f3bf57fc9b0d525c5ce8076618c00ff46f2910160405180910390a250505050505050565b6040517f19bc9ae800000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff82811660248301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906319bc9ae8906044015b602060405180830381865afa158015611b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190613f7e565b60166020528160005260406000208181548110611bd857600080fd5b600091825260209091206002909102018054600190910154909250905082565b611c00612ac9565b6401bf08eb00811115611c6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4261642070657263656e740000000000000000000000000000000000000000006044820152606401610c73565b600a8190556040518181527fdb5238db799e30b0f254a3356d2a39443e699256a8921c1a93005549af2a0388906020016111ae565b611cac612ac9565b611cb46131d5565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f89bfc9a76422bf48f177ce9437ea5353969bb785025ae24a085d02c5c5691d5790600090a250565b611d2b612ac9565b611d356000613837565b565b6000610bf96201518042613ed9565b600080611d566201518042613ed9565b9050611d6384848361213a565b949350505050565b60085460009073ffffffffffffffffffffffffffffffffffffffff16611d9357506000919050565b6008546040517f19bc9ae800000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8481166024830152909116906319bc9ae890604401611b7b565b606060048054610a8c90613f2b565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260166020908152604080832080548251818502810185019093528083528493849084015b82821015611e8657838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611e40565b50508251929350600091508190505b82811015611ee8576000848281518110611eb157611eb1613ff5565b6020026020010151905080602001514210611ed5578051611ed29084613f97565b92505b5080611ee081613fbd565b915050611e95565b50949350505050565b3360009081526016602052604081205490611f0c90826116ff565b50565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015611fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610c73565b610f8882868684036127dd565b600033610b3c818585612a67565b3360009081526016602052604081205490611f0c90826122de565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260166020908152604080832080548251818502810185019093528083528493849084015b8282101561208f57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190612049565b50508251929350600091508190505b82811015611ee85760008482815181106120ba576120ba613ff5565b60200260200101519050806020015142106120e25780516120db9084613f97565b925061211e565b6402540be400600a546402540be4006120fb9190613faa565b82516121079190613f14565b6121119190613ed9565b61211b9084613f97565b92505b508061212981613fbd565b91505061209e565b611d3533612d0f565b600080835b83811015611ee857600081815260106020526040902054156121bf576000818152601060209081526040808320546015835281842073ffffffffffffffffffffffffffffffffffffffff8b16855283528184205485855260119093529220546121a89190613f14565b6121b29190613ed9565b6121bc9083613f97565b91505b806121c981613fbd565b91505061213f565b6121d9612ac9565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d602052604090205460ff1615612269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c72656164792077686974656c6973746564000000000000000000000000006044820152606401610c73565b612274600c826138ae565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f6a65f90b1a644d2faac467a21e07e50e3f8fa5846e26231d30ae79a417d3d262906020016111ae565b6000818152601260209081526040808320546011909252822054610b429190613faa565b6122e733612d0f565b336000908152601660205260409020805482811015612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5f746f2065786365656473206c656e00000000000000000000000000000000006044820152606401610c73565b60005b8385101561249b57600083868154811061238157612381613ff5565b6000918252602091829020604080518082019091526002909202018054825260010154918101829052915042106124875780516123be9083613f97565b9150836123cc600185613faa565b815481106123dc576123dc613ff5565b90600052602060002090600202018487815481106123fc576123fc613ff5565b600091825260209091208254600290920201908155600191820154910155835484908061242b5761242b614024565b60008281526020812060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909301928302018181556001015590558261247181614053565b935050848061247f90614053565b955050612495565b8561249181613fbd565b9650505b50612365565b80600003612505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f2054494720746f20636c61696d00000000000000000000000000000000006044820152606401610c73565b61250f338261361d565b6040517f2e17de78000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e17de7890602401600060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b505050506125b833612f8b565b6125f973ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633836137e1565b60405181815233907f0d19320b7f0d54529c06facb2cb3b5b50ca9b19af3642ca7dff95d3bca3784409060200160405180910390a25050505050565b61263d612ac9565b73ffffffffffffffffffffffffffffffffffffffff81166126ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a65726f206164647265737300000000000000000000000000000000000000006044820152606401610c73565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b612731612ac9565b73ffffffffffffffffffffffffffffffffffffffff81166127d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c73565b611f0c81613837565b73ffffffffffffffffffffffffffffffffffffffff831661287f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610c73565b73ffffffffffffffffffffffffffffffffffffffff8216612922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610c73565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612a615781811015612a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c73565b612a6184848484036127dd565b50505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f785449473a204e6f207472616e736665720000000000000000000000000000006044820152606401610c73565b60055473ffffffffffffffffffffffffffffffffffffffff163314611d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c73565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604090205460ff1615610b2a5773ffffffffffffffffffffffffffffffffffffffff8116600090815260018084016020908152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556002860190915282205484549092918591612be69190613faa565b81548110612bf657612bf6613ff5565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452600288019092526040808420869055908616835282209190915584549091508190859084908110612c5257612c52613ff5565b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790558354849080612cb157612cb1614024565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905550505050565b612d176131d5565b6000600c600001805480602002602001604051908101604052809291908181526020018280548015612d7f57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311612d54575b505083519394506000925050505b81811015612a61576000838281518110612da957612da9613ff5565b602002602001015190506000612dbf8683610e37565b90508015612e835773ffffffffffffffffffffffffffffffffffffffff808716600090815260146020908152604080832093861683529290529081208054839290612e0b908490613f97565b90915550612e32905073ffffffffffffffffffffffffffffffffffffffff831687836137e1565b8573ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724182604051612e7a91815260200190565b60405180910390a25b50508080612e9090613fbd565b915050612d8d565b73ffffffffffffffffffffffffffffffffffffffff8216612f15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c73565b8060026000828254612f279190613f97565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000600c600001805480602002602001604051908101604052809291908181526020018280548015612ff357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311612fc8575b505083519394506000925050505b81811015612a6157600083828151811061301d5761301d613ff5565b60200260200101519050670de0b6b3a7640000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461309c8773ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6130a69190613f14565b6130b09190613ed9565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526014602090815260408083209590931682529390935290912055806130f181613fbd565b915050613001565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612a619085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613976565b60006131e0600c5490565b905060008167ffffffffffffffff8111156131fd576131fd614088565b604051908082528060200260200182016040528015613226578160200160208202803683370190505b50905060005b82811015613302576000613241600c83613a82565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d29190613f7e565b8383815181106132e4576132e4613ff5565b602090810291909101015250806132fa81613fbd565b91505061322c565b5060085473ffffffffffffffffffffffffffffffffffffffff16156133a457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634e71d92d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561338b57600080fd5b505af115801561339f573d6000803e3d6000fd5b505050505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634e71d92d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b5050505060005b828110156114d957600061343c600c83613a82565b9050600083838151811061345257613452613ff5565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156134c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134eb9190613f7e565b6134f59190613faa565b90506134ff610b48565b158061350b5750600254155b1561353e576006546135379073ffffffffffffffffffffffffffffffffffffffff8481169116836137e1565b505061360b565b6000613548610b48565b61355a83670de0b6b3a7640000613f14565b6135649190613ed9565b73ffffffffffffffffffffffffffffffffffffffff841660009081526013602052604081208054929350839290919061359e908490613f97565b90915550506006546136079073ffffffffffffffffffffffffffffffffffffffff166135c8610b48565b6002546135d59086613f14565b6135df9190613ed9565b6135e99085613faa565b73ffffffffffffffffffffffffffffffffffffffff861691906137e1565b5050505b8061361581613fbd565b915050613427565b73ffffffffffffffffffffffffffffffffffffffff82166136c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610c73565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015613776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610c73565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526114d99084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613153565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604090205460ff16610b2a5773ffffffffffffffffffffffffffffffffffffffff16600081815260018381016020908152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016841790558554600287018352908420819055918201855593825292902090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b60006139d8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613ac29092919063ffffffff16565b8051909150156114d957808060200190518101906139f691906140b7565b6114d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c73565b6000826000018281548110613a9957613a99613ff5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169392505050565b6060611d638484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613af691906140d4565b60006040518083038185875af1925050503d8060008114613b33576040519150601f19603f3d011682016040523d82523d6000602084013e613b38565b606091505b5091509150613b4987838387613b54565b979650505050505050565b60608315613bea578251600003613be35773ffffffffffffffffffffffffffffffffffffffff85163b613be3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c73565b5081611d63565b611d638383815115613bff5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c739190613cb4565b803573ffffffffffffffffffffffffffffffffffffffff81168114613c5757600080fd5b919050565b600060208284031215613c6e57600080fd5b610a7682613c33565b600060208284031215613c8957600080fd5b5035919050565b60005b83811015613cab578181015183820152602001613c93565b50506000910152565b6020815260008251806020840152613cd3816040850160208701613c90565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060408385031215613d1857600080fd5b613d2183613c33565b946020939093013593505050565b600080600060608486031215613d4457600080fd5b613d4d84613c33565b9250613d5b60208501613c33565b9150604084013590509250925092565b60008060408385031215613d7e57600080fd5b613d8783613c33565b9150613d9560208401613c33565b90509250929050565b8015158114611f0c57600080fd5b60008060408385031215613dbf57600080fd5b613dc883613c33565b91506020830135613dd881613d9e565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015613e2557815180518552860151868501529284019290850190600101613e00565b5091979650505050505050565b60008060408385031215613e4557600080fd5b50508035926020909101359150565b60008060408385031215613e6757600080fd5b82359150613d9560208401613c33565b600080600060608486031215613e8c57600080fd5b613e9584613c33565b95602085013595506040909401359392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082613f0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610b4257610b42613eaa565b600181811c90821680613f3f57607f821691505b602082108103613f78577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215613f9057600080fd5b5051919050565b80820180821115610b4257610b42613eaa565b81810381811115610b4257610b42613eaa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fee57613fee613eaa565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008161406257614062613eaa565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156140c957600080fd5b8151610a7681613d9e565b600082516140e6818460208701613c90565b919091019291505056fea264697066735822122045ba299923e947bf714781cc8030041f68fc3727886e71a4a1c6b3c485e2d99464736f6c6343000813003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000d70027ff5d1a68c6488cdfc9bd2115053306944f000000000000000000000000d1a287a6bef998bacd881ba7533b20bb87ee74940000000000000000000000008c807cddb6faadf96956353f70ea60d63fab69d5000000000000000000000000000000000000000000000000000000000000000a566573746564205449470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047854494700000000000000000000000000000000000000000000000000000000
0xa264697066735822122045ba299923e947bf714781cc8030041f68fc3727886e71a4a1c6b3c485e2d99464736f6c6343000813003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000d70027ff5d1a68c6488cdfc9bd2115053306944f000000000000000000000000d1a287a6bef998bacd881ba7533b20bb87ee74940000000000000000000000008c807cddb6faadf96956353f70ea60d63fab69d5000000000000000000000000000000000000000000000000000000000000000a566573746564205449470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047854494700000000000000000000000000000000000000000000000000000000