{
  "_format": "hh-sol-artifact-1",
  "contractName": "JJLPDelegate",
  "sourceName": "contracts/JJLPDelegate.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cashPrior",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestAccumulated",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalBorrows",
          "type": "uint256"
        }
      ],
      "name": "AccrueInterest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accountBorrows",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalBorrows",
          "type": "uint256"
        }
      ],
      "name": "Borrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "error",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "info",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "detail",
          "type": "uint256"
        }
      ],
      "name": "Failure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reservesFee",
          "type": "uint256"
        }
      ],
      "name": "Flashloan",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "jTokenCollateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "seizeTokens",
          "type": "uint256"
        }
      ],
      "name": "LiquidateBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mintTokens",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "NewAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract JoetrollerInterface",
          "name": "oldJoetroller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract JoetrollerInterface",
          "name": "newJoetroller",
          "type": "address"
        }
      ],
      "name": "NewJoetroller",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract InterestRateModel",
          "name": "oldInterestRateModel",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract InterestRateModel",
          "name": "newInterestRateModel",
          "type": "address"
        }
      ],
      "name": "NewMarketInterestRateModel",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldPendingAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newPendingAdmin",
          "type": "address"
        }
      ],
      "name": "NewPendingAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldProtocolSeizeShareMantissa",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newProtocolSeizeShareMantissa",
          "type": "uint256"
        }
      ],
      "name": "NewProtocolSeizeShare",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldReserveFactorMantissa",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newReserveFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "NewReserveFactor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "redeemer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accountBorrows",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalBorrows",
          "type": "uint256"
        }
      ],
      "name": "RepayBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "benefactor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "addAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newTotalReserves",
          "type": "uint256"
        }
      ],
      "name": "ReservesAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reduceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newTotalReserves",
          "type": "uint256"
        }
      ],
      "name": "ReservesReduced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "_acceptAdmin",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "addAmount",
          "type": "uint256"
        }
      ],
      "name": "_addReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "_becomeImplementation",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reduceAmount",
          "type": "uint256"
        }
      ],
      "name": "_reduceReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "_resignImplementation",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract InterestRateModel",
          "name": "newInterestRateModel",
          "type": "address"
        }
      ],
      "name": "_setInterestRateModel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JoetrollerInterface",
          "name": "newJoetroller",
          "type": "address"
        }
      ],
      "name": "_setJoetroller",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "newPendingAdmin",
          "type": "address"
        }
      ],
      "name": "_setPendingAdmin",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newReserveFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "_setReserveFactor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "accrualBlockTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "accrueInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOfUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "name": "borrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "borrowBalanceCurrent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "borrowBalanceStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowRatePerSecond",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "claimJoe",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "change",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "repay",
          "type": "bool"
        }
      ],
      "name": "estimateBorrowRatePerSecondAfterChange",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "change",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "repay",
          "type": "bool"
        }
      ],
      "name": "estimateSupplyRatePerSecondAfterChange",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "exchangeRateCurrent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "exchangeRateStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "flashFeeBips",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "flashLoan",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getAccountSnapshot",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCash",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "gulp",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "implementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "underlying_",
          "type": "address"
        },
        {
          "internalType": "contract JoetrollerInterface",
          "name": "joetroller_",
          "type": "address"
        },
        {
          "internalType": "contract InterestRateModel",
          "name": "interestRateModel_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "initialExchangeRateMantissa_",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "decimals_",
          "type": "uint8"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JoetrollerInterface",
          "name": "joetroller_",
          "type": "address"
        },
        {
          "internalType": "contract InterestRateModel",
          "name": "interestRateModel_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "initialExchangeRateMantissa_",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "decimals_",
          "type": "uint8"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "interestRateModel",
      "outputs": [
        {
          "internalType": "contract InterestRateModel",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "internalCash",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isJToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "jlpSupplierIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "jlpSupplyState",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "joe",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "joeBar",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "joetroller",
      "outputs": [
        {
          "internalType": "contract JoetrollerInterface",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "internalType": "contract JTokenInterface",
          "name": "jTokenCollateral",
          "type": "address"
        }
      ],
      "name": "liquidateBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "masterChef",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pendingAdmin",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolSeizeShareMantissa",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "redeemAmount",
          "type": "uint256"
        }
      ],
      "name": "redeemUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        }
      ],
      "name": "repayBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        }
      ],
      "name": "repayBorrowBehalf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "reserveFactorMantissa",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "seizeTokens",
          "type": "uint256"
        }
      ],
      "name": "seize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "supplyRatePerSecond",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalBorrows",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "totalBorrowsCurrent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "underlying",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "xJoeUserAccrued",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526157d7806100136000396000f3fe608060405234801561001057600080fd5b50600436106103e65760003560e01c806373acee981161020a578063bd6d894d11610125578063ea11eea4116100b8578063f3fdb15a11610087578063f3fdb15a14610789578063f5e3c46214610791578063f851a440146107a4578063fca7820b146107ac578063fcdc3827146107bf576103e6565b8063ea11eea414610753578063ef82a8ec1461075b578063f10684541461076e578063f2b3abbd14610776576103e6565b8063db006a75116100f4578063db006a7514610712578063dd62ed3e14610725578063e0232b4214610738578063e9c714f21461074b576103e6565b8063bd6d894d146106cc578063c37f68e2146106d4578063c5ebeaec146106f7578063cfa992011461070a576103e6565b8063a0712d681161019d578063b1d389741161016c578063b1d3897414610696578063b2a02ff11461069e578063b71d1a0c146106b1578063b985a3a0146106c4576103e6565b8063a0712d6814610660578063a6afed9514610673578063a9059cbb1461067b578063aa5af0fd1461068e576103e6565b806395d89b41116101d957806395d89b411461061c57806395dd91931461062457806399d8c1b4146106375780639ac7ee191461064a576103e6565b806373acee98146105f1578063852a12e3146105f95780638f840ddd1461060c57806394909e6214610614576103e6565b80633af9e66911610305578063566bb32911610298578063601a0bf111610267578063601a0bf1146105a65780636330533c146105b95780636752e702146105ce5780636f307dc3146105d657806370a08231146105de576103e6565b8063566bb3291461057057806356e6772814610583578063575a86b2146105965780635c60da1b1461059e576103e6565b8063432f4b2d116102d4578063432f4b2d1461053a57806347bd37181461054d57806350f6e082146105555780635260975014610568576103e6565b80633af9e669146105045780633b1d21a2146105175780633e9410101461051f578063406de0b614610532576103e6565b8063182df0f51161037d57806323b872dd1161034c57806323b872dd146104c15780632608f818146104d457806326782247146104e7578063313ce567146104ef576103e6565b8063182df0f5146104895780631a31d465146104915780631ce3525a146104a457806322abdbf5146104b9576103e6565b8063153ab505116103b9578063153ab5051461045c578063173b99041461046657806317bfdfbc1461046e57806318160ddd14610481576103e6565b806306fdde03146103eb578063095ea7b3146104095780630e752702146104295780630f3e4e1114610449575b600080fd5b6103f36107d2565b6040516104009190615453565b60405180910390f35b61041c610417366004614924565b61085f565b604051610400919061541c565b61043c610437366004614b63565b6108cd565b60405161040091906155b4565b61043c610457366004614b9f565b6108e5565b6104646109c6565b005b61043c610a00565b61043c61047c366004614752565b610a06565b61043c610a76565b61043c610a7c565b61046461049f366004614858565b610a8c565b6104ac610b38565b60405161040091906151e9565b61043c610b47565b61041c6104cf366004614815565b610b4d565b61043c6104e2366004614924565b610b9d565b6104ac610bb5565b6104f7610bc4565b604051610400919061564a565b61043c610512366004614752565b610bcd565b61043c610c1a565b61043c61052d366004614b63565b610c24565b61041c610c31565b61043c610548366004614a52565b610c36565b61043c610d5a565b61043c610563366004614b9f565b610d60565b61043c610de1565b61043c61057e366004614752565b610e71565b610464610591366004614a1d565b610e83565b6104ac611142565b6104ac611151565b61043c6105b4366004614b63565b611160565b6105c16111d9565b604051610400919061542a565b61043c6111e8565b6104ac6111ee565b61043c6105ec366004614752565b6111fd565b61043c611218565b61043c610607366004614b63565b61127e565b61043c61128b565b610464611291565b6103f3611304565b61043c610632366004614752565b61135c565b610464610645366004614a70565b611367565b61065261149d565b6040516104009291906155f8565b61043c61066e366004614b63565b6114a6565b61043c6114b4565b61041c610689366004614924565b611682565b61043c6116d2565b61043c6116d8565b61043c6106ac366004614815565b61171c565b61043c6106bf366004614752565b61176b565b6104ac6117e4565b61043c6117f3565b6106e76106e2366004614752565b61185f565b604051610400949392919061563c565b61043c610705366004614b63565b61189b565b61043c6118a8565b61043c610720366004614b63565b6118ae565b61043c6107333660046147db565b6118bb565b610464610746366004614954565b6118e6565b61043c611b0c565b61043c611c0b565b61043c610769366004614752565b611c10565b61043c611c22565b61043c610784366004614a52565b611c28565b6105c1611c62565b61043c61079f3660046149bc565b611c71565b6104ac611c8b565b61043c6107ba366004614b63565b611c9f565b61043c6107cd366004614752565b611cfb565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108575780601f1061082c57610100808354040283529160200191610857565b820191906000526020600020905b81548152906001019060200180831161083a57829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108b99087906155b4565b60405180910390a360019150505b92915050565b6000806108db836000611e64565b509150505b919050565b60008060008315610916576109016108fb611eee565b86611f82565b915061090f600b5486611fb8565b9050610938565b610927610921611eee565b86611fb8565b9150610935600b5486611f82565b90505b600654600c546040516315f2405360e01b81526001600160a01b03909216916315f240539161096d918691869160040161562e565b60206040518083038186803b15801561098557600080fd5b505afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109bd9190810190614b81565b95945050505050565b60035461010090046001600160a01b031633146109fe5760405162461bcd60e51b81526004016109f5906154d4565b60405180910390fd5b565b60085481565b6000805460ff16610a295760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155610a3b6114b4565b14610a585760405162461bcd60e51b81526004016109f590615464565b610a618261135c565b90505b6000805460ff19166001179055919050565b600d5481565b6000610a86611ff2565b90505b90565b610a9a868686868686611367565b601180546001600160a01b0319166001600160a01b038981169190911791829055604080516318160ddd60e01b8152905192909116916318160ddd91600480820192602092909190829003018186803b158015610af657600080fd5b505afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b2e9190810190614b81565b5050505050505050565b6016546001600160a01b031681565b60135481565b6000805460ff16610b705760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155610b8633868686612058565b1490506000805460ff191660011790559392505050565b600080610bac84846000612093565b50949350505050565b6004546001600160a01b031681565b60035460ff1681565b6000610bd761448f565b6040518060200160405280610bea6117f3565b90526001600160a01b0384166000908152600e6020526040902054909150610c1390829061211e565b9392505050565b6000610a86611eee565b60006108c782600061213d565b600181565b60035460009061010090046001600160a01b03163314610c6357610c5c600160296121b9565b90506108e0565b600554604080516340e6dcc560e01b815290516001600160a01b03928316928516916340e6dcc5916004808301926020929190829003018186803b158015610caa57600080fd5b505afa158015610cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ce291908101906149ff565b610cfe5760405162461bcd60e51b81526004016109f5906154e4565b600580546001600160a01b0319166001600160a01b0385161790556040517f17d6db5ffe5a3d1c3d7a98194dca4f7d808d621e6ff9077ed574513d553a2a8590610d4b9083908690615438565b60405180910390a16000610c13565b600b5481565b60008060008315610d8b57610d766108fb611eee565b9150610d84600b5486611fb8565b9050610da7565b610d96610921611eee565b9150610da4600b5486611f82565b90505b600654600c54600854604051635c0b440b60e11b81526001600160a01b039093169263b81688169261096d9287928792919060040161563c565b6006546000906001600160a01b03166315f24053610dfd611eee565b600b54600c546040518463ffffffff1660e01b8152600401610e219392919061562e565b60206040518083038186803b158015610e3957600080fd5b505afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a869190810190614b81565b601c6020526000908152604090205481565b610e8c81612219565b600080600083806020019051610ea5919081019061478e565b601580546001600160a01b038086166001600160a01b0319928316179283905560168054828716931692909217909155604080516305cc2d1d60e51b81529051959850939650919450169163b985a3a091600480820192602092909190829003018186803b158015610f1657600080fd5b505afa158015610f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f4e9190810190614770565b601780546001600160a01b0319166001600160a01b0392909216919091179055610f766144a2565b601554604051631526fe2760e01b81526001600160a01b0390911690631526fe2790610fa69085906004016155b4565b60206040518083038186803b158015610fbe57600080fd5b505afa158015610fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ff69190810190614b27565b60115481519192506001600160a01b039182169116146110285760405162461bcd60e51b81526004016109f5906154a4565b601882905560115460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061106190879060001990600401615400565b602060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110b391908101906149ff565b5060175460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906110e890869060001990600401615400565b602060405180830381600087803b15801561110257600080fd5b505af1158015611116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061113a91908101906149ff565b505050505050565b6015546001600160a01b031681565b6012546001600160a01b031681565b6000805460ff166111835760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556111956114b4565b905080156111bb576111b38160108111156111ac57fe5b601d6121b9565b915050610a64565b6111c483612256565b9150506000805460ff19166001179055919050565b6005546001600160a01b031681565b60145481565b6011546001600160a01b031681565b6001600160a01b03166000908152600e602052604090205490565b6000805460ff1661123b5760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff1916815561124d6114b4565b1461126a5760405162461bcd60e51b81526004016109f590615464565b50600b546000805460ff1916600117905590565b60006108c7826000612344565b600c5481565b60005460ff166112b35760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556112c56123ba565b905060006112d1611eee565b905060006112df8383611fb8565b90506112ed600c5482611f82565b600c5550506013556000805460ff19166001179055565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108575780601f1061082c57610100808354040283529160200191610857565b60006108c782612443565b60035461010090046001600160a01b031633146113965760405162461bcd60e51b81526004016109f590615474565b6009541580156113a65750600a54155b6113c25760405162461bcd60e51b81526004016109f590615494565b6007849055836113e45760405162461bcd60e51b81526004016109f5906154b4565b60006113ef87610c36565b9050801561140f5760405162461bcd60e51b81526004016109f590615514565b61141761248f565b600955670de0b6b3a7640000600a5561142f86612493565b9050801561144f5760405162461bcd60e51b81526004016109f5906154c4565b83516114629060019060208701906144b4565b5082516114769060029060208601906144b4565b50506003805460ff90921660ff199283161790556000805490911660011790555050505050565b601954601a5482565b6000806108db8360006125c9565b6000806114bf61248f565b600954909150808214156114d857600092505050610a89565b60006114e2611eee565b600b54600c54600a546006546040516315f2405360e01b81529495509293919290916000916001600160a01b0316906315f24053906115299088908890889060040161562e565b60206040518083038186803b15801561154157600080fd5b505afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115799190810190614b81565b905065048c273950008111156115a15760405162461bcd60e51b81526004016109f590615504565b60006115ad8888611fb8565b90506115b761448f565b6115cf60405180602001604052808581525083612629565b905060006115dd828861211e565b905060006115eb8289611f82565b9050600061160a6040518060200160405280600854815250848a612653565b9050600061161985898a612653565b60098e9055600a819055600b849055600c8390556040519091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc0490611666908d9087908590889061563c565b60405180910390a160009d505050505050505050505050505090565b6000805460ff166116a55760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556116bb33338686612058565b1490505b6000805460ff1916600117905592915050565b600a5481565b6006546000906001600160a01b031663b81688166116f4611eee565b600b54600c546008546040518563ffffffff1660e01b8152600401610e21949392919061563c565b6000805460ff1661173f5760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191690556117553385858561267b565b90506000805460ff191660011790559392505050565b60035460009061010090046001600160a01b0316331461179157610c5c6001602f6121b9565b600480546001600160a01b038481166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a990610d4b90839086906152c3565b6017546001600160a01b031681565b6000805460ff166118165760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556118286114b4565b146118455760405162461bcd60e51b81526004016109f590615464565b61184d610a7c565b90506000805460ff1916600117905590565b6000806000806000611870866111fd565b9050600061187d87612443565b90506000611889611ff2565b90506000989297509095509350915050565b60006108c78260006128c2565b60095481565b60006108c7826000612920565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b60005460ff166119085760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191690558261192f5760405162461bcd60e51b81526004016109f5906155a4565b60006119396114b4565b146119565760405162461bcd60e51b81526004016109f590615464565b60006119606123ba565b9050600061196c611eee565b90508481101561198e5760405162461bcd60e51b81526004016109f590615574565b60006119a661199e876008612979565b6127106129bb565b90506119b4878760006129ee565b6119c0600b5487611f82565b600b5560115460405163405b019d60e01b81526001600160a01b03808a169263405b019d926119fd92339216908b9087908c908c906004016151f7565b600060405180830381600087803b158015611a1757600080fd5b505af1158015611a2b573d6000803e3d6000fd5b505050506000611a396123ba565b9050611a458483611f82565b8114611a635760405162461bcd60e51b81526004016109f590615524565b6000611a7f60405180602001604052806008548152508461211e565b9050611a8d600c5482611f82565b600c55611a9a8484611f82565b601355600b54611aaa9089611fb8565b600b556040516001600160a01b038a16907f33c8e097c526683cbdb29adf782fac95e9d0fbe0ed635c13d8c75fdf726557d990611aec908b908790869061562e565b60405180910390a250506000805460ff1916600117905550505050505050565b6004546000906001600160a01b031633141580611b27575033155b15611b3f57611b38600160006121b9565b9050610a89565b60038054600480546001600160a01b03818116610100818102610100600160a81b0319871617968790556001600160a01b03199093169093556040519382900481169492937ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc93611bb5938793910416906152c3565b60405180910390a16004546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a991611bfa9184916001600160a01b0316906152c3565b60405180910390a160009250505090565b600881565b601b6020526000908152604090205481565b60185481565b600080611c336114b4565b90508015611c5957611c51816010811115611c4a57fe5b602a6121b9565b9150506108e0565b610c1383612493565b6006546001600160a01b031681565b600080611c818585856000612b84565b5095945050505050565b60035461010090046001600160a01b031681565b6000805460ff16611cc25760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155611cd46114b4565b90508015611cf2576111b3816010811115611ceb57fe5b60306121b9565b6111c483612ca2565b6000611d05612d3a565b611d0d612e13565b611d1682612f0a565b6001600160a01b0382166000908152601c60205260409020548015611e5b576016546040516367dfd4c960e01b81526001600160a01b03909116906367dfd4c990611d659084906004016155b4565b600060405180830381600087803b158015611d7f57600080fd5b505af1158015611d93573d6000803e3d6000fd5b50505050611da660196000015482611fb8565b6019556000611db361304a565b60175460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb90611de69087908590600401615400565b602060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e3891908101906149ff565b506001600160a01b0384166000908152601c602052604081205591506108e09050565b50600092915050565b60008054819060ff16611e895760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155611e9b6114b4565b90508015611ec657611eb9816010811115611eb257fe5b60236121b9565b925060009150611ed89050565b611ed23333878761307b565b92509250505b6000805460ff1916600117905590939092509050565b6000611ef861448f565b6015546018546040516393f1a40b60e01b81526001600160a01b03909216916393f1a40b91611f2b9130906004016155c2565b60206040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f7b9190810190614b45565b5191505090565b6000610c138383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b8152506132a8565b6000610c138383604051806040016040528060158152602001747375627472616374696f6e20756e646572666c6f7760581b8152506132cf565b600d5460009080612007575050600754610a89565b6000612011611eee565b9050600061202c61202483600b54611f82565b600c54611fb8565b90506000612048826040518060200160405280878152506132fb565b9450610a899350505050565b5090565b6000612062612d3a565b61206a612e13565b61207384612f0a565b61207c83612f0a565b61208885858585613319565b90505b949350505050565b60008054819060ff166120b85760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556120ca6114b4565b905080156120f5576120e88160108111156120e157fe5b60226121b9565b9250600091506121079050565b6121013387878761307b565b92509250505b6000805460ff191660011790559094909350915050565b600061212861448f565b6121328484612629565b905061208b81613514565b6000805460ff166121605760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556121726114b4565b905080156121985761219081601081111561218957fe5b60366121b9565b9150506116bf565b6121a28484613523565b509150506000805460ff1916600117905592915050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08360108111156121e857fe5b83603c8111156121f457fe5b600060405161220593929190615606565b60405180910390a1826010811115610c1357fe5b60035461010090046001600160a01b031633146122485760405162461bcd60e51b81526004016109f590615594565b6122506123ba565b60135550565b600354600090819061010090046001600160a01b0316331461227e57611c516001601e6121b9565b61228661248f565b6009541461229a57611c51600a60206121b9565b826122a3611eee565b10156122b557611c51600e601f6121b9565b600c548311156122cb57611c51600260216121b9565b6122d7600c5484611fb8565b600c8190556003549091506122fc9061010090046001600160a01b03168460016129ee565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b03168483604051610d4b93929190615266565b6000805460ff166123675760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556123796114b4565b905080156123975761219081601081111561239057fe5b60196121b9565b6123a433600086866135bc565b9150506000805460ff1916600117905592915050565b6011546040516370a0823160e01b81526000916001600160a01b03169081906370a08231906123ed9030906004016151e9565b60206040518083038186803b15801561240557600080fd5b505afa158015612419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061243d9190810190614b81565b91505090565b6001600160a01b0381166000908152601060205260408120805461246b5760009150506108e0565b600061247d8260000154600a54612979565b905060006109bd8284600101546129bb565b4290565b600354600090819061010090046001600160a01b031633146124bb57611c516001602c6121b9565b6124c361248f565b600954146124d757611c51600a602b6121b9565b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561252857600080fd5b505afa15801561253c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061256091908101906149ff565b61257c5760405162461bcd60e51b81526004016109f5906154e4565b600680546001600160a01b0319166001600160a01b0385161790556040517fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92690610d4b9083908690615438565b60008054819060ff166125ee5760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556126006114b4565b9050801561261e57611eb981601081111561261757fe5b60146121b9565b611ed23386866138b0565b61263161448f565b604051806020016040528061264a856000015185612979565b90529392505050565b600061265d61448f565b6126678585612629565b90506109bd61267582613514565b84611f82565b60055460405163d02f735160e01b815260009182916001600160a01b039091169063d02f7351906126b89030908a908a908a908a90600401615314565b602060405180830381600087803b1580156126d257600080fd5b505af11580156126e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061270a9190810190614b81565b905080156127275761271f6003601183613ab1565b91505061208b565b8261273357600061271f565b846001600160a01b0316846001600160a01b031614156127595761271f600660126121b9565b6000612775846040518060200160405280601454815250613b10565b905060006127838583611fb8565b9050600061278f611ff2565b905060006127ab6040518060200160405280848152508561211e565b6001600160a01b0389166000908152600e60205260409020549091506127d19088611fb8565b6001600160a01b03808a166000908152600e602052604080822093909355908b16815220546128009084611f82565b6001600160a01b038a166000908152600e6020526040902055600c546128269082611f82565b600c55600d546128369085611fb8565b600d81905550886001600160a01b0316886001600160a01b03166000805160206157758339815191528960405161286d91906155b4565b60405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53082600c546040516128aa9392919061540e565b60405180910390a160009a9950505050505050505050565b6000805460ff166128e55760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556128f76114b4565b905080156129155761219081601081111561290e57fe5b60026121b9565b6123a4338585613b38565b6000805460ff166129435760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556129556114b4565b9050801561296c5761219081601081111561239057fe5b6123a433856000866135bc565b6000610c1383836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613d12565b6000610c1383836040518060400160405280600e81526020016d646976696465206279207a65726f60901b815250613d5a565b601554601854604051630441a3e760e41b81526001600160a01b039092169163441a3e7091612a219186906004016155f8565b600060405180830381600087803b158015612a3b57600080fd5b505af1158015612a4f573d6000803e3d6000fd5b505050506000612a5d61304a565b1115612acb576016546001600160a01b031663a59f3e0c612a7c61304a565b6040518263ffffffff1660e01b8152600401612a9891906155b4565b600060405180830381600087803b158015612ab257600080fd5b505af1158015612ac6573d6000803e3d6000fd5b505050505b612ad3612e13565b612adc83612f0a565b60115460405163a9059cbb60e01b81526001600160a01b0390911690819063a9059cbb90612b10908790879060040161524b565b602060405180830381600087803b158015612b2a57600080fd5b505af1158015612b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b6291908101906149ff565b612b7e5760405162461bcd60e51b81526004016109f590615534565b50505050565b60008054819060ff16612ba95760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155612bbb6114b4565b90508015612be657612bd9816010811115612bd257fe5b60076121b9565b925060009150612c8a9050565b846001600160a01b031663a6afed956040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c2157600080fd5b505af1158015612c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c599190810190614b81565b90508015612c7757612bd9816010811115612c7057fe5b60086121b9565b612c843388888888613d8e565b92509250505b6000805460ff19166001179055909590945092505050565b60035460009061010090046001600160a01b03163314612cc857610c5c600160316121b9565b612cd061248f565b60095414612ce457610c5c600a60326121b9565b670de0b6b3a7640000821115612d0057610c5c600260336121b9565b60088054908390556040517faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f82146090610d4b90839086906155f8565b601554601854604051631c57762b60e31b81526001600160a01b039092169163e2bbb15891612d6e916000906004016155dd565b600060405180830381600087803b158015612d8857600080fd5b505af1158015612d9c573d6000803e3d6000fd5b505050506000612daa61304a565b11156109fe576016546001600160a01b031663a59f3e0c612dc961304a565b6040518263ffffffff1660e01b8152600401612de591906155b4565b600060405180830381600087803b158015612dff57600080fd5b505af1158015612b7e573d6000803e3d6000fd5b6000612e1d6141d7565b90506000612e3082601960000154611fb8565b90506000306001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e6d57600080fd5b505afa158015612e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ea59190810190614b81565b9050612eaf61448f565b60008211612ecc5760405180602001604052806000815250612ed6565b612ed68383614208565b9050612ee061448f565b6040805160208101909152601a548152612efa908361423d565b51601a5550505060199190915550565b612f1261448f565b506040805160208101909152601a548152612f2b61448f565b5060408051602080820183526001600160a01b0385166000908152601b90915291909120548152612f5a61448f565b612f648383614262565b805190915015612b7e576040516370a0823160e01b815260009030906370a0823190612f949088906004016151e9565b60206040518083038186803b158015612fac57600080fd5b505afa158015612fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612fe49190810190614b81565b90506000612ff28284614287565b6001600160a01b0387166000908152601c60205260409020549091506130189082611f82565b6001600160a01b0387166000908152601c60209081526040808320939093558751601b90915291902055505050505050565b6017546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610e219030906004016151e9565b600554604051631200453160e11b8152600091829182916001600160a01b0316906324008a62906130b69030908b908b908b90600401615360565b602060405180830381600087803b1580156130d057600080fd5b505af11580156130e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131089190810190614b81565b9050801561312a5761311d6003602483613ab1565b92506000915061329f9050565b846131645761313886612443565b6001600160a01b0387166000908152601060205260408120918255600a5460019092019190915561311d565b61316c61248f565b600954146131805761311d600a60256121b9565b61318861452e565b6001600160a01b03871660009081526010602052604090206001015460608201526131b287612443565b60808201526000198614156131d057608081015160408201526131d8565b604081018690525b6131e7888260400151876142a7565b60e0820181905260808201516131fc91611fb8565b60a0820152600b5460e08201516132139190611fb8565b60c0820190815260a0820180516001600160a01b038a1660009081526010602052604090819020918255600a546001909201919091559151600b81905560e0840151915192517f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19361328b938d938d939192916153cb565b60405180910390a160e00151600093509150505b94509492505050565b60008383018285821015610bac5760405162461bcd60e51b81526004016109f59190615453565b600081848411156132f35760405162461bcd60e51b81526004016109f59190615453565b505050900390565b6000610c1361331284670de0b6b3a7640000612979565b83516129bb565b6005546040516317b9b84b60e31b815260009182916001600160a01b039091169063bdcdc25890613354903090899089908990600401615360565b602060405180830381600087803b15801561336e57600080fd5b505af1158015613382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133a69190810190614b81565b905080156133bb5761271f6003603483613ab1565b836001600160a01b0316856001600160a01b031614156133e15761271f600260356121b9565b60006001600160a01b0387811690871614156134005750600019613428565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b6001600160a01b0386166000908152600e602052604090205461344b9085611fb8565b6001600160a01b038088166000908152600e6020526040808220939093559087168152205461347a9085611f82565b6001600160a01b0386166000908152600e602052604090205560001981146134cd576134a68185611fb8565b6001600160a01b038088166000908152600f60209081526040808320938c16835292905220555b846001600160a01b0316866001600160a01b0316600080516020615775833981519152866040516134fe91906155b4565b60405180910390a360005b979650505050505050565b51670de0b6b3a7640000900490565b60008060008061353161248f565b6009541461355057613545600a60376121b9565b935091506135b59050565b61355b3387876142a7565b9050613569600c5482611f82565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53382846040516135a593929190615266565b60405180910390a1600093509150505b9250929050565b60008315806135c9575082155b6135e55760405162461bcd60e51b81526004016109f590615564565b6135ed614574565b6135f5611ff2565b815284156136265760208082018690526040805191820190528151815261361c908661211e565b604082015261364f565b6136428460405180602001604052808460000151815250614443565b6020820152604081018490525b600554602082015160405163eabe7d9160e01b81526000926001600160a01b03169163eabe7d91916136889130918c91906004016152de565b602060405180830381600087803b1580156136a257600080fd5b505af11580156136b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136da9190810190614b81565b905080156136f8576136ef6003601a83613ab1565b9250505061208b565b85158015613704575084155b156137105760006136ef565b61371861248f565b6009541461372c576136ef600a601b6121b9565b61373c600d548360200151611fb8565b60608301526001600160a01b0387166000908152600e60209081526040909120549083015161376b9190611fb8565b6080830152604082015161377d611eee565b101561378f576136ef600e601c6121b9565b61379e878360400151866129ee565b6060820151600d5560808201516001600160a01b0388166000818152600e6020908152604091829020939093559184015191513092600080516020615775833981519152916137ed91906155b4565b60405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929878360400151846020015160405161383093929190615266565b60405180910390a1600554604080840151602085015191516351dff98960e01b81526001600160a01b03909316926351dff989926138759230928d92906004016152f9565b600060405180830381600087803b15801561388f57600080fd5b505af11580156138a3573d6000803e3d6000fd5b5060009250613509915050565b600554604051634ef4c3e160e01b8152600091829182916001600160a01b031690634ef4c3e1906138e99030908a908a90600401615388565b602060405180830381600087803b15801561390357600080fd5b505af1158015613917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061393b9190810190614b81565b9050801561395d576139506003601583613ab1565b925060009150613aa99050565b84613969576000613950565b61397161248f565b6009541461398557613950600a60166121b9565b61398d6145a3565b613995611ff2565b81526139a28787876142a7565b6040808301829052805160208101909152825181526139c19190614443565b60208201819052600d546139d491611f82565b600d556001600160a01b0387166000908152600e602090815260409091205490820151613a019190611f82565b6001600160a01b0388166000908152600e602090815260409182902092909255828101519183015190517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f92613a58928b9261540e565b60405180910390a1866001600160a01b0316306001600160a01b03166000805160206157758339815191528360200151604051613a9591906155b4565b60405180910390a360400151600093509150505b935093915050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0846010811115613ae057fe5b84603c811115613aec57fe5b84604051613afc9392919061562e565b60405180910390a183601081111561208b57fe5b6000670de0b6b3a7640000613b29848460000151612979565b81613b3057fe5b049392505050565b60055460405163368f515360e21b815260009182916001600160a01b039091169063da3d454c90613b71903090899089906004016152de565b602060405180830381600087803b158015613b8b57600080fd5b505af1158015613b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613bc39190810190614b81565b90508015613be057613bd86003600683613ab1565b915050610c13565b83613c1a57613bee85612443565b6001600160a01b0386166000908152601060205260408120918255600a54600190920191909155613bd8565b613c2261248f565b60095414613c3657613bd8600a60046121b9565b83613c3f611eee565b1015613c5157613bd8600e60036121b9565b613c596145c4565b613c6286612443565b60208201819052613c739086611f82565b6040820152600b54613c859086611f82565b6060820152613c958686866129ee565b604080820180516001600160a01b03891660009081526010602052839020908155600a546001909101556060830151600b819055905191517f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab8092613cfe928a928a92919061528e565b60405180910390a160009695505050505050565b6000831580613d1f575082155b15613d2c57506000610c13565b83830283858281613d3957fe5b04148390610bac5760405162461bcd60e51b81526004016109f59190615453565b60008183613d7b5760405162461bcd60e51b81526004016109f59190615453565b50828481613d8557fe5b04949350505050565b600554604051632fe3f38f60e11b8152600091829182916001600160a01b031690635fc7e71e90613dcb90309089908d908d908d90600401615314565b602060405180830381600087803b158015613de557600080fd5b505af1158015613df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613e1d9190810190614b81565b90508015613e3f57613e326003600a83613ab1565b9250600091506141cd9050565b613e4761248f565b60095414613e5b57613e32600a600e6121b9565b613e6361248f565b856001600160a01b031663cfa992016040518163ffffffff1660e01b815260040160206040518083038186803b158015613e9c57600080fd5b505afa158015613eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613ed49190810190614b81565b14613ee557613e32600a60096121b9565b876001600160a01b0316876001600160a01b03161415613f0b57613e326006600f6121b9565b85613f1c57613e326007600d6121b9565b600019861415613f3257613e326007600c6121b9565b600080613f418a8a8a8961307b565b90925090508115613f7157613f62826010811115613f5b57fe5b60106121b9565b9450600093506141cd92505050565b60055460405163c488847b60e01b815260009182916001600160a01b039091169063c488847b90613faa9030908d908890600401615388565b604080518083038186803b158015613fc157600080fd5b505afa158015613fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613ff99190810190614bcf565b9092509050811561401c5760405162461bcd60e51b81526004016109f590615484565b6040516370a0823160e01b815281906001600160a01b038b16906370a082319061404a908f906004016151e9565b60206040518083038186803b15801561406257600080fd5b505afa158015614076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061409a9190810190614b81565b10156140b85760405162461bcd60e51b81526004016109f590615554565b60006001600160a01b038a163014156140de576140d7308e8e8561267b565b9050614163565b896001600160a01b031663b2a02ff18e8e856040518463ffffffff1660e01b815260040161410e93929190615388565b602060405180830381600087803b15801561412857600080fd5b505af115801561413c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506141609190810190614b81565b90505b80156141815760405162461bcd60e51b81526004016109f590615584565b7f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb528d8d868d866040516141b89594939291906153a3565b60405180910390a16000975092955050505050505b9550959350505050565b6016546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610e219030906004016151e9565b61421061448f565b604051806020016040528061264a614237866ec097ce7bc90715b34b9f1000000000612979565b856129bb565b61424561448f565b604051806020016040528061264a85600001518560000151611f82565b61426a61448f565b604051806020016040528061264a85600001518560000151611fb8565b60006ec097ce7bc90715b34b9f1000000000613b29848460000151612979565b6011546040516323b872dd60e01b81526000916001600160a01b03169081906323b872dd906142de90889030908990600401615388565b602060405180830381600087803b1580156142f857600080fd5b505af115801561430c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061433091908101906149ff565b61434c5760405162461bcd60e51b81526004016109f590615544565b601554601854604051631c57762b60e31b81526001600160a01b039092169163e2bbb1589161437f9188906004016155f8565b600060405180830381600087803b15801561439957600080fd5b505af11580156143ad573d6000803e3d6000fd5b5050505060006143bb61304a565b1115614429576016546001600160a01b031663a59f3e0c6143da61304a565b6040518263ffffffff1660e01b81526004016143f691906155b4565b600060405180830381600087803b15801561441057600080fd5b505af1158015614424573d6000803e3d6000fd5b505050505b614431612e13565b61443a85612f0a565b50919392505050565b600061444d61448f565b612132848461445a61448f565b600061446e670de0b6b3a764000085612979565b9050604051806020016040528061448583866132fb565b9052949350505050565b6040518060200160405280600081525090565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106144f557805160ff1916838001178555614522565b82800160010185558215614522579182015b82811115614522578251825591602001919060010190614507565b506120549291506145ed565b6040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b604080516080810190915280600081526020016000815260200160008152602001600081525090565b610a8991905b8082111561205457600081556001016145f3565b80356108c781615739565b80516108c781615739565b80356108c781615750565b80516108c781615750565b60008083601f84011261464557600080fd5b50813567ffffffffffffffff81111561465d57600080fd5b6020830191508360018202830111156135b557600080fd5b600082601f83011261468657600080fd5b81356146996146948261567f565b615658565b915080825260208301602083018583830111156146b557600080fd5b6146c08382846156f7565b50505092915050565b80356108c781615759565b6000602082840312156146e657600080fd5b6146f06020615658565b905060006146fe8484614612565b82525092915050565b60006020828403121561471957600080fd5b6147236020615658565b905060006146fe848461473c565b80356108c781615762565b80516108c781615762565b80356108c78161576b565b60006020828403121561476457600080fd5b600061208b8484614607565b60006020828403121561478257600080fd5b600061208b8484614612565b6000806000606084860312156147a357600080fd5b60006147af8686614612565b93505060206147c086828701614612565b92505060406147d18682870161473c565b9150509250925092565b600080604083850312156147ee57600080fd5b60006147fa8585614607565b925050602061480b85828601614607565b9150509250929050565b60008060006060848603121561482a57600080fd5b60006148368686614607565b935050602061484786828701614607565b92505060406147d186828701614731565b600080600080600080600060e0888a03121561487357600080fd5b600061487f8a8a614607565b97505060206148908a828b016146c9565b96505060406148a18a828b016146c9565b95505060606148b28a828b01614731565b945050608088013567ffffffffffffffff8111156148cf57600080fd5b6148db8a828b01614675565b93505060a088013567ffffffffffffffff8111156148f857600080fd5b6149048a828b01614675565b92505060c06149158a828b01614747565b91505092959891949750929550565b6000806040838503121561493757600080fd5b60006149438585614607565b925050602061480b85828601614731565b6000806000806060858703121561496a57600080fd5b60006149768787614607565b945050602061498787828801614731565b935050604085013567ffffffffffffffff8111156149a457600080fd5b6149b087828801614633565b95989497509550505050565b6000806000606084860312156149d157600080fd5b60006149dd8686614607565b93505060206149ee86828701614731565b92505060406147d1868287016146c9565b600060208284031215614a1157600080fd5b600061208b8484614628565b600060208284031215614a2f57600080fd5b813567ffffffffffffffff811115614a4657600080fd5b61208b84828501614675565b600060208284031215614a6457600080fd5b600061208b84846146c9565b60008060008060008060c08789031215614a8957600080fd5b6000614a9589896146c9565b9650506020614aa689828a016146c9565b9550506040614ab789828a01614731565b945050606087013567ffffffffffffffff811115614ad457600080fd5b614ae089828a01614675565b935050608087013567ffffffffffffffff811115614afd57600080fd5b614b0989828a01614675565b92505060a0614b1a89828a01614747565b9150509295509295509295565b600060208284031215614b3957600080fd5b600061208b84846146d4565b600060208284031215614b5757600080fd5b600061208b8484614707565b600060208284031215614b7557600080fd5b600061208b8484614731565b600060208284031215614b9357600080fd5b600061208b848461473c565b60008060408385031215614bb257600080fd5b6000614bbe8585614731565b925050602061480b8582860161461d565b60008060408385031215614be257600080fd5b6000614bee858561473c565b925050602061480b8582860161473c565b614c08816156e1565b82525050565b614c08816156b4565b614c08816156bf565b6000614c2c83856156ab565b9350614c398385846156f7565b614c428361572f565b9093019392505050565b614c08816156c4565b614c08816156ec565b6000614c69826156a7565b614c7381856156ab565b9350614c83818560208601615703565b614c428161572f565b6000614c996016836156ab565b751858d8dc9d59481a5b9d195c995cdd0819985a5b195960521b815260200192915050565b6000614ccb6024836156ab565b7f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d618152631c9ad95d60e21b602082015260400192915050565b6000614d116032836156ab565b7f4c49515549444154455f4a4f4554524f4c4c45525f43414c43554c4154455f418152711353d5539517d4d152569157d1905253115160721b602082015260400192915050565b6000614d656023836156ab565b7f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f8152626e636560e81b602082015260400192915050565b6000614daa6019836156ab565b7f6d69736d6174636820756e6465726c79696e6720746f6b656e00000000000000815260200192915050565b6000614de36030836156ab565b7f696e697469616c2065786368616e67652072617465206d75737420626520677281526f32b0ba32b9103a3430b7103d32b9379760811b602082015260400192915050565b6000614e356022836156ab565b7f73657474696e6720696e7465726573742072617465206d6f64656c206661696c815261195960f21b602082015260400192915050565b6000614e79602d836156ab565b7f6f6e6c79207468652061646d696e206d61792063616c6c205f72657369676e4981526c36b83632b6b2b73a30ba34b7b760991b602082015260400192915050565b6000614ec8601c836156ab565b7f6d61726b6572206d6574686f642072657475726e65642066616c736500000000815260200192915050565b6000614f01600a836156ab565b691c994b595b9d195c995960b21b815260200192915050565b6000614f27601c836156ab565b7f626f72726f772072617465206973206162737572646c79206869676800000000815260200192915050565b6000614f606019836156ab565b7f73657474696e67206a6f6574726f6c6c6572206661696c656400000000000000815260200192915050565b6000614f996014836156ab565b73109053105390d157d25390d3d394d254d511539560621b815260200192915050565b6000614fc96025836156ab565b7f756e6578706563746564204549502d3230207472616e73666572206f7574207281526432ba3ab93760d91b602082015260400192915050565b60006150106024836156ab565b7f756e6578706563746564204549502d3230207472616e7366657220696e2072658152633a3ab93760e11b602082015260400192915050565b60006150566018836156ab565b7f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000815260200192915050565b600061508f6034836156ab565b7f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d418152736d6f756e74496e206d757374206265207a65726f60601b602082015260400192915050565b60006150e56016836156ab565b75494e53554646494349454e545f4c495155494449545960501b815260200192915050565b60006151176014836156ab565b731d1bdad95b881cd95a5e9d5c994819985a5b195960621b815260200192915050565b6000615147602d836156ab565b7f6f6e6c79207468652061646d696e206d61792063616c6c205f6265636f6d654981526c36b83632b6b2b73a30ba34b7b760991b602082015260400192915050565b6000615196602c836156ab565b7f666c6173684c6f616e20616d6f756e742073686f756c6420626520677265617481526b6572207468616e207a65726f60a01b602082015260400192915050565b614c0881610a89565b614c08816156db565b602081016108c78284614c0e565b60a081016152058289614bff565b6152126020830188614c0e565b61521f60408301876151d7565b61522c60608301866151d7565b818103608083015261523f818486614c20565b98975050505050505050565b604081016152598285614bff565b610c1360208301846151d7565b606081016152748286614bff565b61528160208301856151d7565b61208b60408301846151d7565b6080810161529c8287614bff565b6152a960208301866151d7565b6152b660408301856151d7565b6109bd60608301846151d7565b604081016152d18285614c0e565b610c136020830184614bff565b606081016152ec8286614c0e565b6152816020830185614bff565b608081016153078287614c0e565b6152a96020830186614bff565b60a081016153228288614c0e565b61532f6020830187614c0e565b61533c6040830186614c0e565b6153496060830185614c0e565b61535660808301846151d7565b9695505050505050565b6080810161536e8287614c0e565b61537b6020830186614c0e565b6152b66040830185614c0e565b606081016153968286614c0e565b6152816020830185614c0e565b60a081016153b18288614c0e565b6153be6020830187614c0e565b61533c60408301866151d7565b60a081016153d98288614c0e565b6153e66020830187614c0e565b6153f360408301866151d7565b61534960608301856151d7565b604081016152598285614c0e565b606081016152748286614c0e565b602081016108c78284614c17565b602081016108c78284614c4c565b604081016154468285614c4c565b610c136020830184614c4c565b60208082528101610c138184614c5e565b602080825281016108c781614c8c565b602080825281016108c781614cbe565b602080825281016108c781614d04565b602080825281016108c781614d58565b602080825281016108c781614d9d565b602080825281016108c781614dd6565b602080825281016108c781614e28565b602080825281016108c781614e6c565b602080825281016108c781614ebb565b602080825281016108c781614ef4565b602080825281016108c781614f1a565b602080825281016108c781614f53565b602080825281016108c781614f8c565b602080825281016108c781614fbc565b602080825281016108c781615003565b602080825281016108c781615049565b602080825281016108c781615082565b602080825281016108c7816150d8565b602080825281016108c78161510a565b602080825281016108c78161513a565b602080825281016108c781615189565b602081016108c782846151d7565b604081016155d082856151d7565b610c136020830184614c0e565b604081016155eb82856151d7565b610c136020830184614c55565b6040810161525982856151d7565b6060810161561482866151d7565b61562160208301856151d7565b61208b6040830184614c55565b6060810161527482866151d7565b6080810161529c82876151d7565b602081016108c782846151e0565b60405181810167ffffffffffffffff8111828210171561567757600080fd5b604052919050565b600067ffffffffffffffff82111561569657600080fd5b506020601f91909101601f19160190565b5190565b90815260200190565b60006108c7826156cf565b151590565b60006108c7826156b4565b6001600160a01b031690565b60ff1690565b60006108c7826156c4565b60006108c782610a89565b82818337506000910152565b60005b8381101561571e578181015183820152602001615706565b83811115612b7e5750506000910152565b601f01601f191690565b615742816156b4565b811461574d57600080fd5b50565b615742816156bf565b615742816156c4565b61574281610a89565b615742816156db56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a723158202f2c69b0b5f13d690428b8653a3eca82b215320f57a0992a4cad47ef7b9125696c6578706572696d656e74616cf564736f6c63430005100040",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103e65760003560e01c806373acee981161020a578063bd6d894d11610125578063ea11eea4116100b8578063f3fdb15a11610087578063f3fdb15a14610789578063f5e3c46214610791578063f851a440146107a4578063fca7820b146107ac578063fcdc3827146107bf576103e6565b8063ea11eea414610753578063ef82a8ec1461075b578063f10684541461076e578063f2b3abbd14610776576103e6565b8063db006a75116100f4578063db006a7514610712578063dd62ed3e14610725578063e0232b4214610738578063e9c714f21461074b576103e6565b8063bd6d894d146106cc578063c37f68e2146106d4578063c5ebeaec146106f7578063cfa992011461070a576103e6565b8063a0712d681161019d578063b1d389741161016c578063b1d3897414610696578063b2a02ff11461069e578063b71d1a0c146106b1578063b985a3a0146106c4576103e6565b8063a0712d6814610660578063a6afed9514610673578063a9059cbb1461067b578063aa5af0fd1461068e576103e6565b806395d89b41116101d957806395d89b411461061c57806395dd91931461062457806399d8c1b4146106375780639ac7ee191461064a576103e6565b806373acee98146105f1578063852a12e3146105f95780638f840ddd1461060c57806394909e6214610614576103e6565b80633af9e66911610305578063566bb32911610298578063601a0bf111610267578063601a0bf1146105a65780636330533c146105b95780636752e702146105ce5780636f307dc3146105d657806370a08231146105de576103e6565b8063566bb3291461057057806356e6772814610583578063575a86b2146105965780635c60da1b1461059e576103e6565b8063432f4b2d116102d4578063432f4b2d1461053a57806347bd37181461054d57806350f6e082146105555780635260975014610568576103e6565b80633af9e669146105045780633b1d21a2146105175780633e9410101461051f578063406de0b614610532576103e6565b8063182df0f51161037d57806323b872dd1161034c57806323b872dd146104c15780632608f818146104d457806326782247146104e7578063313ce567146104ef576103e6565b8063182df0f5146104895780631a31d465146104915780631ce3525a146104a457806322abdbf5146104b9576103e6565b8063153ab505116103b9578063153ab5051461045c578063173b99041461046657806317bfdfbc1461046e57806318160ddd14610481576103e6565b806306fdde03146103eb578063095ea7b3146104095780630e752702146104295780630f3e4e1114610449575b600080fd5b6103f36107d2565b6040516104009190615453565b60405180910390f35b61041c610417366004614924565b61085f565b604051610400919061541c565b61043c610437366004614b63565b6108cd565b60405161040091906155b4565b61043c610457366004614b9f565b6108e5565b6104646109c6565b005b61043c610a00565b61043c61047c366004614752565b610a06565b61043c610a76565b61043c610a7c565b61046461049f366004614858565b610a8c565b6104ac610b38565b60405161040091906151e9565b61043c610b47565b61041c6104cf366004614815565b610b4d565b61043c6104e2366004614924565b610b9d565b6104ac610bb5565b6104f7610bc4565b604051610400919061564a565b61043c610512366004614752565b610bcd565b61043c610c1a565b61043c61052d366004614b63565b610c24565b61041c610c31565b61043c610548366004614a52565b610c36565b61043c610d5a565b61043c610563366004614b9f565b610d60565b61043c610de1565b61043c61057e366004614752565b610e71565b610464610591366004614a1d565b610e83565b6104ac611142565b6104ac611151565b61043c6105b4366004614b63565b611160565b6105c16111d9565b604051610400919061542a565b61043c6111e8565b6104ac6111ee565b61043c6105ec366004614752565b6111fd565b61043c611218565b61043c610607366004614b63565b61127e565b61043c61128b565b610464611291565b6103f3611304565b61043c610632366004614752565b61135c565b610464610645366004614a70565b611367565b61065261149d565b6040516104009291906155f8565b61043c61066e366004614b63565b6114a6565b61043c6114b4565b61041c610689366004614924565b611682565b61043c6116d2565b61043c6116d8565b61043c6106ac366004614815565b61171c565b61043c6106bf366004614752565b61176b565b6104ac6117e4565b61043c6117f3565b6106e76106e2366004614752565b61185f565b604051610400949392919061563c565b61043c610705366004614b63565b61189b565b61043c6118a8565b61043c610720366004614b63565b6118ae565b61043c6107333660046147db565b6118bb565b610464610746366004614954565b6118e6565b61043c611b0c565b61043c611c0b565b61043c610769366004614752565b611c10565b61043c611c22565b61043c610784366004614a52565b611c28565b6105c1611c62565b61043c61079f3660046149bc565b611c71565b6104ac611c8b565b61043c6107ba366004614b63565b611c9f565b61043c6107cd366004614752565b611cfb565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108575780601f1061082c57610100808354040283529160200191610857565b820191906000526020600020905b81548152906001019060200180831161083a57829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108b99087906155b4565b60405180910390a360019150505b92915050565b6000806108db836000611e64565b509150505b919050565b60008060008315610916576109016108fb611eee565b86611f82565b915061090f600b5486611fb8565b9050610938565b610927610921611eee565b86611fb8565b9150610935600b5486611f82565b90505b600654600c546040516315f2405360e01b81526001600160a01b03909216916315f240539161096d918691869160040161562e565b60206040518083038186803b15801561098557600080fd5b505afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109bd9190810190614b81565b95945050505050565b60035461010090046001600160a01b031633146109fe5760405162461bcd60e51b81526004016109f5906154d4565b60405180910390fd5b565b60085481565b6000805460ff16610a295760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155610a3b6114b4565b14610a585760405162461bcd60e51b81526004016109f590615464565b610a618261135c565b90505b6000805460ff19166001179055919050565b600d5481565b6000610a86611ff2565b90505b90565b610a9a868686868686611367565b601180546001600160a01b0319166001600160a01b038981169190911791829055604080516318160ddd60e01b8152905192909116916318160ddd91600480820192602092909190829003018186803b158015610af657600080fd5b505afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b2e9190810190614b81565b5050505050505050565b6016546001600160a01b031681565b60135481565b6000805460ff16610b705760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155610b8633868686612058565b1490506000805460ff191660011790559392505050565b600080610bac84846000612093565b50949350505050565b6004546001600160a01b031681565b60035460ff1681565b6000610bd761448f565b6040518060200160405280610bea6117f3565b90526001600160a01b0384166000908152600e6020526040902054909150610c1390829061211e565b9392505050565b6000610a86611eee565b60006108c782600061213d565b600181565b60035460009061010090046001600160a01b03163314610c6357610c5c600160296121b9565b90506108e0565b600554604080516340e6dcc560e01b815290516001600160a01b03928316928516916340e6dcc5916004808301926020929190829003018186803b158015610caa57600080fd5b505afa158015610cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ce291908101906149ff565b610cfe5760405162461bcd60e51b81526004016109f5906154e4565b600580546001600160a01b0319166001600160a01b0385161790556040517f17d6db5ffe5a3d1c3d7a98194dca4f7d808d621e6ff9077ed574513d553a2a8590610d4b9083908690615438565b60405180910390a16000610c13565b600b5481565b60008060008315610d8b57610d766108fb611eee565b9150610d84600b5486611fb8565b9050610da7565b610d96610921611eee565b9150610da4600b5486611f82565b90505b600654600c54600854604051635c0b440b60e11b81526001600160a01b039093169263b81688169261096d9287928792919060040161563c565b6006546000906001600160a01b03166315f24053610dfd611eee565b600b54600c546040518463ffffffff1660e01b8152600401610e219392919061562e565b60206040518083038186803b158015610e3957600080fd5b505afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a869190810190614b81565b601c6020526000908152604090205481565b610e8c81612219565b600080600083806020019051610ea5919081019061478e565b601580546001600160a01b038086166001600160a01b0319928316179283905560168054828716931692909217909155604080516305cc2d1d60e51b81529051959850939650919450169163b985a3a091600480820192602092909190829003018186803b158015610f1657600080fd5b505afa158015610f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f4e9190810190614770565b601780546001600160a01b0319166001600160a01b0392909216919091179055610f766144a2565b601554604051631526fe2760e01b81526001600160a01b0390911690631526fe2790610fa69085906004016155b4565b60206040518083038186803b158015610fbe57600080fd5b505afa158015610fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ff69190810190614b27565b60115481519192506001600160a01b039182169116146110285760405162461bcd60e51b81526004016109f5906154a4565b601882905560115460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061106190879060001990600401615400565b602060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110b391908101906149ff565b5060175460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906110e890869060001990600401615400565b602060405180830381600087803b15801561110257600080fd5b505af1158015611116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061113a91908101906149ff565b505050505050565b6015546001600160a01b031681565b6012546001600160a01b031681565b6000805460ff166111835760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556111956114b4565b905080156111bb576111b38160108111156111ac57fe5b601d6121b9565b915050610a64565b6111c483612256565b9150506000805460ff19166001179055919050565b6005546001600160a01b031681565b60145481565b6011546001600160a01b031681565b6001600160a01b03166000908152600e602052604090205490565b6000805460ff1661123b5760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff1916815561124d6114b4565b1461126a5760405162461bcd60e51b81526004016109f590615464565b50600b546000805460ff1916600117905590565b60006108c7826000612344565b600c5481565b60005460ff166112b35760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556112c56123ba565b905060006112d1611eee565b905060006112df8383611fb8565b90506112ed600c5482611f82565b600c5550506013556000805460ff19166001179055565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108575780601f1061082c57610100808354040283529160200191610857565b60006108c782612443565b60035461010090046001600160a01b031633146113965760405162461bcd60e51b81526004016109f590615474565b6009541580156113a65750600a54155b6113c25760405162461bcd60e51b81526004016109f590615494565b6007849055836113e45760405162461bcd60e51b81526004016109f5906154b4565b60006113ef87610c36565b9050801561140f5760405162461bcd60e51b81526004016109f590615514565b61141761248f565b600955670de0b6b3a7640000600a5561142f86612493565b9050801561144f5760405162461bcd60e51b81526004016109f5906154c4565b83516114629060019060208701906144b4565b5082516114769060029060208601906144b4565b50506003805460ff90921660ff199283161790556000805490911660011790555050505050565b601954601a5482565b6000806108db8360006125c9565b6000806114bf61248f565b600954909150808214156114d857600092505050610a89565b60006114e2611eee565b600b54600c54600a546006546040516315f2405360e01b81529495509293919290916000916001600160a01b0316906315f24053906115299088908890889060040161562e565b60206040518083038186803b15801561154157600080fd5b505afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115799190810190614b81565b905065048c273950008111156115a15760405162461bcd60e51b81526004016109f590615504565b60006115ad8888611fb8565b90506115b761448f565b6115cf60405180602001604052808581525083612629565b905060006115dd828861211e565b905060006115eb8289611f82565b9050600061160a6040518060200160405280600854815250848a612653565b9050600061161985898a612653565b60098e9055600a819055600b849055600c8390556040519091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc0490611666908d9087908590889061563c565b60405180910390a160009d505050505050505050505050505090565b6000805460ff166116a55760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556116bb33338686612058565b1490505b6000805460ff1916600117905592915050565b600a5481565b6006546000906001600160a01b031663b81688166116f4611eee565b600b54600c546008546040518563ffffffff1660e01b8152600401610e21949392919061563c565b6000805460ff1661173f5760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191690556117553385858561267b565b90506000805460ff191660011790559392505050565b60035460009061010090046001600160a01b0316331461179157610c5c6001602f6121b9565b600480546001600160a01b038481166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a990610d4b90839086906152c3565b6017546001600160a01b031681565b6000805460ff166118165760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556118286114b4565b146118455760405162461bcd60e51b81526004016109f590615464565b61184d610a7c565b90506000805460ff1916600117905590565b6000806000806000611870866111fd565b9050600061187d87612443565b90506000611889611ff2565b90506000989297509095509350915050565b60006108c78260006128c2565b60095481565b60006108c7826000612920565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b60005460ff166119085760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191690558261192f5760405162461bcd60e51b81526004016109f5906155a4565b60006119396114b4565b146119565760405162461bcd60e51b81526004016109f590615464565b60006119606123ba565b9050600061196c611eee565b90508481101561198e5760405162461bcd60e51b81526004016109f590615574565b60006119a661199e876008612979565b6127106129bb565b90506119b4878760006129ee565b6119c0600b5487611f82565b600b5560115460405163405b019d60e01b81526001600160a01b03808a169263405b019d926119fd92339216908b9087908c908c906004016151f7565b600060405180830381600087803b158015611a1757600080fd5b505af1158015611a2b573d6000803e3d6000fd5b505050506000611a396123ba565b9050611a458483611f82565b8114611a635760405162461bcd60e51b81526004016109f590615524565b6000611a7f60405180602001604052806008548152508461211e565b9050611a8d600c5482611f82565b600c55611a9a8484611f82565b601355600b54611aaa9089611fb8565b600b556040516001600160a01b038a16907f33c8e097c526683cbdb29adf782fac95e9d0fbe0ed635c13d8c75fdf726557d990611aec908b908790869061562e565b60405180910390a250506000805460ff1916600117905550505050505050565b6004546000906001600160a01b031633141580611b27575033155b15611b3f57611b38600160006121b9565b9050610a89565b60038054600480546001600160a01b03818116610100818102610100600160a81b0319871617968790556001600160a01b03199093169093556040519382900481169492937ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc93611bb5938793910416906152c3565b60405180910390a16004546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a991611bfa9184916001600160a01b0316906152c3565b60405180910390a160009250505090565b600881565b601b6020526000908152604090205481565b60185481565b600080611c336114b4565b90508015611c5957611c51816010811115611c4a57fe5b602a6121b9565b9150506108e0565b610c1383612493565b6006546001600160a01b031681565b600080611c818585856000612b84565b5095945050505050565b60035461010090046001600160a01b031681565b6000805460ff16611cc25760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155611cd46114b4565b90508015611cf2576111b3816010811115611ceb57fe5b60306121b9565b6111c483612ca2565b6000611d05612d3a565b611d0d612e13565b611d1682612f0a565b6001600160a01b0382166000908152601c60205260409020548015611e5b576016546040516367dfd4c960e01b81526001600160a01b03909116906367dfd4c990611d659084906004016155b4565b600060405180830381600087803b158015611d7f57600080fd5b505af1158015611d93573d6000803e3d6000fd5b50505050611da660196000015482611fb8565b6019556000611db361304a565b60175460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb90611de69087908590600401615400565b602060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e3891908101906149ff565b506001600160a01b0384166000908152601c602052604081205591506108e09050565b50600092915050565b60008054819060ff16611e895760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155611e9b6114b4565b90508015611ec657611eb9816010811115611eb257fe5b60236121b9565b925060009150611ed89050565b611ed23333878761307b565b92509250505b6000805460ff1916600117905590939092509050565b6000611ef861448f565b6015546018546040516393f1a40b60e01b81526001600160a01b03909216916393f1a40b91611f2b9130906004016155c2565b60206040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f7b9190810190614b45565b5191505090565b6000610c138383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b8152506132a8565b6000610c138383604051806040016040528060158152602001747375627472616374696f6e20756e646572666c6f7760581b8152506132cf565b600d5460009080612007575050600754610a89565b6000612011611eee565b9050600061202c61202483600b54611f82565b600c54611fb8565b90506000612048826040518060200160405280878152506132fb565b9450610a899350505050565b5090565b6000612062612d3a565b61206a612e13565b61207384612f0a565b61207c83612f0a565b61208885858585613319565b90505b949350505050565b60008054819060ff166120b85760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556120ca6114b4565b905080156120f5576120e88160108111156120e157fe5b60226121b9565b9250600091506121079050565b6121013387878761307b565b92509250505b6000805460ff191660011790559094909350915050565b600061212861448f565b6121328484612629565b905061208b81613514565b6000805460ff166121605760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556121726114b4565b905080156121985761219081601081111561218957fe5b60366121b9565b9150506116bf565b6121a28484613523565b509150506000805460ff1916600117905592915050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08360108111156121e857fe5b83603c8111156121f457fe5b600060405161220593929190615606565b60405180910390a1826010811115610c1357fe5b60035461010090046001600160a01b031633146122485760405162461bcd60e51b81526004016109f590615594565b6122506123ba565b60135550565b600354600090819061010090046001600160a01b0316331461227e57611c516001601e6121b9565b61228661248f565b6009541461229a57611c51600a60206121b9565b826122a3611eee565b10156122b557611c51600e601f6121b9565b600c548311156122cb57611c51600260216121b9565b6122d7600c5484611fb8565b600c8190556003549091506122fc9061010090046001600160a01b03168460016129ee565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b03168483604051610d4b93929190615266565b6000805460ff166123675760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556123796114b4565b905080156123975761219081601081111561239057fe5b60196121b9565b6123a433600086866135bc565b9150506000805460ff1916600117905592915050565b6011546040516370a0823160e01b81526000916001600160a01b03169081906370a08231906123ed9030906004016151e9565b60206040518083038186803b15801561240557600080fd5b505afa158015612419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061243d9190810190614b81565b91505090565b6001600160a01b0381166000908152601060205260408120805461246b5760009150506108e0565b600061247d8260000154600a54612979565b905060006109bd8284600101546129bb565b4290565b600354600090819061010090046001600160a01b031633146124bb57611c516001602c6121b9565b6124c361248f565b600954146124d757611c51600a602b6121b9565b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561252857600080fd5b505afa15801561253c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061256091908101906149ff565b61257c5760405162461bcd60e51b81526004016109f5906154e4565b600680546001600160a01b0319166001600160a01b0385161790556040517fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92690610d4b9083908690615438565b60008054819060ff166125ee5760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556126006114b4565b9050801561261e57611eb981601081111561261757fe5b60146121b9565b611ed23386866138b0565b61263161448f565b604051806020016040528061264a856000015185612979565b90529392505050565b600061265d61448f565b6126678585612629565b90506109bd61267582613514565b84611f82565b60055460405163d02f735160e01b815260009182916001600160a01b039091169063d02f7351906126b89030908a908a908a908a90600401615314565b602060405180830381600087803b1580156126d257600080fd5b505af11580156126e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061270a9190810190614b81565b905080156127275761271f6003601183613ab1565b91505061208b565b8261273357600061271f565b846001600160a01b0316846001600160a01b031614156127595761271f600660126121b9565b6000612775846040518060200160405280601454815250613b10565b905060006127838583611fb8565b9050600061278f611ff2565b905060006127ab6040518060200160405280848152508561211e565b6001600160a01b0389166000908152600e60205260409020549091506127d19088611fb8565b6001600160a01b03808a166000908152600e602052604080822093909355908b16815220546128009084611f82565b6001600160a01b038a166000908152600e6020526040902055600c546128269082611f82565b600c55600d546128369085611fb8565b600d81905550886001600160a01b0316886001600160a01b03166000805160206157758339815191528960405161286d91906155b4565b60405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53082600c546040516128aa9392919061540e565b60405180910390a160009a9950505050505050505050565b6000805460ff166128e55760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556128f76114b4565b905080156129155761219081601081111561290e57fe5b60026121b9565b6123a4338585613b38565b6000805460ff166129435760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff191681556129556114b4565b9050801561296c5761219081601081111561239057fe5b6123a433856000866135bc565b6000610c1383836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613d12565b6000610c1383836040518060400160405280600e81526020016d646976696465206279207a65726f60901b815250613d5a565b601554601854604051630441a3e760e41b81526001600160a01b039092169163441a3e7091612a219186906004016155f8565b600060405180830381600087803b158015612a3b57600080fd5b505af1158015612a4f573d6000803e3d6000fd5b505050506000612a5d61304a565b1115612acb576016546001600160a01b031663a59f3e0c612a7c61304a565b6040518263ffffffff1660e01b8152600401612a9891906155b4565b600060405180830381600087803b158015612ab257600080fd5b505af1158015612ac6573d6000803e3d6000fd5b505050505b612ad3612e13565b612adc83612f0a565b60115460405163a9059cbb60e01b81526001600160a01b0390911690819063a9059cbb90612b10908790879060040161524b565b602060405180830381600087803b158015612b2a57600080fd5b505af1158015612b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b6291908101906149ff565b612b7e5760405162461bcd60e51b81526004016109f590615534565b50505050565b60008054819060ff16612ba95760405162461bcd60e51b81526004016109f5906154f4565b6000805460ff19168155612bbb6114b4565b90508015612be657612bd9816010811115612bd257fe5b60076121b9565b925060009150612c8a9050565b846001600160a01b031663a6afed956040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c2157600080fd5b505af1158015612c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c599190810190614b81565b90508015612c7757612bd9816010811115612c7057fe5b60086121b9565b612c843388888888613d8e565b92509250505b6000805460ff19166001179055909590945092505050565b60035460009061010090046001600160a01b03163314612cc857610c5c600160316121b9565b612cd061248f565b60095414612ce457610c5c600a60326121b9565b670de0b6b3a7640000821115612d0057610c5c600260336121b9565b60088054908390556040517faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f82146090610d4b90839086906155f8565b601554601854604051631c57762b60e31b81526001600160a01b039092169163e2bbb15891612d6e916000906004016155dd565b600060405180830381600087803b158015612d8857600080fd5b505af1158015612d9c573d6000803e3d6000fd5b505050506000612daa61304a565b11156109fe576016546001600160a01b031663a59f3e0c612dc961304a565b6040518263ffffffff1660e01b8152600401612de591906155b4565b600060405180830381600087803b158015612dff57600080fd5b505af1158015612b7e573d6000803e3d6000fd5b6000612e1d6141d7565b90506000612e3082601960000154611fb8565b90506000306001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e6d57600080fd5b505afa158015612e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ea59190810190614b81565b9050612eaf61448f565b60008211612ecc5760405180602001604052806000815250612ed6565b612ed68383614208565b9050612ee061448f565b6040805160208101909152601a548152612efa908361423d565b51601a5550505060199190915550565b612f1261448f565b506040805160208101909152601a548152612f2b61448f565b5060408051602080820183526001600160a01b0385166000908152601b90915291909120548152612f5a61448f565b612f648383614262565b805190915015612b7e576040516370a0823160e01b815260009030906370a0823190612f949088906004016151e9565b60206040518083038186803b158015612fac57600080fd5b505afa158015612fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612fe49190810190614b81565b90506000612ff28284614287565b6001600160a01b0387166000908152601c60205260409020549091506130189082611f82565b6001600160a01b0387166000908152601c60209081526040808320939093558751601b90915291902055505050505050565b6017546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610e219030906004016151e9565b600554604051631200453160e11b8152600091829182916001600160a01b0316906324008a62906130b69030908b908b908b90600401615360565b602060405180830381600087803b1580156130d057600080fd5b505af11580156130e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131089190810190614b81565b9050801561312a5761311d6003602483613ab1565b92506000915061329f9050565b846131645761313886612443565b6001600160a01b0387166000908152601060205260408120918255600a5460019092019190915561311d565b61316c61248f565b600954146131805761311d600a60256121b9565b61318861452e565b6001600160a01b03871660009081526010602052604090206001015460608201526131b287612443565b60808201526000198614156131d057608081015160408201526131d8565b604081018690525b6131e7888260400151876142a7565b60e0820181905260808201516131fc91611fb8565b60a0820152600b5460e08201516132139190611fb8565b60c0820190815260a0820180516001600160a01b038a1660009081526010602052604090819020918255600a546001909201919091559151600b81905560e0840151915192517f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19361328b938d938d939192916153cb565b60405180910390a160e00151600093509150505b94509492505050565b60008383018285821015610bac5760405162461bcd60e51b81526004016109f59190615453565b600081848411156132f35760405162461bcd60e51b81526004016109f59190615453565b505050900390565b6000610c1361331284670de0b6b3a7640000612979565b83516129bb565b6005546040516317b9b84b60e31b815260009182916001600160a01b039091169063bdcdc25890613354903090899089908990600401615360565b602060405180830381600087803b15801561336e57600080fd5b505af1158015613382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133a69190810190614b81565b905080156133bb5761271f6003603483613ab1565b836001600160a01b0316856001600160a01b031614156133e15761271f600260356121b9565b60006001600160a01b0387811690871614156134005750600019613428565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b6001600160a01b0386166000908152600e602052604090205461344b9085611fb8565b6001600160a01b038088166000908152600e6020526040808220939093559087168152205461347a9085611f82565b6001600160a01b0386166000908152600e602052604090205560001981146134cd576134a68185611fb8565b6001600160a01b038088166000908152600f60209081526040808320938c16835292905220555b846001600160a01b0316866001600160a01b0316600080516020615775833981519152866040516134fe91906155b4565b60405180910390a360005b979650505050505050565b51670de0b6b3a7640000900490565b60008060008061353161248f565b6009541461355057613545600a60376121b9565b935091506135b59050565b61355b3387876142a7565b9050613569600c5482611f82565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53382846040516135a593929190615266565b60405180910390a1600093509150505b9250929050565b60008315806135c9575082155b6135e55760405162461bcd60e51b81526004016109f590615564565b6135ed614574565b6135f5611ff2565b815284156136265760208082018690526040805191820190528151815261361c908661211e565b604082015261364f565b6136428460405180602001604052808460000151815250614443565b6020820152604081018490525b600554602082015160405163eabe7d9160e01b81526000926001600160a01b03169163eabe7d91916136889130918c91906004016152de565b602060405180830381600087803b1580156136a257600080fd5b505af11580156136b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136da9190810190614b81565b905080156136f8576136ef6003601a83613ab1565b9250505061208b565b85158015613704575084155b156137105760006136ef565b61371861248f565b6009541461372c576136ef600a601b6121b9565b61373c600d548360200151611fb8565b60608301526001600160a01b0387166000908152600e60209081526040909120549083015161376b9190611fb8565b6080830152604082015161377d611eee565b101561378f576136ef600e601c6121b9565b61379e878360400151866129ee565b6060820151600d5560808201516001600160a01b0388166000818152600e6020908152604091829020939093559184015191513092600080516020615775833981519152916137ed91906155b4565b60405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929878360400151846020015160405161383093929190615266565b60405180910390a1600554604080840151602085015191516351dff98960e01b81526001600160a01b03909316926351dff989926138759230928d92906004016152f9565b600060405180830381600087803b15801561388f57600080fd5b505af11580156138a3573d6000803e3d6000fd5b5060009250613509915050565b600554604051634ef4c3e160e01b8152600091829182916001600160a01b031690634ef4c3e1906138e99030908a908a90600401615388565b602060405180830381600087803b15801561390357600080fd5b505af1158015613917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061393b9190810190614b81565b9050801561395d576139506003601583613ab1565b925060009150613aa99050565b84613969576000613950565b61397161248f565b6009541461398557613950600a60166121b9565b61398d6145a3565b613995611ff2565b81526139a28787876142a7565b6040808301829052805160208101909152825181526139c19190614443565b60208201819052600d546139d491611f82565b600d556001600160a01b0387166000908152600e602090815260409091205490820151613a019190611f82565b6001600160a01b0388166000908152600e602090815260409182902092909255828101519183015190517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f92613a58928b9261540e565b60405180910390a1866001600160a01b0316306001600160a01b03166000805160206157758339815191528360200151604051613a9591906155b4565b60405180910390a360400151600093509150505b935093915050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0846010811115613ae057fe5b84603c811115613aec57fe5b84604051613afc9392919061562e565b60405180910390a183601081111561208b57fe5b6000670de0b6b3a7640000613b29848460000151612979565b81613b3057fe5b049392505050565b60055460405163368f515360e21b815260009182916001600160a01b039091169063da3d454c90613b71903090899089906004016152de565b602060405180830381600087803b158015613b8b57600080fd5b505af1158015613b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613bc39190810190614b81565b90508015613be057613bd86003600683613ab1565b915050610c13565b83613c1a57613bee85612443565b6001600160a01b0386166000908152601060205260408120918255600a54600190920191909155613bd8565b613c2261248f565b60095414613c3657613bd8600a60046121b9565b83613c3f611eee565b1015613c5157613bd8600e60036121b9565b613c596145c4565b613c6286612443565b60208201819052613c739086611f82565b6040820152600b54613c859086611f82565b6060820152613c958686866129ee565b604080820180516001600160a01b03891660009081526010602052839020908155600a546001909101556060830151600b819055905191517f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab8092613cfe928a928a92919061528e565b60405180910390a160009695505050505050565b6000831580613d1f575082155b15613d2c57506000610c13565b83830283858281613d3957fe5b04148390610bac5760405162461bcd60e51b81526004016109f59190615453565b60008183613d7b5760405162461bcd60e51b81526004016109f59190615453565b50828481613d8557fe5b04949350505050565b600554604051632fe3f38f60e11b8152600091829182916001600160a01b031690635fc7e71e90613dcb90309089908d908d908d90600401615314565b602060405180830381600087803b158015613de557600080fd5b505af1158015613df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613e1d9190810190614b81565b90508015613e3f57613e326003600a83613ab1565b9250600091506141cd9050565b613e4761248f565b60095414613e5b57613e32600a600e6121b9565b613e6361248f565b856001600160a01b031663cfa992016040518163ffffffff1660e01b815260040160206040518083038186803b158015613e9c57600080fd5b505afa158015613eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613ed49190810190614b81565b14613ee557613e32600a60096121b9565b876001600160a01b0316876001600160a01b03161415613f0b57613e326006600f6121b9565b85613f1c57613e326007600d6121b9565b600019861415613f3257613e326007600c6121b9565b600080613f418a8a8a8961307b565b90925090508115613f7157613f62826010811115613f5b57fe5b60106121b9565b9450600093506141cd92505050565b60055460405163c488847b60e01b815260009182916001600160a01b039091169063c488847b90613faa9030908d908890600401615388565b604080518083038186803b158015613fc157600080fd5b505afa158015613fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613ff99190810190614bcf565b9092509050811561401c5760405162461bcd60e51b81526004016109f590615484565b6040516370a0823160e01b815281906001600160a01b038b16906370a082319061404a908f906004016151e9565b60206040518083038186803b15801561406257600080fd5b505afa158015614076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061409a9190810190614b81565b10156140b85760405162461bcd60e51b81526004016109f590615554565b60006001600160a01b038a163014156140de576140d7308e8e8561267b565b9050614163565b896001600160a01b031663b2a02ff18e8e856040518463ffffffff1660e01b815260040161410e93929190615388565b602060405180830381600087803b15801561412857600080fd5b505af115801561413c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506141609190810190614b81565b90505b80156141815760405162461bcd60e51b81526004016109f590615584565b7f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb528d8d868d866040516141b89594939291906153a3565b60405180910390a16000975092955050505050505b9550959350505050565b6016546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610e219030906004016151e9565b61421061448f565b604051806020016040528061264a614237866ec097ce7bc90715b34b9f1000000000612979565b856129bb565b61424561448f565b604051806020016040528061264a85600001518560000151611f82565b61426a61448f565b604051806020016040528061264a85600001518560000151611fb8565b60006ec097ce7bc90715b34b9f1000000000613b29848460000151612979565b6011546040516323b872dd60e01b81526000916001600160a01b03169081906323b872dd906142de90889030908990600401615388565b602060405180830381600087803b1580156142f857600080fd5b505af115801561430c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061433091908101906149ff565b61434c5760405162461bcd60e51b81526004016109f590615544565b601554601854604051631c57762b60e31b81526001600160a01b039092169163e2bbb1589161437f9188906004016155f8565b600060405180830381600087803b15801561439957600080fd5b505af11580156143ad573d6000803e3d6000fd5b5050505060006143bb61304a565b1115614429576016546001600160a01b031663a59f3e0c6143da61304a565b6040518263ffffffff1660e01b81526004016143f691906155b4565b600060405180830381600087803b15801561441057600080fd5b505af1158015614424573d6000803e3d6000fd5b505050505b614431612e13565b61443a85612f0a565b50919392505050565b600061444d61448f565b612132848461445a61448f565b600061446e670de0b6b3a764000085612979565b9050604051806020016040528061448583866132fb565b9052949350505050565b6040518060200160405280600081525090565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106144f557805160ff1916838001178555614522565b82800160010185558215614522579182015b82811115614522578251825591602001919060010190614507565b506120549291506145ed565b6040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b604080516080810190915280600081526020016000815260200160008152602001600081525090565b610a8991905b8082111561205457600081556001016145f3565b80356108c781615739565b80516108c781615739565b80356108c781615750565b80516108c781615750565b60008083601f84011261464557600080fd5b50813567ffffffffffffffff81111561465d57600080fd5b6020830191508360018202830111156135b557600080fd5b600082601f83011261468657600080fd5b81356146996146948261567f565b615658565b915080825260208301602083018583830111156146b557600080fd5b6146c08382846156f7565b50505092915050565b80356108c781615759565b6000602082840312156146e657600080fd5b6146f06020615658565b905060006146fe8484614612565b82525092915050565b60006020828403121561471957600080fd5b6147236020615658565b905060006146fe848461473c565b80356108c781615762565b80516108c781615762565b80356108c78161576b565b60006020828403121561476457600080fd5b600061208b8484614607565b60006020828403121561478257600080fd5b600061208b8484614612565b6000806000606084860312156147a357600080fd5b60006147af8686614612565b93505060206147c086828701614612565b92505060406147d18682870161473c565b9150509250925092565b600080604083850312156147ee57600080fd5b60006147fa8585614607565b925050602061480b85828601614607565b9150509250929050565b60008060006060848603121561482a57600080fd5b60006148368686614607565b935050602061484786828701614607565b92505060406147d186828701614731565b600080600080600080600060e0888a03121561487357600080fd5b600061487f8a8a614607565b97505060206148908a828b016146c9565b96505060406148a18a828b016146c9565b95505060606148b28a828b01614731565b945050608088013567ffffffffffffffff8111156148cf57600080fd5b6148db8a828b01614675565b93505060a088013567ffffffffffffffff8111156148f857600080fd5b6149048a828b01614675565b92505060c06149158a828b01614747565b91505092959891949750929550565b6000806040838503121561493757600080fd5b60006149438585614607565b925050602061480b85828601614731565b6000806000806060858703121561496a57600080fd5b60006149768787614607565b945050602061498787828801614731565b935050604085013567ffffffffffffffff8111156149a457600080fd5b6149b087828801614633565b95989497509550505050565b6000806000606084860312156149d157600080fd5b60006149dd8686614607565b93505060206149ee86828701614731565b92505060406147d1868287016146c9565b600060208284031215614a1157600080fd5b600061208b8484614628565b600060208284031215614a2f57600080fd5b813567ffffffffffffffff811115614a4657600080fd5b61208b84828501614675565b600060208284031215614a6457600080fd5b600061208b84846146c9565b60008060008060008060c08789031215614a8957600080fd5b6000614a9589896146c9565b9650506020614aa689828a016146c9565b9550506040614ab789828a01614731565b945050606087013567ffffffffffffffff811115614ad457600080fd5b614ae089828a01614675565b935050608087013567ffffffffffffffff811115614afd57600080fd5b614b0989828a01614675565b92505060a0614b1a89828a01614747565b9150509295509295509295565b600060208284031215614b3957600080fd5b600061208b84846146d4565b600060208284031215614b5757600080fd5b600061208b8484614707565b600060208284031215614b7557600080fd5b600061208b8484614731565b600060208284031215614b9357600080fd5b600061208b848461473c565b60008060408385031215614bb257600080fd5b6000614bbe8585614731565b925050602061480b8582860161461d565b60008060408385031215614be257600080fd5b6000614bee858561473c565b925050602061480b8582860161473c565b614c08816156e1565b82525050565b614c08816156b4565b614c08816156bf565b6000614c2c83856156ab565b9350614c398385846156f7565b614c428361572f565b9093019392505050565b614c08816156c4565b614c08816156ec565b6000614c69826156a7565b614c7381856156ab565b9350614c83818560208601615703565b614c428161572f565b6000614c996016836156ab565b751858d8dc9d59481a5b9d195c995cdd0819985a5b195960521b815260200192915050565b6000614ccb6024836156ab565b7f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d618152631c9ad95d60e21b602082015260400192915050565b6000614d116032836156ab565b7f4c49515549444154455f4a4f4554524f4c4c45525f43414c43554c4154455f418152711353d5539517d4d152569157d1905253115160721b602082015260400192915050565b6000614d656023836156ab565b7f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f8152626e636560e81b602082015260400192915050565b6000614daa6019836156ab565b7f6d69736d6174636820756e6465726c79696e6720746f6b656e00000000000000815260200192915050565b6000614de36030836156ab565b7f696e697469616c2065786368616e67652072617465206d75737420626520677281526f32b0ba32b9103a3430b7103d32b9379760811b602082015260400192915050565b6000614e356022836156ab565b7f73657474696e6720696e7465726573742072617465206d6f64656c206661696c815261195960f21b602082015260400192915050565b6000614e79602d836156ab565b7f6f6e6c79207468652061646d696e206d61792063616c6c205f72657369676e4981526c36b83632b6b2b73a30ba34b7b760991b602082015260400192915050565b6000614ec8601c836156ab565b7f6d61726b6572206d6574686f642072657475726e65642066616c736500000000815260200192915050565b6000614f01600a836156ab565b691c994b595b9d195c995960b21b815260200192915050565b6000614f27601c836156ab565b7f626f72726f772072617465206973206162737572646c79206869676800000000815260200192915050565b6000614f606019836156ab565b7f73657474696e67206a6f6574726f6c6c6572206661696c656400000000000000815260200192915050565b6000614f996014836156ab565b73109053105390d157d25390d3d394d254d511539560621b815260200192915050565b6000614fc96025836156ab565b7f756e6578706563746564204549502d3230207472616e73666572206f7574207281526432ba3ab93760d91b602082015260400192915050565b60006150106024836156ab565b7f756e6578706563746564204549502d3230207472616e7366657220696e2072658152633a3ab93760e11b602082015260400192915050565b60006150566018836156ab565b7f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000815260200192915050565b600061508f6034836156ab565b7f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d418152736d6f756e74496e206d757374206265207a65726f60601b602082015260400192915050565b60006150e56016836156ab565b75494e53554646494349454e545f4c495155494449545960501b815260200192915050565b60006151176014836156ab565b731d1bdad95b881cd95a5e9d5c994819985a5b195960621b815260200192915050565b6000615147602d836156ab565b7f6f6e6c79207468652061646d696e206d61792063616c6c205f6265636f6d654981526c36b83632b6b2b73a30ba34b7b760991b602082015260400192915050565b6000615196602c836156ab565b7f666c6173684c6f616e20616d6f756e742073686f756c6420626520677265617481526b6572207468616e207a65726f60a01b602082015260400192915050565b614c0881610a89565b614c08816156db565b602081016108c78284614c0e565b60a081016152058289614bff565b6152126020830188614c0e565b61521f60408301876151d7565b61522c60608301866151d7565b818103608083015261523f818486614c20565b98975050505050505050565b604081016152598285614bff565b610c1360208301846151d7565b606081016152748286614bff565b61528160208301856151d7565b61208b60408301846151d7565b6080810161529c8287614bff565b6152a960208301866151d7565b6152b660408301856151d7565b6109bd60608301846151d7565b604081016152d18285614c0e565b610c136020830184614bff565b606081016152ec8286614c0e565b6152816020830185614bff565b608081016153078287614c0e565b6152a96020830186614bff565b60a081016153228288614c0e565b61532f6020830187614c0e565b61533c6040830186614c0e565b6153496060830185614c0e565b61535660808301846151d7565b9695505050505050565b6080810161536e8287614c0e565b61537b6020830186614c0e565b6152b66040830185614c0e565b606081016153968286614c0e565b6152816020830185614c0e565b60a081016153b18288614c0e565b6153be6020830187614c0e565b61533c60408301866151d7565b60a081016153d98288614c0e565b6153e66020830187614c0e565b6153f360408301866151d7565b61534960608301856151d7565b604081016152598285614c0e565b606081016152748286614c0e565b602081016108c78284614c17565b602081016108c78284614c4c565b604081016154468285614c4c565b610c136020830184614c4c565b60208082528101610c138184614c5e565b602080825281016108c781614c8c565b602080825281016108c781614cbe565b602080825281016108c781614d04565b602080825281016108c781614d58565b602080825281016108c781614d9d565b602080825281016108c781614dd6565b602080825281016108c781614e28565b602080825281016108c781614e6c565b602080825281016108c781614ebb565b602080825281016108c781614ef4565b602080825281016108c781614f1a565b602080825281016108c781614f53565b602080825281016108c781614f8c565b602080825281016108c781614fbc565b602080825281016108c781615003565b602080825281016108c781615049565b602080825281016108c781615082565b602080825281016108c7816150d8565b602080825281016108c78161510a565b602080825281016108c78161513a565b602080825281016108c781615189565b602081016108c782846151d7565b604081016155d082856151d7565b610c136020830184614c0e565b604081016155eb82856151d7565b610c136020830184614c55565b6040810161525982856151d7565b6060810161561482866151d7565b61562160208301856151d7565b61208b6040830184614c55565b6060810161527482866151d7565b6080810161529c82876151d7565b602081016108c782846151e0565b60405181810167ffffffffffffffff8111828210171561567757600080fd5b604052919050565b600067ffffffffffffffff82111561569657600080fd5b506020601f91909101601f19160190565b5190565b90815260200190565b60006108c7826156cf565b151590565b60006108c7826156b4565b6001600160a01b031690565b60ff1690565b60006108c7826156c4565b60006108c782610a89565b82818337506000910152565b60005b8381101561571e578181015183820152602001615706565b83811115612b7e5750506000910152565b601f01601f191690565b615742816156b4565b811461574d57600080fd5b50565b615742816156bf565b615742816156c4565b61574281610a89565b615742816156db56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a723158202f2c69b0b5f13d690428b8653a3eca82b215320f57a0992a4cad47ef7b9125696c6578706572696d656e74616cf564736f6c63430005100040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
