UNPKG

test-contracts-sovryn

Version:

Smart contracts for the Sovryn protocol and external integrations.

1,619 lines 124 kB
{
  "_format": "hh-sol-artifact-1",
  "contractName": "LoanTokenLogicStandard",
  "sourceName": "contracts/connectors/loantoken/LoanTokenLogicStandard.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "burner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assetAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "loanAmount",
          "type": "uint256"
        }
      ],
      "name": "FlashBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assetAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "addresses",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "limits",
          "type": "uint256[]"
        }
      ],
      "name": "SetTransactionLimits",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assetBorrow",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "assetSupply",
          "type": "uint256"
        }
      ],
      "name": "_supplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "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": "_value",
          "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": "assetBalanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "avgBorrowInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "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": true,
      "inputs": [],
      "name": "baseRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "withdrawAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialLoanDuration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "borrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "burnAmount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "loanAmountPaid",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "funcId",
          "type": "string"
        }
      ],
      "name": "checkPause",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isPaused",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        }
      ],
      "name": "checkPriceDivergence",
      "outputs": [],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "checkpointPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "checkpointSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "collateralTokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "isTorqueLoans",
          "type": "bool[]"
        }
      ],
      "name": "disableLoanParams",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "earlyAccessToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialLoanDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        }
      ],
      "name": "getBorrowAmountForDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialLoanDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        }
      ],
      "name": "getDepositAmountForBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        }
      ],
      "name": "getEstimatedMarginDetails",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "principal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateral",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        }
      ],
      "name": "getMaxEscrowAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "maxEscrowAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kinkLevel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "liquidityMiningAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "loanParamsIds",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "loanTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lowUtilBaseRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lowUtilRateMultiplier",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "loanDataBytes",
          "type": "bytes"
        }
      ],
      "name": "marginTrade",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "affiliateReferrer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "loanDataBytes",
          "type": "bytes"
        }
      ],
      "name": "marginTradeAffiliate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "marketLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxScaleRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "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": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "name": "nextBorrowInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "supplyAmount",
          "type": "uint256"
        }
      ],
      "name": "nextSupplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pauser",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "profitOf",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rateMultiplier",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "setAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_baseRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_rateMultiplier",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lowUtilBaseRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lowUtilRateMultiplier",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_targetLevel",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_kinkLevel",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maxScaleRate",
          "type": "uint256"
        }
      ],
      "name": "setDemandCurve",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "LMAddress",
          "type": "address"
        }
      ],
      "name": "setLiquidityMiningAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_pauser",
          "type": "address"
        }
      ],
      "name": "setPauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            },
            {
              "internalType": "bool",
              "name": "active",
              "type": "bool"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "loanToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "collateralToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "minInitialMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maintenanceMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxLoanTerm",
              "type": "uint256"
            }
          ],
          "internalType": "struct LoanParamsStruct.LoanParams[]",
          "name": "loanParamsList",
          "type": "tuple[]"
        },
        {
          "internalType": "bool",
          "name": "areTorqueLoans",
          "type": "bool"
        }
      ],
      "name": "setupLoanParams",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovrynContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "supplyInterestRate",
      "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": "targetLevel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "target_",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "funcId",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isPaused",
          "type": "bool"
        }
      ],
      "name": "toggleFunctionPause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalAssetBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalAssetSupply",
      "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": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assetSupply",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "transactionLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wrbtcTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052600160009081556200001e6001600160e01b036200007216565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000076565b3390565b61574380620000866000396000f3fe6080604052600436106103c35760003560e01c80637e37c08c116101f2578063ca37e6661161010d578063e41b07e3116100a0578063f2fde38b1161006f578063f2fde38b14610a62578063f6b69f9914610a82578063f851a44014610a95578063ffa1ad7414610aaa576103c3565b8063e41b07e3146109ed578063e697d2ee14610a0d578063eebc508114610a2d578063ef2b0b3914610a4d576103c3565b8063d8f06c83116100dc578063d8f06c831461096d578063d97206a41461098d578063dd62ed3e146109ad578063e3cded61146109cd576103c3565b8063ca37e66614610903578063cb926cb314610918578063d65a502114610938578063d759dbeb14610958576103c3565b806395d89b4111610185578063a9059cbb11610154578063a9059cbb1461088e578063b9fe1a8f146108ae578063ba0e43bf146108ce578063be194217146108e3576103c3565b806395d89b411461082f5780639bda3a98146108445780639dc29fac146108595780639fd0506d14610879576103c3565b80638da5cb5b116101c15780638da5cb5b146107db5780638ee6c4e6146107f05780638f32d59b146108055780638fb807c51461081a576103c3565b80637e37c08c1461077c5780637ff9b59614610791578063829b38f4146107a65780638325a1c0146107c6576103c3565b80632f6b600d116102e2578063612ef80b1161027557806370a082311161024457806370a08231146107125780637288b34414610732578063797bf385146107525780637b7933b414610767576103c3565b8063612ef80b1461068e578063631a3ef8146106a35780636b40cd40146106c3578063704b6c02146106f2576103c3565b806340c10f19116102b157806340c10f191461062457806344a4a0031461064457806354198ce91461065957806356e07d7014610679576103c3565b80632f6b600d146105b8578063313ce567146105cd5780633291c11a146105ef578063330691ac1461060f576103c3565b806318498b1d1161035a57806323b872dd1161032957806323b872dd1461054457806328a02f19146105645780632d88af4a146105855780632ea295fa146105a5576103c3565b806318498b1d146104e35780631d0806ae146105055780631f68f20a1461051a57806320f6d07c1461052f576103c3565b8063095ea7b311610396578063095ea7b31461046c57806309ec6b6b1461049957806312416898146104ae57806318160ddd146104ce576103c3565b806304797930146103d257806306947a3a1461040857806306b3efd61461042a57806306fdde031461044a575b3480156103cf57600080fd5b50005b3480156103de57600080fd5b506103f26103ed3660046146cc565b610abf565b6040516103ff91906152ed565b60405180910390f35b34801561041457600080fd5b5061041d610c68565b6040516103ff919061518c565b34801561043657600080fd5b506103f261044536600461418b565b610c77565b34801561045657600080fd5b5061045f610d63565b6040516103ff919061536c565b34801561047857600080fd5b5061048c61048736600461424e565b610dee565b6040516103ff91906152df565b3480156104a557600080fd5b506103f2610e59565b3480156104ba57600080fd5b506103f26104c9366004614641565b610e6e565b3480156104da57600080fd5b506103f2610e99565b3480156104ef57600080fd5b506105036104fe366004614770565b610e9f565b005b34801561051157600080fd5b506103f2610ee2565b34801561052657600080fd5b506103f2610ee8565b34801561053b57600080fd5b506103f2610eee565b34801561055057600080fd5b5061048c61055f366004614201565b610f7d565b610577610572366004614549565b611046565b6040516103ff92919061555d565b34801561059157600080fd5b506105036105a036600461418b565b61126b565b6105776105b33660046143a2565b6112b1565b3480156105c457600080fd5b5061041d611591565b3480156105d957600080fd5b506105e26115a0565b6040516103ff9190615586565b3480156105fb57600080fd5b506103f261060a366004614641565b6115a9565b34801561061b57600080fd5b506103f26115bb565b34801561063057600080fd5b506103f261063f36600461424e565b6115c1565b34801561065057600080fd5b506103f2611602565b34801561066557600080fd5b506103f261067436600461418b565b611614565b34801561068557600080fd5b506103f26116b5565b34801561069a57600080fd5b506103f26116bb565b3480156106af57600080fd5b506103f26106be3660046146cc565b6116ec565b3480156106cf57600080fd5b506106e36106de36600461470f565b61188c565b6040516103ff9392919061556b565b3480156106fe57600080fd5b5061050361070d36600461418b565b61199d565b34801561071e57600080fd5b506103f261072d36600461418b565b6119e3565b34801561073e57600080fd5b506103f261074d36600461467d565b6119fe565b34801561075e57600080fd5b5061041d611ae1565b34801561077357600080fd5b506103f2611af5565b34801561078857600080fd5b506103f2611afb565b34801561079d57600080fd5b506103f2611b01565b3480156107b257600080fd5b506103f26107c1366004614641565b611b3f565b3480156107d257600080fd5b506103f2611bbf565b3480156107e757600080fd5b5061041d611bcb565b3480156107fc57600080fd5b5061041d611bda565b34801561081157600080fd5b5061048c611be9565b34801561082657600080fd5b506103f2611c0f565b34801561083b57600080fd5b5061045f611c3f565b34801561085057600080fd5b5061041d611c9a565b34801561086557600080fd5b506103f261087436600461424e565b611ca9565b34801561088557600080fd5b5061041d611d1d565b34801561089a57600080fd5b5061048c6108a936600461424e565b611d2c565b3480156108ba57600080fd5b506103f26108c9366004614641565b611d3c565b3480156108da57600080fd5b506103f2611d47565b3480156108ef57600080fd5b5061048c6108fe3660046145d8565b611d4d565b34801561090f57600080fd5b5061041d611dcf565b34801561092457600080fd5b5061050361093336600461418b565b611dde565b34801561094457600080fd5b506103f2610953366004614641565b611e24565b34801561096457600080fd5b506103f2611e37565b34801561097957600080fd5b50610503610988366004614320565b611e3d565b34801561099957600080fd5b506105036109a836600461486c565b61200c565b3480156109b957600080fd5b506103f26109c83660046141c7565b612113565b3480156109d957600080fd5b506105036109e836600461460c565b61213e565b3480156109f957600080fd5b506103f2610a0836600461418b565b6121e3565b348015610a1957600080fd5b50610503610a2836600461427e565b6121f5565b348015610a3957600080fd5b506103f2610a4836600461418b565b6123a6565b348015610a5957600080fd5b506103f26123c1565b348015610a6e57600080fd5b50610503610a7d36600461418b565b6123c7565b610577610a90366004614469565b6123f7565b348015610aa157600080fd5b5061041d6124c7565b348015610ab657600080fd5b506103f26124d6565b60008315610c61576001600160a01b038216610ae4576017546001600160a01b031691505b600060106000846001604051602001610afe929190615118565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506001600160a01b039182169363e762319f936101009091049092169187918a91869163ca74a5d991610b6f918a91016152ed565b60206040518083038186803b158015610b8757600080fd5b505afa158015610b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bbf919081019061465f565b60016040518663ffffffff1660e01b8152600401610be1959493929190615206565b60206040518083038186803b158015610bf957600080fd5b505afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c31919081019061465f565b9150610c4582610c3f611c0f565b866124db565b9350610c5391506125549050565b821115610c5f57600091505b505b9392505050565b6016546001600160a01b031681565b601c5460009081906001600160a01b031615610d1257601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690610cbf90309087906004016151a8565b60206040518083038186803b158015610cd757600080fd5b505afa158015610ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d0f919081019061465f565b90505b610d5a670de0b6b3a7640000610d4e610d29611b01565b610d4285610d36896119e3565b9063ffffffff61258a16565b9063ffffffff6125af16565b9063ffffffff6125e916565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610de65780601f10610dbb57610100808354040283529160200191610de6565b820191906000526020600020905b815481529060010190602001808311610dc957829003601f168201915b505050505081565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e479086906152ed565b60405180910390a35060015b92915050565b6000610e686104c9600061262b565b90505b90565b600080610e79610eee565b90508015610e9357610e8b81846119fe565b915050610d5e565b50919050565b60155490565b6000610ead8686868661188c565b5091505081811015610eda5760405162461bcd60e51b8152600401610ed19061537d565b60405180910390fd5b505050505050565b600e5481565b60055481565b6016546004805460405163250f447f60e11b81526000936001600160a01b0390811693634a1e88fe93610f2d93309361010090920490911691016151a8565b60206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e68919081019061465f565b60165460405163115dd4b160e01b815260009161103e918691869186916001600160a01b03169063115dd4b190610fb890339060040161519a565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110089190810190614384565b611035576001600160a01b0388166000908152601460209081526040808320338452909152902054611039565b6000195b612665565b949350505050565b60008060016000541461106b5760405162461bcd60e51b8152600401610ed19061550d565b6002600055611078612838565b6110858989898988610e9f565b6001600160a01b0386166110a2576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156110d55760405162461bcd60e51b8152600401610ed19061541d565b8915806110ea5750336001600160a01b038616145b6111065760405162461bcd60e51b8152600401610ed19061552d565b6001600160a01b03861660009081526012602052604090205415611149576001600160a01b03861660009081526012602052604090205487111561114957600080fd5b60045461010090046001600160a01b03166000908152601260205260409020541561119a5760045461010090046001600160a01b031660009081526012602052604090205488111561119a57600080fd5b60006111a787898b6128b8565b9050806111c65760405162461bcd60e51b8152600401610ed19061544d565b6111ce613e8b565b6111d6613ea9565b3082526001600160a01b038816602080840182905260408401919091528101839052606081018b9052608081018a905261120e612ae5565b61121f8c8260016020020151612b8b565b825260208201526112406f4b3b4ca85a86c47a098a2240000000008d6125e9565b9b506112528d60008e8c86868c612bda565b6001600055909e909d509b505050505050505050505050565b611273611be9565b61128f5760405162461bcd60e51b8152600401610ed1906154ad565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806001600054146112d65760405162461bcd60e51b8152600401610ed19061550d565b6002600055886112f85760405162461bcd60e51b8152600401610ed19061553d565b611300612838565b6001600160a01b03861660009081526012602052604090205415611343576001600160a01b03861660009081526012602052604090205487111561134357600080fd5b34158061134f57508634145b801561136357508615158061136357508915155b801561138a57506001600160a01b03861615158061138057503415155b8061138a57508915155b80156113a657508915806113a65750336001600160a01b038616145b6113c25760405162461bcd60e51b8152600401610ed1906153ed565b6001600160a01b0386166113df576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156114125760405162461bcd60e51b8152600401610ed19061538d565b61141a612ae5565b611422613e8b565b61142a613ea9565b3082526001600160a01b03878116602080850191909152908716604084015281018b90526114628b61145c600061262b565b8c6124db565b8360006020020184600260200201856001602002019290925291905252888160046020020181815250506115798c8c601660009054906101000a90046001600160a01b03166001600160a01b031663ca74a5d9601060008e60016040516020016114cd929190615118565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020546040518263ffffffff1660e01b815260040161151191906152ed565b60206040518083038186803b15801561152957600080fd5b505afa15801561153d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611561919081019061465f565b8b868660405180602001604052806000815250612bda565b6001600055909d909c509a5050505050505050505050565b6017546001600160a01b031681565b60045460ff1681565b60106020526000908152604090205481565b60065481565b60006001600054146115e55760405162461bcd60e51b8152600401610ed19061550d565b60026000556115f48383612e39565b90505b600160005592915050565b6000610e6861160f610eee565b612f45565b600080827f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb660001b60405160200161164d92919061513e565b604051602081830303815290604052805190602001209050610d5a8160136000866001600160a01b03166001600160a01b0316815260200190815260200160002054611697611b01565b6001600160a01b038716600090815260116020526040902054612f7d565b600a5481565b6000806116c8600061262b565b905060006116d4610eee565b9050808211156116e75790039050610e6b565b505090565b60008315610c6157600061170285610c3f611c0f565b9250505061170e612554565b8111610c5f576001600160a01b038316611731576017546001600160a01b031692505b60006010600085600160405160200161174b929190615118565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b815292945061188393600a936001600160a01b03938416936325decac09361010090930416918a918991869163ca74a5d9916117c1918c91016152ed565b60206040518083038186803b1580156117d957600080fd5b505afa1580156117ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611811919081019061465f565b60016040518663ffffffff1660e01b8152600401611833959493929190615206565b60206040518083038186803b15801561184b57600080fd5b505afa15801561185f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d36919081019061465f565b92505050610c61565b600080806001600160a01b0384166118ad576017546001600160a01b031693505b60006118ba8587896128b8565b90506118c68882612b8b565b90945091506118d3612554565b8411156118ea575060009250829150819050611993565b6118fa878563ffffffff61258a16565b6016546004805460405163d67f707760e01b8152939a506001600160a01b039283169363d67f70779361193f9361010090930416918a918d918d918a918d9101615248565b60206040518083038186803b15801561195757600080fd5b505afa15801561196b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061198f919081019061465f565b9250505b9450945094915050565b6119a5611be9565b6119c15760405162461bcd60e51b8152600401610ed1906154ad565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526013602052604090205490565b60008215801590611a0f5750828210155b15610e5357611ada701d6329f1c35ca4bfabb9f5610000000000610d4e611ac468056bc75e2d63100000601660009054906101000a90046001600160a01b03166001600160a01b0316634699f8466040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8757600080fd5b505afa158015611a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611abf919081019061465f565b612fd7565b610d42611ad18888613019565b610d4289612f45565b9050610e53565b60045461010090046001600160a01b031681565b600d5481565b60085481565b600f546000908190426001600160581b03908116911614611b2857611b2461304b565b9150505b611b39611b348261262b565b613117565b91505090565b600080611b5e61016d610d4e601c600b546125af90919063ffffffff16565b90506000611b7b68056bc75e2d631000008363ffffffff612fd716565b90506000611b9868056bc75e2d63100000610d4e84610d426116bb565b9050611bb685610d4e83670de0b6b3a764000063ffffffff6125af16565b95945050505050565b6000610e686000613146565b6001546001600160a01b031690565b601c546001600160a01b031681565b6001546000906001600160a01b0316611c0061319c565b6001600160a01b031614905090565b600f546000908190426001600160581b03908116911614611c3657611c3261304b565b9150505b611b398161262b565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610de65780601f10610dbb57610100808354040283529160200191610de6565b6018546001600160a01b031681565b6000600160005414611ccd5760405162461bcd60e51b8152600401610ed19061550d565b6002600055611cdb826131a0565b905080156115f7576115f7600460019054906101000a90046001600160a01b03168483604051806040016040528060018152602001603560f81b815250613357565b601b546001600160a01b031681565b6000610c61338484600019612665565b6000610e5382613146565b60095481565b60008082604051602001611d619190615180565b6040516020818303038152906040528051906020012090506000817fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001611dae929190615164565b60408051808303601f19018152919052805160209091012054949350505050565b601a546001600160a01b031681565b611de6611be9565b611e025760405162461bcd60e51b8152600401610ed1906154ad565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e536104c983610d36600061262b565b60075481565b611e45611be9565b80611e5a57506019546001600160a01b031633145b611e765760405162461bcd60e51b8152600401610ed1906154ad565b60045460609061010090046001600160a01b031660005b8451811015611f005781858281518110611ea357fe5b6020026020010151606001906001600160a01b031690816001600160a01b03168152505083611ed5576224ea00611ed8565b60005b62ffffff16858281518110611ee957fe5b602090810291909101015160e00152600101611e8d565b506016546040516350d713af60e11b81526001600160a01b039091169063a1ae275e90611f319087906004016152ce565b600060405180830381600087803b158015611f4b57600080fd5b505af1158015611f5f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f8791908101906142ec565b915060005b825181101561200557828181518110611fa157fe5b602002602001015160106000878481518110611fb957fe5b60200260200101516080015187604051602001611fd7929190615118565b60408051601f1981840301815291815281516020928301208352908201929092520160002055600101611f8c565b5050505050565b612014611be9565b8061202957506019546001600160a01b031633145b6120455760405162461bcd60e51b8152600401610ed1906154ad565b68056bc75e2d6310000061205f878963ffffffff61258a16565b111561207d5760405162461bcd60e51b8152600401610ed19061543d565b68056bc75e2d63100000612097858763ffffffff61258a16565b11156120b55760405162461bcd60e51b8152600401610ed19061543d565b68056bc75e2d6310000083111580156120d7575068056bc75e2d631000008211155b6120f35760405162461bcd60e51b8152600401610ed19061546d565b600596909655600694909455600792909255600855600955600a55600b55565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b601b546001600160a01b031633146121685760405162461bcd60e51b8152600401610ed1906154fd565b60008260405160200161217b9190615180565b604051602081830303815290604052805190602001207fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f26040516020016121c3929190615164565b604051602081830303815290604052805190602001209050818155505050565b60126020526000908152604090205481565b6121fd611be9565b8061221257506019546001600160a01b031633145b61222e5760405162461bcd60e51b8152600401610ed1906154ad565b82811461224d5760405162461bcd60e51b8152600401610ed1906153dd565b604080518481526020808602820101909152606090848015612279578160200160208202803883390190505b50905060005b8481101561233c57600086868381811061229557fe5b90506020020160206122aa919081019061418b565b8585848181106122b657fe5b90506020020160206122cb9190810190614366565b6040516020016122dc929190615118565b6040516020818303038152906040528051906020012060001c9050601060008281526020019081526020016000205483838151811061231757fe5b602090810291909101810191909152600091825260109052604081205560010161227f565b50601654604051637f187d3560e11b81526001600160a01b039091169063fe30fa6a9061236d9084906004016152bd565b600060405180830381600087803b15801561238757600080fd5b505af115801561239b573d6000803e3d6000fd5b505050505050505050565b6001600160a01b031660009081526011602052604090205490565b600b5481565b6123cf611be9565b6123eb5760405162461bcd60e51b8152600401610ed1906154ad565b6123f4816133b7565b50565b6000806001600160a01b0385161561246e5760165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf4489061243b908a9089906004016151a8565b600060405180830381600087803b15801561245557600080fd5b505af1158015612469573d6000803e3d6000fd5b505050505b6124b48c8c8c8c8c8c8c8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061104692505050565b915091509a509a98505050505050505050565b6019546001600160a01b031681565b600681565b60008060006124ea8686613439565b925061253761251f670de0b6b3a7640000611abf6b0a3098c68eb9427db8000000610d4e83610d428a8c63ffffffff6125af16565b610d4e88670de0b6b3a764000063ffffffff6125af16565b9050612549818763ffffffff612fd716565b915093509350939050565b600480546040516370a0823160e01b81526000926101009092046001600160a01b0316916370a0823191610f2d9130910161518c565b600082820183811015610c615760405162461bcd60e51b8152600401610ed1906153bd565b6000826125be57506000610e53565b828202828482816125cb57fe5b0414610c615760405162461bcd60e51b8152600401610ed19061549d565b6000610c6183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061354f565b6000601554600014610d5e57600c54806126555761265261264a610eee565b610d36612554565b90505b610e8b818463ffffffff61258a16565b600060001982146126c1576040805180820190915260028152610c4d60f21b602082015261269c908390859063ffffffff61358616565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b6001600160a01b0384166126e75760405162461bcd60e51b8152600401610ed19061539d565b6001600160a01b03851660009081526013602090815260408083205481518083019092526002825261189b60f11b92820192909252909190612732908390879063ffffffff61358616565b6001600160a01b0380891660009081526013602052604080822084905591891681529081205491925061276b828863ffffffff61258a16565b6001600160a01b0389166000908152601360205260408120829055909150612791611b01565b601c549091506001600160a01b038b81169116148015906127c05750601c546001600160a01b038a8116911614155b156127dd576127d18a8686846135b2565b6127dd898484846135b2565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405161282091906152ed565b60405180910390a35060019998505050505050505050565b600080356001600160e01b0319167fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001612878929190615164565b60405160208183030381529060405280519060200120905060008154905080156128b45760405162461bcd60e51b8152600401610ed1906154ad565b5050565b808215610c6157600080601660009054906101000a90046001600160a01b03166001600160a01b03166378d849ed6040518163ffffffff1660e01b815260040160206040518083038186803b15801561291057600080fd5b505afa158015612924573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061294891908101906141a9565b60048054604051630a7549df60e21b81526001600160a01b03938416936329d5277c93612981938c9361010090910490921691016151a8565b604080518083038186803b15801561299857600080fd5b505afa1580156129ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129d0919081019061469c565b91509150816000141580156129e457508015155b612a005760405162461bcd60e51b8152600401610ed1906154ed565b6000612a1682610d4e888663ffffffff6125af16565b60165460048054604051631a51577760e21b81529394506000936001600160a01b03938416936369455ddc93612a59936101009004909116918d918891016151de565b60206040518083038186803b158015612a7157600080fd5b505afa158015612a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612aa9919081019061465f565b9050868114612ac957612ac687610d4e848463ffffffff6125af16565b91505b612ad9828663ffffffff61258a16565b98975050505050505050565b600f5442906001600160581b038083169116146123f45760165460048054604051630740ff7d60e51b81526001600160a01b039384169363e81fefa093612b35936101009004909116910161518c565b600060405180830381600087803b158015612b4f57600080fd5b505af1158015612b63573d6000803e3d6000fd5b5050600f80546001600160581b0385166affffffffffffffffffffff19909116179055505050565b60008080612bab670de0b6b3a7640000610d4e868863ffffffff6125af16565b9050612bc081612bbb600061262b565b613439565b9150612bd0826224ea0083613668565b9250509250929050565b600080612be5612838565b612bed612554565b602085015111801590612c0c575060208501516001600160a01b031615155b612c285760405162461bcd60e51b8152600401610ed19061540d565b60408501516001600160a01b0316612c4e5760208501516001600160a01b031660408601525b6000612c5c8787878c6136c9565b60208601516060870151919250612c73919061258a565b60608601528815612c93576060850151612c8d908a612fd7565b60608601525b60008915612c9f575060015b6000601060008a84604051602001612cb8929190615118565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020549050601660009054906101000a90046001600160a01b03166001600160a01b031663585314cf84838f868f8e8e8e6040518963ffffffff1660e01b8152600401612d3097969594939291906152fb565b60408051808303818588803b158015612d4857600080fd5b505af1158015612d5c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250612d81919081019061469c565b608089015260208801819052612da95760405162461bcd60e51b8152600401610ed19061545d565b601654602089015160405163f06a9c6b60e01b81526001600160a01b039092169163f06a9c6b91612ddc9160040161518c565b600060405180830381600087803b158015612df657600080fd5b505af1158015612e0a573d6000803e3d6000fd5b5050505086600160058110612e1b57fe5b6020020151608090970151969c969b50959950505050505050505050565b600080612e45836138fe565b601c5491935091506000906001600160a01b031615612ee357601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690612e9090309089906004016151a8565b60206040518083038186803b158015612ea857600080fd5b505afa158015612ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ee0919081019061465f565b90505b6001600160a01b038516600090815260136020526040812054612f0c908363ffffffff61258a16565b90506000612f20828663ffffffff61258a16565b9050612f2e87868887613a08565b50612f3b878383876135b2565b5050505092915050565b60008115610d5e576000612f5761304b565b509050610e8b83610d4e61016d610d428568056bc75e2d6310000063ffffffff6125af16565b600081612f8c5750600061103e565b508354611bb681612fcb670de0b6b3a7640000612fbf88612fb3898963ffffffff613b2916565b9063ffffffff613b6f16565b9063ffffffff613bda16565b9063ffffffff613c3e16565b6000610c6183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613586565b6000821580159061302957508115155b15610e5357611ada82610d4e8568056bc75e2d6310000063ffffffff6125af16565b60165460048054604051630d1979fb60e41b8152600093849384936001600160a01b039283169363d1979fb09361308d933093610100900490911691016151a8565b60c06040518083038186803b1580156130a557600080fd5b505afa1580156130b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130dd91908101906147e5565b5091965094509250613110915068056bc75e2d631000009050610d4e6131038285612fd7565b859063ffffffff6125af16565b9150509091565b6015546000908061312a57600e54610d5a565b610d5a81610d4e85670de0b6b3a764000063ffffffff6125af16565b600080821561318f57600f54426001600160581b039081169116146131715761316d61304b565b9150505b600061317f82610d36612554565b90508084111561318d578093505b505b610d5a83612bbb8361262b565b3390565b6000816131bf5760405162461bcd60e51b8152600401610ed1906154bd565b6131c8336119e3565b8211156131fc5760001982146131f05760405162461bcd60e51b8152600401610ed19061547d565b6131f9336119e3565b91505b613204612ae5565b6000613213611b34600061262b565b90506000613233670de0b6b3a7640000610d4e868563ffffffff6125af16565b9050600061323f612554565b9050819350808411156132645760405162461bcd60e51b8152600401610ed1906153fd565b601c546000906001600160a01b0316156132fd57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa6906132aa90309033906004016151c3565b60206040518083038186803b1580156132c257600080fd5b505afa1580156132d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132fa919081019061465f565b90505b3360009081526013602052604081205461331d908363ffffffff61258a16565b90506000613331828963ffffffff612fd716565b905061333f33898989613c84565b5061334c338383896135b2565b505050505050919050565b6040516133b190859063a9059cbb60e01b9061337990879087906024016152a2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915283613da9565b50505050565b6001600160a01b0381166133dd5760405162461bcd60e51b8152600401610ed1906153ad565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008061345161344b85610d36610eee565b84613019565b600554600654600954600a54600b5494955060009485949392919082881015613478578297505b818811156134eb57968190039668056bc75e2d631000008290038089111561349e578098505b6134bf68056bc75e2d63100000610d4e85610d42898b63ffffffff61258a16565b96506134e387610d3683610d4e6134d6878d612fd7565b8e9063ffffffff6125af16565b995050613541565b61350c85610d3668056bc75e2d63100000610d4e8c8963ffffffff6125af16565b98509395508593613523848663ffffffff61258a16565b95508689101561353557869850613541565b85891115613541578598505b505050505050505092915050565b600081836135705760405162461bcd60e51b8152600401610ed1919061536c565b50600083858161357c57fe5b0495945050505050565b600081848411156135aa5760405162461bcd60e51b8152600401610ed1919061536c565b505050900390565b6040516000906135e89086907f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb69060200161513e565b604051602081830303815290604052805190602001209050600083600014156136145760009250613645565b8415613645576001600160a01b03861660009081526011602052604090205461364290839087908690612f7d565b90505b90556001600160a01b039093166000908152601160205260409020929092555050565b6000806136836301e13380610d4e878763ffffffff6125af16565b905060006136a068056bc75e2d631000008363ffffffff612fd716565b90506136bf81610d4e8668056bc75e2d6310000063ffffffff6125af16565b9695505050505050565b60175460045460408501516020850151606086015160808701516000956001600160a01b03908116956101009004811694939291908b1685141561371f5760405162461bcd60e51b8152600401610ed1906154cd565b349650871561377d5761374385858a60405180602001604052806000815250613357565b87831115613778576016546040805160208101909152600081526137789187916001600160a01b03909116908b870390613357565b6137b2565b601654604080518082019091526002815261323760f01b60208201526137b29187916001600160a01b03909116908690613357565b80156138b557856001600160a01b03168b6001600160a01b03161480156137d857508615155b80156137e45750808710155b1561387e57856001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561382457600080fd5b505af1158015613838573d6000803e3d6000fd5b505060165460408051808201909152600481526332382d6160e01b602082015261387494508f93506001600160a01b0390911691508490613357565b80870396506138b5565b601654604080518082019091526004815263191c16b160e11b60208201526138b5918d9133916001600160a01b0316908590613e67565b81156138f057601654604080518082019091526002815261323960f01b60208201526138f091879133916001600160a01b0316908690613e67565b505050505050949350505050565b6000808261391e5760405162461bcd60e51b8152600401610ed19061548d565b613926612ae5565b613933611b34600061262b565b905061395181610d4e85670de0b6b3a764000063ffffffff6125af16565b91503461399957613994600460019054906101000a90046001600160a01b031633308660405180604001604052806002815260200161062760f31b815250613e67565b613a03565b601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156139e957600080fd5b505af11580156139fd573d6000803e3d6000fd5b50505050505b915091565b60006001600160a01b038516613a305760405162461bcd60e51b8152600401610ed19061539d565b6001600160a01b038516600090815260136020526040812054613a59908663ffffffff61258a16565b6001600160a01b0387166000908152601360205260409020819055601554909150613a8a908663ffffffff61258a16565b6015556040516001600160a01b038716907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90613acc9088908890889061556b565b60405180910390a2856001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613b1891906152ed565b60405180910390a395945050505050565b6000818303818312801590613b3e5750838113155b80613b535750600083128015613b5357508381135b610c615760405162461bcd60e51b8152600401610ed19061551d565b600082613b7e57506000610e53565b82600019148015613b925750600160ff1b82145b15613baf5760405162461bcd60e51b8152600401610ed1906154dd565b82820282848281613bbc57fe5b0514610c615760405162461bcd60e51b8152600401610ed1906154dd565b600081613bf95760405162461bcd60e51b8152600401610ed19061554d565b81600019148015613c0d5750600160ff1b83145b15613c2a5760405162461bcd60e51b8152600401610ed19061542d565b6000828481613c3557fe5b05949350505050565b6000828201818312801590613c535750838112155b80613c685750600083128015613c6857508381125b610c615760405162461bcd60e51b8152600401610ed1906153cd565b6040805180820182526002815261189b60f11b6020808301919091526001600160a01b03871660009081526013909152918220548291613ccc9190879063ffffffff61358616565b9050600a8111613ced57613ce6858263ffffffff61258a16565b9450600090505b6001600160a01b0386166000908152601360205260409020819055601554613d1b908663ffffffff612fd716565b6015556040516001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b464490613d5d9088908890889061556b565b60405180910390a260006001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613b1891906152ed565b60006060846001600160a01b031684604051613dc59190615180565b6000604051808303816000865af19150503d8060008114613e02576040519150601f19603f3d011682016040523d82523d6000602084013e613e07565b606091505b5091509150818390613e2c5760405162461bcd60e51b8152600401610ed1919061536c565b508051156120055780806020019051613e489190810190614384565b8390610eda5760405162461bcd60e51b8152600401610ed1919061536c565b6040516120059086906323b872dd60e01b90613379908890889088906024016151de565b60405180608001604052806004906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b8035610e53816156da565b8051610e53816156da565b60008083601f840112613eef57600080fd5b5081356001600160401b03811115613f0657600080fd5b602083019150836020820283011115613f1e57600080fd5b9250929050565b600082601f830112613f3657600080fd5b8151613f49613f44826155ba565b615594565b91508181835260208401935060208101905083856020840282011115613f6e57600080fd5b60005b83811015612f3b5781613f84888261402f565b8452506020928301929190910190600101613f71565b600082601f830112613fab57600080fd5b8135613fb9613f44826155ba565b9150818183526020840193506020810190508385610100840282011115613fdf57600080fd5b60005b83811015612f3b5781613ff588826140ca565b8452506020909201916101009190910190600101613fe2565b8035610e53816156ee565b8051610e53816156ee565b8035610e53816156f7565b8051610e53816156f7565b60008083601f84011261404c57600080fd5b5081356001600160401b0381111561406357600080fd5b602083019150836001820283011115613f1e57600080fd5b600082601f83011261408c57600080fd5b813561409a613f44826155da565b915080825260208301602083018583830111156140b657600080fd5b6140c1838284615660565b50505092915050565b600061010082840312156140dd57600080fd5b6140e8610100615594565b905060006140f68484614024565b82525060206141078484830161400e565b602083015250604061411b84828501613ec7565b604083015250606061412f84828501613ec7565b606083015250608061414384828501613ec7565b60808301525060a061415784828501614024565b60a08301525060c061416b84828501614024565b60c08301525060e061417f84828501614024565b60e08301525092915050565b60006020828403121561419d57600080fd5b600061103e8484613ec7565b6000602082840312156141bb57600080fd5b600061103e8484613ed2565b600080604083850312156141da57600080fd5b60006141e68585613ec7565b92505060206141f785828601613ec7565b9150509250929050565b60008060006060848603121561421657600080fd5b60006142228686613ec7565b935050602061423386828701613ec7565b925050604061424486828701614024565b9150509250925092565b6000806040838503121561426157600080fd5b600061426d8585613ec7565b92505060206141f785828601614024565b6000806000806040858703121561429457600080fd5b84356001600160401b038111156142aa57600080fd5b6142b687828801613edd565b945094505060208501356001600160401b038111156142d457600080fd5b6142e087828801613edd565b95989497509550505050565b6000602082840312156142fe57600080fd5b81516001600160401b0381111561431457600080fd5b61103e84828501613f25565b6000806040838503121561433357600080fd5b82356001600160401b0381111561434957600080fd5b61435585828601613f9a565b92505060206141f78582860161400e565b60006020828403121561437857600080fd5b600061103e848461400e565b60006020828403121561439657600080fd5b600061103e8484614019565b600080600080600080600080610100898b0312156143bf57600080fd5b60006143cb8b8b614024565b98505060206143dc8b828c01614024565b97505060406143ed8b828c01614024565b96505060606143fe8b828c01614024565b955050608061440f8b828c01613ec7565b94505060a06144208b828c01613ec7565b93505060c06144318b828c01613ec7565b92505060e08901356001600160401b0381111561444d57600080fd5b6144598b828c0161407b565b9150509295985092959890939650565b6000806000806000806000806000806101208b8d03121561448957600080fd5b60006144958d8d614024565b9a505060206144a68d828e01614024565b99505060406144b78d828e01614024565b98505060606144c88d828e01614024565b97505060806144d98d828e01613ec7565b96505060a06144ea8d828e01613ec7565b95505060c06144fb8d828e01614024565b94505060e061450c8d828e01613ec7565b9350506101008b01356001600160401b0381111561452957600080fd5b6145358d828e0161403a565b92509250509295989b9194979a5092959850565b600080600080600080600080610100898b03121561456657600080fd5b60006145728b8b614024565b98505060206145838b828c01614024565b97505060406145948b828c01614024565b96505060606145a58b828c01614024565b95505060806145b68b828c01613ec7565b94505060a06145c78b828c01613ec7565b93505060c06144318b828c01614024565b6000602082840312156145ea57600080fd5b81356001600160401b0381111561460057600080fd5b61103e8482850161407b565b6000806040838503121561461f57600080fd5b82356001600160401b0381111561463557600080fd5b6143558582860161407b565b60006020828403121561465357600080fd5b600061103e8484614024565b60006020828403121561467157600080fd5b600061103e848461402f565b6000806040838503121561469057600080fd5b600061426d8585614024565b600080604083850312156146af57600080fd5b60006146bb858561402f565b92505060206141f78582860161402f565b6000806000606084860312156146e157600080fd5b60006146ed8686614024565b93505060206146fe86828701614024565b925050604061424486828701613ec7565b6000806000806080858703121561472557600080fd5b60006147318787614024565b945050602061474287828801614024565b935050604061475387828801614024565b925050606061476487828801613ec7565b91505092959194509250565b600080600080600060a0868803121561478857600080fd5b60006147948888614024565b95505060206147a588828901614024565b94505060406147b688828901614024565b93505060606147c788828901613ec7565b92505060806147d888828901614024565b9150509295509295909350565b60008060008060008060c087890312156147fe57600080fd5b600061480a898961402f565b965050602061481b89828a0161402f565b955050604061482c89828a0161402f565b945050606061483d89828a0161402f565b935050608061484e89828a0161402f565b92505060a061485f89828a0161402f565b9150509295509295509295565b600080600080600080600060e0888a03121561488757600080fd5b60006148938a8a614024565b97505060206148a48a828b01614024565b96505060406148b58a828b01614024565b95505060606148c68a828b01614024565b94505060806148d78a828b01614024565b93505060a06148e88a828b01614024565b92505060c06148f98a828b01614024565b91505092959891949750929550565b6000614914838361494c565b505060200190565b60006149148383614abf565b60006149348383615078565b50506101000190565b6149468161564f565b82525050565b61494681615620565b61494661496182615620565b615698565b61496f81615607565b6149798184610d5e565b925061498482610e6b565b8060005b83811015610eda57815161499c8782614908565b96506149a783615601565b925050600101614988565b60006149bd8261560d565b6149c78185615617565b93506149d283615601565b8060005b83811015614a005781516149ea888261491c565b97506149f583615601565b9250506001016149d6565b509495945050505050565b6000614a168261560d565b614a208185615617565b9350614a2b83615601565b8060005b83811015614a00578151614a438882614928565b9750614a4e83615601565b925050600101614a2f565b614a6281615611565b614a6c8184610d5e565b9250614a7782610e6b565b8060005b83811015610eda578151614a8f878261491c565b9650614a9a83615601565b925050600101614a7b565b6149468161562b565b614946614aba8261562b565b6156a3565b61494681610e6b565b614946614ad482610e6b565b610e6b565b614946614ad482615630565b6000614af08261560d565b614afa8185615617565b9350614b0a81856020860161566c565b614b13816156c4565b9093019392505050565b6000614b288261560d565b614b328185610d5e565b9350614b4281856020860161566c565b9290920192915050565b6000614b59600c83615617565b6b636f6c6c20746f6f206c6f7760a01b815260200192915050565b6000614b81600283615617565b61031360f41b815260200192915050565b6000614b9f600283615617565b61313560f01b815260200192915050565b6000614bbd602683615617565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000614c05601b83615617565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614c3e602183615617565b7f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000614c81600e83615617565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b6000614cab600183615617565b603760f81b815260200192915050565b6000614cc8600283615617565b61333760f01b815260200192915050565b6000614ce6600283615617565b610c8d60f21b815260200192915050565b6000614d04600283615617565b61313160f01b815260200192915050565b6000614d22602183615617565b7f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000614d65601583615617565b740c6eae4ecca40e0c2e4c2dae640e8dede40d0d2ced605b1b815260200192915050565b6000614d96600283615617565b61189960f11b815260200192915050565b6000614db4600283615617565b61323560f01b815260200192915050565b6000614dd2600f83615617565b6e0d8caeccad8e640e8dede40d0d2ced608b1b815260200192915050565b6000614dfd600283615617565b61199960f11b815260200192915050565b6000614e1b600283615617565b61313760f01b815260200192915050565b6000614e39602183615617565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000614e7c600c83615617565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b6000614ea4600283615617565b61313960f01b815260200192915050565b6000614ec2600283615617565b61191b60f11b815260200192915050565b6000614ee0602783615617565b7f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f815266766572666c6f7760c81b602082015260400192915050565b6000614f29601d83615617565b7f696e76616c6964207261746520636f6c6c61746572616c20746f6b656e000000815260200192915050565b6000614f62600a83615617565b6937b7363ca830bab9b2b960b11b815260200192915050565b6000614f88600c83615617565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b6000614fb0602483615617565b7f5369676e6564536166654d6174683a207375627472616374696f6e206f766572815263666c6f7760e01b602082015260400192915050565b6000614ff6601883615617565b7f34303120757365206f66206578697374696e67206c6f616e0000000000000000815260200192915050565b600061502f600183615617565b601b60f91b815260200192915050565b600061504c602083615617565b7f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f815260200192915050565b805161010083019061508a8482614abf565b50602082015161509d6020850182614aa5565b5060408201516150b0604085018261494c565b5060608201516150c3606085018261494c565b5060808201516150d6608085018261494c565b5060a08201516150e960a0850182614abf565b5060c08201516150fc60c0850182614abf565b5060e08201516133b160e0850182614abf565b61494681615649565b60006151248285614955565b6014820191506151348284614aae565b5060010192915050565b600061514a8285614955565b60148201915061515a8284614ac8565b5060200192915050565b60006151708285614ad9565b60048201915061515a8284614ac8565b6000610c618284614b1d565b60208101610e53828461494c565b60208101610e53828461493d565b604081016151b6828561494c565b610c61602083018461494c565b604081016151d1828561494c565b610c61602083018461493d565b606081016151ec828661494c565b6151f9602083018561494c565b61103e6040830184614abf565b60a08101615214828861494c565b615221602083018761494c565b61522e6040830186614abf565b61523b6060830185614abf565b6136bf6080830184614aa5565b60c08101615256828961494c565b615263602083018861494c565b6152706040830187614abf565b61527d6060830186614abf565b61528a6080830185614abf565b61529760a0830184614abf565b979650505050505050565b604081016152b0828561494c565b610c616020830184614abf565b60208082528101610c6181846149b2565b60208082528101610c618184614a0b565b60208101610e538284614aa5565b60208101610e538284614abf565b6101c0810161530a828a614abf565b6153176020830189614abf565b6153246040830188614aa5565b6153316060830187614abf565b61533e6080830186614966565b61534c610100830185614a59565b8181036101a083015261535f8184614ae5565b9998505050505050505050565b60208082528101610c618184614ae5565b60208082528101610e5381614b4c565b60208082528101610e5381614b74565b60208082528101610e5381614b92565b60208082528101610e5381614bb0565b60208082528101610e5381614bf8565b60208082528101610e5381614c31565b60208082528101610e5381614c74565b60208082528101610e5381614c9e565b60208082528101610e5381614cbb565b60208082528101610e5381614cd9565b60208082528101610e5381614cf7565b60208082528101610e5381614d15565b60208082528101610e5381614d58565b60208082528101610e5381614d89565b60208082528101610e5381614da7565b60208082528101610e5381614dc5565b60208082528101610e5381614df0565b60208082528101610e5381614e0e565b60208082528101610e5381614e2c565b60208082528101610e5381614e6f565b60208082528101610e5381614e97565b60208082528101610e5381614eb5565b60208082528101610e5381614ed3565b60208082528101610e5381614f1c565b60208082528101610e5381614f55565b60208082528101610e5381614f7b565b60208082528101610e5381614fa3565b60208082528101610e5381614fe9565b60208082528101610e5381615022565b60208082528101610e538161503f565b604081016152b08285614abf565b606081016155798286614abf565b6151f96020830185614abf565b60208101610e53828461510f565b6040518181016001600160401b03811182821017156155b257600080fd5b604052919050565b60006001600160401b038211156155d057600080fd5b5060209081020190565b60006001600160401b038211156155f057600080fd5b506020601f91909101601f19160190565b60200190565b50600490565b5190565b50600590565b90815260200190565b6000610e538261563d565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b6000610e53826000610e5382615620565b82818337506000910152565b60005b8381101561568757818101518382015260200161566f565b838111156133b15750506000910152565b6000610e53826156ae565b6000610e53826156b9565b6000610e53826156d4565b6000610e53826156ce565b601f01601f191690565b60f81b90565b60601b90565b6156e381615620565b81146123f457600080fd5b6156e38161562b565b6156e381610e6b56fea365627a7a7231582067b5b5f2c3a4d60367dcbf6ad233bf9b3ef127defcbbe64f2de20fbdeeba22f16c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x6080604052600436106103c35760003560e01c80637e37c08c116101f2578063ca37e6661161010d578063e41b07e3116100a0578063f2fde38b1161006f578063f2fde38b14610a62578063f6b69f9914610a82578063f851a44014610a95578063ffa1ad7414610aaa576103c3565b8063e41b07e3146109ed578063e697d2ee14610a0d578063eebc508114610a2d578063ef2b0b3914610a4d576103c3565b8063d8f06c83116100dc578063d8f06c831461096d578063d97206a41461098d578063dd62ed3e146109ad578063e3cded61146109cd576103c3565b8063ca37e66614610903578063cb926cb314610918578063d65a502114610938578063d759dbeb14610958576103c3565b806395d89b4111610185578063a9059cbb11610154578063a9059cbb1461088e578063b9fe1a8f146108ae578063ba0e43bf146108ce578063be194217146108e3576103c3565b806395d89b411461082f5780639bda3a98146108445780639dc29fac146108595780639fd0506d14610879576103c3565b80638da5cb5b116101c15780638da5cb5b146107db5780638ee6c4e6146107f05780638f32d59b146108055780638fb807c51461081a576103c3565b80637e37c08c1461077c5780637ff9b59614610791578063829b38f4146107a65780638325a1c0146107c6576103c3565b80632f6b600d116102e2578063612ef80b1161027557806370a082311161024457806370a08231146107125780637288b34414610732578063797bf385146107525780637b7933b414610767576103c3565b8063612ef80b1461068e578063631a3ef8146106a35780636b40cd40146106c3578063704b6c02146106f2576103c3565b806340c10f19116102b157806340c10f191461062457806344a4a0031461064457806354198ce91461065957806356e07d7014610679576103c3565b80632f6b600d146105b8578063313ce567146105cd5780633291c11a146105ef578063330691ac1461060f576103c3565b806318498b1d1161035a57806323b872dd1161032957806323b872dd1461054457806328a02f19146105645780632d88af4a146105855780632ea295fa146105a5576103c3565b806318498b1d146104e35780631d0806ae146105055780631f68f20a1461051a57806320f6d07c1461052f576103c3565b8063095ea7b311610396578063095ea7b31461046c57806309ec6b6b1461049957806312416898146104ae57806318160ddd146104ce576103c3565b806304797930146103d257806306947a3a1461040857806306b3efd61461042a57806306fdde031461044a575b3480156103cf57600080fd5b50005b3480156103de57600080fd5b506103f26103ed3660046146cc565b610abf565b6040516103ff91906152ed565b60405180910390f35b34801561041457600080fd5b5061041d610c68565b6040516103ff919061518c565b34801561043657600080fd5b506103f261044536600461418b565b610c77565b34801561045657600080fd5b5061045f610d63565b6040516103ff919061536c565b34801561047857600080fd5b5061048c61048736600461424e565b610dee565b6040516103ff91906152df565b3480156104a557600080fd5b506103f2610e59565b3480156104ba57600080fd5b506103f26104c9366004614641565b610e6e565b3480156104da57600080fd5b506103f2610e99565b3480156104ef57600080fd5b506105036104fe366004614770565b610e9f565b005b34801561051157600080fd5b506103f2610ee2565b34801561052657600080fd5b506103f2610ee8565b34801561053b57600080fd5b506103f2610eee565b34801561055057600080fd5b5061048c61055f366004614201565b610f7d565b610577610572366004614549565b611046565b6040516103ff92919061555d565b34801561059157600080fd5b506105036105a036600461418b565b61126b565b6105776105b33660046143a2565b6112b1565b3480156105c457600080fd5b5061041d611591565b3480156105d957600080fd5b506105e26115a0565b6040516103ff9190615586565b3480156105fb57600080fd5b506103f261060a366004614641565b6115a9565b34801561061b57600080fd5b506103f26115bb565b34801561063057600080fd5b506103f261063f36600461424e565b6115c1565b34801561065057600080fd5b506103f2611602565b34801561066557600080fd5b506103f261067436600461418b565b611614565b34801561068557600080fd5b506103f26116b5565b34801561069a57600080fd5b506103f26116bb565b3480156106af57600080fd5b506103f26106be3660046146cc565b6116ec565b3480156106cf57600080fd5b506106e36106de36600461470f565b61188c565b6040516103ff9392919061556b565b3480156106fe57600080fd5b5061050361070d36600461418b565b61199d565b34801561071e57600080fd5b506103f261072d36600461418b565b6119e3565b34801561073e57600080fd5b506103f261074d36600461467d565b6119fe565b34801561075e57600080fd5b5061041d611ae1565b34801561077357600080fd5b506103f2611af5565b34801561078857600080fd5b506103f2611afb565b34801561079d57600080fd5b506103f2611b01565b3480156107b257600080fd5b506103f26107c1366004614641565b611b3f565b3480156107d257600080fd5b506103f2611bbf565b3480156107e757600080fd5b5061041d611bcb565b3480156107fc57600080fd5b5061041d611bda565b34801561081157600080fd5b5061048c611be9565b34801561082657600080fd5b506103f2611c0f565b34801561083b57600080fd5b5061045f611c3f565b34801561085057600080fd5b5061041d611c9a565b34801561086557600080fd5b506103f261087436600461424e565b611ca9565b34801561088557600080fd5b5061041d611d1d565b34801561089a57600080fd5b5061048c6108a936600461424e565b611d2c565b3480156108ba57600080fd5b506103f26108c9366004614641565b611d3c565b3480156108da57600080fd5b506103f2611d47565b3480156108ef57600080fd5b5061048c6108fe3660046145d8565b611d4d565b34801561090f57600080fd5b5061041d611dcf565b34801561092457600080fd5b5061050361093336600461418b565b611dde565b34801561094457600080fd5b506103f2610953366004614641565b611e24565b34801561096457600080fd5b506103f2611e37565b34801561097957600080fd5b50610503610988366004614320565b611e3d565b34801561099957600080fd5b506105036109a836600461486c565b61200c565b3480156109b957600080fd5b506103f26109c83660046141c7565b612113565b3480156109d957600080fd5b506105036109e836600461460c565b61213e565b3480156109f957600080fd5b506103f2610a0836600461418b565b6121e3565b348015610a1957600080fd5b50610503610a2836600461427e565b6121f5565b348015610a3957600080fd5b506103f2610a4836600461418b565b6123a6565b348015610a5957600080fd5b506103f26123c1565b348015610a6e57600080fd5b50610503610a7d36600461418b565b6123c7565b610577610a90366004614469565b6123f7565b348015610aa157600080fd5b5061041d6124c7565b348015610ab657600080fd5b506103f26124d6565b60008315610c61576001600160a01b038216610ae4576017546001600160a01b031691505b600060106000846001604051602001610afe929190615118565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506001600160a01b039182169363e762319f936101009091049092169187918a91869163ca74a5d991610b6f918a91016152ed565b60206040518083038186803b158015610b8757600080fd5b505afa158015610b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bbf919081019061465f565b60016040518663ffffffff1660e01b8152600401610be1959493929190615206565b60206040518083038186803b158015610bf957600080fd5b505afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c31919081019061465f565b9150610c4582610c3f611c0f565b866124db565b9350610c5391506125549050565b821115610c5f57600091505b505b9392505050565b6016546001600160a01b031681565b601c5460009081906001600160a01b031615610d1257601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690610cbf90309087906004016151a8565b60206040518083038186803b158015610cd757600080fd5b505afa158015610ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d0f919081019061465f565b90505b610d5a670de0b6b3a7640000610d4e610d29611b01565b610d4285610d36896119e3565b9063ffffffff61258a16565b9063ffffffff6125af16565b9063ffffffff6125e916565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610de65780601f10610dbb57610100808354040283529160200191610de6565b820191906000526020600020905b815481529060010190602001808311610dc957829003601f168201915b505050505081565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e479086906152ed565b60405180910390a35060015b92915050565b6000610e686104c9600061262b565b90505b90565b600080610e79610eee565b90508015610e9357610e8b81846119fe565b915050610d5e565b50919050565b60155490565b6000610ead8686868661188c565b5091505081811015610eda5760405162461bcd60e51b8152600401610ed19061537d565b60405180910390fd5b505050505050565b600e5481565b60055481565b6016546004805460405163250f447f60e11b81526000936001600160a01b0390811693634a1e88fe93610f2d93309361010090920490911691016151a8565b60206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e68919081019061465f565b60165460405163115dd4b160e01b815260009161103e918691869186916001600160a01b03169063115dd4b190610fb890339060040161519a565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110089190810190614384565b611035576001600160a01b0388166000908152601460209081526040808320338452909152902054611039565b6000195b612665565b949350505050565b60008060016000541461106b5760405162461bcd60e51b8152600401610ed19061550d565b6002600055611078612838565b6110858989898988610e9f565b6001600160a01b0386166110a2576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156110d55760405162461bcd60e51b8152600401610ed19061541d565b8915806110ea5750336001600160a01b038616145b6111065760405162461bcd60e51b8152600401610ed19061552d565b6001600160a01b03861660009081526012602052604090205415611149576001600160a01b03861660009081526012602052604090205487111561114957600080fd5b60045461010090046001600160a01b03166000908152601260205260409020541561119a5760045461010090046001600160a01b031660009081526012602052604090205488111561119a57600080fd5b60006111a787898b6128b8565b9050806111c65760405162461bcd60e51b8152600401610ed19061544d565b6111ce613e8b565b6111d6613ea9565b3082526001600160a01b038816602080840182905260408401919091528101839052606081018b9052608081018a905261120e612ae5565b61121f8c8260016020020151612b8b565b825260208201526112406f4b3b4ca85a86c47a098a2240000000008d6125e9565b9b506112528d60008e8c86868c612bda565b6001600055909e909d509b505050505050505050505050565b611273611be9565b61128f5760405162461bcd60e51b8152600401610ed1906154ad565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806001600054146112d65760405162461bcd60e51b8152600401610ed19061550d565b6002600055886112f85760405162461bcd60e51b8152600401610ed19061553d565b611300612838565b6001600160a01b03861660009081526012602052604090205415611343576001600160a01b03861660009081526012602052604090205487111561134357600080fd5b34158061134f57508634145b801561136357508615158061136357508915155b801561138a57506001600160a01b03861615158061138057503415155b8061138a57508915155b80156113a657508915806113a65750336001600160a01b038616145b6113c25760405162461bcd60e51b8152600401610ed1906153ed565b6001600160a01b0386166113df576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156114125760405162461bcd60e51b8152600401610ed19061538d565b61141a612ae5565b611422613e8b565b61142a613ea9565b3082526001600160a01b03878116602080850191909152908716604084015281018b90526114628b61145c600061262b565b8c6124db565b8360006020020184600260200201856001602002019290925291905252888160046020020181815250506115798c8c601660009054906101000a90046001600160a01b03166001600160a01b031663ca74a5d9601060008e60016040516020016114cd929190615118565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020546040518263ffffffff1660e01b815260040161151191906152ed565b60206040518083038186803b15801561152957600080fd5b505afa15801561153d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611561919081019061465f565b8b868660405180602001604052806000815250612bda565b6001600055909d909c509a5050505050505050505050565b6017546001600160a01b031681565b60045460ff1681565b60106020526000908152604090205481565b60065481565b60006001600054146115e55760405162461bcd60e51b8152600401610ed19061550d565b60026000556115f48383612e39565b90505b600160005592915050565b6000610e6861160f610eee565b612f45565b600080827f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb660001b60405160200161164d92919061513e565b604051602081830303815290604052805190602001209050610d5a8160136000866001600160a01b03166001600160a01b0316815260200190815260200160002054611697611b01565b6001600160a01b038716600090815260116020526040902054612f7d565b600a5481565b6000806116c8600061262b565b905060006116d4610eee565b9050808211156116e75790039050610e6b565b505090565b60008315610c6157600061170285610c3f611c0f565b9250505061170e612554565b8111610c5f576001600160a01b038316611731576017546001600160a01b031692505b60006010600085600160405160200161174b929190615118565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b815292945061188393600a936001600160a01b03938416936325decac09361010090930416918a918991869163ca74a5d9916117c1918c91016152ed565b60206040518083038186803b1580156117d957600080fd5b505afa1580156117ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611811919081019061465f565b60016040518663ffffffff1660e01b8152600401611833959493929190615206565b60206040518083038186803b15801561184b57600080fd5b505afa15801561185f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d36919081019061465f565b92505050610c61565b600080806001600160a01b0384166118ad576017546001600160a01b031693505b60006118ba8587896128b8565b90506118c68882612b8b565b90945091506118d3612554565b8411156118ea575060009250829150819050611993565b6118fa878563ffffffff61258a16565b6016546004805460405163d67f707760e01b8152939a506001600160a01b039283169363d67f70779361193f9361010090930416918a918d918d918a918d9101615248565b60206040518083038186803b15801561195757600080fd5b505afa15801561196b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061198f919081019061465f565b9250505b9450945094915050565b6119a5611be9565b6119c15760405162461bcd60e51b8152600401610ed1906154ad565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526013602052604090205490565b60008215801590611a0f5750828210155b15610e5357611ada701d6329f1c35ca4bfabb9f5610000000000610d4e611ac468056bc75e2d63100000601660009054906101000a90046001600160a01b03166001600160a01b0316634699f8466040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8757600080fd5b505afa158015611a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611abf919081019061465f565b612fd7565b610d42611ad18888613019565b610d4289612f45565b9050610e53565b60045461010090046001600160a01b031681565b600d5481565b60085481565b600f546000908190426001600160581b03908116911614611b2857611b2461304b565b9150505b611b39611b348261262b565b613117565b91505090565b600080611b5e61016d610d4e601c600b546125af90919063ffffffff16565b90506000611b7b68056bc75e2d631000008363ffffffff612fd716565b90506000611b9868056bc75e2d63100000610d4e84610d426116bb565b9050611bb685610d4e83670de0b6b3a764000063ffffffff6125af16565b95945050505050565b6000610e686000613146565b6001546001600160a01b031690565b601c546001600160a01b031681565b6001546000906001600160a01b0316611c0061319c565b6001600160a01b031614905090565b600f546000908190426001600160581b03908116911614611c3657611c3261304b565b9150505b611b398161262b565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610de65780601f10610dbb57610100808354040283529160200191610de6565b6018546001600160a01b031681565b6000600160005414611ccd5760405162461bcd60e51b8152600401610ed19061550d565b6002600055611cdb826131a0565b905080156115f7576115f7600460019054906101000a90046001600160a01b03168483604051806040016040528060018152602001603560f81b815250613357565b601b546001600160a01b031681565b6000610c61338484600019612665565b6000610e5382613146565b60095481565b60008082604051602001611d619190615180565b6040516020818303038152906040528051906020012090506000817fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001611dae929190615164565b60408051808303601f19018152919052805160209091012054949350505050565b601a546001600160a01b031681565b611de6611be9565b611e025760405162461bcd60e51b8152600401610ed1906154ad565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e536104c983610d36600061262b565b60075481565b611e45611be9565b80611e5a57506019546001600160a01b031633145b611e765760405162461bcd60e51b8152600401610ed1906154ad565b60045460609061010090046001600160a01b031660005b8451811015611f005781858281518110611ea357fe5b6020026020010151606001906001600160a01b031690816001600160a01b03168152505083611ed5576224ea00611ed8565b60005b62ffffff16858281518110611ee957fe5b602090810291909101015160e00152600101611e8d565b506016546040516350d713af60e11b81526001600160a01b039091169063a1ae275e90611f319087906004016152ce565b600060405180830381600087803b158015611f4b57600080fd5b505af1158015611f5f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f8791908101906142ec565b915060005b825181101561200557828181518110611fa157fe5b602002602001015160106000878481518110611fb957fe5b60200260200101516080015187604051602001611fd7929190615118565b60408051601f1981840301815291815281516020928301208352908201929092520160002055600101611f8c565b5050505050565b612014611be9565b8061202957506019546001600160a01b031633145b6120455760405162461bcd60e51b8152600401610ed1906154ad565b68056bc75e2d6310000061205f878963ffffffff61258a16565b111561207d5760405162461bcd60e51b8152600401610ed19061543d565b68056bc75e2d63100000612097858763ffffffff61258a16565b11156120b55760405162461bcd60e51b8152600401610ed19061543d565b68056bc75e2d6310000083111580156120d7575068056bc75e2d631000008211155b6120f35760405162461bcd60e51b8152600401610ed19061546d565b600596909655600694909455600792909255600855600955600a55600b55565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b601b546001600160a01b031633146121685760405162461bcd60e51b8152600401610ed1906154fd565b60008260405160200161217b9190615180565b604051602081830303815290604052805190602001207fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f26040516020016121c3929190615164565b604051602081830303815290604052805190602001209050818155505050565b60126020526000908152604090205481565b6121fd611be9565b8061221257506019546001600160a01b031633145b61222e5760405162461bcd60e51b8152600401610ed1906154ad565b82811461224d5760405162461bcd60e51b8152600401610ed1906153dd565b604080518481526020808602820101909152606090848015612279578160200160208202803883390190505b50905060005b8481101561233c57600086868381811061229557fe5b90506020020160206122aa919081019061418b565b8585848181106122b657fe5b90506020020160206122cb9190810190614366565b6040516020016122dc929190615118565b6040516020818303038152906040528051906020012060001c9050601060008281526020019081526020016000205483838151811061231757fe5b602090810291909101810191909152600091825260109052604081205560010161227f565b50601654604051637f187d3560e11b81526001600160a01b039091169063fe30fa6a9061236d9084906004016152bd565b600060405180830381600087803b15801561238757600080fd5b505af115801561239b573d6000803e3d6000fd5b505050505050505050565b6001600160a01b031660009081526011602052604090205490565b600b5481565b6123cf611be9565b6123eb5760405162461bcd60e51b8152600401610ed1906154ad565b6123f4816133b7565b50565b6000806001600160a01b0385161561246e5760165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf4489061243b908a9089906004016151a8565b600060405180830381600087803b15801561245557600080fd5b505af1158015612469573d6000803e3d6000fd5b505050505b6124b48c8c8c8c8c8c8c8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061104692505050565b915091509a509a98505050505050505050565b6019546001600160a01b031681565b600681565b60008060006124ea8686613439565b925061253761251f670de0b6b3a7640000611abf6b0a3098c68eb9427db8000000610d4e83610d428a8c63ffffffff6125af16565b610d4e88670de0b6b3a764000063ffffffff6125af16565b9050612549818763ffffffff612fd716565b915093509350939050565b600480546040516370a0823160e01b81526000926101009092046001600160a01b0316916370a0823191610f2d9130910161518c565b600082820183811015610c615760405162461bcd60e51b8152600401610ed1906153bd565b6000826125be57506000610e53565b828202828482816125cb57fe5b0414610c615760405162461bcd60e51b8152600401610ed19061549d565b6000610c6183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061354f565b6000601554600014610d5e57600c54806126555761265261264a610eee565b610d36612554565b90505b610e8b818463ffffffff61258a16565b600060001982146126c1576040805180820190915260028152610c4d60f21b602082015261269c908390859063ffffffff61358616565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b6001600160a01b0384166126e75760405162461bcd60e51b8152600401610ed19061539d565b6001600160a01b03851660009081526013602090815260408083205481518083019092526002825261189b60f11b92820192909252909190612732908390879063ffffffff61358616565b6001600160a01b0380891660009081526013602052604080822084905591891681529081205491925061276b828863ffffffff61258a16565b6001600160a01b0389166000908152601360205260408120829055909150612791611b01565b601c549091506001600160a01b038b81169116148015906127c05750601c546001600160a01b038a8116911614155b156127dd576127d18a8686846135b2565b6127dd898484846135b2565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405161282091906152ed565b60405180910390a35060019998505050505050505050565b600080356001600160e01b0319167fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001612878929190615164565b60405160208183030381529060405280519060200120905060008154905080156128b45760405162461bcd60e51b8152600401610ed1906154ad565b5050565b808215610c6157600080601660009054906101000a90046001600160a01b03166001600160a01b03166378d849ed6040518163ffffffff1660e01b815260040160206040518083038186803b15801561291057600080fd5b505afa158015612924573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061294891908101906141a9565b60048054604051630a7549df60e21b81526001600160a01b03938416936329d5277c93612981938c9361010090910490921691016151a8565b604080518083038186803b15801561299857600080fd5b505afa1580156129ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129d0919081019061469c565b91509150816000141580156129e457508015155b612a005760405162461bcd60e51b8152600401610ed1906154ed565b6000612a1682610d4e888663ffffffff6125af16565b60165460048054604051631a51577760e21b81529394506000936001600160a01b03938416936369455ddc93612a59936101009004909116918d918891016151de565b60206040518083038186803b158015612a7157600080fd5b505afa158015612a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612aa9919081019061465f565b9050868114612ac957612ac687610d4e848463ffffffff6125af16565b91505b612ad9828663ffffffff61258a16565b98975050505050505050565b600f5442906001600160581b038083169116146123f45760165460048054604051630740ff7d60e51b81526001600160a01b039384169363e81fefa093612b35936101009004909116910161518c565b600060405180830381600087803b158015612b4f57600080fd5b505af1158015612b63573d6000803e3d6000fd5b5050600f80546001600160581b0385166affffffffffffffffffffff19909116179055505050565b60008080612bab670de0b6b3a7640000610d4e868863ffffffff6125af16565b9050612bc081612bbb600061262b565b613439565b9150612bd0826224ea0083613668565b9250509250929050565b600080612be5612838565b612bed612554565b602085015111801590612c0c575060208501516001600160a01b031615155b612c285760405162461bcd60e51b8152600401610ed19061540d565b60408501516001600160a01b0316612c4e5760208501516001600160a01b031660408601525b6000612c5c8787878c6136c9565b60208601516060870151919250612c73919061258a565b60608601528815612c93576060850151612c8d908a612fd7565b60608601525b60008915612c9f575060015b6000601060008a84604051602001612cb8929190615118565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020549050601660009054906101000a90046001600160a01b03166001600160a01b031663585314cf84838f868f8e8e8e6040518963ffffffff1660e01b8152600401612d3097969594939291906152fb565b60408051808303818588803b158015612d4857600080fd5b505af1158015612d5c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250612d81919081019061469c565b608089015260208801819052612da95760405162461bcd60e51b8152600401610ed19061545d565b601654602089015160405163f06a9c6b60e01b81526001600160a01b039092169163f06a9c6b91612ddc9160040161518c565b600060405180830381600087803b158015612df657600080fd5b505af1158015612e0a573d6000803e3d6000fd5b5050505086600160058110612e1b57fe5b6020020151608090970151969c969b50959950505050505050505050565b600080612e45836138fe565b601c5491935091506000906001600160a01b031615612ee357601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690612e9090309089906004016151a8565b60206040518083038186803b158015612ea857600080fd5b505afa158015612ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ee0919081019061465f565b90505b6001600160a01b038516600090815260136020526040812054612f0c908363ffffffff61258a16565b90506000612f20828663ffffffff61258a16565b9050612f2e87868887613a08565b50612f3b878383876135b2565b5050505092915050565b60008115610d5e576000612f5761304b565b509050610e8b83610d4e61016d610d428568056bc75e2d6310000063ffffffff6125af16565b600081612f8c5750600061103e565b508354611bb681612fcb670de0b6b3a7640000612fbf88612fb3898963ffffffff613b2916565b9063ffffffff613b6f16565b9063ffffffff613bda16565b9063ffffffff613c3e16565b6000610c6183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613586565b6000821580159061302957508115155b15610e5357611ada82610d4e8568056bc75e2d6310000063ffffffff6125af16565b60165460048054604051630d1979fb60e41b8152600093849384936001600160a01b039283169363d1979fb09361308d933093610100900490911691016151a8565b60c06040518083038186803b1580156130a557600080fd5b505afa1580156130b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130dd91908101906147e5565b5091965094509250613110915068056bc75e2d631000009050610d4e6131038285612fd7565b859063ffffffff6125af16565b9150509091565b6015546000908061312a57600e54610d5a565b610d5a81610d4e85670de0b6b3a764000063ffffffff6125af16565b600080821561318f57600f54426001600160581b039081169116146131715761316d61304b565b9150505b600061317f82610d36612554565b90508084111561318d578093505b505b610d5a83612bbb8361262b565b3390565b6000816131bf5760405162461bcd60e51b8152600401610ed1906154bd565b6131c8336119e3565b8211156131fc5760001982146131f05760405162461bcd60e51b8152600401610ed19061547d565b6131f9336119e3565b91505b613204612ae5565b6000613213611b34600061262b565b90506000613233670de0b6b3a7640000610d4e868563ffffffff6125af16565b9050600061323f612554565b9050819350808411156132645760405162461bcd60e51b8152600401610ed1906153fd565b601c546000906001600160a01b0316156132fd57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa6906132aa90309033906004016151c3565b60206040518083038186803b1580156132c257600080fd5b505afa1580156132d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132fa919081019061465f565b90505b3360009081526013602052604081205461331d908363ffffffff61258a16565b90506000613331828963ffffffff612fd716565b905061333f33898989613c84565b5061334c338383896135b2565b505050505050919050565b6040516133b190859063a9059cbb60e01b9061337990879087906024016152a2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915283613da9565b50505050565b6001600160a01b0381166133dd5760405162461bcd60e51b8152600401610ed1906153ad565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008061345161344b85610d36610eee565b84613019565b600554600654600954600a54600b5494955060009485949392919082881015613478578297505b818811156134eb57968190039668056bc75e2d631000008290038089111561349e578098505b6134bf68056bc75e2d63100000610d4e85610d42898b63ffffffff61258a16565b96506134e387610d3683610d4e6134d6878d612fd7565b8e9063ffffffff6125af16565b995050613541565b61350c85610d3668056bc75e2d63100000610d4e8c8963ffffffff6125af16565b98509395508593613523848663ffffffff61258a16565b95508689101561353557869850613541565b85891115613541578598505b505050505050505092915050565b600081836135705760405162461bcd60e51b8152600401610ed1919061536c565b50600083858161357c57fe5b0495945050505050565b600081848411156135aa5760405162461bcd60e51b8152600401610ed1919061536c565b505050900390565b6040516000906135e89086907f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb69060200161513e565b604051602081830303815290604052805190602001209050600083600014156136145760009250613645565b8415613645576001600160a01b03861660009081526011602052604090205461364290839087908690612f7d565b90505b90556001600160a01b039093166000908152601160205260409020929092555050565b6000806136836301e13380610d4e878763ffffffff6125af16565b905060006136a068056bc75e2d631000008363ffffffff612fd716565b90506136bf81610d4e8668056bc75e2d6310000063ffffffff6125af16565b9695505050505050565b60175460045460408501516020850151606086015160808701516000956001600160a01b03908116956101009004811694939291908b1685141561371f5760405162461bcd60e51b8152600401610ed1906154cd565b349650871561377d5761374385858a60405180602001604052806000815250613357565b87831115613778576016546040805160208101909152600081526137789187916001600160a01b03909116908b870390613357565b6137b2565b601654604080518082019091526002815261323760f01b60208201526137b29187916001600160a01b03909116908690613357565b80156138b557856001600160a01b03168b6001600160a01b03161480156137d857508615155b80156137e45750808710155b1561387e57856001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561382457600080fd5b505af1158015613838573d6000803e3d6000fd5b505060165460408051808201909152600481526332382d6160e01b602082015261387494508f93506001600160a01b0390911691508490613357565b80870396506138b5565b601654604080518082019091526004815263191c16b160e11b60208201526138b5918d9133916001600160a01b0316908590613e67565b81156138f057601654604080518082019091526002815261323960f01b60208201526138f091879133916001600160a01b0316908690613e67565b505050505050949350505050565b6000808261391e5760405162461bcd60e51b8152600401610ed19061548d565b613926612ae5565b613933611b34600061262b565b905061395181610d4e85670de0b6b3a764000063ffffffff6125af16565b91503461399957613994600460019054906101000a90046001600160a01b031633308660405180604001604052806002815260200161062760f31b815250613e67565b613a03565b601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156139e957600080fd5b505af11580156139fd573d6000803e3d6000fd5b50505050505b915091565b60006001600160a01b038516613a305760405162461bcd60e51b8152600401610ed19061539d565b6001600160a01b038516600090815260136020526040812054613a59908663ffffffff61258a16565b6001600160a01b0387166000908152601360205260409020819055601554909150613a8a908663ffffffff61258a16565b6015556040516001600160a01b038716907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90613acc9088908890889061556b565b60405180910390a2856001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613b1891906152ed565b60405180910390a395945050505050565b6000818303818312801590613b3e5750838113155b80613b535750600083128015613b5357508381135b610c615760405162461bcd60e51b8152600401610ed19061551d565b600082613b7e57506000610e53565b82600019148015613b925750600160ff1b82145b15613baf5760405162461bcd60e51b8152600401610ed1906154dd565b82820282848281613bbc57fe5b0514610c615760405162461bcd60e51b8152600401610ed1906154dd565b600081613bf95760405162461bcd60e51b8152600401610ed19061554d565b81600019148015613c0d5750600160ff1b83145b15613c2a5760405162461bcd60e51b8152600401610ed19061542d565b6000828481613c3557fe5b05949350505050565b6000828201818312801590613c535750838112155b80613c685750600083128015613c6857508381125b610c615760405162461bcd60e51b8152600401610ed1906153cd565b6040805180820182526002815261189b60f11b6020808301919091526001600160a01b03871660009081526013909152918220548291613ccc9190879063ffffffff61358616565b9050600a8111613ced57613ce6858263ffffffff61258a16565b9450600090505b6001600160a01b0386166000908152601360205260409020819055601554613d1b908663ffffffff612fd716565b6015556040516001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b464490613d5d9088908890889061556b565b60405180910390a260006001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613b1891906152ed565b60006060846001600160a01b031684604051613dc59190615180565b6000604051808303816000865af19150503d8060008114613e02576040519150601f19603f3d011682016040523d82523d6000602084013e613e07565b606091505b5091509150818390613e2c5760405162461bcd60e51b8152600401610ed1919061536c565b508051156120055780806020019051613e489190810190614384565b8390610eda5760405162461bcd60e51b8152600401610ed1919061536c565b6040516120059086906323b872dd60e01b90613379908890889088906024016151de565b60405180608001604052806004906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b8035610e53816156da565b8051610e53816156da565b60008083601f840112613eef57600080fd5b5081356001600160401b03811115613f0657600080fd5b602083019150836020820283011115613f1e57600080fd5b9250929050565b600082601f830112613f3657600080fd5b8151613f49613f44826155ba565b615594565b91508181835260208401935060208101905083856020840282011115613f6e57600080fd5b60005b83811015612f3b5781613f84888261402f565b8452506020928301929190910190600101613f71565b600082601f830112613fab57600080fd5b8135613fb9613f44826155ba565b9150818183526020840193506020810190508385610100840282011115613fdf57600080fd5b60005b83811015612f3b5781613ff588826140ca565b8452506020909201916101009190910190600101613fe2565b8035610e53816156ee565b8051610e53816156ee565b8035610e53816156f7565b8051610e53816156f7565b60008083601f84011261404c57600080fd5b5081356001600160401b0381111561406357600080fd5b602083019150836001820283011115613f1e57600080fd5b600082601f83011261408c57600080fd5b813561409a613f44826155da565b915080825260208301602083018583830111156140b657600080fd5b6140c1838284615660565b50505092915050565b600061010082840312156140dd57600080fd5b6140e8610100615594565b905060006140f68484614024565b82525060206141078484830161400e565b602083015250604061411b84828501613ec7565b604083015250606061412f84828501613ec7565b606083015250608061414384828501613ec7565b60808301525060a061415784828501614024565b60a08301525060c061416b84828501614024565b60c08301525060e061417f84828501614024565b60e08301525092915050565b60006020828403121561419d57600080fd5b600061103e8484613ec7565b6000602082840312156141bb57600080fd5b600061103e8484613ed2565b600080604083850312156141da57600080fd5b60006141e68585613ec7565b92505060206141f785828601613ec7565b9150509250929050565b60008060006060848603121561421657600080fd5b60006142228686613ec7565b935050602061423386828701613ec7565b925050604061424486828701614024565b9150509250925092565b6000806040838503121561426157600080fd5b600061426d8585613ec7565b92505060206141f785828601614024565b6000806000806040858703121561429457600080fd5b84356001600160401b038111156142aa57600080fd5b6142b687828801613edd565b945094505060208501356001600160401b038111156142d457600080fd5b6142e087828801613edd565b95989497509550505050565b6000602082840312156142fe57600080fd5b81516001600160401b0381111561431457600080fd5b61103e84828501613f25565b6000806040838503121561433357600080fd5b82356001600160401b0381111561434957600080fd5b61435585828601613f9a565b92505060206141f78582860161400e565b60006020828403121561437857600080fd5b600061103e848461400e565b60006020828403121561439657600080fd5b600061103e8484614019565b600080600080600080600080610100898b0312156143bf57600080fd5b60006143cb8b8b614024565b98505060206143dc8b828c01614024565b97505060406143ed8b828c01614024565b96505060606143fe8b828c01614024565b955050608061440f8b828c01613ec7565b94505060a06144208b828c01613ec7565b93505060c06144318b828c01613ec7565b92505060e08901356001600160401b0381111561444d57600080fd5b6144598b828c0161407b565b9150509295985092959890939650565b6000806000806000806000806000806101208b8d03121561448957600080fd5b60006144958d8d614024565b9a505060206144a68d828e01614024565b99505060406144b78d828e01614024565b98505060606144c88d828e01614024565b97505060806144d98d828e01613ec7565b96505060a06144ea8d828e01613ec7565b95505060c06144fb8d828e01614024565b94505060e061450c8d828e01613ec7565b9350506101008b01356001600160401b0381111561452957600080fd5b6145358d828e0161403a565b92509250509295989b9194979a5092959850565b600080600080600080600080610100898b03121561456657600080fd5b60006145728b8b614024565b98505060206145838b828c01614024565b97505060406145948b828c01614024565b96505060606145a58b828c01614024565b95505060806145b68b828c01613ec7565b94505060a06145c78b828c01613ec7565b93505060c06144318b828c01614024565b6000602082840312156145ea57600080fd5b81356001600160401b0381111561460057600080fd5b61103e8482850161407b565b6000806040838503121561461f57600080fd5b82356001600160401b0381111561463557600080fd5b6143558582860161407b565b60006020828403121561465357600080fd5b600061103e8484614024565b60006020828403121561467157600080fd5b600061103e848461402f565b6000806040838503121561469057600080fd5b600061426d8585614024565b600080604083850312156146af57600080fd5b60006146bb858561402f565b92505060206141f78582860161402f565b6000806000606084860312156146e157600080fd5b60006146ed8686614024565b93505060206146fe86828701614024565b925050604061424486828701613ec7565b6000806000806080858703121561472557600080fd5b60006147318787614024565b945050602061474287828801614024565b935050604061475387828801614024565b925050606061476487828801613ec7565b91505092959194509250565b600080600080600060a0868803121561478857600080fd5b60006147948888614024565b95505060206147a588828901614024565b94505060406147b688828901614024565b93505060606147c788828901613ec7565b92505060806147d888828901614024565b9150509295509295909350565b60008060008060008060c087890312156147fe57600080fd5b600061480a898961402f565b965050602061481b89828a0161402f565b955050604061482c89828a0161402f565b945050606061483d89828a0161402f565b935050608061484e89828a0161402f565b92505060a061485f89828a0161402f565b9150509295509295509295565b600080600080600080600060e0888a03121561488757600080fd5b60006148938a8a614024565b97505060206148a48a828b01614024565b96505060406148b58a828b01614024565b95505060606148c68a828b01614024565b94505060806148d78a828b01614024565b93505060a06148e88a828b01614024565b92505060c06148f98a828b01614024565b91505092959891949750929550565b6000614914838361494c565b505060200190565b60006149148383614abf565b60006149348383615078565b50506101000190565b6149468161564f565b82525050565b61494681615620565b61494661496182615620565b615698565b61496f81615607565b6149798184610d5e565b925061498482610e6b565b8060005b83811015610eda57815161499c8782614908565b96506149a783615601565b925050600101614988565b60006149bd8261560d565b6149c78185615617565b93506149d283615601565b8060005b83811015614a005781516149ea888261491c565b97506149f583615601565b9250506001016149d6565b509495945050505050565b6000614a168261560d565b614a208185615617565b9350614a2b83615601565b8060005b83811015614a00578151614a438882614928565b9750614a4e83615601565b925050600101614a2f565b614a6281615611565b614a6c8184610d5e565b9250614a7782610e6b565b8060005b83811015610eda578151614a8f878261491c565b9650614a9a83615601565b925050600101614a7b565b6149468161562b565b614946614aba8261562b565b6156a3565b61494681610e6b565b614946614ad482610e6b565b610e6b565b614946614ad482615630565b6000614af08261560d565b614afa8185615617565b9350614b0a81856020860161566c565b614b13816156c4565b9093019392505050565b6000614b288261560d565b614b328185610d5e565b9350614b4281856020860161566c565b9290920192915050565b6000614b59600c83615617565b6b636f6c6c20746f6f206c6f7760a01b815260200192915050565b6000614b81600283615617565b61031360f41b815260200192915050565b6000614b9f600283615617565b61313560f01b815260200192915050565b6000614bbd602683615617565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000614c05601b83615617565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614c3e602183615617565b7f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000614c81600e83615617565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b6000614cab600183615617565b603760f81b815260200192915050565b6000614cc8600283615617565b61333760f01b815260200192915050565b6000614ce6600283615617565b610c8d60f21b815260200192915050565b6000614d04600283615617565b61313160f01b815260200192915050565b6000614d22602183615617565b7f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000614d65601583615617565b740c6eae4ecca40e0c2e4c2dae640e8dede40d0d2ced605b1b815260200192915050565b6000614d96600283615617565b61189960f11b815260200192915050565b6000614db4600283615617565b61323560f01b815260200192915050565b6000614dd2600f83615617565b6e0d8caeccad8e640e8dede40d0d2ced608b1b815260200192915050565b6000614dfd600283615617565b61199960f11b815260200192915050565b6000614e1b600283615617565b61313760f01b815260200192915050565b6000614e39602183615617565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000614e7c600c83615617565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b6000614ea4600283615617565b61313960f01b815260200192915050565b6000614ec2600283615617565b61191b60f11b815260200192915050565b6000614ee0602783615617565b7f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f815266766572666c6f7760c81b602082015260400192915050565b6000614f29601d83615617565b7f696e76616c6964207261746520636f6c6c61746572616c20746f6b656e000000815260200192915050565b6000614f62600a83615617565b6937b7363ca830bab9b2b960b11b815260200192915050565b6000614f88600c83615617565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b6000614fb0602483615617565b7f5369676e6564536166654d6174683a207375627472616374696f6e206f766572815263666c6f7760e01b602082015260400192915050565b6000614ff6601883615617565b7f34303120757365206f66206578697374696e67206c6f616e0000000000000000815260200192915050565b600061502f600183615617565b601b60f91b815260200192915050565b600061504c602083615617565b7f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f815260200192915050565b805161010083019061508a8482614abf565b50602082015161509d6020850182614aa5565b5060408201516150b0604085018261494c565b5060608201516150c3606085018261494c565b5060808201516150d6608085018261494c565b5060a08201516150e960a0850182614abf565b5060c08201516150fc60c0850182614abf565b5060e08201516133b160e0850182614abf565b61494681615649565b60006151248285614955565b6014820191506151348284614aae565b5060010192915050565b600061514a8285614955565b60148201915061515a8284614ac8565b5060200192915050565b60006151708285614ad9565b60048201915061515a8284614ac8565b6000610c618284614b1d565b60208101610e53828461494c565b60208101610e53828461493d565b604081016151b6828561494c565b610c61602083018461494c565b604081016151d1828561494c565b610c61602083018461493d565b606081016151ec828661494c565b6151f9602083018561494c565b61103e6040830184614abf565b60a08101615214828861494c565b615221602083018761494c565b61522e6040830186614abf565b61523b6060830185614abf565b6136bf6080830184614aa5565b60c08101615256828961494c565b615263602083018861494c565b6152706040830187614abf565b61527d6060830186614abf565b61528a6080830185614abf565b61529760a0830184614abf565b979650505050505050565b604081016152b0828561494c565b610c616020830184614abf565b60208082528101610c6181846149b2565b60208082528101610c618184614a0b565b60208101610e538284614aa5565b60208101610e538284614abf565b6101c0810161530a828a614abf565b6153176020830189614abf565b6153246040830188614aa5565b6153316060830187614abf565b61533e6080830186614966565b61534c610100830185614a59565b8181036101a083015261535f8184614ae5565b9998505050505050505050565b60208082528101610c618184614ae5565b60208082528101610e5381614b4c565b60208082528101610e5381614b74565b60208082528101610e5381614b92565b60208082528101610e5381614bb0565b60208082528101610e5381614bf8565b60208082528101610e5381614c31565b60208082528101610e5381614c74565b60208082528101610e5381614c9e565b60208082528101610e5381614cbb565b60208082528101610e5381614cd9565b60208082528101610e5381614cf7565b60208082528101610e5381614d15565b60208082528101610e5381614d58565b60208082528101610e5381614d89565b60208082528101610e5381614da7565b60208082528101610e5381614dc5565b60208082528101610e5381614df0565b60208082528101610e5381614e0e565b60208082528101610e5381614e2c565b60208082528101610e5381614e6f565b60208082528101610e5381614e97565b60208082528101610e5381614eb5565b60208082528101610e5381614ed3565b60208082528101610e5381614f1c565b60208082528101610e5381614f55565b60208082528101610e5381614f7b565b60208082528101610e5381614fa3565b60208082528101610e5381614fe9565b60208082528101610e5381615022565b60208082528101610e538161503f565b604081016152b08285614abf565b606081016155798286614abf565b6151f96020830185614abf565b60208101610e53828461510f565b6040518181016001600160401b03811182821017156155b257600080fd5b604052919050565b60006001600160401b038211156155d057600080fd5b5060209081020190565b60006001600160401b038211156155f057600080fd5b506020601f91909101601f19160190565b60200190565b50600490565b5190565b50600590565b90815260200190565b6000610e538261563d565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b6000610e53826000610e5382615620565b82818337506000910152565b60005b8381101561568757818101518382015260200161566f565b838111156133b15750506000910152565b6000610e53826156ae565b6000610e53826156b9565b6000610e53826156d4565b6000610e53826156ce565b601f01601f191690565b60f81b90565b60601b90565b6156e381615620565b81146123f457600080fd5b6156e38161562b565b6156e381610e6b56fea365627a7a7231582067b5b5f2c3a4d60367dcbf6ad233bf9b3ef127defcbbe64f2de20fbdeeba22f16c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}