{
  "_format": "hh-sol-artifact-1",
  "contractName": "BalancerV2BptSwapper",
  "sourceName": "contracts/swap/BalancerV2BptSwapper.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        },
        {
          "internalType": "uint256[]",
          "name": "how",
          "type": "uint256[]"
        }
      ],
      "name": "AuthSenderNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "BytesOutOfBounds",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "aInflated",
          "type": "uint256"
        }
      ],
      "name": "FixedPointDivInternal",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "b",
          "type": "uint256"
        }
      ],
      "name": "FixedPointMulOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FixedPointZeroDivision",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceInputLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceTokenZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAmountZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskGasNotInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskGasPriceLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedDate",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedWindow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidFrequency",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        }
      ],
      "name": "TaskInvalidFrequencyMode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidThresholdInput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidVolumeLimitInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskPaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "priorityFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskPriorityFeeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "connectorId",
          "type": "bytes32"
        }
      ],
      "name": "TaskSameBalanceConnectors",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "TaskSlippageAboveMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskSlippageAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "smartVault",
          "type": "address"
        }
      ],
      "name": "TaskSmartVaultPriceOracleNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskThresholdTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiration",
          "type": "uint256"
        }
      ],
      "name": "TaskTimeLockActive",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "TaskTokenNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenOutNotSet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskTokenThresholdNotMet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCost",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTxCostLimitPctAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCostPct",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitPctExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskUnpaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "volume",
          "type": "uint256"
        }
      ],
      "name": "TaskVolumeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskVolumeLimitTokenZero",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "BalanceConnectorsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "connector",
          "type": "address"
        }
      ],
      "name": "ConnectorSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "CustomMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "CustomTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "CustomTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "CustomVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "DefaultTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "DefaultTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "DefaultVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "GasLimitsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        }
      ],
      "name": "TimeLockAllowedAtSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TimeLockSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "added",
          "type": "bool"
        }
      ],
      "name": "TokensAcceptanceListSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "acceptanceType",
          "type": "uint8"
        }
      ],
      "name": "TokensAcceptanceTypeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "EXECUTION_TYPE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "authorizer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        }
      ],
      "name": "call",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBalanceConnectors",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGasLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTaskAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTimeLock",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTokensSource",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "connector",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "maxSlippage",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomTokenOut[]",
                  "name": "customTokensOut",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "maxSlippage",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomMaxSlippage[]",
                  "name": "customMaxSlippages",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "address",
                          "name": "smartVault",
                          "type": "address"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "previousBalanceConnectorId",
                          "type": "bytes32"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "nextBalanceConnectorId",
                          "type": "bytes32"
                        }
                      ],
                      "internalType": "struct BaseTask.BaseConfig",
                      "name": "baseConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256",
                          "name": "gasPriceLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "priorityFeeLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimitPct",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct GasLimitedTask.GasLimitConfig",
                      "name": "gasLimitConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "mode",
                          "type": "uint8"
                        },
                        {
                          "internalType": "uint256",
                          "name": "frequency",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "allowedAt",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "window",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct TimeLockedTask.TimeLockConfig",
                      "name": "timeLockConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
                          "name": "acceptanceType",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address[]",
                          "name": "tokens",
                          "type": "address[]"
                        }
                      ],
                      "internalType": "struct TokenIndexedTask.TokenIndexConfig",
                      "name": "tokenIndexConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "min",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "max",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.Threshold",
                          "name": "defaultThreshold",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "min",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "max",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct TokenThresholdTask.Threshold",
                              "name": "threshold",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.CustomThresholdConfig[]",
                          "name": "customThresholdConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct TokenThresholdTask.TokenThresholdConfig",
                      "name": "tokenThresholdConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "amount",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "period",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                          "name": "defaultVolumeLimit",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "amount",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "period",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                              "name": "volumeLimit",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.CustomVolumeLimitConfig[]",
                          "name": "customVolumeLimitConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct VolumeLimitedTask.VolumeLimitConfig",
                      "name": "volumeLimitConfig",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct Task.TaskConfig",
                  "name": "taskConfig",
                  "type": "tuple"
                }
              ],
              "internalType": "struct BaseSwapTask.BaseSwapConfig",
              "name": "baseSwapConfig",
              "type": "tuple"
            }
          ],
          "internalType": "struct BalancerV2BptSwapper.BalancerV2BptSwapConfig",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "isTokenAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "setBalanceConnectors",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newConnector",
          "type": "address"
        }
      ],
      "name": "setConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setCustomMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setCustomTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setCustomTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setCustomVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setDefaultTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setDefaultTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setDefaultVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newGasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPriorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "setGasLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setTimeLock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "added",
          "type": "bool[]"
        }
      ],
      "name": "setTokensAcceptanceList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "newTokensAcceptanceType",
          "type": "uint8"
        }
      ],
      "name": "setTokensAcceptanceType",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "smartVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokensAcceptanceType",
      "outputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61526d80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80636aacaad811610186578063a5900c4d116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d09edf3114610771578063d3feb6021461078a578063d45a76cf1461079d57600080fd5b8063b96e422c116100c8578063b96e422c14610744578063c267621e1461074d578063c47590e41461075e57600080fd5b8063a5900c4d146106cd578063b187bd261461072757600080fd5b806390333ba81161013a578063a0c3774f1161011f578063a0c3774f14610674578063a2c4564414610687578063a33741771461069a57600080fd5b806390333ba8146106425780639eebe7cd1461065557600080fd5b806383f3084f1161016b57806383f3084f146106145780638456cb59146106275780638a5215861461062f57600080fd5b80636aacaad8146105b55780637125590a1461060157600080fd5b8063423a4b401161023f5780635064d83a116101f35780635ea54eee116101cd5780635ea54eee1461054d578063635600861461057957806363e133bc1461058c57600080fd5b80635064d83a146104e757806351a424b1146104fa5780635670e2ce1461053257600080fd5b8063445780991161022457806344578099146104745780634a45a3a81461049f5780634fd49efd146104d457600080fd5b8063423a4b401461044757806342d4693e1461045a57600080fd5b80632384c32d1161029657806330eae5721161027b57806330eae572146104195780633b191c971461042c5780633f4ba83a1461043f57600080fd5b80632384c32d146103f35780632be5f0c71461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063219723841461033c578063221a8c681461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f13660046143f2565b6107e9565b005b6102f661030636600461444b565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a3660046145e7565b610886565b6103c161035d36600461444b565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f66104013660046146ab565b610936565b6102f66104143660046146f1565b610965565b6102f6610427366004614739565b610990565b6102f661043a366004614b83565b6109cd565b6102f6610af3565b6102f66104553660046146ab565b610b7a565b600f546104679060ff1681565b6040516103339190614ca8565b61048761048236600461444b565b610ba9565b6040516001600160a01b039091168152602001610333565b6104c67f76456852b329dfb8372f4dbf77fd89fe3650d6ac874449ff011ea624b4c258b781565b604051908152602001610333565b600154610487906001600160a01b031681565b6102f66104f5366004614cd0565b610be6565b61050d61050836600461444b565b610e06565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f661058736600461444b565b610e2f565b61048761059a36600461444b565b601f602052600090815260409020546001600160a01b031681565b6103c16040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f661060f366004614d05565b610e58565b601c54610487906001600160a01b031681565b6102f6610e83565b601d54610487906001600160a01b031681565b6102f6610650366004614cd0565b610ef5565b6104c661066336600461444b565b602080526000908152604090205481565b6104c661068236600461444b565b610f28565b6102f6610695366004614d27565b610fbf565b61050d604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61050d6106db36600461444b565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107349060ff1681565b6040519015158152602001610333565b6104c6601e5481565b6001546001600160a01b0316610487565b6102f661076c366004614d40565b610fe8565b600054610487906201000090046001600160a01b031681565b6102f6610798366004614cd0565b611013565b6103c16107ab36600461444b565b611040565b6104c66107be36600461444b565b6110af565b6102f66107d1366004614d6c565b6110dd565b6107346107e436600461444b565b61110c565b6107f88460ff16848484611141565b61080f336000356001600160e01b031916836111ec565b61081b85858585611233565b5050505050565b61082b816114d8565b610842336000356001600160e01b031916836111ec565b61084b826114ec565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614c92565b600b54600c54600e54935093509350935090919293565b61089c336000356001600160e01b031916611576565b80518251146108d7576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109315761091f8382815181106108f8576108f8614d9e565b602002602001015183838151811061091257610912614d9e565b6020026020010151611592565b8061092981614dca565b9150506108da565b505050565b6109428484848461163c565b610959336000356001600160e01b031916836111ec565b61081b858585856116a5565b61096f828261175e565b610986336000356001600160e01b031916836111ec565b61093183836117d6565b6109ad8160018111156109a5576109a5614c92565b60ff1661185d565b6109c4336000356001600160e01b031916836111ec565b61084b826118a4565b600054610100900460ff16158080156109ed5750600054600160ff909116105b80610a075750303b158015610a07575060005460ff166001145b610a7e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610aa1576000805461ff0019166101001790555b610aaa82611901565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610b09336000356001600160e01b031916611576565b60045460ff16610b45576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b868484848461163c565b610b9d336000356001600160e01b031916836111ec565b61081b85858585611971565b6001600160a01b038082166000908152601f60205260408120549091168015610bd25780610bdf565b601d546001600160a01b03165b9392505050565b610bf1838383611a31565b610c08336000356001600160e01b031916836111ec565b82600003610c1c57610c1984610f28565b92505b610c27848484611ac3565b6000610c3285610ba9565b90506000610c408683611ace565b90506000610c69610c5986670de0b6b3a7640000614de3565b610c638885611ada565b90611ada565b9050600063be1b4c4960e01b888589858c6001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdb9190614df6565b60408051600080825260208201908152818301909252610d0396959493929160648201614e53565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610d9d9216908690600401614f2f565b6000604051808303816000875af1158015610dbc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610de49190810190614f51565b9050610dfb89898988610df686611b4d565b611b5a565b505050505050505050565b600080600080610e1585611b67565b805160208201516040909201519097919650945092505050565b610e38816114d8565b610e4f336000356001600160e01b031916836111ec565b61084b82611bf2565b610e628282611c3c565b610e79336000356001600160e01b031916836111ec565b6109318383611c96565b610e99336000356001600160e01b031916611576565b60045460ff1615610ebd5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610f00838383611a31565b610f17336000356001600160e01b031916836111ec565b610f22848484611d19565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb99190614df6565b92915050565b610fc88161185d565b610fdf336000356001600160e01b031916836111ec565b61084b82611d6f565b610ff28282611dcd565b611009336000356001600160e01b031916836111ec565b6109318383611e2a565b61101e838383611a31565b611035336000356001600160e01b031916836111ec565b610f22848484611ec4565b60008060008060008061105287611f20565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b038116600090815260208052604081205480156110d35780610bdf565b601e549392505050565b6110e984848484611141565b611100336000356001600160e01b031916836111ec565b61081b85858585611f54565b60008061111a601084611fef565b90506001600f5460ff16600181111561113557611135614c92565b14610fb9578015610bdf565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061117857611178614d9e565b602002602001018181525050838160018151811061119857611198614d9e565b60200260200101818152505082816002815181106111b8576111b8614d9e565b60200260200101818152505081816003815181106111d8576111d8614d9e565b602002602001018181525050949350505050565b6111f7838383612011565b610931578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610a7593929190615015565b60ff84166112e457600081118061124a5750600082115b156112df578260000361127c5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061128857508281115b156112b257604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b816000036112df57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b611441565b826000036113115760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061132957506113266224ea0084615047565b81115b1561135357604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361138057604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60001960ff8516016113c257601c611397836120a7565b11156112df57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60011960ff85160161140a576113d7826120be565b6113e0836120a7565b146112df57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610a75565b8360ff16600281111561145657611456614c92565b600a805460ff1916600183600281111561147257611472614c92565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610fb9826001600160a01b031661185d565b6001600160a01b03811661152c576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261084b90839083906111ec565b6001600160a01b0382166115d2576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806115e7576115e26010836120e1565b6115f2565b6115f26010836120f6565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611630911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061167c5761167c614d9e565b602002602001018181525050836001600160a01b03168160018151811061119857611198614d9e565b6001600160a01b0384166116e5576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090206117099084848461210b565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061179b5761179b614d9e565b602002602001018181525050816001600160a01b0316816001815181106117c4576117c4614d9e565b60200260200101818152505092915050565b6001600160a01b0382166117fd57604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f79101611630565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061189357611893614d9e565b602002602001018181525050919050565b600f805482919060ff1916600183818111156118c2576118c2614c92565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516118f69190614ca8565b60405180910390a150565b600054610100900460ff1661195a5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051611965906121db565b61196e8161224a565b50565b6001600160a01b0384166119b1576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206119d5908484846122a3565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a23929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611a7057611a70614d9e565b6020026020010181815250508281600181518110611a9057611a90614d9e565b6020026020010181815250508181600281518110611ab057611ab0614d9e565b6020026020010181815250509392505050565b610931838383612402565b6000610bdf8383612509565b60008282028315801590611afd575082848281611af957611af961505e565b0414155b15611b2557604051637472527d60e11b81526004810185905260248101849052604401610a75565b8015611b4257670de0b6b3a7640000600019820104600101611b45565b60005b949350505050565b6000610fb9826000612708565b61081b8585858585612765565b611b94604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611bbd5780611bc0565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611c7357611c73614d9e565b6020026020010181815250508160001c816001815181106117c4576117c4614d9e565b8082148015611ca457508115155b15611cde576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610a75565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611d2660168484846122a3565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611d985760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf8906020016118f6565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611e0a57611e0a614d9e565b60200260200101818152505081816001815181106117c4576117c4614d9e565b6001600160a01b038216611e5157604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611e7a5760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed39101611630565b611ed1601284848461210b565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611f4b5780610bdf565b60169392505050565b670de0b6b3a7640000811115611f96576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016114ca565b6001600160a01b03811660009081526001830160205260408120541515610bdf565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590612066908790309088908890600401615074565b602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4591906150ba565b6000611b456120b962015180846150d7565b612779565b600080806120d26120b962015180866150d7565b5091509150611b458282612815565b6000610bdf836001600160a01b03841661289b565b6000610bdf836001600160a01b038416612995565b60006001600160a01b038416158015612122575082155b801561212c575081155b905060006001600160a01b0385161580159061215057508215806121505750838310155b90508115801561215e575080155b156121ae576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166122345760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6122418160a001516129e4565b61196e81612a91565b600054610100900460ff1661196e5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b60006001600160a01b0384161580156122ba575082155b80156122c4575081155b905060006001600160a01b038516158015906122e05750600084115b80156122ec5750600083115b9050811580156122fa575080155b1561234a576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b600386018390556001860184905581156123715760006002870181905560048701556123dd565b8560040154600003612398576000600287015561238e83426150eb565b60048701556123dd565b85546001600160a01b038681169116146123dd5785546000906123c4906001600160a01b031687611ace565b60028801549091506123d69082612bec565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b61240c8383612c49565b6001600160a01b03831661243357604051636070789160e11b815260040160405180910390fd5b8160000361246d576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061247884610ba9565b6001600160a01b0316036124b8576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006124c3846110af565b905080821115610f22576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610a75565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258391906150fe565b90506001600160a01b0381166125d4576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a75565b60006125de612c8f565b9050805160001461266f57816001600160a01b031663355efdd961260187612d0f565b61260a87612d0f565b846040518463ffffffff1660e01b81526004016126299392919061511b565b602060405180830381865afa158015612646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266a9190614df6565b6126ff565b816001600160a01b031663ac41865a61268787612d0f565b61269087612d0f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156126db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ff9190614df6565b95945050505050565b60006127158260206150eb565b8351101561275c5782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b50016020015190565b61276f8282612d43565b61081b8585612dc9565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816127d6576127d661505e565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806128265750816003145b806128315750816005145b8061283c5750816007145b806128475750816008145b80612852575081600a145b8061285d575081600c145b1561286a5750601f610fb9565b8160021461287a5750601e610fb9565b61288383612df1565b61288e57601c612891565b601d5b60ff169392505050565b600081815260018301602052604081205480156129845760006128bf600183614de3565b85549091506000906128d390600190614de3565b90508181146129385760008660000182815481106128f3576128f3614d9e565b906000526020600020015490508087600001848154811061291657612916614d9e565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061294957612949615147565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610fb9565b6000915050610fb9565b5092915050565b60008181526001830160205260408120546129dc57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fb9565b506000610fb9565b600054610100900460ff16612a3d5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612a4890612e2d565b612a50612efd565b612a5d8160200151612f60565b612a6a8160400151612fc2565b612a778160600151613024565b612a848160800151613086565b6119658160a001516130e8565b600054610100900460ff16612aea5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612af5906114ec565b612b028160200151611bf2565b612b0f8160400151611d6f565b60005b816060015151811015612b7d57612b6b82606001518281518110612b3857612b38614d9e565b60200260200101516000015183606001518381518110612b5a57612b5a614d9e565b6020026020010151602001516117d6565b80612b7581614dca565b915050612b12565b5060005b81608001515181101561084b57612bda82608001518281518110612ba757612ba7614d9e565b60200260200101516000015183608001518381518110612bc957612bc9614d9e565b602002602001015160200151611e2a565b80612be481614dca565b915050612b81565b60008282028315801590612c0f575082848281612c0b57612c0b61505e565b0414155b15612c3757604051637472527d60e11b81526004810185905260248101849052604401610a75565b670de0b6b3a764000090049392505050565b612c53828261314a565b612c5d8282613154565b612c678282613178565b612c718282613264565b612c7b8282613453565b612c85828261349d565b61084b828261358a565b60606000612c9b6136a0565b905036811115612cb957505060408051600081526020810190915290565b8067ffffffffffffffff811115612cd257612cd2614468565b6040519080825280601f01601f191660200182016040528015612cfc576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612d3b5781610fb9565b610fb96136bb565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612dad57600080fd5b505af1158015612dc1573d6000803e3d6000fd5b505050505050565b612dd38282613747565b612ddd82826137e9565b612de7828261380b565b61084b8282613a4a565b6000612dfe60048361515d565b158015612e145750612e1160648361515d565b15155b80610fb95750612e266101908361515d565b1592915050565b600054610100900460ff16612e865760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612ef481600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eef91906150fe565b613a77565b61196e81613ad9565b600054610100900460ff16612f565760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612f5e613b67565b565b600054610100900460ff16612fb95760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613bc0565b600054610100900460ff1661301b5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613c35565b600054610100900460ff1661307d5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613caa565b600054610100900460ff166130df5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613d58565b600054610100900460ff166131415760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613e36565b61084b8282613f14565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806131b7575081513a11155b9050806131fc5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610a75565b602082015115610f22576000613212483a614de3565b602084015190915081111580612dc15760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156132a05760405163013ce60b60e01b815242600482015260248101839052604401610a75565b60008460028111156132b4576132b4614c92565b0361336d57826000036132c957505050505050565b806000036132e3576132db83426150eb565b600d55612dc1565b60006132ef8342614de3565b905060006132fd85836150d7565b9050600061330b8683615047565b6133159084614de3565b9050838111156133415760405163013ce60b60e01b815242600482015260248101869052604401610a75565b8561334d8360016150eb565b6133579190615047565b61336190866150eb565b600d5550612dc1915050565b814210158015613386575061338281836150eb565b4211155b15613395576132db8284613f67565b600060018560028111156133ab576133ab614c92565b146133be576133b9426120be565b6133c7565b6133c7836120a7565b905060006133d58483613fff565b9050804210156134015760405163013ce60b60e01b815242600482015260248101829052604401610a75565b600061340d84836150eb565b9050428110801561343a5760405163013ce60b60e01b815242600482015260248101839052604401610a75565b6134448388613f67565b600d5550505050505050505050565b61345c8261110c565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a75565b60006134a883611b67565b80519091506001600160a01b03166134bf57505050565b6000836001600160a01b031682600001516001600160a01b0316146134fb576134f66134ef858460000151611ace565b8490612bec565b6134fd565b825b9050600082602001518210158015613525575060408301511580613525575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610a75565b600061359583611f20565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506135e457505050565b6000836001600160a01b031682600001516001600160a01b031614613619576136146134ef858460000151611ace565b61361b565b825b9050600082608001514210613631576000613637565b82604001515b61364190836150eb565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610a75565b600060243610156136b15750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa15801561371e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374291906150fe565b905090565b600061375283611f20565b80549091506001600160a01b031661376957505050565b80546000906001600160a01b0385811691161461379f57815461379a906134ef9086906001600160a01b0316611ace565b6137a1565b825b9050816004015442106137ca576000600283015560038201546137c490426150eb565b60048301555b808260020160008282546137de91906150eb565b909155505050505050565b600d546000036137f7575050565b613802600d5461401e565b50506000600d55565b600554600003613847576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a6005546138809190614de3565b9050600061388e3a83615047565b905060008360400151600014806138a9575083604001518211155b9050806138f3578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610a75929190918252602082015260400190565b600060055560608401511580159061390b5750600085115b15612dc15760006139de306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397791906150fe565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d891906150fe565b88611ace565b905060006139ec8483611ada565b905060006139fa8289614053565b90508660600151811115610dfb5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610a75918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613ad05760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e8161411c565b600054610100900460ff16613b325760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051600180546001600160a01b0319166001600160a01b039092169190911790556020810151604082015161196e9190611c96565b600054610100900460ff16612f5e5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600054610100900460ff16613c195760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e8160000151826020015183604001518460600151611f54565b600054610100900460ff16613c8e5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e8160000151826020015183604001518460600151611233565b600054610100900460ff16613d035760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051613d0e906118a4565b60005b81602001515181101561084b57613d4682602001518281518110613d3757613d37614d9e565b60200260200101516001611592565b80613d5081614dca565b915050613d11565b600054610100900460ff16613db15760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613dca929190611ec4565b60005b82602001515181101561093157600083602001518281518110613df257613df2614d9e565b60200260200101519050600081602001519050613e2182600001518260000151836020015184604001516116a5565b50508080613e2e90614dca565b915050613dcd565b600054610100900460ff16613e8f5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613ea8929190611d19565b60005b82602001515181101561093157600083602001518281518110613ed057613ed0614d9e565b60200260200101519050600081602001519050613eff8260000151826000015183602001518460400151611971565b50508080613f0c90614dca565b915050613eab565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612d93565b600080600080613f76866141b5565b919450925090506000613f8986846150eb565b90506000613f98600c8361515d565b90506000613fa7600c846150d7565b613fb190876150eb565b905060006002600a5460ff166002811115613fce57613fce614c92565b14613fd95784613fe3565b613fe38284612815565b9050613ff18a8385846141d4565b9a9950505050505050505050565b600080600061400d426141b5565b50915091506126ff858383876141d4565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad064906020016118f6565b60008160000361408f576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361409f57506000610fb9565b670de0b6b3a7640000838102908482816140bb576140bb61505e565b04146140fd576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610a75565b82600182038161410f5761410f61505e565b0460010191505092915050565b600054610100900460ff166141755760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600080806141c7620151808504612779565b9196909550909350915050565b60006126ff8484846141e5896141fc565b6141ee8a61421a565b6141f78b614236565b614243565b60008061420c620151808461515d565b9050610bdf610e10826150d7565b600080614229610e108461515d565b9050610bdf603c826150d7565b6000610fb9603c8361515d565b600081614251603c85615047565b61425d610e1087615047565b6201518061426c8b8b8b61429f565b6142769190615047565b61428091906150eb565b61428a91906150eb565b61429491906150eb565b979650505050505050565b60006107b28410156142b057600080fd5b838383600062253d8c60046064600c6142ca600e88615171565b6142d49190615191565b6142e0886113246151bf565b6142ea91906151bf565b6142f49190615191565b6142ff9060036151e7565b6143099190615191565b600c80614317600e88615171565b6143219190615191565b61432c90600c6151e7565b614337600288615171565b6143419190615171565b61434d9061016f6151e7565b6143579190615191565b6004600c614366600e89615171565b6143709190615191565b61437c896112c06151bf565b61438691906151bf565b614392906105b56151e7565b61439c9190615191565b6143a8617d4b87615171565b6143b291906151bf565b6143bc91906151bf565b6143c69190615171565b6143d09190615171565b98975050505050505050565b803560ff811681146143ed57600080fd5b919050565b6000806000806080858703121561440857600080fd5b614411856143dc565b966020860135965060408601359560600135945092505050565b6001600160a01b038116811461196e57600080fd5b80356143ed8161442b565b60006020828403121561445d57600080fd5b8135610bdf8161442b565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156144a1576144a1614468565b60405290565b6040516080810167ffffffffffffffff811182821017156144a1576144a1614468565b60405160c0810167ffffffffffffffff811182821017156144a1576144a1614468565b6040516020810167ffffffffffffffff811182821017156144a1576144a1614468565b604051601f8201601f1916810167ffffffffffffffff8111828210171561453957614539614468565b604052919050565b600067ffffffffffffffff82111561455b5761455b614468565b5060051b60200190565b600082601f83011261457657600080fd5b8135602061458b61458683614541565b614510565b82815260059290921b840181019181810190868411156145aa57600080fd5b8286015b848110156145ce5780356145c18161442b565b83529183019183016145ae565b509695505050505050565b801515811461196e57600080fd5b600080604083850312156145fa57600080fd5b823567ffffffffffffffff8082111561461257600080fd5b61461e86838701614565565b935060209150818501358181111561463557600080fd5b85019050601f8101861361464857600080fd5b803561465661458682614541565b81815260059190911b8201830190838101908883111561467557600080fd5b928401925b8284101561469c57833561468d816145d9565b8252928401929084019061467a565b80955050505050509250929050565b600080600080608085870312156146c157600080fd5b84356146cc8161442b565b935060208501356146dc8161442b565b93969395505050506040820135916060013590565b6000806040838503121561470457600080fd5b823561470f8161442b565b9150602083013561471f8161442b565b809150509250929050565b8035600281106143ed57600080fd5b60006020828403121561474b57600080fd5b610bdf8261472a565b600082601f83011261476557600080fd5b8135602061477561458683614541565b82815260069290921b8401810191818101908684111561479457600080fd5b8286015b848110156145ce57604081890312156147b15760008081fd5b6147b961447e565b81356147c48161442b565b8152818501356147d38161442b565b81860152835291830191604001614798565b600082601f8301126147f657600080fd5b8135602061480661458683614541565b82815260069290921b8401810191818101908684111561482557600080fd5b8286015b848110156145ce57604081890312156148425760008081fd5b61484a61447e565b81356148558161442b565b81528185013585820152835291830191604001614829565b60006060828403121561487f57600080fd5b6040516060810181811067ffffffffffffffff821117156148a2576148a2614468565b60405290508082356148b38161442b565b8082525060208301356020820152604083013560408201525092915050565b6000608082840312156148e457600080fd5b6148ec6144a7565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b60006080828403121561492857600080fd5b6149306144a7565b905061493b826143dc565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561497357600080fd5b61497b61447e565b90506149868261472a565b8152602082013567ffffffffffffffff8111156149a257600080fd5b6149ae84828501614565565b60208301525092915050565b6000608082840312156149cc57600080fd5b6149d461447e565b905081356149e18161442b565b81526149f0836020840161486d565b602082015292915050565b60006080808385031215614a0e57600080fd5b614a1661447e565b9150614a22848461486d565b8252606083013567ffffffffffffffff811115614a3e57600080fd5b8301601f81018513614a4f57600080fd5b80356020614a5f61458683614541565b82815260079290921b83018101918181019088841115614a7e57600080fd5b938201935b83851015614aa457614a9589866149ba565b82529385019390820190614a83565b808388015250505050505092915050565b60006101c08284031215614ac857600080fd5b614ad06144ca565b9050614adc838361486d565b8152614aeb83606084016148d2565b6020820152614afd8360e08401614916565b604082015261016082013567ffffffffffffffff80821115614b1e57600080fd5b614b2a85838601614961565b6060840152610180840135915080821115614b4457600080fd5b614b50858386016149fb565b60808401526101a0840135915080821115614b6a57600080fd5b50614b77848285016149fb565b60a08301525092915050565b600060208284031215614b9557600080fd5b813567ffffffffffffffff80821115614bad57600080fd5b9083019060208286031215614bc157600080fd5b614bc96144ed565b823582811115614bd857600080fd5b929092019160c08387031215614bed57600080fd5b614bf56144ca565b614bfe84614440565b8152614c0c60208501614440565b602082015260408401356040820152606084013583811115614c2d57600080fd5b614c3988828701614754565b606083015250608084013583811115614c5157600080fd5b614c5d888287016147e5565b60808301525060a084013583811115614c7557600080fd5b614c8188828701614ab5565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614cca57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614ce557600080fd5b8335614cf08161442b565b95602085013595506040909401359392505050565b60008060408385031215614d1857600080fd5b50508035926020909101359150565b600060208284031215614d3957600080fd5b5035919050565b60008060408385031215614d5357600080fd5b8235614d5e8161442b565b946020939093013593505050565b60008060008060808587031215614d8257600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ddc57614ddc614db4565b5060010190565b81810381811115610fb957610fb9614db4565b600060208284031215614e0857600080fd5b5051919050565b600081518084526020808501945080840160005b83811015614e485781516001600160a01b031687529582019590820190600101614e23565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015287608086015260e060a0860152829150865180845261010086019250818801935060005b81811015614ebb57845184529382019392820192600101614e9f565b50505083810360c0850152614ed08186614e0f565b9b9a5050505050505050505050565b60005b83811015614efa578181015183820152602001614ee2565b50506000910152565b60008151808452614f1b816020860160208601614edf565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611b456040830184614f03565b600060208284031215614f6357600080fd5b815167ffffffffffffffff80821115614f7b57600080fd5b818401915084601f830112614f8f57600080fd5b815181811115614fa157614fa1614468565b614fb4601f8201601f1916602001614510565b9150808252856020828501011115614fcb57600080fd5b614fdc816020840160208601614edf565b50949350505050565b600081518084526020808501945080840160005b83811015614e4857815187529582019590820190600101614ff9565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006126ff6060830184614fe5565b8082028115828204841417610fb957610fb9614db4565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526150b06080830184614fe5565b9695505050505050565b6000602082840312156150cc57600080fd5b8151610bdf816145d9565b6000826150e6576150e661505e565b500490565b80820180821115610fb957610fb9614db4565b60006020828403121561511057600080fd5b8151610bdf8161442b565b60006001600160a01b038086168352808516602084015250606060408301526126ff6060830184614f03565b634e487b7160e01b600052603160045260246000fd5b60008261516c5761516c61505e565b500690565b818103600083128015838313168383128216171561298e5761298e614db4565b6000826151a0576151a061505e565b600160ff1b8214600019841416156151ba576151ba614db4565b500590565b80820182811260008312801582168215821617156151df576151df614db4565b505092915050565b80820260008212600160ff1b8414161561520357615203614db4565b8181058314821517610fb957610fb9614db456fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a26469706673582212203faa929b21dc023d40c464582713bdc479e56f77f1ec0684f80d24958f9d558464736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80636aacaad811610186578063a5900c4d116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d09edf3114610771578063d3feb6021461078a578063d45a76cf1461079d57600080fd5b8063b96e422c116100c8578063b96e422c14610744578063c267621e1461074d578063c47590e41461075e57600080fd5b8063a5900c4d146106cd578063b187bd261461072757600080fd5b806390333ba81161013a578063a0c3774f1161011f578063a0c3774f14610674578063a2c4564414610687578063a33741771461069a57600080fd5b806390333ba8146106425780639eebe7cd1461065557600080fd5b806383f3084f1161016b57806383f3084f146106145780638456cb59146106275780638a5215861461062f57600080fd5b80636aacaad8146105b55780637125590a1461060157600080fd5b8063423a4b401161023f5780635064d83a116101f35780635ea54eee116101cd5780635ea54eee1461054d578063635600861461057957806363e133bc1461058c57600080fd5b80635064d83a146104e757806351a424b1146104fa5780635670e2ce1461053257600080fd5b8063445780991161022457806344578099146104745780634a45a3a81461049f5780634fd49efd146104d457600080fd5b8063423a4b401461044757806342d4693e1461045a57600080fd5b80632384c32d1161029657806330eae5721161027b57806330eae572146104195780633b191c971461042c5780633f4ba83a1461043f57600080fd5b80632384c32d146103f35780632be5f0c71461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063219723841461033c578063221a8c681461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f13660046143f2565b6107e9565b005b6102f661030636600461444b565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a3660046145e7565b610886565b6103c161035d36600461444b565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f66104013660046146ab565b610936565b6102f66104143660046146f1565b610965565b6102f6610427366004614739565b610990565b6102f661043a366004614b83565b6109cd565b6102f6610af3565b6102f66104553660046146ab565b610b7a565b600f546104679060ff1681565b6040516103339190614ca8565b61048761048236600461444b565b610ba9565b6040516001600160a01b039091168152602001610333565b6104c67f76456852b329dfb8372f4dbf77fd89fe3650d6ac874449ff011ea624b4c258b781565b604051908152602001610333565b600154610487906001600160a01b031681565b6102f66104f5366004614cd0565b610be6565b61050d61050836600461444b565b610e06565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f661058736600461444b565b610e2f565b61048761059a36600461444b565b601f602052600090815260409020546001600160a01b031681565b6103c16040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f661060f366004614d05565b610e58565b601c54610487906001600160a01b031681565b6102f6610e83565b601d54610487906001600160a01b031681565b6102f6610650366004614cd0565b610ef5565b6104c661066336600461444b565b602080526000908152604090205481565b6104c661068236600461444b565b610f28565b6102f6610695366004614d27565b610fbf565b61050d604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61050d6106db36600461444b565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107349060ff1681565b6040519015158152602001610333565b6104c6601e5481565b6001546001600160a01b0316610487565b6102f661076c366004614d40565b610fe8565b600054610487906201000090046001600160a01b031681565b6102f6610798366004614cd0565b611013565b6103c16107ab36600461444b565b611040565b6104c66107be36600461444b565b6110af565b6102f66107d1366004614d6c565b6110dd565b6107346107e436600461444b565b61110c565b6107f88460ff16848484611141565b61080f336000356001600160e01b031916836111ec565b61081b85858585611233565b5050505050565b61082b816114d8565b610842336000356001600160e01b031916836111ec565b61084b826114ec565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614c92565b600b54600c54600e54935093509350935090919293565b61089c336000356001600160e01b031916611576565b80518251146108d7576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109315761091f8382815181106108f8576108f8614d9e565b602002602001015183838151811061091257610912614d9e565b6020026020010151611592565b8061092981614dca565b9150506108da565b505050565b6109428484848461163c565b610959336000356001600160e01b031916836111ec565b61081b858585856116a5565b61096f828261175e565b610986336000356001600160e01b031916836111ec565b61093183836117d6565b6109ad8160018111156109a5576109a5614c92565b60ff1661185d565b6109c4336000356001600160e01b031916836111ec565b61084b826118a4565b600054610100900460ff16158080156109ed5750600054600160ff909116105b80610a075750303b158015610a07575060005460ff166001145b610a7e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610aa1576000805461ff0019166101001790555b610aaa82611901565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610b09336000356001600160e01b031916611576565b60045460ff16610b45576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b868484848461163c565b610b9d336000356001600160e01b031916836111ec565b61081b85858585611971565b6001600160a01b038082166000908152601f60205260408120549091168015610bd25780610bdf565b601d546001600160a01b03165b9392505050565b610bf1838383611a31565b610c08336000356001600160e01b031916836111ec565b82600003610c1c57610c1984610f28565b92505b610c27848484611ac3565b6000610c3285610ba9565b90506000610c408683611ace565b90506000610c69610c5986670de0b6b3a7640000614de3565b610c638885611ada565b90611ada565b9050600063be1b4c4960e01b888589858c6001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdb9190614df6565b60408051600080825260208201908152818301909252610d0396959493929160648201614e53565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610d9d9216908690600401614f2f565b6000604051808303816000875af1158015610dbc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610de49190810190614f51565b9050610dfb89898988610df686611b4d565b611b5a565b505050505050505050565b600080600080610e1585611b67565b805160208201516040909201519097919650945092505050565b610e38816114d8565b610e4f336000356001600160e01b031916836111ec565b61084b82611bf2565b610e628282611c3c565b610e79336000356001600160e01b031916836111ec565b6109318383611c96565b610e99336000356001600160e01b031916611576565b60045460ff1615610ebd5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610f00838383611a31565b610f17336000356001600160e01b031916836111ec565b610f22848484611d19565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb99190614df6565b92915050565b610fc88161185d565b610fdf336000356001600160e01b031916836111ec565b61084b82611d6f565b610ff28282611dcd565b611009336000356001600160e01b031916836111ec565b6109318383611e2a565b61101e838383611a31565b611035336000356001600160e01b031916836111ec565b610f22848484611ec4565b60008060008060008061105287611f20565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b038116600090815260208052604081205480156110d35780610bdf565b601e549392505050565b6110e984848484611141565b611100336000356001600160e01b031916836111ec565b61081b85858585611f54565b60008061111a601084611fef565b90506001600f5460ff16600181111561113557611135614c92565b14610fb9578015610bdf565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061117857611178614d9e565b602002602001018181525050838160018151811061119857611198614d9e565b60200260200101818152505082816002815181106111b8576111b8614d9e565b60200260200101818152505081816003815181106111d8576111d8614d9e565b602002602001018181525050949350505050565b6111f7838383612011565b610931578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610a7593929190615015565b60ff84166112e457600081118061124a5750600082115b156112df578260000361127c5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061128857508281115b156112b257604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b816000036112df57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b611441565b826000036113115760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061132957506113266224ea0084615047565b81115b1561135357604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361138057604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60001960ff8516016113c257601c611397836120a7565b11156112df57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60011960ff85160161140a576113d7826120be565b6113e0836120a7565b146112df57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610a75565b8360ff16600281111561145657611456614c92565b600a805460ff1916600183600281111561147257611472614c92565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610fb9826001600160a01b031661185d565b6001600160a01b03811661152c576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261084b90839083906111ec565b6001600160a01b0382166115d2576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806115e7576115e26010836120e1565b6115f2565b6115f26010836120f6565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611630911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061167c5761167c614d9e565b602002602001018181525050836001600160a01b03168160018151811061119857611198614d9e565b6001600160a01b0384166116e5576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090206117099084848461210b565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061179b5761179b614d9e565b602002602001018181525050816001600160a01b0316816001815181106117c4576117c4614d9e565b60200260200101818152505092915050565b6001600160a01b0382166117fd57604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f79101611630565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061189357611893614d9e565b602002602001018181525050919050565b600f805482919060ff1916600183818111156118c2576118c2614c92565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516118f69190614ca8565b60405180910390a150565b600054610100900460ff1661195a5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051611965906121db565b61196e8161224a565b50565b6001600160a01b0384166119b1576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206119d5908484846122a3565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a23929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611a7057611a70614d9e565b6020026020010181815250508281600181518110611a9057611a90614d9e565b6020026020010181815250508181600281518110611ab057611ab0614d9e565b6020026020010181815250509392505050565b610931838383612402565b6000610bdf8383612509565b60008282028315801590611afd575082848281611af957611af961505e565b0414155b15611b2557604051637472527d60e11b81526004810185905260248101849052604401610a75565b8015611b4257670de0b6b3a7640000600019820104600101611b45565b60005b949350505050565b6000610fb9826000612708565b61081b8585858585612765565b611b94604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611bbd5780611bc0565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611c7357611c73614d9e565b6020026020010181815250508160001c816001815181106117c4576117c4614d9e565b8082148015611ca457508115155b15611cde576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610a75565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611d2660168484846122a3565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611d985760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf8906020016118f6565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611e0a57611e0a614d9e565b60200260200101818152505081816001815181106117c4576117c4614d9e565b6001600160a01b038216611e5157604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611e7a5760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed39101611630565b611ed1601284848461210b565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611f4b5780610bdf565b60169392505050565b670de0b6b3a7640000811115611f96576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016114ca565b6001600160a01b03811660009081526001830160205260408120541515610bdf565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590612066908790309088908890600401615074565b602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4591906150ba565b6000611b456120b962015180846150d7565b612779565b600080806120d26120b962015180866150d7565b5091509150611b458282612815565b6000610bdf836001600160a01b03841661289b565b6000610bdf836001600160a01b038416612995565b60006001600160a01b038416158015612122575082155b801561212c575081155b905060006001600160a01b0385161580159061215057508215806121505750838310155b90508115801561215e575080155b156121ae576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166122345760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6122418160a001516129e4565b61196e81612a91565b600054610100900460ff1661196e5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b60006001600160a01b0384161580156122ba575082155b80156122c4575081155b905060006001600160a01b038516158015906122e05750600084115b80156122ec5750600083115b9050811580156122fa575080155b1561234a576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b600386018390556001860184905581156123715760006002870181905560048701556123dd565b8560040154600003612398576000600287015561238e83426150eb565b60048701556123dd565b85546001600160a01b038681169116146123dd5785546000906123c4906001600160a01b031687611ace565b60028801549091506123d69082612bec565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b61240c8383612c49565b6001600160a01b03831661243357604051636070789160e11b815260040160405180910390fd5b8160000361246d576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061247884610ba9565b6001600160a01b0316036124b8576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006124c3846110af565b905080821115610f22576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610a75565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258391906150fe565b90506001600160a01b0381166125d4576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a75565b60006125de612c8f565b9050805160001461266f57816001600160a01b031663355efdd961260187612d0f565b61260a87612d0f565b846040518463ffffffff1660e01b81526004016126299392919061511b565b602060405180830381865afa158015612646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266a9190614df6565b6126ff565b816001600160a01b031663ac41865a61268787612d0f565b61269087612d0f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156126db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ff9190614df6565b95945050505050565b60006127158260206150eb565b8351101561275c5782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b50016020015190565b61276f8282612d43565b61081b8585612dc9565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816127d6576127d661505e565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806128265750816003145b806128315750816005145b8061283c5750816007145b806128475750816008145b80612852575081600a145b8061285d575081600c145b1561286a5750601f610fb9565b8160021461287a5750601e610fb9565b61288383612df1565b61288e57601c612891565b601d5b60ff169392505050565b600081815260018301602052604081205480156129845760006128bf600183614de3565b85549091506000906128d390600190614de3565b90508181146129385760008660000182815481106128f3576128f3614d9e565b906000526020600020015490508087600001848154811061291657612916614d9e565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061294957612949615147565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610fb9565b6000915050610fb9565b5092915050565b60008181526001830160205260408120546129dc57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fb9565b506000610fb9565b600054610100900460ff16612a3d5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612a4890612e2d565b612a50612efd565b612a5d8160200151612f60565b612a6a8160400151612fc2565b612a778160600151613024565b612a848160800151613086565b6119658160a001516130e8565b600054610100900460ff16612aea5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612af5906114ec565b612b028160200151611bf2565b612b0f8160400151611d6f565b60005b816060015151811015612b7d57612b6b82606001518281518110612b3857612b38614d9e565b60200260200101516000015183606001518381518110612b5a57612b5a614d9e565b6020026020010151602001516117d6565b80612b7581614dca565b915050612b12565b5060005b81608001515181101561084b57612bda82608001518281518110612ba757612ba7614d9e565b60200260200101516000015183608001518381518110612bc957612bc9614d9e565b602002602001015160200151611e2a565b80612be481614dca565b915050612b81565b60008282028315801590612c0f575082848281612c0b57612c0b61505e565b0414155b15612c3757604051637472527d60e11b81526004810185905260248101849052604401610a75565b670de0b6b3a764000090049392505050565b612c53828261314a565b612c5d8282613154565b612c678282613178565b612c718282613264565b612c7b8282613453565b612c85828261349d565b61084b828261358a565b60606000612c9b6136a0565b905036811115612cb957505060408051600081526020810190915290565b8067ffffffffffffffff811115612cd257612cd2614468565b6040519080825280601f01601f191660200182016040528015612cfc576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612d3b5781610fb9565b610fb96136bb565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612dad57600080fd5b505af1158015612dc1573d6000803e3d6000fd5b505050505050565b612dd38282613747565b612ddd82826137e9565b612de7828261380b565b61084b8282613a4a565b6000612dfe60048361515d565b158015612e145750612e1160648361515d565b15155b80610fb95750612e266101908361515d565b1592915050565b600054610100900460ff16612e865760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612ef481600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eef91906150fe565b613a77565b61196e81613ad9565b600054610100900460ff16612f565760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612f5e613b67565b565b600054610100900460ff16612fb95760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613bc0565b600054610100900460ff1661301b5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613c35565b600054610100900460ff1661307d5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613caa565b600054610100900460ff166130df5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613d58565b600054610100900460ff166131415760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e81613e36565b61084b8282613f14565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806131b7575081513a11155b9050806131fc5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610a75565b602082015115610f22576000613212483a614de3565b602084015190915081111580612dc15760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156132a05760405163013ce60b60e01b815242600482015260248101839052604401610a75565b60008460028111156132b4576132b4614c92565b0361336d57826000036132c957505050505050565b806000036132e3576132db83426150eb565b600d55612dc1565b60006132ef8342614de3565b905060006132fd85836150d7565b9050600061330b8683615047565b6133159084614de3565b9050838111156133415760405163013ce60b60e01b815242600482015260248101869052604401610a75565b8561334d8360016150eb565b6133579190615047565b61336190866150eb565b600d5550612dc1915050565b814210158015613386575061338281836150eb565b4211155b15613395576132db8284613f67565b600060018560028111156133ab576133ab614c92565b146133be576133b9426120be565b6133c7565b6133c7836120a7565b905060006133d58483613fff565b9050804210156134015760405163013ce60b60e01b815242600482015260248101829052604401610a75565b600061340d84836150eb565b9050428110801561343a5760405163013ce60b60e01b815242600482015260248101839052604401610a75565b6134448388613f67565b600d5550505050505050505050565b61345c8261110c565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a75565b60006134a883611b67565b80519091506001600160a01b03166134bf57505050565b6000836001600160a01b031682600001516001600160a01b0316146134fb576134f66134ef858460000151611ace565b8490612bec565b6134fd565b825b9050600082602001518210158015613525575060408301511580613525575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610a75565b600061359583611f20565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506135e457505050565b6000836001600160a01b031682600001516001600160a01b031614613619576136146134ef858460000151611ace565b61361b565b825b9050600082608001514210613631576000613637565b82604001515b61364190836150eb565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610a75565b600060243610156136b15750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa15801561371e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374291906150fe565b905090565b600061375283611f20565b80549091506001600160a01b031661376957505050565b80546000906001600160a01b0385811691161461379f57815461379a906134ef9086906001600160a01b0316611ace565b6137a1565b825b9050816004015442106137ca576000600283015560038201546137c490426150eb565b60048301555b808260020160008282546137de91906150eb565b909155505050505050565b600d546000036137f7575050565b613802600d5461401e565b50506000600d55565b600554600003613847576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a6005546138809190614de3565b9050600061388e3a83615047565b905060008360400151600014806138a9575083604001518211155b9050806138f3578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610a75929190918252602082015260400190565b600060055560608401511580159061390b5750600085115b15612dc15760006139de306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397791906150fe565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d891906150fe565b88611ace565b905060006139ec8483611ada565b905060006139fa8289614053565b90508660600151811115610dfb5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610a75918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613ad05760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e8161411c565b600054610100900460ff16613b325760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051600180546001600160a01b0319166001600160a01b039092169190911790556020810151604082015161196e9190611c96565b600054610100900460ff16612f5e5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600054610100900460ff16613c195760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e8160000151826020015183604001518460600151611f54565b600054610100900460ff16613c8e5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61196e8160000151826020015183604001518460600151611233565b600054610100900460ff16613d035760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051613d0e906118a4565b60005b81602001515181101561084b57613d4682602001518281518110613d3757613d37614d9e565b60200260200101516001611592565b80613d5081614dca565b915050613d11565b600054610100900460ff16613db15760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613dca929190611ec4565b60005b82602001515181101561093157600083602001518281518110613df257613df2614d9e565b60200260200101519050600081602001519050613e2182600001518260000151836020015184604001516116a5565b50508080613e2e90614dca565b915050613dcd565b600054610100900460ff16613e8f5760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613ea8929190611d19565b60005b82602001515181101561093157600083602001518281518110613ed057613ed0614d9e565b60200260200101519050600081602001519050613eff8260000151826000015183602001518460400151611971565b50508080613f0c90614dca565b915050613eab565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612d93565b600080600080613f76866141b5565b919450925090506000613f8986846150eb565b90506000613f98600c8361515d565b90506000613fa7600c846150d7565b613fb190876150eb565b905060006002600a5460ff166002811115613fce57613fce614c92565b14613fd95784613fe3565b613fe38284612815565b9050613ff18a8385846141d4565b9a9950505050505050505050565b600080600061400d426141b5565b50915091506126ff858383876141d4565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad064906020016118f6565b60008160000361408f576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361409f57506000610fb9565b670de0b6b3a7640000838102908482816140bb576140bb61505e565b04146140fd576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610a75565b82600182038161410f5761410f61505e565b0460010191505092915050565b600054610100900460ff166141755760405162461bcd60e51b815260206004820152602b602482015260008051602061521883398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600080806141c7620151808504612779565b9196909550909350915050565b60006126ff8484846141e5896141fc565b6141ee8a61421a565b6141f78b614236565b614243565b60008061420c620151808461515d565b9050610bdf610e10826150d7565b600080614229610e108461515d565b9050610bdf603c826150d7565b6000610fb9603c8361515d565b600081614251603c85615047565b61425d610e1087615047565b6201518061426c8b8b8b61429f565b6142769190615047565b61428091906150eb565b61428a91906150eb565b61429491906150eb565b979650505050505050565b60006107b28410156142b057600080fd5b838383600062253d8c60046064600c6142ca600e88615171565b6142d49190615191565b6142e0886113246151bf565b6142ea91906151bf565b6142f49190615191565b6142ff9060036151e7565b6143099190615191565b600c80614317600e88615171565b6143219190615191565b61432c90600c6151e7565b614337600288615171565b6143419190615171565b61434d9061016f6151e7565b6143579190615191565b6004600c614366600e89615171565b6143709190615191565b61437c896112c06151bf565b61438691906151bf565b614392906105b56151e7565b61439c9190615191565b6143a8617d4b87615171565b6143b291906151bf565b6143bc91906151bf565b6143c69190615171565b6143d09190615171565b98975050505050505050565b803560ff811681146143ed57600080fd5b919050565b6000806000806080858703121561440857600080fd5b614411856143dc565b966020860135965060408601359560600135945092505050565b6001600160a01b038116811461196e57600080fd5b80356143ed8161442b565b60006020828403121561445d57600080fd5b8135610bdf8161442b565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156144a1576144a1614468565b60405290565b6040516080810167ffffffffffffffff811182821017156144a1576144a1614468565b60405160c0810167ffffffffffffffff811182821017156144a1576144a1614468565b6040516020810167ffffffffffffffff811182821017156144a1576144a1614468565b604051601f8201601f1916810167ffffffffffffffff8111828210171561453957614539614468565b604052919050565b600067ffffffffffffffff82111561455b5761455b614468565b5060051b60200190565b600082601f83011261457657600080fd5b8135602061458b61458683614541565b614510565b82815260059290921b840181019181810190868411156145aa57600080fd5b8286015b848110156145ce5780356145c18161442b565b83529183019183016145ae565b509695505050505050565b801515811461196e57600080fd5b600080604083850312156145fa57600080fd5b823567ffffffffffffffff8082111561461257600080fd5b61461e86838701614565565b935060209150818501358181111561463557600080fd5b85019050601f8101861361464857600080fd5b803561465661458682614541565b81815260059190911b8201830190838101908883111561467557600080fd5b928401925b8284101561469c57833561468d816145d9565b8252928401929084019061467a565b80955050505050509250929050565b600080600080608085870312156146c157600080fd5b84356146cc8161442b565b935060208501356146dc8161442b565b93969395505050506040820135916060013590565b6000806040838503121561470457600080fd5b823561470f8161442b565b9150602083013561471f8161442b565b809150509250929050565b8035600281106143ed57600080fd5b60006020828403121561474b57600080fd5b610bdf8261472a565b600082601f83011261476557600080fd5b8135602061477561458683614541565b82815260069290921b8401810191818101908684111561479457600080fd5b8286015b848110156145ce57604081890312156147b15760008081fd5b6147b961447e565b81356147c48161442b565b8152818501356147d38161442b565b81860152835291830191604001614798565b600082601f8301126147f657600080fd5b8135602061480661458683614541565b82815260069290921b8401810191818101908684111561482557600080fd5b8286015b848110156145ce57604081890312156148425760008081fd5b61484a61447e565b81356148558161442b565b81528185013585820152835291830191604001614829565b60006060828403121561487f57600080fd5b6040516060810181811067ffffffffffffffff821117156148a2576148a2614468565b60405290508082356148b38161442b565b8082525060208301356020820152604083013560408201525092915050565b6000608082840312156148e457600080fd5b6148ec6144a7565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b60006080828403121561492857600080fd5b6149306144a7565b905061493b826143dc565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561497357600080fd5b61497b61447e565b90506149868261472a565b8152602082013567ffffffffffffffff8111156149a257600080fd5b6149ae84828501614565565b60208301525092915050565b6000608082840312156149cc57600080fd5b6149d461447e565b905081356149e18161442b565b81526149f0836020840161486d565b602082015292915050565b60006080808385031215614a0e57600080fd5b614a1661447e565b9150614a22848461486d565b8252606083013567ffffffffffffffff811115614a3e57600080fd5b8301601f81018513614a4f57600080fd5b80356020614a5f61458683614541565b82815260079290921b83018101918181019088841115614a7e57600080fd5b938201935b83851015614aa457614a9589866149ba565b82529385019390820190614a83565b808388015250505050505092915050565b60006101c08284031215614ac857600080fd5b614ad06144ca565b9050614adc838361486d565b8152614aeb83606084016148d2565b6020820152614afd8360e08401614916565b604082015261016082013567ffffffffffffffff80821115614b1e57600080fd5b614b2a85838601614961565b6060840152610180840135915080821115614b4457600080fd5b614b50858386016149fb565b60808401526101a0840135915080821115614b6a57600080fd5b50614b77848285016149fb565b60a08301525092915050565b600060208284031215614b9557600080fd5b813567ffffffffffffffff80821115614bad57600080fd5b9083019060208286031215614bc157600080fd5b614bc96144ed565b823582811115614bd857600080fd5b929092019160c08387031215614bed57600080fd5b614bf56144ca565b614bfe84614440565b8152614c0c60208501614440565b602082015260408401356040820152606084013583811115614c2d57600080fd5b614c3988828701614754565b606083015250608084013583811115614c5157600080fd5b614c5d888287016147e5565b60808301525060a084013583811115614c7557600080fd5b614c8188828701614ab5565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614cca57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614ce557600080fd5b8335614cf08161442b565b95602085013595506040909401359392505050565b60008060408385031215614d1857600080fd5b50508035926020909101359150565b600060208284031215614d3957600080fd5b5035919050565b60008060408385031215614d5357600080fd5b8235614d5e8161442b565b946020939093013593505050565b60008060008060808587031215614d8257600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ddc57614ddc614db4565b5060010190565b81810381811115610fb957610fb9614db4565b600060208284031215614e0857600080fd5b5051919050565b600081518084526020808501945080840160005b83811015614e485781516001600160a01b031687529582019590820190600101614e23565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015287608086015260e060a0860152829150865180845261010086019250818801935060005b81811015614ebb57845184529382019392820192600101614e9f565b50505083810360c0850152614ed08186614e0f565b9b9a5050505050505050505050565b60005b83811015614efa578181015183820152602001614ee2565b50506000910152565b60008151808452614f1b816020860160208601614edf565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611b456040830184614f03565b600060208284031215614f6357600080fd5b815167ffffffffffffffff80821115614f7b57600080fd5b818401915084601f830112614f8f57600080fd5b815181811115614fa157614fa1614468565b614fb4601f8201601f1916602001614510565b9150808252856020828501011115614fcb57600080fd5b614fdc816020840160208601614edf565b50949350505050565b600081518084526020808501945080840160005b83811015614e4857815187529582019590820190600101614ff9565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006126ff6060830184614fe5565b8082028115828204841417610fb957610fb9614db4565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526150b06080830184614fe5565b9695505050505050565b6000602082840312156150cc57600080fd5b8151610bdf816145d9565b6000826150e6576150e661505e565b500490565b80820180821115610fb957610fb9614db4565b60006020828403121561511057600080fd5b8151610bdf8161442b565b60006001600160a01b038086168352808516602084015250606060408301526126ff6060830184614f03565b634e487b7160e01b600052603160045260246000fd5b60008261516c5761516c61505e565b500690565b818103600083128015838313168383128216171561298e5761298e614db4565b6000826151a0576151a061505e565b600160ff1b8214600019841416156151ba576151ba614db4565b500590565b80820182811260008312801582168215821617156151df576151df614db4565b505092915050565b80820260008212600160ff1b8414161561520357615203614db4565b8181058314821517610fb957610fb9614db456fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a26469706673582212203faa929b21dc023d40c464582713bdc479e56f77f1ec0684f80d24958f9d558464736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
