{
  "_format": "hh-sol-artifact-1",
  "contractName": "Keep3rForTest",
  "sourceName": "solidity/for-test/Keep3rForTest.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keep3rHelper",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keep3rV1",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keep3rV1Proxy",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_kp3rWethPool",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyAJob",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyAKeeper",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyDisputed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BondsLocked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BondsUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Disputed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DisputerExistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DisputerUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientFunds",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientJobTokenCredits",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobAlreadyAdded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobDisputed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobLiquidityInsufficient",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobLiquidityLessThanMin",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobLiquidityUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobMigrationImpossible",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobMigrationLocked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobMigrationUnavailable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobTokenCreditsLocked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobTokenInsufficient",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobTokenUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobUnapproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobUnavailable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LiquidityPairApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LiquidityPairUnapproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LiquidityPairUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinRewardPeriod",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoGovernanceZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotDisputed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyDisputer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyGovernance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyJobOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPendingGovernance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPendingJobOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlySlasher",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SlasherExistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SlasherUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenUnallowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnbondsLocked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnbondsUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_bond",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Activation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_bondTime",
          "type": "uint256"
        }
      ],
      "name": "BondTimeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Bonding",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_jobOrKeeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "Dispute",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "DisputerAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "DisputerRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "DustSent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_fee",
          "type": "uint256"
        }
      ],
      "name": "FeeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_pendingGovernance",
          "type": "address"
        }
      ],
      "name": "GovernanceProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "GovernanceSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_inflationPeriod",
          "type": "uint256"
        }
      ],
      "name": "InflationPeriodChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_jobOwner",
          "type": "address"
        }
      ],
      "name": "JobAddition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_fromJob",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_toJob",
          "type": "address"
        }
      ],
      "name": "JobMigrationRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_fromJob",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_toJob",
          "type": "address"
        }
      ],
      "name": "JobMigrationSuccessful",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "JobOwnershipAssent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_pendingOwner",
          "type": "address"
        }
      ],
      "name": "JobOwnershipChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "JobSlashLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "JobSlashToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_keep3rHelper",
          "type": "address"
        }
      ],
      "name": "Keep3rHelperChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_keep3rV1",
          "type": "address"
        }
      ],
      "name": "Keep3rV1Change",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_keep3rV1Proxy",
          "type": "address"
        }
      ],
      "name": "Keep3rV1ProxyChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "KeeperRevoke",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "KeeperSlash",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_gasLeft",
          "type": "uint256"
        }
      ],
      "name": "KeeperValidation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_credit",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_gasLeft",
          "type": "uint256"
        }
      ],
      "name": "KeeperWork",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_kp3rWethPool",
          "type": "address"
        }
      ],
      "name": "Kp3rWethPoolChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "LiquidityAddition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "LiquidityApproval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rewardedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_currentCredits",
          "type": "uint256"
        }
      ],
      "name": "LiquidityCreditsForced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rewardedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_currentCredits",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_periodCredits",
          "type": "uint256"
        }
      ],
      "name": "LiquidityCreditsReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_liquidityMinimum",
          "type": "uint256"
        }
      ],
      "name": "LiquidityMinimumChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "LiquidityRevocation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "LiquidityWithdrawal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_jobOrKeeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_resolver",
          "type": "address"
        }
      ],
      "name": "Resolve",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rewardPeriodTime",
          "type": "uint256"
        }
      ],
      "name": "RewardPeriodTimeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "SlasherAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "SlasherRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "TokenCreditAddition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "TokenCreditWithdrawal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_unbondTime",
          "type": "uint256"
        }
      ],
      "name": "UnbondTimeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeperOrJob",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_unbonding",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Unbonding",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_bond",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Withdrawal",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BASE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ETH_ADDRESS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_REWARD_PERIOD_TIME",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_fromJob",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_toJob",
          "type": "address"
        }
      ],
      "name": "acceptJobMigration",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "acceptJobOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        }
      ],
      "name": "activate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "addDisputer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "addJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "addLiquidityToJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "addSlasher",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "addTokenCreditsToJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "approveLiquidity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "approvedLiquidities",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_list",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "bond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bondTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_payment",
          "type": "uint256"
        }
      ],
      "name": "bondedPayment",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "bonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "canActivateAfter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "canWithdrawAfter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "changeJobOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "directTokenPayment",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_jobOrKeeper",
          "type": "address"
        }
      ],
      "name": "dispute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "disputers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "disputes",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "firstSeen",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "forceLiquidityCreditsToJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "hasBonded",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "inflationPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_bond",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_minBond",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_earned",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_age",
          "type": "uint256"
        }
      ],
      "name": "isBondedKeeper",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_isBondedKeeper",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "isKeeper",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_isKeeper",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "jobLiquidityCredits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_liquidityCredits",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "jobOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "jobPendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "jobPeriodCredits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_periodCredits",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "jobTokenCredits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "jobTokenCreditsAddedAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "jobs",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_list",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keep3rHelper",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keep3rV1",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keep3rV1Proxy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keepers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_list",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "kp3rWethPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "liquidityAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "liquidityMinimum",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_fromJob",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_toJob",
          "type": "address"
        }
      ],
      "name": "migrateJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "observeLiquidity",
      "outputs": [
        {
          "components": [
            {
              "internalType": "int56",
              "name": "current",
              "type": "int56"
            },
            {
              "internalType": "int56",
              "name": "difference",
              "type": "int56"
            },
            {
              "internalType": "uint256",
              "name": "period",
              "type": "uint256"
            }
          ],
          "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
          "name": "_tickCache",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "pendingBonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingGovernance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "pendingJobMigrations",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "pendingUnbonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "quoteLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_periodCredits",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "removeDisputer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "removeSlasher",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_jobOrKeeper",
          "type": "address"
        }
      ],
      "name": "resolve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "revoke",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "revokeLiquidity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardPeriodTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewardedAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "sendDust",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_bondTime",
          "type": "uint256"
        }
      ],
      "name": "setBondTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_fee",
          "type": "uint256"
        }
      ],
      "name": "setFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "setGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_inflationPeriod",
          "type": "uint256"
        }
      ],
      "name": "setInflationPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rHelper",
          "type": "address"
        }
      ],
      "name": "setKeep3rHelper",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rV1",
          "type": "address"
        }
      ],
      "name": "setKeep3rV1",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rV1Proxy",
          "type": "address"
        }
      ],
      "name": "setKeep3rV1Proxy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_kp3rWethPool",
          "type": "address"
        }
      ],
      "name": "setKp3rWethPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_liquidityMinimum",
          "type": "uint256"
        }
      ],
      "name": "setLiquidityMinimum",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_rewardPeriodTime",
          "type": "uint256"
        }
      ],
      "name": "setRewardPeriodTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_unbondTime",
          "type": "uint256"
        }
      ],
      "name": "setUnbondTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_bonded",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "slash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "slashLiquidityFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "slashTokenFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "slashers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "totalJobCredits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_credits",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "unbond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "unbondLiquidityFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unbondTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "viewTickOrder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        }
      ],
      "name": "withdrawLiquidityFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        }
      ],
      "name": "withdrawTokenCreditsFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "workCompleted",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "worked",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "workedAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b5060405162006251380380620062518339810160408190526200006191620001d8565b600160005584848484848383838388806001600160a01b038116620000985760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200014357600080fd5b505afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e919062000248565b6001600160a01b03919091166000908152600f60205260409020805460ff191691151591909117905550620002739b505050505050505050505050565b80516001600160a01b0381168114620001d357600080fd5b919050565b600080600080600060a08688031215620001f157600080fd5b620001fc86620001bb565b94506200020c60208701620001bb565b93506200021c60408701620001bb565b92506200022c60608701620001bb565b91506200023c60808701620001bb565b90509295509295909350565b6000602082840312156200025b57600080fd5b815180151581146200026c57600080fd5b9392505050565b615fce80620002836000396000f3fe608060405234801561001057600080fd5b50600436106104d85760003560e01c806390a4684e11610283578063c7ae40d01161015c578063ec342ad0116100ce578063f25e311b11610092578063f25e311b14610c8d578063f39c38a014610ca0578063f75f9f7b14610cb3578063f9d46cf214610cc6578063fc253d2b14610cd9578063fe75bc4614610ce257600080fd5b8063ec342ad014610c15578063ec8ca64314610c1e578063f0f346b914610c47578063f11a1d1a14610c5a578063f136a09d14610c6d57600080fd5b8063dd2080d611610120578063dd2080d614610ba0578063ddca3f4314610bb3578063e326ac4314610bbc578063e74f823914610bdc578063ebbb619414610bef578063ec00cdfc14610c0257600080fd5b8063c7ae40d014610b29578063cb4be2bb14610b3c578063cb54694d14610b4f578063cd22af1b14610b62578063d55995fe14610b8d57600080fd5b8063a7d2e784116101f5578063b2392233116101b9578063b239223314610a8f578063b440027f14610aa2578063b600702a14610acd578063b7e7734014610ae0578063b87fcbff14610af3578063c5198abc14610b1657600080fd5b8063a7d2e78414610a2a578063aac6aa9c14610a33578063ab033ea914610a46578063af320e8114610a59578063b0103b1a14610a6c57600080fd5b8063a214580911610247578063a21458091461098b578063a39744b51461099e578063a515366a146109c9578063a5d059ca146109dc578063a676f9ff146109ef578063a734f06e14610a0f57600080fd5b806390a4684e14610921578063951dc22c14610934578063966abd001461093c57806398e90a0f1461094f5780639d5c33d81461097857600080fd5b8063594a3a93116103b55780636cf262bc116103275780637b40c913116102eb5780637b40c913146108945780637c8fce23146108a7578063878c723e146108af5780638bb6dfa8146108d85780638cb22b76146108eb5780638fe204dd1461090e57600080fd5b80636cf262bc1461083f5780636e2a9ca61461085257806372da828a1461086557806374a8f10314610878578063768b5d901461088b57600080fd5b8063633fb68f11610379578063633fb68f146107bf57806364bb43ee146107c857806368a9f19c146107db578063694798e6146107ee57806369fe0e2d146108195780636ba42aaa1461082c57600080fd5b8063594a3a931461076a57806359a2255e1461077d5780635aa6e675146107905780635ebe23f0146107a35780635feeb794146107ac57600080fd5b80631c5a9d9c1161044e578063454c503111610412578063454c5031146106e8578063461411bc1461071457806351cff8d91461071e57806352a4de291461073157806355ea6c4714610744578063575288bf1461075757600080fd5b80631c5a9d9c146106445780631ef94b911461065757806321040b0114610682578063238efcbc146106ad578063274a8db4146106b557600080fd5b806311466d72116104a057806311466d721461056b57806315006b821461057e578063160e1e31146105a9578063165e62e7146105bc578063168f92e7146105f95780631b44555e1461062457600080fd5b8063034d4c61146104dd57806307b435c2146105035780630c620bce1461052e5780630d6a1f87146105435780631101eb4114610556575b600080fd5b6104f06104eb366004615a12565b610cf5565b6040519081526020015b60405180910390f35b6104f0610511366004615a4c565b601260209081526000928352604080842090915290825290205481565b610536610dfa565b6040516104fa9190615d20565b6104f0610551366004615bb5565b610e0b565b610569610564366004615ad0565b610f1e565b005b610569610579366004615bb5565b611078565b6104f061058c366004615a4c565b601060209081526000928352604080842090915290825290205481565b6105696105b7366004615a12565b611216565b6105cf6105ca366004615a12565b611373565b604080518251600690810b825260208085015190910b9082015291810151908201526060016104fa565b6104f0610607366004615a4c565b600960209081526000928352604080842090915290825290205481565b6104f0610632366004615a12565b60056020526000908152604090205481565b610569610652366004615a12565b611739565b601b5461066a906001600160a01b031681565b6040516001600160a01b0390911681526020016104fa565b6104f0610690366004615a4c565b601360209081526000928352604080842090915290825290205481565b6105696117fb565b6106d86106c3366004615a12565b601a6020526000908152604090205460ff1681565b60405190151581526020016104fa565b6106d86106f6366004615a12565b6001600160a01b03166000908152600f602052604090205460ff1690565b6104f06201518081565b61056961072c366004615a12565b611884565b61056961073f366004615ad0565b611a76565b610569610752366004615a12565b611ca9565b610569610765366004615ad0565b611d5d565b610569610778366004615a4c565b612018565b61056961078b366004615a12565b6120bd565b60175461066a906001600160a01b031681565b6104f0601f5481565b6105696107ba366004615a12565b61216f565b6104f060215481565b6105696107d6366004615a12565b61242b565b6105696107e9366004615a12565b6124b7565b6104f06107fc366004615a4c565b602860209081526000928352604080842090915290825290205481565b610569610827366004615c76565b612570565b6106d861083a366004615a12565b6125d0565b6104f061084d366004615a12565b612621565b610569610860366004615ad0565b612769565b610569610873366004615a12565b6128b5565b610569610886366004615a12565b612955565b6104f060225481565b601e5461066a906001600160a01b031681565b610536612a3c565b61066a6108bd366004615a12565b6001602052600090815260409020546001600160a01b031681565b6104f06108e6366004615a12565b612a48565b6106d86108f9366004615a12565b60146020526000908152604090205460ff1681565b61056961091c366004615c76565b612b20565b61056961092f366004615a4c565b612b7e565b610536612c68565b61056961094a366004615be1565b612c74565b61066a61095d366004615a12565b6002602052600090815260409020546001600160a01b031681565b610569610986366004615a12565b612d8a565b610569610999366004615a85565b612e43565b6104f06109ac366004615a4c565b600860209081526000928352604080842090915290825290205481565b6105696109d7366004615bb5565b613023565b6105696109ea366004615bb5565b61327a565b6104f06109fd366004615a12565b60296020526000908152604090205481565b61066a73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6104f060205481565b610569610a41366004615a12565b613354565b610569610a54366004615a12565b613409565b610569610a67366004615a4c565b613482565b6106d8610a7a366004615a12565b60076020526000908152604090205460ff1681565b610569610a9d366004615c76565b6138ff565b6104f0610ab0366004615a4c565b602560209081526000928352604080842090915290825290205481565b610569610adb366004615a12565b61395f565b610569610aee366004615c76565b613b7f565b6106d8610b01366004615a12565b60196020526000908152604090205460ff1681565b610569610b24366004615a12565b613bdf565b601c5461066a906001600160a01b031681565b610569610b4a366004615a12565b613ca4565b610569610b5d366004615c76565b613d44565b6104f0610b70366004615a4c565b601160209081526000928352604080842090915290825290205481565b610569610b9b366004615b11565b613dc8565b610569610bae366004615ad0565b613fff565b6104f060245481565b6104f0610bca366004615a12565b60066020526000908152604090205481565b610569610bea366004615ad0565b614187565b610569610bfd366004615c76565b614238565b610569610c10366004615a12565b614298565b6104f061271081565b61066a610c2c366004615a12565b602c602052600090815260409020546001600160a01b031681565b610569610c55366004615a12565b614338565b601d5461066a906001600160a01b031681565b6104f0610c7b366004615a12565b602a6020526000908152604090205481565b610569610c9b366004615ad0565b6143ed565b60185461066a906001600160a01b031681565b610569610cc1366004615a12565b614633565b6106d8610cd4366004615b64565b6146eb565b6104f060235481565b610569610cf0366004615bb5565b6147c5565b600080610d0183612621565b90506000610d1b60225442610d169190615e72565b6148b5565b6001600160a01b0385166000908152602960205260409020541115610dbf576022546001600160a01b038516600090815260296020526040902054610d609042615e72565b10610d9c576022546001600160a01b038516600090815260296020526040902054610d8b9190615dd7565b610d959042615e72565b9050610dd5565b6001600160a01b038416600090815260296020526040902054610d959042615e72565b610dc8426148b5565b610dd29042615e72565b90505b610ddf81836148cf565b610de885612a48565b610df29190615dd7565b949350505050565b6060610e0660266148f9565b905090565b6000610e1860268461490d565b15610f18576000610e2884611373565b90508060400151600014610f16576001600160a01b0384166000908152600f602052604081205460ff16610e69578160200151610e6490615ee4565b610e6f565b81602001515b601d5460225460405163a0d2710760e01b815260048101889052600684900b60248201526044810191909152919250610f0d916001600160a01b039091169063a0d27107906064015b60206040518083038186803b158015610ed057600080fd5b505afa158015610ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f089190615c8f565b61492f565b92505050610f18565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610f5a57604051636efb4f4160e11b815260040160405180910390fd5b602054610f679042615dd7565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610fb6908490615dd7565b90915550610fc79050848484614940565b6001600160a01b03808516600090815260286020908152604080832093871683529290522054801580159061100657506021546110048286614b4e565b105b1561102457604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de8560405161106991815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff16156110a95760405163ad2fdf3b60e01b815260040160405180910390fd5b6110b460158261490d565b6110d05760405162941a5760e11b815260040160405180910390fd5b6110d981614c76565b15611136576001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a25b6001600160a01b0381166000908152600a60205260409020548211156111b75761115f81614e4c565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a25b6111c2818484614eda565b601b546001600160a01b038085169183821691167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b03163314611241576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166112685760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038381166001600160a01b031992831681179093556000838152600e60205260409081902080549093168417909255601d54915163696a437b60e01b81526004810193909352169063696a437b9060240160206040518083038186803b1580156112dc57600080fd5b505afa1580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190615c18565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191694151594909417909355519081527f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa91015b60405180910390a150565b6040805160608101825260008082526020820181905291810191909152611399426148b5565b6001600160a01b0383166000908152602b6020526040902060010154141561140f57506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061142360225442610d169190615e72565b6001600160a01b0385166000908152602b602052604090206001015490915081141561158757604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b611490426148b5565b61149a9042615e72565b826000815181106114ad576114ad615f4d565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926115099291909116908690600401615cc4565b60606040518083038186803b15801561152157600080fd5b505afa158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190615c33565b600692830b90920b80885291955061157391839150615e22565b600690810b900b6020860152506117109050565b6001600160a01b0384166000908152602b6020526040902060010154811115611710576040805160028082526060820183526000926020830190803683370190505090506115d4426148b5565b6115de9042615e72565b816000815181106115f1576115f1615f4d565b602002602001019063ffffffff16908163ffffffff1681525050602254611617426148b5565b6116219042615e72565b61162b9190615dd7565b8160018151811061163e5761163e615f4d565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926116969216908690600401615cc4565b60606040518083038186803b1580156116ae57600080fd5b505afa1580156116c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e69190615c33565b600692830b90920b8088529195509150611701908290615e22565b600690810b900b602086015250505b81156117295761171f426148b5565b6040840152611731565b600060408401525b50505b919050565b3360009081526007602052604090205460ff161561176a576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b03851684529091529020546117ab57604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205442116117ee57604051630fd0eeef60e11b815260040160405180910390fd5b6117f83382614fbe565b50565b6018546001600160a01b0316331461182657604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040519081527fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69060200160405180910390a1565b600260005414156118b05760405162461bcd60e51b81526004016118a790615da0565b60405180910390fd5b600260009081553381526012602090815260408083206001600160a01b03851684529091529020546118f55760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b03851684529091529020544211611938576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff1615611969576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b549092911614156119fc57601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b1580156119e357600080fd5b505af11580156119f7573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b0387168085529252822091909155611a2d918361507f565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b60026000541415611a995760405162461bcd60e51b81526004016118a790615da0565b6002600055611aa960268361490d565b611ac65760405163e0b6aead60e01b815260040160405180910390fd5b611ad160158461490d565b611aee57604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611b1090836150e7565b50611b1a836150fc565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611b5890611b52908490615dd7565b84614b4e565b1015611b7757604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a2611be36001600160a01b03831633308461515a565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611c1a908490615dd7565b90915550611c2d9050610f088284614b4e565b6001600160a01b0384166000908152600b602052604081208054909190611c55908490615dd7565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611cd957604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611d12576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611d805760405162461bcd60e51b81526004016118a790615da0565b6002600055611d9060158461490d565b611dad57604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611ddb5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015611e1d57600080fd5b505afa158015611e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e559190615c8f565b9050611e6c6001600160a01b03841633308561515a565b6040516370a0823160e01b815230600482015260009082906001600160a01b038616906370a082319060240160206040518083038186803b158015611eb057600080fd5b505afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190615c8f565b611ef29190615e72565b9050600061271060245483611f079190615e03565b611f119190615def565b9050611f1d8183615e72565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611f54908490615dd7565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611f9192168361507f565b6001600160a01b0386166000908152600c60205260409020611fb390866150e7565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb8560405161200391815260200190565b60405180910390a45050600160005550505050565b6001600160a01b03828116600090815260016020526040902054839116331461205457604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146120f95760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff16156121a05760405163ad2fdf3b60e01b815260040160405180910390fd5b6121ab60158261490d565b6121c75760405162941a5760e11b815260040160405180910390fd5b6121d081614c76565b1561222d576001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a25b60005a601d546001600160a01b038581166000908152600860209081526040808320601b548516845290915280822054905163516c332360e01b815260048101919091529394509291169063516c33239060240160206040518083038186803b15801561229957600080fd5b505afa1580156122ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d19190615c8f565b90506000612710826122fb85602e546122ea9190615e72565b601e546001600160a01b0316614b4e565b6123059190615e03565b61230f9190615def565b6001600160a01b0385166000908152600a60205260409020549091508111156123935761233b84614e4c565b6001600160a01b038416600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a25b60005a602e546123a39190615e72565b905083602e546123b39190615e72565b6123bd8383615e03565b6123c79190615def565b91506123d4858784614eda565b601b546001600160a01b038088169187821691167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a4505050505050565b6017546001600160a01b03163314612456576040516354348f0360e01b815260040160405180910390fd5b612461602682615198565b61247e57604051630a8d08b160e01b815260040160405180910390fd5b6040516001600160a01b03821681527f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5690602001611368565b6017546001600160a01b031633146124e2576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff161561251c5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b038116600081815260196020908152604091829020805460ff1916600117905590519182527f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9101611368565b6017546001600160a01b0316331461259b576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001611368565b60005a602e556125e160038361490d565b15611734577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb5a60405190815260200160405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d60205260409020612646906151ad565b811015612763576001600160a01b0383166000908152600d6020526040812061266f90836151b7565b905061267c60268261490d565b1561275057600061268c82611373565b9050806040015160001461274e576001600160a01b0382166000908152600f602052604081205460ff166126cd5781602001516126c890615ee4565b6126d3565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b81526004810191909152600685900b602482015260448101919091529293506127409291169063a0d2710790606401610eb8565b61274a9086615dd7565b9450505b505b508061275b81615eb5565b915050612625565b50919050565b3360009081526019602052604090205460ff1661279957604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166127d2576040516310cec38560e21b815260040160405180910390fd5b6127dd838383614940565b60175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b15801561282b57600080fd5b505af192505050801561285b575060408051601f3d908101601f1916820190925261285891810190615c18565b60015b61286457612866565b505b604080516001600160a01b038481168252602082018490523392908616917f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e91015b60405180910390a3505050565b6017546001600160a01b031633146128e0576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166129075760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040519081527f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090602001611368565b3360009081526019602052604090205460ff1661298557604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff166129be576040516310cec38560e21b815260040160405180910390fd5b6129c9600382615198565b50601b546001600160a01b038083166000908152600860209081526040808320939094168083529290529190912054612a039183916151c3565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610e0660156148f9565b600080612a5483612621565b9050612a6760225442610d169190615e72565b6001600160a01b0384166000908152602960205260409020541115610f18576022546001600160a01b038416600090815260296020526040902054612aac9042615e72565b10612ab957809150612763565b60008111612adf576001600160a01b0383166000908152600a6020526040902054612b19565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612b0f908390615e03565b612b199190615def565b9150612763565b6017546001600160a01b03163314612b4b576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101611368565b6001600160a01b038281166000908152600160205260409020548391163314612bba57604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612bed5760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d8252808320858452825291829020429055905192835290917fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c91015b60405180910390a2505050565b6060610e0660036148f9565b6017546001600160a01b03163314612c9f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612cc65760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612d27576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612d21573d6000803e3d6000fd5b50612d3b565b612d3b6001600160a01b038416828461507f565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612db5576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612def5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000818152601a6020908152604091829020805460ff1916600117905590519182527f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9101611368565b6001600160a01b038381166000908152600160205260409020548491163314612e7f57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612ea65760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260126020908152604080832093871683529290522054612ee95760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612f2e576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612f68576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660009081526013602090815260408083209387168084529390915290205490612f9d90848361507f565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612fec91815260200190565b60405180910390a45050506001600160a01b0391821660009081526013602090815260408083209390941682529190915290812055565b600260005414156130465760405162461bcd60e51b81526004016118a790615da0565b600260009081553381526007602052604090205460ff161561307b576040516362e6201d60e01b815260040160405180910390fd5b61308660153361490d565b156130a45760405163d7229c4360e01b815260040160405180910390fd5b601f546130b19042615dd7565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81523060048201529091906370a082319060240160206040518083038186803b15801561310f57600080fd5b505afa158015613123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131479190615c8f565b905061315e6001600160a01b03841633308561515a565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a082319060240160206040518083038186803b15801561319f57600080fd5b505afa1580156131b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d79190615c8f565b6131e19190615e72565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b038816845290915281208054929450849290919061322b908490615dd7565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b6020546132879042615dd7565b3360008181526012602090815260408083206001600160a01b038816808552908352818420959095559282526008815282822093825292909252812080548392906132d3908490615e72565b90915550503360009081526013602090815260408083206001600160a01b03861684529091528120805483929061330b908490615dd7565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de9060200160405180910390a35050565b6017546001600160a01b0316331461337f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff166133b8576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b038116600081815260196020908152604091829020805460ff1916905590519182527f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259101611368565b6017546001600160a01b03163314613434576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90602001611368565b6001600160a01b0381811660009081526001602052604090205482911633146134be57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806134fd57506001600160a01b03821660009081526007602052604090205460ff165b1561351b5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c602052604090205481169083161461355857604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461358a90603c90615dd7565b4210156135aa576040516356248e9760e01b815260040160405180910390fd5b6135b3836150fc565b6135bc826150fc565b6001600160a01b0383166000908152600c602052604081206135dd906151ad565b11156136bf576001600160a01b0383166000908152600c6020526040812061360590826151b7565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192613653908490615dd7565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c909152206136959082615198565b506001600160a01b0383166000908152600c602052604090206136b890826150e7565b50506135bc565b6001600160a01b0383166000908152600d602052604081206136e0906151ad565b11156137c2576001600160a01b0383166000908152600d6020526040812061370890826151b7565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192613756908490615dd7565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d90522061379890826150e7565b506001600160a01b0384166000908152600d602052604090206137bb9082615198565b50506136bf565b6001600160a01b038084166000908152600b6020526040808220549285168252812080549091906137f4908490615dd7565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a90915280822054928516825281208054909190613838908490615dd7565b90915550506001600160a01b0383166000908152600a60209081526040808320839055602990915281205561386e601584615198565b506001600160a01b03838116600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055848452602c835292819020805490931690925590519182527f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f29101612c5b565b6017546001600160a01b0316331461392a576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001611368565b6017546001600160a01b0316331461398a576040516354348f0360e01b815260040160405180910390fd5b6139956026826150e7565b6139b25760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156139eb57600080fd5b505afa1580156139ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a239190615a2f565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b81526004810193909352169063696a437b9060240160206040518083038186803b158015613a8c57600080fd5b505afa158015613aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac49190615c18565b6001600160a01b0382166000908152600f60205260409020805460ff1916911515919091179055613af481611373565b6001600160a01b0382166000818152602b60209081526040918290208451815486840151600690810b66ffffffffffffff908116600160381b026001600160701b03199093169390910b169190911717815593820151600190940193909355519081527fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b9101611368565b6017546001600160a01b03163314613baa576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001611368565b613bea60158261490d565b15613c0857604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613c4257604051632f3d320560e01b815260040160405180910390fd5b613c4d6015826150e7565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613ccf576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613cf65760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040519081527feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090602001611368565b6017546001600160a01b03163314613d6f576040516354348f0360e01b815260040160405180910390fd5b62015180811015613d9357604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001611368565b60026000541415613deb5760405162461bcd60e51b81526004016118a790615da0565b600260009081556001600160a01b03858116825260016020526040909120548591163314613e2c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613e5e90603c90615dd7565b4211613e7d57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613ec35760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613efd5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613f34908490615e72565b90915550613f4e90506001600160a01b038516838561507f565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f9c576001600160a01b0385166000908152600c60205260409020613f9a9085615198565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613feb91815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff16156140305760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff161561406a576040516362e6201d60e01b815260040160405180910390fd5b61407560158261490d565b6140915760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140d75760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0380821660009081526009602090815260408083209388168352929052908120805484929061410e908490615e72565b9091555061412890506001600160a01b038516848461507f565b826001600160a01b0316816001600160a01b0316856001600160a01b03167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a450505050565b3360009081526019602052604090205460ff166141b757604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166141f0576040516310cec38560e21b815260040160405180910390fd5b6141fb8383836151c3565b60405181815233906001600160a01b038516907f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db906020016128a8565b6017546001600160a01b03163314614263576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001611368565b6017546001600160a01b031633146142c3576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166142ea5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90602001611368565b6017546001600160a01b03163314614363576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661439c57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000818152601a6020908152604091829020805460ff1916905590519182527f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9101611368565b3360009081526019602052604090205460ff1661441d57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16614456576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c60205260409020614478908361490d565b61449557604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156144da5760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b15801561452857600080fd5b505af1925050508015614558575060408051601f3d908101601f1916820190925261455591810190615c18565b60015b61456157614563565b505b6001600160a01b0380841660009081526009602090815260408083209386168352929052908120805483929061459a908490615e72565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546145ed576001600160a01b0383166000908152600c602052604090206145eb9083615198565b505b604080516001600160a01b038481168252602082018490523392908616917f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d31833310491016128a8565b336000908152601a602052604090205460ff1661466357604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff161561469d576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b60005a602e556146fc60038761490d565b801561472d57506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561475157506001600160a01b0386166000908152600560205260409020548311155b801561478057506001600160a01b038616600090815260066020526040902054829061477d9042615e72565b10155b156147bc577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb5a60405190815260200160405180910390a15060015b95945050505050565b6017546001600160a01b031633146147f0576040516354348f0360e01b815260040160405180910390fd5b6147fb60158361490d565b61481857604051636211d34960e01b815260040160405180910390fd5b614821826150fc565b6001600160a01b0382166000908152600a602052604081208054839290614849908490615dd7565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926148a9928252602082015260400190565b60405180910390a25050565b6000602254826148c59190615ed0565b610f189083615e72565b6000602254831015612763576022546148e88385615e03565b6148f29190615def565b9050610f18565b60606000614906836152c9565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515614906565b6000610f1882602254602354615325565b600260005414156149635760405162461bcd60e51b81526004016118a790615da0565b600260009081556001600160a01b0384168152600d60205260409020614989908361490d565b6149a5576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156149eb5760405163435b562560e01b815260040160405180910390fd5b6149f4836153d3565b6000614a03610f088385614b4e565b6001600160a01b0385166000908152600b602052604090205490915015614ab9576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054614a54908390615e03565b614a5e9190615def565b6001600160a01b0385166000908152600a602052604081208054909190614a86908490615e72565b90915550506001600160a01b0384166000908152600b602052604081208054839290614ab3908490615e72565b90915550505b6001600160a01b03808516600090815260286020908152604080832093871683529290529081208054849290614af0908490615e72565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054614b43576001600160a01b0384166000908152600d60205260409020614b419084615198565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610f18576001600160a01b0382166000908152600f602052604081205460ff16614bc0576001600160a01b0383166000908152602b6020526040902054614bbb90600160381b900460060b615ee4565b614be4565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b815260048101889052600684900b602482015260448101919091529192506001600160a01b03169063a0d271079060640160206040518083038186803b158015614c3e57600080fd5b505afa158015614c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190615c8f565b6000614c81426148b5565b6001600160a01b038316600090815260296020526040902054101561173457614cb160225442610d169190615e72565b6001600160a01b03831660009081526029602052604090205411614d2757614cd8826153d3565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614d06426148b5565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614d4d9042615e72565b10614da957614d5b826153d3565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614d9a908490615dd7565b90915550600191506117349050565b614db2426148b5565b6001600160a01b0383166000908152602a60205260409020541015611734576001600160a01b0382166000908152600b6020526040902054614df3836153d3565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614e2391615e03565b614e2d9190615def565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614e9190614e739042615e72565b6001600160a01b0383166000908152600b60205260409020546148cf565b6001600160a01b0382166000908152600a602052604081208054909190614eb9908490615dd7565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614f135760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614f48908490615e72565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614f87908490615dd7565b90915550506001600160a01b03821660009081526005602052604081208054839290614fb4908490615dd7565b9091555050505050565b6001600160a01b038216600090815260066020526040902054614ff7576001600160a01b03821660009081526006602052604090204290555b6150026003836150e7565b506001600160a01b0382811660009081526010602090815260408083209385168352929052908120805491905561503a8284836153f8565b816001600160a01b0316836001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a75836040516128a891815260200190565b6040516001600160a01b0383166024820152604481018290526150e290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526154ad565b505050565b6000614906836001600160a01b03841661557f565b61510581614c76565b5061510f81614e4c565b6001600160a01b0381166000908152600a6020908152604080832054600b9092529091205461513e91906155ce565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526151929085906323b872dd60e01b906084016150ab565b50505050565b6000614906836001600160a01b0384166155e4565b6000610f18825490565b600061490683836156d7565b601b546001600160a01b038381169116146152925760175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b15801561522657600080fd5b505af1925050508015615256575060408051601f3d908101601f1916820190925261525391810190615c18565b60015b615290573d808015615284576040519150601f19603f3d011682016040523d82523d6000602084013e615289565b606091505b5050615292565b505b6001600160a01b03808416600090815260086020908152604080832093861683529290529081208054839290614fb4908490615e72565b60608160000180548060200260200160405190810160405280929190818152602001828054801561531957602002820191906000526020600020905b815481526020019060010190808311615305575b50505050509050919050565b60008080600019858709858702925082811083820303915050806000141561535f576000841161535457600080fd5b508290049050614906565b80841161536b57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6153dc81615701565b6001600160a01b039091166000908152600b6020526040902055565b6001600160a01b0380831660009081526008602090815260408083209387168352929052908120805483929061542f908490615dd7565b9091555050601b546001600160a01b03848116911614156150e257601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561549057600080fd5b505af11580156154a4573d6000803e3d6000fd5b50505050505050565b6000615502826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166158e59092919063ffffffff16565b8051909150156150e257808060200190518101906155209190615c18565b6150e25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016118a7565b60008181526001830160205260408120546155c657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f18565b506000610f18565b60008183106155dd5781614906565b5090919050565b600081815260018301602052604081205480156156cd576000615608600183615e72565b855490915060009061561c90600190615e72565b905081811461568157600086600001828154811061563c5761563c615f4d565b906000526020600020015490508087600001848154811061565f5761565f615f4d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061569257615692615f37565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f18565b6000915050610f18565b60008260000182815481106156ee576156ee615f4d565b9060005260206000200154905092915050565b600061570c426148b5565b601e546001600160a01b03166000908152602b6020526040902060010154146157a357601e54615744906001600160a01b0316611373565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d602052604090206157c7906151ad565b811015612763576001600160a01b0383166000908152600d602052604081206157f090836151b7565b90506157fd60268261490d565b156158d25761580b426148b5565b6001600160a01b0382166000908152602b6020526040902060010154146158915761583581611373565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b038085166000908152602860209081526040808320938516835292905220546158c590610f089083614b4e565b6158cf9084615dd7565b92505b50806158dd81615eb5565b9150506157a6565b6060610df2848460008585843b61593e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016118a7565b600080866001600160a01b0316858760405161595a9190615ca8565b60006040518083038185875af1925050503d8060008114615997576040519150601f19603f3d011682016040523d82523d6000602084013e61599c565b606091505b50915091506159ac8282866159b7565b979650505050505050565b606083156159c6575081614906565b8251156159d65782518084602001fd5b8160405162461bcd60e51b81526004016118a79190615d6d565b8051801515811461173457600080fd5b8051600681900b811461173457600080fd5b600060208284031215615a2457600080fd5b813561490681615f63565b600060208284031215615a4157600080fd5b815161490681615f63565b60008060408385031215615a5f57600080fd5b8235615a6a81615f63565b91506020830135615a7a81615f63565b809150509250929050565b600080600060608486031215615a9a57600080fd5b8335615aa581615f63565b92506020840135615ab581615f63565b91506040840135615ac581615f63565b809150509250925092565b600080600060608486031215615ae557600080fd5b8335615af081615f63565b92506020840135615b0081615f63565b929592945050506040919091013590565b60008060008060808587031215615b2757600080fd5b8435615b3281615f63565b93506020850135615b4281615f63565b9250604085013591506060850135615b5981615f63565b939692955090935050565b600080600080600060a08688031215615b7c57600080fd5b8535615b8781615f63565b94506020860135615b9781615f63565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615bc857600080fd5b8235615bd381615f63565b946020939093013593505050565b600080600060608486031215615bf657600080fd5b8335615c0181615f63565b9250602084013591506040840135615ac581615f63565b600060208284031215615c2a57600080fd5b614906826159f0565b600080600060608486031215615c4857600080fd5b615c5184615a00565b9250615c5f60208501615a00565b9150615c6d604085016159f0565b90509250925092565b600060208284031215615c8857600080fd5b5035919050565b600060208284031215615ca157600080fd5b5051919050565b60008251615cba818460208701615e89565b9190910192915050565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615d1357845163ffffffff1683529383019391830191600101615cf1565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615d615783516001600160a01b031683529284019291840191600101615d3c565b50909695505050505050565b6020815260008251806020840152615d8c816040850160208701615e89565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115615dea57615dea615f0b565b500190565b600082615dfe57615dfe615f21565b500490565b6000816000190483118215151615615e1d57615e1d615f0b565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e4d57615e4d615f0b565b81667fffffffffffff018313811615615e6857615e68615f0b565b5090039392505050565b600082821015615e8457615e84615f0b565b500390565b60005b83811015615ea4578181015183820152602001615e8c565b838111156151925750506000910152565b6000600019821415615ec957615ec9615f0b565b5060010190565b600082615edf57615edf615f21565b500690565b60008160060b667fffffffffffff19811415615f0257615f02615f0b565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146117f857600080fdfeee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220af09e59655e8067c649d473eea0f92cc1653e0a7ae44dd70305f6326a93f8e3f64736f6c63430008070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104d85760003560e01c806390a4684e11610283578063c7ae40d01161015c578063ec342ad0116100ce578063f25e311b11610092578063f25e311b14610c8d578063f39c38a014610ca0578063f75f9f7b14610cb3578063f9d46cf214610cc6578063fc253d2b14610cd9578063fe75bc4614610ce257600080fd5b8063ec342ad014610c15578063ec8ca64314610c1e578063f0f346b914610c47578063f11a1d1a14610c5a578063f136a09d14610c6d57600080fd5b8063dd2080d611610120578063dd2080d614610ba0578063ddca3f4314610bb3578063e326ac4314610bbc578063e74f823914610bdc578063ebbb619414610bef578063ec00cdfc14610c0257600080fd5b8063c7ae40d014610b29578063cb4be2bb14610b3c578063cb54694d14610b4f578063cd22af1b14610b62578063d55995fe14610b8d57600080fd5b8063a7d2e784116101f5578063b2392233116101b9578063b239223314610a8f578063b440027f14610aa2578063b600702a14610acd578063b7e7734014610ae0578063b87fcbff14610af3578063c5198abc14610b1657600080fd5b8063a7d2e78414610a2a578063aac6aa9c14610a33578063ab033ea914610a46578063af320e8114610a59578063b0103b1a14610a6c57600080fd5b8063a214580911610247578063a21458091461098b578063a39744b51461099e578063a515366a146109c9578063a5d059ca146109dc578063a676f9ff146109ef578063a734f06e14610a0f57600080fd5b806390a4684e14610921578063951dc22c14610934578063966abd001461093c57806398e90a0f1461094f5780639d5c33d81461097857600080fd5b8063594a3a93116103b55780636cf262bc116103275780637b40c913116102eb5780637b40c913146108945780637c8fce23146108a7578063878c723e146108af5780638bb6dfa8146108d85780638cb22b76146108eb5780638fe204dd1461090e57600080fd5b80636cf262bc1461083f5780636e2a9ca61461085257806372da828a1461086557806374a8f10314610878578063768b5d901461088b57600080fd5b8063633fb68f11610379578063633fb68f146107bf57806364bb43ee146107c857806368a9f19c146107db578063694798e6146107ee57806369fe0e2d146108195780636ba42aaa1461082c57600080fd5b8063594a3a931461076a57806359a2255e1461077d5780635aa6e675146107905780635ebe23f0146107a35780635feeb794146107ac57600080fd5b80631c5a9d9c1161044e578063454c503111610412578063454c5031146106e8578063461411bc1461071457806351cff8d91461071e57806352a4de291461073157806355ea6c4714610744578063575288bf1461075757600080fd5b80631c5a9d9c146106445780631ef94b911461065757806321040b0114610682578063238efcbc146106ad578063274a8db4146106b557600080fd5b806311466d72116104a057806311466d721461056b57806315006b821461057e578063160e1e31146105a9578063165e62e7146105bc578063168f92e7146105f95780631b44555e1461062457600080fd5b8063034d4c61146104dd57806307b435c2146105035780630c620bce1461052e5780630d6a1f87146105435780631101eb4114610556575b600080fd5b6104f06104eb366004615a12565b610cf5565b6040519081526020015b60405180910390f35b6104f0610511366004615a4c565b601260209081526000928352604080842090915290825290205481565b610536610dfa565b6040516104fa9190615d20565b6104f0610551366004615bb5565b610e0b565b610569610564366004615ad0565b610f1e565b005b610569610579366004615bb5565b611078565b6104f061058c366004615a4c565b601060209081526000928352604080842090915290825290205481565b6105696105b7366004615a12565b611216565b6105cf6105ca366004615a12565b611373565b604080518251600690810b825260208085015190910b9082015291810151908201526060016104fa565b6104f0610607366004615a4c565b600960209081526000928352604080842090915290825290205481565b6104f0610632366004615a12565b60056020526000908152604090205481565b610569610652366004615a12565b611739565b601b5461066a906001600160a01b031681565b6040516001600160a01b0390911681526020016104fa565b6104f0610690366004615a4c565b601360209081526000928352604080842090915290825290205481565b6105696117fb565b6106d86106c3366004615a12565b601a6020526000908152604090205460ff1681565b60405190151581526020016104fa565b6106d86106f6366004615a12565b6001600160a01b03166000908152600f602052604090205460ff1690565b6104f06201518081565b61056961072c366004615a12565b611884565b61056961073f366004615ad0565b611a76565b610569610752366004615a12565b611ca9565b610569610765366004615ad0565b611d5d565b610569610778366004615a4c565b612018565b61056961078b366004615a12565b6120bd565b60175461066a906001600160a01b031681565b6104f0601f5481565b6105696107ba366004615a12565b61216f565b6104f060215481565b6105696107d6366004615a12565b61242b565b6105696107e9366004615a12565b6124b7565b6104f06107fc366004615a4c565b602860209081526000928352604080842090915290825290205481565b610569610827366004615c76565b612570565b6106d861083a366004615a12565b6125d0565b6104f061084d366004615a12565b612621565b610569610860366004615ad0565b612769565b610569610873366004615a12565b6128b5565b610569610886366004615a12565b612955565b6104f060225481565b601e5461066a906001600160a01b031681565b610536612a3c565b61066a6108bd366004615a12565b6001602052600090815260409020546001600160a01b031681565b6104f06108e6366004615a12565b612a48565b6106d86108f9366004615a12565b60146020526000908152604090205460ff1681565b61056961091c366004615c76565b612b20565b61056961092f366004615a4c565b612b7e565b610536612c68565b61056961094a366004615be1565b612c74565b61066a61095d366004615a12565b6002602052600090815260409020546001600160a01b031681565b610569610986366004615a12565b612d8a565b610569610999366004615a85565b612e43565b6104f06109ac366004615a4c565b600860209081526000928352604080842090915290825290205481565b6105696109d7366004615bb5565b613023565b6105696109ea366004615bb5565b61327a565b6104f06109fd366004615a12565b60296020526000908152604090205481565b61066a73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6104f060205481565b610569610a41366004615a12565b613354565b610569610a54366004615a12565b613409565b610569610a67366004615a4c565b613482565b6106d8610a7a366004615a12565b60076020526000908152604090205460ff1681565b610569610a9d366004615c76565b6138ff565b6104f0610ab0366004615a4c565b602560209081526000928352604080842090915290825290205481565b610569610adb366004615a12565b61395f565b610569610aee366004615c76565b613b7f565b6106d8610b01366004615a12565b60196020526000908152604090205460ff1681565b610569610b24366004615a12565b613bdf565b601c5461066a906001600160a01b031681565b610569610b4a366004615a12565b613ca4565b610569610b5d366004615c76565b613d44565b6104f0610b70366004615a4c565b601160209081526000928352604080842090915290825290205481565b610569610b9b366004615b11565b613dc8565b610569610bae366004615ad0565b613fff565b6104f060245481565b6104f0610bca366004615a12565b60066020526000908152604090205481565b610569610bea366004615ad0565b614187565b610569610bfd366004615c76565b614238565b610569610c10366004615a12565b614298565b6104f061271081565b61066a610c2c366004615a12565b602c602052600090815260409020546001600160a01b031681565b610569610c55366004615a12565b614338565b601d5461066a906001600160a01b031681565b6104f0610c7b366004615a12565b602a6020526000908152604090205481565b610569610c9b366004615ad0565b6143ed565b60185461066a906001600160a01b031681565b610569610cc1366004615a12565b614633565b6106d8610cd4366004615b64565b6146eb565b6104f060235481565b610569610cf0366004615bb5565b6147c5565b600080610d0183612621565b90506000610d1b60225442610d169190615e72565b6148b5565b6001600160a01b0385166000908152602960205260409020541115610dbf576022546001600160a01b038516600090815260296020526040902054610d609042615e72565b10610d9c576022546001600160a01b038516600090815260296020526040902054610d8b9190615dd7565b610d959042615e72565b9050610dd5565b6001600160a01b038416600090815260296020526040902054610d959042615e72565b610dc8426148b5565b610dd29042615e72565b90505b610ddf81836148cf565b610de885612a48565b610df29190615dd7565b949350505050565b6060610e0660266148f9565b905090565b6000610e1860268461490d565b15610f18576000610e2884611373565b90508060400151600014610f16576001600160a01b0384166000908152600f602052604081205460ff16610e69578160200151610e6490615ee4565b610e6f565b81602001515b601d5460225460405163a0d2710760e01b815260048101889052600684900b60248201526044810191909152919250610f0d916001600160a01b039091169063a0d27107906064015b60206040518083038186803b158015610ed057600080fd5b505afa158015610ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f089190615c8f565b61492f565b92505050610f18565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610f5a57604051636efb4f4160e11b815260040160405180910390fd5b602054610f679042615dd7565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610fb6908490615dd7565b90915550610fc79050848484614940565b6001600160a01b03808516600090815260286020908152604080832093871683529290522054801580159061100657506021546110048286614b4e565b105b1561102457604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de8560405161106991815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff16156110a95760405163ad2fdf3b60e01b815260040160405180910390fd5b6110b460158261490d565b6110d05760405162941a5760e11b815260040160405180910390fd5b6110d981614c76565b15611136576001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a25b6001600160a01b0381166000908152600a60205260409020548211156111b75761115f81614e4c565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a25b6111c2818484614eda565b601b546001600160a01b038085169183821691167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b03163314611241576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166112685760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038381166001600160a01b031992831681179093556000838152600e60205260409081902080549093168417909255601d54915163696a437b60e01b81526004810193909352169063696a437b9060240160206040518083038186803b1580156112dc57600080fd5b505afa1580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190615c18565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191694151594909417909355519081527f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa91015b60405180910390a150565b6040805160608101825260008082526020820181905291810191909152611399426148b5565b6001600160a01b0383166000908152602b6020526040902060010154141561140f57506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061142360225442610d169190615e72565b6001600160a01b0385166000908152602b602052604090206001015490915081141561158757604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b611490426148b5565b61149a9042615e72565b826000815181106114ad576114ad615f4d565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926115099291909116908690600401615cc4565b60606040518083038186803b15801561152157600080fd5b505afa158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190615c33565b600692830b90920b80885291955061157391839150615e22565b600690810b900b6020860152506117109050565b6001600160a01b0384166000908152602b6020526040902060010154811115611710576040805160028082526060820183526000926020830190803683370190505090506115d4426148b5565b6115de9042615e72565b816000815181106115f1576115f1615f4d565b602002602001019063ffffffff16908163ffffffff1681525050602254611617426148b5565b6116219042615e72565b61162b9190615dd7565b8160018151811061163e5761163e615f4d565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926116969216908690600401615cc4565b60606040518083038186803b1580156116ae57600080fd5b505afa1580156116c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e69190615c33565b600692830b90920b8088529195509150611701908290615e22565b600690810b900b602086015250505b81156117295761171f426148b5565b6040840152611731565b600060408401525b50505b919050565b3360009081526007602052604090205460ff161561176a576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b03851684529091529020546117ab57604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205442116117ee57604051630fd0eeef60e11b815260040160405180910390fd5b6117f83382614fbe565b50565b6018546001600160a01b0316331461182657604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040519081527fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69060200160405180910390a1565b600260005414156118b05760405162461bcd60e51b81526004016118a790615da0565b60405180910390fd5b600260009081553381526012602090815260408083206001600160a01b03851684529091529020546118f55760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b03851684529091529020544211611938576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff1615611969576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b549092911614156119fc57601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b1580156119e357600080fd5b505af11580156119f7573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b0387168085529252822091909155611a2d918361507f565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b60026000541415611a995760405162461bcd60e51b81526004016118a790615da0565b6002600055611aa960268361490d565b611ac65760405163e0b6aead60e01b815260040160405180910390fd5b611ad160158461490d565b611aee57604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611b1090836150e7565b50611b1a836150fc565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611b5890611b52908490615dd7565b84614b4e565b1015611b7757604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a2611be36001600160a01b03831633308461515a565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611c1a908490615dd7565b90915550611c2d9050610f088284614b4e565b6001600160a01b0384166000908152600b602052604081208054909190611c55908490615dd7565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611cd957604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611d12576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611d805760405162461bcd60e51b81526004016118a790615da0565b6002600055611d9060158461490d565b611dad57604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611ddb5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015611e1d57600080fd5b505afa158015611e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e559190615c8f565b9050611e6c6001600160a01b03841633308561515a565b6040516370a0823160e01b815230600482015260009082906001600160a01b038616906370a082319060240160206040518083038186803b158015611eb057600080fd5b505afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190615c8f565b611ef29190615e72565b9050600061271060245483611f079190615e03565b611f119190615def565b9050611f1d8183615e72565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611f54908490615dd7565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611f9192168361507f565b6001600160a01b0386166000908152600c60205260409020611fb390866150e7565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb8560405161200391815260200190565b60405180910390a45050600160005550505050565b6001600160a01b03828116600090815260016020526040902054839116331461205457604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146120f95760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff16156121a05760405163ad2fdf3b60e01b815260040160405180910390fd5b6121ab60158261490d565b6121c75760405162941a5760e11b815260040160405180910390fd5b6121d081614c76565b1561222d576001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a25b60005a601d546001600160a01b038581166000908152600860209081526040808320601b548516845290915280822054905163516c332360e01b815260048101919091529394509291169063516c33239060240160206040518083038186803b15801561229957600080fd5b505afa1580156122ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d19190615c8f565b90506000612710826122fb85602e546122ea9190615e72565b601e546001600160a01b0316614b4e565b6123059190615e03565b61230f9190615def565b6001600160a01b0385166000908152600a60205260409020549091508111156123935761233b84614e4c565b6001600160a01b038416600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f798339815191529060600160405180910390a25b60005a602e546123a39190615e72565b905083602e546123b39190615e72565b6123bd8383615e03565b6123c79190615def565b91506123d4858784614eda565b601b546001600160a01b038088169187821691167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a4505050505050565b6017546001600160a01b03163314612456576040516354348f0360e01b815260040160405180910390fd5b612461602682615198565b61247e57604051630a8d08b160e01b815260040160405180910390fd5b6040516001600160a01b03821681527f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5690602001611368565b6017546001600160a01b031633146124e2576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff161561251c5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b038116600081815260196020908152604091829020805460ff1916600117905590519182527f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9101611368565b6017546001600160a01b0316331461259b576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001611368565b60005a602e556125e160038361490d565b15611734577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb5a60405190815260200160405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d60205260409020612646906151ad565b811015612763576001600160a01b0383166000908152600d6020526040812061266f90836151b7565b905061267c60268261490d565b1561275057600061268c82611373565b9050806040015160001461274e576001600160a01b0382166000908152600f602052604081205460ff166126cd5781602001516126c890615ee4565b6126d3565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b81526004810191909152600685900b602482015260448101919091529293506127409291169063a0d2710790606401610eb8565b61274a9086615dd7565b9450505b505b508061275b81615eb5565b915050612625565b50919050565b3360009081526019602052604090205460ff1661279957604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166127d2576040516310cec38560e21b815260040160405180910390fd5b6127dd838383614940565b60175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b15801561282b57600080fd5b505af192505050801561285b575060408051601f3d908101601f1916820190925261285891810190615c18565b60015b61286457612866565b505b604080516001600160a01b038481168252602082018490523392908616917f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e91015b60405180910390a3505050565b6017546001600160a01b031633146128e0576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166129075760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040519081527f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090602001611368565b3360009081526019602052604090205460ff1661298557604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff166129be576040516310cec38560e21b815260040160405180910390fd5b6129c9600382615198565b50601b546001600160a01b038083166000908152600860209081526040808320939094168083529290529190912054612a039183916151c3565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610e0660156148f9565b600080612a5483612621565b9050612a6760225442610d169190615e72565b6001600160a01b0384166000908152602960205260409020541115610f18576022546001600160a01b038416600090815260296020526040902054612aac9042615e72565b10612ab957809150612763565b60008111612adf576001600160a01b0383166000908152600a6020526040902054612b19565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612b0f908390615e03565b612b199190615def565b9150612763565b6017546001600160a01b03163314612b4b576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101611368565b6001600160a01b038281166000908152600160205260409020548391163314612bba57604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612bed5760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d8252808320858452825291829020429055905192835290917fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c91015b60405180910390a2505050565b6060610e0660036148f9565b6017546001600160a01b03163314612c9f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612cc65760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612d27576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612d21573d6000803e3d6000fd5b50612d3b565b612d3b6001600160a01b038416828461507f565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612db5576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612def5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000818152601a6020908152604091829020805460ff1916600117905590519182527f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9101611368565b6001600160a01b038381166000908152600160205260409020548491163314612e7f57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612ea65760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260126020908152604080832093871683529290522054612ee95760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612f2e576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612f68576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660009081526013602090815260408083209387168084529390915290205490612f9d90848361507f565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612fec91815260200190565b60405180910390a45050506001600160a01b0391821660009081526013602090815260408083209390941682529190915290812055565b600260005414156130465760405162461bcd60e51b81526004016118a790615da0565b600260009081553381526007602052604090205460ff161561307b576040516362e6201d60e01b815260040160405180910390fd5b61308660153361490d565b156130a45760405163d7229c4360e01b815260040160405180910390fd5b601f546130b19042615dd7565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81523060048201529091906370a082319060240160206040518083038186803b15801561310f57600080fd5b505afa158015613123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131479190615c8f565b905061315e6001600160a01b03841633308561515a565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a082319060240160206040518083038186803b15801561319f57600080fd5b505afa1580156131b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d79190615c8f565b6131e19190615e72565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b038816845290915281208054929450849290919061322b908490615dd7565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b6020546132879042615dd7565b3360008181526012602090815260408083206001600160a01b038816808552908352818420959095559282526008815282822093825292909252812080548392906132d3908490615e72565b90915550503360009081526013602090815260408083206001600160a01b03861684529091528120805483929061330b908490615dd7565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de9060200160405180910390a35050565b6017546001600160a01b0316331461337f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff166133b8576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b038116600081815260196020908152604091829020805460ff1916905590519182527f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259101611368565b6017546001600160a01b03163314613434576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90602001611368565b6001600160a01b0381811660009081526001602052604090205482911633146134be57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806134fd57506001600160a01b03821660009081526007602052604090205460ff165b1561351b5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c602052604090205481169083161461355857604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461358a90603c90615dd7565b4210156135aa576040516356248e9760e01b815260040160405180910390fd5b6135b3836150fc565b6135bc826150fc565b6001600160a01b0383166000908152600c602052604081206135dd906151ad565b11156136bf576001600160a01b0383166000908152600c6020526040812061360590826151b7565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192613653908490615dd7565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c909152206136959082615198565b506001600160a01b0383166000908152600c602052604090206136b890826150e7565b50506135bc565b6001600160a01b0383166000908152600d602052604081206136e0906151ad565b11156137c2576001600160a01b0383166000908152600d6020526040812061370890826151b7565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192613756908490615dd7565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d90522061379890826150e7565b506001600160a01b0384166000908152600d602052604090206137bb9082615198565b50506136bf565b6001600160a01b038084166000908152600b6020526040808220549285168252812080549091906137f4908490615dd7565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a90915280822054928516825281208054909190613838908490615dd7565b90915550506001600160a01b0383166000908152600a60209081526040808320839055602990915281205561386e601584615198565b506001600160a01b03838116600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055848452602c835292819020805490931690925590519182527f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f29101612c5b565b6017546001600160a01b0316331461392a576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001611368565b6017546001600160a01b0316331461398a576040516354348f0360e01b815260040160405180910390fd5b6139956026826150e7565b6139b25760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156139eb57600080fd5b505afa1580156139ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a239190615a2f565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b81526004810193909352169063696a437b9060240160206040518083038186803b158015613a8c57600080fd5b505afa158015613aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac49190615c18565b6001600160a01b0382166000908152600f60205260409020805460ff1916911515919091179055613af481611373565b6001600160a01b0382166000818152602b60209081526040918290208451815486840151600690810b66ffffffffffffff908116600160381b026001600160701b03199093169390910b169190911717815593820151600190940193909355519081527fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b9101611368565b6017546001600160a01b03163314613baa576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001611368565b613bea60158261490d565b15613c0857604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613c4257604051632f3d320560e01b815260040160405180910390fd5b613c4d6015826150e7565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613ccf576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613cf65760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040519081527feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090602001611368565b6017546001600160a01b03163314613d6f576040516354348f0360e01b815260040160405180910390fd5b62015180811015613d9357604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001611368565b60026000541415613deb5760405162461bcd60e51b81526004016118a790615da0565b600260009081556001600160a01b03858116825260016020526040909120548591163314613e2c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613e5e90603c90615dd7565b4211613e7d57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613ec35760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613efd5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613f34908490615e72565b90915550613f4e90506001600160a01b038516838561507f565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f9c576001600160a01b0385166000908152600c60205260409020613f9a9085615198565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613feb91815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff16156140305760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff161561406a576040516362e6201d60e01b815260040160405180910390fd5b61407560158261490d565b6140915760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140d75760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0380821660009081526009602090815260408083209388168352929052908120805484929061410e908490615e72565b9091555061412890506001600160a01b038516848461507f565b826001600160a01b0316816001600160a01b0316856001600160a01b03167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a450505050565b3360009081526019602052604090205460ff166141b757604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166141f0576040516310cec38560e21b815260040160405180910390fd5b6141fb8383836151c3565b60405181815233906001600160a01b038516907f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db906020016128a8565b6017546001600160a01b03163314614263576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001611368565b6017546001600160a01b031633146142c3576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166142ea5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90602001611368565b6017546001600160a01b03163314614363576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661439c57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000818152601a6020908152604091829020805460ff1916905590519182527f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9101611368565b3360009081526019602052604090205460ff1661441d57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16614456576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c60205260409020614478908361490d565b61449557604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156144da5760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b15801561452857600080fd5b505af1925050508015614558575060408051601f3d908101601f1916820190925261455591810190615c18565b60015b61456157614563565b505b6001600160a01b0380841660009081526009602090815260408083209386168352929052908120805483929061459a908490615e72565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546145ed576001600160a01b0383166000908152600c602052604090206145eb9083615198565b505b604080516001600160a01b038481168252602082018490523392908616917f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d31833310491016128a8565b336000908152601a602052604090205460ff1661466357604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff161561469d576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b60005a602e556146fc60038761490d565b801561472d57506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561475157506001600160a01b0386166000908152600560205260409020548311155b801561478057506001600160a01b038616600090815260066020526040902054829061477d9042615e72565b10155b156147bc577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb5a60405190815260200160405180910390a15060015b95945050505050565b6017546001600160a01b031633146147f0576040516354348f0360e01b815260040160405180910390fd5b6147fb60158361490d565b61481857604051636211d34960e01b815260040160405180910390fd5b614821826150fc565b6001600160a01b0382166000908152600a602052604081208054839290614849908490615dd7565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926148a9928252602082015260400190565b60405180910390a25050565b6000602254826148c59190615ed0565b610f189083615e72565b6000602254831015612763576022546148e88385615e03565b6148f29190615def565b9050610f18565b60606000614906836152c9565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515614906565b6000610f1882602254602354615325565b600260005414156149635760405162461bcd60e51b81526004016118a790615da0565b600260009081556001600160a01b0384168152600d60205260409020614989908361490d565b6149a5576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156149eb5760405163435b562560e01b815260040160405180910390fd5b6149f4836153d3565b6000614a03610f088385614b4e565b6001600160a01b0385166000908152600b602052604090205490915015614ab9576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054614a54908390615e03565b614a5e9190615def565b6001600160a01b0385166000908152600a602052604081208054909190614a86908490615e72565b90915550506001600160a01b0384166000908152600b602052604081208054839290614ab3908490615e72565b90915550505b6001600160a01b03808516600090815260286020908152604080832093871683529290529081208054849290614af0908490615e72565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054614b43576001600160a01b0384166000908152600d60205260409020614b419084615198565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610f18576001600160a01b0382166000908152600f602052604081205460ff16614bc0576001600160a01b0383166000908152602b6020526040902054614bbb90600160381b900460060b615ee4565b614be4565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b815260048101889052600684900b602482015260448101919091529192506001600160a01b03169063a0d271079060640160206040518083038186803b158015614c3e57600080fd5b505afa158015614c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190615c8f565b6000614c81426148b5565b6001600160a01b038316600090815260296020526040902054101561173457614cb160225442610d169190615e72565b6001600160a01b03831660009081526029602052604090205411614d2757614cd8826153d3565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614d06426148b5565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614d4d9042615e72565b10614da957614d5b826153d3565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614d9a908490615dd7565b90915550600191506117349050565b614db2426148b5565b6001600160a01b0383166000908152602a60205260409020541015611734576001600160a01b0382166000908152600b6020526040902054614df3836153d3565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614e2391615e03565b614e2d9190615def565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614e9190614e739042615e72565b6001600160a01b0383166000908152600b60205260409020546148cf565b6001600160a01b0382166000908152600a602052604081208054909190614eb9908490615dd7565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614f135760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614f48908490615e72565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614f87908490615dd7565b90915550506001600160a01b03821660009081526005602052604081208054839290614fb4908490615dd7565b9091555050505050565b6001600160a01b038216600090815260066020526040902054614ff7576001600160a01b03821660009081526006602052604090204290555b6150026003836150e7565b506001600160a01b0382811660009081526010602090815260408083209385168352929052908120805491905561503a8284836153f8565b816001600160a01b0316836001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a75836040516128a891815260200190565b6040516001600160a01b0383166024820152604481018290526150e290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526154ad565b505050565b6000614906836001600160a01b03841661557f565b61510581614c76565b5061510f81614e4c565b6001600160a01b0381166000908152600a6020908152604080832054600b9092529091205461513e91906155ce565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526151929085906323b872dd60e01b906084016150ab565b50505050565b6000614906836001600160a01b0384166155e4565b6000610f18825490565b600061490683836156d7565b601b546001600160a01b038381169116146152925760175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b15801561522657600080fd5b505af1925050508015615256575060408051601f3d908101601f1916820190925261525391810190615c18565b60015b615290573d808015615284576040519150601f19603f3d011682016040523d82523d6000602084013e615289565b606091505b5050615292565b505b6001600160a01b03808416600090815260086020908152604080832093861683529290529081208054839290614fb4908490615e72565b60608160000180548060200260200160405190810160405280929190818152602001828054801561531957602002820191906000526020600020905b815481526020019060010190808311615305575b50505050509050919050565b60008080600019858709858702925082811083820303915050806000141561535f576000841161535457600080fd5b508290049050614906565b80841161536b57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6153dc81615701565b6001600160a01b039091166000908152600b6020526040902055565b6001600160a01b0380831660009081526008602090815260408083209387168352929052908120805483929061542f908490615dd7565b9091555050601b546001600160a01b03848116911614156150e257601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561549057600080fd5b505af11580156154a4573d6000803e3d6000fd5b50505050505050565b6000615502826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166158e59092919063ffffffff16565b8051909150156150e257808060200190518101906155209190615c18565b6150e25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016118a7565b60008181526001830160205260408120546155c657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f18565b506000610f18565b60008183106155dd5781614906565b5090919050565b600081815260018301602052604081205480156156cd576000615608600183615e72565b855490915060009061561c90600190615e72565b905081811461568157600086600001828154811061563c5761563c615f4d565b906000526020600020015490508087600001848154811061565f5761565f615f4d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061569257615692615f37565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f18565b6000915050610f18565b60008260000182815481106156ee576156ee615f4d565b9060005260206000200154905092915050565b600061570c426148b5565b601e546001600160a01b03166000908152602b6020526040902060010154146157a357601e54615744906001600160a01b0316611373565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d602052604090206157c7906151ad565b811015612763576001600160a01b0383166000908152600d602052604081206157f090836151b7565b90506157fd60268261490d565b156158d25761580b426148b5565b6001600160a01b0382166000908152602b6020526040902060010154146158915761583581611373565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b038085166000908152602860209081526040808320938516835292905220546158c590610f089083614b4e565b6158cf9084615dd7565b92505b50806158dd81615eb5565b9150506157a6565b6060610df2848460008585843b61593e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016118a7565b600080866001600160a01b0316858760405161595a9190615ca8565b60006040518083038185875af1925050503d8060008114615997576040519150601f19603f3d011682016040523d82523d6000602084013e61599c565b606091505b50915091506159ac8282866159b7565b979650505050505050565b606083156159c6575081614906565b8251156159d65782518084602001fd5b8160405162461bcd60e51b81526004016118a79190615d6d565b8051801515811461173457600080fd5b8051600681900b811461173457600080fd5b600060208284031215615a2457600080fd5b813561490681615f63565b600060208284031215615a4157600080fd5b815161490681615f63565b60008060408385031215615a5f57600080fd5b8235615a6a81615f63565b91506020830135615a7a81615f63565b809150509250929050565b600080600060608486031215615a9a57600080fd5b8335615aa581615f63565b92506020840135615ab581615f63565b91506040840135615ac581615f63565b809150509250925092565b600080600060608486031215615ae557600080fd5b8335615af081615f63565b92506020840135615b0081615f63565b929592945050506040919091013590565b60008060008060808587031215615b2757600080fd5b8435615b3281615f63565b93506020850135615b4281615f63565b9250604085013591506060850135615b5981615f63565b939692955090935050565b600080600080600060a08688031215615b7c57600080fd5b8535615b8781615f63565b94506020860135615b9781615f63565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615bc857600080fd5b8235615bd381615f63565b946020939093013593505050565b600080600060608486031215615bf657600080fd5b8335615c0181615f63565b9250602084013591506040840135615ac581615f63565b600060208284031215615c2a57600080fd5b614906826159f0565b600080600060608486031215615c4857600080fd5b615c5184615a00565b9250615c5f60208501615a00565b9150615c6d604085016159f0565b90509250925092565b600060208284031215615c8857600080fd5b5035919050565b600060208284031215615ca157600080fd5b5051919050565b60008251615cba818460208701615e89565b9190910192915050565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615d1357845163ffffffff1683529383019391830191600101615cf1565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615d615783516001600160a01b031683529284019291840191600101615d3c565b50909695505050505050565b6020815260008251806020840152615d8c816040850160208701615e89565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115615dea57615dea615f0b565b500190565b600082615dfe57615dfe615f21565b500490565b6000816000190483118215151615615e1d57615e1d615f0b565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e4d57615e4d615f0b565b81667fffffffffffff018313811615615e6857615e68615f0b565b5090039392505050565b600082821015615e8457615e84615f0b565b500390565b60005b83811015615ea4578181015183820152602001615e8c565b838111156151925750506000910152565b6000600019821415615ec957615ec9615f0b565b5060010190565b600082615edf57615edf615f21565b500690565b60008160060b667fffffffffffff19811415615f0257615f02615f0b565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146117f857600080fdfeee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220af09e59655e8067c649d473eea0f92cc1653e0a7ae44dd70305f6326a93f8e3f64736f6c63430008070033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
