{
  "_format": "hh-sol-artifact-1",
  "contractName": "HopBridger",
  "sourceName": "contracts/bridge/HopBridger.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": "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": [
        {
          "internalType": "uint256",
          "name": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "TaskBridgeCurrentChainId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskDestinationChainNotSet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxFee",
          "type": "uint256"
        }
      ],
      "name": "TaskFeeAboveMax",
      "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": [],
      "name": "TaskInvalidMaxFee",
      "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": "TaskMissingHopEntrypoint",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "TaskNextConnectorNotZero",
      "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": [],
      "name": "TaskRecipientZero",
      "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": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskTokenThresholdNotMet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCost",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTxCostLimitPctAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCostPct",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitPctExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskUnpaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "volume",
          "type": "uint256"
        }
      ],
      "name": "TaskVolumeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskVolumeLimitTokenZero",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "BalanceConnectorsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "connector",
          "type": "address"
        }
      ],
      "name": "ConnectorSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "CustomDestinationChainSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CustomMaxFeeSet",
      "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": "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": true,
          "internalType": "uint256",
          "name": "defaultDestinationChain",
          "type": "uint256"
        }
      ],
      "name": "DefaultDestinationChainSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxFeeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxSlippageSet",
      "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": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxDeadline",
          "type": "uint256"
        }
      ],
      "name": "MaxDeadlineSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "RecipientSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "RelayerSet",
      "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": true,
          "internalType": "address",
          "name": "entrypoint",
          "type": "address"
        }
      ],
      "name": "TokenHopEntrypointSet",
      "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": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee",
          "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": "customDestinationChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customMaxFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "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": "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": "defaultDestinationChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getDestinationChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "getMaxFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "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": "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": [
            {
              "internalType": "address",
              "name": "relayer",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "maxDeadline",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "entrypoint",
                  "type": "address"
                }
              ],
              "internalType": "struct HopBridger.TokenHopEntrypoint[]",
              "name": "tokenHopEntrypoints",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "connector",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "destinationChain",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "maxSlippage",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.MaxFee",
                  "name": "maxFee",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "destinationChain",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.CustomDestinationChain[]",
                  "name": "customDestinationChains",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "maxSlippage",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.CustomMaxSlippage[]",
                  "name": "customMaxSlippages",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256",
                          "name": "amount",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct BaseBridgeTask.MaxFee",
                      "name": "maxFee",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.CustomMaxFee[]",
                  "name": "customMaxFees",
                  "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 BaseBridgeTask.BaseBridgeConfig",
              "name": "baseBridgeConfig",
              "type": "tuple"
            }
          ],
          "internalType": "struct HopBridger.HopBridgeConfig",
          "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": "maxDeadline",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "recipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "relayer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "setCustomDestinationChain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "setCustomMaxFee",
      "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": "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": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "setDefaultDestinationChain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxSlippage",
      "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": "uint256",
          "name": "newMaxDeadline",
          "type": "uint256"
        }
      ],
      "name": "setMaxDeadline",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newRecipient",
          "type": "address"
        }
      ],
      "name": "setRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newRelayer",
          "type": "address"
        }
      ],
      "name": "setRelayer",
      "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": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "entrypoint",
          "type": "address"
        }
      ],
      "name": "setTokenHopEntrypoint",
      "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": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tokenHopEntrypoint",
      "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": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b615d2e80620000f36000396000f3fe608060405234801561001057600080fd5b506004361061036d5760003560e01c806383f3084f116101d3578063c267621e11610104578063d45a76cf116100a2578063e6b5be981161007c578063e6b5be981461095d578063eaf7615214610970578063eb19ca8b14610999578063f9eaee0d146109c257600080fd5b8063d45a76cf1461092e578063d86483e114610941578063de4e42011461095457600080fd5b8063cc02f8f1116100de578063cc02f8f1146108cf578063ce11b418146108e2578063d09edf3114610902578063d3feb6021461091b57600080fd5b8063c267621e14610898578063c31163be146108a9578063c47590e4146108bc57600080fd5b8063a337417711610171578063b187bd261161014b578063b187bd261461084c578063b96e422c14610869578063bb3084f614610872578063bf5d9eab1461088557600080fd5b8063a3374177146107b6578063a5900c4d146107e9578063b07addf61461084357600080fd5b806390333ba8116101ad57806390333ba81461075d5780639eebe7cd14610770578063a0c3774f14610790578063a2c45644146107a357600080fd5b806383f3084f1461072f5780638406c079146107425780638456cb591461075557600080fd5b8063468534c2116102ad57806360f5dfda1161024b5780636aacaad8116102255780636aacaad8146106735780637125590a146106bf5780637196f8e9146106d25780637a2f57d0146106e557600080fd5b806360f5dfda1461061b5780636548e9bc1461064d57806366d003ac1461066057600080fd5b806351a424b11161028757806351a424b1146105895780635670e2ce146105c15780635c9e2d8c146105dc5780635ea54eee146105ef57600080fd5b8063468534c2146105165780634a45a3a8146105295780634fd49efd1461055e57600080fd5b8063221a8c681161031a5780633bbed4a0116102f45780633bbed4a0146104ce5780633f4ba83a146104e1578063423a4b40146104e957806342d4693e146104fc57600080fd5b8063221a8c68146104045780632384c32d146104a857806330eae572146104bb57600080fd5b806310188aef1161034b57806310188aef146103ad578063119a5e96146103c057806321972384146103f157600080fd5b806303870a4c146103725780630d499509146103875780630fe105e81461039a575b600080fd5b610385610380366004614d2d565b6109d5565b005b610385610395366004614d68565b610c0c565b6103856103a8366004614d92565b610c39565b6103856103bb366004614db1565b610c72565b6103c8610c9b565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6103856103ff366004614f4e565b610cd2565b610476610412366004614db1565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016103e8565b6103856104b6366004615012565b610d82565b6103856104c9366004615067565b610db1565b6103856104dc366004614db1565b610dee565b610385610e17565b6103856104f7366004615012565b610e9e565b600f546105099060ff1681565b6040516103e89190615098565b6103856105243660046150c0565b610ecd565b6105507f8b285640c3dd2131bc585f7c897961687bba1403b1402e932745a4a085b2fed181565b6040519081526020016103e8565b600154610571906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b61059c610597366004614db1565b610f00565b604080516001600160a01b0390941684526020840192909252908201526060016103e8565b600254600354604080519283526020830191909152016103e8565b6103856105ea366004615101565b610f29565b6006546007546008546009546040805194855260208501939093529183015260608201526080016103e8565b61062e610629366004614db1565b610f54565b604080516001600160a01b0390931683526020830191909152016103e8565b61038561065b366004614db1565b610f75565b601d54610571906001600160a01b031681565b6104766040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6103856106cd36600461513a565b610f9e565b6103856106e036600461515c565b610fc9565b61062e6106f3366004614db1565b6001600160a01b039081166000908152602460209081526040918290208251808401909352805490931680835260019093015491018190529091565b601c54610571906001600160a01b031681565b602554610571906001600160a01b031681565b610385610ff4565b61038561076b366004615188565b611066565b61055061077e366004614db1565b60236020526000908152604090205481565b61055061079e366004614db1565b611093565b6103856107b1366004614d68565b61112a565b61059c604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61059c6107f7366004614db1565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b610550601e5481565b6004546108599060ff1681565b60405190151581526020016103e8565b610550601f5481565b610550610880366004614db1565b611153565b610385610893366004614d68565b611183565b6001546001600160a01b0316610571565b6103856108b736600461515c565b6111ac565b6103856108ca36600461515c565b6111d7565b6103856108dd3660046157ba565b611202565b6105506108f0366004614db1565b60226020526000908152604090205481565b600054610571906201000090046001600160a01b031681565b610385610929366004615188565b611328565b61047661093c366004614db1565b611355565b61055061094f366004614db1565b6113c4565b61055060265481565b61038561096b3660046158f2565b6113f3565b61057161097e366004614db1565b6027602052600090815260409020546001600160a01b031681565b60408051808201909152602080546001600160a01b03168083526021549190920181905261062e565b6108596109d0366004614db1565b611422565b6109e184848484611457565b6109f8336000356001600160e01b0319168361150b565b83600003610a0c57610a0985611093565b93505b610a1885858585611552565b6000610a2386611153565b90506000610a4c610a3c86670de0b6b3a764000061593a565b610a46868961593a565b906115af565b905060007f40a0855100000000000000000000000000000000000000000000000000000000610a7a89611153565b601d546001600160a01b03808c166000908152602760205260409020548c928c928892918116911660018a14610abc57602654610ab7904261594d565b610abf565b60005b60255460405160248101989098526001600160a01b0396871660448901526064880195909552608487019390935290841660a4860152831660c485015260e48401521661010482015261012481018790526101440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506001600160a01b0390811692631cff79cd92610bae92919091169085906004016159b0565b6000604051808303816000875af1158015610bcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf591908101906159d2565b50610c0288888888611622565b5050505050505050565b610c158161162e565b610c2c336000356001600160e01b0319168361150b565b610c3582611675565b5050565b610c488460ff168484846116b1565b610c5f336000356001600160e01b0319168361150b565b610c6b858585856116e8565b5050505050565b610c7b8161198d565b610c92336000356001600160e01b0319168361150b565b610c35826119a1565b600a5460009081908190819060ff166002811115610cbb57610cbb615082565b600b54600c54600e54935093509350935090919293565b610ce8336000356001600160e01b031916611a2b565b8051825114610d23576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610d7d57610d6b838281518110610d4457610d44615a66565b6020026020010151838381518110610d5e57610d5e615a66565b6020026020010151611a47565b80610d7581615a7c565b915050610d26565b505050565b610d8e84848484611af1565b610da5336000356001600160e01b0319168361150b565b610c6b85858585611b5a565b610dce816001811115610dc657610dc6615082565b60ff1661162e565b610de5336000356001600160e01b0319168361150b565b610c3582611c13565b610df78161198d565b610e0e336000356001600160e01b0319168361150b565b610c3582611c65565b610e2d336000356001600160e01b031916611a2b565b60045460ff16610e69576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610eaa84848484611af1565b610ec1336000356001600160e01b0319168361150b565b610c6b85858585611cef565b610ed8838383611daf565b610eef336000356001600160e01b0319168361150b565b610efa848484611e4a565b50505050565b600080600080610f0f85611ee6565b805160208201516040909201519097919650945092505050565b610f338282611f71565b610f4a336000356001600160e01b0319168361150b565b610d7d8383611fe9565b6000806000610f6284612067565b8051602090910151909590945092505050565b610f7e8161198d565b610f95336000356001600160e01b0319168361150b565b610c35826120e1565b610fa8828261212b565b610fbf336000356001600160e01b0319168361150b565b610d7d8383612185565b610fd382826121ca565b610fea336000356001600160e01b0319168361150b565b610d7d8383612227565b61100a336000356001600160e01b031916611a2b565b60045460ff161561102e5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b61107183838361226e565b611088336000356001600160e01b0319168361150b565b610efa8484846122cd565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015611100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111249190615a95565b92915050565b6111338161162e565b61114a336000356001600160e01b0319168361150b565b610c3582612323565b6001600160a01b0381166000908152602260205260408120548015611178578061117c565b601e545b9392505050565b61118c8161162e565b6111a3336000356001600160e01b0319168361150b565b610c3582612381565b6111b682826121ca565b6111cd336000356001600160e01b0319168361150b565b610d7d83836123d7565b6111e182826121ca565b6111f8336000356001600160e01b0319168361150b565b610d7d8383612468565b600054610100900460ff16158080156112225750600054600160ff909116105b8061123c5750303b15801561123c575060005460ff166001145b6112b35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff1916600117905580156112d6576000805461ff0019166101001790555b6112df82612505565b8015610c35576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b61133383838361226e565b61134a336000356001600160e01b0319168361150b565b610efa848484612577565b600080600080600080611367876125d3565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b03811660009081526023602052604081205480156113e9578061117c565b601f549392505050565b6113ff848484846116b1565b611416336000356001600160e01b0319168361150b565b610c6b85858585612607565b6000806114306010846126a2565b90506001600f5460ff16600181111561144b5761144b615082565b1461112457801561117c565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061149757611497615a66565b60200260200101818152505083816001815181106114b7576114b7615a66565b60200260200101818152505082816002815181106114d7576114d7615a66565b60200260200101818152505081816003815181106114f7576114f7615a66565b602002602001018181525050949350505050565b6115168383836126c4565b610d7d578282826040517f960c80da0000000000000000000000000000000000000000000000000000000081526004016112aa93929190615ae9565b61155e8484848461275a565b6001600160a01b0384811660009081526027602052604090205416610efa576040517f38f099ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082820283158015906115d25750828482816115ce576115ce615b1b565b0414155b156115fa57604051637472527d60e11b815260048101859052602481018490526044016112aa565b801561161757670de0b6b3a764000060001982010460010161161a565b60005b949350505050565b610efa8484848461292a565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061166457611664615a66565b602002602001018181525050919050565b60268190556040518181527fd0b80440836c062fdcdfec27699f3beff37e4907f6ac9b1755b344ffe5c7d134906020015b60405180910390a150565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061149757611497615a66565b60ff84166117995760008111806116ff5750600082115b1561179457826000036117315760405163bea499cb60e01b815260ff85166004820152602481018490526044016112aa565b80158061173d57508281115b1561176757604051639e12fccf60e01b815260ff85166004820152602481018290526044016112aa565b8160000361179457604051635686bf5960e11b815260ff85166004820152602481018390526044016112aa565b6118f6565b826000036117c65760405163bea499cb60e01b815260ff85166004820152602481018490526044016112aa565b8015806117de57506117db6224ea0084615b31565b81115b1561180857604051639e12fccf60e01b815260ff85166004820152602481018290526044016112aa565b8160000361183557604051635686bf5960e11b815260ff85166004820152602481018390526044016112aa565b60001960ff85160161187757601c61184c83612934565b111561179457604051635686bf5960e11b815260ff85166004820152602481018390526044016112aa565b60011960ff8516016118bf5761188c8261294b565b61189583612934565b1461179457604051635686bf5960e11b815260ff85166004820152602481018390526044016112aa565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff851660048201526024016112aa565b8360ff16600281111561190b5761190b615082565b600a805460ff1916600183600281111561192757611927615082565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060611124826001600160a01b031661162e565b6001600160a01b0381166119e1576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b604080516000815260208101909152610c35908390839061150b565b6001600160a01b038216611a87576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80611a9c57611a9760108361296e565b611aa7565b611aa7601083612983565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611ae5911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b031681600081518110611b3157611b31615a66565b602002602001018181525050836001600160a01b0316816001815181106114b7576114b7615a66565b6001600160a01b038416611b9a576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601560205260409020611bbe90848484612998565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b600f805482919060ff191660018381811115611c3157611c31615082565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516116a69190615098565b6001600160a01b038116611ca5576040517f2586ae9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f9d900d71c28433348acb1bec780a061608a96b149370abce77fd54ba2d47940190600090a250565b6001600160a01b038416611d2f576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611d5390848484612a68565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611da1929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611dee57611dee615a66565b602002602001018181525050826001600160a01b031681600181518110611e1757611e17615a66565b6020026020010181815250508181600281518110611e3757611e37615a66565b6020026020010181815250509392505050565b6001600160a01b038316611e7157604051636070789160e11b815260040160405180910390fd5b6001600160a01b0383166000908152602460205260409020611e94908383612bc7565b816001600160a01b0316836001600160a01b03167fc4fdf80c1c19c6c15745294372240e0b830511ef069d2fe082f76e6ac663cd7683604051611ed991815260200190565b60405180910390a3505050565b611f13604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611f3c5780611f3f565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611fae57611fae615a66565b602002602001018181525050816001600160a01b031681600181518110611fd757611fd7615a66565b60200260200101818152505092915050565b6001600160a01b03821661201057604051636070789160e11b815260040160405180910390fd5b6001600160a01b0382811660008181526027602052604080822080546001600160a01b0319169486169485179055517fc2722ad1d93cc42d478d92b35651377fc9b58f64a26dd20a9cd7311b160d16999190a35050565b604080518082018252600080825260208083018290526001600160a01b03858116835260248252918490208451808601909552805490921680855260019092015490840152909190156120ba578061117c565b60408051808201909152602080546001600160a01b03168252602154908201529392505050565b602580546001600160a01b0319166001600160a01b0383169081179091556040517fb7041340e0c2a075059bf0488a71c767724be15dae8e737f8460007325e8d85790600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c8160008151811061216257612162615a66565b6020026020010181815250508160001c81600181518110611fd757611fd7615a66565b80156121c0576040517f9842f26f000000000000000000000000000000000000000000000000000000008152600481018290526024016112aa565b610c358282612c3a565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061220757612207615a66565b6020026020010181815250508181600181518110611fd757611fd7615a66565b61223360208383612bc7565b816001600160a01b03167f145629ab5475088f72def3b209864cc49abc02a2f230e887ad1f61629bc5dbaf82604051611ae591815260200190565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b0316816000815181106122ad576122ad615a66565b6020026020010181815250508281600181518110611e1757611e17615a66565b6122da6016848484612a68565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a764000081111561234c5760405163c2b0b62d60e01b815260040160405180910390fd5b601f8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf8906020016116a6565b4681036123a45760405163499ff75560e01b8152600481018290526024016112aa565b601e81905560405181907f972b12d97bdf2afd537325c7e5db7c15141bb5a7e7f5a65b76f3c2b4f651991090600090a250565b6001600160a01b0382166123fe57604051636070789160e11b815260040160405180910390fd5b4681036124215760405163499ff75560e01b8152600481018290526024016112aa565b6001600160a01b038216600081815260226020526040808220849055518392917ffef363cd40fa337ea6f51a9c42c6dbb8225c1c93c2dea4384bf58ca8a257aa9691a35050565b6001600160a01b03821661248f57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156124b85760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b03821660008181526023602052604090819020839055517f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed390611ae59084815260200190565b600054610100900460ff1661255e5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b61256b8160600151612cbd565b61257481612d2d565b50565b6125846012848484612998565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156125fe578061117c565b60169392505050565b670de0b6b3a7640000811115612649576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d6919060800161197f565b6001600160a01b0381166000908152600183016020526040812054151561117c565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590612719908790309088908890600401615b48565b602060405180830381865afa158015612736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a9190615b8e565b6127648484612df5565b6001600160a01b03841661278b57604051636070789160e11b815260040160405180910390fd5b826000036127c5576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127ce84611153565b600003612807576040517fa9b1d14100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612812856113c4565b905080831115612858576040517fb56ce44900000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016112aa565b816000036128665750610efa565b600061287186612067565b80519091506001600160a01b03166128ac5760208101516040516303b27ef760e01b81526112aa918591600401918252602082015260400190565b6000866001600160a01b031682600001516001600160a01b0316146128e8576128e36128dc888460000151612e3b565b8590612e47565b6128ea565b835b905081602001518111156129215760208201516040516303b27ef760e01b81526112aa918391600401918252602082015260400190565b50505050505050565b610efa8484612ea4565b600061161a6129466201518084615bab565b612ecc565b6000808061295f6129466201518086615bab565b509150915061161a8282612f68565b600061117c836001600160a01b038416612fee565b600061117c836001600160a01b0384166130e8565b60006001600160a01b0384161580156129af575082155b80156129b9575081155b905060006001600160a01b038516158015906129dd57508215806129dd5750838310155b9050811580156129eb575080155b15612a3b576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016112aa565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b60006001600160a01b038416158015612a7f575082155b8015612a89575081155b905060006001600160a01b03851615801590612aa55750600084115b8015612ab15750600083115b905081158015612abf575080155b15612b0f576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016112aa565b60038601839055600186018490558115612b36576000600287018190556004870155612ba2565b8560040154600003612b5d5760006002870155612b53834261594d565b6004870155612ba2565b85546001600160a01b03868116911614612ba2578554600090612b89906001600160a01b031687612e3b565b6002880154909150612b9b9082612e47565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6001600160a01b038216158015612bdd57508015155b15612c14576040517f3d2584f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82546001600160a01b0319166001600160a01b0392909216919091178255600190910155565b8082148015612c4857508115155b15612c82576040517f0fb49edb000000000000000000000000000000000000000000000000000000008152600481018390526024016112aa565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600054610100900460ff16612d165760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b612d24816101000151613137565b612574816131ed565b600054610100900460ff16612d865760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b8051612d91906120e1565b612d9e8160200151611675565b60005b816040015151811015610c3557600082604001518281518110612dc657612dc6615a66565b60200260200101519050612de281600001518260200151611fe9565b5080612ded81615a7c565b915050612da1565b612dff82826133bc565b612e0982826133c6565b612e1382826133ea565b612e1d82826134de565b612e2782826136cd565b612e318282613717565b610c358282613804565b600061117c838361391a565b60008282028315801590612e6a575082848281612e6657612e66615b1b565b0414155b15612e9257604051637472527d60e11b815260048101859052602481018490526044016112aa565b670de0b6b3a764000090049392505050565b612eae8282613b19565b612eb88282613bbb565b612ec28282613bdd565b610c358282613e27565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281612f2957612f29615b1b565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480612f795750816003145b80612f845750816005145b80612f8f5750816007145b80612f9a5750816008145b80612fa5575081600a145b80612fb0575081600c145b15612fbd5750601f611124565b81600214612fcd5750601e611124565b612fd683613e54565b612fe157601c612fe4565b601d5b60ff169392505050565b600081815260018301602052604081205480156130d757600061301260018361593a565b85549091506000906130269060019061593a565b905081811461308b57600086600001828154811061304657613046615a66565b906000526020600020015490508087600001848154811061306957613069615a66565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061309c5761309c615bbf565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611124565b6000915050611124565b5092915050565b600081815260018301602052604081205461312f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611124565b506000611124565b600054610100900460ff166131905760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b805161319b90613e90565b6131a3613f60565b6131b08160200151613fc3565b6131bd8160400151614025565b6131ca8160600151614087565b6131d781608001516140e9565b6131e48160a0015161414b565b612574816141ad565b600054610100900460ff166132465760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b8051613251906119a1565b61325e8160200151611c65565b61326b8160400151612381565b6132788160600151612323565b60808101518051602082015161328e9190612227565b60005b8260a00151518110156132e55760008360a0015182815181106132b6576132b6615a66565b602002602001015190506132d2816000015182602001516123d7565b50806132dd81615a7c565b915050613291565b5060005b8260c0015151811015613354576133428360c00151828151811061330f5761330f615a66565b6020026020010151600001518460c00151838151811061333157613331615a66565b602002602001015160200151612468565b8061334c81615a7c565b9150506132e9565b5060005b8260e0015151811015610d7d5760008360e00151828151811061337d5761337d615a66565b602002602001015190506000816020015190506133a7826000015182600001518360200151611e4a565b505080806133b490615a7c565b915050613358565b610c358282614206565b60045460ff1615610c355760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580613429575081513a11155b90508061346e5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a600482015260248101919091526044016112aa565b602082015115610efa576000613484483a61593a565b6020840151909150811115806134d65760208401516040517f56e5387f0000000000000000000000000000000000000000000000000000000081526112aa918491600401918252602082015260400190565b505050505050565b600a54600b54600c54600e5460ff909316924282111561351a5760405163013ce60b60e01b8152426004820152602481018390526044016112aa565b600084600281111561352e5761352e615082565b036135e7578260000361354357505050505050565b8060000361355d57613555834261594d565b600d556134d6565b6000613569834261593a565b905060006135778583615bab565b905060006135858683615b31565b61358f908461593a565b9050838111156135bb5760405163013ce60b60e01b8152426004820152602481018690526044016112aa565b856135c783600161594d565b6135d19190615b31565b6135db908661594d565b600d55506134d6915050565b81421015801561360057506135fc818361594d565b4211155b1561360f57613555828461429b565b6000600185600281111561362557613625615082565b14613638576136334261294b565b613641565b61364183612934565b9050600061364f8483614333565b90508042101561367b5760405163013ce60b60e01b8152426004820152602481018290526044016112aa565b6000613687848361594d565b905042811080156136b45760405163013ce60b60e01b8152426004820152602481018390526044016112aa565b6136be838861429b565b600d5550505050505050505050565b6136d682611422565b610c35576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016112aa565b600061372283611ee6565b80519091506001600160a01b031661373957505050565b6000836001600160a01b031682600001516001600160a01b03161461377557613770613769858460000151612e3b565b8490612e47565b613777565b825b905060008260200151821015801561379f57506040830151158061379f575082604001518211155b905080610c6b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b03909316600484015260248301859052604483019190915260648201526084016112aa565b600061380f836125d3565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061385e57505050565b6000836001600160a01b031682600001516001600160a01b0316146138935761388e613769858460000151612e3b565b613895565b825b90506000826080015142106138ab5760006138b1565b82604001515b6138bb908361594d565b90508260200151811115610c6b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152604481018290526064016112aa565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139949190615bd5565b90506001600160a01b0381166139e5576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024016112aa565b60006139ef614352565b90508051600014613a8057816001600160a01b031663355efdd9613a12876143d2565b613a1b876143d2565b846040518463ffffffff1660e01b8152600401613a3a93929190615bf2565b602060405180830381865afa158015613a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7b9190615a95565b613b10565b816001600160a01b031663ac41865a613a98876143d2565b613aa1876143d2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b109190615a95565b95945050505050565b6000613b24836125d3565b80549091506001600160a01b0316613b3b57505050565b80546000906001600160a01b03858116911614613b71578154613b6c906137699086906001600160a01b0316612e3b565b613b73565b825b905081600401544210613b9c57600060028301556003820154613b96904261594d565b60048301555b80826002016000828254613bb0919061594d565b909155505050505050565b600d54600003613bc9575050565b613bd4600d54614406565b50506000600d55565b600554600003613c19576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613c52919061593a565b90506000613c603a83615b31565b90506000836040015160001480613c7b575083604001518211155b905080613cc5578184604001516040517faf258ef20000000000000000000000000000000000000000000000000000000081526004016112aa929190918252602082015260400190565b6000600555606084015115801590613cdd5750600085115b156134d6576000613db0306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d499190615bd5565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613daa9190615bd5565b88612e3b565b90506000613dbe84836115af565b90506000613dcc828961443b565b90508660600151811115613e1c5760608701516040517f0297747f0000000000000000000000000000000000000000000000000000000081526112aa918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b6000613e61600483615c1e565b158015613e775750613e74606483615c1e565b15155b806111245750613e8961019083615c1e565b1592915050565b600054610100900460ff16613ee95760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b613f5781600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f529190615bd5565b614504565b61257481614566565b600054610100900460ff16613fb95760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b613fc16145f4565b565b600054610100900460ff1661401c5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b6125748161464d565b600054610100900460ff1661407e5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b612574816146c2565b600054610100900460ff166140e05760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b61257481614737565b600054610100900460ff166141425760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b612574816147e5565b600054610100900460ff166141a45760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b612574816148c3565b600054610100900460ff166125745760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b60025415610c35576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401600060405180830381600087803b15801561428757600080fd5b505af11580156134d6573d6000803e3d6000fd5b6000806000806142aa866149a1565b9194509250905060006142bd868461594d565b905060006142cc600c83615c1e565b905060006142db600c84615bab565b6142e5908761594d565b905060006002600a5460ff16600281111561430257614302615082565b1461430d5784614317565b6143178284612f68565b90506143258a8385846149c0565b9a9950505050505050505050565b6000806000614341426149a1565b5091509150613b10858383876149c0565b6060600061435e6149e8565b90503681111561437c57505060408051600081526020810190915290565b8067ffffffffffffffff81111561439557614395614dce565b6040519080825280601f01601f1916602001820160405280156143bf576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316146143fe5781611124565b611124614a03565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad064906020016116a6565b600081600003614477576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361448757506000611124565b670de0b6b3a7640000838102908482816144a3576144a3615b1b565b04146144e5576040517fea7b49e600000000000000000000000000000000000000000000000000000000815260048101859052602481018290526044016112aa565b8260018203816144f7576144f7615b1b565b0460010191505092915050565b600054610100900460ff1661455d5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b61257481614a8f565b600054610100900460ff166145bf5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516125749190612185565b600054610100900460ff16613fc15760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b600054610100900460ff166146a65760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b6125748160000151826020015183604001518460600151612607565b600054610100900460ff1661471b5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b61257481600001518260200151836040015184606001516116e8565b600054610100900460ff166147905760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b805161479b90611c13565b60005b816020015151811015610c35576147d3826020015182815181106147c4576147c4615a66565b60200260200101516001611a47565b806147dd81615a7c565b91505061479e565b600054610100900460ff1661483e5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b8051805160208201516040830151614857929190612577565b60005b826020015151811015610d7d5760008360200151828151811061487f5761487f615a66565b602002602001015190506000816020015190506148ae8260000151826000015183602001518460400151611b5a565b505080806148bb90615a7c565b91505061485a565b600054610100900460ff1661491c5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b80518051602082015160408301516149359291906122cd565b60005b826020015151811015610d7d5760008360200151828151811061495d5761495d615a66565b6020026020010151905060008160200151905061498c8260000151826000015183602001518460400151611cef565b5050808061499990615a7c565b915050614938565b600080806149b3620151808504612ecc565b9196909550909350915050565b6000613b108484846149d189614b28565b6149da8a614b46565b6149e38b614b62565b614b6f565b600060243610156149f95750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a8a9190615bd5565b905090565b600054610100900460ff16614ae85760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600080614b386201518084615c1e565b905061117c610e1082615bab565b600080614b55610e1084615c1e565b905061117c603c82615bab565b6000611124603c83615c1e565b600081614b7d603c85615b31565b614b89610e1087615b31565b62015180614b988b8b8b614bcb565b614ba29190615b31565b614bac919061594d565b614bb6919061594d565b614bc0919061594d565b979650505050505050565b60006107b2841015614bdc57600080fd5b838383600062253d8c60046064600c614bf6600e88615c32565b614c009190615c52565b614c0c88611324615c80565b614c169190615c80565b614c209190615c52565b614c2b906003615ca8565b614c359190615c52565b600c80614c43600e88615c32565b614c4d9190615c52565b614c5890600c615ca8565b614c63600288615c32565b614c6d9190615c32565b614c799061016f615ca8565b614c839190615c52565b6004600c614c92600e89615c32565b614c9c9190615c52565b614ca8896112c0615c80565b614cb29190615c80565b614cbe906105b5615ca8565b614cc89190615c52565b614cd4617d4b87615c32565b614cde9190615c80565b614ce89190615c80565b614cf29190615c32565b614cfc9190615c32565b98975050505050505050565b6001600160a01b038116811461257457600080fd5b8035614d2881614d08565b919050565b60008060008060808587031215614d4357600080fd5b8435614d4e81614d08565b966020860135965060408601359560600135945092505050565b600060208284031215614d7a57600080fd5b5035919050565b803560ff81168114614d2857600080fd5b60008060008060808587031215614da857600080fd5b614d4e85614d81565b600060208284031215614dc357600080fd5b813561117c81614d08565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614e0757614e07614dce565b60405290565b6040516080810167ffffffffffffffff81118282101715614e0757614e07614dce565b60405160c0810167ffffffffffffffff81118282101715614e0757614e07614dce565b604051610120810167ffffffffffffffff81118282101715614e0757614e07614dce565b604051601f8201601f1916810167ffffffffffffffff81118282101715614ea057614ea0614dce565b604052919050565b600067ffffffffffffffff821115614ec257614ec2614dce565b5060051b60200190565b600082601f830112614edd57600080fd5b81356020614ef2614eed83614ea8565b614e77565b82815260059290921b84018101918181019086841115614f1157600080fd5b8286015b84811015614f35578035614f2881614d08565b8352918301918301614f15565b509695505050505050565b801515811461257457600080fd5b60008060408385031215614f6157600080fd5b823567ffffffffffffffff80821115614f7957600080fd5b614f8586838701614ecc565b9350602091508185013581811115614f9c57600080fd5b85019050601f81018613614faf57600080fd5b8035614fbd614eed82614ea8565b81815260059190911b82018301908381019088831115614fdc57600080fd5b928401925b82841015615003578335614ff481614f40565b82529284019290840190614fe1565b80955050505050509250929050565b6000806000806080858703121561502857600080fd5b843561503381614d08565b9350602085013561504381614d08565b93969395505050506040820135916060013590565b803560028110614d2857600080fd5b60006020828403121561507957600080fd5b61117c82615058565b634e487b7160e01b600052602160045260246000fd5b60208101600283106150ba57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156150d557600080fd5b83356150e081614d08565b925060208401356150f081614d08565b929592945050506040919091013590565b6000806040838503121561511457600080fd5b823561511f81614d08565b9150602083013561512f81614d08565b809150509250929050565b6000806040838503121561514d57600080fd5b50508035926020909101359150565b6000806040838503121561516f57600080fd5b823561517a81614d08565b946020939093013593505050565b60008060006060848603121561519d57600080fd5b83356151a881614d08565b95602085013595506040909401359392505050565b6000604082840312156151cf57600080fd5b6151d7614de4565b905081356151e481614d08565b808252506020820135602082015292915050565b600082601f83011261520957600080fd5b81356020615219614eed83614ea8565b82815260069290921b8401810191818101908684111561523857600080fd5b8286015b84811015614f355761524e88826151bd565b83529183019160400161523c565b600082601f83011261526d57600080fd5b8135602061527d614eed83614ea8565b8281526060928302850182019282820191908785111561529c57600080fd5b8387015b858110156152ea5781818a0312156152b85760008081fd5b6152c0614de4565b81356152cb81614d08565b81526152d98a8388016151bd565b8187015284529284019281016152a0565b5090979650505050505050565b60006060828403121561530957600080fd5b6040516060810181811067ffffffffffffffff8211171561532c5761532c614dce565b604052905080823561533d81614d08565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561536e57600080fd5b615376614e0d565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156153b257600080fd5b6153ba614e0d565b90506153c582614d81565b815260208201356020820152604082013560408201526060820135606082015292915050565b6000604082840312156153fd57600080fd5b615405614de4565b905061541082615058565b8152602082013567ffffffffffffffff81111561542c57600080fd5b61543884828501614ecc565b60208301525092915050565b60006080828403121561545657600080fd5b61545e614de4565b9050813561546b81614d08565b815261547a83602084016152f7565b602082015292915050565b6000608080838503121561549857600080fd5b6154a0614de4565b91506154ac84846152f7565b8252606083013567ffffffffffffffff8111156154c857600080fd5b8301601f810185136154d957600080fd5b803560206154e9614eed83614ea8565b82815260079290921b8301810191818101908884111561550857600080fd5b938201935b8385101561552e5761551f8986615444565b8252938501939082019061550d565b808388015250505050505092915050565b6000608080838503121561555257600080fd5b61555a614de4565b915061556684846152f7565b8252606083013567ffffffffffffffff81111561558257600080fd5b8301601f8101851361559357600080fd5b803560206155a3614eed83614ea8565b82815260079290921b830181019181810190888411156155c257600080fd5b938201935b8385101561552e576155d98986615444565b825293850193908201906155c7565b60006101c082840312156155fb57600080fd5b615603614e30565b905061560f83836152f7565b815261561e836060840161535c565b60208201526156308360e084016153a0565b604082015261016082013567ffffffffffffffff8082111561565157600080fd5b61565d858386016153eb565b606084015261018084013591508082111561567757600080fd5b61568385838601615485565b60808401526101a084013591508082111561569d57600080fd5b506156aa8482850161553f565b60a08301525092915050565b600061014082840312156156c957600080fd5b6156d1614e53565b90506156dc82614d1d565b81526156ea60208301614d1d565b6020820152604082013560408201526060820135606082015261571083608084016151bd565b608082015260c082013567ffffffffffffffff8082111561573057600080fd5b61573c858386016151f8565b60a084015260e084013591508082111561575557600080fd5b615761858386016151f8565b60c08401526101009150818401358181111561577c57600080fd5b6157888682870161525c565b60e085015250610120840135818111156157a157600080fd5b6157ad868287016155e8565b8385015250505092915050565b600060208083850312156157cd57600080fd5b823567ffffffffffffffff808211156157e557600080fd5b90840190608082870312156157f957600080fd5b615801614e0d565b823561580c81614d08565b815282840135848201526040808401358381111561582957600080fd5b8401601f8101891361583a57600080fd5b8035615848614eed82614ea8565b81815260069190911b8201870190878101908b83111561586757600080fd5b928801925b828410156158b95784848d0312156158845760008081fd5b61588c614de4565b843561589781614d08565b8152848a01356158a681614d08565b818b01528252928401929088019061586c565b8085870152505050505060608301359350818411156158d757600080fd5b6158e3878585016156b6565b60608201529695505050505050565b6000806000806080858703121561590857600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561112457611124615924565b8082018082111561112457611124615924565b60005b8381101561597b578181015183820152602001615963565b50506000910152565b6000815180845261599c816020860160208601615960565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820152600061161a6040830184615984565b6000602082840312156159e457600080fd5b815167ffffffffffffffff808211156159fc57600080fd5b818401915084601f830112615a1057600080fd5b815181811115615a2257615a22614dce565b615a35601f8201601f1916602001614e77565b9150808252856020828501011115615a4c57600080fd5b615a5d816020840160208601615960565b50949350505050565b634e487b7160e01b600052603260045260246000fd5b600060018201615a8e57615a8e615924565b5060010190565b600060208284031215615aa757600080fd5b5051919050565b600081518084526020808501945080840160005b83811015615ade57815187529582019590820190600101615ac2565b509495945050505050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000613b106060830184615aae565b634e487b7160e01b600052601260045260246000fd5b808202811582820484141761112457611124615924565b60006001600160a01b0380871683528086166020840152506001600160e01b03198416604083015260806060830152615b846080830184615aae565b9695505050505050565b600060208284031215615ba057600080fd5b815161117c81614f40565b600082615bba57615bba615b1b565b500490565b634e487b7160e01b600052603160045260246000fd5b600060208284031215615be757600080fd5b815161117c81614d08565b60006001600160a01b03808616835280851660208401525060606040830152613b106060830184615984565b600082615c2d57615c2d615b1b565b500690565b81810360008312801583831316838312821617156130e1576130e1615924565b600082615c6157615c61615b1b565b600160ff1b821460001984141615615c7b57615c7b615924565b500590565b8082018281126000831280158216821582161715615ca057615ca0615924565b505092915050565b80820260008212600160ff1b84141615615cc457615cc4615924565b81810583148215176111245761112461592456fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a264697066735822122091be53befea06f9c348e74c180a400cfe71bf1c20e693cd18f727285f6e7dfc764736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061036d5760003560e01c806383f3084f116101d3578063c267621e11610104578063d45a76cf116100a2578063e6b5be981161007c578063e6b5be981461095d578063eaf7615214610970578063eb19ca8b14610999578063f9eaee0d146109c257600080fd5b8063d45a76cf1461092e578063d86483e114610941578063de4e42011461095457600080fd5b8063cc02f8f1116100de578063cc02f8f1146108cf578063ce11b418146108e2578063d09edf3114610902578063d3feb6021461091b57600080fd5b8063c267621e14610898578063c31163be146108a9578063c47590e4146108bc57600080fd5b8063a337417711610171578063b187bd261161014b578063b187bd261461084c578063b96e422c14610869578063bb3084f614610872578063bf5d9eab1461088557600080fd5b8063a3374177146107b6578063a5900c4d146107e9578063b07addf61461084357600080fd5b806390333ba8116101ad57806390333ba81461075d5780639eebe7cd14610770578063a0c3774f14610790578063a2c45644146107a357600080fd5b806383f3084f1461072f5780638406c079146107425780638456cb591461075557600080fd5b8063468534c2116102ad57806360f5dfda1161024b5780636aacaad8116102255780636aacaad8146106735780637125590a146106bf5780637196f8e9146106d25780637a2f57d0146106e557600080fd5b806360f5dfda1461061b5780636548e9bc1461064d57806366d003ac1461066057600080fd5b806351a424b11161028757806351a424b1146105895780635670e2ce146105c15780635c9e2d8c146105dc5780635ea54eee146105ef57600080fd5b8063468534c2146105165780634a45a3a8146105295780634fd49efd1461055e57600080fd5b8063221a8c681161031a5780633bbed4a0116102f45780633bbed4a0146104ce5780633f4ba83a146104e1578063423a4b40146104e957806342d4693e146104fc57600080fd5b8063221a8c68146104045780632384c32d146104a857806330eae572146104bb57600080fd5b806310188aef1161034b57806310188aef146103ad578063119a5e96146103c057806321972384146103f157600080fd5b806303870a4c146103725780630d499509146103875780630fe105e81461039a575b600080fd5b610385610380366004614d2d565b6109d5565b005b610385610395366004614d68565b610c0c565b6103856103a8366004614d92565b610c39565b6103856103bb366004614db1565b610c72565b6103c8610c9b565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6103856103ff366004614f4e565b610cd2565b610476610412366004614db1565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016103e8565b6103856104b6366004615012565b610d82565b6103856104c9366004615067565b610db1565b6103856104dc366004614db1565b610dee565b610385610e17565b6103856104f7366004615012565b610e9e565b600f546105099060ff1681565b6040516103e89190615098565b6103856105243660046150c0565b610ecd565b6105507f8b285640c3dd2131bc585f7c897961687bba1403b1402e932745a4a085b2fed181565b6040519081526020016103e8565b600154610571906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b61059c610597366004614db1565b610f00565b604080516001600160a01b0390941684526020840192909252908201526060016103e8565b600254600354604080519283526020830191909152016103e8565b6103856105ea366004615101565b610f29565b6006546007546008546009546040805194855260208501939093529183015260608201526080016103e8565b61062e610629366004614db1565b610f54565b604080516001600160a01b0390931683526020830191909152016103e8565b61038561065b366004614db1565b610f75565b601d54610571906001600160a01b031681565b6104766040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6103856106cd36600461513a565b610f9e565b6103856106e036600461515c565b610fc9565b61062e6106f3366004614db1565b6001600160a01b039081166000908152602460209081526040918290208251808401909352805490931680835260019093015491018190529091565b601c54610571906001600160a01b031681565b602554610571906001600160a01b031681565b610385610ff4565b61038561076b366004615188565b611066565b61055061077e366004614db1565b60236020526000908152604090205481565b61055061079e366004614db1565b611093565b6103856107b1366004614d68565b61112a565b61059c604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61059c6107f7366004614db1565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b610550601e5481565b6004546108599060ff1681565b60405190151581526020016103e8565b610550601f5481565b610550610880366004614db1565b611153565b610385610893366004614d68565b611183565b6001546001600160a01b0316610571565b6103856108b736600461515c565b6111ac565b6103856108ca36600461515c565b6111d7565b6103856108dd3660046157ba565b611202565b6105506108f0366004614db1565b60226020526000908152604090205481565b600054610571906201000090046001600160a01b031681565b610385610929366004615188565b611328565b61047661093c366004614db1565b611355565b61055061094f366004614db1565b6113c4565b61055060265481565b61038561096b3660046158f2565b6113f3565b61057161097e366004614db1565b6027602052600090815260409020546001600160a01b031681565b60408051808201909152602080546001600160a01b03168083526021549190920181905261062e565b6108596109d0366004614db1565b611422565b6109e184848484611457565b6109f8336000356001600160e01b0319168361150b565b83600003610a0c57610a0985611093565b93505b610a1885858585611552565b6000610a2386611153565b90506000610a4c610a3c86670de0b6b3a764000061593a565b610a46868961593a565b906115af565b905060007f40a0855100000000000000000000000000000000000000000000000000000000610a7a89611153565b601d546001600160a01b03808c166000908152602760205260409020548c928c928892918116911660018a14610abc57602654610ab7904261594d565b610abf565b60005b60255460405160248101989098526001600160a01b0396871660448901526064880195909552608487019390935290841660a4860152831660c485015260e48401521661010482015261012481018790526101440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506001600160a01b0390811692631cff79cd92610bae92919091169085906004016159b0565b6000604051808303816000875af1158015610bcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf591908101906159d2565b50610c0288888888611622565b5050505050505050565b610c158161162e565b610c2c336000356001600160e01b0319168361150b565b610c3582611675565b5050565b610c488460ff168484846116b1565b610c5f336000356001600160e01b0319168361150b565b610c6b858585856116e8565b5050505050565b610c7b8161198d565b610c92336000356001600160e01b0319168361150b565b610c35826119a1565b600a5460009081908190819060ff166002811115610cbb57610cbb615082565b600b54600c54600e54935093509350935090919293565b610ce8336000356001600160e01b031916611a2b565b8051825114610d23576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610d7d57610d6b838281518110610d4457610d44615a66565b6020026020010151838381518110610d5e57610d5e615a66565b6020026020010151611a47565b80610d7581615a7c565b915050610d26565b505050565b610d8e84848484611af1565b610da5336000356001600160e01b0319168361150b565b610c6b85858585611b5a565b610dce816001811115610dc657610dc6615082565b60ff1661162e565b610de5336000356001600160e01b0319168361150b565b610c3582611c13565b610df78161198d565b610e0e336000356001600160e01b0319168361150b565b610c3582611c65565b610e2d336000356001600160e01b031916611a2b565b60045460ff16610e69576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610eaa84848484611af1565b610ec1336000356001600160e01b0319168361150b565b610c6b85858585611cef565b610ed8838383611daf565b610eef336000356001600160e01b0319168361150b565b610efa848484611e4a565b50505050565b600080600080610f0f85611ee6565b805160208201516040909201519097919650945092505050565b610f338282611f71565b610f4a336000356001600160e01b0319168361150b565b610d7d8383611fe9565b6000806000610f6284612067565b8051602090910151909590945092505050565b610f7e8161198d565b610f95336000356001600160e01b0319168361150b565b610c35826120e1565b610fa8828261212b565b610fbf336000356001600160e01b0319168361150b565b610d7d8383612185565b610fd382826121ca565b610fea336000356001600160e01b0319168361150b565b610d7d8383612227565b61100a336000356001600160e01b031916611a2b565b60045460ff161561102e5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b61107183838361226e565b611088336000356001600160e01b0319168361150b565b610efa8484846122cd565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015611100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111249190615a95565b92915050565b6111338161162e565b61114a336000356001600160e01b0319168361150b565b610c3582612323565b6001600160a01b0381166000908152602260205260408120548015611178578061117c565b601e545b9392505050565b61118c8161162e565b6111a3336000356001600160e01b0319168361150b565b610c3582612381565b6111b682826121ca565b6111cd336000356001600160e01b0319168361150b565b610d7d83836123d7565b6111e182826121ca565b6111f8336000356001600160e01b0319168361150b565b610d7d8383612468565b600054610100900460ff16158080156112225750600054600160ff909116105b8061123c5750303b15801561123c575060005460ff166001145b6112b35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff1916600117905580156112d6576000805461ff0019166101001790555b6112df82612505565b8015610c35576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b61133383838361226e565b61134a336000356001600160e01b0319168361150b565b610efa848484612577565b600080600080600080611367876125d3565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b03811660009081526023602052604081205480156113e9578061117c565b601f549392505050565b6113ff848484846116b1565b611416336000356001600160e01b0319168361150b565b610c6b85858585612607565b6000806114306010846126a2565b90506001600f5460ff16600181111561144b5761144b615082565b1461112457801561117c565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061149757611497615a66565b60200260200101818152505083816001815181106114b7576114b7615a66565b60200260200101818152505082816002815181106114d7576114d7615a66565b60200260200101818152505081816003815181106114f7576114f7615a66565b602002602001018181525050949350505050565b6115168383836126c4565b610d7d578282826040517f960c80da0000000000000000000000000000000000000000000000000000000081526004016112aa93929190615ae9565b61155e8484848461275a565b6001600160a01b0384811660009081526027602052604090205416610efa576040517f38f099ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082820283158015906115d25750828482816115ce576115ce615b1b565b0414155b156115fa57604051637472527d60e11b815260048101859052602481018490526044016112aa565b801561161757670de0b6b3a764000060001982010460010161161a565b60005b949350505050565b610efa8484848461292a565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061166457611664615a66565b602002602001018181525050919050565b60268190556040518181527fd0b80440836c062fdcdfec27699f3beff37e4907f6ac9b1755b344ffe5c7d134906020015b60405180910390a150565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061149757611497615a66565b60ff84166117995760008111806116ff5750600082115b1561179457826000036117315760405163bea499cb60e01b815260ff85166004820152602481018490526044016112aa565b80158061173d57508281115b1561176757604051639e12fccf60e01b815260ff85166004820152602481018290526044016112aa565b8160000361179457604051635686bf5960e11b815260ff85166004820152602481018390526044016112aa565b6118f6565b826000036117c65760405163bea499cb60e01b815260ff85166004820152602481018490526044016112aa565b8015806117de57506117db6224ea0084615b31565b81115b1561180857604051639e12fccf60e01b815260ff85166004820152602481018290526044016112aa565b8160000361183557604051635686bf5960e11b815260ff85166004820152602481018390526044016112aa565b60001960ff85160161187757601c61184c83612934565b111561179457604051635686bf5960e11b815260ff85166004820152602481018390526044016112aa565b60011960ff8516016118bf5761188c8261294b565b61189583612934565b1461179457604051635686bf5960e11b815260ff85166004820152602481018390526044016112aa565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff851660048201526024016112aa565b8360ff16600281111561190b5761190b615082565b600a805460ff1916600183600281111561192757611927615082565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060611124826001600160a01b031661162e565b6001600160a01b0381166119e1576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b604080516000815260208101909152610c35908390839061150b565b6001600160a01b038216611a87576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80611a9c57611a9760108361296e565b611aa7565b611aa7601083612983565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611ae5911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b031681600081518110611b3157611b31615a66565b602002602001018181525050836001600160a01b0316816001815181106114b7576114b7615a66565b6001600160a01b038416611b9a576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601560205260409020611bbe90848484612998565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b600f805482919060ff191660018381811115611c3157611c31615082565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516116a69190615098565b6001600160a01b038116611ca5576040517f2586ae9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f9d900d71c28433348acb1bec780a061608a96b149370abce77fd54ba2d47940190600090a250565b6001600160a01b038416611d2f576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611d5390848484612a68565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611da1929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611dee57611dee615a66565b602002602001018181525050826001600160a01b031681600181518110611e1757611e17615a66565b6020026020010181815250508181600281518110611e3757611e37615a66565b6020026020010181815250509392505050565b6001600160a01b038316611e7157604051636070789160e11b815260040160405180910390fd5b6001600160a01b0383166000908152602460205260409020611e94908383612bc7565b816001600160a01b0316836001600160a01b03167fc4fdf80c1c19c6c15745294372240e0b830511ef069d2fe082f76e6ac663cd7683604051611ed991815260200190565b60405180910390a3505050565b611f13604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611f3c5780611f3f565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611fae57611fae615a66565b602002602001018181525050816001600160a01b031681600181518110611fd757611fd7615a66565b60200260200101818152505092915050565b6001600160a01b03821661201057604051636070789160e11b815260040160405180910390fd5b6001600160a01b0382811660008181526027602052604080822080546001600160a01b0319169486169485179055517fc2722ad1d93cc42d478d92b35651377fc9b58f64a26dd20a9cd7311b160d16999190a35050565b604080518082018252600080825260208083018290526001600160a01b03858116835260248252918490208451808601909552805490921680855260019092015490840152909190156120ba578061117c565b60408051808201909152602080546001600160a01b03168252602154908201529392505050565b602580546001600160a01b0319166001600160a01b0383169081179091556040517fb7041340e0c2a075059bf0488a71c767724be15dae8e737f8460007325e8d85790600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c8160008151811061216257612162615a66565b6020026020010181815250508160001c81600181518110611fd757611fd7615a66565b80156121c0576040517f9842f26f000000000000000000000000000000000000000000000000000000008152600481018290526024016112aa565b610c358282612c3a565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061220757612207615a66565b6020026020010181815250508181600181518110611fd757611fd7615a66565b61223360208383612bc7565b816001600160a01b03167f145629ab5475088f72def3b209864cc49abc02a2f230e887ad1f61629bc5dbaf82604051611ae591815260200190565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b0316816000815181106122ad576122ad615a66565b6020026020010181815250508281600181518110611e1757611e17615a66565b6122da6016848484612a68565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a764000081111561234c5760405163c2b0b62d60e01b815260040160405180910390fd5b601f8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf8906020016116a6565b4681036123a45760405163499ff75560e01b8152600481018290526024016112aa565b601e81905560405181907f972b12d97bdf2afd537325c7e5db7c15141bb5a7e7f5a65b76f3c2b4f651991090600090a250565b6001600160a01b0382166123fe57604051636070789160e11b815260040160405180910390fd5b4681036124215760405163499ff75560e01b8152600481018290526024016112aa565b6001600160a01b038216600081815260226020526040808220849055518392917ffef363cd40fa337ea6f51a9c42c6dbb8225c1c93c2dea4384bf58ca8a257aa9691a35050565b6001600160a01b03821661248f57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156124b85760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b03821660008181526023602052604090819020839055517f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed390611ae59084815260200190565b600054610100900460ff1661255e5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b61256b8160600151612cbd565b61257481612d2d565b50565b6125846012848484612998565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156125fe578061117c565b60169392505050565b670de0b6b3a7640000811115612649576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d6919060800161197f565b6001600160a01b0381166000908152600183016020526040812054151561117c565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590612719908790309088908890600401615b48565b602060405180830381865afa158015612736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a9190615b8e565b6127648484612df5565b6001600160a01b03841661278b57604051636070789160e11b815260040160405180910390fd5b826000036127c5576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127ce84611153565b600003612807576040517fa9b1d14100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612812856113c4565b905080831115612858576040517fb56ce44900000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016112aa565b816000036128665750610efa565b600061287186612067565b80519091506001600160a01b03166128ac5760208101516040516303b27ef760e01b81526112aa918591600401918252602082015260400190565b6000866001600160a01b031682600001516001600160a01b0316146128e8576128e36128dc888460000151612e3b565b8590612e47565b6128ea565b835b905081602001518111156129215760208201516040516303b27ef760e01b81526112aa918391600401918252602082015260400190565b50505050505050565b610efa8484612ea4565b600061161a6129466201518084615bab565b612ecc565b6000808061295f6129466201518086615bab565b509150915061161a8282612f68565b600061117c836001600160a01b038416612fee565b600061117c836001600160a01b0384166130e8565b60006001600160a01b0384161580156129af575082155b80156129b9575081155b905060006001600160a01b038516158015906129dd57508215806129dd5750838310155b9050811580156129eb575080155b15612a3b576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016112aa565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b60006001600160a01b038416158015612a7f575082155b8015612a89575081155b905060006001600160a01b03851615801590612aa55750600084115b8015612ab15750600083115b905081158015612abf575080155b15612b0f576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016112aa565b60038601839055600186018490558115612b36576000600287018190556004870155612ba2565b8560040154600003612b5d5760006002870155612b53834261594d565b6004870155612ba2565b85546001600160a01b03868116911614612ba2578554600090612b89906001600160a01b031687612e3b565b6002880154909150612b9b9082612e47565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6001600160a01b038216158015612bdd57508015155b15612c14576040517f3d2584f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82546001600160a01b0319166001600160a01b0392909216919091178255600190910155565b8082148015612c4857508115155b15612c82576040517f0fb49edb000000000000000000000000000000000000000000000000000000008152600481018390526024016112aa565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600054610100900460ff16612d165760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b612d24816101000151613137565b612574816131ed565b600054610100900460ff16612d865760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b8051612d91906120e1565b612d9e8160200151611675565b60005b816040015151811015610c3557600082604001518281518110612dc657612dc6615a66565b60200260200101519050612de281600001518260200151611fe9565b5080612ded81615a7c565b915050612da1565b612dff82826133bc565b612e0982826133c6565b612e1382826133ea565b612e1d82826134de565b612e2782826136cd565b612e318282613717565b610c358282613804565b600061117c838361391a565b60008282028315801590612e6a575082848281612e6657612e66615b1b565b0414155b15612e9257604051637472527d60e11b815260048101859052602481018490526044016112aa565b670de0b6b3a764000090049392505050565b612eae8282613b19565b612eb88282613bbb565b612ec28282613bdd565b610c358282613e27565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281612f2957612f29615b1b565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480612f795750816003145b80612f845750816005145b80612f8f5750816007145b80612f9a5750816008145b80612fa5575081600a145b80612fb0575081600c145b15612fbd5750601f611124565b81600214612fcd5750601e611124565b612fd683613e54565b612fe157601c612fe4565b601d5b60ff169392505050565b600081815260018301602052604081205480156130d757600061301260018361593a565b85549091506000906130269060019061593a565b905081811461308b57600086600001828154811061304657613046615a66565b906000526020600020015490508087600001848154811061306957613069615a66565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061309c5761309c615bbf565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611124565b6000915050611124565b5092915050565b600081815260018301602052604081205461312f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611124565b506000611124565b600054610100900460ff166131905760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b805161319b90613e90565b6131a3613f60565b6131b08160200151613fc3565b6131bd8160400151614025565b6131ca8160600151614087565b6131d781608001516140e9565b6131e48160a0015161414b565b612574816141ad565b600054610100900460ff166132465760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b8051613251906119a1565b61325e8160200151611c65565b61326b8160400151612381565b6132788160600151612323565b60808101518051602082015161328e9190612227565b60005b8260a00151518110156132e55760008360a0015182815181106132b6576132b6615a66565b602002602001015190506132d2816000015182602001516123d7565b50806132dd81615a7c565b915050613291565b5060005b8260c0015151811015613354576133428360c00151828151811061330f5761330f615a66565b6020026020010151600001518460c00151838151811061333157613331615a66565b602002602001015160200151612468565b8061334c81615a7c565b9150506132e9565b5060005b8260e0015151811015610d7d5760008360e00151828151811061337d5761337d615a66565b602002602001015190506000816020015190506133a7826000015182600001518360200151611e4a565b505080806133b490615a7c565b915050613358565b610c358282614206565b60045460ff1615610c355760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580613429575081513a11155b90508061346e5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a600482015260248101919091526044016112aa565b602082015115610efa576000613484483a61593a565b6020840151909150811115806134d65760208401516040517f56e5387f0000000000000000000000000000000000000000000000000000000081526112aa918491600401918252602082015260400190565b505050505050565b600a54600b54600c54600e5460ff909316924282111561351a5760405163013ce60b60e01b8152426004820152602481018390526044016112aa565b600084600281111561352e5761352e615082565b036135e7578260000361354357505050505050565b8060000361355d57613555834261594d565b600d556134d6565b6000613569834261593a565b905060006135778583615bab565b905060006135858683615b31565b61358f908461593a565b9050838111156135bb5760405163013ce60b60e01b8152426004820152602481018690526044016112aa565b856135c783600161594d565b6135d19190615b31565b6135db908661594d565b600d55506134d6915050565b81421015801561360057506135fc818361594d565b4211155b1561360f57613555828461429b565b6000600185600281111561362557613625615082565b14613638576136334261294b565b613641565b61364183612934565b9050600061364f8483614333565b90508042101561367b5760405163013ce60b60e01b8152426004820152602481018290526044016112aa565b6000613687848361594d565b905042811080156136b45760405163013ce60b60e01b8152426004820152602481018390526044016112aa565b6136be838861429b565b600d5550505050505050505050565b6136d682611422565b610c35576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016112aa565b600061372283611ee6565b80519091506001600160a01b031661373957505050565b6000836001600160a01b031682600001516001600160a01b03161461377557613770613769858460000151612e3b565b8490612e47565b613777565b825b905060008260200151821015801561379f57506040830151158061379f575082604001518211155b905080610c6b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b03909316600484015260248301859052604483019190915260648201526084016112aa565b600061380f836125d3565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061385e57505050565b6000836001600160a01b031682600001516001600160a01b0316146138935761388e613769858460000151612e3b565b613895565b825b90506000826080015142106138ab5760006138b1565b82604001515b6138bb908361594d565b90508260200151811115610c6b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152604481018290526064016112aa565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139949190615bd5565b90506001600160a01b0381166139e5576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024016112aa565b60006139ef614352565b90508051600014613a8057816001600160a01b031663355efdd9613a12876143d2565b613a1b876143d2565b846040518463ffffffff1660e01b8152600401613a3a93929190615bf2565b602060405180830381865afa158015613a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7b9190615a95565b613b10565b816001600160a01b031663ac41865a613a98876143d2565b613aa1876143d2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b109190615a95565b95945050505050565b6000613b24836125d3565b80549091506001600160a01b0316613b3b57505050565b80546000906001600160a01b03858116911614613b71578154613b6c906137699086906001600160a01b0316612e3b565b613b73565b825b905081600401544210613b9c57600060028301556003820154613b96904261594d565b60048301555b80826002016000828254613bb0919061594d565b909155505050505050565b600d54600003613bc9575050565b613bd4600d54614406565b50506000600d55565b600554600003613c19576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613c52919061593a565b90506000613c603a83615b31565b90506000836040015160001480613c7b575083604001518211155b905080613cc5578184604001516040517faf258ef20000000000000000000000000000000000000000000000000000000081526004016112aa929190918252602082015260400190565b6000600555606084015115801590613cdd5750600085115b156134d6576000613db0306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d499190615bd5565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613daa9190615bd5565b88612e3b565b90506000613dbe84836115af565b90506000613dcc828961443b565b90508660600151811115613e1c5760608701516040517f0297747f0000000000000000000000000000000000000000000000000000000081526112aa918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b6000613e61600483615c1e565b158015613e775750613e74606483615c1e565b15155b806111245750613e8961019083615c1e565b1592915050565b600054610100900460ff16613ee95760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b613f5781600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f529190615bd5565b614504565b61257481614566565b600054610100900460ff16613fb95760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b613fc16145f4565b565b600054610100900460ff1661401c5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b6125748161464d565b600054610100900460ff1661407e5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b612574816146c2565b600054610100900460ff166140e05760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b61257481614737565b600054610100900460ff166141425760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b612574816147e5565b600054610100900460ff166141a45760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b612574816148c3565b600054610100900460ff166125745760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b60025415610c35576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401600060405180830381600087803b15801561428757600080fd5b505af11580156134d6573d6000803e3d6000fd5b6000806000806142aa866149a1565b9194509250905060006142bd868461594d565b905060006142cc600c83615c1e565b905060006142db600c84615bab565b6142e5908761594d565b905060006002600a5460ff16600281111561430257614302615082565b1461430d5784614317565b6143178284612f68565b90506143258a8385846149c0565b9a9950505050505050505050565b6000806000614341426149a1565b5091509150613b10858383876149c0565b6060600061435e6149e8565b90503681111561437c57505060408051600081526020810190915290565b8067ffffffffffffffff81111561439557614395614dce565b6040519080825280601f01601f1916602001820160405280156143bf576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316146143fe5781611124565b611124614a03565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad064906020016116a6565b600081600003614477576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361448757506000611124565b670de0b6b3a7640000838102908482816144a3576144a3615b1b565b04146144e5576040517fea7b49e600000000000000000000000000000000000000000000000000000000815260048101859052602481018290526044016112aa565b8260018203816144f7576144f7615b1b565b0460010191505092915050565b600054610100900460ff1661455d5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b61257481614a8f565b600054610100900460ff166145bf5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516125749190612185565b600054610100900460ff16613fc15760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b600054610100900460ff166146a65760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b6125748160000151826020015183604001518460600151612607565b600054610100900460ff1661471b5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b61257481600001518260200151836040015184606001516116e8565b600054610100900460ff166147905760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b805161479b90611c13565b60005b816020015151811015610c35576147d3826020015182815181106147c4576147c4615a66565b60200260200101516001611a47565b806147dd81615a7c565b91505061479e565b600054610100900460ff1661483e5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b8051805160208201516040830151614857929190612577565b60005b826020015151811015610d7d5760008360200151828151811061487f5761487f615a66565b602002602001015190506000816020015190506148ae8260000151826000015183602001518460400151611b5a565b505080806148bb90615a7c565b91505061485a565b600054610100900460ff1661491c5760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b80518051602082015160408301516149359291906122cd565b60005b826020015151811015610d7d5760008360200151828151811061495d5761495d615a66565b6020026020010151905060008160200151905061498c8260000151826000015183602001518460400151611cef565b5050808061499990615a7c565b915050614938565b600080806149b3620151808504612ecc565b9196909550909350915050565b6000613b108484846149d189614b28565b6149da8a614b46565b6149e38b614b62565b614b6f565b600060243610156149f95750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a8a9190615bd5565b905090565b600054610100900460ff16614ae85760405162461bcd60e51b815260206004820152602b6024820152600080516020615cd983398151915260448201526a6e697469616c697a696e6760a81b60648201526084016112aa565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600080614b386201518084615c1e565b905061117c610e1082615bab565b600080614b55610e1084615c1e565b905061117c603c82615bab565b6000611124603c83615c1e565b600081614b7d603c85615b31565b614b89610e1087615b31565b62015180614b988b8b8b614bcb565b614ba29190615b31565b614bac919061594d565b614bb6919061594d565b614bc0919061594d565b979650505050505050565b60006107b2841015614bdc57600080fd5b838383600062253d8c60046064600c614bf6600e88615c32565b614c009190615c52565b614c0c88611324615c80565b614c169190615c80565b614c209190615c52565b614c2b906003615ca8565b614c359190615c52565b600c80614c43600e88615c32565b614c4d9190615c52565b614c5890600c615ca8565b614c63600288615c32565b614c6d9190615c32565b614c799061016f615ca8565b614c839190615c52565b6004600c614c92600e89615c32565b614c9c9190615c52565b614ca8896112c0615c80565b614cb29190615c80565b614cbe906105b5615ca8565b614cc89190615c52565b614cd4617d4b87615c32565b614cde9190615c80565b614ce89190615c80565b614cf29190615c32565b614cfc9190615c32565b98975050505050505050565b6001600160a01b038116811461257457600080fd5b8035614d2881614d08565b919050565b60008060008060808587031215614d4357600080fd5b8435614d4e81614d08565b966020860135965060408601359560600135945092505050565b600060208284031215614d7a57600080fd5b5035919050565b803560ff81168114614d2857600080fd5b60008060008060808587031215614da857600080fd5b614d4e85614d81565b600060208284031215614dc357600080fd5b813561117c81614d08565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614e0757614e07614dce565b60405290565b6040516080810167ffffffffffffffff81118282101715614e0757614e07614dce565b60405160c0810167ffffffffffffffff81118282101715614e0757614e07614dce565b604051610120810167ffffffffffffffff81118282101715614e0757614e07614dce565b604051601f8201601f1916810167ffffffffffffffff81118282101715614ea057614ea0614dce565b604052919050565b600067ffffffffffffffff821115614ec257614ec2614dce565b5060051b60200190565b600082601f830112614edd57600080fd5b81356020614ef2614eed83614ea8565b614e77565b82815260059290921b84018101918181019086841115614f1157600080fd5b8286015b84811015614f35578035614f2881614d08565b8352918301918301614f15565b509695505050505050565b801515811461257457600080fd5b60008060408385031215614f6157600080fd5b823567ffffffffffffffff80821115614f7957600080fd5b614f8586838701614ecc565b9350602091508185013581811115614f9c57600080fd5b85019050601f81018613614faf57600080fd5b8035614fbd614eed82614ea8565b81815260059190911b82018301908381019088831115614fdc57600080fd5b928401925b82841015615003578335614ff481614f40565b82529284019290840190614fe1565b80955050505050509250929050565b6000806000806080858703121561502857600080fd5b843561503381614d08565b9350602085013561504381614d08565b93969395505050506040820135916060013590565b803560028110614d2857600080fd5b60006020828403121561507957600080fd5b61117c82615058565b634e487b7160e01b600052602160045260246000fd5b60208101600283106150ba57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156150d557600080fd5b83356150e081614d08565b925060208401356150f081614d08565b929592945050506040919091013590565b6000806040838503121561511457600080fd5b823561511f81614d08565b9150602083013561512f81614d08565b809150509250929050565b6000806040838503121561514d57600080fd5b50508035926020909101359150565b6000806040838503121561516f57600080fd5b823561517a81614d08565b946020939093013593505050565b60008060006060848603121561519d57600080fd5b83356151a881614d08565b95602085013595506040909401359392505050565b6000604082840312156151cf57600080fd5b6151d7614de4565b905081356151e481614d08565b808252506020820135602082015292915050565b600082601f83011261520957600080fd5b81356020615219614eed83614ea8565b82815260069290921b8401810191818101908684111561523857600080fd5b8286015b84811015614f355761524e88826151bd565b83529183019160400161523c565b600082601f83011261526d57600080fd5b8135602061527d614eed83614ea8565b8281526060928302850182019282820191908785111561529c57600080fd5b8387015b858110156152ea5781818a0312156152b85760008081fd5b6152c0614de4565b81356152cb81614d08565b81526152d98a8388016151bd565b8187015284529284019281016152a0565b5090979650505050505050565b60006060828403121561530957600080fd5b6040516060810181811067ffffffffffffffff8211171561532c5761532c614dce565b604052905080823561533d81614d08565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561536e57600080fd5b615376614e0d565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156153b257600080fd5b6153ba614e0d565b90506153c582614d81565b815260208201356020820152604082013560408201526060820135606082015292915050565b6000604082840312156153fd57600080fd5b615405614de4565b905061541082615058565b8152602082013567ffffffffffffffff81111561542c57600080fd5b61543884828501614ecc565b60208301525092915050565b60006080828403121561545657600080fd5b61545e614de4565b9050813561546b81614d08565b815261547a83602084016152f7565b602082015292915050565b6000608080838503121561549857600080fd5b6154a0614de4565b91506154ac84846152f7565b8252606083013567ffffffffffffffff8111156154c857600080fd5b8301601f810185136154d957600080fd5b803560206154e9614eed83614ea8565b82815260079290921b8301810191818101908884111561550857600080fd5b938201935b8385101561552e5761551f8986615444565b8252938501939082019061550d565b808388015250505050505092915050565b6000608080838503121561555257600080fd5b61555a614de4565b915061556684846152f7565b8252606083013567ffffffffffffffff81111561558257600080fd5b8301601f8101851361559357600080fd5b803560206155a3614eed83614ea8565b82815260079290921b830181019181810190888411156155c257600080fd5b938201935b8385101561552e576155d98986615444565b825293850193908201906155c7565b60006101c082840312156155fb57600080fd5b615603614e30565b905061560f83836152f7565b815261561e836060840161535c565b60208201526156308360e084016153a0565b604082015261016082013567ffffffffffffffff8082111561565157600080fd5b61565d858386016153eb565b606084015261018084013591508082111561567757600080fd5b61568385838601615485565b60808401526101a084013591508082111561569d57600080fd5b506156aa8482850161553f565b60a08301525092915050565b600061014082840312156156c957600080fd5b6156d1614e53565b90506156dc82614d1d565b81526156ea60208301614d1d565b6020820152604082013560408201526060820135606082015261571083608084016151bd565b608082015260c082013567ffffffffffffffff8082111561573057600080fd5b61573c858386016151f8565b60a084015260e084013591508082111561575557600080fd5b615761858386016151f8565b60c08401526101009150818401358181111561577c57600080fd5b6157888682870161525c565b60e085015250610120840135818111156157a157600080fd5b6157ad868287016155e8565b8385015250505092915050565b600060208083850312156157cd57600080fd5b823567ffffffffffffffff808211156157e557600080fd5b90840190608082870312156157f957600080fd5b615801614e0d565b823561580c81614d08565b815282840135848201526040808401358381111561582957600080fd5b8401601f8101891361583a57600080fd5b8035615848614eed82614ea8565b81815260069190911b8201870190878101908b83111561586757600080fd5b928801925b828410156158b95784848d0312156158845760008081fd5b61588c614de4565b843561589781614d08565b8152848a01356158a681614d08565b818b01528252928401929088019061586c565b8085870152505050505060608301359350818411156158d757600080fd5b6158e3878585016156b6565b60608201529695505050505050565b6000806000806080858703121561590857600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561112457611124615924565b8082018082111561112457611124615924565b60005b8381101561597b578181015183820152602001615963565b50506000910152565b6000815180845261599c816020860160208601615960565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820152600061161a6040830184615984565b6000602082840312156159e457600080fd5b815167ffffffffffffffff808211156159fc57600080fd5b818401915084601f830112615a1057600080fd5b815181811115615a2257615a22614dce565b615a35601f8201601f1916602001614e77565b9150808252856020828501011115615a4c57600080fd5b615a5d816020840160208601615960565b50949350505050565b634e487b7160e01b600052603260045260246000fd5b600060018201615a8e57615a8e615924565b5060010190565b600060208284031215615aa757600080fd5b5051919050565b600081518084526020808501945080840160005b83811015615ade57815187529582019590820190600101615ac2565b509495945050505050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000613b106060830184615aae565b634e487b7160e01b600052601260045260246000fd5b808202811582820484141761112457611124615924565b60006001600160a01b0380871683528086166020840152506001600160e01b03198416604083015260806060830152615b846080830184615aae565b9695505050505050565b600060208284031215615ba057600080fd5b815161117c81614f40565b600082615bba57615bba615b1b565b500490565b634e487b7160e01b600052603160045260246000fd5b600060208284031215615be757600080fd5b815161117c81614d08565b60006001600160a01b03808616835280851660208401525060606040830152613b106060830184615984565b600082615c2d57615c2d615b1b565b500690565b81810360008312801583831316838312821617156130e1576130e1615924565b600082615c6157615c61615b1b565b600160ff1b821460001984141615615c7b57615c7b615924565b500590565b8082018281126000831280158216821582161715615ca057615ca0615924565b505092915050565b80820260008212600160ff1b84141615615cc457615cc4615924565b81810583148215176111245761112461592456fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a264697066735822122091be53befea06f9c348e74c180a400cfe71bf1c20e693cd18f727285f6e7dfc764736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
