{
  "_format": "hh-sol-artifact-1",
  "contractName": "BalancerV2Swapper",
  "sourceName": "contracts/swap/BalancerV2Swapper.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": "TaskMissingPoolId",
      "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": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "BalancerPoolIdSet",
      "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": "",
          "type": "address"
        }
      ],
      "name": "balancerPoolId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "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": "token",
                  "type": "address"
                },
                {
                  "internalType": "bytes32",
                  "name": "poolId",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct BalancerV2Swapper.BalancerPoolId[]",
              "name": "balancerPoolIds",
              "type": "tuple[]"
            },
            {
              "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 BalancerV2Swapper.BalancerV2SwapConfig",
          "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": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "setPoolId",
      "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": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61554880620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c806383f3084f11610191578063b187bd26116100e3578063d3feb60211610097578063da70696c11610071578063da70696c146107ec578063e6b5be981461080c578063f9eaee0d1461081f57600080fd5b8063d3feb602146107b3578063d45a76cf146107c6578063d86483e1146107d957600080fd5b8063c267621e116100c8578063c267621e14610776578063c47590e414610787578063d09edf311461079a57600080fd5b8063b187bd2614610750578063b96e422c1461076d57600080fd5b80639eebe7cd11610145578063a33741771161011f578063a3374177146106b0578063a3f3187b146106e3578063a5900c4d146106f657600080fd5b80639eebe7cd1461066b578063a0c3774f1461068a578063a2c456441461069d57600080fd5b80638a521586116101765780638a5215861461063257806390333ba8146106455780639cbaa2021461065857600080fd5b806383f3084f146106175780638456cb591461062a57600080fd5b8063445780991161024a5780635670e2ce116101fe57806363e133bc116101d857806363e133bc1461058f5780636aacaad8146105b85780637125590a1461060457600080fd5b80635670e2ce146105355780635ea54eee14610550578063635600861461057c57600080fd5b80634fd49efd1161022f5780634fd49efd146104d75780635064d83a146104ea57806351a424b1146104fd57600080fd5b806344578099146104775780634a45a3a8146104a257600080fd5b80632384c32d116102ac5780633f4ba83a116102865780633f4ba83a14610442578063423a4b401461044a57806342d4693e1461045d57600080fd5b80632384c32d146104095780632be5f0c71461041c57806330eae5721461042f57600080fd5b8063119a5e96116102dd578063119a5e96146103215780632197238414610352578063221a8c681461036557600080fd5b80630fe105e8146102f957806310188aef1461030e575b600080fd5b61030c610307366004614636565b610832565b005b61030c61031c36600461468f565b61086b565b610329610898565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61030c610360366004614808565b6108cf565b6103d761037336600461468f565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610349565b61030c6104173660046148cc565b61097f565b61030c61042a366004614912565b6109ae565b61030c61043d36600461495a565b6109d9565b61030c610a16565b61030c6104583660046148cc565b610a9d565b600f5461046a9060ff1681565b604051610349919061498b565b61048a61048536600461468f565b610acc565b6040516001600160a01b039091168152602001610349565b6104c97feac7e9d118eedd395d5dcfb39995e466d6cef080fcfa21b768186522db50738881565b604051908152602001610349565b60015461048a906001600160a01b031681565b61030c6104f83660046149b3565b610b09565b61051061050b36600461468f565b610d1f565b604080516001600160a01b039094168452602084019290925290820152606001610349565b60025460035460408051928352602083019190915201610349565b600654600754600854600954604080519485526020850193909352918301526060820152608001610349565b61030c61058a36600461468f565b610d48565b61048a61059d36600461468f565b601f602052600090815260409020546001600160a01b031681565b6103d76040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61030c6106123660046149e8565b610d71565b601c5461048a906001600160a01b031681565b61030c610d9c565b601d5461048a906001600160a01b031681565b61030c6106533660046149b3565b610e0e565b61030c610666366004614a0a565b610e41565b6104c961067936600461468f565b602080526000908152604090205481565b6104c961069836600461468f565b610e6c565b61030c6106ab366004614a36565b610f03565b610510604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61030c6106f1366004614f32565b610f2c565b61051061070436600461468f565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b60045461075d9060ff1681565b6040519015158152602001610349565b6104c9601e5481565b6001546001600160a01b031661048a565b61030c610795366004614a0a565b611052565b60005461048a906201000090046001600160a01b031681565b61030c6107c13660046149b3565b61107d565b6103d76107d436600461468f565b6110aa565b6104c96107e736600461468f565b611119565b6104c96107fa36600461468f565b60216020526000908152604090205481565b61030c61081a366004615047565b611147565b61075d61082d36600461468f565b611176565b6108418460ff168484846111ab565b610858336000356001600160e01b03191683611256565b6108648585858561129d565b5050505050565b61087481611542565b61088b336000356001600160e01b03191683611256565b61089482611556565b5050565b600a5460009081908190819060ff1660028111156108b8576108b8614975565b600b54600c54600e54935093509350935090919293565b6108e5336000356001600160e01b0319166115e0565b8051825114610920576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561097a5761096883828151811061094157610941615079565b602002602001015183838151811061095b5761095b615079565b60200260200101516115fc565b80610972816150a5565b915050610923565b505050565b61098b848484846116a6565b6109a2336000356001600160e01b03191683611256565b6108648585858561170f565b6109b882826117c8565b6109cf336000356001600160e01b03191683611256565b61097a8383611840565b6109f68160018111156109ee576109ee614975565b60ff166118c7565b610a0d336000356001600160e01b03191683611256565b6108948261190e565b610a2c336000356001600160e01b0319166115e0565b60045460ff16610a68576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610aa9848484846116a6565b610ac0336000356001600160e01b03191683611256565b6108648585858561196b565b6001600160a01b038082166000908152601f60205260408120549091168015610af55780610b02565b601d546001600160a01b03165b9392505050565b610b14838383611a2b565b610b2b336000356001600160e01b03191683611256565b82600003610b3f57610b3c84610e6c565b92505b610b4a848484611abd565b6000610b5585610acc565b90506000610b638683611b17565b90506000610b8c610b7c86670de0b6b3a76400006150be565b610b868885611b23565b90611b23565b6001600160a01b0388166000908152602160205260408120549192507fbe1b4c490000000000000000000000000000000000000000000000000000000089868a868686604051908082528060200260200182016040528015610bf8578160200160208202803683370190505b50604080516000815260208101909152610c1b9695949392919060448101615115565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610cb592169086906004016151f1565b6000604051808303816000875af1158015610cd4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cfc9190810190615213565b9050610d138a8a8a89610d0e86611b96565b611ba3565b50505050505050505050565b600080600080610d2e85611bb0565b805160208201516040909201519097919650945092505050565b610d5181611542565b610d68336000356001600160e01b03191683611256565b61089482611c3b565b610d7b8282611c85565b610d92336000356001600160e01b03191683611256565b61097a8383611cdf565b610db2336000356001600160e01b0319166115e0565b60045460ff1615610dd65760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610e19838383611a2b565b610e30336000356001600160e01b03191683611256565b610e3b848484611d62565b50505050565b610e4b8282611db8565b610e62336000356001600160e01b03191683611256565b61097a8383611df5565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd91906152a7565b92915050565b610f0c816118c7565b610f23336000356001600160e01b03191683611256565b61089482611e69565b600054610100900460ff1615808015610f4c5750600054600160ff909116105b80610f665750303b158015610f66575060005460ff166001145b610fdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015611000576000805461ff0019166101001790555b61100982611ec7565b8015610894576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b61105c8282611f39565b611073336000356001600160e01b03191683611256565b61097a8383611f96565b611088838383611a2b565b61109f336000356001600160e01b03191683611256565b610e3b848484612030565b6000806000806000806110bc8761208c565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152602080526040812054801561113d5780610b02565b601e549392505050565b611153848484846111ab565b61116a336000356001600160e01b03191683611256565b610864858585856120c0565b60008061118460108461215b565b90506001600f5460ff16600181111561119f5761119f614975565b14610efd578015610b02565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106111e2576111e2615079565b602002602001018181525050838160018151811061120257611202615079565b602002602001018181525050828160028151811061122257611222615079565b602002602001018181525050818160038151811061124257611242615079565b602002602001018181525050949350505050565b61126183838361217d565b61097a578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610fd4939291906152f0565b60ff841661134e5760008111806112b45750600082115b1561134957826000036112e65760405163bea499cb60e01b815260ff8516600482015260248101849052604401610fd4565b8015806112f257508281115b1561131c57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610fd4565b8160000361134957604051635686bf5960e11b815260ff8516600482015260248101839052604401610fd4565b6114ab565b8260000361137b5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610fd4565b80158061139357506113906224ea0084615322565b81115b156113bd57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610fd4565b816000036113ea57604051635686bf5960e11b815260ff8516600482015260248101839052604401610fd4565b60001960ff85160161142c57601c61140183612213565b111561134957604051635686bf5960e11b815260ff8516600482015260248101839052604401610fd4565b60011960ff851601611474576114418261222a565b61144a83612213565b1461134957604051635686bf5960e11b815260ff8516600482015260248101839052604401610fd4565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610fd4565b8360ff1660028111156114c0576114c0614975565b600a805460ff191660018360028111156114dc576114dc614975565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610efd826001600160a01b03166118c7565b6001600160a01b038116611596576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526108949083908390611256565b6001600160a01b03821661163c576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806116515761164c60108361224d565b61165c565b61165c601083612262565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c8260405161169a911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106116e6576116e6615079565b602002602001018181525050836001600160a01b03168160018151811061120257611202615079565b6001600160a01b03841661174f576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061177390848484612277565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061180557611805615079565b602002602001018181525050816001600160a01b03168160018151811061182e5761182e615079565b60200260200101818152505092915050565b6001600160a01b03821661186757604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f7910161169a565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106118fd576118fd615079565b602002602001018181525050919050565b600f805482919060ff19166001838181111561192c5761192c614975565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a81604051611960919061498b565b60405180910390a150565b6001600160a01b0384166119ab576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206119cf90848484612347565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a1d929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611a6a57611a6a615079565b6020026020010181815250508281600181518110611a8a57611a8a615079565b6020026020010181815250508181600281518110611aaa57611aaa615079565b6020026020010181815250509392505050565b611ac88383836124a6565b6001600160a01b03831660009081526021602052604090205461097a576040517f481aedfc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b0283836125ad565b60008282028315801590611b46575082848281611b4257611b42615339565b0414155b15611b6e57604051637472527d60e11b81526004810185905260248101849052604401610fd4565b8015611b8b57670de0b6b3a7640000600019820104600101611b8e565b60005b949350505050565b6000610efd8260006127ac565b6108648585858585612809565b611bdd604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611c065780611c09565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611cbc57611cbc615079565b6020026020010181815250508160001c8160018151811061182e5761182e615079565b8082148015611ced57508115155b15611d27576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610fd4565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611d6f6016848484612347565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611cbc57611cbc615079565b6001600160a01b038216611e1c57604051636070789160e11b815260040160405180910390fd5b6001600160a01b03821660008181526021602052604090819020839055517fdde3f5548a0794b43c0277eb7dea9ae44b997b39370960b27aa65512328a82f49061169a9084815260200190565b670de0b6b3a7640000811115611e925760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611960565b600054610100900460ff16611f205760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f2d816020015161281d565b611f368161288c565b50565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611f7657611f76615079565b602002602001018181525050818160018151811061182e5761182e615079565b6001600160a01b038216611fbd57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611fe65760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3910161169a565b61203d6012848484612277565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156120b75780610b02565b60169392505050565b670de0b6b3a7640000811115612102576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611534565b6001600160a01b03811660009081526001830160205260408120541515610b02565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906121d290879030908890889060040161534f565b602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8e9190615395565b6000611b8e61222562015180846153b2565b612950565b6000808061223e61222562015180866153b2565b5091509150611b8e82826129ec565b6000610b02836001600160a01b038416612a72565b6000610b02836001600160a01b038416612b6c565b60006001600160a01b03841615801561228e575082155b8015612298575081155b905060006001600160a01b038516158015906122bc57508215806122bc5750838310155b9050811580156122ca575080155b1561231a576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610fd4565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b60006001600160a01b03841615801561235e575082155b8015612368575081155b905060006001600160a01b038516158015906123845750600084115b80156123905750600083115b90508115801561239e575080155b156123ee576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610fd4565b60038601839055600186018490558115612415576000600287018190556004870155612481565b856004015460000361243c576000600287015561243283426153c6565b6004870155612481565b85546001600160a01b03868116911614612481578554600090612468906001600160a01b031687611b17565b600288015490915061247a9082612bbb565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6124b08383612c18565b6001600160a01b0383166124d757604051636070789160e11b815260040160405180910390fd5b81600003612511576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061251c84610acc565b6001600160a01b03160361255c576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061256784611119565b905080821115610e3b576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610fd4565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262791906153d9565b90506001600160a01b038116612678576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610fd4565b6000612682612c5e565b9050805160001461271357816001600160a01b031663355efdd96126a587612cde565b6126ae87612cde565b846040518463ffffffff1660e01b81526004016126cd939291906153f6565b602060405180830381865afa1580156126ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270e91906152a7565b6127a3565b816001600160a01b031663ac41865a61272b87612cde565b61273487612cde565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a391906152a7565b95945050505050565b60006127b98260206153c6565b835110156128005782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610fd4918491600401918252602082015260400190565b50016020015190565b6128138282612d12565b6108648585612d98565b600054610100900460ff166128765760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b6128838160a00151612dc0565b611f3681612e76565b600054610100900460ff166128e55760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b60005b8151518110156108945761293e8260000151828151811061290b5761290b615079565b6020026020010151600001518360000151838151811061292d5761292d615079565b602002602001015160200151611df5565b80612948816150a5565b9150506128e8565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816129ad576129ad615339565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806129fd5750816003145b80612a085750816005145b80612a135750816007145b80612a1e5750816008145b80612a29575081600a145b80612a34575081600c145b15612a415750601f610efd565b81600214612a515750601e610efd565b612a5a83612fd1565b612a6557601c612a68565b601d5b60ff169392505050565b60008181526001830160205260408120548015612b5b576000612a966001836150be565b8554909150600090612aaa906001906150be565b9050818114612b0f576000866000018281548110612aca57612aca615079565b9060005260206000200154905080876000018481548110612aed57612aed615079565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b2057612b20615422565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610efd565b6000915050610efd565b5092915050565b6000818152600183016020526040812054612bb357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610efd565b506000610efd565b60008282028315801590612bde575082848281612bda57612bda615339565b0414155b15612c0657604051637472527d60e11b81526004810185905260248101849052604401610fd4565b670de0b6b3a764000090049392505050565b612c22828261300d565b612c2c8282613017565b612c36828261303b565b612c408282613127565b612c4a8282613316565b612c548282613360565b610894828261344d565b60606000612c6a613563565b905036811115612c8857505060408051600081526020810190915290565b8067ffffffffffffffff811115612ca157612ca16146ac565b6040519080825280601f01601f191660200182016040528015612ccb576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612d0a5781610efd565b610efd61357e565b60035415610894576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612d7c57600080fd5b505af1158015612d90573d6000803e3d6000fd5b505050505050565b612da2828261360a565b612dac82826136ac565b612db682826136ce565b6108948282613918565b600054610100900460ff16612e195760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b8051612e2490613945565b612e2c613a15565b612e398160200151613a78565b612e468160400151613ada565b612e538160600151613b3c565b612e608160800151613b9e565b612e6d8160a00151613c00565b611f3681613c62565b600054610100900460ff16612ecf5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b8051612eda90611556565b612ee78160200151611c3b565b612ef48160400151611e69565b60005b816060015151811015612f6257612f5082606001518281518110612f1d57612f1d615079565b60200260200101516000015183606001518381518110612f3f57612f3f615079565b602002602001015160200151611840565b80612f5a816150a5565b915050612ef7565b5060005b81608001515181101561089457612fbf82608001518281518110612f8c57612f8c615079565b60200260200101516000015183608001518381518110612fae57612fae615079565b602002602001015160200151611f96565b80612fc9816150a5565b915050612f66565b6000612fde600483615438565b158015612ff45750612ff1606483615438565b15155b80610efd575061300661019083615438565b1592915050565b6108948282613cbb565b60045460ff16156108945760405163181e462560e31b815260040160405180910390fd5b5a60055560408051608081018252600654808252600754602083015260085492820192909252600954606082015290600090158061307a575081513a11155b9050806130bf5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610fd4565b602082015115610e3b5760006130d5483a6150be565b602084015190915081111580612d905760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610fd4918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156131635760405163013ce60b60e01b815242600482015260248101839052604401610fd4565b600084600281111561317757613177614975565b03613230578260000361318c57505050505050565b806000036131a65761319e83426153c6565b600d55612d90565b60006131b283426150be565b905060006131c085836153b2565b905060006131ce8683615322565b6131d890846150be565b9050838111156132045760405163013ce60b60e01b815242600482015260248101869052604401610fd4565b856132108360016153c6565b61321a9190615322565b61322490866153c6565b600d5550612d90915050565b814210158015613249575061324581836153c6565b4211155b156132585761319e8284613d0e565b6000600185600281111561326e5761326e614975565b146132815761327c4261222a565b61328a565b61328a83612213565b905060006132988483613da6565b9050804210156132c45760405163013ce60b60e01b815242600482015260248101829052604401610fd4565b60006132d084836153c6565b905042811080156132fd5760405163013ce60b60e01b815242600482015260248101839052604401610fd4565b6133078388613d0e565b600d5550505050505050505050565b61331f82611176565b610894576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610fd4565b600061336b83611bb0565b80519091506001600160a01b031661338257505050565b6000836001600160a01b031682600001516001600160a01b0316146133be576133b96133b2858460000151611b17565b8490612bbb565b6133c0565b825b90506000826020015182101580156133e85750604083015115806133e8575082604001518211155b905080610864578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610fd4565b60006134588361208c565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506134a757505050565b6000836001600160a01b031682600001516001600160a01b0316146134dc576134d76133b2858460000151611b17565b6134de565b825b90506000826080015142106134f45760006134fa565b82604001515b61350490836153c6565b9050826020015181111561086457825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610fd4565b600060243610156135745750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa1580156135e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360591906153d9565b905090565b60006136158361208c565b80549091506001600160a01b031661362c57505050565b80546000906001600160a01b0385811691161461366257815461365d906133b29086906001600160a01b0316611b17565b613664565b825b90508160040154421061368d5760006002830155600382015461368790426153c6565b60048301555b808260020160008282546136a191906153c6565b909155505050505050565b600d546000036136ba575050565b6136c5600d54613dc5565b50506000600d55565b60055460000361370a576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a60055461374391906150be565b905060006137513a83615322565b9050600083604001516000148061376c575083604001518211155b9050806137b6578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610fd4929190918252602082015260400190565b60006005556060840151158015906137ce5750600085115b15612d905760006138a1306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383a91906153d9565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389b91906153d9565b88611b17565b905060006138af8483611b23565b905060006138bd8289613dfa565b9050866060015181111561390d5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610fd4918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff1661399e5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b613a0c81600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0791906153d9565b613ec3565b611f3681613f25565b600054610100900460ff16613a6e5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b613a76613fb3565b565b600054610100900460ff16613ad15760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f368161400c565b600054610100900460ff16613b335760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f3681614081565b600054610100900460ff16613b955760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f36816140f6565b600054610100900460ff16613bf75760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f36816141a4565b600054610100900460ff16613c595760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f3681614282565b600054610100900460ff16611f365760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b600254156108945760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612d62565b600080600080613d1d86614360565b919450925090506000613d3086846153c6565b90506000613d3f600c83615438565b90506000613d4e600c846153b2565b613d5890876153c6565b905060006002600a5460ff166002811115613d7557613d75614975565b14613d805784613d8a565b613d8a82846129ec565b9050613d988a83858461437f565b9a9950505050505050505050565b6000806000613db442614360565b50915091506127a38583838761437f565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611960565b600081600003613e36576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003613e4657506000610efd565b670de0b6b3a764000083810290848281613e6257613e62615339565b0414613ea4576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610fd4565b826001820381613eb657613eb6615339565b0460010191505092915050565b600054610100900460ff16613f1c5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f36816143a7565b600054610100900460ff16613f7e5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b8051600180546001600160a01b0319166001600160a01b0390921691909117905560208101516040820151611f369190611cdf565b600054610100900460ff16613a765760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b600054610100900460ff166140655760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f3681600001518260200151836040015184606001516120c0565b600054610100900460ff166140da5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f36816000015182602001518360400151846060015161129d565b600054610100900460ff1661414f5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b805161415a9061190e565b60005b816020015151811015610894576141928260200151828151811061418357614183615079565b602002602001015160016115fc565b8061419c816150a5565b91505061415d565b600054610100900460ff166141fd5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b8051805160208201516040830151614216929190612030565b60005b82602001515181101561097a5760008360200151828151811061423e5761423e615079565b6020026020010151905060008160200151905061426d826000015182600001518360200151846040015161170f565b5050808061427a906150a5565b915050614219565b600054610100900460ff166142db5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b80518051602082015160408301516142f4929190611d62565b60005b82602001515181101561097a5760008360200151828151811061431c5761431c615079565b6020026020010151905060008160200151905061434b826000015182600001518360200151846040015161196b565b50508080614358906150a5565b9150506142f7565b60008080614372620151808504612950565b9196909550909350915050565b60006127a384848461439089614440565b6143998a61445e565b6143a28b61447a565b614487565b600054610100900460ff166144005760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000806144506201518084615438565b9050610b02610e10826153b2565b60008061446d610e1084615438565b9050610b02603c826153b2565b6000610efd603c83615438565b600081614495603c85615322565b6144a1610e1087615322565b620151806144b08b8b8b6144e3565b6144ba9190615322565b6144c491906153c6565b6144ce91906153c6565b6144d891906153c6565b979650505050505050565b60006107b28410156144f457600080fd5b838383600062253d8c60046064600c61450e600e8861544c565b614518919061546c565b6145248861132461549a565b61452e919061549a565b614538919061546c565b6145439060036154c2565b61454d919061546c565b600c8061455b600e8861544c565b614565919061546c565b61457090600c6154c2565b61457b60028861544c565b614585919061544c565b6145919061016f6154c2565b61459b919061546c565b6004600c6145aa600e8961544c565b6145b4919061546c565b6145c0896112c061549a565b6145ca919061549a565b6145d6906105b56154c2565b6145e0919061546c565b6145ec617d4b8761544c565b6145f6919061549a565b614600919061549a565b61460a919061544c565b614614919061544c565b98975050505050505050565b803560ff8116811461463157600080fd5b919050565b6000806000806080858703121561464c57600080fd5b61465585614620565b966020860135965060408601359560600135945092505050565b6001600160a01b0381168114611f3657600080fd5b80356146318161466f565b6000602082840312156146a157600080fd5b8135610b028161466f565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156146e5576146e56146ac565b60405290565b6040516080810167ffffffffffffffff811182821017156146e5576146e56146ac565b60405160c0810167ffffffffffffffff811182821017156146e5576146e56146ac565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475a5761475a6146ac565b604052919050565b600067ffffffffffffffff82111561477c5761477c6146ac565b5060051b60200190565b600082601f83011261479757600080fd5b813560206147ac6147a783614762565b614731565b82815260059290921b840181019181810190868411156147cb57600080fd5b8286015b848110156147ef5780356147e28161466f565b83529183019183016147cf565b509695505050505050565b8015158114611f3657600080fd5b6000806040838503121561481b57600080fd5b823567ffffffffffffffff8082111561483357600080fd5b61483f86838701614786565b935060209150818501358181111561485657600080fd5b85019050601f8101861361486957600080fd5b80356148776147a782614762565b81815260059190911b8201830190838101908883111561489657600080fd5b928401925b828410156148bd5783356148ae816147fa565b8252928401929084019061489b565b80955050505050509250929050565b600080600080608085870312156148e257600080fd5b84356148ed8161466f565b935060208501356148fd8161466f565b93969395505050506040820135916060013590565b6000806040838503121561492557600080fd5b82356149308161466f565b915060208301356149408161466f565b809150509250929050565b80356002811061463157600080fd5b60006020828403121561496c57600080fd5b610b028261494b565b634e487b7160e01b600052602160045260246000fd5b60208101600283106149ad57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156149c857600080fd5b83356149d38161466f565b95602085013595506040909401359392505050565b600080604083850312156149fb57600080fd5b50508035926020909101359150565b60008060408385031215614a1d57600080fd5b8235614a288161466f565b946020939093013593505050565b600060208284031215614a4857600080fd5b5035919050565b600082601f830112614a6057600080fd5b81356020614a706147a783614762565b82815260069290921b84018101918181019086841115614a8f57600080fd5b8286015b848110156147ef5760408189031215614aac5760008081fd5b614ab46146c2565b8135614abf8161466f565b815281850135614ace8161466f565b81860152835291830191604001614a93565b600082601f830112614af157600080fd5b81356020614b016147a783614762565b82815260069290921b84018101918181019086841115614b2057600080fd5b8286015b848110156147ef5760408189031215614b3d5760008081fd5b614b456146c2565b8135614b508161466f565b81528185013585820152835291830191604001614b24565b600060608284031215614b7a57600080fd5b6040516060810181811067ffffffffffffffff82111715614b9d57614b9d6146ac565b6040529050808235614bae8161466f565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614bdf57600080fd5b614be76146eb565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614c2357600080fd5b614c2b6146eb565b9050614c3682614620565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614c6e57600080fd5b614c766146c2565b9050614c818261494b565b8152602082013567ffffffffffffffff811115614c9d57600080fd5b614ca984828501614786565b60208301525092915050565b600060808284031215614cc757600080fd5b614ccf6146c2565b90508135614cdc8161466f565b8152614ceb8360208401614b68565b602082015292915050565b60006080808385031215614d0957600080fd5b614d116146c2565b9150614d1d8484614b68565b8252606083013567ffffffffffffffff811115614d3957600080fd5b8301601f81018513614d4a57600080fd5b80356020614d5a6147a783614762565b82815260079290921b83018101918181019088841115614d7957600080fd5b938201935b83851015614d9f57614d908986614cb5565b82529385019390820190614d7e565b808388015250505050505092915050565b60006101c08284031215614dc357600080fd5b614dcb61470e565b9050614dd78383614b68565b8152614de68360608401614bcd565b6020820152614df88360e08401614c11565b604082015261016082013567ffffffffffffffff80821115614e1957600080fd5b614e2585838601614c5c565b6060840152610180840135915080821115614e3f57600080fd5b614e4b85838601614cf6565b60808401526101a0840135915080821115614e6557600080fd5b50614e7284828501614cf6565b60a08301525092915050565b600060c08284031215614e9057600080fd5b614e9861470e565b9050614ea382614684565b8152614eb160208301614684565b602082015260408201356040820152606082013567ffffffffffffffff80821115614edb57600080fd5b614ee785838601614a4f565b60608401526080840135915080821115614f0057600080fd5b614f0c85838601614ae0565b608084015260a0840135915080821115614f2557600080fd5b50614e7284828501614db0565b60006020808385031215614f4557600080fd5b823567ffffffffffffffff80821115614f5d57600080fd5b81850191506040808388031215614f7357600080fd5b614f7b6146c2565b833583811115614f8a57600080fd5b8401601f81018913614f9b57600080fd5b8035614fa96147a782614762565b81815260069190911b8201870190878101908b831115614fc857600080fd5b928801925b828410156150115785848d031215614fe55760008081fd5b614fed6146c2565b8435614ff88161466f565b8152848a01358a82015282529285019290880190614fcd565b84525050508385013591508282111561502957600080fd5b61503588838601614e7e565b85820152809550505050505092915050565b6000806000806080858703121561505d57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016150b7576150b761508f565b5060010190565b81810381811115610efd57610efd61508f565b600081518084526020808501945080840160005b8381101561510a5781516001600160a01b0316875295820195908201906001016150e5565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015287608086015260e060a0860152829150865180845261010086019250818801935060005b8181101561517d57845184529382019392820192600101615161565b50505083810360c085015261519281866150d1565b9b9a5050505050505050505050565b60005b838110156151bc5781810151838201526020016151a4565b50506000910152565b600081518084526151dd8160208601602086016151a1565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611b8e60408301846151c5565b60006020828403121561522557600080fd5b815167ffffffffffffffff8082111561523d57600080fd5b818401915084601f83011261525157600080fd5b815181811115615263576152636146ac565b615276601f8201601f1916602001614731565b915080825285602082850101111561528d57600080fd5b61529e8160208401602086016151a1565b50949350505050565b6000602082840312156152b957600080fd5b5051919050565b600081518084526020808501945080840160005b8381101561510a578151875295820195908201906001016152d4565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006127a360608301846152c0565b8082028115828204841417610efd57610efd61508f565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261538b60808301846152c0565b9695505050505050565b6000602082840312156153a757600080fd5b8151610b02816147fa565b6000826153c1576153c1615339565b500490565b80820180821115610efd57610efd61508f565b6000602082840312156153eb57600080fd5b8151610b028161466f565b60006001600160a01b038086168352808516602084015250606060408301526127a360608301846151c5565b634e487b7160e01b600052603160045260246000fd5b60008261544757615447615339565b500690565b8181036000831280158383131683831282161715612b6557612b6561508f565b60008261547b5761547b615339565b600160ff1b8214600019841416156154955761549561508f565b500590565b80820182811260008312801582168215821617156154ba576154ba61508f565b505092915050565b80820260008212600160ff1b841416156154de576154de61508f565b8181058314821517610efd57610efd61508f56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a26469706673582212201cabe2f7727cad8c014a4e00fcd2244a7b2955bc725053b65c05b59693c55fba64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102f45760003560e01c806383f3084f11610191578063b187bd26116100e3578063d3feb60211610097578063da70696c11610071578063da70696c146107ec578063e6b5be981461080c578063f9eaee0d1461081f57600080fd5b8063d3feb602146107b3578063d45a76cf146107c6578063d86483e1146107d957600080fd5b8063c267621e116100c8578063c267621e14610776578063c47590e414610787578063d09edf311461079a57600080fd5b8063b187bd2614610750578063b96e422c1461076d57600080fd5b80639eebe7cd11610145578063a33741771161011f578063a3374177146106b0578063a3f3187b146106e3578063a5900c4d146106f657600080fd5b80639eebe7cd1461066b578063a0c3774f1461068a578063a2c456441461069d57600080fd5b80638a521586116101765780638a5215861461063257806390333ba8146106455780639cbaa2021461065857600080fd5b806383f3084f146106175780638456cb591461062a57600080fd5b8063445780991161024a5780635670e2ce116101fe57806363e133bc116101d857806363e133bc1461058f5780636aacaad8146105b85780637125590a1461060457600080fd5b80635670e2ce146105355780635ea54eee14610550578063635600861461057c57600080fd5b80634fd49efd1161022f5780634fd49efd146104d75780635064d83a146104ea57806351a424b1146104fd57600080fd5b806344578099146104775780634a45a3a8146104a257600080fd5b80632384c32d116102ac5780633f4ba83a116102865780633f4ba83a14610442578063423a4b401461044a57806342d4693e1461045d57600080fd5b80632384c32d146104095780632be5f0c71461041c57806330eae5721461042f57600080fd5b8063119a5e96116102dd578063119a5e96146103215780632197238414610352578063221a8c681461036557600080fd5b80630fe105e8146102f957806310188aef1461030e575b600080fd5b61030c610307366004614636565b610832565b005b61030c61031c36600461468f565b61086b565b610329610898565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61030c610360366004614808565b6108cf565b6103d761037336600461468f565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610349565b61030c6104173660046148cc565b61097f565b61030c61042a366004614912565b6109ae565b61030c61043d36600461495a565b6109d9565b61030c610a16565b61030c6104583660046148cc565b610a9d565b600f5461046a9060ff1681565b604051610349919061498b565b61048a61048536600461468f565b610acc565b6040516001600160a01b039091168152602001610349565b6104c97feac7e9d118eedd395d5dcfb39995e466d6cef080fcfa21b768186522db50738881565b604051908152602001610349565b60015461048a906001600160a01b031681565b61030c6104f83660046149b3565b610b09565b61051061050b36600461468f565b610d1f565b604080516001600160a01b039094168452602084019290925290820152606001610349565b60025460035460408051928352602083019190915201610349565b600654600754600854600954604080519485526020850193909352918301526060820152608001610349565b61030c61058a36600461468f565b610d48565b61048a61059d36600461468f565b601f602052600090815260409020546001600160a01b031681565b6103d76040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61030c6106123660046149e8565b610d71565b601c5461048a906001600160a01b031681565b61030c610d9c565b601d5461048a906001600160a01b031681565b61030c6106533660046149b3565b610e0e565b61030c610666366004614a0a565b610e41565b6104c961067936600461468f565b602080526000908152604090205481565b6104c961069836600461468f565b610e6c565b61030c6106ab366004614a36565b610f03565b610510604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61030c6106f1366004614f32565b610f2c565b61051061070436600461468f565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b60045461075d9060ff1681565b6040519015158152602001610349565b6104c9601e5481565b6001546001600160a01b031661048a565b61030c610795366004614a0a565b611052565b60005461048a906201000090046001600160a01b031681565b61030c6107c13660046149b3565b61107d565b6103d76107d436600461468f565b6110aa565b6104c96107e736600461468f565b611119565b6104c96107fa36600461468f565b60216020526000908152604090205481565b61030c61081a366004615047565b611147565b61075d61082d36600461468f565b611176565b6108418460ff168484846111ab565b610858336000356001600160e01b03191683611256565b6108648585858561129d565b5050505050565b61087481611542565b61088b336000356001600160e01b03191683611256565b61089482611556565b5050565b600a5460009081908190819060ff1660028111156108b8576108b8614975565b600b54600c54600e54935093509350935090919293565b6108e5336000356001600160e01b0319166115e0565b8051825114610920576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561097a5761096883828151811061094157610941615079565b602002602001015183838151811061095b5761095b615079565b60200260200101516115fc565b80610972816150a5565b915050610923565b505050565b61098b848484846116a6565b6109a2336000356001600160e01b03191683611256565b6108648585858561170f565b6109b882826117c8565b6109cf336000356001600160e01b03191683611256565b61097a8383611840565b6109f68160018111156109ee576109ee614975565b60ff166118c7565b610a0d336000356001600160e01b03191683611256565b6108948261190e565b610a2c336000356001600160e01b0319166115e0565b60045460ff16610a68576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610aa9848484846116a6565b610ac0336000356001600160e01b03191683611256565b6108648585858561196b565b6001600160a01b038082166000908152601f60205260408120549091168015610af55780610b02565b601d546001600160a01b03165b9392505050565b610b14838383611a2b565b610b2b336000356001600160e01b03191683611256565b82600003610b3f57610b3c84610e6c565b92505b610b4a848484611abd565b6000610b5585610acc565b90506000610b638683611b17565b90506000610b8c610b7c86670de0b6b3a76400006150be565b610b868885611b23565b90611b23565b6001600160a01b0388166000908152602160205260408120549192507fbe1b4c490000000000000000000000000000000000000000000000000000000089868a868686604051908082528060200260200182016040528015610bf8578160200160208202803683370190505b50604080516000815260208101909152610c1b9695949392919060448101615115565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610cb592169086906004016151f1565b6000604051808303816000875af1158015610cd4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cfc9190810190615213565b9050610d138a8a8a89610d0e86611b96565b611ba3565b50505050505050505050565b600080600080610d2e85611bb0565b805160208201516040909201519097919650945092505050565b610d5181611542565b610d68336000356001600160e01b03191683611256565b61089482611c3b565b610d7b8282611c85565b610d92336000356001600160e01b03191683611256565b61097a8383611cdf565b610db2336000356001600160e01b0319166115e0565b60045460ff1615610dd65760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610e19838383611a2b565b610e30336000356001600160e01b03191683611256565b610e3b848484611d62565b50505050565b610e4b8282611db8565b610e62336000356001600160e01b03191683611256565b61097a8383611df5565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd91906152a7565b92915050565b610f0c816118c7565b610f23336000356001600160e01b03191683611256565b61089482611e69565b600054610100900460ff1615808015610f4c5750600054600160ff909116105b80610f665750303b158015610f66575060005460ff166001145b610fdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015611000576000805461ff0019166101001790555b61100982611ec7565b8015610894576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b61105c8282611f39565b611073336000356001600160e01b03191683611256565b61097a8383611f96565b611088838383611a2b565b61109f336000356001600160e01b03191683611256565b610e3b848484612030565b6000806000806000806110bc8761208c565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152602080526040812054801561113d5780610b02565b601e549392505050565b611153848484846111ab565b61116a336000356001600160e01b03191683611256565b610864858585856120c0565b60008061118460108461215b565b90506001600f5460ff16600181111561119f5761119f614975565b14610efd578015610b02565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106111e2576111e2615079565b602002602001018181525050838160018151811061120257611202615079565b602002602001018181525050828160028151811061122257611222615079565b602002602001018181525050818160038151811061124257611242615079565b602002602001018181525050949350505050565b61126183838361217d565b61097a578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610fd4939291906152f0565b60ff841661134e5760008111806112b45750600082115b1561134957826000036112e65760405163bea499cb60e01b815260ff8516600482015260248101849052604401610fd4565b8015806112f257508281115b1561131c57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610fd4565b8160000361134957604051635686bf5960e11b815260ff8516600482015260248101839052604401610fd4565b6114ab565b8260000361137b5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610fd4565b80158061139357506113906224ea0084615322565b81115b156113bd57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610fd4565b816000036113ea57604051635686bf5960e11b815260ff8516600482015260248101839052604401610fd4565b60001960ff85160161142c57601c61140183612213565b111561134957604051635686bf5960e11b815260ff8516600482015260248101839052604401610fd4565b60011960ff851601611474576114418261222a565b61144a83612213565b1461134957604051635686bf5960e11b815260ff8516600482015260248101839052604401610fd4565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610fd4565b8360ff1660028111156114c0576114c0614975565b600a805460ff191660018360028111156114dc576114dc614975565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610efd826001600160a01b03166118c7565b6001600160a01b038116611596576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526108949083908390611256565b6001600160a01b03821661163c576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806116515761164c60108361224d565b61165c565b61165c601083612262565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c8260405161169a911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106116e6576116e6615079565b602002602001018181525050836001600160a01b03168160018151811061120257611202615079565b6001600160a01b03841661174f576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061177390848484612277565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061180557611805615079565b602002602001018181525050816001600160a01b03168160018151811061182e5761182e615079565b60200260200101818152505092915050565b6001600160a01b03821661186757604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f7910161169a565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106118fd576118fd615079565b602002602001018181525050919050565b600f805482919060ff19166001838181111561192c5761192c614975565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a81604051611960919061498b565b60405180910390a150565b6001600160a01b0384166119ab576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206119cf90848484612347565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a1d929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611a6a57611a6a615079565b6020026020010181815250508281600181518110611a8a57611a8a615079565b6020026020010181815250508181600281518110611aaa57611aaa615079565b6020026020010181815250509392505050565b611ac88383836124a6565b6001600160a01b03831660009081526021602052604090205461097a576040517f481aedfc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b0283836125ad565b60008282028315801590611b46575082848281611b4257611b42615339565b0414155b15611b6e57604051637472527d60e11b81526004810185905260248101849052604401610fd4565b8015611b8b57670de0b6b3a7640000600019820104600101611b8e565b60005b949350505050565b6000610efd8260006127ac565b6108648585858585612809565b611bdd604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611c065780611c09565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611cbc57611cbc615079565b6020026020010181815250508160001c8160018151811061182e5761182e615079565b8082148015611ced57508115155b15611d27576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610fd4565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611d6f6016848484612347565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611cbc57611cbc615079565b6001600160a01b038216611e1c57604051636070789160e11b815260040160405180910390fd5b6001600160a01b03821660008181526021602052604090819020839055517fdde3f5548a0794b43c0277eb7dea9ae44b997b39370960b27aa65512328a82f49061169a9084815260200190565b670de0b6b3a7640000811115611e925760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611960565b600054610100900460ff16611f205760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f2d816020015161281d565b611f368161288c565b50565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611f7657611f76615079565b602002602001018181525050818160018151811061182e5761182e615079565b6001600160a01b038216611fbd57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611fe65760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3910161169a565b61203d6012848484612277565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156120b75780610b02565b60169392505050565b670de0b6b3a7640000811115612102576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611534565b6001600160a01b03811660009081526001830160205260408120541515610b02565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906121d290879030908890889060040161534f565b602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8e9190615395565b6000611b8e61222562015180846153b2565b612950565b6000808061223e61222562015180866153b2565b5091509150611b8e82826129ec565b6000610b02836001600160a01b038416612a72565b6000610b02836001600160a01b038416612b6c565b60006001600160a01b03841615801561228e575082155b8015612298575081155b905060006001600160a01b038516158015906122bc57508215806122bc5750838310155b9050811580156122ca575080155b1561231a576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610fd4565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b60006001600160a01b03841615801561235e575082155b8015612368575081155b905060006001600160a01b038516158015906123845750600084115b80156123905750600083115b90508115801561239e575080155b156123ee576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610fd4565b60038601839055600186018490558115612415576000600287018190556004870155612481565b856004015460000361243c576000600287015561243283426153c6565b6004870155612481565b85546001600160a01b03868116911614612481578554600090612468906001600160a01b031687611b17565b600288015490915061247a9082612bbb565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6124b08383612c18565b6001600160a01b0383166124d757604051636070789160e11b815260040160405180910390fd5b81600003612511576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061251c84610acc565b6001600160a01b03160361255c576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061256784611119565b905080821115610e3b576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610fd4565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262791906153d9565b90506001600160a01b038116612678576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610fd4565b6000612682612c5e565b9050805160001461271357816001600160a01b031663355efdd96126a587612cde565b6126ae87612cde565b846040518463ffffffff1660e01b81526004016126cd939291906153f6565b602060405180830381865afa1580156126ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270e91906152a7565b6127a3565b816001600160a01b031663ac41865a61272b87612cde565b61273487612cde565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a391906152a7565b95945050505050565b60006127b98260206153c6565b835110156128005782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610fd4918491600401918252602082015260400190565b50016020015190565b6128138282612d12565b6108648585612d98565b600054610100900460ff166128765760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b6128838160a00151612dc0565b611f3681612e76565b600054610100900460ff166128e55760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b60005b8151518110156108945761293e8260000151828151811061290b5761290b615079565b6020026020010151600001518360000151838151811061292d5761292d615079565b602002602001015160200151611df5565b80612948816150a5565b9150506128e8565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816129ad576129ad615339565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806129fd5750816003145b80612a085750816005145b80612a135750816007145b80612a1e5750816008145b80612a29575081600a145b80612a34575081600c145b15612a415750601f610efd565b81600214612a515750601e610efd565b612a5a83612fd1565b612a6557601c612a68565b601d5b60ff169392505050565b60008181526001830160205260408120548015612b5b576000612a966001836150be565b8554909150600090612aaa906001906150be565b9050818114612b0f576000866000018281548110612aca57612aca615079565b9060005260206000200154905080876000018481548110612aed57612aed615079565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b2057612b20615422565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610efd565b6000915050610efd565b5092915050565b6000818152600183016020526040812054612bb357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610efd565b506000610efd565b60008282028315801590612bde575082848281612bda57612bda615339565b0414155b15612c0657604051637472527d60e11b81526004810185905260248101849052604401610fd4565b670de0b6b3a764000090049392505050565b612c22828261300d565b612c2c8282613017565b612c36828261303b565b612c408282613127565b612c4a8282613316565b612c548282613360565b610894828261344d565b60606000612c6a613563565b905036811115612c8857505060408051600081526020810190915290565b8067ffffffffffffffff811115612ca157612ca16146ac565b6040519080825280601f01601f191660200182016040528015612ccb576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612d0a5781610efd565b610efd61357e565b60035415610894576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612d7c57600080fd5b505af1158015612d90573d6000803e3d6000fd5b505050505050565b612da2828261360a565b612dac82826136ac565b612db682826136ce565b6108948282613918565b600054610100900460ff16612e195760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b8051612e2490613945565b612e2c613a15565b612e398160200151613a78565b612e468160400151613ada565b612e538160600151613b3c565b612e608160800151613b9e565b612e6d8160a00151613c00565b611f3681613c62565b600054610100900460ff16612ecf5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b8051612eda90611556565b612ee78160200151611c3b565b612ef48160400151611e69565b60005b816060015151811015612f6257612f5082606001518281518110612f1d57612f1d615079565b60200260200101516000015183606001518381518110612f3f57612f3f615079565b602002602001015160200151611840565b80612f5a816150a5565b915050612ef7565b5060005b81608001515181101561089457612fbf82608001518281518110612f8c57612f8c615079565b60200260200101516000015183608001518381518110612fae57612fae615079565b602002602001015160200151611f96565b80612fc9816150a5565b915050612f66565b6000612fde600483615438565b158015612ff45750612ff1606483615438565b15155b80610efd575061300661019083615438565b1592915050565b6108948282613cbb565b60045460ff16156108945760405163181e462560e31b815260040160405180910390fd5b5a60055560408051608081018252600654808252600754602083015260085492820192909252600954606082015290600090158061307a575081513a11155b9050806130bf5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610fd4565b602082015115610e3b5760006130d5483a6150be565b602084015190915081111580612d905760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610fd4918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156131635760405163013ce60b60e01b815242600482015260248101839052604401610fd4565b600084600281111561317757613177614975565b03613230578260000361318c57505050505050565b806000036131a65761319e83426153c6565b600d55612d90565b60006131b283426150be565b905060006131c085836153b2565b905060006131ce8683615322565b6131d890846150be565b9050838111156132045760405163013ce60b60e01b815242600482015260248101869052604401610fd4565b856132108360016153c6565b61321a9190615322565b61322490866153c6565b600d5550612d90915050565b814210158015613249575061324581836153c6565b4211155b156132585761319e8284613d0e565b6000600185600281111561326e5761326e614975565b146132815761327c4261222a565b61328a565b61328a83612213565b905060006132988483613da6565b9050804210156132c45760405163013ce60b60e01b815242600482015260248101829052604401610fd4565b60006132d084836153c6565b905042811080156132fd5760405163013ce60b60e01b815242600482015260248101839052604401610fd4565b6133078388613d0e565b600d5550505050505050505050565b61331f82611176565b610894576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610fd4565b600061336b83611bb0565b80519091506001600160a01b031661338257505050565b6000836001600160a01b031682600001516001600160a01b0316146133be576133b96133b2858460000151611b17565b8490612bbb565b6133c0565b825b90506000826020015182101580156133e85750604083015115806133e8575082604001518211155b905080610864578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610fd4565b60006134588361208c565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506134a757505050565b6000836001600160a01b031682600001516001600160a01b0316146134dc576134d76133b2858460000151611b17565b6134de565b825b90506000826080015142106134f45760006134fa565b82604001515b61350490836153c6565b9050826020015181111561086457825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610fd4565b600060243610156135745750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa1580156135e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360591906153d9565b905090565b60006136158361208c565b80549091506001600160a01b031661362c57505050565b80546000906001600160a01b0385811691161461366257815461365d906133b29086906001600160a01b0316611b17565b613664565b825b90508160040154421061368d5760006002830155600382015461368790426153c6565b60048301555b808260020160008282546136a191906153c6565b909155505050505050565b600d546000036136ba575050565b6136c5600d54613dc5565b50506000600d55565b60055460000361370a576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a60055461374391906150be565b905060006137513a83615322565b9050600083604001516000148061376c575083604001518211155b9050806137b6578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610fd4929190918252602082015260400190565b60006005556060840151158015906137ce5750600085115b15612d905760006138a1306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383a91906153d9565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389b91906153d9565b88611b17565b905060006138af8483611b23565b905060006138bd8289613dfa565b9050866060015181111561390d5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610fd4918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff1661399e5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b613a0c81600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0791906153d9565b613ec3565b611f3681613f25565b600054610100900460ff16613a6e5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b613a76613fb3565b565b600054610100900460ff16613ad15760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f368161400c565b600054610100900460ff16613b335760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f3681614081565b600054610100900460ff16613b955760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f36816140f6565b600054610100900460ff16613bf75760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f36816141a4565b600054610100900460ff16613c595760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f3681614282565b600054610100900460ff16611f365760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b600254156108945760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612d62565b600080600080613d1d86614360565b919450925090506000613d3086846153c6565b90506000613d3f600c83615438565b90506000613d4e600c846153b2565b613d5890876153c6565b905060006002600a5460ff166002811115613d7557613d75614975565b14613d805784613d8a565b613d8a82846129ec565b9050613d988a83858461437f565b9a9950505050505050505050565b6000806000613db442614360565b50915091506127a38583838761437f565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611960565b600081600003613e36576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003613e4657506000610efd565b670de0b6b3a764000083810290848281613e6257613e62615339565b0414613ea4576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610fd4565b826001820381613eb657613eb6615339565b0460010191505092915050565b600054610100900460ff16613f1c5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f36816143a7565b600054610100900460ff16613f7e5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b8051600180546001600160a01b0319166001600160a01b0390921691909117905560208101516040820151611f369190611cdf565b600054610100900460ff16613a765760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b600054610100900460ff166140655760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f3681600001518260200151836040015184606001516120c0565b600054610100900460ff166140da5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b611f36816000015182602001518360400151846060015161129d565b600054610100900460ff1661414f5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b805161415a9061190e565b60005b816020015151811015610894576141928260200151828151811061418357614183615079565b602002602001015160016115fc565b8061419c816150a5565b91505061415d565b600054610100900460ff166141fd5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b8051805160208201516040830151614216929190612030565b60005b82602001515181101561097a5760008360200151828151811061423e5761423e615079565b6020026020010151905060008160200151905061426d826000015182600001518360200151846040015161170f565b5050808061427a906150a5565b915050614219565b600054610100900460ff166142db5760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b80518051602082015160408301516142f4929190611d62565b60005b82602001515181101561097a5760008360200151828151811061431c5761431c615079565b6020026020010151905060008160200151905061434b826000015182600001518360200151846040015161196b565b50508080614358906150a5565b9150506142f7565b60008080614372620151808504612950565b9196909550909350915050565b60006127a384848461439089614440565b6143998a61445e565b6143a28b61447a565b614487565b600054610100900460ff166144005760405162461bcd60e51b815260206004820152602b60248201526000805160206154f383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610fd4565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000806144506201518084615438565b9050610b02610e10826153b2565b60008061446d610e1084615438565b9050610b02603c826153b2565b6000610efd603c83615438565b600081614495603c85615322565b6144a1610e1087615322565b620151806144b08b8b8b6144e3565b6144ba9190615322565b6144c491906153c6565b6144ce91906153c6565b6144d891906153c6565b979650505050505050565b60006107b28410156144f457600080fd5b838383600062253d8c60046064600c61450e600e8861544c565b614518919061546c565b6145248861132461549a565b61452e919061549a565b614538919061546c565b6145439060036154c2565b61454d919061546c565b600c8061455b600e8861544c565b614565919061546c565b61457090600c6154c2565b61457b60028861544c565b614585919061544c565b6145919061016f6154c2565b61459b919061546c565b6004600c6145aa600e8961544c565b6145b4919061546c565b6145c0896112c061549a565b6145ca919061549a565b6145d6906105b56154c2565b6145e0919061546c565b6145ec617d4b8761544c565b6145f6919061549a565b614600919061549a565b61460a919061544c565b614614919061544c565b98975050505050505050565b803560ff8116811461463157600080fd5b919050565b6000806000806080858703121561464c57600080fd5b61465585614620565b966020860135965060408601359560600135945092505050565b6001600160a01b0381168114611f3657600080fd5b80356146318161466f565b6000602082840312156146a157600080fd5b8135610b028161466f565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156146e5576146e56146ac565b60405290565b6040516080810167ffffffffffffffff811182821017156146e5576146e56146ac565b60405160c0810167ffffffffffffffff811182821017156146e5576146e56146ac565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475a5761475a6146ac565b604052919050565b600067ffffffffffffffff82111561477c5761477c6146ac565b5060051b60200190565b600082601f83011261479757600080fd5b813560206147ac6147a783614762565b614731565b82815260059290921b840181019181810190868411156147cb57600080fd5b8286015b848110156147ef5780356147e28161466f565b83529183019183016147cf565b509695505050505050565b8015158114611f3657600080fd5b6000806040838503121561481b57600080fd5b823567ffffffffffffffff8082111561483357600080fd5b61483f86838701614786565b935060209150818501358181111561485657600080fd5b85019050601f8101861361486957600080fd5b80356148776147a782614762565b81815260059190911b8201830190838101908883111561489657600080fd5b928401925b828410156148bd5783356148ae816147fa565b8252928401929084019061489b565b80955050505050509250929050565b600080600080608085870312156148e257600080fd5b84356148ed8161466f565b935060208501356148fd8161466f565b93969395505050506040820135916060013590565b6000806040838503121561492557600080fd5b82356149308161466f565b915060208301356149408161466f565b809150509250929050565b80356002811061463157600080fd5b60006020828403121561496c57600080fd5b610b028261494b565b634e487b7160e01b600052602160045260246000fd5b60208101600283106149ad57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156149c857600080fd5b83356149d38161466f565b95602085013595506040909401359392505050565b600080604083850312156149fb57600080fd5b50508035926020909101359150565b60008060408385031215614a1d57600080fd5b8235614a288161466f565b946020939093013593505050565b600060208284031215614a4857600080fd5b5035919050565b600082601f830112614a6057600080fd5b81356020614a706147a783614762565b82815260069290921b84018101918181019086841115614a8f57600080fd5b8286015b848110156147ef5760408189031215614aac5760008081fd5b614ab46146c2565b8135614abf8161466f565b815281850135614ace8161466f565b81860152835291830191604001614a93565b600082601f830112614af157600080fd5b81356020614b016147a783614762565b82815260069290921b84018101918181019086841115614b2057600080fd5b8286015b848110156147ef5760408189031215614b3d5760008081fd5b614b456146c2565b8135614b508161466f565b81528185013585820152835291830191604001614b24565b600060608284031215614b7a57600080fd5b6040516060810181811067ffffffffffffffff82111715614b9d57614b9d6146ac565b6040529050808235614bae8161466f565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614bdf57600080fd5b614be76146eb565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614c2357600080fd5b614c2b6146eb565b9050614c3682614620565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614c6e57600080fd5b614c766146c2565b9050614c818261494b565b8152602082013567ffffffffffffffff811115614c9d57600080fd5b614ca984828501614786565b60208301525092915050565b600060808284031215614cc757600080fd5b614ccf6146c2565b90508135614cdc8161466f565b8152614ceb8360208401614b68565b602082015292915050565b60006080808385031215614d0957600080fd5b614d116146c2565b9150614d1d8484614b68565b8252606083013567ffffffffffffffff811115614d3957600080fd5b8301601f81018513614d4a57600080fd5b80356020614d5a6147a783614762565b82815260079290921b83018101918181019088841115614d7957600080fd5b938201935b83851015614d9f57614d908986614cb5565b82529385019390820190614d7e565b808388015250505050505092915050565b60006101c08284031215614dc357600080fd5b614dcb61470e565b9050614dd78383614b68565b8152614de68360608401614bcd565b6020820152614df88360e08401614c11565b604082015261016082013567ffffffffffffffff80821115614e1957600080fd5b614e2585838601614c5c565b6060840152610180840135915080821115614e3f57600080fd5b614e4b85838601614cf6565b60808401526101a0840135915080821115614e6557600080fd5b50614e7284828501614cf6565b60a08301525092915050565b600060c08284031215614e9057600080fd5b614e9861470e565b9050614ea382614684565b8152614eb160208301614684565b602082015260408201356040820152606082013567ffffffffffffffff80821115614edb57600080fd5b614ee785838601614a4f565b60608401526080840135915080821115614f0057600080fd5b614f0c85838601614ae0565b608084015260a0840135915080821115614f2557600080fd5b50614e7284828501614db0565b60006020808385031215614f4557600080fd5b823567ffffffffffffffff80821115614f5d57600080fd5b81850191506040808388031215614f7357600080fd5b614f7b6146c2565b833583811115614f8a57600080fd5b8401601f81018913614f9b57600080fd5b8035614fa96147a782614762565b81815260069190911b8201870190878101908b831115614fc857600080fd5b928801925b828410156150115785848d031215614fe55760008081fd5b614fed6146c2565b8435614ff88161466f565b8152848a01358a82015282529285019290880190614fcd565b84525050508385013591508282111561502957600080fd5b61503588838601614e7e565b85820152809550505050505092915050565b6000806000806080858703121561505d57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016150b7576150b761508f565b5060010190565b81810381811115610efd57610efd61508f565b600081518084526020808501945080840160005b8381101561510a5781516001600160a01b0316875295820195908201906001016150e5565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015287608086015260e060a0860152829150865180845261010086019250818801935060005b8181101561517d57845184529382019392820192600101615161565b50505083810360c085015261519281866150d1565b9b9a5050505050505050505050565b60005b838110156151bc5781810151838201526020016151a4565b50506000910152565b600081518084526151dd8160208601602086016151a1565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611b8e60408301846151c5565b60006020828403121561522557600080fd5b815167ffffffffffffffff8082111561523d57600080fd5b818401915084601f83011261525157600080fd5b815181811115615263576152636146ac565b615276601f8201601f1916602001614731565b915080825285602082850101111561528d57600080fd5b61529e8160208401602086016151a1565b50949350505050565b6000602082840312156152b957600080fd5b5051919050565b600081518084526020808501945080840160005b8381101561510a578151875295820195908201906001016152d4565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006127a360608301846152c0565b8082028115828204841417610efd57610efd61508f565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261538b60808301846152c0565b9695505050505050565b6000602082840312156153a757600080fd5b8151610b02816147fa565b6000826153c1576153c1615339565b500490565b80820180821115610efd57610efd61508f565b6000602082840312156153eb57600080fd5b8151610b028161466f565b60006001600160a01b038086168352808516602084015250606060408301526127a360608301846151c5565b634e487b7160e01b600052603160045260246000fd5b60008261544757615447615339565b500690565b8181036000831280158383131683831282161715612b6557612b6561508f565b60008261547b5761547b615339565b600160ff1b8214600019841416156154955761549561508f565b500590565b80820182811260008312801582168215821617156154ba576154ba61508f565b505092915050565b80820260008212600160ff1b841416156154de576154de61508f565b8181058314821517610efd57610efd61508f56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a26469706673582212201cabe2f7727cad8c014a4e00fcd2244a7b2955bc725053b65c05b59693c55fba64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
