{
  "_format": "hh-sol-artifact-1",
  "contractName": "LoanOpenings",
  "sourceName": "contracts/modules/LoanOpenings.sol",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newPrincipal",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newCollateral",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestDuration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralToLoanRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentMargin",
          "type": "uint256"
        }
      ],
      "name": "Borrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegated",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isActive",
          "type": "bool"
        }
      ],
      "name": "DelegatedManagerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeRebatePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "basisPoint",
          "type": "uint256"
        }
      ],
      "name": "EarnReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeRebatePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "basisPoint",
          "type": "uint256"
        }
      ],
      "name": "EarnRewardFail",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "destAmount",
          "type": "uint256"
        }
      ],
      "name": "ExternalSwap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "destAmount",
          "type": "uint256"
        }
      ],
      "name": "LoanSwap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayBorrowingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "interestToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "effectiveInterest",
          "type": "uint256"
        }
      ],
      "name": "PayInterestTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayLendingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayTradingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "prevModuleContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newModuleContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "module",
          "type": "bytes32"
        }
      ],
      "name": "ProtocolModuleContractReplaced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "positionSize",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowedAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "settlementDate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "entryPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "entryLeverage",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentLeverage",
          "type": "uint256"
        }
      ],
      "name": "Trade",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultDeposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultWithdraw",
      "type": "event"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "affiliateFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliateRewardsHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "affiliateTradingTokenFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliatesReferrerBalances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliatesUserReferrer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanParamsId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "isTorqueLoan",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "initialMargin",
          "type": "uint256"
        },
        {
          "internalType": "address[4]",
          "name": "sentAddresses",
          "type": "address[4]"
        },
        {
          "internalType": "uint256[5]",
          "name": "sentValues",
          "type": "uint256[5]"
        },
        {
          "internalType": "bytes",
          "name": "loanDataBytes",
          "type": "bytes"
        }
      ],
      "name": "borrowOrTradeFromPool",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "newPrincipal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newCollateral",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowerNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "borrowerOrders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "createdTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expirationTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "delegatedManagers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeRebatePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feesController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "marginAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isTorqueLoan",
          "type": "bool"
        }
      ],
      "name": "getBorrowAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPrincipal",
          "type": "uint256"
        }
      ],
      "name": "getEstimatedMarginExposure",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "newPrincipal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "marginAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isTorqueLoan",
          "type": "bool"
        }
      ],
      "name": "getRequiredCollateral",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "collateralAmountRequired",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lenderInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "principalTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "paidTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "lenderOrders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "createdTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expirationTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lendingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lendingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lendingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "liquidationIncentivePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loanInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "owedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "depositTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loanParams",
      "outputs": [
        {
          "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"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "loanPoolToUnderlying",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loans",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "loanParamsId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "pendingTradesId",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "principal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateral",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startMargin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startRate",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "lender",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lockedSOVAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "name": "logicTargets",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxDisagreement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxSwapSize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minReferralsToPayout",
      "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": "pause",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "priceFeeds",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rolloverBaseReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rolloverFlexFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "delegated",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "toggle",
          "type": "bool"
        }
      ],
      "name": "setDelegatedManager",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sourceBuffer",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovrynSwapContractRegistryAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "specialRebates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "supportedTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "swapsImpl",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tradingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tradingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tradingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "underlyingToLoanPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userNotFirstTradeFlag",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wrbtcToken",
      "outputs": [
        {
          "internalType": "contract IWrbtcERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526001600055678ac7230489e80000601555670214e8348c4f000060185567013fbe85edc90000601b55674563918244f40000602055674563918244f40000602155674563918244f400006027556127106028556802b5e3af16b1880000602955650f478e084000602b5567016345785d8a0000602c556802b5e3af16b1880000602f5560036035556801158e460913d00000603955348015620000a657600080fd5b506000620000bc6001600160e01b036200011016565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000114565b3390565b614de880620001246000396000f3fe6080604052600436106103815760003560e01c80638dc48ba5116101d1578063cb6eacd111610102578063e8f62764116100a0578063f589a3e71161006f578063f589a3e714610a05578063f6ddc8b314610a1a578063f706b1f214610a2f578063f851a44014610a4457610381565b8063e8f62764146109a6578063edab119f146109bb578063f0e085f5146109d0578063f2fde38b146109e557610381565b8063d473c2da116100dc578063d473c2da14610931578063d485045e14610946578063d67f707714610966578063e762319f1461098657610381565b8063cb6eacd1146108c8578063cd5d808d146108fc578063d288208c1461091c57610381565b8063b30643d91161016f578063ba4861e911610149578063ba4861e91461083b578063bdee453c14610850578063c4a9081514610870578063c4d66de8146108a857610381565b8063b30643d9146107e6578063b7e1524114610806578063b9cffa3e1461082657610381565b8063959083d3116101ab578063959083d314610785578063acc043481461079a578063ae0a8530146107af578063afe84009146107c457610381565b80638dc48ba5146107305780638f32d59b1461075057806392d894f81461076557610381565b80634203e395116102b657806368c4ac261161025457806378d849ed1161022357806378d849ed146106dc5780637a8faeb8146106f15780638456cb59146107065780638da5cb5b1461071b57610381565b806368c4ac26146106725780636e663730146106925780637420ca3e146106b2578063742e6798146106c757610381565b8063569fc1fb11610290578063569fc1fb146105dc578063574442cc1461060b578063585314cf1461062057806362fff3f61461064157610381565b80634203e395146105925780634699f846146105b25780634f28cac2146105c757610381565b80632a324027116103235780633432423c116102fd5780633432423c146105125780633452d2d4146105325780633fca506e146105525780634115a2b61461057257610381565b80632a324027146104c65780632f470764146104db57806333d8991f146104f057610381565b80631b7bde741161035f5780631b7bde741461042c578063218b39c61461045957806324cc57491461047957806325decac0146104a657610381565b8063065d810f146103af5780630676c1b7146103ea57806317548b791461040c575b34801561038d57600080fd5b5060405162461bcd60e51b81526004016103a690614b91565b60405180910390fd5b3480156103bb57600080fd5b506103cf6103ca366004613c4a565b610a59565b6040516103e196959493929190614c86565b60405180910390f35b3480156103f657600080fd5b506103ff610a99565b6040516103e1919061462e565b34801561041857600080fd5b506103ff610427366004613ddd565b610aa8565b34801561043857600080fd5b5061044c610447366004613b14565b610ac3565b6040516103e19190614c41565b34801561046557600080fd5b506103ff610474366004613af6565b610ae0565b34801561048557600080fd5b50610499610494366004613af6565b610afb565b6040516103e191906148ee565b3480156104b257600080fd5b5061044c6104c1366004613b4e565b610b10565b3480156104d257600080fd5b5061044c610b6b565b3480156104e757600080fd5b5061044c610b71565b3480156104fc57600080fd5b5061051061050b366004613cd5565b610b77565b005b34801561051e57600080fd5b506103cf61052d366004613c4a565b610be4565b34801561053e57600080fd5b5061044c61054d366004613af6565b610c24565b34801561055e57600080fd5b5061044c61056d366004613af6565b610c36565b34801561057e57600080fd5b5061049961058d366004613cb6565b610c48565b34801561059e57600080fd5b5061044c6105ad366004613af6565b610c68565b3480156105be57600080fd5b5061044c610c7a565b3480156105d357600080fd5b5061044c610c80565b3480156105e857600080fd5b506105fc6105f7366004613c98565b610c86565b6040516103e193929190614c5d565b34801561061757600080fd5b5061044c610ca7565b61063361062e366004613d22565b610cad565b6040516103e1929190614c4f565b34801561064d57600080fd5b5061066161065c366004613b14565b610eee565b6040516103e1959493929190614c6b565b34801561067e57600080fd5b5061049961068d366004613af6565b610f28565b34801561069e57600080fd5b506103ff6106ad366004613af6565b610f3d565b3480156106be57600080fd5b506103ff610f58565b3480156106d357600080fd5b5061044c610f67565b3480156106e857600080fd5b506103ff610f6d565b3480156106fd57600080fd5b5061044c610f7c565b34801561071257600080fd5b50610499610f82565b34801561072757600080fd5b506103ff610f8b565b34801561073c57600080fd5b506103ff61074b366004613af6565b610f9a565b34801561075c57600080fd5b50610499610fb5565b34801561077157600080fd5b5061044c610780366004613af6565b610fdb565b34801561079157600080fd5b5061044c610fed565b3480156107a657600080fd5b5061044c610ff3565b3480156107bb57600080fd5b5061044c610ff9565b3480156107d057600080fd5b506107d9610fff565b6040516103e191906149f2565b3480156107f257600080fd5b5061044c610801366004613af6565b61100e565b34801561081257600080fd5b5061044c610821366004613af6565b611020565b34801561083257600080fd5b506103ff611032565b34801561084757600080fd5b506103ff611041565b34801561085c57600080fd5b5061044c61086b366004613af6565b611050565b34801561087c57600080fd5b5061089061088b366004613c98565b611062565b6040516103e19c9b9a9998979695949392919061493f565b3480156108b457600080fd5b506105106108c3366004613af6565b6110d4565b3480156108d457600080fd5b506108e86108e3366004613c98565b6111d7565b6040516103e19897969594939291906148fc565b34801561090857600080fd5b5061044c610917366004613b14565b611229565b34801561092857600080fd5b506103ff611246565b34801561093d57600080fd5b5061044c611255565b34801561095257600080fd5b5061044c610961366004613af6565b61125b565b34801561097257600080fd5b5061044c610981366004613bc3565b61126d565b34801561099257600080fd5b5061044c6109a1366004613b4e565b61133b565b3480156109b257600080fd5b506103ff6114af565b3480156109c757600080fd5b5061044c6114be565b3480156109dc57600080fd5b5061044c6114c4565b3480156109f157600080fd5b50610510610a00366004613af6565b6114ca565b348015610a1157600080fd5b5061044c6114fa565b348015610a2657600080fd5b5061044c611500565b348015610a3b57600080fd5b506103ff611506565b348015610a5057600080fd5b506103ff611515565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6005602052600090815260409020546001600160a01b031681565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b60008215610b6257610b258686868686611524565b9050600082610b3c57610b378261165d565b610b45565b610b4582611693565b90508015610b6057610b5d828263ffffffff6116b716565b91505b505b95945050505050565b60185481565b601f5481565b603d5460ff1615610b9a5760405162461bcd60e51b81526004016103a690614a21565b6000838152600660205260409020600a01546001600160a01b03163314610bd35760405162461bcd60e51b81526004016103a690614b51565b610bdf833384846116e3565b505050565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b602a6020526000908152604090205481565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b60155481565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b600080600160005414610cd25760405162461bcd60e51b81526004016103a690614bc1565b6002600055603d5460ff1615610cfa5760405162461bcd60e51b81526004016103a690614a21565b341580610d0657508215155b610d225760405162461bcd60e51b81526004016103a690614bf1565b336000908152602260205260409020546001600160a01b0316610d575760405162461bcd60e51b81526004016103a690614b31565b610d5f6139a1565b5060008a815260076020908152604091829020825161010080820185528254808352600184015460ff811615159584019590955293046001600160a01b039081169482019490945260028201548416606082015260038201549093166080840152600481015460a0840152600581015460c08401526006015460e0830152610df95760405162461bcd60e51b81526004016103a690614b81565b60608101516080820151600091610e169160208a01358c8e611524565b905080610e355760405162461bcd60e51b81526004016103a690614b21565b610ed6828c8c848d8d6004806020026040519081016040528092919082600460200280828437600092019190915250506040805160a081810190925291508f906005908390839080828437600081840152601f19601f8201169050808301925050505050508d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061175892505050565b6001600055909d909c509a5050505050505050505050565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b60355481565b6002546001600160a01b031681565b601e5481565b603d5460ff1681565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b0316610fcc611a7f565b6001600160a01b031614905090565b60176020526000908152604090205481565b602c5481565b602f5481565b60205481565b602d546001600160a01b031681565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b6110dc610fb5565b6110f85760405162461bcd60e51b81526004016103a690614b51565b63585314cf60e01b600081905260056020527f3df489372d475309a1c47de60a9f2a7f9fd0740ddf05bda875d2be32c6722031546001600160a01b0316906111409083611a83565b6111516333d8991f60e01b83611a83565b61116263d67f707760e01b83611a83565b61117262977b2b60e61b83611a83565b61118363e762319f60e01b83611a83565b6b4c6f616e4f70656e696e677360a01b826001600160a01b0316826001600160a01b03167f1420e3a2094d671bc2eb897941fa3d94ffa37f0cb6d530651946250a2151cb7f60405160405180910390a45050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b60006224ea008161129e6907baab4146b63dd00000611292868863ffffffff611afd16565b9063ffffffff611b3716565b905060006112b962015180611292858563ffffffff611afd16565b905060006112cd898363ffffffff611b7916565b905060006112da8261165d565b905080156112f5576112f2828263ffffffff611b7916565b91505b60006113028d8d85611bbb565b9050806113185760009650505050505050611331565b6113288a8263ffffffff6116b716565b96505050505050505b9695505050505050565b60008215610b62578115611365576113628368056bc75e2d6310000063ffffffff6116b716565b92505b8360008361137b576113768261165d565b611384565b61138482611693565b9050801561139f5761139c828263ffffffff611b7916565b91505b866001600160a01b0316886001600160a01b031614156113dd576113d6856112928468056bc75e2d6310000063ffffffff611afd16565b92506114a4565b600254604051630a7549df60e21b815260009182916001600160a01b03909116906329d5277c90611414908c908e9060040161463c565b604080518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114639190810190613e19565b91509150806000146114a15761149e816112928981866114928a68056bc75e2d6310000063ffffffff611afd16565b9063ffffffff611afd16565b94505b50505b505095945050505050565b6014546001600160a01b031681565b601b5481565b60285481565b6114d2610fb5565b6114ee5760405162461bcd60e51b81526004016103a690614b51565b6114f781611c50565b50565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b6000846001600160a01b0316866001600160a01b031614156115645761155d68056bc75e2d63100000611292868663ffffffff611afd16565b905061161f565b600254604051630a7549df60e21b815260009182916001600160a01b03909116906329d5277c9061159b908a908c9060040161463c565b604080518083038186803b1580156115b257600080fd5b505afa1580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115ea9190810190613e19565b915091508160001461161c5761161968056bc75e2d631000006112928761149286838c8863ffffffff611afd16565b92505b50505b81801561162b57508015155b15610b625761133181611651856112928368056bc75e2d6310000063ffffffff611afd16565b9063ffffffff6116b716565b600061168d68056bc75e2d6310000061168160185485611afd90919063ffffffff16565b9063ffffffff611cd216565b92915050565b600061168d68056bc75e2d63100000611681601b5485611afd90919063ffffffff16565b6000828201838110156116dc5760405162461bcd60e51b81526004016103a690614a71565b9392505050565b6000848152600a602090815260408083206001600160a01b038681168086529190935292819020805460ff1916851515179055519085169086907f0eef4f90457a741c97d76fcf13fa231fefdcc7649bdb3cb49157c37111c984339061174a9086906148ee565b60405180910390a450505050565b60008089606001516001600160a01b03168a608001516001600160a01b031614156117955760405162461bcd60e51b81526004016103a690614a91565b8960a001518610156117b95760405162461bcd60e51b81526004016103a690614c21565b60e08a01511515806117ce5750604084015115155b6117ea5760405162461bcd60e51b81526004016103a690614a41565b6000600660006117fd8d8d8b8b8b611d14565b81526020019081526020016000209050600061183b8c838860006005811061182157fe5b602002015189600160200201518a6002602002015161210f565b9050611856818760035b60200201519063ffffffff611b7916565b606087015289156118d8576060860151156118835760405162461bcd60e51b81526004016103a690614af1565b60006118958760046020020151611693565b60808e015160608f01519192509082156118d0576118be8a60016020020151865484848761232b565b6118ca838a6004611845565b60808a01525b505050611931565b60006119098c8e606001518f608001518b6001600481106118f557fe5b602002015160608c0151600080808e6123ca565b60608a015250905061192a818860045b60200201519063ffffffff6116b716565b6080880152505b60408051610180810182528354815260018401546020820152600284015491810191909152600383015460ff16151560608201526004808401546080830152600584015460a0830152600684015460c0830152600784015460e083015260088401546101008301526009840154610120830152600a8401546001600160a01b03908116610140840152600b850154166101608301526119db918e918b908a9060200201518d612528565b6119f75760405162461bcd60e51b81526004016103a690614b61565b60808601516005830154611a0a916116b7565b60058301558915611a34576007820154611a2a904263ffffffff611b7916565b6040870152611a54565b611a4e6f4b3b4ca85a86c47a098a22400000000089611b37565b60408701525b611a618c8389898e61262e565b50505060208301516080909301519299929850919650505050505050565b3390565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b03831690811790915515611ade57611ad8600d6001600160e01b0319841663ffffffff6128fb16565b50611af9565b610bdf600d6001600160e01b0319841663ffffffff61294316565b5050565b600082611b0c5750600061168d565b82820282848281611b1957fe5b04146116dc5760405162461bcd60e51b81526004016103a690614b41565b60006116dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a04565b60006116dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a3b565b60035460048054604051633f24927360e21b81526000936001600160a01b039081169363fc9249cc93611bf8938a938a938a93909116910161471c565b60206040518083038186803b158015611c1057600080fd5b505afa158015611c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c489190810190613dfb565b949350505050565b6001600160a01b038116611c765760405162461bcd60e51b81526004016103a690614a51565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006116dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a67565b60008560200151611d375760405162461bcd60e51b81526004016103a690614bb1565b8251602080850151606086015191850151909190611d536139e5565b89611eaa576001600160a01b0384166000908152602a60209081526040918290208054600101908190558d519251611d929392899289929091016145da565b60408051601f19818403018152918152815160209283012060008181526006909352912054909a5015611dd75760405162461bcd60e51b81526004016103a690614ae1565b5060408051610180810182528a81528b5160208201526000918101829052600160608201526080810183905260a081018290524260c082015260e0810182905261010081018a90526101208101919091526001600160a01b038085166101408301528516610160820152611e52600f8b63ffffffff6128fb16565b506001600160a01b0385166000908152601160205260409020611e7b908b63ffffffff6128fb16565b506001600160a01b0384166000908152601260205260409020611ea4908b63ffffffff6128fb16565b5061202b565b5060008981526006602081815260409283902083516101808101855281548152600182015492810192909252600281015493820193909352600383015460ff161580156060830181905260048501546080840152600585015460a08401529284015460c0830152600784015460e083015260088401546101008301526009840154610120830152600a8401546001600160a01b03908116610140840152600b9094015490931661016082015291611f6457508060e0015142105b611f805760405162461bcd60e51b81526004016103a690614b01565b836001600160a01b03168161014001516001600160a01b031614611fb65760405162461bcd60e51b81526004016103a690614a61565b846001600160a01b03168161016001516001600160a01b031614611fec5760405162461bcd60e51b81526004016103a690614ac1565b8a516020820151146120105760405162461bcd60e51b81526004016103a690614a11565b6080810151612025908363ffffffff6116b716565b60808201525b6001600160a01b03831615612047576120478a858560016116e3565b60008a81526006602081815260409283902084518155908401516001820155918301516002830155606083015160038301805460ff19169115159190911790556080830151600483015560a0830151600583015560c08301519082015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820180546001600160a01b03199081166001600160a01b039384161790915561016090930151600b90920180549093169116179055509698975050505050505050565b600b8401546060860151600091612131916001600160a01b0390911690612ab1565b84546000818152600c60209081526040808320600b808b01546001600160a01b03908116865290845282852060608d0180518316875294529190932060e08b0151925160808c0151600a8c0154959692956121929488949392911642612b8f565b6000811580156121a55750600789015415155b156121d3576121d0620151806112928660000154611492428e60070154611b7990919063ffffffff16565b90505b60006121f36907baab4146b63dd000006112928a8c63ffffffff611afd16565b8554909150612208908263ffffffff6116b716565b8555600184015461221f908263ffffffff6116b716565b60018501558261228e57845461224c90429061165190611292620151806114928d8963ffffffff6116b716565b60078b01819055612263904263ffffffff611b7916565b9250610e1083116122865760405162461bcd60e51b81526004016103a690614a81565b8695506122d2565b60078a01546122ad576122a7428463ffffffff6116b716565b60078b01555b6122cf6201518061129283611492428f60070154611b7990919063ffffffff16565b95505b60018501546122e7908763ffffffff6116b716565b600186015583546122fe908963ffffffff6116b716565b84556002840154612315908763ffffffff6116b716565b8460020181905550505050505095945050505050565b80156123c3576001600160a01b0383166000908152601c602052604090205461235a908263ffffffff6116b716565b6001600160a01b038085166000818152601c6020526040908190209390935591518692918816907ffb6c38ae4fdd498b3a5003f02ca4ca5340dfedb36b1b100c679eb60633b2c0a7906123ae908690614c41565b60405180910390a46123c38585858585612bdd565b5050505050565b6040805160a0810182526001600160a01b03808b16825289811660208084019190915230838501819052606080850191909152918a1660808401528351918201845288825281018790529182018590526000918291829161242f91908e888886612f28565b909350915061243e8b8361314a565b600254602754604051631e2c62d360e01b81526001600160a01b0390921691631e2c62d391612477918f918f9188918a91600401614779565b60206040518083038186803b15801561248f57600080fd5b505afa1580156124a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124c79190810190613dfb565b9050896001600160a01b03168b6001600160a01b03168d7fb4eb3c9b62efcce7021cba5fd9cd0c44df91c2272806ccc5e57df7c912e8d7168c8688604051612511939291906148d3565b60405180910390a499509950999650505050505050565b600061255068056bc75e2d631000006112928468055005f0c61448000063ffffffff611afd16565b9150818310156126225760a08501511561261a5760025460608701516080808901519088015160a089015160405163f80b25fb60e01b81526000956001600160a01b03169463f80b25fb946125ad94919390928c90600401614779565b60206040518083038186803b1580156125c557600080fd5b505afa1580156125d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125fd9190810190613dfb565b905082612610858363ffffffff6116b716565b1015915050610b62565b506000610b62565b50600195945050505050565b6002546060860151608087015160048088015460058901546040516317f8680960e11b815260009687966001600160a01b0390911695632ff0d01295612678959294919301614751565b604080518083038186803b15801561268f57600080fd5b505afa1580156126a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126c79190810190613e19565b915091508660c0015182116126ee5760405162461bcd60e51b81526004016103a690614b71565b428660060154141561284e576002546060880151608089015160405163524efd4b60e01b81526000936001600160a01b03169263524efd4b926127339260040161463c565b60206040518083038186803b15801561274b57600080fd5b505afa15801561275f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127839190810190613dfb565b60025460808a015160608b015160405163524efd4b60e01b81529394506000936001600160a01b039093169263524efd4b926127c392909160040161463c565b60206040518083038186803b1580156127db57600080fd5b505afa1580156127ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128139190810190613dfb565b90506000612827838363ffffffff611afd16565b90508561284357606087015161283e908290611b37565b612845565b835b60098a01555050505b60408051610180810182528754815260018801546020820152600288015491810191909152600387015460ff161515606082015260048701546080820152600587015460a0820152600687015460c0820152600787015460e082015260088701546101008201526009870154610120820152600a8701546001600160a01b03908116610140830152600b880154166101608201526128f29088908787858789613218565b50505050505050565b60006129078383613365565b61293b575060018083018054808301808355600092835260208084209092018590558483529085905260409091205561168d565b50600061168d565b600061294f8383613365565b1561293b57600082815260208490526040902054600184015460001991820191018082146129c757600085600101828154811061298857fe5b90600052602060002001549050808660010184815481106129a557fe5b6000918252602080832090910192909255918252869052604090206001830190555b600084815260208690526040812055600185018054806129e357fe5b6001900381819060005260206000200160009055905560019250505061168d565b60008183612a255760405162461bcd60e51b81526004016103a69190614a00565b506000838581612a3157fe5b0495945050505050565b60008184841115612a5f5760405162461bcd60e51b81526004016103a69190614a00565b505050900390565b60008183612a885760405162461bcd60e51b81526004016103a69190614a00565b5083612a96575060006116dc565b6000836001860381612aa457fe5b0460010195945050505050565b6001600160a01b038083166000908152600b602090815260408083209385168352929052908120600181015490919015801590612af15750600482015415155b15612b8257612b1c620151806112928460010154611492866004015442611b7990919063ffffffff16565b4260048401556002830154909150811115612b38575060028101545b8015612b7d576003820154612b53908263ffffffff6116b716565b60038301556002820154612b6d908263ffffffff611b7916565b6002830155612b7d84848361337a565b612b89565b4260048301555b50505050565b6000612bc56a07259756a8d619980000006112926015546114928b600001546114928d6002015489611b7990919063ffffffff16565b60028801839055905080156128f2576128f283878787855b602f546002546001600160a01b038581166000908152603c602090815260408083208885168452909152812054909392919091169015612c40576001600160a01b038087166000908152603c602090815260408083209389168352929052205491505b6037546000906060906001600160a01b038085169163d138f9a160e01b918b9116612c7e68056bc75e2d631000006112928c8b63ffffffff611afd16565b604051602401612c90939291906146f4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612cce9190614622565b600060405180830381855afa9150503d8060008114612d09576040519150601f19603f3d011682016040523d82523d6000602084013e612d0e565b606091505b50915091506001821415612d2457602081015194505b8415612f1c5760375460385460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612d609291169089906004016148b8565b602060405180830381600087803b158015612d7a57600080fd5b505af1158015612d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612db29190810190613c7a565b50603854603f546040516000926001600160a01b031691612dd9918e918a916024016148d3565b60408051601f198184030181529181526020820180516001600160e01b0316630efe6a8b60e01b17905251612e0e9190614622565b6000604051808303816000865af19150503d8060008114612e4b576040519150601f19603f3d011682016040523d82523d6000602084013e612e50565b606091505b505090508015612ec757601f54612e6d908763ffffffff6116b716565b601f55603754603f546040518c926001600160a01b0390811692908f16917ff41c644671512f1cda76abfe6038e3d7d526c1377a5a8c692f81703901db215091612eba918b918d91614c5d565b60405180910390a4612f1a565b603754603f546040518c926001600160a01b0390811692908f16917f483f67ea49f76ac15e15bbad68b52788ca47d50aef1e4acfe95e5e307e71081291612f11918b918d91614c5d565b60405180910390a45b505b50505050505050505050565b84516000908190151580612f3f5750602087015115155b612f5b5760405162461bcd60e51b81526004016103a690614ba1565b6020870151612f6c57865160208801525b602087015187511115612f915760405162461bcd60e51b81526004016103a690614ad1565b60008060008761304b5760408a015161300d578515612fc257612fbb8a60005b602002015161341f565b9050612fd6565b612fd38a60005b602002015161165d565b90505b80156130085760808b01518b51612ff991908b908e60015b602002015185613443565b613005818b6000611845565b8a525b61304b565b85156130255761301e8a6002612fb1565b9050613033565b6130308a6002612fc9565b90505b801561304b57613045818b6002611919565b60408b01525b86511561306a5760405162461bcd60e51b81526004016103a690614bd1565b6130748b8b613593565b60408c015191945092506130c057895182146130a25760405162461bcd60e51b81526004016103a690614c11565b80156130bb576130b8828263ffffffff6116b716565b91505b61313a565b60208a01518211156130e45760405162461bcd60e51b81526004016103a690614ab1565b60408a01518310156131085760405162461bcd60e51b81526004016103a690614a31565b801561313a5760808b015160208c015161312791908b908e6000612fee565b613137838263ffffffff611b7916565b92505b5090999098509650505050505050565b6029548015610bdf57602d546000906001600160a01b03858116911614156131735750816131f8565b600254604051635967aa7560e11b81526001600160a01b039091169063b2cf54ea906131a590879087906004016148b8565b60206040518083038186803b1580156131bd57600080fd5b505afa1580156131d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131f59190810190613dfb565b90505b81811115612b895760405162461bcd60e51b81526004016103a690614b11565b801561329b5785518551602087015160608a015160808b01516001600160a01b0393841693909216917f7bd8cbb7ba34b33004f3deda0fd36c92fc0360acbd97843360037b467a538f909190896001602002015160808b01518b516040808e0151905161328e969594939291908e908e906147bb565b60405180910390a46128f2565b6132b56f4b3b4ca85a86c47a098a22400000000083611b37565b865190925085600060200201516001600160a01b031686600160200201516001600160a01b03167ff640c1cfe1a912a0b0152b5a542e5c2403142eed75b06cde526cee54b1580e5c8a608001518b606001518960046005811061331457fe5b60200201518a600160200201518b6000602002015160e08f01518d600360200201518e600260200201518d60405161335499989796959493929190614832565b60405180910390a450505050505050565b60009081526020919091526040902054151590565b600061339e68056bc75e2d6310000061129260155485611afd90919063ffffffff16565b90506133ab8484836136a5565b6133c583856133c0858563ffffffff611b7916565b613733565b6001600160a01b038085169084167f220e66e3e759e1382aa86cd8af5abca05ebf3ad564f223ae62d977678337272a613404858563ffffffff611b7916565b6040516134119190614c41565b60405180910390a350505050565b600061168d68056bc75e2d63100000611681603e5485611afd90919063ffffffff16565b80801561358b576001600160a01b0386811660009081526033602052604090205416156134f9576001600160a01b038087166000908152603360205260409020546134919116878684613796565b50506134f66134b868056bc75e2d6310000061129260395485611afd90919063ffffffff16565b6134ea6134dd68056bc75e2d6310000061129260205487611afd90919063ffffffff16565b849063ffffffff611b7916565b9063ffffffff611b7916565b90505b6001600160a01b038416600090815260196020526040902054613522908263ffffffff6116b716565b6001600160a01b03808616600081815260196020526040908190209390935591518792918916907fb23479169712c443e6b00fb0cec3506a5f5926f541df4243d313e11c8c5c71ed90613576908690614c41565b60405180910390a461358b8686868686612bdd565b505050505050565b815160208084015160408086015160608781015187519588015188850151945160009889989497630957ba1160e21b976135da979296919592949293919291602401614657565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491519092506000916001600160a01b03169061362c908490614622565b600060405180830381855af49150503d8060008114613667576040519150601f19603f3d011682016040523d82523d6000602084013e61366c565b606091505b50925090508061368e5760405162461bcd60e51b81526004016103a690614c01565b602082015193506040820151925050509250929050565b8015610bdf576001600160a01b0382166000908152601660205260409020546136d4908263ffffffff6116b716565b6001600160a01b0380841660008181526016602052604090819020939093559151908516907f40a75ae5f7a5336e75f7c7977e12c4b46a9ac0f30de01a2d5b6c1a4f4af6358790613726908590614c41565b60405180910390a3505050565b8015610bdf576137536001600160a01b038416838363ffffffff61382f16565b816001600160a01b0316836001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a1836040516137269190614c41565b6031546040516306a688ff60e11b815260009182916001600160a01b0390911690630d4d11fe906137d19089908990899089906004016146bf565b6040805180830381600087803b1580156137ea57600080fd5b505af11580156137fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506138229190810190613e19565b9097909650945050505050565b604051610bdf90849063a9059cbb60e01b9061385190869086906024016148b8565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613895826001600160a01b0316613968565b6138b15760405162461bcd60e51b81526004016103a690614c31565b60006060836001600160a01b0316836040516138cd9190614622565b6000604051808303816000865af19150503d806000811461390a576040519150601f19603f3d011682016040523d82523d6000602084013e61390f565b606091505b5091509150816139315760405162461bcd60e51b81526004016103a690614aa1565b805115612b89578080602001905161394c9190810190613c7a565b612b895760405162461bcd60e51b81526004016103a690614be1565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611c48575050151592915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b803561168d81614d76565b806080810183101561168d57600080fd5b8060a0810183101561168d57600080fd5b803561168d81614d8a565b805161168d81614d8a565b803561168d81614d93565b803561168d81614d9c565b60008083601f840112613ab457600080fd5b50813567ffffffffffffffff811115613acc57600080fd5b602083019150836001820283011115613ae457600080fd5b9250929050565b805161168d81614d93565b600060208284031215613b0857600080fd5b6000611c488484613a49565b60008060408385031215613b2757600080fd5b6000613b338585613a49565b9250506020613b4485828601613a49565b9150509250929050565b600080600080600060a08688031215613b6657600080fd5b6000613b728888613a49565b9550506020613b8388828901613a49565b9450506040613b9488828901613a8c565b9350506060613ba588828901613a8c565b9250506080613bb688828901613a76565b9150509295509295909350565b60008060008060008060c08789031215613bdc57600080fd5b6000613be88989613a49565b9650506020613bf989828a01613a49565b9550506040613c0a89828a01613a8c565b9450506060613c1b89828a01613a8c565b9350506080613c2c89828a01613a8c565b92505060a0613c3d89828a01613a8c565b9150509295509295509295565b60008060408385031215613c5d57600080fd5b6000613c698585613a49565b9250506020613b4485828601613a8c565b600060208284031215613c8c57600080fd5b6000611c488484613a81565b600060208284031215613caa57600080fd5b6000611c488484613a8c565b60008060408385031215613cc957600080fd5b6000613b338585613a8c565b600080600060608486031215613cea57600080fd5b6000613cf68686613a8c565b9350506020613d0786828701613a49565b9250506040613d1886828701613a76565b9150509250925092565b6000806000806000806000806101c0898b031215613d3f57600080fd5b6000613d4b8b8b613a8c565b9850506020613d5c8b828c01613a8c565b9750506040613d6d8b828c01613a76565b9650506060613d7e8b828c01613a8c565b9550506080613d8f8b828c01613a54565b945050610100613da18b828c01613a65565b9350506101a089013567ffffffffffffffff811115613dbf57600080fd5b613dcb8b828c01613aa2565b92509250509295985092959890939650565b600060208284031215613def57600080fd5b6000611c488484613a97565b600060208284031215613e0d57600080fd5b6000611c488484613aeb565b60008060408385031215613e2c57600080fd5b6000613e388585613aeb565b9250506020613b4485828601613aeb565b613e5281614cf2565b82525050565b613e52613e6482614cf2565b614d55565b613e5281614cfd565b613e5281614d02565b613e52613e8782614d02565b614d02565b6000613e9782614ce0565b613ea18185614ce4565b9350613eb1818560208601614d29565b9290920192915050565b613e5281614d1e565b6000613ecf82614ce0565b613ed98185614ce9565b9350613ee9818560208601614d29565b613ef281614d66565b9093019392505050565b6000613f09601383614ce9565b720d8dec2dca0c2e4c2dae640dad2e6dac2e8c6d606b1b815260200192915050565b6000613f38600683614ce9565b6514185d5cd95960d21b815260200192915050565b6000613f5a601b83614ce9565b7f696e73756666696369656e742073776170206c69717569646974790000000000815260200192915050565b6000613f93601083614ce9565b6f1a5b9d985b1a59081a5b9d195c995cdd60821b815260200192915050565b6000613fbf602683614ce9565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000614007601183614ce9565b700c4dee4e4deeecae440dad2e6dac2e8c6d607b1b815260200192915050565b6000614034601b83614ce9565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061406d600e83614ce9565b6d1b1bd85b881d1bdbc81cda1bdc9d60921b815260200192915050565b6000614097601583614ce9565b740c6ded8d8c2e8cae4c2d85ed8dec2dc40dac2e8c6d605b1b815260200192915050565b60006140c8602083614ce9565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000614101601383614ce9565b72737761702066696c6c20746f6f206c6172676560681b815260200192915050565b6000614130600f83614ce9565b6e0d8cadcc8cae440dad2e6dac2e8c6d608b1b815260200192915050565b600061415b601c83614ce9565b7f736f75726365416d6f756e74206c6172676572207468616e206d617800000000815260200192915050565b6000614194600b83614ce9565b6a6c6f616e2065786973747360a81b815260200192915050565b60006141bb601283614ce9565b7139bab938363ab9903637b0b7103a37b5b2b760711b815260200192915050565b60006141e9600e83614ce9565b6d1b1bd85b881a185cc8195b99195960921b815260200192915050565b6000614213600e83614ce9565b6d7377617020746f6f206c6172676560901b815260200192915050565b600061423d600f83614ce9565b6e0636f6c6c61746572616c206973203608c1b815260200192915050565b6000614268600e83614ce9565b6d1b9bdd08185d5d1a1bdc9a5e995960921b815260200192915050565b6000614292602183614ce9565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006142d5600c83614ce9565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006142fd601783614ce9565b7f636f6c6c61746572616c20696e73756666696369656e74000000000000000000815260200192915050565b6000614336601283614ce9565b713ab73432b0b63a343c903837b9b4ba34b7b760711b815260200192915050565b6000614364601583614ce9565b746c6f616e506172616d73206e6f742065786973747360581b815260200192915050565b6000614395601483614ce9565b7319985b1b189858dac81b9bdd08185b1b1bddd95960621b815260200192915050565b60006143c5602e83614ce9565b7f6d696e206f72206d617820736f7572636520746f6b656e20616d6f756e74206e81526d1959591cc81d1bc81899481cd95d60921b602082015260400192915050565b6000614415601383614ce9565b721b1bd85b94185c985b5cc8191a5cd8589b1959606a1b815260200192915050565b6000614444600c83614ce9565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b600061446c600d83614ce9565b6c696e76616c696420737461746560981b815260200192915050565b6000614495602a83614ce9565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006144e1602183614ce9565b7f6c6f616e446174614279746573207265717569726564207769746820657468658152603960f91b602082015260400192915050565b6000614524600b83614ce9565b6a1cddd85c0819985a5b195960aa1b815260200192915050565b600061454b601683614ce9565b751cddd85c081d1bdbc81b185c99d9481d1bc8199a5b1b60521b815260200192915050565b600061457d601583614ce9565b74696e697469616c4d617267696e20746f6f206c6f7760581b815260200192915050565b60006145ae601f83614ce9565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b60006145e68287613e7b565b6020820191506145f68286613e58565b6014820191506146068285613e58565b6014820191506146168284613e7b565b50602001949350505050565b60006116dc8284613e8c565b6020810161168d8284613e49565b6040810161464a8285613e49565b6116dc6020830184613e49565b60e08101614665828a613e49565b6146726020830189613e49565b61467f6040830188613e49565b61468c6060830187613e49565b6146996080830186613e72565b6146a660a0830185613e72565b6146b360c0830184613e72565b98975050505050505050565b608081016146cd8287613e49565b6146da6020830186613e49565b6146e76040830185613e49565b610b626060830184613e72565b606081016147028286613e49565b61470f6020830185613e49565b611c486040830184613e72565b6080810161472a8287613e49565b6147376020830186613e49565b6147446040830185613e72565b610b626060830184613e49565b6080810161475f8287613e49565b61476c6020830186613e49565b6146e76040830185613e72565b60a081016147878288613e49565b6147946020830187613e49565b6147a16040830186613e72565b6147ae6060830185613e72565b6113316080830184613e72565b61010081016147ca828b613e49565b6147d7602083018a613e49565b6147e46040830189613e72565b6147f16060830188613e72565b6147fe6080830187613e72565b61480b60a0830186613e72565b61481860c0830185613e72565b61482560e0830184613e72565b9998505050505050505050565b6101208101614841828c613e49565b61484e602083018b613e49565b61485b604083018a613e72565b6148686060830189613e72565b6148756080830188613e72565b61488260a0830187613e72565b61488f60c0830186613e72565b61489c60e0830185613e72565b6148aa610100830184613e72565b9a9950505050505050505050565b604081016148c68285613e49565b6116dc6020830184613e72565b606081016148e18286613e49565b61470f6020830185613e72565b6020810161168d8284613e69565b610100810161490b828b613e72565b614918602083018a613e69565b6149256040830189613e49565b6149326060830188613e49565b6147fe6080830187613e49565b610180810161494e828f613e72565b61495b602083018e613e72565b614968604083018d613e72565b614975606083018c613e69565b614982608083018b613e72565b61498f60a083018a613e72565b61499c60c0830189613e72565b6149a960e0830188613e72565b6149b7610100830187613e72565b6149c5610120830186613e72565b6149d3610140830185613e49565b6149e1610160830184613e49565b9d9c50505050505050505050505050565b6020810161168d8284613ebb565b602080825281016116dc8184613ec4565b6020808252810161168d81613efc565b6020808252810161168d81613f2b565b6020808252810161168d81613f4d565b6020808252810161168d81613f86565b6020808252810161168d81613fb2565b6020808252810161168d81613ffa565b6020808252810161168d81614027565b6020808252810161168d81614060565b6020808252810161168d8161408a565b6020808252810161168d816140bb565b6020808252810161168d816140f4565b6020808252810161168d81614123565b6020808252810161168d8161414e565b6020808252810161168d81614187565b6020808252810161168d816141ae565b6020808252810161168d816141dc565b6020808252810161168d81614206565b6020808252810161168d81614230565b6020808252810161168d8161425b565b6020808252810161168d81614285565b6020808252810161168d816142c8565b6020808252810161168d816142f0565b6020808252810161168d81614329565b6020808252810161168d81614357565b6020808252810161168d81614388565b6020808252810161168d816143b8565b6020808252810161168d81614408565b6020808252810161168d81614437565b6020808252810161168d8161445f565b6020808252810161168d81614488565b6020808252810161168d816144d4565b6020808252810161168d81614517565b6020808252810161168d8161453e565b6020808252810161168d81614570565b6020808252810161168d816145a1565b6020810161168d8284613e72565b604081016148c68285613e72565b606081016148e18286613e72565b60a08101614c798288613e72565b6147946020830187613e72565b60c08101614c948289613e72565b614ca16020830188613e72565b614cae6040830187613e72565b614cbb6060830186613e72565b614cc86080830185613e72565b614cd560a0830184613e72565b979650505050505050565b5190565b919050565b90815260200190565b600061168d82614d12565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b600061168d82614cf2565b60005b83811015614d44578181015183820152602001614d2c565b83811115612b895750506000910152565b600061168d82600061168d82614d70565b601f01601f191690565b60601b90565b614d7f81614cf2565b81146114f757600080fd5b614d7f81614cfd565b614d7f81614d02565b614d7f81614d0556fea365627a7a723158207bc20adaee0729fbf3a580fbbe72ecda0826701f4cd0162938fc39fb5b20477d6c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x6080604052600436106103815760003560e01c80638dc48ba5116101d1578063cb6eacd111610102578063e8f62764116100a0578063f589a3e71161006f578063f589a3e714610a05578063f6ddc8b314610a1a578063f706b1f214610a2f578063f851a44014610a4457610381565b8063e8f62764146109a6578063edab119f146109bb578063f0e085f5146109d0578063f2fde38b146109e557610381565b8063d473c2da116100dc578063d473c2da14610931578063d485045e14610946578063d67f707714610966578063e762319f1461098657610381565b8063cb6eacd1146108c8578063cd5d808d146108fc578063d288208c1461091c57610381565b8063b30643d91161016f578063ba4861e911610149578063ba4861e91461083b578063bdee453c14610850578063c4a9081514610870578063c4d66de8146108a857610381565b8063b30643d9146107e6578063b7e1524114610806578063b9cffa3e1461082657610381565b8063959083d3116101ab578063959083d314610785578063acc043481461079a578063ae0a8530146107af578063afe84009146107c457610381565b80638dc48ba5146107305780638f32d59b1461075057806392d894f81461076557610381565b80634203e395116102b657806368c4ac261161025457806378d849ed1161022357806378d849ed146106dc5780637a8faeb8146106f15780638456cb59146107065780638da5cb5b1461071b57610381565b806368c4ac26146106725780636e663730146106925780637420ca3e146106b2578063742e6798146106c757610381565b8063569fc1fb11610290578063569fc1fb146105dc578063574442cc1461060b578063585314cf1461062057806362fff3f61461064157610381565b80634203e395146105925780634699f846146105b25780634f28cac2146105c757610381565b80632a324027116103235780633432423c116102fd5780633432423c146105125780633452d2d4146105325780633fca506e146105525780634115a2b61461057257610381565b80632a324027146104c65780632f470764146104db57806333d8991f146104f057610381565b80631b7bde741161035f5780631b7bde741461042c578063218b39c61461045957806324cc57491461047957806325decac0146104a657610381565b8063065d810f146103af5780630676c1b7146103ea57806317548b791461040c575b34801561038d57600080fd5b5060405162461bcd60e51b81526004016103a690614b91565b60405180910390fd5b3480156103bb57600080fd5b506103cf6103ca366004613c4a565b610a59565b6040516103e196959493929190614c86565b60405180910390f35b3480156103f657600080fd5b506103ff610a99565b6040516103e1919061462e565b34801561041857600080fd5b506103ff610427366004613ddd565b610aa8565b34801561043857600080fd5b5061044c610447366004613b14565b610ac3565b6040516103e19190614c41565b34801561046557600080fd5b506103ff610474366004613af6565b610ae0565b34801561048557600080fd5b50610499610494366004613af6565b610afb565b6040516103e191906148ee565b3480156104b257600080fd5b5061044c6104c1366004613b4e565b610b10565b3480156104d257600080fd5b5061044c610b6b565b3480156104e757600080fd5b5061044c610b71565b3480156104fc57600080fd5b5061051061050b366004613cd5565b610b77565b005b34801561051e57600080fd5b506103cf61052d366004613c4a565b610be4565b34801561053e57600080fd5b5061044c61054d366004613af6565b610c24565b34801561055e57600080fd5b5061044c61056d366004613af6565b610c36565b34801561057e57600080fd5b5061049961058d366004613cb6565b610c48565b34801561059e57600080fd5b5061044c6105ad366004613af6565b610c68565b3480156105be57600080fd5b5061044c610c7a565b3480156105d357600080fd5b5061044c610c80565b3480156105e857600080fd5b506105fc6105f7366004613c98565b610c86565b6040516103e193929190614c5d565b34801561061757600080fd5b5061044c610ca7565b61063361062e366004613d22565b610cad565b6040516103e1929190614c4f565b34801561064d57600080fd5b5061066161065c366004613b14565b610eee565b6040516103e1959493929190614c6b565b34801561067e57600080fd5b5061049961068d366004613af6565b610f28565b34801561069e57600080fd5b506103ff6106ad366004613af6565b610f3d565b3480156106be57600080fd5b506103ff610f58565b3480156106d357600080fd5b5061044c610f67565b3480156106e857600080fd5b506103ff610f6d565b3480156106fd57600080fd5b5061044c610f7c565b34801561071257600080fd5b50610499610f82565b34801561072757600080fd5b506103ff610f8b565b34801561073c57600080fd5b506103ff61074b366004613af6565b610f9a565b34801561075c57600080fd5b50610499610fb5565b34801561077157600080fd5b5061044c610780366004613af6565b610fdb565b34801561079157600080fd5b5061044c610fed565b3480156107a657600080fd5b5061044c610ff3565b3480156107bb57600080fd5b5061044c610ff9565b3480156107d057600080fd5b506107d9610fff565b6040516103e191906149f2565b3480156107f257600080fd5b5061044c610801366004613af6565b61100e565b34801561081257600080fd5b5061044c610821366004613af6565b611020565b34801561083257600080fd5b506103ff611032565b34801561084757600080fd5b506103ff611041565b34801561085c57600080fd5b5061044c61086b366004613af6565b611050565b34801561087c57600080fd5b5061089061088b366004613c98565b611062565b6040516103e19c9b9a9998979695949392919061493f565b3480156108b457600080fd5b506105106108c3366004613af6565b6110d4565b3480156108d457600080fd5b506108e86108e3366004613c98565b6111d7565b6040516103e19897969594939291906148fc565b34801561090857600080fd5b5061044c610917366004613b14565b611229565b34801561092857600080fd5b506103ff611246565b34801561093d57600080fd5b5061044c611255565b34801561095257600080fd5b5061044c610961366004613af6565b61125b565b34801561097257600080fd5b5061044c610981366004613bc3565b61126d565b34801561099257600080fd5b5061044c6109a1366004613b4e565b61133b565b3480156109b257600080fd5b506103ff6114af565b3480156109c757600080fd5b5061044c6114be565b3480156109dc57600080fd5b5061044c6114c4565b3480156109f157600080fd5b50610510610a00366004613af6565b6114ca565b348015610a1157600080fd5b5061044c6114fa565b348015610a2657600080fd5b5061044c611500565b348015610a3b57600080fd5b506103ff611506565b348015610a5057600080fd5b506103ff611515565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6005602052600090815260409020546001600160a01b031681565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b60008215610b6257610b258686868686611524565b9050600082610b3c57610b378261165d565b610b45565b610b4582611693565b90508015610b6057610b5d828263ffffffff6116b716565b91505b505b95945050505050565b60185481565b601f5481565b603d5460ff1615610b9a5760405162461bcd60e51b81526004016103a690614a21565b6000838152600660205260409020600a01546001600160a01b03163314610bd35760405162461bcd60e51b81526004016103a690614b51565b610bdf833384846116e3565b505050565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b602a6020526000908152604090205481565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b60155481565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b600080600160005414610cd25760405162461bcd60e51b81526004016103a690614bc1565b6002600055603d5460ff1615610cfa5760405162461bcd60e51b81526004016103a690614a21565b341580610d0657508215155b610d225760405162461bcd60e51b81526004016103a690614bf1565b336000908152602260205260409020546001600160a01b0316610d575760405162461bcd60e51b81526004016103a690614b31565b610d5f6139a1565b5060008a815260076020908152604091829020825161010080820185528254808352600184015460ff811615159584019590955293046001600160a01b039081169482019490945260028201548416606082015260038201549093166080840152600481015460a0840152600581015460c08401526006015460e0830152610df95760405162461bcd60e51b81526004016103a690614b81565b60608101516080820151600091610e169160208a01358c8e611524565b905080610e355760405162461bcd60e51b81526004016103a690614b21565b610ed6828c8c848d8d6004806020026040519081016040528092919082600460200280828437600092019190915250506040805160a081810190925291508f906005908390839080828437600081840152601f19601f8201169050808301925050505050508d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061175892505050565b6001600055909d909c509a5050505050505050505050565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b60355481565b6002546001600160a01b031681565b601e5481565b603d5460ff1681565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b0316610fcc611a7f565b6001600160a01b031614905090565b60176020526000908152604090205481565b602c5481565b602f5481565b60205481565b602d546001600160a01b031681565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b6110dc610fb5565b6110f85760405162461bcd60e51b81526004016103a690614b51565b63585314cf60e01b600081905260056020527f3df489372d475309a1c47de60a9f2a7f9fd0740ddf05bda875d2be32c6722031546001600160a01b0316906111409083611a83565b6111516333d8991f60e01b83611a83565b61116263d67f707760e01b83611a83565b61117262977b2b60e61b83611a83565b61118363e762319f60e01b83611a83565b6b4c6f616e4f70656e696e677360a01b826001600160a01b0316826001600160a01b03167f1420e3a2094d671bc2eb897941fa3d94ffa37f0cb6d530651946250a2151cb7f60405160405180910390a45050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b60006224ea008161129e6907baab4146b63dd00000611292868863ffffffff611afd16565b9063ffffffff611b3716565b905060006112b962015180611292858563ffffffff611afd16565b905060006112cd898363ffffffff611b7916565b905060006112da8261165d565b905080156112f5576112f2828263ffffffff611b7916565b91505b60006113028d8d85611bbb565b9050806113185760009650505050505050611331565b6113288a8263ffffffff6116b716565b96505050505050505b9695505050505050565b60008215610b62578115611365576113628368056bc75e2d6310000063ffffffff6116b716565b92505b8360008361137b576113768261165d565b611384565b61138482611693565b9050801561139f5761139c828263ffffffff611b7916565b91505b866001600160a01b0316886001600160a01b031614156113dd576113d6856112928468056bc75e2d6310000063ffffffff611afd16565b92506114a4565b600254604051630a7549df60e21b815260009182916001600160a01b03909116906329d5277c90611414908c908e9060040161463c565b604080518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114639190810190613e19565b91509150806000146114a15761149e816112928981866114928a68056bc75e2d6310000063ffffffff611afd16565b9063ffffffff611afd16565b94505b50505b505095945050505050565b6014546001600160a01b031681565b601b5481565b60285481565b6114d2610fb5565b6114ee5760405162461bcd60e51b81526004016103a690614b51565b6114f781611c50565b50565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b6000846001600160a01b0316866001600160a01b031614156115645761155d68056bc75e2d63100000611292868663ffffffff611afd16565b905061161f565b600254604051630a7549df60e21b815260009182916001600160a01b03909116906329d5277c9061159b908a908c9060040161463c565b604080518083038186803b1580156115b257600080fd5b505afa1580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115ea9190810190613e19565b915091508160001461161c5761161968056bc75e2d631000006112928761149286838c8863ffffffff611afd16565b92505b50505b81801561162b57508015155b15610b625761133181611651856112928368056bc75e2d6310000063ffffffff611afd16565b9063ffffffff6116b716565b600061168d68056bc75e2d6310000061168160185485611afd90919063ffffffff16565b9063ffffffff611cd216565b92915050565b600061168d68056bc75e2d63100000611681601b5485611afd90919063ffffffff16565b6000828201838110156116dc5760405162461bcd60e51b81526004016103a690614a71565b9392505050565b6000848152600a602090815260408083206001600160a01b038681168086529190935292819020805460ff1916851515179055519085169086907f0eef4f90457a741c97d76fcf13fa231fefdcc7649bdb3cb49157c37111c984339061174a9086906148ee565b60405180910390a450505050565b60008089606001516001600160a01b03168a608001516001600160a01b031614156117955760405162461bcd60e51b81526004016103a690614a91565b8960a001518610156117b95760405162461bcd60e51b81526004016103a690614c21565b60e08a01511515806117ce5750604084015115155b6117ea5760405162461bcd60e51b81526004016103a690614a41565b6000600660006117fd8d8d8b8b8b611d14565b81526020019081526020016000209050600061183b8c838860006005811061182157fe5b602002015189600160200201518a6002602002015161210f565b9050611856818760035b60200201519063ffffffff611b7916565b606087015289156118d8576060860151156118835760405162461bcd60e51b81526004016103a690614af1565b60006118958760046020020151611693565b60808e015160608f01519192509082156118d0576118be8a60016020020151865484848761232b565b6118ca838a6004611845565b60808a01525b505050611931565b60006119098c8e606001518f608001518b6001600481106118f557fe5b602002015160608c0151600080808e6123ca565b60608a015250905061192a818860045b60200201519063ffffffff6116b716565b6080880152505b60408051610180810182528354815260018401546020820152600284015491810191909152600383015460ff16151560608201526004808401546080830152600584015460a0830152600684015460c0830152600784015460e083015260088401546101008301526009840154610120830152600a8401546001600160a01b03908116610140840152600b850154166101608301526119db918e918b908a9060200201518d612528565b6119f75760405162461bcd60e51b81526004016103a690614b61565b60808601516005830154611a0a916116b7565b60058301558915611a34576007820154611a2a904263ffffffff611b7916565b6040870152611a54565b611a4e6f4b3b4ca85a86c47a098a22400000000089611b37565b60408701525b611a618c8389898e61262e565b50505060208301516080909301519299929850919650505050505050565b3390565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b03831690811790915515611ade57611ad8600d6001600160e01b0319841663ffffffff6128fb16565b50611af9565b610bdf600d6001600160e01b0319841663ffffffff61294316565b5050565b600082611b0c5750600061168d565b82820282848281611b1957fe5b04146116dc5760405162461bcd60e51b81526004016103a690614b41565b60006116dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a04565b60006116dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a3b565b60035460048054604051633f24927360e21b81526000936001600160a01b039081169363fc9249cc93611bf8938a938a938a93909116910161471c565b60206040518083038186803b158015611c1057600080fd5b505afa158015611c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c489190810190613dfb565b949350505050565b6001600160a01b038116611c765760405162461bcd60e51b81526004016103a690614a51565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006116dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a67565b60008560200151611d375760405162461bcd60e51b81526004016103a690614bb1565b8251602080850151606086015191850151909190611d536139e5565b89611eaa576001600160a01b0384166000908152602a60209081526040918290208054600101908190558d519251611d929392899289929091016145da565b60408051601f19818403018152918152815160209283012060008181526006909352912054909a5015611dd75760405162461bcd60e51b81526004016103a690614ae1565b5060408051610180810182528a81528b5160208201526000918101829052600160608201526080810183905260a081018290524260c082015260e0810182905261010081018a90526101208101919091526001600160a01b038085166101408301528516610160820152611e52600f8b63ffffffff6128fb16565b506001600160a01b0385166000908152601160205260409020611e7b908b63ffffffff6128fb16565b506001600160a01b0384166000908152601260205260409020611ea4908b63ffffffff6128fb16565b5061202b565b5060008981526006602081815260409283902083516101808101855281548152600182015492810192909252600281015493820193909352600383015460ff161580156060830181905260048501546080840152600585015460a08401529284015460c0830152600784015460e083015260088401546101008301526009840154610120830152600a8401546001600160a01b03908116610140840152600b9094015490931661016082015291611f6457508060e0015142105b611f805760405162461bcd60e51b81526004016103a690614b01565b836001600160a01b03168161014001516001600160a01b031614611fb65760405162461bcd60e51b81526004016103a690614a61565b846001600160a01b03168161016001516001600160a01b031614611fec5760405162461bcd60e51b81526004016103a690614ac1565b8a516020820151146120105760405162461bcd60e51b81526004016103a690614a11565b6080810151612025908363ffffffff6116b716565b60808201525b6001600160a01b03831615612047576120478a858560016116e3565b60008a81526006602081815260409283902084518155908401516001820155918301516002830155606083015160038301805460ff19169115159190911790556080830151600483015560a0830151600583015560c08301519082015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820180546001600160a01b03199081166001600160a01b039384161790915561016090930151600b90920180549093169116179055509698975050505050505050565b600b8401546060860151600091612131916001600160a01b0390911690612ab1565b84546000818152600c60209081526040808320600b808b01546001600160a01b03908116865290845282852060608d0180518316875294529190932060e08b0151925160808c0151600a8c0154959692956121929488949392911642612b8f565b6000811580156121a55750600789015415155b156121d3576121d0620151806112928660000154611492428e60070154611b7990919063ffffffff16565b90505b60006121f36907baab4146b63dd000006112928a8c63ffffffff611afd16565b8554909150612208908263ffffffff6116b716565b8555600184015461221f908263ffffffff6116b716565b60018501558261228e57845461224c90429061165190611292620151806114928d8963ffffffff6116b716565b60078b01819055612263904263ffffffff611b7916565b9250610e1083116122865760405162461bcd60e51b81526004016103a690614a81565b8695506122d2565b60078a01546122ad576122a7428463ffffffff6116b716565b60078b01555b6122cf6201518061129283611492428f60070154611b7990919063ffffffff16565b95505b60018501546122e7908763ffffffff6116b716565b600186015583546122fe908963ffffffff6116b716565b84556002840154612315908763ffffffff6116b716565b8460020181905550505050505095945050505050565b80156123c3576001600160a01b0383166000908152601c602052604090205461235a908263ffffffff6116b716565b6001600160a01b038085166000818152601c6020526040908190209390935591518692918816907ffb6c38ae4fdd498b3a5003f02ca4ca5340dfedb36b1b100c679eb60633b2c0a7906123ae908690614c41565b60405180910390a46123c38585858585612bdd565b5050505050565b6040805160a0810182526001600160a01b03808b16825289811660208084019190915230838501819052606080850191909152918a1660808401528351918201845288825281018790529182018590526000918291829161242f91908e888886612f28565b909350915061243e8b8361314a565b600254602754604051631e2c62d360e01b81526001600160a01b0390921691631e2c62d391612477918f918f9188918a91600401614779565b60206040518083038186803b15801561248f57600080fd5b505afa1580156124a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124c79190810190613dfb565b9050896001600160a01b03168b6001600160a01b03168d7fb4eb3c9b62efcce7021cba5fd9cd0c44df91c2272806ccc5e57df7c912e8d7168c8688604051612511939291906148d3565b60405180910390a499509950999650505050505050565b600061255068056bc75e2d631000006112928468055005f0c61448000063ffffffff611afd16565b9150818310156126225760a08501511561261a5760025460608701516080808901519088015160a089015160405163f80b25fb60e01b81526000956001600160a01b03169463f80b25fb946125ad94919390928c90600401614779565b60206040518083038186803b1580156125c557600080fd5b505afa1580156125d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125fd9190810190613dfb565b905082612610858363ffffffff6116b716565b1015915050610b62565b506000610b62565b50600195945050505050565b6002546060860151608087015160048088015460058901546040516317f8680960e11b815260009687966001600160a01b0390911695632ff0d01295612678959294919301614751565b604080518083038186803b15801561268f57600080fd5b505afa1580156126a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126c79190810190613e19565b915091508660c0015182116126ee5760405162461bcd60e51b81526004016103a690614b71565b428660060154141561284e576002546060880151608089015160405163524efd4b60e01b81526000936001600160a01b03169263524efd4b926127339260040161463c565b60206040518083038186803b15801561274b57600080fd5b505afa15801561275f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127839190810190613dfb565b60025460808a015160608b015160405163524efd4b60e01b81529394506000936001600160a01b039093169263524efd4b926127c392909160040161463c565b60206040518083038186803b1580156127db57600080fd5b505afa1580156127ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128139190810190613dfb565b90506000612827838363ffffffff611afd16565b90508561284357606087015161283e908290611b37565b612845565b835b60098a01555050505b60408051610180810182528754815260018801546020820152600288015491810191909152600387015460ff161515606082015260048701546080820152600587015460a0820152600687015460c0820152600787015460e082015260088701546101008201526009870154610120820152600a8701546001600160a01b03908116610140830152600b880154166101608201526128f29088908787858789613218565b50505050505050565b60006129078383613365565b61293b575060018083018054808301808355600092835260208084209092018590558483529085905260409091205561168d565b50600061168d565b600061294f8383613365565b1561293b57600082815260208490526040902054600184015460001991820191018082146129c757600085600101828154811061298857fe5b90600052602060002001549050808660010184815481106129a557fe5b6000918252602080832090910192909255918252869052604090206001830190555b600084815260208690526040812055600185018054806129e357fe5b6001900381819060005260206000200160009055905560019250505061168d565b60008183612a255760405162461bcd60e51b81526004016103a69190614a00565b506000838581612a3157fe5b0495945050505050565b60008184841115612a5f5760405162461bcd60e51b81526004016103a69190614a00565b505050900390565b60008183612a885760405162461bcd60e51b81526004016103a69190614a00565b5083612a96575060006116dc565b6000836001860381612aa457fe5b0460010195945050505050565b6001600160a01b038083166000908152600b602090815260408083209385168352929052908120600181015490919015801590612af15750600482015415155b15612b8257612b1c620151806112928460010154611492866004015442611b7990919063ffffffff16565b4260048401556002830154909150811115612b38575060028101545b8015612b7d576003820154612b53908263ffffffff6116b716565b60038301556002820154612b6d908263ffffffff611b7916565b6002830155612b7d84848361337a565b612b89565b4260048301555b50505050565b6000612bc56a07259756a8d619980000006112926015546114928b600001546114928d6002015489611b7990919063ffffffff16565b60028801839055905080156128f2576128f283878787855b602f546002546001600160a01b038581166000908152603c602090815260408083208885168452909152812054909392919091169015612c40576001600160a01b038087166000908152603c602090815260408083209389168352929052205491505b6037546000906060906001600160a01b038085169163d138f9a160e01b918b9116612c7e68056bc75e2d631000006112928c8b63ffffffff611afd16565b604051602401612c90939291906146f4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612cce9190614622565b600060405180830381855afa9150503d8060008114612d09576040519150601f19603f3d011682016040523d82523d6000602084013e612d0e565b606091505b50915091506001821415612d2457602081015194505b8415612f1c5760375460385460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612d609291169089906004016148b8565b602060405180830381600087803b158015612d7a57600080fd5b505af1158015612d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612db29190810190613c7a565b50603854603f546040516000926001600160a01b031691612dd9918e918a916024016148d3565b60408051601f198184030181529181526020820180516001600160e01b0316630efe6a8b60e01b17905251612e0e9190614622565b6000604051808303816000865af19150503d8060008114612e4b576040519150601f19603f3d011682016040523d82523d6000602084013e612e50565b606091505b505090508015612ec757601f54612e6d908763ffffffff6116b716565b601f55603754603f546040518c926001600160a01b0390811692908f16917ff41c644671512f1cda76abfe6038e3d7d526c1377a5a8c692f81703901db215091612eba918b918d91614c5d565b60405180910390a4612f1a565b603754603f546040518c926001600160a01b0390811692908f16917f483f67ea49f76ac15e15bbad68b52788ca47d50aef1e4acfe95e5e307e71081291612f11918b918d91614c5d565b60405180910390a45b505b50505050505050505050565b84516000908190151580612f3f5750602087015115155b612f5b5760405162461bcd60e51b81526004016103a690614ba1565b6020870151612f6c57865160208801525b602087015187511115612f915760405162461bcd60e51b81526004016103a690614ad1565b60008060008761304b5760408a015161300d578515612fc257612fbb8a60005b602002015161341f565b9050612fd6565b612fd38a60005b602002015161165d565b90505b80156130085760808b01518b51612ff991908b908e60015b602002015185613443565b613005818b6000611845565b8a525b61304b565b85156130255761301e8a6002612fb1565b9050613033565b6130308a6002612fc9565b90505b801561304b57613045818b6002611919565b60408b01525b86511561306a5760405162461bcd60e51b81526004016103a690614bd1565b6130748b8b613593565b60408c015191945092506130c057895182146130a25760405162461bcd60e51b81526004016103a690614c11565b80156130bb576130b8828263ffffffff6116b716565b91505b61313a565b60208a01518211156130e45760405162461bcd60e51b81526004016103a690614ab1565b60408a01518310156131085760405162461bcd60e51b81526004016103a690614a31565b801561313a5760808b015160208c015161312791908b908e6000612fee565b613137838263ffffffff611b7916565b92505b5090999098509650505050505050565b6029548015610bdf57602d546000906001600160a01b03858116911614156131735750816131f8565b600254604051635967aa7560e11b81526001600160a01b039091169063b2cf54ea906131a590879087906004016148b8565b60206040518083038186803b1580156131bd57600080fd5b505afa1580156131d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131f59190810190613dfb565b90505b81811115612b895760405162461bcd60e51b81526004016103a690614b11565b801561329b5785518551602087015160608a015160808b01516001600160a01b0393841693909216917f7bd8cbb7ba34b33004f3deda0fd36c92fc0360acbd97843360037b467a538f909190896001602002015160808b01518b516040808e0151905161328e969594939291908e908e906147bb565b60405180910390a46128f2565b6132b56f4b3b4ca85a86c47a098a22400000000083611b37565b865190925085600060200201516001600160a01b031686600160200201516001600160a01b03167ff640c1cfe1a912a0b0152b5a542e5c2403142eed75b06cde526cee54b1580e5c8a608001518b606001518960046005811061331457fe5b60200201518a600160200201518b6000602002015160e08f01518d600360200201518e600260200201518d60405161335499989796959493929190614832565b60405180910390a450505050505050565b60009081526020919091526040902054151590565b600061339e68056bc75e2d6310000061129260155485611afd90919063ffffffff16565b90506133ab8484836136a5565b6133c583856133c0858563ffffffff611b7916565b613733565b6001600160a01b038085169084167f220e66e3e759e1382aa86cd8af5abca05ebf3ad564f223ae62d977678337272a613404858563ffffffff611b7916565b6040516134119190614c41565b60405180910390a350505050565b600061168d68056bc75e2d63100000611681603e5485611afd90919063ffffffff16565b80801561358b576001600160a01b0386811660009081526033602052604090205416156134f9576001600160a01b038087166000908152603360205260409020546134919116878684613796565b50506134f66134b868056bc75e2d6310000061129260395485611afd90919063ffffffff16565b6134ea6134dd68056bc75e2d6310000061129260205487611afd90919063ffffffff16565b849063ffffffff611b7916565b9063ffffffff611b7916565b90505b6001600160a01b038416600090815260196020526040902054613522908263ffffffff6116b716565b6001600160a01b03808616600081815260196020526040908190209390935591518792918916907fb23479169712c443e6b00fb0cec3506a5f5926f541df4243d313e11c8c5c71ed90613576908690614c41565b60405180910390a461358b8686868686612bdd565b505050505050565b815160208084015160408086015160608781015187519588015188850151945160009889989497630957ba1160e21b976135da979296919592949293919291602401614657565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491519092506000916001600160a01b03169061362c908490614622565b600060405180830381855af49150503d8060008114613667576040519150601f19603f3d011682016040523d82523d6000602084013e61366c565b606091505b50925090508061368e5760405162461bcd60e51b81526004016103a690614c01565b602082015193506040820151925050509250929050565b8015610bdf576001600160a01b0382166000908152601660205260409020546136d4908263ffffffff6116b716565b6001600160a01b0380841660008181526016602052604090819020939093559151908516907f40a75ae5f7a5336e75f7c7977e12c4b46a9ac0f30de01a2d5b6c1a4f4af6358790613726908590614c41565b60405180910390a3505050565b8015610bdf576137536001600160a01b038416838363ffffffff61382f16565b816001600160a01b0316836001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a1836040516137269190614c41565b6031546040516306a688ff60e11b815260009182916001600160a01b0390911690630d4d11fe906137d19089908990899089906004016146bf565b6040805180830381600087803b1580156137ea57600080fd5b505af11580156137fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506138229190810190613e19565b9097909650945050505050565b604051610bdf90849063a9059cbb60e01b9061385190869086906024016148b8565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613895826001600160a01b0316613968565b6138b15760405162461bcd60e51b81526004016103a690614c31565b60006060836001600160a01b0316836040516138cd9190614622565b6000604051808303816000865af19150503d806000811461390a576040519150601f19603f3d011682016040523d82523d6000602084013e61390f565b606091505b5091509150816139315760405162461bcd60e51b81526004016103a690614aa1565b805115612b89578080602001905161394c9190810190613c7a565b612b895760405162461bcd60e51b81526004016103a690614be1565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611c48575050151592915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b803561168d81614d76565b806080810183101561168d57600080fd5b8060a0810183101561168d57600080fd5b803561168d81614d8a565b805161168d81614d8a565b803561168d81614d93565b803561168d81614d9c565b60008083601f840112613ab457600080fd5b50813567ffffffffffffffff811115613acc57600080fd5b602083019150836001820283011115613ae457600080fd5b9250929050565b805161168d81614d93565b600060208284031215613b0857600080fd5b6000611c488484613a49565b60008060408385031215613b2757600080fd5b6000613b338585613a49565b9250506020613b4485828601613a49565b9150509250929050565b600080600080600060a08688031215613b6657600080fd5b6000613b728888613a49565b9550506020613b8388828901613a49565b9450506040613b9488828901613a8c565b9350506060613ba588828901613a8c565b9250506080613bb688828901613a76565b9150509295509295909350565b60008060008060008060c08789031215613bdc57600080fd5b6000613be88989613a49565b9650506020613bf989828a01613a49565b9550506040613c0a89828a01613a8c565b9450506060613c1b89828a01613a8c565b9350506080613c2c89828a01613a8c565b92505060a0613c3d89828a01613a8c565b9150509295509295509295565b60008060408385031215613c5d57600080fd5b6000613c698585613a49565b9250506020613b4485828601613a8c565b600060208284031215613c8c57600080fd5b6000611c488484613a81565b600060208284031215613caa57600080fd5b6000611c488484613a8c565b60008060408385031215613cc957600080fd5b6000613b338585613a8c565b600080600060608486031215613cea57600080fd5b6000613cf68686613a8c565b9350506020613d0786828701613a49565b9250506040613d1886828701613a76565b9150509250925092565b6000806000806000806000806101c0898b031215613d3f57600080fd5b6000613d4b8b8b613a8c565b9850506020613d5c8b828c01613a8c565b9750506040613d6d8b828c01613a76565b9650506060613d7e8b828c01613a8c565b9550506080613d8f8b828c01613a54565b945050610100613da18b828c01613a65565b9350506101a089013567ffffffffffffffff811115613dbf57600080fd5b613dcb8b828c01613aa2565b92509250509295985092959890939650565b600060208284031215613def57600080fd5b6000611c488484613a97565b600060208284031215613e0d57600080fd5b6000611c488484613aeb565b60008060408385031215613e2c57600080fd5b6000613e388585613aeb565b9250506020613b4485828601613aeb565b613e5281614cf2565b82525050565b613e52613e6482614cf2565b614d55565b613e5281614cfd565b613e5281614d02565b613e52613e8782614d02565b614d02565b6000613e9782614ce0565b613ea18185614ce4565b9350613eb1818560208601614d29565b9290920192915050565b613e5281614d1e565b6000613ecf82614ce0565b613ed98185614ce9565b9350613ee9818560208601614d29565b613ef281614d66565b9093019392505050565b6000613f09601383614ce9565b720d8dec2dca0c2e4c2dae640dad2e6dac2e8c6d606b1b815260200192915050565b6000613f38600683614ce9565b6514185d5cd95960d21b815260200192915050565b6000613f5a601b83614ce9565b7f696e73756666696369656e742073776170206c69717569646974790000000000815260200192915050565b6000613f93601083614ce9565b6f1a5b9d985b1a59081a5b9d195c995cdd60821b815260200192915050565b6000613fbf602683614ce9565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000614007601183614ce9565b700c4dee4e4deeecae440dad2e6dac2e8c6d607b1b815260200192915050565b6000614034601b83614ce9565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061406d600e83614ce9565b6d1b1bd85b881d1bdbc81cda1bdc9d60921b815260200192915050565b6000614097601583614ce9565b740c6ded8d8c2e8cae4c2d85ed8dec2dc40dac2e8c6d605b1b815260200192915050565b60006140c8602083614ce9565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000614101601383614ce9565b72737761702066696c6c20746f6f206c6172676560681b815260200192915050565b6000614130600f83614ce9565b6e0d8cadcc8cae440dad2e6dac2e8c6d608b1b815260200192915050565b600061415b601c83614ce9565b7f736f75726365416d6f756e74206c6172676572207468616e206d617800000000815260200192915050565b6000614194600b83614ce9565b6a6c6f616e2065786973747360a81b815260200192915050565b60006141bb601283614ce9565b7139bab938363ab9903637b0b7103a37b5b2b760711b815260200192915050565b60006141e9600e83614ce9565b6d1b1bd85b881a185cc8195b99195960921b815260200192915050565b6000614213600e83614ce9565b6d7377617020746f6f206c6172676560901b815260200192915050565b600061423d600f83614ce9565b6e0636f6c6c61746572616c206973203608c1b815260200192915050565b6000614268600e83614ce9565b6d1b9bdd08185d5d1a1bdc9a5e995960921b815260200192915050565b6000614292602183614ce9565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006142d5600c83614ce9565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006142fd601783614ce9565b7f636f6c6c61746572616c20696e73756666696369656e74000000000000000000815260200192915050565b6000614336601283614ce9565b713ab73432b0b63a343c903837b9b4ba34b7b760711b815260200192915050565b6000614364601583614ce9565b746c6f616e506172616d73206e6f742065786973747360581b815260200192915050565b6000614395601483614ce9565b7319985b1b189858dac81b9bdd08185b1b1bddd95960621b815260200192915050565b60006143c5602e83614ce9565b7f6d696e206f72206d617820736f7572636520746f6b656e20616d6f756e74206e81526d1959591cc81d1bc81899481cd95d60921b602082015260400192915050565b6000614415601383614ce9565b721b1bd85b94185c985b5cc8191a5cd8589b1959606a1b815260200192915050565b6000614444600c83614ce9565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b600061446c600d83614ce9565b6c696e76616c696420737461746560981b815260200192915050565b6000614495602a83614ce9565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006144e1602183614ce9565b7f6c6f616e446174614279746573207265717569726564207769746820657468658152603960f91b602082015260400192915050565b6000614524600b83614ce9565b6a1cddd85c0819985a5b195960aa1b815260200192915050565b600061454b601683614ce9565b751cddd85c081d1bdbc81b185c99d9481d1bc8199a5b1b60521b815260200192915050565b600061457d601583614ce9565b74696e697469616c4d617267696e20746f6f206c6f7760581b815260200192915050565b60006145ae601f83614ce9565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b60006145e68287613e7b565b6020820191506145f68286613e58565b6014820191506146068285613e58565b6014820191506146168284613e7b565b50602001949350505050565b60006116dc8284613e8c565b6020810161168d8284613e49565b6040810161464a8285613e49565b6116dc6020830184613e49565b60e08101614665828a613e49565b6146726020830189613e49565b61467f6040830188613e49565b61468c6060830187613e49565b6146996080830186613e72565b6146a660a0830185613e72565b6146b360c0830184613e72565b98975050505050505050565b608081016146cd8287613e49565b6146da6020830186613e49565b6146e76040830185613e49565b610b626060830184613e72565b606081016147028286613e49565b61470f6020830185613e49565b611c486040830184613e72565b6080810161472a8287613e49565b6147376020830186613e49565b6147446040830185613e72565b610b626060830184613e49565b6080810161475f8287613e49565b61476c6020830186613e49565b6146e76040830185613e72565b60a081016147878288613e49565b6147946020830187613e49565b6147a16040830186613e72565b6147ae6060830185613e72565b6113316080830184613e72565b61010081016147ca828b613e49565b6147d7602083018a613e49565b6147e46040830189613e72565b6147f16060830188613e72565b6147fe6080830187613e72565b61480b60a0830186613e72565b61481860c0830185613e72565b61482560e0830184613e72565b9998505050505050505050565b6101208101614841828c613e49565b61484e602083018b613e49565b61485b604083018a613e72565b6148686060830189613e72565b6148756080830188613e72565b61488260a0830187613e72565b61488f60c0830186613e72565b61489c60e0830185613e72565b6148aa610100830184613e72565b9a9950505050505050505050565b604081016148c68285613e49565b6116dc6020830184613e72565b606081016148e18286613e49565b61470f6020830185613e72565b6020810161168d8284613e69565b610100810161490b828b613e72565b614918602083018a613e69565b6149256040830189613e49565b6149326060830188613e49565b6147fe6080830187613e49565b610180810161494e828f613e72565b61495b602083018e613e72565b614968604083018d613e72565b614975606083018c613e69565b614982608083018b613e72565b61498f60a083018a613e72565b61499c60c0830189613e72565b6149a960e0830188613e72565b6149b7610100830187613e72565b6149c5610120830186613e72565b6149d3610140830185613e49565b6149e1610160830184613e49565b9d9c50505050505050505050505050565b6020810161168d8284613ebb565b602080825281016116dc8184613ec4565b6020808252810161168d81613efc565b6020808252810161168d81613f2b565b6020808252810161168d81613f4d565b6020808252810161168d81613f86565b6020808252810161168d81613fb2565b6020808252810161168d81613ffa565b6020808252810161168d81614027565b6020808252810161168d81614060565b6020808252810161168d8161408a565b6020808252810161168d816140bb565b6020808252810161168d816140f4565b6020808252810161168d81614123565b6020808252810161168d8161414e565b6020808252810161168d81614187565b6020808252810161168d816141ae565b6020808252810161168d816141dc565b6020808252810161168d81614206565b6020808252810161168d81614230565b6020808252810161168d8161425b565b6020808252810161168d81614285565b6020808252810161168d816142c8565b6020808252810161168d816142f0565b6020808252810161168d81614329565b6020808252810161168d81614357565b6020808252810161168d81614388565b6020808252810161168d816143b8565b6020808252810161168d81614408565b6020808252810161168d81614437565b6020808252810161168d8161445f565b6020808252810161168d81614488565b6020808252810161168d816144d4565b6020808252810161168d81614517565b6020808252810161168d8161453e565b6020808252810161168d81614570565b6020808252810161168d816145a1565b6020810161168d8284613e72565b604081016148c68285613e72565b606081016148e18286613e72565b60a08101614c798288613e72565b6147946020830187613e72565b60c08101614c948289613e72565b614ca16020830188613e72565b614cae6040830187613e72565b614cbb6060830186613e72565b614cc86080830185613e72565b614cd560a0830184613e72565b979650505050505050565b5190565b919050565b90815260200190565b600061168d82614d12565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b600061168d82614cf2565b60005b83811015614d44578181015183820152602001614d2c565b83811115612b895750506000910152565b600061168d82600061168d82614d70565b601f01601f191690565b60601b90565b614d7f81614cf2565b81146114f757600080fd5b614d7f81614cfd565b614d7f81614d02565b614d7f81614d0556fea365627a7a723158207bc20adaee0729fbf3a580fbbe72ecda0826701f4cd0162938fc39fb5b20477d6c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
