{
  "_format": "hh-sol-artifact-1",
  "contractName": "VaultManagerFacetTester",
  "sourceName": "contracts/VaultManagerDiamond/facets/VaultManagerFacetTester.sol",
  "abi": [
    {
      "inputs": [],
      "name": "InsufficientVaultsInSystem",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAbsorptionParams",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInputLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxFeePercentage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "decimalPrecision",
          "type": "uint256"
        }
      ],
      "name": "MaxFeeTooHigh",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxFeePercentage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "redemptionFeeFloor",
          "type": "uint256"
        }
      ],
      "name": "MaxFeeTooLow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotBorrowerOperations",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotController",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotRewarder",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TCRBelowMCR",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "VaultNotActive",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAmount",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_baseRate",
          "type": "uint256"
        }
      ],
      "name": "BaseRateUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interest",
          "type": "uint256"
        }
      ],
      "name": "InterestApplied",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_L_Coll",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_L_VEUSDDebtReward",
          "type": "uint256"
        }
      ],
      "name": "LRewardsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_Coll_Address",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_L_Coll",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_L_VEUSDDebt",
          "type": "uint256"
        }
      ],
      "name": "LTermsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "L_VEUSDInterest",
          "type": "uint256"
        }
      ],
      "name": "L_VEUSDInterestUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_lastFeeOpTime",
          "type": "uint256"
        }
      ],
      "name": "LastFeeOpTimeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_unix",
          "type": "uint256"
        }
      ],
      "name": "SystemSnapshotsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newTotalStakes",
          "type": "uint256"
        }
      ],
      "name": "TotalStakesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newIndex",
          "type": "uint256"
        }
      ],
      "name": "VaultIndexUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_unix",
          "type": "uint256"
        }
      ],
      "name": "VaultSnapshotsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_debt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "enum VaultManagerOperation",
          "name": "operation",
          "type": "uint8"
        }
      ],
      "name": "VaultUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "L_Coll",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "L_VEUSDDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "VaultOwners",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "addVaultOwnerToArray",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "applyPendingRewards",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "calcDecayedBaseRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newInterestTimeWindow",
          "type": "uint256"
        }
      ],
      "name": "changeInterestTimeWindow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_debtChange",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_isDebtIncrease",
          "type": "bool"
        }
      ],
      "name": "changeVaultDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "newDebt",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "checkRecoveryMode",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_debt",
          "type": "uint256"
        }
      ],
      "name": "computeICR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amountVC",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_debt",
          "type": "uint256"
        }
      ],
      "name": "computeICRFromVC",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_VEUSDDebt",
          "type": "uint256"
        }
      ],
      "name": "decayBaseRateFromBorrowingAndCalculateFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_debtVal",
          "type": "uint256"
        }
      ],
      "name": "getActualDebtFromComposite",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_VEUSDDebt",
          "type": "uint256"
        }
      ],
      "name": "getBorrowingFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_VEUSDDebt",
          "type": "uint256"
        }
      ],
      "name": "getBorrowingFeeWithDecay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBorrowingRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBorrowingRateWithDecay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "getCollGasCompensation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getCollateralProportionDenominator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getCollateralProportionNumerator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_debt",
          "type": "uint256"
        }
      ],
      "name": "getCompositeDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getCurrentAICR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "AICR",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getCurrentICR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "ICR",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getCurrentVaultState",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vaultAddress",
          "type": "address"
        }
      ],
      "name": "getEDC",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getEntireDebtAndColls",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEntireSystemColl",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEntireSystemDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getL_Coll",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getL_VEUSD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getPendingCollRewards",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getPendingVEUSDDebtReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "pendingVEUSDDebtReward",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "pendingVEUSDInterest",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "pendingVEUSDReward",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolAddresses",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "activePool",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "defaultPool",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "gasPool",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stabilityPool",
              "type": "address"
            }
          ],
          "internalType": "struct IVaultManagerTester.PoolAddresses",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_VEUSDRedeemed",
          "type": "uint256"
        }
      ],
      "name": "getRedemptionFeeWithDecay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRedemptionRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRedemptionRateWithDecay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getRewardSnapshotColl",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getRewardSnapshotVEUSD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTCR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getTotalStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "getUSD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "getVC",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getVaultColls",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getVaultDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "queryAddress",
          "type": "address"
        }
      ],
      "name": "getVaultForAddress",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "debt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "status",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "arrayIndex",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getVaultFromVaultOwnersArray",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vaultAddress",
          "type": "address"
        }
      ],
      "name": "getVaultIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVaultOwnersCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getVaultStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getVaultStatus",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getVaultVC",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "hasPendingRewards",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newCollateral",
          "type": "address"
        }
      ],
      "name": "interestInitCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "isVaultActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastFeeOperationTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minutesPassedSinceLastFeeOp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "rewardAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "collAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "rewardAmount",
          "type": "uint256"
        }
      ],
      "name": "notifyRewardAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IActivePool",
          "name": "_activePool",
          "type": "address"
        },
        {
          "internalType": "contract IDefaultPool",
          "name": "_defaultPool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_debt",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "redistributeDebtAndColl",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_status",
          "type": "uint256"
        }
      ],
      "name": "removeStakeAndCloseVault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_baseRate",
          "type": "uint256"
        }
      ],
      "name": "setBaseRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setLastFeeOpTimeToNow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_num",
          "type": "uint256"
        }
      ],
      "name": "setVaultStatus",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tickInterest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_rewarder",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isRewarder",
          "type": "bool"
        }
      ],
      "name": "toggleRewarder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "totalCollateralSnapshot",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "totalStakes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "totalStakesSnapshot",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unprotectedDecayBaseRateFromBorrowing",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newBaseRate",
          "type": "uint256"
        }
      ],
      "name": "updateBaseRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IActivePool",
          "name": "_activePool",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "updateSystemSnapshots_excludeCollRemainder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_ids",
          "type": "address[]"
        }
      ],
      "name": "updateUnderCollateralizedVaults",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "updateVaultCollAndStakeAndTotalStakes",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "updateVaultRewardSnapshots",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_borrowers",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "_lowerHints",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "_upperHints",
          "type": "address[]"
        }
      ],
      "name": "updateVaults",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061782080620000216000396000f3fe608060405234801561001057600080fd5b50600436106104f95760003560e01c80638e201a14116102a1578063d380a37c1161016b578063e2c63e3c116100e3578063f000543111610097578063f36b24251161007c578063f36b242514610e4c578063f711e4b41461054e578063fefa753d1461085f57600080fd5b8063f000543114610ddd578063f180b6f014610e3957600080fd5b8063e4b6db4c116100c8578063e4b6db4c14610cc1578063e8ccaab214610db7578063eadd838114610dca57600080fd5b8063e2c63e3c14610c8a578063e34f6d4414610cae57600080fd5b8063de1623911161013a578063df349ed51161011f578063df349ed514610665578063e1f1825014610c64578063e2ac77b014610c7757600080fd5b8063de16239114610c09578063de66583514610c1c57600080fd5b8063d380a37c14610bb4578063d47607c514610bdb578063d5b3563514610bee578063da303f1414610c0157600080fd5b8063b9a9aaa511610219578063c17afd02116101cd578063c52861f2116101b2578063c52861f214610b72578063cf80c37214610b7a578063d283ea0414610ba157600080fd5b8063c17afd0214610b4c578063c308d81c14610b5f57600080fd5b8063bb2cebe3116101fe578063bb2cebe314610ab7578063c0af0d3b14610b13578063c0d5287314610a0657600080fd5b8063b9a9aaa514610a4c578063ba6e79f714610a5f57600080fd5b8063af3700dc11610270578063b2b9c5aa11610255578063b2b9c5aa14610a06578063b620115d14610a31578063b698591b14610a3957600080fd5b8063af3700dc146109ab578063b1dc4c1c146109f357600080fd5b80638e201a141461095c57806392edfc151461097d578063a8bee0e714610985578063abd2eec51461099857600080fd5b80633d95f5e8116103e257806362e768741161035a5780636b87d1761161030e57806378f85876116102f357806378f8587614610901578063795d26c31461094c578063887105d31461095457600080fd5b80636b87d176146108a75780636f758578146108ba57600080fd5b806364f23caa1161033f57806364f23caa1461084457806366ca4a2114610857578063693c781c1461085f57600080fd5b806362e768741461081e578063631203b01461083157600080fd5b806345979978116103b15780634ff81443116103965780634ff81443146107e557806354062a45146107f8578063614e64d91461080b57600080fd5b806345979978146107ca578063477d66cf146107d257600080fd5b80633d95f5e81461073757806343a124fa1461074a578063448c726414610752578063450031f21461079c57600080fd5b8063180d97c11161047557806327fb7d8911610444578063325e370d11610429578063325e370d146106ef578063330283aa146107025780633a1141eb1461071557600080fd5b806327fb7d89146106d45780632b11551a146106e757600080fd5b8063180d97c1146106205780631d08837b146106335780631e7ff8f6146106655780631f68f20a146106ad57600080fd5b80630b076557116104cc578063105bb15c116104b1578063105bb15c146105df5780631216cd31146105e757806312adf0c2146105fa57600080fd5b80630b076557146105a95780630c5aed57146105bc57600080fd5b80630173f543146104fe578063043782fb1461052457806308ca32a51461054e5780630ab06ea414610596575b600080fd5b61051161050c36600461685d565b610e54565b6040519081526020015b60405180910390f35b61054c427f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31855565b005b61051161055c36600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30f602052604090205490565b6105116105a43660046169b4565b610f77565b61054c6105b736600461685d565b610f8c565b6105cf6105ca36600461685d565b61105a565b604051901515815260200161051b565b610511611065565b6105116105f5366004616a18565b611074565b61060d61060836600461685d565b611080565b60405161051b9796959493929190616aae565b61051161062e36600461685d565b6110ac565b61054c610641366004616b1c565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31755565b61051161067336600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30b602052604090205490565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31754610511565b6105116106e236600461685d565b611100565b61051161110b565b61054c6106fd366004616b35565b611115565b61054c610710366004616b1c565b61117f565b61072861072336600461685d565b611250565b60405161051b93929190616b61565b610511610745366004616b97565b61126c565b6105cf61137b565b610511610760366004616c04565b6001600160a01b0391821660009081526000805160206177ab833981519152602090815260408083209390941682526003909201909152205490565b6107af6107aa36600461685d565b611385565b6040805193845260208401929092529082015260600161051b565b610511611393565b6105116107e0366004616b1c565b61139d565b6105116107f3366004616b1c565b6113b0565b610511610806366004616b1c565b6113bb565b61054c610819366004616b1c565b6113c6565b61051161082c36600461685d565b6113ed565b61051161083f366004616b1c565b6114db565b610511610852366004616c4b565b6114e8565b61051161158d565b61051161086d36600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30e602052604090205490565b61054c6108b536600461685d565b61159f565b6105116108c836600461685d565b6001600160a01b031660009081526000805160206177ab833981519152602052604090206004015461010090046001600160801b031690565b61051161090f36600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda313602052604090206002015490565b610511611637565b610511611641565b61096f61096a36600461685d565b61164b565b60405161051b929190616c8d565b61054c61166c565b61072861099336600461685d565b6116ab565b61054c6109a6366004616cb2565b6116cd565b6105116109b936600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30c602052604090205490565b61054c610a0136600461685d565b61171f565b610a19610a14366004616b1c565b61173d565b6040516001600160a01b03909116815260200161051b565b61051161179f565b61054c610a47366004616d2c565b6117a9565b610511610a5a366004616b35565b611944565b610511610a6d366004616c04565b6001600160a01b0391821660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3126020908152604080832093909416825291909152205490565b610511610ac5366004616c04565b6001600160a01b0391821660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda312602090815260408083209390941682526001909201909152205490565b610511610b2136600461685d565b6001600160a01b031660009081526000805160206177ab833981519152602052604090206002015490565b61054c610b5a366004616dc6565b611a31565b61054c610b6d366004616e08565b611b33565b610511611b62565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30a54610511565b610511610baf3660046169b4565b611b74565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31854610511565b61054c610be9366004616e7e565b611ba6565b610511610bfc366004616b1c565b611daf565b610511611dc2565b610511610c17366004616b1c565b611e70565b610511610c2a36600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30d602052604090205490565b61054c610c72366004616e08565b611f5f565b6105cf610c8536600461685d565b611f72565b610c9d610c9836600461685d565b611f7d565b60405161051b959493929190616ebf565b61054c610cbc366004616f0b565b6120f7565b6040805160808082018352600080835260208084018290528385018290526060938401919091528351808301855260008051602061778b833981519152546001600160a01b039081168083527fa36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e015482168385019081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3035483168489019081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30654841694880194855288519283529051831694820194909452925181169583019590955251909316918301919091520161051b565b61054c610dc5366004616b35565b612113565b61096f610dd836600461685d565b612136565b610511610deb366004616c04565b6001600160a01b0391821660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda313602090815260408083209390941682526001909201909152205490565b610511610e4736600461685d565b61222b565b610511612236565b60408051808201825260608082526020808301919091526001600160a01b03841660009081526000805160206177ab83398151915282528381208054855181850281018501909652808652919460008051602061776b8339815191529493909290830182828015610eee57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ed0575b50505091835250506001600160a01b038416600090815260098301602090815260409182902060010180548351818402810184019094528084529091830182828015610f5957602002820191906000526020600020905b815481526020019060010190808311610f45575b50505050508160200181905250610f6f8161227a565b949350505050565b6000610f838383612312565b90505b92915050565b3360009081527fdd3d3f73ef9314ee8a864e3b99d0c7aef094848203e31c25139eff48ad82d200602081905260409091205460008051602061776b8339815191529060ff16158015610feb575060058101546001600160a01b03163314155b1561100957604051630aa9c95160e01b815260040160405180910390fd5b60008051602061778b83398151915280547fa36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e0154611053916001600160a01b039081169116866123a5565b505b505050565b6000610f8682612d8e565b600061106f612de6565b905090565b6000610f838383612e32565b60006060806000606080600061109588612e62565b959e949d50929b5090995097509550909350915050565b6001600160a01b03811660009081526000805160206177ab833981519152602052604081206004015460008051602061776b8339815191529060ff1660058111156110f9576110f9616f9e565b9392505050565b6000610f868261309a565b600061106f6130c3565b61111d613101565b60008051602061776b83398151915281600581111561113e5761113e616f9e565b6001600160a01b03841660009081526009830160205260409020600401805460ff1916600183600581111561117557611175616f9e565b0217905550505050565b611187613101565b806000036111dc5760405162461bcd60e51b815260206004820152600160248201527f360000000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31781905560408051828152905160008051602061776b833981519152917fc454ee9b76c52f782a256af821b857ca6e125d1e3333bcede402fec2bed9600c919081900360200190a161124c613174565b5050565b606080600061125e846131f6565b9250925092505b9193909250565b60008060008051602061778b833981519152815b855181101561136657600282015487516001600160a01b0390911690632e2b1a88908990849081106112b4576112b4616fb4565b60200260200101518884815181106112ce576112ce616fb4565b60200260200101516040518363ffffffff1660e01b81526004016113079291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190616fca565b6113529084616ff9565b92508061135e8161700c565b915050611280565b506113718285612e32565b9695505050505050565b600061106f6133f2565b600080600061125e846134a8565b600061106f6138b5565b6000610f866113aa61158d565b83613912565b6000610f8682613927565b6000610f86826139bf565b6113ce613a57565b60008051602061776b8339815191526113e76001613ab8565b60070155565b60006113f7613101565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30a80546001808201835560008381527fcea295d76ab5ea6411d4ff6ea46a713d1bc5a25dd53e284dfbcf06e3746fef17909201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038716179055915460008051602061776b8339815191529261148b91617025565b6001600160a01b039490941660009081526009929092016020525060409020600401805470ffffffffffffffffffffffffffffffff0019166101006001600160801b039094169384021790555090565b6000610f866113aa612236565b60006114f2613101565b60008051602061776b8339815191528215611537576001600160a01b0385166000908152600982016020526040902060020154611530908590616ff9565b9150611563565b6001600160a01b0385166000908152600982016020526040902060020154611560908590617025565b91505b6001600160a01b039094166000908152600990940160205260409093206002018390555090919050565b600061106f61159a611393565b613d96565b6115a7613a57565b6001600160a01b03811660008181527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3116020908152604091829020670de0b6b3a764000090819055825193845290830152805160008051602061776b833981519152927f52e4f8484d40265d451853e623ddb061dc0c032aed194312dfdd5ff5f92e855a92908290030190a15050565b600061106f613ec8565b600061106f613fdf565b606080600061165984614075565b8051602090910151909590945092505050565b6000805160206177cb8339815191525460008051602061778b833981519152906000906001600160a01b031633036116a2575060015b61124c81613ab8565b6060806000806000806116bd876131f6565b9199909850909650945050505050565b6116d5613a57565b6001600160a01b039190911660009081527fdd3d3f73ef9314ee8a864e3b99d0c7aef094848203e31c25139eff48ad82d20060205260409020805460ff1916911515919091179055565b611727613101565b6117316000613ab8565b61173a816142e8565b50565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30a805460009160008051602061776b833981519152918490811061178357611783616fb4565b6000918252602090912001546001600160a01b03169392505050565b600061106f61446c565b826117c086821480156117bb57508183145b614526565b60008167ffffffffffffffff8111156117db576117db61687a565b604051908082528060200260200182016040528015611804578160200160208202803683370190505b5090506118116000613ab8565b60005b828110156118935760008060006118508c8c8681811061183657611836616fb4565b905060200201602081019061184b919061685d565b6131f6565b92509250925061186183838361455d565b85858151811061187357611873616fb4565b6020026020010181815250505050508061188c9061700c565b9050611814565b507f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda304546040517f8f37e2b80000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690638f37e2b890611908908b908b9086908c908c908c908c90600401617076565b600060405180830381600087803b15801561192257600080fd5b505af1158015611936573d6000803e3d6000fd5b505050505050505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050838160008151811061197d5761197d616fb4565b6001600160a01b03929092166020928302919091019091015260408051600180825281830190925260009181602001602082028036833701905050905083816000815181106119ce576119ce616fb4565b6020026020010181815250506000604051806040016040528084815260200183815250905060006119fe82614576565b905060008160200151600081518110611a1957611a19616fb4565b60200260200101519050809550505050505092915050565b60008051602061778b83398151915260005b8281101561105357611b23848483818110611a6057611a60616fb4565b9050602002016020810190611a75919061685d565b8360020160009054906101000a90046001600160a01b03166001600160a01b031663794e57246040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aee9190616fca565b611b1d878786818110611b0357611b03616fb4565b9050602002016020810190611b18919061685d565b61309a565b1061466e565b611b2c8161700c565b9050611a43565b611b3b613101565b611b488151835114614526565b61105560008051602061776b833981519152848484614718565b600061106f611b6f611393565b614863565b6000611b93604051806040016040528060608152602001606081525090565b83815260208101839052610f6f81614925565b3360009081527fdd3d3f73ef9314ee8a864e3b99d0c7aef094848203e31c25139eff48ad82d200602081905260409091205460008051602061776b8339815191529060ff16158015611c05575060058101546001600160a01b03163314155b15611c2357604051630aa9c95160e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a0823190602401602060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e9190616fca565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529091506001600160a01b038716906323b872dd906064016020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2191906170d4565b506040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d9190616fca565b9050611d998282617025565b9450611da6878787614995565b50505050505050565b6000610f86611dbc611b62565b83614a44565b600060008051602061776b833981519152611ddb611393565b60178201819055670de0b6b3a76400001015611e5f5760405162461bcd60e51b815260206004820152603360248201527f756e70726f7465637465644465636179426173655261746546726f6d426f727260448201527f6f77696e673a206261642062617365526174650000000000000000000000000060648201526084016111d3565b611e67613174565b60170154919050565b6000611e7a613101565b6000611e84611393565b9050670de0b6b3a7640000811115611ede5760405162461bcd60e51b815260206004820152600160248201527f380000000000000000000000000000000000000000000000000000000000000060448201526064016111d3565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31781905560408051828152905160008051602061776b833981519152917fc454ee9b76c52f782a256af821b857ca6e125d1e3333bcede402fec2bed9600c919081900360200190a1611f4e613174565b610f6f611f59612236565b85613912565b611f67613101565b611055838383614ab5565b6000610f8682614c48565b6001600160a01b03811660009081526000805160206177ab833981519152602090815260408083208054825181850281018501909352808352606094859490938493849360008051602061776b8339815191529383018282801561200a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fec575b505050506001600160a01b03891660009081526009840160209081526040918290206001018054835181840281018401909452808452949a50919391925083018282801561207757602002820191906000526020600020905b815481526020019060010190808311612063575b505050506001600160a01b03891660009081526009840160205260409020600281015460049091015492975095505060ff1660058111156120ba576120ba616f9e565b6001600160a01b038816600090815260099092016020526040909120600401549092506001600160801b0361010090910416905091939590929450565b6120ff613101565b61210c8585858585614d9b565b5050505050565b61211b613101565b61124c8282600581111561213157612131616f9e565b614e67565b6001600160a01b03811660009081526000805160206177ab83398151915260209081526040918290208054835181840281018401909452808452606093849360008051602061776b83398151915293926001840192918491908301828280156121c857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121aa575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561221a57602002820191906000526020600020905b815481526020019060010190808311612206575b505050505090509250925050915091565b6000610f868261529a565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3175460009060008051602061776b8339815191529061227490613d96565b91505090565b6000805160206177cb83398151915254815160208301516040516397a4b9f760e01b815260009360008051602061778b833981519152936001600160a01b03909116926397a4b9f7926122d1929190600401616c8d565b602060405180830381865afa1580156122ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190616fca565b6000805160206177cb833981519152546040516397a4b9f760e01b815260009160008051602061778b833981519152916001600160a01b03909116906397a4b9f7906123649087908790600401616c8d565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190616fca565b60008051602061776b8339815191526123be6000613ab8565b6123c782614c48565b15611053576123d5826152ba565b60006123e083614075565b905060008060006123f0866134a8565b6001600160a01b03891660009081526009890160209081526040918290208251808401845260608082528184015281548451818502810185019095528085529699509497509295509193909184919083018282801561247857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161245a575b5050509183525050600182018054604080516020808402820181019092528281529291908301828280156124cb57602002820191906000526020600020905b8154815260200190600101908083116124b7575b505050505060208201526000805160206177cb83398151915254604051635799186760e01b815273__$dd008e7fdb676c23adfd59cbc2bd3a4768$__91635799186791612528916001600160a01b03169085908b90600401617174565b600060405180830381865af4158015612545573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261256d9190810190617267565b8051805191925061258391849160200190616786565b50602080820151805161259c92600186019201906167f8565b506000836125aa8688616ff9565b116125b65760006125cb565b836125c18688616ff9565b6125cb9190617025565b90508083600201546125dd9190616ff9565b600284015583158015906125ef575080155b15612afe578383600201541115612947576000805160206177cb83398151915254604080517f969c245200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163969c24529160048083019260209291908290030181865afa158015612670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126949190616fca565b905060006126a585600201546139bf565b905060006126b38783617025565b9050828110612767578686600201546126cc9190617025565b60028701556127628e60008051602061778b83398151915260020160009054906101000a90046001600160a01b03166001600160a01b031663108433b56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275c919061730e565b89615357565b61293f565b60008387600201546127799190617025565b905061280c8f60008051602061778b83398151915260020160009054906101000a90046001600160a01b03166001600160a01b031663108433b56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612806919061730e565b83615357565b80876002015461281c9190617025565b60028801556000805160206177cb833981519152546040805163108433b560e01b815290516001600160a01b039092169163108433b5916004808201926020929091908290030181865afa158015612878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289c919061730e565b6001600160a01b031663a9059cbb8e6128b5848c617025565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612918573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293c91906170d4565b50505b505050612afe565b60008360020154856129599190617025565b6000805160206177cb833981519152546040805163108433b560e01b815290519293506129e4928f926001600160a01b03169163108433b59160048083019260209291908290030181865afa1580156129b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129da919061730e565b8660020154615357565b600060028501558015612afc576000805160206177cb833981519152546040805163108433b560e01b815290516001600160a01b039092169163108433b5916004808201926020929091908290030181865afa158015612a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6c919061730e565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038c8116600483015260248201849052919091169063a9059cbb906044016020604051808303816000875af1158015612ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afa91906170d4565b505b505b60058801546040517f56869930000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b0390911690635686993090602401600060405180830381600087803b158015612b5f57600080fd5b505af1158015612b73573d6000803e3d6000fd5b50505050600283015415612b8f57612b8a896142e8565b612b9a565b612b9a896005614e67565b604051632a7ba1f760e01b8152600481018790526001600160a01b038b1690632a7ba1f790602401600060405180830381600087803b158015612bdc57600080fd5b505af1158015612bf0573d6000803e3d6000fd5b505050506000811115612c71576040517f2b7c7b11000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b038c1690632b7c7b1190602401600060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b505050505b865160208801516040517f116426ae0000000000000000000000000000000000000000000000000000000081526001600160a01b038d169263116426ae92612cbb92600401616c8d565b600060405180830381600087803b158015612cd557600080fd5b505af1158015612ce9573d6000803e3d6000fd5b5050604080516001600160a01b038d168152602081018990527f11883dbbc997d02c733f213f8862794f7634669925e006376cee371143442ca1935001905060405180910390a160028301546040516001600160a01b038b16917fe271bc17472b20d803bff415104ad56a96ce7671d274aacd82ecb65616868a8391612d7991908790600182019060009061734d565b60405180910390a25050505050505050505050565b6001600160a01b03811660009081526000805160206177ab833981519152602052604081206004015460008051602061776b8339815191529060019060ff166005811115612dde57612dde616f9e565b149392505050565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3185460009060008051602061776b83398151915290603c90612e289042617025565b61227491906173ff565b600081600003612e455750600019610f86565b81612e5884670de0b6b3a7640000617413565b610f8391906173ff565b6000606080828180828060008051602061776b8339815191526001600160a01b038a1660008181526009830160208181526040808420600281015482518084018452606080825281860152969095529282528254815181840281018401909252808252959650929490830182828015612f0457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612ee6575b50505091835250506001600160a01b038b16600090815260098401602090815260409182902060010180548351818402810184019094528084529091830182828015612f6f57602002820191906000526020600020905b815481526020019060010190808311612f5b575b505050505081602001819052506000806000612f8a8e6134a8565b9250925092506000612f9b8f614075565b905082612fa88588616ff9565b612fb29190616ff9565b955081861115612fcd57612fc68287617025565b9550612fd2565b600095505b6000805160206177cb83398151915254604051635799186760e01b815273__$dd008e7fdb676c23adfd59cbc2bd3a4768$__91635799186791613025916001600160a01b03169089908690600401617174565b600060405180830381865af4158015613042573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261306a9190810190617267565b805160209182015183519390920151979f509d509b50929950919750929550919350505050919395979092949650565b6000806000806130a9856131f6565b9250925092506130ba8383836153fd565b95945050505050565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3175460009060008051602061776b8339815191529061227490614863565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3055460008051602061776b833981519152906001600160a01b0316331461173a576040517f9868495900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3185460008051602061776b83398151915290603c906131b39042617025565b1061173a5742601882018190556040519081527f860f8d2f0c74dd487e89e2883e3b25b8159ce1e1b3433a291cba7b82c508f3bc9060200160405180910390a150565b606080600060008051602061776b8339815191528161321486614075565b90506000806000613224896134a8565b6001600160a01b038c166000908152600989016020908152604091829020825180840184526060808252818401528154845181850281018501909552808552969950949750929550919390918491908301828280156132ac57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161328e575b5050509183525050600182018054604080516020808402820181019092528281529291908301828280156132ff57602002820191906000526020600020905b8154815260200190600101908083116132eb575b505050505060208201526000805160206177cb83398151915254604051635799186760e01b815273__$dd008e7fdb676c23adfd59cbc2bd3a4768$__9163579918679161335c916001600160a01b03169085908b90600401617174565b600060405180830381865af4158015613379573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133a19190810190617267565b9050838583600201546133b49190616ff9565b6133be9190616ff9565b97508288116133ce5760006133d8565b6133d88389617025565b8151602090920151919c919b509950975050505050505050565b6000805160206177cb83398151915254604080517f5733d58f000000000000000000000000000000000000000000000000000000008152905160009260008051602061778b833981519152926001600160a01b0390911691635733d58f916004808201926020929091908290030181865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134999190616fca565b6134a161446c565b1091505090565b6001600160a01b03811660009081526000805160206177ab83398151915260205260408120600401548190819060008051602061778b8339815191529060008051602061776b8339815191529060019060ff16600581111561350c5761350c616f9e565b146135235760008060009450945094505050611265565b6001600160a01b038087166000908152600983016020908152604080832060028701548251637d92c3bb60e01b8152925191951692637d92c3bb92600480820193918290030181865afa15801561357e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a29190616fca565b6001600160a01b03891660009081526009850160205260409020600201546135ca9190617025565b6001600160a01b0389166000908152601385016020526040812091925090815b8454811015613885576136426040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600086838154811061365657613656616fb4565b60009182526020808320909101546001600160a01b031680835286825260408084205480875282855260118d019093529092205491925061369691617025565b60208301819052158015906136ab5750815115155b156136fa5781516020808401516001600160a01b03841660009081526001880190925260408220549192916136e09190617413565b6136ea91906173ff565b90506136f68187616ff9565b9550505b6001600160a01b03808e16600090815260128a01602090815260408083209385168084526001909401825280832054868201819052938352600f8c019091529020546137469190617025565b606083019081526001600160a01b03808f16600090815260098b01602090815260408083209386168352600390930190522054608084015251156137ca5761378d8161540a565b61379890600a61750e565b826060015183608001516137ac9190617413565b6137b691906173ff565b60a083018190526137c7908d616ff9565b9b505b6001600160a01b03808e16600090815260128a0160209081526040808320938516808452600290940182528083205460c0870181905293835260108c019091529020546138179190617025565b60e0830181905260000361382c575050613875565b6138358161540a565b61384090600a61750e565b8260e0015183608001516138549190617413565b61385e91906173ff565b6101008301819052613870908b616ff9565b995050505b61387e8161700c565b90506135ea565b5081156138a857600281015461389b8484617413565b6138a591906173ff565b97505b5050505050509193909250565b600060008051602061776b833981519152816138cf612de6565b905060006138e5670de0976e8a60170083615477565b9050670de0b6b3a76400008184601701546139009190617413565b61390a91906173ff565b935050505090565b6000670de0b6b3a7640000612e588385617413565b6000805160206177cb8339815191525460408051637d92c3bb60e01b8152905160009260008051602061778b833981519152926001600160a01b0390911691637d92c3bb916004808201926020929091908290030181865afa158015613991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b59190616fca565b6110f99084616ff9565b6000805160206177cb8339815191525460408051637d92c3bb60e01b8152905160009260008051602061778b833981519152926001600160a01b0390911691637d92c3bb916004808201926020929091908290030181865afa158015613a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4d9190616fca565b6110f99084617025565b6000805160206177cb8339815191525460008051602061778b833981519152906001600160a01b0316331461173a576040517f23019e6700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3085460008051602061776b8339815191529060008051602061778b83398151915290600090613b079042617025565b90508380613b19575082600701548110155b1561105357600783015415613d8a576002820154604080517f9d6aea0a00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691639d6aea0a91600480830192869291908290030181865afa158015613b8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bb4919081019061751a565b60028401546040517fbf21ad9c0000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063bf21ad9c90613c0590859060040161754f565b600060405180830381865afa158015613c22573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c4a9190810190617562565b905060005b8251811015613d8657818181518110613c6a57613c6a616fb4565b6020026020010151600014613d76576000838281518110613c8d57613c8d616fb4565b602002602001015190506000876007015486858581518110613cb157613cb1616fb4565b6020026020010151613cc39190617413565b613ccd91906173ff565b613cdf90670de0b6b3a7640000616ff9565b6001600160a01b038316600090815260118a016020526040902054909150670de0b6b3a764000090613d12908390617413565b613d1c91906173ff565b6001600160a01b038316600081815260118b01602090815260409182902084905581519283528201929092527f52e4f8484d40265d451853e623ddb061dc0c032aed194312dfdd5ff5f92e855a910160405180910390a150505b613d7f8161700c565b9050613c4f565b5050505b42600884015550505050565b6000805160206177cb83398151915254604080517f5e9e3212000000000000000000000000000000000000000000000000000000008152905160009260008051602061778b833981519152926110f99286926001600160a01b031691635e9e32129160048083019260209291908290030181865afa158015613e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e409190616fca565b613e4a9190616ff9565b8260020160009054906101000a90046001600160a01b03166001600160a01b0316634056d9fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec39190616fca565b6154fe565b7fa36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e0154604080516381b7f1bf60e01b8152905160009260008051602061778b833981519152926001600160a01b03909116916381b7f1bf916004808201926020929091908290030181865afa158015613f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f689190616fca565b8154604080516381b7f1bf60e01b815290516001600160a01b03909216916381b7f1bf916004808201926020929091908290030181865afa158015613fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fd59190616fca565b6122749190616ff9565b60008051602061778b8339815191528054604080517f651340c40000000000000000000000000000000000000000000000000000000081529051600093926001600160a01b03169163651340c49160048083019260209291908290030181865afa158015614051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122749190616fca565b6040805180820190915260608082526020820152600060008051602061776b833981519152905060016001600160a01b038416600090815260098301602052604090206004015460ff1660058111156140d0576140d0616f9e565b146140f05760408051808201909152606080825260208201529392505050565b6001600160a01b038316600090815260098201602090815260408083208054825181850281018501909352808352919290919083018282801561415c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161413e575b50508351939450839250505067ffffffffffffffff8111156141805761418061687a565b6040519080825280602002602001820160405280156141a9578160200160208202803683370190505b50602085015281845260005b818110156142df5760008382815181106141d1576141d1616fb4565b6020908102919091018101516001600160a01b03808a1660009081526012890184526040808220928416825291845281812054600e8a01909452908120549193509061421e908390617025565b9050806000036142545760008860200151858151811061424057614240616fb4565b6020026020010181815250505050506142cf565b61425d8361540a565b61426890600a61750e565b6001600160a01b03808b16600090815260098a0160209081526040808320938816835260039093019052205461429f908390617413565b6142a991906173ff565b886020015185815181106142bf576142bf616fb4565b6020026020010181815250505050505b6142d88161700c565b90506141b5565b50505050919050565b6001600160a01b03811660009081526000805160206177ab83398151915260209081526040808320805482518185028101850190935280835260008051602061776b833981519152949383018282801561436b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161434d575b505050506001600160a01b038516600090815260138501602090815260408083206012880190925282209394509291505b83518110156144305760008482815181106143b9576143b9616fb4565b6020908102919091018101516001600160a01b03166000908152600e8801825260408082205486845281832055600f89018352808220546001870184528183205560108901835280822054600287018452818320556011890183528082205492879052902055506144298161700c565b905061439c565b506040514281527f9bfce77ba2b67b7b6e0b412ddd847887ab3f997cd47753fcf246242a8b33f14f906020015b60405180910390a15050505050565b60008051602061778b8339815191528054604080517f896a008900000000000000000000000000000000000000000000000000000000815290516000939284926001600160a01b039091169163896a00899160048082019286929091908290030181865afa1580156144e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261450a9190810190617597565b5091505061451f8161451a613ec8565b612e32565b9250505090565b8061173a576040517f7db491eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061456a8585615514565b90506130ba8184612e32565b6040805180820190915260608082526020820152815180519082528067ffffffffffffffff8111156145aa576145aa61687a565b6040519080825280602002602001820160405280156145d3578160200160208202803683370190505b50602083015260005b8181101561466757836020015181815181106145fa576145fa616fb4565b6020026020010151600003156146575760c88460200151828151811061462257614622616fb4565b602002602001015161463491906173ff565b8360200151828151811061464a5761464a616fb4565b6020026020010181815250505b6146608161700c565b90506145dc565b5050919050565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda304546040517f38b1696b0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015260008051602061776b8339815191529216906338b1696b906044015b600060405180830381600087803b15801561470457600080fd5b505af1158015611da6573d6000803e3d6000fd5b6147258151835114614526565b6001600160a01b038316600090815260098501602090815260409182902080548351818402810184019094528084526147a39387939092919083018282801561479757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614779575b5050505050848461557f565b6001600160a01b0383166000908152600985016020908152604090912083516147ce92850190616786565b506001600160a01b038316600090815260098501602090815260409091208251614800926001909201918401906167f8565b506001600160a01b0383166000818152600986016020526040908190206002015490517fe271bc17472b20d803bff415104ad56a96ce7671d274aacd82ecb65616868a839161485591869086906003906175dd565b60405180910390a250505050565b6000805160206177cb83398151915254604080517f7e95d664000000000000000000000000000000000000000000000000000000008152905160009260008051602061778b833981519152926110f99286926001600160a01b031691637e95d6649160048083019260209291908290030181865afa1580156148e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061490d9190616fca565b6149179190616ff9565b670de0b6b3a76400006154fe565b6000805160206177cb83398151915254815160208301516040517f3b1c290600000000000000000000000000000000000000000000000000000000815260009360008051602061778b833981519152936001600160a01b0390911692633b1c2906926122d1929190600401616c8d565b6000805160206177cb833981519152546040805163108433b560e01b8152905160008051602061778b833981519152926001600160a01b03169163108433b59160048083019260209291908290030181865afa1580156149f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a1d919061730e565b6001600160a01b0316846001600160a01b03160361105357614a3f8383615662565b611053565b600080670de0b6b3a7640000614a5a8486617413565b614a6491906173ff565b9050828110610f835760405162461bcd60e51b815260206004820152601860248201527f564d3a20466565203e2056455553442052656465656d6564000000000000000060448201526064016111d3565b6040517f3824174c00000000000000000000000000000000000000000000000000000000815260008051602061776b833981519152906000906001600160a01b03861690633824174c90614b0d90879060040161754f565b600060405180830381865afa158015614b2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b529190810190617562565b905060005b8451811015614c17576000858281518110614b7457614b74616fb4565b6020908102919091018101516001600160a01b0381166000908152600b87018352604080822054600c89019094529020919091558551909150859083908110614bbf57614bbf616fb4565b6020026020010151838381518110614bd957614bd9616fb4565b6020026020010151614beb9190617025565b6001600160a01b039091166000908152600d85016020526040902055614c108161700c565b9050614b57565b506040514281527f523f4c1c183d46bec16040588c9c0aee1cbce44d14a4499539c18ef5761b6c3d9060200161445d565b6001600160a01b03811660009081526000805160206177ab833981519152602052604081206004015460008051602061776b8339815191529060019060ff166005811115614c9857614c98616f9e565b14614ca65750600092915050565b6001600160a01b038316600090815260098201602090815260408083206012850183528184206013860190935290832090925b8354811015614d8e576000848281548110614cf657614cf6616fb4565b60009182526020808320909101546001600160a01b0316808352600e890182526040808420548884528185205460118c018552828620548986528387205460108e0187528488205460028d01909752939096205493965010931191118280614d5b5750815b80614d635750805b15614d79575060019a9950505050505050505050565b5050505080614d879061700c565b9050614cd9565b5060009695505050505050565b6000604051806101000160405280876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381526020018451815260200160008152602001600067ffffffffffffffff811115614e0157614e0161687a565b604051908082528060200260200182016040528015614e2a578160200160208202803683370190505b5081525090508060400151600003614e42575061210c565b614e4b816157fe565b9050614e568161588e565b614e5f81615a10565b505050505050565b60008051602061776b833981519152614e8183600061466e565b6001600160a01b0383166000908152600982016020908152604080832080546012860184528285206013870190945291842090939192915b83811015614fae576000858281548110614ed557614ed5616fb4565b60009182526020808320909101546001600160a01b039081168084528783526040808520859055600189018452808520859055600289018452808520859055918d16845260098b018352818420818552600301835281842054600b8c0190935292205491925090614f47908290617025565b6001600160a01b039283166000818152600b8b016020908152604080832094909455948d16815260098b018552828120918152600390910184528181208190558584528181208190556001860190935282209190915550614fa78161700c565b9050614eb9565b506000600282015560408051808201909152606080825260208201526001600160a01b03881660009081526009870160205260409020600401805488919060ff1916600183600581111561500457615004616f9e565b021790555080516001600160a01b03891660009081526009880160209081526040909120825161503993919290910190616786565b506020808201516001600160a01b038a16600090815260098901835260409020815161506e93600190920192909101906167f8565b506001600160a01b0388166000908152600987016020526040812060020155600a86015461509b81615b63565b6001600160a01b038916600090815260098801602052604081206004015461010090046001600160801b031690600a89016150d7600185617025565b815481106150e7576150e7616fb4565b600091825260209091200154600a8a0180546001600160a01b03909216925082916001600160801b03851690811061512157615121616fb4565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394851617905591831680825260098c018352604091829020600401805470ffffffffffffffffffffffffffffffff0019166101006001600160801b038816908102919091179091558251918252928101929092527f5108b30b1c08360822e1bfe7a4169b885b0a62765e9d04592cac9933f3879e46910160405180910390a188600a018054806151e2576151e2617618565b6000828152602090206000199082018101805473ffffffffffffffffffffffffffffffffffffffff191690550190556004898101546040517f29092d0e0000000000000000000000000000000000000000000000000000000081526001600160a01b038e8116938201939093529116906329092d0e90602401600060405180830381600087803b15801561527557600080fd5b505af1158015615289573d6000803e3d6000fd5b505050505050505050505050505050565b6000806000806152a9856131f6565b9250925092506130ba83838361455d565b6001600160a01b03811660009081526000805160206177ab833981519152602052604090206004015460008051602061776b8339815191529060019060ff16600581111561530a5761530a616f9e565b1461124c5760405162461bcd60e51b815260206004820152600160248201527f390000000000000000000000000000000000000000000000000000000000000060448201526064016111d3565b604051632a7ba1f760e01b8152600481018290526001600160a01b03841690632a7ba1f790602401600060405180830381600087803b15801561539957600080fd5b505af11580156153ad573d6000803e3d6000fd5b50506040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018490526001600160a01b0385169250639dc29fac91506044016146ea565b60008061456a8585612312565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561544a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061546e919061762e565b60ff1692915050565b6000631f54050082111561548d57631f54050091505b816000036154a45750670de0b6b3a7640000610f86565b670de0b6b3a764000083835b60018111156154f4576154c4600282617651565b156154d6576154d38284615b9d565b92505b6154e08283615b9d565b91506154ed6002826173ff565b90506154b0565b6113718284615b9d565b600081831061550d5781610f83565b5090919050565b6000805160206177cb833981519152546040517f617ddfff00000000000000000000000000000000000000000000000000000000815260009160008051602061778b833981519152916001600160a01b039091169063617ddfff906123649087908790600401616c8d565b60006040518060e00160405280866001600160a01b031681526020018581526020018481526020018381526020018451815260200160008152602001600067ffffffffffffffff8111156155d5576155d561687a565b6040519080825280602002602001820160405280156155fe578160200160208202803683370190505b50905280516001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3136020526040902090915060008051602061776b83398151915290615657838383615bd1565b611da6838383615d5b565b60008051602061776b833981519152600061567c8461540a565b6001600160a01b0385166000908152600b8401602052604081205491925060128311156156ca576156ae601284617025565b6156b990600a61750e565b6156c390836173ff565b90506156ed565b6156d5836012617025565b6156e090600a61750e565b6156ea9083617413565b90505b6001600160a01b03861660009081526016850160205260408120548290670de0b6b3a76400009061571e9089616ff9565b6157289190617413565b61573291906173ff565b9050670de0b6b3a76400006157478383617413565b61575191906173ff565b61575b9087617025565b6001600160a01b0388166000908152601687016020908152604080832093909355601088019052205461578f908290616ff9565b6001600160a01b03881660008181526010880160208181526040808420869055600e8b0182529283902054918152825191825281019390935290917f0270367653b934d86d1038756df3ecf15841c6ec1a8617414017be776b358f0c910160405180910390a250505050505050565b61585860405180610100016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016000815260200160008152602001606081525090565b61586c8260800151518360a0015114614526565b61587e82606001518360800151615f4e565b5060e08501525060c08301525090565b60008051602061776b83398151915260008051602061778b83398151915260005b8360a00151811015611053576000846060015182815181106158d3576158d3616fb4565b6020026020010151905060008560c0015186604001518760e0015185815181106158ff576158ff616fb4565b60200260200101516159119190617413565b61591b91906173ff565b6001600160a01b03831660009081526015870160205260408120549192509061594c670de0b6b3a764000084617413565b6159569190616ff9565b6001600160a01b0384166000908152600b88016020526040902054909150156159a8576159a3838860800151868151811061599357615993616fb4565b6020026020010151836001616014565b6159fc565b60408051600060c0820181815260e083018452825282518181526020808201855283015291810191909152606081018390526001600160a01b038416608082015260a081018590526159fc90888888616232565b50505080615a099061700c565b90506158af565b80516040808301519051632a7ba1f760e01b81526001600160a01b0390921691632a7ba1f791615a469160040190815260200190565b600060405180830381600087803b158015615a6057600080fd5b505af1158015615a74573d6000803e3d6000fd5b5050505080602001516001600160a01b0316632b7c7b1182604001516040518263ffffffff1660e01b8152600401615aae91815260200190565b600060405180830381600087803b158015615ac857600080fd5b505af1158015615adc573d6000803e3d6000fd5b505082516020840151606085015160808601516040517fd0d8c20d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909416955063d0d8c20d9450615b3593600401617665565b600060405180830381600087803b158015615b4f57600080fd5b505af115801561210c573d6000803e3d6000fd5b6001811161173a576040517fe4d78f0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080615baa8385617413565b9050670de0b6b3a7640000615bc76706f05b59d3b2000083616ff9565b610f6f91906173ff565b6000805b84602001515181101561210c576000856080015183101580615c43575085602001518281518110615c0857615c08616fb4565b60200260200101516001600160a01b031686604001518481518110615c2f57615c2f616fb4565b60200260200101516001600160a01b031614155b90508015615d3e57600086602001518381518110615c6357615c63616fb4565b6020908102919091018101516001600160a01b03808216600081815260018a01855260408082208290558c518416825260098c0180875281832084845260039081018852828420548f519096168452908752818320938352929092018552818120819055600b8b0190945290922054909250615ce0908290617025565b6001600160a01b0383166000818152600b8a01602090815260409182902084905581519283528201929092527fd5630907014190fb9340da1cf427c96f094dabfbf73d25506e4b0cda9e3a4ca0910160405180910390a15050615d4a565b615d478361700c565b92505b50615d548161700c565b9050615bd5565b615d6d83604001518460600151616646565b60c084015260005b8360800151811015615f3b57600084604001518281518110615d9957615d99616fb4565b602002602001015190506000615dcc8287606001518581518110615dbf57615dbf616fb4565b60200260200101516166f6565b86516001600160a01b039081166000908152600988016020818152604080842088861680865260039182018452828620548e519097168652938352818520938552929092018152818320859055600b8a019052902054919250908290615e33908390617025565b615e3d9190616ff9565b6001600160a01b0384166000908152600b8801602052604090205560c0870151805185908110615e6f57615e6f616fb4565b6020026020010151856001016000856001600160a01b03166001600160a01b03168152602001908152602001600020819055508660c001518481518110615eb857615eb8616fb4565b60200260200101518760a00151615ecf9190616ff9565b60a08801526001600160a01b0383166000818152600b88016020908152604091829020548251938452908301527fd5630907014190fb9340da1cf427c96f094dabfbf73d25506e4b0cda9e3a4ca0910160405180910390a150505080615f349061700c565b9050615d75565b508260a001518160020181905550505050565b6000805160206177cb833981519152546040517fab0084cf0000000000000000000000000000000000000000000000000000000081526000918291606091829160008051602061778b833981519152916001600160a01b03169063ab0084cf90615fbe908a908a90600401616c8d565b600060405180830381865afa158015615fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160039190810190617699565b929a91995097509095509350505050565b60008051602061776b833981519152600061602e8661540a565b6001600160a01b0387166000908152600b84016020526040812054919250601283111561607c57616060601284617025565b61606b90600a61750e565b61607590836173ff565b905061609f565b616087836012617025565b61609290600a61750e565b61609c9083617413565b90505b60006160ab82886173ff565b90506160b78282617413565b6160c19088617025565b6001600160a01b038a166000908152601587016020908152604080832093909355600f8801905220546160f5908290616ff9565b6001600160a01b038a166000908152600f8701602052604090205585156161c3576001600160a01b0389166000908152601486016020526040812054616143670de0b6b3a76400008b617413565b61614d9190616ff9565b9050600061615b84836173ff565b90506161678482617413565b6161719083617025565b6001600160a01b038c166000908152601489016020908152604080832093909355600e8a01905220546161a5908290616ff9565b6001600160a01b038c166000908152600e8901602052604090205550505b6001600160a01b0389166000818152600e87016020908152604080832054600f8a018352928190205481519485529184019290925282820152517f6f63d00bdf85957664165c9e20900aabd5a17378cb5c0955ce760e48a6ae48c79181900360600190a1505050505050505050565b8060020160009054906101000a90046001600160a01b03166001600160a01b0316631d4c200e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015616287573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162af9190810190617710565b6020860152845260005b8451518110156163795782600b016000866000015183815181106162df576162df616fb4565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054600003616369578460200151818151811061632557616325616fb4565b60200260200101518560400181815161633e9190616ff9565b90525060208501518051600091908390811061635c5761635c616fb4565b6020026020010181815250505b6163728161700c565b90506162b9565b50835151158061639457508360400151670de0b6b3a7640000145b156163ca576040517e37dd3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8451518110156164dc57846020015181815181106163ed576163ed616fb4565b6020026020010151600003156164cc5760008560000151828151811061641557616415616fb4565b6020026020010151905085604001516000146164655785604001518660200151838151811061644657616446616fb4565b6020026020010181815161645a9190616ff9565b905250600060408701525b6001600160a01b038116600090815260158501602090815260408220549088015180518590811061649857616498616fb4565b602002602001015188606001516164af9190617413565b6164b99190616ff9565b90506164c9826000836000616014565b50505b6164d58161700c565b90506163cd565b5080546002820154604080517f8f871a6c00000000000000000000000000000000000000000000000000000000815290516001600160a01b03938416936362f6105b931691638f871a6c9160048083019260209291908290030181865afa15801561654b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061656f919061730e565b866080015186608001518860a001518151811061658e5761658e616fb4565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561660057600080fd5b505af1158015616614573d6000803e3d6000fd5b50505050600083608001518560a001518151811061663457616634616fb4565b60200260200101818152505050505050565b6000805160206177cb833981519152546040517fa055852300000000000000000000000000000000000000000000000000000000815260609160008051602061778b833981519152916001600160a01b039091169063a0558523906166b19087908790600401616c8d565b600060405180830381865afa1580156166ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f6f9190810190617562565b6001600160a01b03821660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30d602052604081205460008051602061776b83398151915290820361674c5782915061677f565b6001600160a01b0384166000908152600d82016020908152604080832054600c850190925290912054615bc79085617413565b5092915050565b8280548282559060005260206000209081019282156167e8579160200282015b828111156167e8578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161782556020909201916001909101906167a6565b506167f4929150616833565b5090565b8280548282559060005260206000209081019282156167e8579160200282015b828111156167e8578251825591602001919060010190616818565b5b808211156167f45760008155600101616834565b6001600160a01b038116811461173a57600080fd5b60006020828403121561686f57600080fd5b8135610f8381616848565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156168b9576168b961687a565b604052919050565b600067ffffffffffffffff8211156168db576168db61687a565b5060051b60200190565b600082601f8301126168f657600080fd5b8135602061690b616906836168c1565b616890565b82815260059290921b8401810191818101908684111561692a57600080fd5b8286015b8481101561694e57803561694181616848565b835291830191830161692e565b509695505050505050565b600082601f83011261696a57600080fd5b8135602061697a616906836168c1565b82815260059290921b8401810191818101908684111561699957600080fd5b8286015b8481101561694e578035835291830191830161699d565b600080604083850312156169c757600080fd5b823567ffffffffffffffff808211156169df57600080fd5b6169eb868387016168e5565b93506020850135915080821115616a0157600080fd5b50616a0e85828601616959565b9150509250929050565b60008060408385031215616a2b57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015616a735781516001600160a01b031687529582019590820190600101616a4e565b509495945050505050565b600081518084526020808501945080840160005b83811015616a7357815187529582019590820190600101616a92565b87815260e060208201526000616ac760e0830189616a3a565b8281036040840152616ad98189616a7e565b90508660608401528281036080840152616af38187616a3a565b905082810360a0840152616b078186616a7e565b9150508260c083015298975050505050505050565b600060208284031215616b2e57600080fd5b5035919050565b60008060408385031215616b4857600080fd5b8235616b5381616848565b946020939093013593505050565b606081526000616b746060830186616a3a565b8281036020840152616b868186616a7e565b915050826040830152949350505050565b600080600060608486031215616bac57600080fd5b833567ffffffffffffffff80821115616bc457600080fd5b616bd0878388016168e5565b94506020860135915080821115616be657600080fd5b50616bf386828701616959565b925050604084013590509250925092565b60008060408385031215616c1757600080fd5b8235616c2281616848565b91506020830135616c3281616848565b809150509250929050565b801515811461173a57600080fd5b600080600060608486031215616c6057600080fd5b8335616c6b81616848565b9250602084013591506040840135616c8281616c3d565b809150509250925092565b604081526000616ca06040830185616a3a565b82810360208401526130ba8185616a7e565b60008060408385031215616cc557600080fd5b8235616cd081616848565b91506020830135616c3281616c3d565b60008083601f840112616cf257600080fd5b50813567ffffffffffffffff811115616d0a57600080fd5b6020830191508360208260051b8501011115616d2557600080fd5b9250929050565b60008060008060008060608789031215616d4557600080fd5b863567ffffffffffffffff80821115616d5d57600080fd5b616d698a838b01616ce0565b90985096506020890135915080821115616d8257600080fd5b616d8e8a838b01616ce0565b90965094506040890135915080821115616da757600080fd5b50616db489828a01616ce0565b979a9699509497509295939492505050565b60008060208385031215616dd957600080fd5b823567ffffffffffffffff811115616df057600080fd5b616dfc85828601616ce0565b90969095509350505050565b600080600060608486031215616e1d57600080fd5b8335616e2881616848565b9250602084013567ffffffffffffffff80821115616e4557600080fd5b616e51878388016168e5565b93506040860135915080821115616e6757600080fd5b50616e7486828701616959565b9150509250925092565b600080600060608486031215616e9357600080fd5b8335616e9e81616848565b92506020840135616eae81616848565b929592945050506040919091013590565b60a081526000616ed260a0830188616a3a565b8281036020840152616ee48188616a7e565b6040840196909652505060608101929092526001600160801b031660809091015292915050565b600080600080600060a08688031215616f2357600080fd5b8535616f2e81616848565b94506020860135616f3e81616848565b935060408601359250606086013567ffffffffffffffff80821115616f6257600080fd5b616f6e89838a016168e5565b93506080880135915080821115616f8457600080fd5b50616f9188828901616959565b9150509295509295909350565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215616fdc57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f8657610f86616fe3565b60006001820161701e5761701e616fe3565b5060010190565b81810381811115610f8657610f86616fe3565b8183526000602080850194508260005b85811015616a7357813561705b81616848565b6001600160a01b031687529582019590820190600101617048565b60808152600061708a60808301898b617038565b828103602084015261709c8189616a7e565b905082810360408401526170b1818789617038565b905082810360608401526170c6818587617038565b9a9950505050505050505050565b6000602082840312156170e657600080fd5b8151610f8381616c3d565b805160408084528151908401819052600091602091908201906060860190845b818110156171365783516001600160a01b031683529284019291840191600101617111565b50508483015186820387850152805180835290840192506000918401905b8083101561694e5783518252928401926001929092019190840190617154565b6001600160a01b038416815260606020820152600061719660608301856170f1565b828103604084015261137181856170f1565b600082601f8301126171b957600080fd5b815160206171c9616906836168c1565b82815260059290921b840181019181810190868411156171e857600080fd5b8286015b8481101561694e5780516171ff81616848565b83529183019183016171ec565b600082601f83011261721d57600080fd5b8151602061722d616906836168c1565b82815260059290921b8401810191818101908684111561724c57600080fd5b8286015b8481101561694e5780518352918301918301617250565b60006020828403121561727957600080fd5b815167ffffffffffffffff8082111561729157600080fd5b90830190604082860312156172a557600080fd5b6040516040810181811083821117156172c0576172c061687a565b6040528251828111156172d257600080fd5b6172de878286016171a8565b8252506020830151828111156172f357600080fd5b6172ff8782860161720c565b60208301525095945050505050565b60006020828403121561732057600080fd5b8151610f8381616848565b6004811061734957634e487b7160e01b600052602160045260246000fd5b9052565b600060808201868352602060808185015281875480845260a08601915060009350888452828420845b8281101561739b5781546001600160a01b031684529284019260019182019101617376565b50505084810360408601528654808252878452828420918301905b808510156173d5578254825260019485019490920191908301906173b6565b5093506130ba92505050606083018461732b565b634e487b7160e01b600052601260045260246000fd5b60008261740e5761740e6173e9565b500490565b8082028115828204841417610f8657610f86616fe3565b600181815b8085111561746557816000190482111561744b5761744b616fe3565b8085161561745857918102915b93841c939080029061742f565b509250929050565b60008261747c57506001610f86565b8161748957506000610f86565b816001811461749f57600281146174a9576174c5565b6001915050610f86565b60ff8411156174ba576174ba616fe3565b50506001821b610f86565b5060208310610133831016604e8410600b84101617156174e8575081810a610f86565b6174f2838361742a565b806000190482111561750657617506616fe3565b029392505050565b6000610f83838361746d565b60006020828403121561752c57600080fd5b815167ffffffffffffffff81111561754357600080fd5b610f6f848285016171a8565b602081526000610f836020830184616a3a565b60006020828403121561757457600080fd5b815167ffffffffffffffff81111561758b57600080fd5b610f6f8482850161720c565b6000806000606084860312156175ac57600080fd5b8351925060208401519150604084015167ffffffffffffffff8111156175d157600080fd5b616e748682870161720c565b8481526080602082015260006175f66080830186616a3a565b82810360408401526176088186616a7e565b9150506130ba606083018461732b565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561764057600080fd5b815160ff81168114610f8357600080fd5b600082617660576176606173e9565b500690565b6001600160a01b03841681526060602082015260006176876060830185616a3a565b82810360408401526113718185616a7e565b600080600080608085870312156176af57600080fd5b8451935060208501519250604085015167ffffffffffffffff808211156176d557600080fd5b6176e18883890161720c565b935060608701519150808211156176f757600080fd5b506177048782880161720c565b91505092959194509250565b6000806040838503121561772357600080fd5b825167ffffffffffffffff8082111561773b57600080fd5b617747868387016171a8565b9350602085015191508082111561775d57600080fd5b50616a0e8582860161720c56fe7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda300a36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e007239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda309a36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e02a2646970667358221220e1ca17863ea9ed0bc2946b72729642e58b895e7b8fa6e77303f78e71fd3f756f64736f6c63430008130033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104f95760003560e01c80638e201a14116102a1578063d380a37c1161016b578063e2c63e3c116100e3578063f000543111610097578063f36b24251161007c578063f36b242514610e4c578063f711e4b41461054e578063fefa753d1461085f57600080fd5b8063f000543114610ddd578063f180b6f014610e3957600080fd5b8063e4b6db4c116100c8578063e4b6db4c14610cc1578063e8ccaab214610db7578063eadd838114610dca57600080fd5b8063e2c63e3c14610c8a578063e34f6d4414610cae57600080fd5b8063de1623911161013a578063df349ed51161011f578063df349ed514610665578063e1f1825014610c64578063e2ac77b014610c7757600080fd5b8063de16239114610c09578063de66583514610c1c57600080fd5b8063d380a37c14610bb4578063d47607c514610bdb578063d5b3563514610bee578063da303f1414610c0157600080fd5b8063b9a9aaa511610219578063c17afd02116101cd578063c52861f2116101b2578063c52861f214610b72578063cf80c37214610b7a578063d283ea0414610ba157600080fd5b8063c17afd0214610b4c578063c308d81c14610b5f57600080fd5b8063bb2cebe3116101fe578063bb2cebe314610ab7578063c0af0d3b14610b13578063c0d5287314610a0657600080fd5b8063b9a9aaa514610a4c578063ba6e79f714610a5f57600080fd5b8063af3700dc11610270578063b2b9c5aa11610255578063b2b9c5aa14610a06578063b620115d14610a31578063b698591b14610a3957600080fd5b8063af3700dc146109ab578063b1dc4c1c146109f357600080fd5b80638e201a141461095c57806392edfc151461097d578063a8bee0e714610985578063abd2eec51461099857600080fd5b80633d95f5e8116103e257806362e768741161035a5780636b87d1761161030e57806378f85876116102f357806378f8587614610901578063795d26c31461094c578063887105d31461095457600080fd5b80636b87d176146108a75780636f758578146108ba57600080fd5b806364f23caa1161033f57806364f23caa1461084457806366ca4a2114610857578063693c781c1461085f57600080fd5b806362e768741461081e578063631203b01461083157600080fd5b806345979978116103b15780634ff81443116103965780634ff81443146107e557806354062a45146107f8578063614e64d91461080b57600080fd5b806345979978146107ca578063477d66cf146107d257600080fd5b80633d95f5e81461073757806343a124fa1461074a578063448c726414610752578063450031f21461079c57600080fd5b8063180d97c11161047557806327fb7d8911610444578063325e370d11610429578063325e370d146106ef578063330283aa146107025780633a1141eb1461071557600080fd5b806327fb7d89146106d45780632b11551a146106e757600080fd5b8063180d97c1146106205780631d08837b146106335780631e7ff8f6146106655780631f68f20a146106ad57600080fd5b80630b076557116104cc578063105bb15c116104b1578063105bb15c146105df5780631216cd31146105e757806312adf0c2146105fa57600080fd5b80630b076557146105a95780630c5aed57146105bc57600080fd5b80630173f543146104fe578063043782fb1461052457806308ca32a51461054e5780630ab06ea414610596575b600080fd5b61051161050c36600461685d565b610e54565b6040519081526020015b60405180910390f35b61054c427f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31855565b005b61051161055c36600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30f602052604090205490565b6105116105a43660046169b4565b610f77565b61054c6105b736600461685d565b610f8c565b6105cf6105ca36600461685d565b61105a565b604051901515815260200161051b565b610511611065565b6105116105f5366004616a18565b611074565b61060d61060836600461685d565b611080565b60405161051b9796959493929190616aae565b61051161062e36600461685d565b6110ac565b61054c610641366004616b1c565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31755565b61051161067336600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30b602052604090205490565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31754610511565b6105116106e236600461685d565b611100565b61051161110b565b61054c6106fd366004616b35565b611115565b61054c610710366004616b1c565b61117f565b61072861072336600461685d565b611250565b60405161051b93929190616b61565b610511610745366004616b97565b61126c565b6105cf61137b565b610511610760366004616c04565b6001600160a01b0391821660009081526000805160206177ab833981519152602090815260408083209390941682526003909201909152205490565b6107af6107aa36600461685d565b611385565b6040805193845260208401929092529082015260600161051b565b610511611393565b6105116107e0366004616b1c565b61139d565b6105116107f3366004616b1c565b6113b0565b610511610806366004616b1c565b6113bb565b61054c610819366004616b1c565b6113c6565b61051161082c36600461685d565b6113ed565b61051161083f366004616b1c565b6114db565b610511610852366004616c4b565b6114e8565b61051161158d565b61051161086d36600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30e602052604090205490565b61054c6108b536600461685d565b61159f565b6105116108c836600461685d565b6001600160a01b031660009081526000805160206177ab833981519152602052604090206004015461010090046001600160801b031690565b61051161090f36600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda313602052604090206002015490565b610511611637565b610511611641565b61096f61096a36600461685d565b61164b565b60405161051b929190616c8d565b61054c61166c565b61072861099336600461685d565b6116ab565b61054c6109a6366004616cb2565b6116cd565b6105116109b936600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30c602052604090205490565b61054c610a0136600461685d565b61171f565b610a19610a14366004616b1c565b61173d565b6040516001600160a01b03909116815260200161051b565b61051161179f565b61054c610a47366004616d2c565b6117a9565b610511610a5a366004616b35565b611944565b610511610a6d366004616c04565b6001600160a01b0391821660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3126020908152604080832093909416825291909152205490565b610511610ac5366004616c04565b6001600160a01b0391821660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda312602090815260408083209390941682526001909201909152205490565b610511610b2136600461685d565b6001600160a01b031660009081526000805160206177ab833981519152602052604090206002015490565b61054c610b5a366004616dc6565b611a31565b61054c610b6d366004616e08565b611b33565b610511611b62565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30a54610511565b610511610baf3660046169b4565b611b74565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31854610511565b61054c610be9366004616e7e565b611ba6565b610511610bfc366004616b1c565b611daf565b610511611dc2565b610511610c17366004616b1c565b611e70565b610511610c2a36600461685d565b6001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30d602052604090205490565b61054c610c72366004616e08565b611f5f565b6105cf610c8536600461685d565b611f72565b610c9d610c9836600461685d565b611f7d565b60405161051b959493929190616ebf565b61054c610cbc366004616f0b565b6120f7565b6040805160808082018352600080835260208084018290528385018290526060938401919091528351808301855260008051602061778b833981519152546001600160a01b039081168083527fa36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e015482168385019081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3035483168489019081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30654841694880194855288519283529051831694820194909452925181169583019590955251909316918301919091520161051b565b61054c610dc5366004616b35565b612113565b61096f610dd836600461685d565b612136565b610511610deb366004616c04565b6001600160a01b0391821660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda313602090815260408083209390941682526001909201909152205490565b610511610e4736600461685d565b61222b565b610511612236565b60408051808201825260608082526020808301919091526001600160a01b03841660009081526000805160206177ab83398151915282528381208054855181850281018501909652808652919460008051602061776b8339815191529493909290830182828015610eee57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ed0575b50505091835250506001600160a01b038416600090815260098301602090815260409182902060010180548351818402810184019094528084529091830182828015610f5957602002820191906000526020600020905b815481526020019060010190808311610f45575b50505050508160200181905250610f6f8161227a565b949350505050565b6000610f838383612312565b90505b92915050565b3360009081527fdd3d3f73ef9314ee8a864e3b99d0c7aef094848203e31c25139eff48ad82d200602081905260409091205460008051602061776b8339815191529060ff16158015610feb575060058101546001600160a01b03163314155b1561100957604051630aa9c95160e01b815260040160405180910390fd5b60008051602061778b83398151915280547fa36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e0154611053916001600160a01b039081169116866123a5565b505b505050565b6000610f8682612d8e565b600061106f612de6565b905090565b6000610f838383612e32565b60006060806000606080600061109588612e62565b959e949d50929b5090995097509550909350915050565b6001600160a01b03811660009081526000805160206177ab833981519152602052604081206004015460008051602061776b8339815191529060ff1660058111156110f9576110f9616f9e565b9392505050565b6000610f868261309a565b600061106f6130c3565b61111d613101565b60008051602061776b83398151915281600581111561113e5761113e616f9e565b6001600160a01b03841660009081526009830160205260409020600401805460ff1916600183600581111561117557611175616f9e565b0217905550505050565b611187613101565b806000036111dc5760405162461bcd60e51b815260206004820152600160248201527f360000000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31781905560408051828152905160008051602061776b833981519152917fc454ee9b76c52f782a256af821b857ca6e125d1e3333bcede402fec2bed9600c919081900360200190a161124c613174565b5050565b606080600061125e846131f6565b9250925092505b9193909250565b60008060008051602061778b833981519152815b855181101561136657600282015487516001600160a01b0390911690632e2b1a88908990849081106112b4576112b4616fb4565b60200260200101518884815181106112ce576112ce616fb4565b60200260200101516040518363ffffffff1660e01b81526004016113079291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190616fca565b6113529084616ff9565b92508061135e8161700c565b915050611280565b506113718285612e32565b9695505050505050565b600061106f6133f2565b600080600061125e846134a8565b600061106f6138b5565b6000610f866113aa61158d565b83613912565b6000610f8682613927565b6000610f86826139bf565b6113ce613a57565b60008051602061776b8339815191526113e76001613ab8565b60070155565b60006113f7613101565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30a80546001808201835560008381527fcea295d76ab5ea6411d4ff6ea46a713d1bc5a25dd53e284dfbcf06e3746fef17909201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038716179055915460008051602061776b8339815191529261148b91617025565b6001600160a01b039490941660009081526009929092016020525060409020600401805470ffffffffffffffffffffffffffffffff0019166101006001600160801b039094169384021790555090565b6000610f866113aa612236565b60006114f2613101565b60008051602061776b8339815191528215611537576001600160a01b0385166000908152600982016020526040902060020154611530908590616ff9565b9150611563565b6001600160a01b0385166000908152600982016020526040902060020154611560908590617025565b91505b6001600160a01b039094166000908152600990940160205260409093206002018390555090919050565b600061106f61159a611393565b613d96565b6115a7613a57565b6001600160a01b03811660008181527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3116020908152604091829020670de0b6b3a764000090819055825193845290830152805160008051602061776b833981519152927f52e4f8484d40265d451853e623ddb061dc0c032aed194312dfdd5ff5f92e855a92908290030190a15050565b600061106f613ec8565b600061106f613fdf565b606080600061165984614075565b8051602090910151909590945092505050565b6000805160206177cb8339815191525460008051602061778b833981519152906000906001600160a01b031633036116a2575060015b61124c81613ab8565b6060806000806000806116bd876131f6565b9199909850909650945050505050565b6116d5613a57565b6001600160a01b039190911660009081527fdd3d3f73ef9314ee8a864e3b99d0c7aef094848203e31c25139eff48ad82d20060205260409020805460ff1916911515919091179055565b611727613101565b6117316000613ab8565b61173a816142e8565b50565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30a805460009160008051602061776b833981519152918490811061178357611783616fb4565b6000918252602090912001546001600160a01b03169392505050565b600061106f61446c565b826117c086821480156117bb57508183145b614526565b60008167ffffffffffffffff8111156117db576117db61687a565b604051908082528060200260200182016040528015611804578160200160208202803683370190505b5090506118116000613ab8565b60005b828110156118935760008060006118508c8c8681811061183657611836616fb4565b905060200201602081019061184b919061685d565b6131f6565b92509250925061186183838361455d565b85858151811061187357611873616fb4565b6020026020010181815250505050508061188c9061700c565b9050611814565b507f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda304546040517f8f37e2b80000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690638f37e2b890611908908b908b9086908c908c908c908c90600401617076565b600060405180830381600087803b15801561192257600080fd5b505af1158015611936573d6000803e3d6000fd5b505050505050505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050838160008151811061197d5761197d616fb4565b6001600160a01b03929092166020928302919091019091015260408051600180825281830190925260009181602001602082028036833701905050905083816000815181106119ce576119ce616fb4565b6020026020010181815250506000604051806040016040528084815260200183815250905060006119fe82614576565b905060008160200151600081518110611a1957611a19616fb4565b60200260200101519050809550505050505092915050565b60008051602061778b83398151915260005b8281101561105357611b23848483818110611a6057611a60616fb4565b9050602002016020810190611a75919061685d565b8360020160009054906101000a90046001600160a01b03166001600160a01b031663794e57246040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aee9190616fca565b611b1d878786818110611b0357611b03616fb4565b9050602002016020810190611b18919061685d565b61309a565b1061466e565b611b2c8161700c565b9050611a43565b611b3b613101565b611b488151835114614526565b61105560008051602061776b833981519152848484614718565b600061106f611b6f611393565b614863565b6000611b93604051806040016040528060608152602001606081525090565b83815260208101839052610f6f81614925565b3360009081527fdd3d3f73ef9314ee8a864e3b99d0c7aef094848203e31c25139eff48ad82d200602081905260409091205460008051602061776b8339815191529060ff16158015611c05575060058101546001600160a01b03163314155b15611c2357604051630aa9c95160e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a0823190602401602060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e9190616fca565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529091506001600160a01b038716906323b872dd906064016020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2191906170d4565b506040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d9190616fca565b9050611d998282617025565b9450611da6878787614995565b50505050505050565b6000610f86611dbc611b62565b83614a44565b600060008051602061776b833981519152611ddb611393565b60178201819055670de0b6b3a76400001015611e5f5760405162461bcd60e51b815260206004820152603360248201527f756e70726f7465637465644465636179426173655261746546726f6d426f727260448201527f6f77696e673a206261642062617365526174650000000000000000000000000060648201526084016111d3565b611e67613174565b60170154919050565b6000611e7a613101565b6000611e84611393565b9050670de0b6b3a7640000811115611ede5760405162461bcd60e51b815260206004820152600160248201527f380000000000000000000000000000000000000000000000000000000000000060448201526064016111d3565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda31781905560408051828152905160008051602061776b833981519152917fc454ee9b76c52f782a256af821b857ca6e125d1e3333bcede402fec2bed9600c919081900360200190a1611f4e613174565b610f6f611f59612236565b85613912565b611f67613101565b611055838383614ab5565b6000610f8682614c48565b6001600160a01b03811660009081526000805160206177ab833981519152602090815260408083208054825181850281018501909352808352606094859490938493849360008051602061776b8339815191529383018282801561200a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fec575b505050506001600160a01b03891660009081526009840160209081526040918290206001018054835181840281018401909452808452949a50919391925083018282801561207757602002820191906000526020600020905b815481526020019060010190808311612063575b505050506001600160a01b03891660009081526009840160205260409020600281015460049091015492975095505060ff1660058111156120ba576120ba616f9e565b6001600160a01b038816600090815260099092016020526040909120600401549092506001600160801b0361010090910416905091939590929450565b6120ff613101565b61210c8585858585614d9b565b5050505050565b61211b613101565b61124c8282600581111561213157612131616f9e565b614e67565b6001600160a01b03811660009081526000805160206177ab83398151915260209081526040918290208054835181840281018401909452808452606093849360008051602061776b83398151915293926001840192918491908301828280156121c857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121aa575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561221a57602002820191906000526020600020905b815481526020019060010190808311612206575b505050505090509250925050915091565b6000610f868261529a565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3175460009060008051602061776b8339815191529061227490613d96565b91505090565b6000805160206177cb83398151915254815160208301516040516397a4b9f760e01b815260009360008051602061778b833981519152936001600160a01b03909116926397a4b9f7926122d1929190600401616c8d565b602060405180830381865afa1580156122ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190616fca565b6000805160206177cb833981519152546040516397a4b9f760e01b815260009160008051602061778b833981519152916001600160a01b03909116906397a4b9f7906123649087908790600401616c8d565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190616fca565b60008051602061776b8339815191526123be6000613ab8565b6123c782614c48565b15611053576123d5826152ba565b60006123e083614075565b905060008060006123f0866134a8565b6001600160a01b03891660009081526009890160209081526040918290208251808401845260608082528184015281548451818502810185019095528085529699509497509295509193909184919083018282801561247857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161245a575b5050509183525050600182018054604080516020808402820181019092528281529291908301828280156124cb57602002820191906000526020600020905b8154815260200190600101908083116124b7575b505050505060208201526000805160206177cb83398151915254604051635799186760e01b815273__$dd008e7fdb676c23adfd59cbc2bd3a4768$__91635799186791612528916001600160a01b03169085908b90600401617174565b600060405180830381865af4158015612545573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261256d9190810190617267565b8051805191925061258391849160200190616786565b50602080820151805161259c92600186019201906167f8565b506000836125aa8688616ff9565b116125b65760006125cb565b836125c18688616ff9565b6125cb9190617025565b90508083600201546125dd9190616ff9565b600284015583158015906125ef575080155b15612afe578383600201541115612947576000805160206177cb83398151915254604080517f969c245200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163969c24529160048083019260209291908290030181865afa158015612670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126949190616fca565b905060006126a585600201546139bf565b905060006126b38783617025565b9050828110612767578686600201546126cc9190617025565b60028701556127628e60008051602061778b83398151915260020160009054906101000a90046001600160a01b03166001600160a01b031663108433b56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275c919061730e565b89615357565b61293f565b60008387600201546127799190617025565b905061280c8f60008051602061778b83398151915260020160009054906101000a90046001600160a01b03166001600160a01b031663108433b56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612806919061730e565b83615357565b80876002015461281c9190617025565b60028801556000805160206177cb833981519152546040805163108433b560e01b815290516001600160a01b039092169163108433b5916004808201926020929091908290030181865afa158015612878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289c919061730e565b6001600160a01b031663a9059cbb8e6128b5848c617025565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612918573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293c91906170d4565b50505b505050612afe565b60008360020154856129599190617025565b6000805160206177cb833981519152546040805163108433b560e01b815290519293506129e4928f926001600160a01b03169163108433b59160048083019260209291908290030181865afa1580156129b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129da919061730e565b8660020154615357565b600060028501558015612afc576000805160206177cb833981519152546040805163108433b560e01b815290516001600160a01b039092169163108433b5916004808201926020929091908290030181865afa158015612a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6c919061730e565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038c8116600483015260248201849052919091169063a9059cbb906044016020604051808303816000875af1158015612ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afa91906170d4565b505b505b60058801546040517f56869930000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b0390911690635686993090602401600060405180830381600087803b158015612b5f57600080fd5b505af1158015612b73573d6000803e3d6000fd5b50505050600283015415612b8f57612b8a896142e8565b612b9a565b612b9a896005614e67565b604051632a7ba1f760e01b8152600481018790526001600160a01b038b1690632a7ba1f790602401600060405180830381600087803b158015612bdc57600080fd5b505af1158015612bf0573d6000803e3d6000fd5b505050506000811115612c71576040517f2b7c7b11000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b038c1690632b7c7b1190602401600060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b505050505b865160208801516040517f116426ae0000000000000000000000000000000000000000000000000000000081526001600160a01b038d169263116426ae92612cbb92600401616c8d565b600060405180830381600087803b158015612cd557600080fd5b505af1158015612ce9573d6000803e3d6000fd5b5050604080516001600160a01b038d168152602081018990527f11883dbbc997d02c733f213f8862794f7634669925e006376cee371143442ca1935001905060405180910390a160028301546040516001600160a01b038b16917fe271bc17472b20d803bff415104ad56a96ce7671d274aacd82ecb65616868a8391612d7991908790600182019060009061734d565b60405180910390a25050505050505050505050565b6001600160a01b03811660009081526000805160206177ab833981519152602052604081206004015460008051602061776b8339815191529060019060ff166005811115612dde57612dde616f9e565b149392505050565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3185460009060008051602061776b83398151915290603c90612e289042617025565b61227491906173ff565b600081600003612e455750600019610f86565b81612e5884670de0b6b3a7640000617413565b610f8391906173ff565b6000606080828180828060008051602061776b8339815191526001600160a01b038a1660008181526009830160208181526040808420600281015482518084018452606080825281860152969095529282528254815181840281018401909252808252959650929490830182828015612f0457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612ee6575b50505091835250506001600160a01b038b16600090815260098401602090815260409182902060010180548351818402810184019094528084529091830182828015612f6f57602002820191906000526020600020905b815481526020019060010190808311612f5b575b505050505081602001819052506000806000612f8a8e6134a8565b9250925092506000612f9b8f614075565b905082612fa88588616ff9565b612fb29190616ff9565b955081861115612fcd57612fc68287617025565b9550612fd2565b600095505b6000805160206177cb83398151915254604051635799186760e01b815273__$dd008e7fdb676c23adfd59cbc2bd3a4768$__91635799186791613025916001600160a01b03169089908690600401617174565b600060405180830381865af4158015613042573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261306a9190810190617267565b805160209182015183519390920151979f509d509b50929950919750929550919350505050919395979092949650565b6000806000806130a9856131f6565b9250925092506130ba8383836153fd565b95945050505050565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3175460009060008051602061776b8339815191529061227490614863565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3055460008051602061776b833981519152906001600160a01b0316331461173a576040517f9868495900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3185460008051602061776b83398151915290603c906131b39042617025565b1061173a5742601882018190556040519081527f860f8d2f0c74dd487e89e2883e3b25b8159ce1e1b3433a291cba7b82c508f3bc9060200160405180910390a150565b606080600060008051602061776b8339815191528161321486614075565b90506000806000613224896134a8565b6001600160a01b038c166000908152600989016020908152604091829020825180840184526060808252818401528154845181850281018501909552808552969950949750929550919390918491908301828280156132ac57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161328e575b5050509183525050600182018054604080516020808402820181019092528281529291908301828280156132ff57602002820191906000526020600020905b8154815260200190600101908083116132eb575b505050505060208201526000805160206177cb83398151915254604051635799186760e01b815273__$dd008e7fdb676c23adfd59cbc2bd3a4768$__9163579918679161335c916001600160a01b03169085908b90600401617174565b600060405180830381865af4158015613379573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133a19190810190617267565b9050838583600201546133b49190616ff9565b6133be9190616ff9565b97508288116133ce5760006133d8565b6133d88389617025565b8151602090920151919c919b509950975050505050505050565b6000805160206177cb83398151915254604080517f5733d58f000000000000000000000000000000000000000000000000000000008152905160009260008051602061778b833981519152926001600160a01b0390911691635733d58f916004808201926020929091908290030181865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134999190616fca565b6134a161446c565b1091505090565b6001600160a01b03811660009081526000805160206177ab83398151915260205260408120600401548190819060008051602061778b8339815191529060008051602061776b8339815191529060019060ff16600581111561350c5761350c616f9e565b146135235760008060009450945094505050611265565b6001600160a01b038087166000908152600983016020908152604080832060028701548251637d92c3bb60e01b8152925191951692637d92c3bb92600480820193918290030181865afa15801561357e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a29190616fca565b6001600160a01b03891660009081526009850160205260409020600201546135ca9190617025565b6001600160a01b0389166000908152601385016020526040812091925090815b8454811015613885576136426040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600086838154811061365657613656616fb4565b60009182526020808320909101546001600160a01b031680835286825260408084205480875282855260118d019093529092205491925061369691617025565b60208301819052158015906136ab5750815115155b156136fa5781516020808401516001600160a01b03841660009081526001880190925260408220549192916136e09190617413565b6136ea91906173ff565b90506136f68187616ff9565b9550505b6001600160a01b03808e16600090815260128a01602090815260408083209385168084526001909401825280832054868201819052938352600f8c019091529020546137469190617025565b606083019081526001600160a01b03808f16600090815260098b01602090815260408083209386168352600390930190522054608084015251156137ca5761378d8161540a565b61379890600a61750e565b826060015183608001516137ac9190617413565b6137b691906173ff565b60a083018190526137c7908d616ff9565b9b505b6001600160a01b03808e16600090815260128a0160209081526040808320938516808452600290940182528083205460c0870181905293835260108c019091529020546138179190617025565b60e0830181905260000361382c575050613875565b6138358161540a565b61384090600a61750e565b8260e0015183608001516138549190617413565b61385e91906173ff565b6101008301819052613870908b616ff9565b995050505b61387e8161700c565b90506135ea565b5081156138a857600281015461389b8484617413565b6138a591906173ff565b97505b5050505050509193909250565b600060008051602061776b833981519152816138cf612de6565b905060006138e5670de0976e8a60170083615477565b9050670de0b6b3a76400008184601701546139009190617413565b61390a91906173ff565b935050505090565b6000670de0b6b3a7640000612e588385617413565b6000805160206177cb8339815191525460408051637d92c3bb60e01b8152905160009260008051602061778b833981519152926001600160a01b0390911691637d92c3bb916004808201926020929091908290030181865afa158015613991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b59190616fca565b6110f99084616ff9565b6000805160206177cb8339815191525460408051637d92c3bb60e01b8152905160009260008051602061778b833981519152926001600160a01b0390911691637d92c3bb916004808201926020929091908290030181865afa158015613a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4d9190616fca565b6110f99084617025565b6000805160206177cb8339815191525460008051602061778b833981519152906001600160a01b0316331461173a576040517f23019e6700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3085460008051602061776b8339815191529060008051602061778b83398151915290600090613b079042617025565b90508380613b19575082600701548110155b1561105357600783015415613d8a576002820154604080517f9d6aea0a00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691639d6aea0a91600480830192869291908290030181865afa158015613b8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bb4919081019061751a565b60028401546040517fbf21ad9c0000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063bf21ad9c90613c0590859060040161754f565b600060405180830381865afa158015613c22573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c4a9190810190617562565b905060005b8251811015613d8657818181518110613c6a57613c6a616fb4565b6020026020010151600014613d76576000838281518110613c8d57613c8d616fb4565b602002602001015190506000876007015486858581518110613cb157613cb1616fb4565b6020026020010151613cc39190617413565b613ccd91906173ff565b613cdf90670de0b6b3a7640000616ff9565b6001600160a01b038316600090815260118a016020526040902054909150670de0b6b3a764000090613d12908390617413565b613d1c91906173ff565b6001600160a01b038316600081815260118b01602090815260409182902084905581519283528201929092527f52e4f8484d40265d451853e623ddb061dc0c032aed194312dfdd5ff5f92e855a910160405180910390a150505b613d7f8161700c565b9050613c4f565b5050505b42600884015550505050565b6000805160206177cb83398151915254604080517f5e9e3212000000000000000000000000000000000000000000000000000000008152905160009260008051602061778b833981519152926110f99286926001600160a01b031691635e9e32129160048083019260209291908290030181865afa158015613e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e409190616fca565b613e4a9190616ff9565b8260020160009054906101000a90046001600160a01b03166001600160a01b0316634056d9fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec39190616fca565b6154fe565b7fa36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e0154604080516381b7f1bf60e01b8152905160009260008051602061778b833981519152926001600160a01b03909116916381b7f1bf916004808201926020929091908290030181865afa158015613f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f689190616fca565b8154604080516381b7f1bf60e01b815290516001600160a01b03909216916381b7f1bf916004808201926020929091908290030181865afa158015613fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fd59190616fca565b6122749190616ff9565b60008051602061778b8339815191528054604080517f651340c40000000000000000000000000000000000000000000000000000000081529051600093926001600160a01b03169163651340c49160048083019260209291908290030181865afa158015614051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122749190616fca565b6040805180820190915260608082526020820152600060008051602061776b833981519152905060016001600160a01b038416600090815260098301602052604090206004015460ff1660058111156140d0576140d0616f9e565b146140f05760408051808201909152606080825260208201529392505050565b6001600160a01b038316600090815260098201602090815260408083208054825181850281018501909352808352919290919083018282801561415c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161413e575b50508351939450839250505067ffffffffffffffff8111156141805761418061687a565b6040519080825280602002602001820160405280156141a9578160200160208202803683370190505b50602085015281845260005b818110156142df5760008382815181106141d1576141d1616fb4565b6020908102919091018101516001600160a01b03808a1660009081526012890184526040808220928416825291845281812054600e8a01909452908120549193509061421e908390617025565b9050806000036142545760008860200151858151811061424057614240616fb4565b6020026020010181815250505050506142cf565b61425d8361540a565b61426890600a61750e565b6001600160a01b03808b16600090815260098a0160209081526040808320938816835260039093019052205461429f908390617413565b6142a991906173ff565b886020015185815181106142bf576142bf616fb4565b6020026020010181815250505050505b6142d88161700c565b90506141b5565b50505050919050565b6001600160a01b03811660009081526000805160206177ab83398151915260209081526040808320805482518185028101850190935280835260008051602061776b833981519152949383018282801561436b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161434d575b505050506001600160a01b038516600090815260138501602090815260408083206012880190925282209394509291505b83518110156144305760008482815181106143b9576143b9616fb4565b6020908102919091018101516001600160a01b03166000908152600e8801825260408082205486845281832055600f89018352808220546001870184528183205560108901835280822054600287018452818320556011890183528082205492879052902055506144298161700c565b905061439c565b506040514281527f9bfce77ba2b67b7b6e0b412ddd847887ab3f997cd47753fcf246242a8b33f14f906020015b60405180910390a15050505050565b60008051602061778b8339815191528054604080517f896a008900000000000000000000000000000000000000000000000000000000815290516000939284926001600160a01b039091169163896a00899160048082019286929091908290030181865afa1580156144e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261450a9190810190617597565b5091505061451f8161451a613ec8565b612e32565b9250505090565b8061173a576040517f7db491eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061456a8585615514565b90506130ba8184612e32565b6040805180820190915260608082526020820152815180519082528067ffffffffffffffff8111156145aa576145aa61687a565b6040519080825280602002602001820160405280156145d3578160200160208202803683370190505b50602083015260005b8181101561466757836020015181815181106145fa576145fa616fb4565b6020026020010151600003156146575760c88460200151828151811061462257614622616fb4565b602002602001015161463491906173ff565b8360200151828151811061464a5761464a616fb4565b6020026020010181815250505b6146608161700c565b90506145dc565b5050919050565b7f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda304546040517f38b1696b0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015260008051602061776b8339815191529216906338b1696b906044015b600060405180830381600087803b15801561470457600080fd5b505af1158015611da6573d6000803e3d6000fd5b6147258151835114614526565b6001600160a01b038316600090815260098501602090815260409182902080548351818402810184019094528084526147a39387939092919083018282801561479757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614779575b5050505050848461557f565b6001600160a01b0383166000908152600985016020908152604090912083516147ce92850190616786565b506001600160a01b038316600090815260098501602090815260409091208251614800926001909201918401906167f8565b506001600160a01b0383166000818152600986016020526040908190206002015490517fe271bc17472b20d803bff415104ad56a96ce7671d274aacd82ecb65616868a839161485591869086906003906175dd565b60405180910390a250505050565b6000805160206177cb83398151915254604080517f7e95d664000000000000000000000000000000000000000000000000000000008152905160009260008051602061778b833981519152926110f99286926001600160a01b031691637e95d6649160048083019260209291908290030181865afa1580156148e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061490d9190616fca565b6149179190616ff9565b670de0b6b3a76400006154fe565b6000805160206177cb83398151915254815160208301516040517f3b1c290600000000000000000000000000000000000000000000000000000000815260009360008051602061778b833981519152936001600160a01b0390911692633b1c2906926122d1929190600401616c8d565b6000805160206177cb833981519152546040805163108433b560e01b8152905160008051602061778b833981519152926001600160a01b03169163108433b59160048083019260209291908290030181865afa1580156149f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a1d919061730e565b6001600160a01b0316846001600160a01b03160361105357614a3f8383615662565b611053565b600080670de0b6b3a7640000614a5a8486617413565b614a6491906173ff565b9050828110610f835760405162461bcd60e51b815260206004820152601860248201527f564d3a20466565203e2056455553442052656465656d6564000000000000000060448201526064016111d3565b6040517f3824174c00000000000000000000000000000000000000000000000000000000815260008051602061776b833981519152906000906001600160a01b03861690633824174c90614b0d90879060040161754f565b600060405180830381865afa158015614b2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b529190810190617562565b905060005b8451811015614c17576000858281518110614b7457614b74616fb4565b6020908102919091018101516001600160a01b0381166000908152600b87018352604080822054600c89019094529020919091558551909150859083908110614bbf57614bbf616fb4565b6020026020010151838381518110614bd957614bd9616fb4565b6020026020010151614beb9190617025565b6001600160a01b039091166000908152600d85016020526040902055614c108161700c565b9050614b57565b506040514281527f523f4c1c183d46bec16040588c9c0aee1cbce44d14a4499539c18ef5761b6c3d9060200161445d565b6001600160a01b03811660009081526000805160206177ab833981519152602052604081206004015460008051602061776b8339815191529060019060ff166005811115614c9857614c98616f9e565b14614ca65750600092915050565b6001600160a01b038316600090815260098201602090815260408083206012850183528184206013860190935290832090925b8354811015614d8e576000848281548110614cf657614cf6616fb4565b60009182526020808320909101546001600160a01b0316808352600e890182526040808420548884528185205460118c018552828620548986528387205460108e0187528488205460028d01909752939096205493965010931191118280614d5b5750815b80614d635750805b15614d79575060019a9950505050505050505050565b5050505080614d879061700c565b9050614cd9565b5060009695505050505050565b6000604051806101000160405280876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381526020018451815260200160008152602001600067ffffffffffffffff811115614e0157614e0161687a565b604051908082528060200260200182016040528015614e2a578160200160208202803683370190505b5081525090508060400151600003614e42575061210c565b614e4b816157fe565b9050614e568161588e565b614e5f81615a10565b505050505050565b60008051602061776b833981519152614e8183600061466e565b6001600160a01b0383166000908152600982016020908152604080832080546012860184528285206013870190945291842090939192915b83811015614fae576000858281548110614ed557614ed5616fb4565b60009182526020808320909101546001600160a01b039081168084528783526040808520859055600189018452808520859055600289018452808520859055918d16845260098b018352818420818552600301835281842054600b8c0190935292205491925090614f47908290617025565b6001600160a01b039283166000818152600b8b016020908152604080832094909455948d16815260098b018552828120918152600390910184528181208190558584528181208190556001860190935282209190915550614fa78161700c565b9050614eb9565b506000600282015560408051808201909152606080825260208201526001600160a01b03881660009081526009870160205260409020600401805488919060ff1916600183600581111561500457615004616f9e565b021790555080516001600160a01b03891660009081526009880160209081526040909120825161503993919290910190616786565b506020808201516001600160a01b038a16600090815260098901835260409020815161506e93600190920192909101906167f8565b506001600160a01b0388166000908152600987016020526040812060020155600a86015461509b81615b63565b6001600160a01b038916600090815260098801602052604081206004015461010090046001600160801b031690600a89016150d7600185617025565b815481106150e7576150e7616fb4565b600091825260209091200154600a8a0180546001600160a01b03909216925082916001600160801b03851690811061512157615121616fb4565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394851617905591831680825260098c018352604091829020600401805470ffffffffffffffffffffffffffffffff0019166101006001600160801b038816908102919091179091558251918252928101929092527f5108b30b1c08360822e1bfe7a4169b885b0a62765e9d04592cac9933f3879e46910160405180910390a188600a018054806151e2576151e2617618565b6000828152602090206000199082018101805473ffffffffffffffffffffffffffffffffffffffff191690550190556004898101546040517f29092d0e0000000000000000000000000000000000000000000000000000000081526001600160a01b038e8116938201939093529116906329092d0e90602401600060405180830381600087803b15801561527557600080fd5b505af1158015615289573d6000803e3d6000fd5b505050505050505050505050505050565b6000806000806152a9856131f6565b9250925092506130ba83838361455d565b6001600160a01b03811660009081526000805160206177ab833981519152602052604090206004015460008051602061776b8339815191529060019060ff16600581111561530a5761530a616f9e565b1461124c5760405162461bcd60e51b815260206004820152600160248201527f390000000000000000000000000000000000000000000000000000000000000060448201526064016111d3565b604051632a7ba1f760e01b8152600481018290526001600160a01b03841690632a7ba1f790602401600060405180830381600087803b15801561539957600080fd5b505af11580156153ad573d6000803e3d6000fd5b50506040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018490526001600160a01b0385169250639dc29fac91506044016146ea565b60008061456a8585612312565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561544a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061546e919061762e565b60ff1692915050565b6000631f54050082111561548d57631f54050091505b816000036154a45750670de0b6b3a7640000610f86565b670de0b6b3a764000083835b60018111156154f4576154c4600282617651565b156154d6576154d38284615b9d565b92505b6154e08283615b9d565b91506154ed6002826173ff565b90506154b0565b6113718284615b9d565b600081831061550d5781610f83565b5090919050565b6000805160206177cb833981519152546040517f617ddfff00000000000000000000000000000000000000000000000000000000815260009160008051602061778b833981519152916001600160a01b039091169063617ddfff906123649087908790600401616c8d565b60006040518060e00160405280866001600160a01b031681526020018581526020018481526020018381526020018451815260200160008152602001600067ffffffffffffffff8111156155d5576155d561687a565b6040519080825280602002602001820160405280156155fe578160200160208202803683370190505b50905280516001600160a01b031660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda3136020526040902090915060008051602061776b83398151915290615657838383615bd1565b611da6838383615d5b565b60008051602061776b833981519152600061567c8461540a565b6001600160a01b0385166000908152600b8401602052604081205491925060128311156156ca576156ae601284617025565b6156b990600a61750e565b6156c390836173ff565b90506156ed565b6156d5836012617025565b6156e090600a61750e565b6156ea9083617413565b90505b6001600160a01b03861660009081526016850160205260408120548290670de0b6b3a76400009061571e9089616ff9565b6157289190617413565b61573291906173ff565b9050670de0b6b3a76400006157478383617413565b61575191906173ff565b61575b9087617025565b6001600160a01b0388166000908152601687016020908152604080832093909355601088019052205461578f908290616ff9565b6001600160a01b03881660008181526010880160208181526040808420869055600e8b0182529283902054918152825191825281019390935290917f0270367653b934d86d1038756df3ecf15841c6ec1a8617414017be776b358f0c910160405180910390a250505050505050565b61585860405180610100016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016000815260200160008152602001606081525090565b61586c8260800151518360a0015114614526565b61587e82606001518360800151615f4e565b5060e08501525060c08301525090565b60008051602061776b83398151915260008051602061778b83398151915260005b8360a00151811015611053576000846060015182815181106158d3576158d3616fb4565b6020026020010151905060008560c0015186604001518760e0015185815181106158ff576158ff616fb4565b60200260200101516159119190617413565b61591b91906173ff565b6001600160a01b03831660009081526015870160205260408120549192509061594c670de0b6b3a764000084617413565b6159569190616ff9565b6001600160a01b0384166000908152600b88016020526040902054909150156159a8576159a3838860800151868151811061599357615993616fb4565b6020026020010151836001616014565b6159fc565b60408051600060c0820181815260e083018452825282518181526020808201855283015291810191909152606081018390526001600160a01b038416608082015260a081018590526159fc90888888616232565b50505080615a099061700c565b90506158af565b80516040808301519051632a7ba1f760e01b81526001600160a01b0390921691632a7ba1f791615a469160040190815260200190565b600060405180830381600087803b158015615a6057600080fd5b505af1158015615a74573d6000803e3d6000fd5b5050505080602001516001600160a01b0316632b7c7b1182604001516040518263ffffffff1660e01b8152600401615aae91815260200190565b600060405180830381600087803b158015615ac857600080fd5b505af1158015615adc573d6000803e3d6000fd5b505082516020840151606085015160808601516040517fd0d8c20d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909416955063d0d8c20d9450615b3593600401617665565b600060405180830381600087803b158015615b4f57600080fd5b505af115801561210c573d6000803e3d6000fd5b6001811161173a576040517fe4d78f0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080615baa8385617413565b9050670de0b6b3a7640000615bc76706f05b59d3b2000083616ff9565b610f6f91906173ff565b6000805b84602001515181101561210c576000856080015183101580615c43575085602001518281518110615c0857615c08616fb4565b60200260200101516001600160a01b031686604001518481518110615c2f57615c2f616fb4565b60200260200101516001600160a01b031614155b90508015615d3e57600086602001518381518110615c6357615c63616fb4565b6020908102919091018101516001600160a01b03808216600081815260018a01855260408082208290558c518416825260098c0180875281832084845260039081018852828420548f519096168452908752818320938352929092018552818120819055600b8b0190945290922054909250615ce0908290617025565b6001600160a01b0383166000818152600b8a01602090815260409182902084905581519283528201929092527fd5630907014190fb9340da1cf427c96f094dabfbf73d25506e4b0cda9e3a4ca0910160405180910390a15050615d4a565b615d478361700c565b92505b50615d548161700c565b9050615bd5565b615d6d83604001518460600151616646565b60c084015260005b8360800151811015615f3b57600084604001518281518110615d9957615d99616fb4565b602002602001015190506000615dcc8287606001518581518110615dbf57615dbf616fb4565b60200260200101516166f6565b86516001600160a01b039081166000908152600988016020818152604080842088861680865260039182018452828620548e519097168652938352818520938552929092018152818320859055600b8a019052902054919250908290615e33908390617025565b615e3d9190616ff9565b6001600160a01b0384166000908152600b8801602052604090205560c0870151805185908110615e6f57615e6f616fb4565b6020026020010151856001016000856001600160a01b03166001600160a01b03168152602001908152602001600020819055508660c001518481518110615eb857615eb8616fb4565b60200260200101518760a00151615ecf9190616ff9565b60a08801526001600160a01b0383166000818152600b88016020908152604091829020548251938452908301527fd5630907014190fb9340da1cf427c96f094dabfbf73d25506e4b0cda9e3a4ca0910160405180910390a150505080615f349061700c565b9050615d75565b508260a001518160020181905550505050565b6000805160206177cb833981519152546040517fab0084cf0000000000000000000000000000000000000000000000000000000081526000918291606091829160008051602061778b833981519152916001600160a01b03169063ab0084cf90615fbe908a908a90600401616c8d565b600060405180830381865afa158015615fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160039190810190617699565b929a91995097509095509350505050565b60008051602061776b833981519152600061602e8661540a565b6001600160a01b0387166000908152600b84016020526040812054919250601283111561607c57616060601284617025565b61606b90600a61750e565b61607590836173ff565b905061609f565b616087836012617025565b61609290600a61750e565b61609c9083617413565b90505b60006160ab82886173ff565b90506160b78282617413565b6160c19088617025565b6001600160a01b038a166000908152601587016020908152604080832093909355600f8801905220546160f5908290616ff9565b6001600160a01b038a166000908152600f8701602052604090205585156161c3576001600160a01b0389166000908152601486016020526040812054616143670de0b6b3a76400008b617413565b61614d9190616ff9565b9050600061615b84836173ff565b90506161678482617413565b6161719083617025565b6001600160a01b038c166000908152601489016020908152604080832093909355600e8a01905220546161a5908290616ff9565b6001600160a01b038c166000908152600e8901602052604090205550505b6001600160a01b0389166000818152600e87016020908152604080832054600f8a018352928190205481519485529184019290925282820152517f6f63d00bdf85957664165c9e20900aabd5a17378cb5c0955ce760e48a6ae48c79181900360600190a1505050505050505050565b8060020160009054906101000a90046001600160a01b03166001600160a01b0316631d4c200e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015616287573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162af9190810190617710565b6020860152845260005b8451518110156163795782600b016000866000015183815181106162df576162df616fb4565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054600003616369578460200151818151811061632557616325616fb4565b60200260200101518560400181815161633e9190616ff9565b90525060208501518051600091908390811061635c5761635c616fb4565b6020026020010181815250505b6163728161700c565b90506162b9565b50835151158061639457508360400151670de0b6b3a7640000145b156163ca576040517e37dd3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8451518110156164dc57846020015181815181106163ed576163ed616fb4565b6020026020010151600003156164cc5760008560000151828151811061641557616415616fb4565b6020026020010151905085604001516000146164655785604001518660200151838151811061644657616446616fb4565b6020026020010181815161645a9190616ff9565b905250600060408701525b6001600160a01b038116600090815260158501602090815260408220549088015180518590811061649857616498616fb4565b602002602001015188606001516164af9190617413565b6164b99190616ff9565b90506164c9826000836000616014565b50505b6164d58161700c565b90506163cd565b5080546002820154604080517f8f871a6c00000000000000000000000000000000000000000000000000000000815290516001600160a01b03938416936362f6105b931691638f871a6c9160048083019260209291908290030181865afa15801561654b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061656f919061730e565b866080015186608001518860a001518151811061658e5761658e616fb4565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561660057600080fd5b505af1158015616614573d6000803e3d6000fd5b50505050600083608001518560a001518151811061663457616634616fb4565b60200260200101818152505050505050565b6000805160206177cb833981519152546040517fa055852300000000000000000000000000000000000000000000000000000000815260609160008051602061778b833981519152916001600160a01b039091169063a0558523906166b19087908790600401616c8d565b600060405180830381865afa1580156166ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f6f9190810190617562565b6001600160a01b03821660009081527f7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda30d602052604081205460008051602061776b83398151915290820361674c5782915061677f565b6001600160a01b0384166000908152600d82016020908152604080832054600c850190925290912054615bc79085617413565b5092915050565b8280548282559060005260206000209081019282156167e8579160200282015b828111156167e8578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161782556020909201916001909101906167a6565b506167f4929150616833565b5090565b8280548282559060005260206000209081019282156167e8579160200282015b828111156167e8578251825591602001919060010190616818565b5b808211156167f45760008155600101616834565b6001600160a01b038116811461173a57600080fd5b60006020828403121561686f57600080fd5b8135610f8381616848565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156168b9576168b961687a565b604052919050565b600067ffffffffffffffff8211156168db576168db61687a565b5060051b60200190565b600082601f8301126168f657600080fd5b8135602061690b616906836168c1565b616890565b82815260059290921b8401810191818101908684111561692a57600080fd5b8286015b8481101561694e57803561694181616848565b835291830191830161692e565b509695505050505050565b600082601f83011261696a57600080fd5b8135602061697a616906836168c1565b82815260059290921b8401810191818101908684111561699957600080fd5b8286015b8481101561694e578035835291830191830161699d565b600080604083850312156169c757600080fd5b823567ffffffffffffffff808211156169df57600080fd5b6169eb868387016168e5565b93506020850135915080821115616a0157600080fd5b50616a0e85828601616959565b9150509250929050565b60008060408385031215616a2b57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015616a735781516001600160a01b031687529582019590820190600101616a4e565b509495945050505050565b600081518084526020808501945080840160005b83811015616a7357815187529582019590820190600101616a92565b87815260e060208201526000616ac760e0830189616a3a565b8281036040840152616ad98189616a7e565b90508660608401528281036080840152616af38187616a3a565b905082810360a0840152616b078186616a7e565b9150508260c083015298975050505050505050565b600060208284031215616b2e57600080fd5b5035919050565b60008060408385031215616b4857600080fd5b8235616b5381616848565b946020939093013593505050565b606081526000616b746060830186616a3a565b8281036020840152616b868186616a7e565b915050826040830152949350505050565b600080600060608486031215616bac57600080fd5b833567ffffffffffffffff80821115616bc457600080fd5b616bd0878388016168e5565b94506020860135915080821115616be657600080fd5b50616bf386828701616959565b925050604084013590509250925092565b60008060408385031215616c1757600080fd5b8235616c2281616848565b91506020830135616c3281616848565b809150509250929050565b801515811461173a57600080fd5b600080600060608486031215616c6057600080fd5b8335616c6b81616848565b9250602084013591506040840135616c8281616c3d565b809150509250925092565b604081526000616ca06040830185616a3a565b82810360208401526130ba8185616a7e565b60008060408385031215616cc557600080fd5b8235616cd081616848565b91506020830135616c3281616c3d565b60008083601f840112616cf257600080fd5b50813567ffffffffffffffff811115616d0a57600080fd5b6020830191508360208260051b8501011115616d2557600080fd5b9250929050565b60008060008060008060608789031215616d4557600080fd5b863567ffffffffffffffff80821115616d5d57600080fd5b616d698a838b01616ce0565b90985096506020890135915080821115616d8257600080fd5b616d8e8a838b01616ce0565b90965094506040890135915080821115616da757600080fd5b50616db489828a01616ce0565b979a9699509497509295939492505050565b60008060208385031215616dd957600080fd5b823567ffffffffffffffff811115616df057600080fd5b616dfc85828601616ce0565b90969095509350505050565b600080600060608486031215616e1d57600080fd5b8335616e2881616848565b9250602084013567ffffffffffffffff80821115616e4557600080fd5b616e51878388016168e5565b93506040860135915080821115616e6757600080fd5b50616e7486828701616959565b9150509250925092565b600080600060608486031215616e9357600080fd5b8335616e9e81616848565b92506020840135616eae81616848565b929592945050506040919091013590565b60a081526000616ed260a0830188616a3a565b8281036020840152616ee48188616a7e565b6040840196909652505060608101929092526001600160801b031660809091015292915050565b600080600080600060a08688031215616f2357600080fd5b8535616f2e81616848565b94506020860135616f3e81616848565b935060408601359250606086013567ffffffffffffffff80821115616f6257600080fd5b616f6e89838a016168e5565b93506080880135915080821115616f8457600080fd5b50616f9188828901616959565b9150509295509295909350565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215616fdc57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f8657610f86616fe3565b60006001820161701e5761701e616fe3565b5060010190565b81810381811115610f8657610f86616fe3565b8183526000602080850194508260005b85811015616a7357813561705b81616848565b6001600160a01b031687529582019590820190600101617048565b60808152600061708a60808301898b617038565b828103602084015261709c8189616a7e565b905082810360408401526170b1818789617038565b905082810360608401526170c6818587617038565b9a9950505050505050505050565b6000602082840312156170e657600080fd5b8151610f8381616c3d565b805160408084528151908401819052600091602091908201906060860190845b818110156171365783516001600160a01b031683529284019291840191600101617111565b50508483015186820387850152805180835290840192506000918401905b8083101561694e5783518252928401926001929092019190840190617154565b6001600160a01b038416815260606020820152600061719660608301856170f1565b828103604084015261137181856170f1565b600082601f8301126171b957600080fd5b815160206171c9616906836168c1565b82815260059290921b840181019181810190868411156171e857600080fd5b8286015b8481101561694e5780516171ff81616848565b83529183019183016171ec565b600082601f83011261721d57600080fd5b8151602061722d616906836168c1565b82815260059290921b8401810191818101908684111561724c57600080fd5b8286015b8481101561694e5780518352918301918301617250565b60006020828403121561727957600080fd5b815167ffffffffffffffff8082111561729157600080fd5b90830190604082860312156172a557600080fd5b6040516040810181811083821117156172c0576172c061687a565b6040528251828111156172d257600080fd5b6172de878286016171a8565b8252506020830151828111156172f357600080fd5b6172ff8782860161720c565b60208301525095945050505050565b60006020828403121561732057600080fd5b8151610f8381616848565b6004811061734957634e487b7160e01b600052602160045260246000fd5b9052565b600060808201868352602060808185015281875480845260a08601915060009350888452828420845b8281101561739b5781546001600160a01b031684529284019260019182019101617376565b50505084810360408601528654808252878452828420918301905b808510156173d5578254825260019485019490920191908301906173b6565b5093506130ba92505050606083018461732b565b634e487b7160e01b600052601260045260246000fd5b60008261740e5761740e6173e9565b500490565b8082028115828204841417610f8657610f86616fe3565b600181815b8085111561746557816000190482111561744b5761744b616fe3565b8085161561745857918102915b93841c939080029061742f565b509250929050565b60008261747c57506001610f86565b8161748957506000610f86565b816001811461749f57600281146174a9576174c5565b6001915050610f86565b60ff8411156174ba576174ba616fe3565b50506001821b610f86565b5060208310610133831016604e8410600b84101617156174e8575081810a610f86565b6174f2838361742a565b806000190482111561750657617506616fe3565b029392505050565b6000610f83838361746d565b60006020828403121561752c57600080fd5b815167ffffffffffffffff81111561754357600080fd5b610f6f848285016171a8565b602081526000610f836020830184616a3a565b60006020828403121561757457600080fd5b815167ffffffffffffffff81111561758b57600080fd5b610f6f8482850161720c565b6000806000606084860312156175ac57600080fd5b8351925060208401519150604084015167ffffffffffffffff8111156175d157600080fd5b616e748682870161720c565b8481526080602082015260006175f66080830186616a3a565b82810360408401526176088186616a7e565b9150506130ba606083018461732b565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561764057600080fd5b815160ff81168114610f8357600080fd5b600082617660576176606173e9565b500690565b6001600160a01b03841681526060602082015260006176876060830185616a3a565b82810360408401526113718185616a7e565b600080600080608085870312156176af57600080fd5b8451935060208501519250604085015167ffffffffffffffff808211156176d557600080fd5b6176e18883890161720c565b935060608701519150808211156176f757600080fd5b506177048782880161720c565b91505092959194509250565b6000806040838503121561772357600080fd5b825167ffffffffffffffff8082111561773b57600080fd5b617747868387016171a8565b9350602085015191508082111561775d57600080fd5b50616a0e8582860161720c56fe7239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda300a36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e007239b4459c1d3d68b96734eb0e6596f63b4a77b9c14e0d863e63dc6fa6bda309a36e81d885900cc3916b87a733476f04e310966a6d75bff720cbf6a9b4729e02a2646970667358221220e1ca17863ea9ed0bc2946b72729642e58b895e7b8fa6e77303f78e71fd3f756f64736f6c63430008130033",
  "linkReferences": {
    "contracts/Dependencies_v0_8/SumCollateralsLib.sol": {
      "SumCollateralsLib": [
        {
          "length": 20,
          "start": 9493
        },
        {
          "length": 20,
          "start": 12306
        },
        {
          "length": 20,
          "start": 13129
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/Dependencies_v0_8/SumCollateralsLib.sol": {
      "SumCollateralsLib": [
        {
          "length": 20,
          "start": 9460
        },
        {
          "length": 20,
          "start": 12273
        },
        {
          "length": 20,
          "start": 13096
        }
      ]
    }
  }
}
