{
  "_format": "hh-sol-artifact-1",
  "contractName": "Withdrawer",
  "sourceName": "contracts/primitives/Withdrawer.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": [],
      "name": "TaskGasNotInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskGasPriceLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedDate",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedWindow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidFrequency",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        }
      ],
      "name": "TaskInvalidFrequencyMode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidThresholdInput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidVolumeLimitInput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "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": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "TaskRecipientEqualsSmartVault",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskRecipientZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "connectorId",
          "type": "bytes32"
        }
      ],
      "name": "TaskSameBalanceConnectors",
      "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": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "CustomTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "CustomVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "DefaultTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "DefaultVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "GasLimitsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "RecipientSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        }
      ],
      "name": "TimeLockAllowedAtSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TimeLockSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "added",
          "type": "bool"
        }
      ],
      "name": "TokensAcceptanceListSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "acceptanceType",
          "type": "uint8"
        }
      ],
      "name": "TokensAcceptanceTypeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "EXECUTION_TYPE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "authorizer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "call",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "defaultTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBalanceConnectors",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGasLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "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": "recipient",
              "type": "address"
            },
            {
              "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 Withdrawer.WithdrawConfig",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "isTokenAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "recipient",
      "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": "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": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setDefaultTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setDefaultVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newGasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPriorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "setGasLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newRecipient",
          "type": "address"
        }
      ],
      "name": "setRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setTimeLock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "added",
          "type": "bool[]"
        }
      ],
      "name": "setTokensAcceptanceList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "newTokensAcceptanceType",
          "type": "uint8"
        }
      ],
      "name": "setTokensAcceptanceType",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "smartVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokensAcceptanceType",
      "outputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61471c80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806366d003ac1161010f578063b187bd26116100a2578063d3feb60211610071578063d3feb602146105d9578063d45a76cf146105ec578063e6b5be98146105ff578063f9eaee0d1461061257600080fd5b8063b187bd261461057f578063c267621e1461059c578063c565d971146105ad578063d09edf31146105c057600080fd5b806390333ba8116100de57806390333ba8146104cc578063a0c3774f146104df578063a3374177146104f2578063a5900c4d1461052557600080fd5b806366d003ac146104525780636aacaad8146104655780637125590a146104b15780638456cb59146104c457600080fd5b80633f4ba83a116101875780634fd49efd116101565780634fd49efd146103a857806351a424b1146103d35780635670e2ce1461040b5780635ea54eee1461042657600080fd5b80633f4ba83a1461033e578063423a4b401461034657806342d4693e146103595780634a45a3a81461037357600080fd5b80632384c32d116101c35780632384c32d146102f257806330eae572146103055780633bbed4a0146103185780633bd9ef281461032b57600080fd5b80630fe105e8146101f5578063119a5e961461020a578063219723841461023b578063221a8c681461024e575b600080fd5b610208610203366004613bca565b610625565b005b61021261065e565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b610208610249366004613d74565b610695565b6102c061025c366004613e38565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610232565b610208610300366004613e55565b610745565b610208610313366004613eaa565b610774565b610208610326366004613e38565b6107b5565b610208610339366004613ec5565b6107de565b6102086108b0565b610208610354366004613e55565b610937565b600f546103669060ff1681565b6040516102329190613f07565b61039a7f779b9d7b1cefd23059ce3e2b194efb3183a6685dd830e8cbb723b0cbeb982b2881565b604051908152602001610232565b6001546103bb906001600160a01b031681565b6040516001600160a01b039091168152602001610232565b6103e66103e1366004613e38565b610966565b604080516001600160a01b039094168452602084019290925290820152606001610232565b60025460035460408051928352602083019190915201610232565b600654600754600854600954604080519485526020850193909352918301526060820152608001610232565b601c546103bb906001600160a01b031681565b6102c06040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102086104bf366004613f2f565b61098f565b6102086109ba565b6102086104da366004613f51565b610a2c565b61039a6104ed366004613e38565b610a5f565b6103e6604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6103e6610533366004613e38565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b60045461058c9060ff1681565b6040519015158152602001610232565b6001546001600160a01b03166103bb565b6102086105bb366004614277565b610af6565b6000546103bb906201000090046001600160a01b031681565b6102086105e7366004613f51565b610c1c565b6102c06105fa366004613e38565b610c49565b61020861060d3660046143a7565b610cb8565b61058c610620366004613e38565b610ce7565b6106348460ff16848484610d32565b61064b336000356001600160e01b03191683610ddd565b61065785858585610e24565b5050505050565b600a5460009081908190819060ff16600281111561067e5761067e613ef1565b600b54600c54600e54935093509350935090919293565b6106ab336000356001600160e01b0319166110c9565b80518251146106e6576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156107405761072e838281518110610707576107076143d9565b6020026020010151838381518110610721576107216143d9565b60200260200101516110e5565b8061073881614405565b9150506106e9565b505050565b6107518484848461118f565b610768336000356001600160e01b03191683610ddd565b610657858585856111f8565b61079181600181111561078957610789613ef1565b60ff166112b1565b6107a8336000356001600160e01b03191683610ddd565b6107b1826112f8565b5050565b6107be81611355565b6107d5336000356001600160e01b03191683610ddd565b6107b182611369565b6107e88282611453565b6107ff336000356001600160e01b03191683610ddd565b816000036108135761081083610a5f565b91505b61081d83836114c2565b600154601c546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015291821660248201526044810185905291169063d9caed1290606401600060405180830381600087803b15801561088e57600080fd5b505af11580156108a2573d6000803e3d6000fd5b505050506107408383611546565b6108c6336000356001600160e01b0319166110c9565b60045460ff16610902576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6109438484848461118f565b61095a336000356001600160e01b03191683610ddd565b61065785858585611550565b60008060008061097585611610565b805160208201516040909201519097919650945092505050565b610999828261169b565b6109b0336000356001600160e01b03191683610ddd565b61074083836116f5565b6109d0336000356001600160e01b0319166110c9565b60045460ff16156109f45760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610a3783838361173a565b610a4e336000356001600160e01b03191683610ddd565b610a598484846117cc565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af0919061441e565b92915050565b600054610100900460ff1615808015610b165750600054600160ff909116105b80610b305750303b158015610b30575060005460ff166001145b610ba75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610bca576000805461ff0019166101001790555b610bd382611822565b80156107b1576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610c2783838361173a565b610c3e336000356001600160e01b03191683610ddd565b610a59848484611894565b600080600080600080610c5b876118f0565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b610cc484848484610d32565b610cdb336000356001600160e01b03191683610ddd565b61065785858585611924565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610d1d57610d1d613ef1565b14610d29578015610d2b565b805b9392505050565b60408051600480825260a08201909252606091602082016080803683370190505090508481600081518110610d6957610d696143d9565b6020026020010181815250508381600181518110610d8957610d896143d9565b6020026020010181815250508281600281518110610da957610da96143d9565b6020026020010181815250508181600381518110610dc957610dc96143d9565b602002602001018181525050949350505050565b610de88383836119bf565b610740578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610b9e93929190614472565b60ff8416610ed5576000811180610e3b5750600082115b15610ed05782600003610e6d5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b9e565b801580610e7957508281115b15610ea357604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b9e565b81600003610ed057604051635686bf5960e11b815260ff8516600482015260248101839052604401610b9e565b611032565b82600003610f025760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b9e565b801580610f1a5750610f176224ea00846144a4565b81115b15610f4457604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b9e565b81600003610f7157604051635686bf5960e11b815260ff8516600482015260248101839052604401610b9e565b60001960ff851601610fb357601c610f8883611a5d565b1115610ed057604051635686bf5960e11b815260ff8516600482015260248101839052604401610b9e565b60011960ff851601610ffb57610fc882611a74565b610fd183611a5d565b14610ed057604051635686bf5960e11b815260ff8516600482015260248101839052604401610b9e565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610b9e565b8360ff16600281111561104757611047613ef1565b600a805460ff1916600183600281111561106357611063613ef1565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6040805160008152602081019091526107b19083908390610ddd565b6001600160a01b038216611125576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061113a57611135601083611a97565b611145565b611145601083611aac565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611183911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106111cf576111cf6143d9565b602002602001018181525050836001600160a01b031681600181518110610d8957610d896143d9565b6001600160a01b038416611238576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061125c90848484611ac1565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106112e7576112e76143d9565b602002602001018181525050919050565b600f805482919060ff19166001838181111561131657611316613ef1565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161134a9190613f07565b60405180910390a150565b6060610af0826001600160a01b03166112b1565b6001600160a01b0381166113a9576040517f2586ae9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546001600160a01b03908116908216036113fc576040517f2941c82e0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610b9e565b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f9d900d71c28433348acb1bec780a061608a96b149370abce77fd54ba2d47940190600090a250565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611490576114906143d9565b60200260200101818152505081816001815181106114b0576114b06143d9565b60200260200101818152505092915050565b6114cc8282611b9e565b6001600160a01b03821661150c576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000036107b1576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b18282611be4565b6001600160a01b038416611590576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206115b490848484611c0c565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611602929190918252602082015260400190565b60405180910390a350505050565b61163d604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b0380831660009081526015602052604090208054909116156116665780611669565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c816000815181106116d2576116d26143d9565b6020026020010181815250508160001c816001815181106114b0576114b06143d9565b8015611730576040517f9842f26f00000000000000000000000000000000000000000000000000000000815260048101829052602401610b9e565b6107b18282611d78565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611779576117796143d9565b6020026020010181815250508281600181518110611799576117996143d9565b60200260200101818152505081816002815181106117b9576117b96143d9565b6020026020010181815250509392505050565b6117d96016848484611c0c565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b600054610100900460ff1661187b5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6118888160200151611dfb565b61189181611eb1565b50565b6118a16012848484611ac1565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b60205260408120805491929091161561191b5780610d2b565b60169392505050565b670de0b6b3a7640000811115611966576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016110bb565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611a149087903090889088906004016144bb565b602060405180830381865afa158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a559190614501565b949350505050565b6000611a55611a6f6201518084614534565b611f15565b60008080611a88611a6f6201518086614534565b5091509150611a558282611fb1565b6000610d2b836001600160a01b038416612037565b6000610d2b836001600160a01b038416612131565b60006001600160a01b038416158015611ad8575082155b8015611ae2575081155b905060006001600160a01b03851615801590611b065750821580611b065750838310155b905081158015611b14575080155b15611b64576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b9e565b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03939093169290921783556001830155600290910155565b611ba88282612180565b611bb2828261218a565b611bbc82826121ae565b611bc682826122a2565b611bd08282612491565b611bda82826124db565b6107b182826125c8565b611bee82826126de565b611bf88282612780565b611c0282826127a2565b6107b182826129ec565b60006001600160a01b038416158015611c23575082155b8015611c2d575081155b905060006001600160a01b03851615801590611c495750600084115b8015611c555750600083115b905081158015611c63575080155b15611cb3576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b9e565b60038601839055600186018490558115611cda576000600287018190556004870155611d46565b8560040154600003611d015760006002870155611cf78342614548565b6004870155611d46565b85546001600160a01b03868116911614611d46578554600090611d2d906001600160a01b031687612a19565b6002880154909150611d3f9082612a25565b6002880155505b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0393909316929092179092555050565b8082148015611d8657508115155b15611dc0576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610b9e565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600054610100900460ff16611e545760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b8051611e5f90612a82565b611e67612b52565b611e748160200151612bb5565b611e818160400151612c17565b611e8e8160600151612c79565b611e9b8160800151612cdb565b611ea88160a00151612d3d565b61189181612d9f565b600054610100900460ff16611f0a5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b805161189190611369565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281611f7257611f7261451e565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480611fc25750816003145b80611fcd5750816005145b80611fd85750816007145b80611fe35750816008145b80611fee575081600a145b80611ff9575081600c145b156120065750601f610af0565b816002146120165750601e610af0565b61201f83612df8565b61202a57601c61202d565b601d5b60ff169392505050565b6000818152600183016020526040812054801561212057600061205b60018361455b565b855490915060009061206f9060019061455b565b90508181146120d457600086600001828154811061208f5761208f6143d9565b90600052602060002001549050808760000184815481106120b2576120b26143d9565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806120e5576120e561456e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610af0565b6000915050610af0565b5092915050565b600081815260018301602052604081205461217857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610af0565b506000610af0565b6107b18282612e34565b60045460ff16156107b15760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806121ed575081513a11155b9050806122325781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610b9e565b602082015115610a59576000612248483a61455b565b60208401519091508111158061229a5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610b9e918491600401918252602082015260400190565b505050505050565b600a54600b54600c54600e5460ff90931692428211156122de5760405163013ce60b60e01b815242600482015260248101839052604401610b9e565b60008460028111156122f2576122f2613ef1565b036123ab578260000361230757505050505050565b80600003612321576123198342614548565b600d5561229a565b600061232d834261455b565b9050600061233b8583614534565b9050600061234986836144a4565b612353908461455b565b90508381111561237f5760405163013ce60b60e01b815242600482015260248101869052604401610b9e565b8561238b836001614548565b61239591906144a4565b61239f9086614548565b600d555061229a915050565b8142101580156123c457506123c08183614548565b4211155b156123d3576123198284612ec9565b600060018560028111156123e9576123e9613ef1565b146123fc576123f742611a74565b612405565b61240583611a5d565b905060006124138483612f61565b90508042101561243f5760405163013ce60b60e01b815242600482015260248101829052604401610b9e565b600061244b8483614548565b905042811080156124785760405163013ce60b60e01b815242600482015260248101839052604401610b9e565b6124828388612ec9565b600d5550505050505050505050565b61249a82610ce7565b6107b1576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b9e565b60006124e683611610565b80519091506001600160a01b03166124fd57505050565b6000836001600160a01b031682600001516001600160a01b0316146125395761253461252d858460000151612a19565b8490612a25565b61253b565b825b9050600082602001518210158015612563575060408301511580612563575082604001518211155b905080610657578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610b9e565b60006125d3836118f0565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061262257505050565b6000836001600160a01b031682600001516001600160a01b0316146126575761265261252d858460000151612a19565b612659565b825b905060008260800151421061266f576000612675565b82604001515b61267f9083614548565b9050826020015181111561065757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610b9e565b60006126e9836118f0565b80549091506001600160a01b031661270057505050565b80546000906001600160a01b038581169116146127365781546127319061252d9086906001600160a01b0316612a19565b612738565b825b9050816004015442106127615760006002830155600382015461275b9042614548565b60048301555b808260020160008282546127759190614548565b909155505050505050565b600d5460000361278e575050565b612799600d54612f89565b50506000600d55565b6005546000036127de576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612817919061455b565b905060006128253a836144a4565b90506000836040015160001480612840575083604001518211155b90508061288a578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610b9e929190918252602082015260400190565b60006005556060840151158015906128a25750600085115b1561229a576000612975306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290e9190614584565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296f9190614584565b88612a19565b905060006129838483612fbe565b905060006129918289613030565b905086606001518111156129e15760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610b9e918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b6000610d2b83836130f9565b60008282028315801590612a48575082848281612a4457612a4461451e565b0414155b15612a7057604051637472527d60e11b81526004810185905260248101849052604401610b9e565b670de0b6b3a764000090049392505050565b600054610100900460ff16612adb5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b612b4981600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b449190614584565b6132ef565b61189181613351565b600054610100900460ff16612bab5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b612bb36133ec565b565b600054610100900460ff16612c0e5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b61189181613445565b600054610100900460ff16612c705760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b611891816134ba565b600054610100900460ff16612cd25760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6118918161352f565b600054610100900460ff16612d345760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b611891816135dd565b600054610100900460ff16612d965760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b611891816136bb565b600054610100900460ff166118915760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6000612e056004836145a1565b158015612e1b5750612e186064836145a1565b15155b80610af05750612e2d610190836145a1565b1592915050565b600254156107b1576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401600060405180830381600087803b158015612eb557600080fd5b505af115801561229a573d6000803e3d6000fd5b600080600080612ed886613799565b919450925090506000612eeb8684614548565b90506000612efa600c836145a1565b90506000612f09600c84614534565b612f139087614548565b905060006002600a5460ff166002811115612f3057612f30613ef1565b14612f3b5784612f45565b612f458284611fb1565b9050612f538a8385846137b8565b9a9950505050505050505050565b6000806000612f6f42613799565b5091509150612f80858383876137b8565b95945050505050565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161134a565b60008282028315801590612fe1575082848281612fdd57612fdd61451e565b0414155b1561300957604051637472527d60e11b81526004810185905260248101849052604401610b9e565b801561302657670de0b6b3a7640000600019820104600101611a55565b6000949350505050565b60008160000361306c576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361307c57506000610af0565b670de0b6b3a7640000838102908482816130985761309861451e565b04146130da576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610b9e565b8260018203816130ec576130ec61451e565b0460010191505092915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561314f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131739190614584565b90506001600160a01b0381166131c4576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b9e565b60006131ce6137e0565b9050805160001461325f57816001600160a01b031663355efdd96131f187613860565b6131fa87613860565b846040518463ffffffff1660e01b8152600401613219939291906145b5565b602060405180830381865afa158015613236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325a919061441e565b612f80565b816001600160a01b031663ac41865a61327787613860565b61328087613860565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156132cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f80919061441e565b600054610100900460ff166133485760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b61189181613894565b600054610100900460ff166133aa5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b80516001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556020810151604082015161189191906116f5565b600054610100900460ff16612bb35760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b600054610100900460ff1661349e5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6118918160000151826020015183604001518460600151611924565b600054610100900460ff166135135760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6118918160000151826020015183604001518460600151610e24565b600054610100900460ff166135885760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b8051613593906112f8565b60005b8160200151518110156107b1576135cb826020015182815181106135bc576135bc6143d9565b602002602001015160016110e5565b806135d581614405565b915050613596565b600054610100900460ff166136365760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b805180516020820151604083015161364f929190611894565b60005b82602001515181101561074057600083602001518281518110613677576136776143d9565b602002602001015190506000816020015190506136a682600001518260000151836020015184604001516111f8565b505080806136b390614405565b915050613652565b600054610100900460ff166137145760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b805180516020820151604083015161372d9291906117cc565b60005b82602001515181101561074057600083602001518281518110613755576137556143d9565b602002602001015190506000816020015190506137848260000151826000015183602001518460400151611550565b5050808061379190614405565b915050613730565b600080806137ab620151808504611f15565b9196909550909350915050565b6000612f808484846137c98961392d565b6137d28a61394b565b6137db8b613967565b613974565b606060006137ec6139d0565b90503681111561380a57505060408051600081526020810190915290565b8067ffffffffffffffff81111561382357613823613c03565b6040519080825280601f01601f19166020018201604052801561384d576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0383161461388c5781610af0565b610af06139eb565b600054610100900460ff166138ed5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008061393d62015180846145a1565b9050610d2b610e1082614534565b60008061395a610e10846145a1565b9050610d2b603c82614534565b6000610af0603c836145a1565b600081613982603c856144a4565b61398e610e10876144a4565b6201518061399d8b8b8b613a77565b6139a791906144a4565b6139b19190614548565b6139bb9190614548565b6139c59190614548565b979650505050505050565b600060243610156139e15750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015613a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a729190614584565b905090565b60006107b2841015613a8857600080fd5b838383600062253d8c60046064600c613aa2600e88614620565b613aac9190614640565b613ab88861132461466e565b613ac2919061466e565b613acc9190614640565b613ad7906003614696565b613ae19190614640565b600c80613aef600e88614620565b613af99190614640565b613b0490600c614696565b613b0f600288614620565b613b199190614620565b613b259061016f614696565b613b2f9190614640565b6004600c613b3e600e89614620565b613b489190614640565b613b54896112c061466e565b613b5e919061466e565b613b6a906105b5614696565b613b749190614640565b613b80617d4b87614620565b613b8a919061466e565b613b94919061466e565b613b9e9190614620565b613ba89190614620565b98975050505050505050565b803560ff81168114613bc557600080fd5b919050565b60008060008060808587031215613be057600080fd5b613be985613bb4565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3c57613c3c613c03565b60405290565b6040805190810167ffffffffffffffff81118282101715613c3c57613c3c613c03565b60405160c0810167ffffffffffffffff81118282101715613c3c57613c3c613c03565b604051601f8201601f1916810167ffffffffffffffff81118282101715613cb157613cb1613c03565b604052919050565b600067ffffffffffffffff821115613cd357613cd3613c03565b5060051b60200190565b6001600160a01b038116811461189157600080fd5b600082601f830112613d0357600080fd5b81356020613d18613d1383613cb9565b613c88565b82815260059290921b84018101918181019086841115613d3757600080fd5b8286015b84811015613d5b578035613d4e81613cdd565b8352918301918301613d3b565b509695505050505050565b801515811461189157600080fd5b60008060408385031215613d8757600080fd5b823567ffffffffffffffff80821115613d9f57600080fd5b613dab86838701613cf2565b9350602091508185013581811115613dc257600080fd5b85019050601f81018613613dd557600080fd5b8035613de3613d1382613cb9565b81815260059190911b82018301908381019088831115613e0257600080fd5b928401925b82841015613e29578335613e1a81613d66565b82529284019290840190613e07565b80955050505050509250929050565b600060208284031215613e4a57600080fd5b8135610d2b81613cdd565b60008060008060808587031215613e6b57600080fd5b8435613e7681613cdd565b93506020850135613e8681613cdd565b93969395505050506040820135916060013590565b803560028110613bc557600080fd5b600060208284031215613ebc57600080fd5b610d2b82613e9b565b60008060408385031215613ed857600080fd5b8235613ee381613cdd565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310613f2957634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613f4257600080fd5b50508035926020909101359150565b600080600060608486031215613f6657600080fd5b8335613f7181613cdd565b95602085013595506040909401359392505050565b600060608284031215613f9857600080fd5b6040516060810181811067ffffffffffffffff82111715613fbb57613fbb613c03565b6040529050808235613fcc81613cdd565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215613ffd57600080fd5b614005613c19565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b60006080828403121561404157600080fd5b614049613c19565b905061405482613bb4565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561408c57600080fd5b614094613c42565b905061409f82613e9b565b8152602082013567ffffffffffffffff8111156140bb57600080fd5b6140c784828501613cf2565b60208301525092915050565b6000608082840312156140e557600080fd5b6140ed613c42565b905081356140fa81613cdd565b81526141098360208401613f86565b602082015292915050565b6000608080838503121561412757600080fd5b61412f613c42565b915061413b8484613f86565b8252606083013567ffffffffffffffff81111561415757600080fd5b8301601f8101851361416857600080fd5b80356020614178613d1383613cb9565b82815260079290921b8301810191818101908884111561419757600080fd5b938201935b838510156141bd576141ae89866140d3565b8252938501939082019061419c565b808388015250505050505092915050565b600060808083850312156141e157600080fd5b6141e9613c42565b91506141f58484613f86565b8252606083013567ffffffffffffffff81111561421157600080fd5b8301601f8101851361422257600080fd5b80356020614232613d1383613cb9565b82815260079290921b8301810191818101908884111561425157600080fd5b938201935b838510156141bd5761426889866140d3565b82529385019390820190614256565b60006020828403121561428957600080fd5b813567ffffffffffffffff808211156142a157600080fd5b90830190604082860312156142b557600080fd5b6142bd613c42565b82356142c881613cdd565b81526020830135828111156142dc57600080fd5b92909201916101c083870312156142f257600080fd5b6142fa613c65565b6143048785613f86565b81526143138760608601613feb565b60208201526143258760e0860161402f565b60408201526101608401358381111561433d57600080fd5b6143498882870161407a565b6060830152506101808401358381111561436257600080fd5b61436e88828701614114565b6080830152506101a08401358381111561438757600080fd5b614393888287016141ce565b60a083015250602082015295945050505050565b600080600080608085870312156143bd57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614417576144176143ef565b5060010190565b60006020828403121561443057600080fd5b5051919050565b600081518084526020808501945080840160005b838110156144675781518752958201959082019060010161444b565b509495945050505050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000612f806060830184614437565b8082028115828204841417610af057610af06143ef565b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526144f76080830184614437565b9695505050505050565b60006020828403121561451357600080fd5b8151610d2b81613d66565b634e487b7160e01b600052601260045260246000fd5b6000826145435761454361451e565b500490565b80820180821115610af057610af06143ef565b81810381811115610af057610af06143ef565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561459657600080fd5b8151610d2b81613cdd565b6000826145b0576145b061451e565b500690565b60006001600160a01b038086168352602081861681850152606060408501528451915081606085015260005b828110156145fd578581018201518582016080015281016145e1565b50506000608082850101526080601f19601f830116840101915050949350505050565b818103600083128015838313168383128216171561212a5761212a6143ef565b60008261464f5761464f61451e565b600160ff1b821460001984141615614669576146696143ef565b500590565b808201828112600083128015821682158216171561468e5761468e6143ef565b505092915050565b80820260008212600160ff1b841416156146b2576146b26143ef565b8181058314821517610af057610af06143ef56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220118fe79050bffbb739355caa176823e48e979f1c8d37c524fcf30113e8b3d74164736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806366d003ac1161010f578063b187bd26116100a2578063d3feb60211610071578063d3feb602146105d9578063d45a76cf146105ec578063e6b5be98146105ff578063f9eaee0d1461061257600080fd5b8063b187bd261461057f578063c267621e1461059c578063c565d971146105ad578063d09edf31146105c057600080fd5b806390333ba8116100de57806390333ba8146104cc578063a0c3774f146104df578063a3374177146104f2578063a5900c4d1461052557600080fd5b806366d003ac146104525780636aacaad8146104655780637125590a146104b15780638456cb59146104c457600080fd5b80633f4ba83a116101875780634fd49efd116101565780634fd49efd146103a857806351a424b1146103d35780635670e2ce1461040b5780635ea54eee1461042657600080fd5b80633f4ba83a1461033e578063423a4b401461034657806342d4693e146103595780634a45a3a81461037357600080fd5b80632384c32d116101c35780632384c32d146102f257806330eae572146103055780633bbed4a0146103185780633bd9ef281461032b57600080fd5b80630fe105e8146101f5578063119a5e961461020a578063219723841461023b578063221a8c681461024e575b600080fd5b610208610203366004613bca565b610625565b005b61021261065e565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b610208610249366004613d74565b610695565b6102c061025c366004613e38565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610232565b610208610300366004613e55565b610745565b610208610313366004613eaa565b610774565b610208610326366004613e38565b6107b5565b610208610339366004613ec5565b6107de565b6102086108b0565b610208610354366004613e55565b610937565b600f546103669060ff1681565b6040516102329190613f07565b61039a7f779b9d7b1cefd23059ce3e2b194efb3183a6685dd830e8cbb723b0cbeb982b2881565b604051908152602001610232565b6001546103bb906001600160a01b031681565b6040516001600160a01b039091168152602001610232565b6103e66103e1366004613e38565b610966565b604080516001600160a01b039094168452602084019290925290820152606001610232565b60025460035460408051928352602083019190915201610232565b600654600754600854600954604080519485526020850193909352918301526060820152608001610232565b601c546103bb906001600160a01b031681565b6102c06040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102086104bf366004613f2f565b61098f565b6102086109ba565b6102086104da366004613f51565b610a2c565b61039a6104ed366004613e38565b610a5f565b6103e6604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6103e6610533366004613e38565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b60045461058c9060ff1681565b6040519015158152602001610232565b6001546001600160a01b03166103bb565b6102086105bb366004614277565b610af6565b6000546103bb906201000090046001600160a01b031681565b6102086105e7366004613f51565b610c1c565b6102c06105fa366004613e38565b610c49565b61020861060d3660046143a7565b610cb8565b61058c610620366004613e38565b610ce7565b6106348460ff16848484610d32565b61064b336000356001600160e01b03191683610ddd565b61065785858585610e24565b5050505050565b600a5460009081908190819060ff16600281111561067e5761067e613ef1565b600b54600c54600e54935093509350935090919293565b6106ab336000356001600160e01b0319166110c9565b80518251146106e6576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156107405761072e838281518110610707576107076143d9565b6020026020010151838381518110610721576107216143d9565b60200260200101516110e5565b8061073881614405565b9150506106e9565b505050565b6107518484848461118f565b610768336000356001600160e01b03191683610ddd565b610657858585856111f8565b61079181600181111561078957610789613ef1565b60ff166112b1565b6107a8336000356001600160e01b03191683610ddd565b6107b1826112f8565b5050565b6107be81611355565b6107d5336000356001600160e01b03191683610ddd565b6107b182611369565b6107e88282611453565b6107ff336000356001600160e01b03191683610ddd565b816000036108135761081083610a5f565b91505b61081d83836114c2565b600154601c546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015291821660248201526044810185905291169063d9caed1290606401600060405180830381600087803b15801561088e57600080fd5b505af11580156108a2573d6000803e3d6000fd5b505050506107408383611546565b6108c6336000356001600160e01b0319166110c9565b60045460ff16610902576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6109438484848461118f565b61095a336000356001600160e01b03191683610ddd565b61065785858585611550565b60008060008061097585611610565b805160208201516040909201519097919650945092505050565b610999828261169b565b6109b0336000356001600160e01b03191683610ddd565b61074083836116f5565b6109d0336000356001600160e01b0319166110c9565b60045460ff16156109f45760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610a3783838361173a565b610a4e336000356001600160e01b03191683610ddd565b610a598484846117cc565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af0919061441e565b92915050565b600054610100900460ff1615808015610b165750600054600160ff909116105b80610b305750303b158015610b30575060005460ff166001145b610ba75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610bca576000805461ff0019166101001790555b610bd382611822565b80156107b1576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610c2783838361173a565b610c3e336000356001600160e01b03191683610ddd565b610a59848484611894565b600080600080600080610c5b876118f0565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b610cc484848484610d32565b610cdb336000356001600160e01b03191683610ddd565b61065785858585611924565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610d1d57610d1d613ef1565b14610d29578015610d2b565b805b9392505050565b60408051600480825260a08201909252606091602082016080803683370190505090508481600081518110610d6957610d696143d9565b6020026020010181815250508381600181518110610d8957610d896143d9565b6020026020010181815250508281600281518110610da957610da96143d9565b6020026020010181815250508181600381518110610dc957610dc96143d9565b602002602001018181525050949350505050565b610de88383836119bf565b610740578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610b9e93929190614472565b60ff8416610ed5576000811180610e3b5750600082115b15610ed05782600003610e6d5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b9e565b801580610e7957508281115b15610ea357604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b9e565b81600003610ed057604051635686bf5960e11b815260ff8516600482015260248101839052604401610b9e565b611032565b82600003610f025760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b9e565b801580610f1a5750610f176224ea00846144a4565b81115b15610f4457604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b9e565b81600003610f7157604051635686bf5960e11b815260ff8516600482015260248101839052604401610b9e565b60001960ff851601610fb357601c610f8883611a5d565b1115610ed057604051635686bf5960e11b815260ff8516600482015260248101839052604401610b9e565b60011960ff851601610ffb57610fc882611a74565b610fd183611a5d565b14610ed057604051635686bf5960e11b815260ff8516600482015260248101839052604401610b9e565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610b9e565b8360ff16600281111561104757611047613ef1565b600a805460ff1916600183600281111561106357611063613ef1565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6040805160008152602081019091526107b19083908390610ddd565b6001600160a01b038216611125576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061113a57611135601083611a97565b611145565b611145601083611aac565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611183911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106111cf576111cf6143d9565b602002602001018181525050836001600160a01b031681600181518110610d8957610d896143d9565b6001600160a01b038416611238576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061125c90848484611ac1565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106112e7576112e76143d9565b602002602001018181525050919050565b600f805482919060ff19166001838181111561131657611316613ef1565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161134a9190613f07565b60405180910390a150565b6060610af0826001600160a01b03166112b1565b6001600160a01b0381166113a9576040517f2586ae9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546001600160a01b03908116908216036113fc576040517f2941c82e0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610b9e565b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f9d900d71c28433348acb1bec780a061608a96b149370abce77fd54ba2d47940190600090a250565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611490576114906143d9565b60200260200101818152505081816001815181106114b0576114b06143d9565b60200260200101818152505092915050565b6114cc8282611b9e565b6001600160a01b03821661150c576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000036107b1576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b18282611be4565b6001600160a01b038416611590576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206115b490848484611c0c565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611602929190918252602082015260400190565b60405180910390a350505050565b61163d604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b0380831660009081526015602052604090208054909116156116665780611669565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c816000815181106116d2576116d26143d9565b6020026020010181815250508160001c816001815181106114b0576114b06143d9565b8015611730576040517f9842f26f00000000000000000000000000000000000000000000000000000000815260048101829052602401610b9e565b6107b18282611d78565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611779576117796143d9565b6020026020010181815250508281600181518110611799576117996143d9565b60200260200101818152505081816002815181106117b9576117b96143d9565b6020026020010181815250509392505050565b6117d96016848484611c0c565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b600054610100900460ff1661187b5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6118888160200151611dfb565b61189181611eb1565b50565b6118a16012848484611ac1565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b60205260408120805491929091161561191b5780610d2b565b60169392505050565b670de0b6b3a7640000811115611966576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016110bb565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611a149087903090889088906004016144bb565b602060405180830381865afa158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a559190614501565b949350505050565b6000611a55611a6f6201518084614534565b611f15565b60008080611a88611a6f6201518086614534565b5091509150611a558282611fb1565b6000610d2b836001600160a01b038416612037565b6000610d2b836001600160a01b038416612131565b60006001600160a01b038416158015611ad8575082155b8015611ae2575081155b905060006001600160a01b03851615801590611b065750821580611b065750838310155b905081158015611b14575080155b15611b64576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b9e565b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03939093169290921783556001830155600290910155565b611ba88282612180565b611bb2828261218a565b611bbc82826121ae565b611bc682826122a2565b611bd08282612491565b611bda82826124db565b6107b182826125c8565b611bee82826126de565b611bf88282612780565b611c0282826127a2565b6107b182826129ec565b60006001600160a01b038416158015611c23575082155b8015611c2d575081155b905060006001600160a01b03851615801590611c495750600084115b8015611c555750600083115b905081158015611c63575080155b15611cb3576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b9e565b60038601839055600186018490558115611cda576000600287018190556004870155611d46565b8560040154600003611d015760006002870155611cf78342614548565b6004870155611d46565b85546001600160a01b03868116911614611d46578554600090611d2d906001600160a01b031687612a19565b6002880154909150611d3f9082612a25565b6002880155505b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0393909316929092179092555050565b8082148015611d8657508115155b15611dc0576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610b9e565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600054610100900460ff16611e545760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b8051611e5f90612a82565b611e67612b52565b611e748160200151612bb5565b611e818160400151612c17565b611e8e8160600151612c79565b611e9b8160800151612cdb565b611ea88160a00151612d3d565b61189181612d9f565b600054610100900460ff16611f0a5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b805161189190611369565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281611f7257611f7261451e565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480611fc25750816003145b80611fcd5750816005145b80611fd85750816007145b80611fe35750816008145b80611fee575081600a145b80611ff9575081600c145b156120065750601f610af0565b816002146120165750601e610af0565b61201f83612df8565b61202a57601c61202d565b601d5b60ff169392505050565b6000818152600183016020526040812054801561212057600061205b60018361455b565b855490915060009061206f9060019061455b565b90508181146120d457600086600001828154811061208f5761208f6143d9565b90600052602060002001549050808760000184815481106120b2576120b26143d9565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806120e5576120e561456e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610af0565b6000915050610af0565b5092915050565b600081815260018301602052604081205461217857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610af0565b506000610af0565b6107b18282612e34565b60045460ff16156107b15760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806121ed575081513a11155b9050806122325781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610b9e565b602082015115610a59576000612248483a61455b565b60208401519091508111158061229a5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610b9e918491600401918252602082015260400190565b505050505050565b600a54600b54600c54600e5460ff90931692428211156122de5760405163013ce60b60e01b815242600482015260248101839052604401610b9e565b60008460028111156122f2576122f2613ef1565b036123ab578260000361230757505050505050565b80600003612321576123198342614548565b600d5561229a565b600061232d834261455b565b9050600061233b8583614534565b9050600061234986836144a4565b612353908461455b565b90508381111561237f5760405163013ce60b60e01b815242600482015260248101869052604401610b9e565b8561238b836001614548565b61239591906144a4565b61239f9086614548565b600d555061229a915050565b8142101580156123c457506123c08183614548565b4211155b156123d3576123198284612ec9565b600060018560028111156123e9576123e9613ef1565b146123fc576123f742611a74565b612405565b61240583611a5d565b905060006124138483612f61565b90508042101561243f5760405163013ce60b60e01b815242600482015260248101829052604401610b9e565b600061244b8483614548565b905042811080156124785760405163013ce60b60e01b815242600482015260248101839052604401610b9e565b6124828388612ec9565b600d5550505050505050505050565b61249a82610ce7565b6107b1576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b9e565b60006124e683611610565b80519091506001600160a01b03166124fd57505050565b6000836001600160a01b031682600001516001600160a01b0316146125395761253461252d858460000151612a19565b8490612a25565b61253b565b825b9050600082602001518210158015612563575060408301511580612563575082604001518211155b905080610657578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610b9e565b60006125d3836118f0565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061262257505050565b6000836001600160a01b031682600001516001600160a01b0316146126575761265261252d858460000151612a19565b612659565b825b905060008260800151421061266f576000612675565b82604001515b61267f9083614548565b9050826020015181111561065757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610b9e565b60006126e9836118f0565b80549091506001600160a01b031661270057505050565b80546000906001600160a01b038581169116146127365781546127319061252d9086906001600160a01b0316612a19565b612738565b825b9050816004015442106127615760006002830155600382015461275b9042614548565b60048301555b808260020160008282546127759190614548565b909155505050505050565b600d5460000361278e575050565b612799600d54612f89565b50506000600d55565b6005546000036127de576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612817919061455b565b905060006128253a836144a4565b90506000836040015160001480612840575083604001518211155b90508061288a578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610b9e929190918252602082015260400190565b60006005556060840151158015906128a25750600085115b1561229a576000612975306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290e9190614584565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296f9190614584565b88612a19565b905060006129838483612fbe565b905060006129918289613030565b905086606001518111156129e15760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610b9e918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b6000610d2b83836130f9565b60008282028315801590612a48575082848281612a4457612a4461451e565b0414155b15612a7057604051637472527d60e11b81526004810185905260248101849052604401610b9e565b670de0b6b3a764000090049392505050565b600054610100900460ff16612adb5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b612b4981600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b449190614584565b6132ef565b61189181613351565b600054610100900460ff16612bab5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b612bb36133ec565b565b600054610100900460ff16612c0e5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b61189181613445565b600054610100900460ff16612c705760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b611891816134ba565b600054610100900460ff16612cd25760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6118918161352f565b600054610100900460ff16612d345760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b611891816135dd565b600054610100900460ff16612d965760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b611891816136bb565b600054610100900460ff166118915760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6000612e056004836145a1565b158015612e1b5750612e186064836145a1565b15155b80610af05750612e2d610190836145a1565b1592915050565b600254156107b1576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401600060405180830381600087803b158015612eb557600080fd5b505af115801561229a573d6000803e3d6000fd5b600080600080612ed886613799565b919450925090506000612eeb8684614548565b90506000612efa600c836145a1565b90506000612f09600c84614534565b612f139087614548565b905060006002600a5460ff166002811115612f3057612f30613ef1565b14612f3b5784612f45565b612f458284611fb1565b9050612f538a8385846137b8565b9a9950505050505050505050565b6000806000612f6f42613799565b5091509150612f80858383876137b8565b95945050505050565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161134a565b60008282028315801590612fe1575082848281612fdd57612fdd61451e565b0414155b1561300957604051637472527d60e11b81526004810185905260248101849052604401610b9e565b801561302657670de0b6b3a7640000600019820104600101611a55565b6000949350505050565b60008160000361306c576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361307c57506000610af0565b670de0b6b3a7640000838102908482816130985761309861451e565b04146130da576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610b9e565b8260018203816130ec576130ec61451e565b0460010191505092915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561314f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131739190614584565b90506001600160a01b0381166131c4576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b9e565b60006131ce6137e0565b9050805160001461325f57816001600160a01b031663355efdd96131f187613860565b6131fa87613860565b846040518463ffffffff1660e01b8152600401613219939291906145b5565b602060405180830381865afa158015613236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325a919061441e565b612f80565b816001600160a01b031663ac41865a61327787613860565b61328087613860565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156132cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f80919061441e565b600054610100900460ff166133485760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b61189181613894565b600054610100900460ff166133aa5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b80516001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556020810151604082015161189191906116f5565b600054610100900460ff16612bb35760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b600054610100900460ff1661349e5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6118918160000151826020015183604001518460600151611924565b600054610100900460ff166135135760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b6118918160000151826020015183604001518460600151610e24565b600054610100900460ff166135885760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b8051613593906112f8565b60005b8160200151518110156107b1576135cb826020015182815181106135bc576135bc6143d9565b602002602001015160016110e5565b806135d581614405565b915050613596565b600054610100900460ff166136365760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b805180516020820151604083015161364f929190611894565b60005b82602001515181101561074057600083602001518281518110613677576136776143d9565b602002602001015190506000816020015190506136a682600001518260000151836020015184604001516111f8565b505080806136b390614405565b915050613652565b600054610100900460ff166137145760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b805180516020820151604083015161372d9291906117cc565b60005b82602001515181101561074057600083602001518281518110613755576137556143d9565b602002602001015190506000816020015190506137848260000151826000015183602001518460400151611550565b5050808061379190614405565b915050613730565b600080806137ab620151808504611f15565b9196909550909350915050565b6000612f808484846137c98961392d565b6137d28a61394b565b6137db8b613967565b613974565b606060006137ec6139d0565b90503681111561380a57505060408051600081526020810190915290565b8067ffffffffffffffff81111561382357613823613c03565b6040519080825280601f01601f19166020018201604052801561384d576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0383161461388c5781610af0565b610af06139eb565b600054610100900460ff166138ed5760405162461bcd60e51b815260206004820152602b60248201526000805160206146c783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b9e565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008061393d62015180846145a1565b9050610d2b610e1082614534565b60008061395a610e10846145a1565b9050610d2b603c82614534565b6000610af0603c836145a1565b600081613982603c856144a4565b61398e610e10876144a4565b6201518061399d8b8b8b613a77565b6139a791906144a4565b6139b19190614548565b6139bb9190614548565b6139c59190614548565b979650505050505050565b600060243610156139e15750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015613a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a729190614584565b905090565b60006107b2841015613a8857600080fd5b838383600062253d8c60046064600c613aa2600e88614620565b613aac9190614640565b613ab88861132461466e565b613ac2919061466e565b613acc9190614640565b613ad7906003614696565b613ae19190614640565b600c80613aef600e88614620565b613af99190614640565b613b0490600c614696565b613b0f600288614620565b613b199190614620565b613b259061016f614696565b613b2f9190614640565b6004600c613b3e600e89614620565b613b489190614640565b613b54896112c061466e565b613b5e919061466e565b613b6a906105b5614696565b613b749190614640565b613b80617d4b87614620565b613b8a919061466e565b613b94919061466e565b613b9e9190614620565b613ba89190614620565b98975050505050505050565b803560ff81168114613bc557600080fd5b919050565b60008060008060808587031215613be057600080fd5b613be985613bb4565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3c57613c3c613c03565b60405290565b6040805190810167ffffffffffffffff81118282101715613c3c57613c3c613c03565b60405160c0810167ffffffffffffffff81118282101715613c3c57613c3c613c03565b604051601f8201601f1916810167ffffffffffffffff81118282101715613cb157613cb1613c03565b604052919050565b600067ffffffffffffffff821115613cd357613cd3613c03565b5060051b60200190565b6001600160a01b038116811461189157600080fd5b600082601f830112613d0357600080fd5b81356020613d18613d1383613cb9565b613c88565b82815260059290921b84018101918181019086841115613d3757600080fd5b8286015b84811015613d5b578035613d4e81613cdd565b8352918301918301613d3b565b509695505050505050565b801515811461189157600080fd5b60008060408385031215613d8757600080fd5b823567ffffffffffffffff80821115613d9f57600080fd5b613dab86838701613cf2565b9350602091508185013581811115613dc257600080fd5b85019050601f81018613613dd557600080fd5b8035613de3613d1382613cb9565b81815260059190911b82018301908381019088831115613e0257600080fd5b928401925b82841015613e29578335613e1a81613d66565b82529284019290840190613e07565b80955050505050509250929050565b600060208284031215613e4a57600080fd5b8135610d2b81613cdd565b60008060008060808587031215613e6b57600080fd5b8435613e7681613cdd565b93506020850135613e8681613cdd565b93969395505050506040820135916060013590565b803560028110613bc557600080fd5b600060208284031215613ebc57600080fd5b610d2b82613e9b565b60008060408385031215613ed857600080fd5b8235613ee381613cdd565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310613f2957634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613f4257600080fd5b50508035926020909101359150565b600080600060608486031215613f6657600080fd5b8335613f7181613cdd565b95602085013595506040909401359392505050565b600060608284031215613f9857600080fd5b6040516060810181811067ffffffffffffffff82111715613fbb57613fbb613c03565b6040529050808235613fcc81613cdd565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215613ffd57600080fd5b614005613c19565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b60006080828403121561404157600080fd5b614049613c19565b905061405482613bb4565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561408c57600080fd5b614094613c42565b905061409f82613e9b565b8152602082013567ffffffffffffffff8111156140bb57600080fd5b6140c784828501613cf2565b60208301525092915050565b6000608082840312156140e557600080fd5b6140ed613c42565b905081356140fa81613cdd565b81526141098360208401613f86565b602082015292915050565b6000608080838503121561412757600080fd5b61412f613c42565b915061413b8484613f86565b8252606083013567ffffffffffffffff81111561415757600080fd5b8301601f8101851361416857600080fd5b80356020614178613d1383613cb9565b82815260079290921b8301810191818101908884111561419757600080fd5b938201935b838510156141bd576141ae89866140d3565b8252938501939082019061419c565b808388015250505050505092915050565b600060808083850312156141e157600080fd5b6141e9613c42565b91506141f58484613f86565b8252606083013567ffffffffffffffff81111561421157600080fd5b8301601f8101851361422257600080fd5b80356020614232613d1383613cb9565b82815260079290921b8301810191818101908884111561425157600080fd5b938201935b838510156141bd5761426889866140d3565b82529385019390820190614256565b60006020828403121561428957600080fd5b813567ffffffffffffffff808211156142a157600080fd5b90830190604082860312156142b557600080fd5b6142bd613c42565b82356142c881613cdd565b81526020830135828111156142dc57600080fd5b92909201916101c083870312156142f257600080fd5b6142fa613c65565b6143048785613f86565b81526143138760608601613feb565b60208201526143258760e0860161402f565b60408201526101608401358381111561433d57600080fd5b6143498882870161407a565b6060830152506101808401358381111561436257600080fd5b61436e88828701614114565b6080830152506101a08401358381111561438757600080fd5b614393888287016141ce565b60a083015250602082015295945050505050565b600080600080608085870312156143bd57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614417576144176143ef565b5060010190565b60006020828403121561443057600080fd5b5051919050565b600081518084526020808501945080840160005b838110156144675781518752958201959082019060010161444b565b509495945050505050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000612f806060830184614437565b8082028115828204841417610af057610af06143ef565b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526144f76080830184614437565b9695505050505050565b60006020828403121561451357600080fd5b8151610d2b81613d66565b634e487b7160e01b600052601260045260246000fd5b6000826145435761454361451e565b500490565b80820180821115610af057610af06143ef565b81810381811115610af057610af06143ef565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561459657600080fd5b8151610d2b81613cdd565b6000826145b0576145b061451e565b500690565b60006001600160a01b038086168352602081861681850152606060408501528451915081606085015260005b828110156145fd578581018201518582016080015281016145e1565b50506000608082850101526080601f19601f830116840101915050949350505050565b818103600083128015838313168383128216171561212a5761212a6143ef565b60008261464f5761464f61451e565b600160ff1b821460001984141615614669576146696143ef565b500590565b808201828112600083128015821682158216171561468e5761468e6143ef565b505092915050565b80820260008212600160ff1b841416156146b2576146b26143ef565b8181058314821517610af057610af06143ef56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220118fe79050bffbb739355caa176823e48e979f1c8d37c524fcf30113e8b3d74164736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
