{
  "_format": "hh-sol-artifact-1",
  "contractName": "XVSProxyOFTSrc",
  "sourceName": "contracts/Bridge/XVSProxyOFTSrc.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress_",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "sharedDecimals_",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "lzEndpoint_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "oracle_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "sweepAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddressNotAllowed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_hash",
          "type": "bytes32"
        }
      ],
      "name": "CallOFTReceivedSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "srcChainId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "bytes",
          "name": "srcAddress",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }
      ],
      "name": "DropFailedMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount_",
          "type": "uint256"
        }
      ],
      "name": "FallbackDeposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "FallbackWithdraw",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "innerToken",
          "type": "address"
        }
      ],
      "name": "InnerTokenAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_reason",
          "type": "bytes"
        }
      ],
      "name": "MessageFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "NonContractAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOracle",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOracle",
          "type": "address"
        }
      ],
      "name": "OracleChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "ReceiveFromChain",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_payloadHash",
          "type": "bytes32"
        }
      ],
      "name": "RetryMessageSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_toAddress",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "SendToChain",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "chainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMaxLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newMaxLimit",
          "type": "uint256"
        }
      ],
      "name": "SetMaxDailyLimit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "chainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMaxLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newMaxLimit",
          "type": "uint256"
        }
      ],
      "name": "SetMaxDailyReceiveLimit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "chainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMaxLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newMaxLimit",
          "type": "uint256"
        }
      ],
      "name": "SetMaxSingleReceiveTransactionLimit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "chainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMaxLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newMaxLimit",
          "type": "uint256"
        }
      ],
      "name": "SetMaxSingleTransactionLimit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_type",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_minDstGas",
          "type": "uint256"
        }
      ],
      "name": "SetMinDstGas",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "precrime",
          "type": "address"
        }
      ],
      "name": "SetPrecrime",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_path",
          "type": "bytes"
        }
      ],
      "name": "SetTrustedRemote",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_remoteAddress",
          "type": "bytes"
        }
      ],
      "name": "SetTrustedRemoteAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isWhitelist",
          "type": "bool"
        }
      ],
      "name": "SetWhitelist",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sweepAmount",
          "type": "uint256"
        }
      ],
      "name": "SweepToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "chainId",
          "type": "uint16"
        }
      ],
      "name": "TrustedRemoteRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "UpdateSendAndCallEnabled",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_PAYLOAD_SIZE_LIMIT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "NO_EXTRA_GAS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PT_SEND",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PT_SEND_AND_CALL",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes32",
          "name": "_from",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_gasForCall",
          "type": "uint256"
        }
      ],
      "name": "callOnOFTReceived",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "chainIdToLast24HourReceiveWindowStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "chainIdToLast24HourReceived",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "chainIdToLast24HourTransferred",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "chainIdToLast24HourWindowStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "chainIdToMaxDailyLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "chainIdToMaxDailyReceiveLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "chainIdToMaxSingleReceiveTransactionLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "chainIdToMaxSingleTransactionLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "circulatingSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "name": "creditedPackets",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "srcChainId_",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "srcAddress_",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "nonce_",
          "type": "uint64"
        }
      ],
      "name": "dropFailedMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes32",
          "name": "_toAddress",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_dstGasForCall",
          "type": "uint64"
        },
        {
          "internalType": "bool",
          "name": "_useZro",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "_adapterParams",
          "type": "bytes"
        }
      ],
      "name": "estimateSendAndCallFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "nativeFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "zroFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes32",
          "name": "_toAddress",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_useZro",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "_adapterParams",
          "type": "bytes"
        }
      ],
      "name": "estimateSendFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "nativeFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "zroFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "name": "failedMessages",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "depositor_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount_",
          "type": "uint256"
        }
      ],
      "name": "fallbackDeposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount_",
          "type": "uint256"
        }
      ],
      "name": "fallbackWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        }
      ],
      "name": "forceResumeReceive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_chainId",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_configType",
          "type": "uint256"
        }
      ],
      "name": "getConfig",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        }
      ],
      "name": "getTrustedRemoteAddress",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from_",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "dstChainId_",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "amount_",
          "type": "uint256"
        }
      ],
      "name": "isEligibleToSend",
      "outputs": [
        {
          "internalType": "bool",
          "name": "eligibleToSend",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "maxSingleTransactionLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxDailyLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInUsd",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "transferredInWindow",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "last24HourWindowStart",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isWhiteListedUser",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        }
      ],
      "name": "isTrustedRemote",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lzEndpoint",
      "outputs": [
        {
          "internalType": "contract ILayerZeroEndpoint",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "minDstGasLookup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "nonblockingLzReceive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract ResilientOracleInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "outboundAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "payloadSizeLimitLookup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "precrime",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "remoteChainId_",
          "type": "uint16"
        }
      ],
      "name": "removeTrustedRemote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "retryMessage",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from_",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "dstChainId_",
          "type": "uint16"
        },
        {
          "internalType": "bytes32",
          "name": "toAddress_",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "amount_",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "payload_",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "dstGasForCall_",
          "type": "uint64"
        },
        {
          "components": [
            {
              "internalType": "address payable",
              "name": "refundAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "zroPaymentAddress",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "adapterParams",
              "type": "bytes"
            }
          ],
          "internalType": "struct ICommonOFT.LzCallParams",
          "name": "callparams_",
          "type": "tuple"
        }
      ],
      "name": "sendAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "sendAndCallEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes32",
          "name": "_toAddress",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address payable",
              "name": "refundAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "zroPaymentAddress",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "adapterParams",
              "type": "bytes"
            }
          ],
          "internalType": "struct ICommonOFT.LzCallParams",
          "name": "_callParams",
          "type": "tuple"
        }
      ],
      "name": "sendFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_chainId",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "_configType",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_config",
          "type": "bytes"
        }
      ],
      "name": "setConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "chainId_",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "limit_",
          "type": "uint256"
        }
      ],
      "name": "setMaxDailyLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "chainId_",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "limit_",
          "type": "uint256"
        }
      ],
      "name": "setMaxDailyReceiveLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "chainId_",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "limit_",
          "type": "uint256"
        }
      ],
      "name": "setMaxSingleReceiveTransactionLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "chainId_",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "limit_",
          "type": "uint256"
        }
      ],
      "name": "setMaxSingleTransactionLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_packetType",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "_minGas",
          "type": "uint256"
        }
      ],
      "name": "setMinDstGas",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "oracleAddress_",
          "type": "address"
        }
      ],
      "name": "setOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "_size",
          "type": "uint256"
        }
      ],
      "name": "setPayloadSizeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_precrime",
          "type": "address"
        }
      ],
      "name": "setPrecrime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        }
      ],
      "name": "setReceiveVersion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        }
      ],
      "name": "setSendVersion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_path",
          "type": "bytes"
        }
      ],
      "name": "setTrustedRemote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_remoteAddress",
          "type": "bytes"
        }
      ],
      "name": "setTrustedRemoteAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user_",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "val_",
          "type": "bool"
        }
      ],
      "name": "setWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "sharedDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount_",
          "type": "uint256"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "trustedRemoteLookup",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "enabled_",
          "type": "bool"
        }
      ],
      "name": "updateSendAndCallEnabled",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "whitelist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x61010060405234801561001157600080fd5b506040516164b83803806164b8833981016040819052610030916102f4565b6000805460ff191690558383838382828181808061004d3361022b565b6001600160a01b0316608052505060ff1660a0525061006d905084610284565b61007682610284565b61007f81610284565b6001600160a01b03841660c081905260408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1790529051600092839290916100c9919061039e565b600060405180830381855afa9150503d8060008114610104576040519150601f19603f3d011682016040523d82523d6000602084013e610109565b606091505b5091509150816101345760405162461bcd60e51b815260040161012b906103f7565b60405180910390fd5b60008180602001905181019061014a9190610407565b90508060ff168660ff1611156101725760405162461bcd60e51b815260040161012b90610479565b61017c868261049f565b61018790600a6105ca565b60e0526040516001600160a01b038816907f0b673f021ff9a27bbe58f282908695869e130b3103029190387b83650806c2c390600090a26040516001600160a01b038516906000907f05cd89403c6bdeac21c2ff33de395121a31fa1bc2bf3adf4825f1f86e79969dd908290a35050600780546001600160a01b0390931661010002610100600160a81b031990931692909217909155506105df9650505050505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6001600160a01b0381166102ab576040516342bcdf7f60e11b815260040160405180910390fd5b50565b60006001600160a01b0382165b92915050565b6102ca816102ae565b81146102ab57600080fd5b80516102bb816102c1565b60ff81166102ca565b80516102bb816102e0565b6000806000806080858703121561030d5761030d600080fd5b600061031987876102d5565b945050602061032a878288016102e9565b935050604061033b878288016102d5565b925050606061034c878288016102d5565b91505092959194509250565b60005b8381101561037357818101518382015260200161035b565b50506000910152565b6000610386825190565b610394818560208601610358565b9290920192915050565b60006103aa828461037c565b9392505050565b602681526000602082017f50726f78794f46543a206661696c656420746f2067657420746f6b656e20646581526563696d616c7360d01b602082015291505b5060400190565b602080825281016102bb816103b1565b60006020828403121561041c5761041c600080fd5b600061042884846102e9565b949350505050565b602c81526000602082017f50726f78794f46543a20736861726564446563696d616c73206d75737420626581526b203c3d20646563696d616c7360a01b602082015291506103f0565b602080825281016102bb81610430565b634e487b7160e01b600052601160045260246000fd5b60ff9182169190811690828203908111156102bb576102bb610489565b80825b60018511156104fb578086048111156104da576104da610489565b60018516156104e857908102905b80026104f48560011c90565b94506104bf565b94509492505050565b600082610513575060016103aa565b81610520575060006103aa565b816001811461053657600281146105405761056d565b60019150506103aa565b60ff84111561055157610551610489565b8360020a91508482111561056757610567610489565b506103aa565b5060208310610133831016604e8410600b84101617156105a0575081810a8381111561059b5761059b610489565b6103aa565b6105ad84848460016104bc565b925090508184048111156105c3576105c3610489565b0292915050565b600060ff831692506103aa6000198484610504565b60805160a05160c05160e051615e1b61069d600039600081816126bf015281816126fe0152612e9b015260008181610ce40152818161108801528181611b980152818161251f015281816125b4015281816125ed0152818161262e015281816138370152613b3b015260006108e2015260008181610b0101528181610d3801528181610f5101528181610ff9015281816113e601528181611e90015281816122a60152818161242301528181612a9c01526134d60152615e1b6000f3fe6080604052600436106103d85760003560e01c80637dc0d1d0116101fd578063b353aaa711610118578063d708a468116100ab578063eb8d72b71161007a578063eb8d72b714610c75578063f2fde38b14610c95578063f5ecbdbc14610cb5578063fc0c546a14610cd5578063fdff235b14610d0857600080fd5b8063d708a46814610bf3578063df2a5b3b14610c20578063e6a20ae614610c40578063eaffd49a14610c5557600080fd5b8063cbed8b9c116100e7578063cbed8b9c14610b73578063cc01e9b614610b93578063cc7015ae14610bb3578063d1deba1f14610be057600080fd5b8063b353aaa714610aef578063baf3292d14610b23578063c1e9132e14610b43578063c446183414610b5d57600080fd5b806393a61d6c116101905780639bdb98121161015f5780639bdb981214610a3d5780639f38369a14610a8f578063a4c51df514610aaf578063a6c3d16514610acf57600080fd5b806393a61d6c146109aa578063950c8a74146109d75780639689cb05146109f75780639b19251a14610a0d57600080fd5b80638cfd8f5c116101cc5780638cfd8f5c146109045780638da5cb5b1461093c57806390436567146109685780639358928b1461099557600080fd5b80637dc0d1d0146108695780638456cb591461089b57806384e69c69146108b0578063857749b0146108d057600080fd5b80634be66720116102f85780635c975abb1161028b57806369c1e7b81161025a57806369c1e7b8146107dd578063715018a6146107fd5780637533d7881461080957806376203b48146108365780637adbf9731461084957600080fd5b80635c975abb1461077257806364aff9ec1461078a57806366ad5c8a146107aa578063695ef6bf146107ca57600080fd5b80634f4ba0f4116102c75780634f4ba0f4146106b657806353489d6c146106e357806353d6fd59146107035780635b8c41e61461072357600080fd5b80634be66720146106275780634c42899a146106475780634cec6256146106695780634ed2c6621461069657600080fd5b8063365260b4116103705780633f4ba83a1161033f5780633f4ba83a146105bd57806342d65a8d146105d257806344770515146105f257806348e4a04a1461060757600080fd5b8063365260b4146105085780633c4ec39b146105365780633d8b38f6146105705780633f1f4fa41461059057600080fd5b806310ddb137116103ac57806310ddb13714610475578063182b4b89146104955780632488eec8146104c85780632dbbec08146104e857600080fd5b80621d3567146103dd57806301ffc9a7146103ff57806307e0db17146104355780630df3748314610455575b600080fd5b3480156103e957600080fd5b506103fd6103f8366004613e0a565b610d35565b005b34801561040b57600080fd5b5061041f61041a366004613ec5565b610efb565b60405161042c9190613ef0565b60405180910390f35b34801561044157600080fd5b506103fd610450366004613efe565b610f32565b34801561046157600080fd5b506103fd610470366004613f30565b610fbb565b34801561048157600080fd5b506103fd610490366004613efe565b610fda565b3480156104a157600080fd5b506104b56104b0366004613f92565b61102e565b60405161042c9796959493929190613fe8565b3480156104d457600080fd5b506103fd6104e3366004613f30565b611193565b3480156104f457600080fd5b506103fd610503366004613efe565b611235565b34801561051457600080fd5b50610528610523366004614063565b611293565b60405161042c9291906140dd565b34801561054257600080fd5b50610563610551366004613efe565b600d6020526000908152604090205481565b60405161042c91906140f8565b34801561057c57600080fd5b5061041f61058b366004614106565b6112e8565b34801561059c57600080fd5b506105636105ab366004613efe565b60036020526000908152604090205481565b3480156105c957600080fd5b506103fd6113b5565b3480156105de57600080fd5b506103fd6105ed366004614106565b6113c7565b3480156105fe57600080fd5b50610563600081565b34801561061357600080fd5b506103fd610622366004614161565b61144d565b34801561063357600080fd5b506103fd610642366004614161565b6114d1565b34801561065357600080fd5b5061065c600081565b60405161042c919061418c565b34801561067557600080fd5b50610563610684366004613efe565b600a6020526000908152604090205481565b3480156106a257600080fd5b506103fd6106b136600461419a565b611588565b3480156106c257600080fd5b506105636106d1366004613efe565b60096020526000908152604090205481565b3480156106ef57600080fd5b506103fd6106fe366004613f30565b6115cd565b34801561070f57600080fd5b506103fd61071e3660046141bb565b61166f565b34801561072f57600080fd5b5061056361073e3660046142e7565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561077e57600080fd5b5060005460ff1661041f565b34801561079657600080fd5b506103fd6107a5366004614366565b6116e3565b3480156107b657600080fd5b506103fd6107c5366004613e0a565b6117e7565b6103fd6107d83660046143b6565b611884565b3480156107e957600080fd5b506103fd6107f8366004613f30565b6118ef565b3480156103fd57600080fd5b34801561081557600080fd5b50610829610824366004613efe565b611991565b60405161042c91906144a0565b6103fd6108443660046144b1565b611a2b565b34801561085557600080fd5b506103fd610864366004614588565b611a67565b34801561087557600080fd5b5060075461088e9061010090046001600160a01b031681565b60405161042c91906145eb565b3480156108a757600080fd5b506103fd611adf565b3480156108bc57600080fd5b506103fd6108cb3660046142e7565b611aef565b3480156108dc57600080fd5b5061065c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561091057600080fd5b5061056361091f3660046145f9565b600260209081526000928352604080842090915290825290205481565b34801561094857600080fd5b5060005461010090046001600160a01b03165b60405161042c9190614635565b34801561097457600080fd5b50610563610983366004613efe565b600c6020526000908152604090205481565b3480156109a157600080fd5b50610563611b91565b3480156109b657600080fd5b506105636109c5366004613efe565b600b6020526000908152604090205481565b3480156109e357600080fd5b5060045461095b906001600160a01b031681565b348015610a0357600080fd5b5061056360115481565b348015610a1957600080fd5b5061041f610a28366004614588565b60106020526000908152604090205460ff1681565b348015610a4957600080fd5b5061041f610a583660046142e7565b6006602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205460ff1681565b348015610a9b57600080fd5b50610829610aaa366004613efe565b611c27565b348015610abb57600080fd5b50610528610aca366004614643565b611d06565b348015610adb57600080fd5b506103fd610aea366004614106565b611d95565b348015610afb57600080fd5b5061088e7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b2f57600080fd5b506103fd610b3e366004614588565b611e1e565b348015610b4f57600080fd5b5060075461041f9060ff1681565b348015610b6957600080fd5b5061056361271081565b348015610b7f57600080fd5b506103fd610b8e36600461471e565b611e71565b348015610b9f57600080fd5b506103fd610bae366004613f30565b611f06565b348015610bbf57600080fd5b50610563610bce366004613efe565b60086020526000908152604090205481565b6103fd610bee366004613e0a565b611fa8565b348015610bff57600080fd5b50610563610c0e366004613efe565b600e6020526000908152604090205481565b348015610c2c57600080fd5b506103fd610c3b3660046147a1565b6120ac565b348015610c4c57600080fd5b5061065c600181565b348015610c6157600080fd5b506103fd610c703660046147c5565b61210b565b348015610c8157600080fd5b506103fd610c90366004614106565b6121f8565b348015610ca157600080fd5b506103fd610cb0366004614588565b612252565b348015610cc157600080fd5b50610829610cd03660046148b5565b61228c565b348015610ce157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061095b565b348015610d1457600080fd5b50610563610d23366004613efe565b600f6020526000908152604090205481565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610d865760405162461bcd60e51b8152600401610d7d90614950565b60405180910390fd5b61ffff861660009081526001602052604081208054610da490614976565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd090614976565b8015610e1d5780601f10610df257610100808354040283529160200191610e1d565b820191906000526020600020905b815481529060010190602001808311610e0057829003601f168201915b50505050509050805186869050148015610e38575060008151115b8015610e60575080516020820120604051610e5690889088906149af565b6040518091039020145b610e7c5760405162461bcd60e51b8152600401610d7d90614a02565b610ef28787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061233192505050565b50505050505050565b60006001600160e01b03198216631f7ecdf760e01b1480610f2c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610f3a6123aa565b6040516307e0db1760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906307e0db1790610f86908490600401614a1c565b600060405180830381600087803b158015610fa057600080fd5b505af1158015610fb4573d6000803e3d6000fd5b5050505050565b610fc36123aa565b61ffff909116600090815260036020526040902055565b610fe26123aa565b6040516310ddb13760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906310ddb13790610f86908490600401614a1c565b6001600160a01b038381166000908152601060209081526040808320548151928301918290526007546341976e0960e01b90925292938493849384938493849360ff16928492909182916101009004166341976e096110b07f000000000000000000000000000000000000000000000000000000000000000060248501614635565b602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190614a35565b905290506110ff818a6123da565b61ffff8b166000908152600b6020908152604080832054600a835281842054600884528285205460099094529190932054919a509098509196509094509250426201518061114d8583614a6c565b111561115e5785945080935061116b565b6111688686614a7f565b94505b828061118257508786111580156111825750868511155b985050509397509397509397909450565b61119b6123aa565b61ffff82166000908152600860205260409020548110156111ce5760405162461bcd60e51b8152600401610d7d90614ad5565b61ffff8216600090815260096020526040908190205490517f4dd31065e259d5284e44d1f9265710da72eafcf78dc925e3881189fc3b71f69391611216918591908590614ae5565b60405180910390a161ffff909116600090815260096020526040902055565b61123d6123aa565b61ffff8116600090815260016020526040812061125991613d35565b7f6d5075c81d4d9e75bec6052f4e44f58f8a8cf1327544addbbf015fb06f83bd37816040516112889190614a1c565b60405180910390a150565b6000806112d98888888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123f292505050565b91509150965096945050505050565b61ffff83166000908152600160205260408120805482919061130990614976565b80601f016020809104026020016040519081016040528092919081815260200182805461133590614976565b80156113825780601f1061135757610100808354040283529160200191611382565b820191906000526020600020905b81548152906001019060200180831161136557829003601f168201915b5050505050905083836040516113999291906149af565b60405180910390208180519060200120149150505b9392505050565b6113bd6123aa565b6113c56124af565b565b6113cf6123aa565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d9061141f90869086908690600401614b30565b600060405180830381600087803b15801561143957600080fd5b505af1158015610ef2573d6000803e3d6000fd5b6114556123aa565b8060115410156114775760405162461bcd60e51b8152600401610d7d90614ba1565b60118054829003905561148b3083836124fb565b50816001600160a01b03167f22fe8e8ead80ad0961d77107e806ba9bcf9ca3b175a9d446145646d39c36ab96826040516114c591906140f8565b60405180910390a25050565b6114d96123aa565b60006114e4826126b7565b50905080601160008282546114f99190614a7f565b90915550600090506115116001600160401b036126f7565b90506011548110156115355760405162461bcd60e51b8152600401610d7d90614bef565b6115408430846124fb565b50836001600160a01b03167f5e6172210489e8382b0281a3e17233598e143c96f8ac1f90923540b554cea1128360405161157a91906140f8565b60405180910390a250505050565b6115906123aa565b6007805460ff19168215159081179091556040517fe628f01c6f4e6340598d3a2913390db68e8859379eebff349e170f2b16baed0090600090a250565b6115d56123aa565b61ffff82166000908152600960205260409020548111156116085760405162461bcd60e51b8152600401610d7d90614c42565b61ffff8216600090815260086020526040908190205490517f7babeac42ccbb33537ee421fedc4db7b5f251b5d2a3fa5c0ff4b35b2d783be8791611650918591908590614ae5565b60405180910390a161ffff909116600090815260086020526040902055565b6116776123aa565b816001600160a01b03167ff6019ec0a78d156d249a1ec7579e2321f6ac7521d6e1d2eacf90ba4a184dcceb826040516116b09190613ef0565b60405180910390a26001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6116eb6123aa565b6040516370a0823160e01b81526000906001600160a01b038516906370a082319061171a903090600401614635565b602060405180830381865afa158015611737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175b9190614a35565b90508082111561178257818160405163cf47918160e01b8152600401610d7d9291906140dd565b826001600160a01b0316846001600160a01b03167f6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d5846040516117c591906140f8565b60405180910390a36117e16001600160a01b038516848461272c565b50505050565b3330146118065760405162461bcd60e51b8152600401610d7d90614c95565b61187c8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061278792505050565b505050505050565b61187c858585856118986020870187614588565b6118a86040880160208901614588565b6118b56040890189614ca5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127de92505050565b6118f76123aa565b61ffff82166000908152600c602052604090205481101561192a5760405162461bcd60e51b8152600401610d7d90614d4e565b61ffff82166000908152600d6020526040908190205490517f95dc51094cd27cf4ee3fd0dbb50cf96f8df1629c822f5434c4a34d7eb03c972491611972918591908590614ae5565b60405180910390a161ffff9091166000908152600d6020526040902055565b600160205260009081526040902080546119aa90614976565b80601f01602080910402602001604051908101604052809291908181526020018280546119d690614976565b8015611a235780601f106119f857610100808354040283529160200191611a23565b820191906000526020600020905b815481529060010190602001808311611a0657829003601f168201915b505050505081565b60075460ff16611a4d5760405162461bcd60e51b8152600401610d7d90614d92565b611a5d8888888888888888612898565b5050505050505050565b611a6f6123aa565b611a788161293c565b6007546040516001600160a01b0380841692610100900416907f05cd89403c6bdeac21c2ff33de395121a31fa1bc2bf3adf4825f1f86e79969dd90600090a3600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b611ae76123aa565b6113c5612963565b611af76123aa565b61ffff83166000908152600560205260408082209051611b18908590614dc4565b9081526040805191829003602090810183206001600160401b038616600090815291522091909155611b4b908390614dc4565b60405180910390207f48a980eea4ea1c540209e2f9f32a4c2edf51fab37b1d21f453868301ecb6e2ee8483604051611b84929190614ddf565b60405180910390a2505050565b60006011547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c189190614a35565b611c229190614a6c565b905090565b61ffff8116600090815260016020526040812080546060929190611c4a90614976565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7690614976565b8015611cc35780601f10611c9857610100808354040283529160200191611cc3565b820191906000526020600020905b815481529060010190602001808311611ca657829003601f168201915b505050505090508051600003611ceb5760405162461bcd60e51b8152600401610d7d90614e2e565b6113ae600060148351611cfe9190614a6c565b8391906129a0565b600080611d838b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c9081908401838280828437600092019190915250612a6892505050565b91509150995099975050505050505050565b611d9d6123aa565b818130604051602001611db293929190614e66565b60408051601f1981840301815291815261ffff8516600090815260016020522090611ddd9082614f1b565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611e1193929190614b30565b60405180910390a1505050565b611e266123aa565b600480546001600160a01b0319166001600160a01b0383161790556040517f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b90611288908390614635565b611e796123aa565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c90611ecd9088908890889088908890600401614fdd565b600060405180830381600087803b158015611ee757600080fd5b505af1158015611efb573d6000803e3d6000fd5b505050505050505050565b611f0e6123aa565b61ffff82166000908152600d6020526040902054811115611f415760405162461bcd60e51b8152600401610d7d90615063565b61ffff82166000908152600c6020526040908190205490517f2c42997a938a029910a78e7c28d762b349c28e70f3a89c1fbccbb1a46020b15991611f89918591908590614ae5565b60405180910390a161ffff9091166000908152600c6020526040902055565b61ffff861660009081526001602052604081208054611fc690614976565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff290614976565b801561203f5780601f106120145761010080835404028352916020019161203f565b820191906000526020600020905b81548152906001019060200180831161202257829003601f168201915b5050505050905080518686905014801561205a575060008151115b801561208257508051602082012060405161207890889088906149af565b6040518091039020145b61209e5760405162461bcd60e51b8152600401610d7d90614a02565b610ef2878787878787612b2a565b6120b46123aa565b61ffff80841660009081526002602090815260408083209386168352929052819020829055517f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090611e1190859085908590615073565b33301461212a5760405162461bcd60e51b8152600401610d7d906150c2565b6121353086866124fb565b9350846001600160a01b03168a61ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf8660405161217591906140f8565b60405180910390a3604051633fe79aed60e11b81526001600160a01b03861690637fcf35da9083906121b9908e908e908e908e908e908d908d908d906004016150d2565b600060405180830381600088803b1580156121d357600080fd5b5087f11580156121e7573d6000803e3d6000fd5b505050505050505050505050505050565b6122006123aa565b61ffff8316600090815260016020526040902061221e82848361513d565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611e1193929190614b30565b61225a6123aa565b6001600160a01b0381166122805760405162461bcd60e51b8152600401610d7d90615242565b61228981612cca565b50565b604051633d7b2f6f60e21b81526060906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5ecbdbc906122e1908890889030908890600401615252565b600060405180830381865afa1580156122fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261232691908101906152df565b90505b949350505050565b6000806123945a60966366ad5c8a60e01b898989896040516024016123599493929190615319565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915230929190612d23565b915091508161187c5761187c8686868685612dad565b6000546001600160a01b036101009091041633146113c55760405162461bcd60e51b8152600401610d7d90615396565b6000806123e78484612e4a565b905061232981612e7b565b60008060006124098761240488612e93565b612ee9565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090612460908b90309086908b908b906004016153a6565b6040805180830381865afa15801561247c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a091906153f4565b92509250509550959350505050565b6124b7612f18565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516124f19190614635565b60405180910390a1565b6000612505612f3a565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190612554908790600401614635565b602060405180830381865afa158015612571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125959190614a35565b9050306001600160a01b038616036125e0576125db6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858561272c565b612615565b6126156001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868686612f5d565b6040516370a0823160e01b815281906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190612663908890600401614635565b602060405180830381865afa158015612680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a49190614a35565b6126ae9190614a6c565b95945050505050565b6000806126e47f00000000000000000000000000000000000000000000000000000000000000008461543d565b90506126f08184614a6c565b9150915091565b6000610f2c7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416615451565b6127828363a9059cbb60e01b848460405160240161274b929190615470565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f7e565b505050565b60006127938282613010565b905060ff81166127ae576127a985858585613046565b610fb4565b60001960ff8216016127c6576127a9858585856130d4565b60405162461bcd60e51b8152600401610d7d906154b2565b60006127ec878284816132dd565b6127f5856126b7565b50905061280488888884613352565b9050600081116128265760405162461bcd60e51b8152600401610d7d906154f6565b60006128358761240484612e93565b90506128458882878787346133f6565b86896001600160a01b03168961ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a8560405161288491906140f8565b60405180910390a450979650505050505050565b611efb8888888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92506128e59150506020890189614588565b6128f560408a0160208b01614588565b61290260408b018b614ca5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061355292505050565b6001600160a01b038116612289576040516342bcdf7f60e11b815260040160405180910390fd5b61296b612f3a565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124e43390565b6060816129ae81601f614a7f565b10156129cc5760405162461bcd60e51b8152600401610d7d9061552b565b6129d68284614a7f565b845110156129f65760405162461bcd60e51b8152600401610d7d90615563565b606082158015612a155760405191506000825260208201604052612a5f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612a4e578051835260209283019201612a36565b5050858452601f01601f1916604052505b50949350505050565b6000806000612a82338a612a7b8b612e93565b8a8a613619565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090612ad9908d90309086908b908b906004016153a6565b6040805180830381865afa158015612af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1991906153f4565b925092505097509795505050505050565b61ffff86166000908152600560205260408082209051612b4d90889088906149af565b90815260408051602092819003830190206001600160401b03871660009081529252902054905080612b915760405162461bcd60e51b8152600401610d7d906155b3565b808383604051612ba29291906149af565b604051809103902014612bc75760405162461bcd60e51b8152600401610d7d90615601565b61ffff87166000908152600560205260408082209051612bea90899089906149af565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252612c82918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061278792505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051612cb9959493929190615611565b60405180910390a150505050505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6000606060008060008661ffff166001600160401b03811115612d4857612d486141ee565b6040519080825280601f01601f191660200182016040528015612d72576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115612d94578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff16815260200190815260200160002085604051612dde9190614dc4565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c90612e3b908790879087908790879061564e565b60405180910390a15050505050565b6040805160208101909152600081526040518060200160405280612e7285600001518561365a565b90529392505050565b8051600090610f2c90670de0b6b3a7640000906156a3565b600080612ec07f0000000000000000000000000000000000000000000000000000000000000000846156a3565b90506001600160401b03811115610f2c5760405162461bcd60e51b8152600401610d7d906156eb565b606060008383604051602001612f0193929190615731565b604051602081830303815290604052905092915050565b60005460ff166113c55760405162461bcd60e51b8152600401610d7d90615793565b60005460ff16156113c55760405162461bcd60e51b8152600401610d7d906157ca565b6117e1846323b872dd60e01b85858560405160240161274b939291906157da565b6000612fd3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136669092919063ffffffff16565b9050805160001480612ff4575080806020019051810190612ff49190615800565b6127825760405162461bcd60e51b8152600401610d7d90615868565b600061301d826001614a7f565b8351101561303d5760405162461bcd60e51b8152600401610d7d906158a2565b50016001015190565b60008061305283613675565b90925090506001600160a01b03821661306b5761dead91505b6000613076826126f7565b90506130838784836136cf565b9050826001600160a01b03168761ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf836040516130c391906140f8565b60405180910390a350505050505050565b60008060008060006130e58661371d565b945094509450945094506000600660008b61ffff1661ffff1681526020019081526020016000208960405161311a9190614dc4565b90815260408051602092819003830190206001600160401b038b166000908152925281205460ff16915061314d856126f7565b9050816131bb5761315f8b30836136cf565b61ffff8c16600090815260066020526040908190209051919250600191613187908d90614dc4565b90815260408051602092819003830190206001600160401b038d16600090815292529020805460ff19169115159190911790555b6001600160a01b0386163b61320d577f9aedf5fdba8716db3b6705ca00150643309995d4f818a249ed6dde6677e7792d866040516131f99190614635565b60405180910390a1505050505050506117e1565b8a8a8a8a8a8a868a60008a61322b578b6001600160401b031661322d565b5a5b905060008061325f5a609663eaffd49a60e01b8e8e8e8d8d8d8d8d6040516024016123599897969594939291906158b2565b9150915081156132b8578751602089012060405161ffff8d16907fb8890edbfc1c74692f527444645f95489c3703cc2df42e4a366f5d06fa6cd884906132aa908e908e908690615937565b60405180910390a2506132c5565b6132c58b8b8b8b85612dad565b50505050505050505050505050505050505050505050565b60006132e8836137a9565b61ffff808716600090815260026020908152604080832093891683529290522054909150806133295760405162461bcd60e51b8152600401610d7d9061598b565b6133338382614a7f565b82101561187c5760405162461bcd60e51b8152600401610d7d906159cf565b600061335c612f3a565b6001600160a01b03851633146133845760405162461bcd60e51b8152600401610d7d90615a1e565b61338f8585846137d5565b600061339c8630856124fb565b905080601160008282546133b09190614a7f565b90915550600090506133c86001600160401b036126f7565b90506011548110156133ec5760405162461bcd60e51b8152600401610d7d90614bef565b5095945050505050565b61ffff86166000908152600160205260408120805461341490614976565b80601f016020809104026020016040519081016040528092919081815260200182805461344090614976565b801561348d5780601f106134625761010080835404028352916020019161348d565b820191906000526020600020905b81548152906001019060200180831161347057829003601f168201915b5050505050905080516000036134b55760405162461bcd60e51b8152600401610d7d90615a7b565b6134c0878751613989565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5803100908490613517908b9086908c908c908c908c90600401615a8b565b6000604051808303818588803b15801561353057600080fd5b505af1158015613544573d6000803e3d6000fd5b505050505050505050505050565b600061356a896001846001600160401b0389166132dd565b613573876126b7565b5090506135828a8a8a84613352565b9050600081116135a45760405162461bcd60e51b8152600401610d7d906154f6565b60006135b4338a612a7b85612e93565b90506135c48a82878787346133f6565b888b6001600160a01b03168b61ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a8560405161360391906140f8565b60405180910390a4509998505050505050505050565b6060600185856001600160a01b038916858760405160200161364096959493929190615aed565b604051602081830303815290604052905095945050505050565b60006113ae8284615451565b606061232984846000856139ca565b600080806136838482613010565b60ff16148015613694575082516029145b6136b05760405162461bcd60e51b8152600401610d7d90615b7d565b6136bb83600d613a66565b91506136c8836021613aa3565b9050915091565b60006136d9612f3a565b6136e4838584613ad9565b81601160008282546136f69190614a6c565b9091555050306001600160a01b038416036137125750806113ae565b6123293084846124fb565b6000808060608160016137308783613010565b60ff16146137505760405162461bcd60e51b8152600401610d7d90615b7d565b61375b86600d613a66565b9350613768866021613aa3565b9250613775866029613c8d565b9450613782866049613aa3565b905061379e60518088516137969190614a6c565b8891906129a0565b915091939590929450565b60006022825110156137cd5760405162461bcd60e51b8152600401610d7d90615bc1565b506022015190565b6001600160a01b03831660009081526010602052604090205460ff1680156137fd5750505050565b6040805160208101918290526007546341976e0960e01b909252600091829190819061010090046001600160a01b03166341976e0961385f7f000000000000000000000000000000000000000000000000000000000000000060248501614635565b602060405180830381865afa15801561387c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a09190614a35565b905290506138ae81856123da565b61ffff86166000908152600b6020908152604080832054600a8352818420546008845282852054600990945291909320549395504293909190818711156139075760405162461bcd60e51b8152600401610d7d90615c05565b620151806139158587614a6c565b11156139395761ffff8a166000908152600b60205260409020859055869250613946565b6139438784614a7f565b92505b808311156139665760405162461bcd60e51b8152600401610d7d90615c49565b505061ffff9097166000908152600a602052604090209690965550505050505050565b61ffff8216600090815260036020526040812054908190036139aa57506127105b808211156127825760405162461bcd60e51b8152600401610d7d90615c8b565b6060824710156139ec5760405162461bcd60e51b8152600401610d7d90615cde565b600080866001600160a01b03168587604051613a089190614dc4565b60006040518083038185875af1925050503d8060008114613a45576040519150601f19603f3d011682016040523d82523d6000602084013e613a4a565b606091505b5091509150613a5b87838387613cc3565b979650505050505050565b6000613a73826014614a7f565b83511015613a935760405162461bcd60e51b8152600401610d7d90615d1a565b500160200151600160601b900490565b6000613ab0826008614a7f565b83511015613ad05760405162461bcd60e51b8152600401610d7d90615d55565b50016008015190565b6001600160a01b03831660009081526010602052604090205460ff168015613b015750505050565b6040805160208101918290526007546341976e0960e01b909252600091829190819061010090046001600160a01b03166341976e09613b637f000000000000000000000000000000000000000000000000000000000000000060248501614635565b602060405180830381865afa158015613b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba49190614a35565b90529050613bb281856123da565b61ffff86166000908152600f6020908152604080832054600e835281842054600c845282852054600d9094529190932054939550429390919081871115613c0b5760405162461bcd60e51b8152600401610d7d90615c05565b62015180613c198587614a6c565b1115613c3d5761ffff8a166000908152600f60205260409020859055869250613c4a565b613c478784614a7f565b92505b80831115613c6a5760405162461bcd60e51b8152600401610d7d90615c49565b505061ffff9097166000908152600e602052604090209690965550505050505050565b6000613c9a826020614a7f565b83511015613cba5760405162461bcd60e51b8152600401610d7d90615d91565b50016020015190565b60608315613d02578251600003613cfb576001600160a01b0385163b613cfb5760405162461bcd60e51b8152600401610d7d90615dd5565b5081612329565b6123298383815115613d175781518083602001fd5b8060405162461bcd60e51b8152600401610d7d91906144a0565b5050565b508054613d4190614976565b6000825580601f10613d51575050565b601f01602090049060005260206000209081019061228991905b80821115613d7f5760008155600101613d6b565b5090565b61ffff81165b811461228957600080fd5b8035610f2c81613d83565b60008083601f840112613db457613db4600080fd5b5081356001600160401b03811115613dce57613dce600080fd5b602083019150836001820283011115613de957613de9600080fd5b9250929050565b6001600160401b038116613d89565b8035610f2c81613df0565b60008060008060008060808789031215613e2657613e26600080fd5b6000613e328989613d94565b96505060208701356001600160401b03811115613e5157613e51600080fd5b613e5d89828a01613d9f565b95509550506040613e7089828a01613dff565b93505060608701356001600160401b03811115613e8f57613e8f600080fd5b613e9b89828a01613d9f565b92509250509295509295509295565b6001600160e01b03198116613d89565b8035610f2c81613eaa565b600060208284031215613eda57613eda600080fd5b60006123298484613eba565b8015155b82525050565b60208101610f2c8284613ee6565b600060208284031215613f1357613f13600080fd5b60006123298484613d94565b80613d89565b8035610f2c81613f1f565b60008060408385031215613f4657613f46600080fd5b6000613f528585613d94565b9250506020613f6385828601613f25565b9150509250929050565b60006001600160a01b038216610f2c565b613d8981613f6d565b8035610f2c81613f7e565b600080600060608486031215613faa57613faa600080fd5b6000613fb68686613f87565b9350506020613fc786828701613d94565b9250506040613fd886828701613f25565b9150509250925092565b80613eea565b60e08101613ff6828a613ee6565b6140036020830189613fe2565b6140106040830188613fe2565b61401d6060830187613fe2565b61402a6080830186613fe2565b61403760a0830185613fe2565b61404460c0830184613ee6565b98975050505050505050565b801515613d89565b8035610f2c81614050565b60008060008060008060a0878903121561407f5761407f600080fd5b600061408b8989613d94565b965050602061409c89828a01613f25565b95505060406140ad89828a01613f25565b94505060606140be89828a01614058565b93505060808701356001600160401b03811115613e8f57613e8f600080fd5b604081016140eb8285613fe2565b6113ae6020830184613fe2565b60208101610f2c8284613fe2565b60008060006040848603121561411e5761411e600080fd5b600061412a8686613d94565b93505060208401356001600160401b0381111561414957614149600080fd5b61415586828701613d9f565b92509250509250925092565b6000806040838503121561417757614177600080fd5b6000613f528585613f87565b60ff8116613eea565b60208101610f2c8284614183565b6000602082840312156141af576141af600080fd5b60006123298484614058565b600080604083850312156141d1576141d1600080fd5b60006141dd8585613f87565b9250506020613f6385828601614058565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715614229576142296141ee565b6040525050565b600061423b60405190565b90506142478282614204565b919050565b60006001600160401b03821115614265576142656141ee565b601f19601f83011660200192915050565b82818337506000910152565b60006142956142908461424c565b614230565b9050828152602081018484840111156142b0576142b0600080fd5b6142bb848285614276565b509392505050565b600082601f8301126142d7576142d7600080fd5b8135612329848260208601614282565b6000806000606084860312156142ff576142ff600080fd5b600061430b8686613d94565b93505060208401356001600160401b0381111561432a5761432a600080fd5b614336868287016142c3565b9250506040613fd886828701613dff565b6000610f2c82613f6d565b613d8981614347565b8035610f2c81614352565b60008060006060848603121561437e5761437e600080fd5b600061438a868661435b565b9350506020613fc786828701613f87565b6000606082840312156143b0576143b0600080fd5b50919050565b600080600080600060a086880312156143d1576143d1600080fd5b60006143dd8888613f87565b95505060206143ee88828901613d94565b94505060406143ff88828901613f25565b935050606061441088828901613f25565b92505060808601356001600160401b0381111561442f5761442f600080fd5b61443b8882890161439b565b9150509295509295909350565b60005b8381101561446357818101518382015260200161444b565b50506000910152565b6000614476825190565b80845260208401935061448d818560208601614448565b601f19601f8201165b9093019392505050565b602080825281016113ae818461446c565b60008060008060008060008060e0898b0312156144d0576144d0600080fd5b60006144dc8b8b613f87565b98505060206144ed8b828c01613d94565b97505060406144fe8b828c01613f25565b965050606061450f8b828c01613f25565b95505060808901356001600160401b0381111561452e5761452e600080fd5b61453a8b828c01613d9f565b945094505060a061454d8b828c01613dff565b92505060c08901356001600160401b0381111561456c5761456c600080fd5b6145788b828c0161439b565b9150509295985092959890939650565b60006020828403121561459d5761459d600080fd5b60006123298484613f87565b6000610f2c6001600160a01b0383166145c0565b90565b6001600160a01b031690565b6000610f2c826145a9565b6000610f2c826145cc565b613eea816145d7565b60208101610f2c82846145e2565b6000806040838503121561460f5761460f600080fd5b600061461b8585613d94565b9250506020613f6385828601613d94565b613eea81613f6d565b60208101610f2c828461462c565b600080600080600080600080600060e08a8c03121561466457614664600080fd5b60006146708c8c613d94565b99505060206146818c828d01613f25565b98505060406146928c828d01613f25565b97505060608a01356001600160401b038111156146b1576146b1600080fd5b6146bd8c828d01613d9f565b965096505060806146d08c828d01613dff565b94505060a06146e18c828d01614058565b93505060c08a01356001600160401b0381111561470057614700600080fd5b61470c8c828d01613d9f565b92509250509295985092959850929598565b60008060008060006080868803121561473957614739600080fd5b60006147458888613d94565b955050602061475688828901613d94565b945050604061476788828901613f25565b93505060608601356001600160401b0381111561478657614786600080fd5b61479288828901613d9f565b92509250509295509295909350565b6000806000606084860312156147b9576147b9600080fd5b6000613fb68686613d94565b6000806000806000806000806000806101008b8d0312156147e8576147e8600080fd5b60006147f48d8d613d94565b9a505060208b01356001600160401b0381111561481357614813600080fd5b61481f8d828e01613d9f565b995099505060406148328d828e01613dff565b97505060606148438d828e01613f25565b96505060806148548d828e01613f87565b95505060a06148658d828e01613f25565b94505060c08b01356001600160401b0381111561488457614884600080fd5b6148908d828e01613d9f565b935093505060e06148a38d828e01613f25565b9150509295989b9194979a5092959850565b600080600080608085870312156148ce576148ce600080fd5b60006148da8787613d94565b94505060206148eb87828801613d94565b93505060406148fc87828801613f87565b925050606061490d87828801613f25565b91505092959194509250565b601e81526000602082017f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c65720000815291505b5060200190565b60208082528101610f2c81614919565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061498a57607f821691505b6020821081036143b0576143b0614960565b60006149a9838584614276565b50500190565b600061232982848661499c565b602681526000602082017f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f8152651b9d1c9858dd60d21b602082015291505b5060400190565b60208082528101610f2c816149bc565b61ffff8116613eea565b60208101610f2c8284614a12565b8051610f2c81613f1f565b600060208284031215614a4a57614a4a600080fd5b60006123298484614a2a565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f2c57610f2c614a56565b80820180821115610f2c57610f2c614a56565b602681526000602082017f4461696c79206c696d6974203c2073696e676c65207472616e73616374696f6e815265081b1a5b5a5d60d21b602082015291506149fb565b60208082528101610f2c81614a92565b60608101614af38286614a12565b614b006020830185613fe2565b6123296040830184613fe2565b8183526000602084019350614b23838584614276565b601f19601f840116614496565b60408101614b3e8286614a12565b8181036020830152612326818486614b0d565b603381526000602082017f576974686472617720616d6f756e742073686f756c64206265206c65737320748152721a185b881bdd5d189bdd5b9908185b5bdd5b9d606a1b602082015291506149fb565b60208082528101610f2c81614b51565b602181526000602082017f50726f78794f46543a206f7574626f756e64416d6f756e74206f766572666c6f8152607760f81b602082015291506149fb565b60208082528101610f2c81614bb1565b602681526000602082017f53696e676c65207472616e73616374696f6e206c696d6974203e204461696c79815265081b1a5b5a5d60d21b602082015291506149fb565b60208082528101610f2c81614bff565b602681526000602082017f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062658152650204c7a4170760d41b602082015291506149fb565b60208082528101610f2c81614c52565b6000808335601e1936859003018112614cc057614cc0600080fd5b8084019250823591506001600160401b03821115614ce057614ce0600080fd5b602083019250600182023603831315614cfb57614cfb600080fd5b509250929050565b602e81526000602082017f4461696c79206c696d6974203c2073696e676c6520726563656976652074726181526d1b9cd858dd1a5bdb881b1a5b5a5d60921b602082015291506149fb565b60208082528101610f2c81614d03565b601781526000602082017f73656e64416e6443616c6c2069732064697361626c656400000000000000000081529150614949565b60208082528101610f2c81614d5e565b6000614dac825190565b614dba818560208601614448565b9290920192915050565b60006113ae8284614da2565b6001600160401b038116613eea565b60408101614ded8285614a12565b6113ae6020830184614dd0565b601d81526000602082017f4c7a4170703a206e6f20747275737465642070617468207265636f726400000081529150614949565b60208082528101610f2c81614dfa565b6000610f2c8260601b90565b6000610f2c82614e3e565b613eea614e6182613f6d565b614e4a565b6000614e7382858761499c565b9150614e7f8284614e55565b506014019392505050565b6000610f2c6145bd8381565b614e9f83614e8a565b815460001960089490940293841b1916921b91909117905550565b6000612782818484614e96565b81811015613d3157614eda600082614eba565b600101614ec7565b601f821115612782576000818152602090206020601f85010481016020851015614f095750805b610fb46020601f860104830182614ec7565b81516001600160401b03811115614f3457614f346141ee565b614f3e8254614976565b614f49828285614ee2565b6020601f831160018114614f7d5760008415614f655750858201515b600019600886021c198116600286021786555061187c565b600085815260208120601f198616915b82811015614fad5788850151825560209485019460019092019101614f8d565b86831015614fc95784890151600019601f89166008021c191682555b600160028802018855505050505050505050565b60808101614feb8288614a12565b614ff86020830187614a12565b6150056040830186613fe2565b8181036060830152613a5b818486614b0d565b602e81526000602082017f73696e676c652072656365697665207472616e73616374696f6e206c696d697481526d080f8811185a5b1e481b1a5b5a5d60921b602082015291506149fb565b60208082528101610f2c81615018565b606081016150818286614a12565b614b006020830185614a12565b601f81526000602082017f4f4654436f72653a2063616c6c6572206d757374206265204f4654436f72650081529150614949565b60208082528101610f2c8161508e565b60c081016150e0828b614a12565b81810360208301526150f381898b614b0d565b90506151026040830188614dd0565b61510f6060830187613fe2565b61511c6080830186613fe2565b81810360a083015261512f818486614b0d565b9a9950505050505050505050565b826001600160401b03811115615155576151556141ee565b61515f8254614976565b61516a828285614ee2565b6000601f83116001811461519e57600084156151865750858201355b600019600886021c1981166002860217865550610ef2565b600085815260208120601f198616915b828110156151ce57888501358255602094850194600190920191016151ae565b868310156151ea57600019601f88166008021c19858a01351682555b60016002880201885550505050505050505050565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015291506149fb565b60208082528101610f2c816151ff565b608081016152608287614a12565b61526d6020830186614a12565b61527a604083018561462c565b6126ae6060830184613fe2565b60006152956142908461424c565b9050828152602081018484840111156152b0576152b0600080fd5b6142bb848285614448565b600082601f8301126152cf576152cf600080fd5b8151612329848260208601615287565b6000602082840312156152f4576152f4600080fd5b81516001600160401b0381111561530d5761530d600080fd5b612329848285016152bb565b608081016153278287614a12565b8181036020830152615339818661446c565b90506153486040830185614dd0565b818103606083015261535a818461446c565b9695505050505050565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000614949565b60208082528101610f2c81615364565b60a081016153b48288614a12565b6153c1602083018761462c565b81810360408301526153d3818661446c565b90506153e26060830185613ee6565b8181036080830152613a5b818461446c565b6000806040838503121561540a5761540a600080fd5b60006154168585614a2a565b9250506020613f6385828601614a2a565b634e487b7160e01b600052601260045260246000fd5b60008261544c5761544c615427565b500690565b81810280821583820485141761546957615469614a56565b5092915050565b604081016140eb828561462c565b601c81526000602082017f4f4654436f72653a20756e6b6e6f776e207061636b657420747970650000000081529150614949565b60208082528101610f2c8161547e565b601981526000602082017f4f4654436f72653a20616d6f756e7420746f6f20736d616c6c0000000000000081529150614949565b60208082528101610f2c816154c2565b600e81526000602082016d736c6963655f6f766572666c6f7760901b81529150614949565b60208082528101610f2c81615506565b6011815260006020820170736c6963655f6f75744f66426f756e647360781b81529150614949565b60208082528101610f2c8161553b565b602381526000602082017f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737381526261676560e81b602082015291506149fb565b60208082528101610f2c81615573565b602181526000602082017f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f618152601960fa1b602082015291506149fb565b60208082528101610f2c816155c3565b6080810161561f8288614a12565b8181036020830152615632818688614b0d565b90506156416040830185614dd0565b61535a6060830184613fe2565b60a0810161565c8288614a12565b818103602083015261566e818761446c565b905061567d6040830186614dd0565b818103606083015261568f818561446c565b90508181036080830152613a5b818461446c565b6000826156b2576156b2615427565b500490565b601a81526000602082017f4f4654436f72653a20616d6f756e745344206f766572666c6f7700000000000081529150614949565b60208082528101610f2c816156b7565b6000610f2c8260f81b90565b613eea60ff82166156fb565b6000610f2c8260c01b90565b613eea6001600160401b038216615713565b600061573d8286615707565b60018201915061574d8285613fe2565b60208201915061575d828461571f565b506008019392505050565b601481526000602082017314185d5cd8589b194e881b9bdd081c185d5cd95960621b81529150614949565b60208082528101610f2c81615768565b601081526000602082016f14185d5cd8589b194e881c185d5cd95960821b81529150614949565b60208082528101610f2c816157a3565b606081016157e8828661462c565b614b00602083018561462c565b8051610f2c81614050565b60006020828403121561581557615815600080fd5b600061232984846157f5565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291506149fb565b60208082528101610f2c81615821565b6013815260006020820172746f55696e74385f6f75744f66426f756e647360681b81529150614949565b60208082528101610f2c81615878565b61010081016158c1828b614a12565b81810360208301526158d3818a61446c565b90506158e26040830189614dd0565b6158ef6060830188613fe2565b6158fc608083018761462c565b61590960a0830186613fe2565b81810360c083015261591b818561446c565b905061592a60e0830184613fe2565b9998505050505050505050565b60608082528101615948818661446c565b9050614b006020830185614dd0565b601a81526000602082017f4c7a4170703a206d696e4761734c696d6974206e6f742073657400000000000081529150614949565b60208082528101610f2c81615957565b601b81526000602082017f4c7a4170703a20676173206c696d697420697320746f6f206c6f77000000000081529150614949565b60208082528101610f2c8161599b565b602281526000602082017f50726f78794f46543a206f776e6572206973206e6f742073656e642063616c6c81526132b960f11b602082015291506149fb565b60208082528101610f2c816159df565b603081526000602082017f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742081526f61207472757374656420736f7572636560801b602082015291506149fb565b60208082528101610f2c81615a2e565b60c08101615a998289614a12565b8181036020830152615aab818861446c565b90508181036040830152615abf818761446c565b9050615ace606083018661462c565b615adb608083018561462c565b81810360a0830152614044818461446c565b6000615af98289615707565b600182019150615b098288613fe2565b602082019150615b19828761571f565b600882019150615b298286613fe2565b602082019150615b39828561571f565b6008820191506140448284614da2565b601881526000602082017f4f4654436f72653a20696e76616c6964207061796c6f6164000000000000000081529150614949565b60208082528101610f2c81615b49565b601c81526000602082017f4c7a4170703a20696e76616c69642061646170746572506172616d730000000081529150614949565b60208082528101610f2c81615b8d565b601f81526000602082017f53696e676c65205472616e73616374696f6e204c696d6974204578636565640081529150614949565b60208082528101610f2c81615bd1565b601e81526000602082017f4461696c79205472616e73616374696f6e204c696d697420457863656564000081529150614949565b60208082528101610f2c81615c15565b60208082527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c6172676591019081526000614949565b60208082528101610f2c81615c59565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b602082015291506149fb565b60208082528101610f2c81615c9b565b6015815260006020820174746f416464726573735f6f75744f66426f756e647360581b81529150614949565b60208082528101610f2c81615cee565b6014815260006020820173746f55696e7436345f6f75744f66426f756e647360601b81529150614949565b60208082528101610f2c81615d2a565b6015815260006020820174746f427974657333325f6f75744f66426f756e647360581b81529150614949565b60208082528101610f2c81615d65565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150614949565b60208082528101610f2c81615da156fea264697066735822122089612b317736c92c076d6e6df96ac6a17602e56c4594d806668a81daa9cad3c664736f6c63430008190033",
  "deployedBytecode": "0x6080604052600436106103d85760003560e01c80637dc0d1d0116101fd578063b353aaa711610118578063d708a468116100ab578063eb8d72b71161007a578063eb8d72b714610c75578063f2fde38b14610c95578063f5ecbdbc14610cb5578063fc0c546a14610cd5578063fdff235b14610d0857600080fd5b8063d708a46814610bf3578063df2a5b3b14610c20578063e6a20ae614610c40578063eaffd49a14610c5557600080fd5b8063cbed8b9c116100e7578063cbed8b9c14610b73578063cc01e9b614610b93578063cc7015ae14610bb3578063d1deba1f14610be057600080fd5b8063b353aaa714610aef578063baf3292d14610b23578063c1e9132e14610b43578063c446183414610b5d57600080fd5b806393a61d6c116101905780639bdb98121161015f5780639bdb981214610a3d5780639f38369a14610a8f578063a4c51df514610aaf578063a6c3d16514610acf57600080fd5b806393a61d6c146109aa578063950c8a74146109d75780639689cb05146109f75780639b19251a14610a0d57600080fd5b80638cfd8f5c116101cc5780638cfd8f5c146109045780638da5cb5b1461093c57806390436567146109685780639358928b1461099557600080fd5b80637dc0d1d0146108695780638456cb591461089b57806384e69c69146108b0578063857749b0146108d057600080fd5b80634be66720116102f85780635c975abb1161028b57806369c1e7b81161025a57806369c1e7b8146107dd578063715018a6146107fd5780637533d7881461080957806376203b48146108365780637adbf9731461084957600080fd5b80635c975abb1461077257806364aff9ec1461078a57806366ad5c8a146107aa578063695ef6bf146107ca57600080fd5b80634f4ba0f4116102c75780634f4ba0f4146106b657806353489d6c146106e357806353d6fd59146107035780635b8c41e61461072357600080fd5b80634be66720146106275780634c42899a146106475780634cec6256146106695780634ed2c6621461069657600080fd5b8063365260b4116103705780633f4ba83a1161033f5780633f4ba83a146105bd57806342d65a8d146105d257806344770515146105f257806348e4a04a1461060757600080fd5b8063365260b4146105085780633c4ec39b146105365780633d8b38f6146105705780633f1f4fa41461059057600080fd5b806310ddb137116103ac57806310ddb13714610475578063182b4b89146104955780632488eec8146104c85780632dbbec08146104e857600080fd5b80621d3567146103dd57806301ffc9a7146103ff57806307e0db17146104355780630df3748314610455575b600080fd5b3480156103e957600080fd5b506103fd6103f8366004613e0a565b610d35565b005b34801561040b57600080fd5b5061041f61041a366004613ec5565b610efb565b60405161042c9190613ef0565b60405180910390f35b34801561044157600080fd5b506103fd610450366004613efe565b610f32565b34801561046157600080fd5b506103fd610470366004613f30565b610fbb565b34801561048157600080fd5b506103fd610490366004613efe565b610fda565b3480156104a157600080fd5b506104b56104b0366004613f92565b61102e565b60405161042c9796959493929190613fe8565b3480156104d457600080fd5b506103fd6104e3366004613f30565b611193565b3480156104f457600080fd5b506103fd610503366004613efe565b611235565b34801561051457600080fd5b50610528610523366004614063565b611293565b60405161042c9291906140dd565b34801561054257600080fd5b50610563610551366004613efe565b600d6020526000908152604090205481565b60405161042c91906140f8565b34801561057c57600080fd5b5061041f61058b366004614106565b6112e8565b34801561059c57600080fd5b506105636105ab366004613efe565b60036020526000908152604090205481565b3480156105c957600080fd5b506103fd6113b5565b3480156105de57600080fd5b506103fd6105ed366004614106565b6113c7565b3480156105fe57600080fd5b50610563600081565b34801561061357600080fd5b506103fd610622366004614161565b61144d565b34801561063357600080fd5b506103fd610642366004614161565b6114d1565b34801561065357600080fd5b5061065c600081565b60405161042c919061418c565b34801561067557600080fd5b50610563610684366004613efe565b600a6020526000908152604090205481565b3480156106a257600080fd5b506103fd6106b136600461419a565b611588565b3480156106c257600080fd5b506105636106d1366004613efe565b60096020526000908152604090205481565b3480156106ef57600080fd5b506103fd6106fe366004613f30565b6115cd565b34801561070f57600080fd5b506103fd61071e3660046141bb565b61166f565b34801561072f57600080fd5b5061056361073e3660046142e7565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561077e57600080fd5b5060005460ff1661041f565b34801561079657600080fd5b506103fd6107a5366004614366565b6116e3565b3480156107b657600080fd5b506103fd6107c5366004613e0a565b6117e7565b6103fd6107d83660046143b6565b611884565b3480156107e957600080fd5b506103fd6107f8366004613f30565b6118ef565b3480156103fd57600080fd5b34801561081557600080fd5b50610829610824366004613efe565b611991565b60405161042c91906144a0565b6103fd6108443660046144b1565b611a2b565b34801561085557600080fd5b506103fd610864366004614588565b611a67565b34801561087557600080fd5b5060075461088e9061010090046001600160a01b031681565b60405161042c91906145eb565b3480156108a757600080fd5b506103fd611adf565b3480156108bc57600080fd5b506103fd6108cb3660046142e7565b611aef565b3480156108dc57600080fd5b5061065c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561091057600080fd5b5061056361091f3660046145f9565b600260209081526000928352604080842090915290825290205481565b34801561094857600080fd5b5060005461010090046001600160a01b03165b60405161042c9190614635565b34801561097457600080fd5b50610563610983366004613efe565b600c6020526000908152604090205481565b3480156109a157600080fd5b50610563611b91565b3480156109b657600080fd5b506105636109c5366004613efe565b600b6020526000908152604090205481565b3480156109e357600080fd5b5060045461095b906001600160a01b031681565b348015610a0357600080fd5b5061056360115481565b348015610a1957600080fd5b5061041f610a28366004614588565b60106020526000908152604090205460ff1681565b348015610a4957600080fd5b5061041f610a583660046142e7565b6006602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205460ff1681565b348015610a9b57600080fd5b50610829610aaa366004613efe565b611c27565b348015610abb57600080fd5b50610528610aca366004614643565b611d06565b348015610adb57600080fd5b506103fd610aea366004614106565b611d95565b348015610afb57600080fd5b5061088e7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b2f57600080fd5b506103fd610b3e366004614588565b611e1e565b348015610b4f57600080fd5b5060075461041f9060ff1681565b348015610b6957600080fd5b5061056361271081565b348015610b7f57600080fd5b506103fd610b8e36600461471e565b611e71565b348015610b9f57600080fd5b506103fd610bae366004613f30565b611f06565b348015610bbf57600080fd5b50610563610bce366004613efe565b60086020526000908152604090205481565b6103fd610bee366004613e0a565b611fa8565b348015610bff57600080fd5b50610563610c0e366004613efe565b600e6020526000908152604090205481565b348015610c2c57600080fd5b506103fd610c3b3660046147a1565b6120ac565b348015610c4c57600080fd5b5061065c600181565b348015610c6157600080fd5b506103fd610c703660046147c5565b61210b565b348015610c8157600080fd5b506103fd610c90366004614106565b6121f8565b348015610ca157600080fd5b506103fd610cb0366004614588565b612252565b348015610cc157600080fd5b50610829610cd03660046148b5565b61228c565b348015610ce157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061095b565b348015610d1457600080fd5b50610563610d23366004613efe565b600f6020526000908152604090205481565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610d865760405162461bcd60e51b8152600401610d7d90614950565b60405180910390fd5b61ffff861660009081526001602052604081208054610da490614976565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd090614976565b8015610e1d5780601f10610df257610100808354040283529160200191610e1d565b820191906000526020600020905b815481529060010190602001808311610e0057829003601f168201915b50505050509050805186869050148015610e38575060008151115b8015610e60575080516020820120604051610e5690889088906149af565b6040518091039020145b610e7c5760405162461bcd60e51b8152600401610d7d90614a02565b610ef28787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061233192505050565b50505050505050565b60006001600160e01b03198216631f7ecdf760e01b1480610f2c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610f3a6123aa565b6040516307e0db1760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906307e0db1790610f86908490600401614a1c565b600060405180830381600087803b158015610fa057600080fd5b505af1158015610fb4573d6000803e3d6000fd5b5050505050565b610fc36123aa565b61ffff909116600090815260036020526040902055565b610fe26123aa565b6040516310ddb13760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906310ddb13790610f86908490600401614a1c565b6001600160a01b038381166000908152601060209081526040808320548151928301918290526007546341976e0960e01b90925292938493849384938493849360ff16928492909182916101009004166341976e096110b07f000000000000000000000000000000000000000000000000000000000000000060248501614635565b602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190614a35565b905290506110ff818a6123da565b61ffff8b166000908152600b6020908152604080832054600a835281842054600884528285205460099094529190932054919a509098509196509094509250426201518061114d8583614a6c565b111561115e5785945080935061116b565b6111688686614a7f565b94505b828061118257508786111580156111825750868511155b985050509397509397509397909450565b61119b6123aa565b61ffff82166000908152600860205260409020548110156111ce5760405162461bcd60e51b8152600401610d7d90614ad5565b61ffff8216600090815260096020526040908190205490517f4dd31065e259d5284e44d1f9265710da72eafcf78dc925e3881189fc3b71f69391611216918591908590614ae5565b60405180910390a161ffff909116600090815260096020526040902055565b61123d6123aa565b61ffff8116600090815260016020526040812061125991613d35565b7f6d5075c81d4d9e75bec6052f4e44f58f8a8cf1327544addbbf015fb06f83bd37816040516112889190614a1c565b60405180910390a150565b6000806112d98888888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123f292505050565b91509150965096945050505050565b61ffff83166000908152600160205260408120805482919061130990614976565b80601f016020809104026020016040519081016040528092919081815260200182805461133590614976565b80156113825780601f1061135757610100808354040283529160200191611382565b820191906000526020600020905b81548152906001019060200180831161136557829003601f168201915b5050505050905083836040516113999291906149af565b60405180910390208180519060200120149150505b9392505050565b6113bd6123aa565b6113c56124af565b565b6113cf6123aa565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d9061141f90869086908690600401614b30565b600060405180830381600087803b15801561143957600080fd5b505af1158015610ef2573d6000803e3d6000fd5b6114556123aa565b8060115410156114775760405162461bcd60e51b8152600401610d7d90614ba1565b60118054829003905561148b3083836124fb565b50816001600160a01b03167f22fe8e8ead80ad0961d77107e806ba9bcf9ca3b175a9d446145646d39c36ab96826040516114c591906140f8565b60405180910390a25050565b6114d96123aa565b60006114e4826126b7565b50905080601160008282546114f99190614a7f565b90915550600090506115116001600160401b036126f7565b90506011548110156115355760405162461bcd60e51b8152600401610d7d90614bef565b6115408430846124fb565b50836001600160a01b03167f5e6172210489e8382b0281a3e17233598e143c96f8ac1f90923540b554cea1128360405161157a91906140f8565b60405180910390a250505050565b6115906123aa565b6007805460ff19168215159081179091556040517fe628f01c6f4e6340598d3a2913390db68e8859379eebff349e170f2b16baed0090600090a250565b6115d56123aa565b61ffff82166000908152600960205260409020548111156116085760405162461bcd60e51b8152600401610d7d90614c42565b61ffff8216600090815260086020526040908190205490517f7babeac42ccbb33537ee421fedc4db7b5f251b5d2a3fa5c0ff4b35b2d783be8791611650918591908590614ae5565b60405180910390a161ffff909116600090815260086020526040902055565b6116776123aa565b816001600160a01b03167ff6019ec0a78d156d249a1ec7579e2321f6ac7521d6e1d2eacf90ba4a184dcceb826040516116b09190613ef0565b60405180910390a26001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6116eb6123aa565b6040516370a0823160e01b81526000906001600160a01b038516906370a082319061171a903090600401614635565b602060405180830381865afa158015611737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175b9190614a35565b90508082111561178257818160405163cf47918160e01b8152600401610d7d9291906140dd565b826001600160a01b0316846001600160a01b03167f6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d5846040516117c591906140f8565b60405180910390a36117e16001600160a01b038516848461272c565b50505050565b3330146118065760405162461bcd60e51b8152600401610d7d90614c95565b61187c8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061278792505050565b505050505050565b61187c858585856118986020870187614588565b6118a86040880160208901614588565b6118b56040890189614ca5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127de92505050565b6118f76123aa565b61ffff82166000908152600c602052604090205481101561192a5760405162461bcd60e51b8152600401610d7d90614d4e565b61ffff82166000908152600d6020526040908190205490517f95dc51094cd27cf4ee3fd0dbb50cf96f8df1629c822f5434c4a34d7eb03c972491611972918591908590614ae5565b60405180910390a161ffff9091166000908152600d6020526040902055565b600160205260009081526040902080546119aa90614976565b80601f01602080910402602001604051908101604052809291908181526020018280546119d690614976565b8015611a235780601f106119f857610100808354040283529160200191611a23565b820191906000526020600020905b815481529060010190602001808311611a0657829003601f168201915b505050505081565b60075460ff16611a4d5760405162461bcd60e51b8152600401610d7d90614d92565b611a5d8888888888888888612898565b5050505050505050565b611a6f6123aa565b611a788161293c565b6007546040516001600160a01b0380841692610100900416907f05cd89403c6bdeac21c2ff33de395121a31fa1bc2bf3adf4825f1f86e79969dd90600090a3600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b611ae76123aa565b6113c5612963565b611af76123aa565b61ffff83166000908152600560205260408082209051611b18908590614dc4565b9081526040805191829003602090810183206001600160401b038616600090815291522091909155611b4b908390614dc4565b60405180910390207f48a980eea4ea1c540209e2f9f32a4c2edf51fab37b1d21f453868301ecb6e2ee8483604051611b84929190614ddf565b60405180910390a2505050565b60006011547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c189190614a35565b611c229190614a6c565b905090565b61ffff8116600090815260016020526040812080546060929190611c4a90614976565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7690614976565b8015611cc35780601f10611c9857610100808354040283529160200191611cc3565b820191906000526020600020905b815481529060010190602001808311611ca657829003601f168201915b505050505090508051600003611ceb5760405162461bcd60e51b8152600401610d7d90614e2e565b6113ae600060148351611cfe9190614a6c565b8391906129a0565b600080611d838b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c9081908401838280828437600092019190915250612a6892505050565b91509150995099975050505050505050565b611d9d6123aa565b818130604051602001611db293929190614e66565b60408051601f1981840301815291815261ffff8516600090815260016020522090611ddd9082614f1b565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611e1193929190614b30565b60405180910390a1505050565b611e266123aa565b600480546001600160a01b0319166001600160a01b0383161790556040517f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b90611288908390614635565b611e796123aa565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c90611ecd9088908890889088908890600401614fdd565b600060405180830381600087803b158015611ee757600080fd5b505af1158015611efb573d6000803e3d6000fd5b505050505050505050565b611f0e6123aa565b61ffff82166000908152600d6020526040902054811115611f415760405162461bcd60e51b8152600401610d7d90615063565b61ffff82166000908152600c6020526040908190205490517f2c42997a938a029910a78e7c28d762b349c28e70f3a89c1fbccbb1a46020b15991611f89918591908590614ae5565b60405180910390a161ffff9091166000908152600c6020526040902055565b61ffff861660009081526001602052604081208054611fc690614976565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff290614976565b801561203f5780601f106120145761010080835404028352916020019161203f565b820191906000526020600020905b81548152906001019060200180831161202257829003601f168201915b5050505050905080518686905014801561205a575060008151115b801561208257508051602082012060405161207890889088906149af565b6040518091039020145b61209e5760405162461bcd60e51b8152600401610d7d90614a02565b610ef2878787878787612b2a565b6120b46123aa565b61ffff80841660009081526002602090815260408083209386168352929052819020829055517f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090611e1190859085908590615073565b33301461212a5760405162461bcd60e51b8152600401610d7d906150c2565b6121353086866124fb565b9350846001600160a01b03168a61ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf8660405161217591906140f8565b60405180910390a3604051633fe79aed60e11b81526001600160a01b03861690637fcf35da9083906121b9908e908e908e908e908e908d908d908d906004016150d2565b600060405180830381600088803b1580156121d357600080fd5b5087f11580156121e7573d6000803e3d6000fd5b505050505050505050505050505050565b6122006123aa565b61ffff8316600090815260016020526040902061221e82848361513d565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611e1193929190614b30565b61225a6123aa565b6001600160a01b0381166122805760405162461bcd60e51b8152600401610d7d90615242565b61228981612cca565b50565b604051633d7b2f6f60e21b81526060906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5ecbdbc906122e1908890889030908890600401615252565b600060405180830381865afa1580156122fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261232691908101906152df565b90505b949350505050565b6000806123945a60966366ad5c8a60e01b898989896040516024016123599493929190615319565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915230929190612d23565b915091508161187c5761187c8686868685612dad565b6000546001600160a01b036101009091041633146113c55760405162461bcd60e51b8152600401610d7d90615396565b6000806123e78484612e4a565b905061232981612e7b565b60008060006124098761240488612e93565b612ee9565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090612460908b90309086908b908b906004016153a6565b6040805180830381865afa15801561247c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a091906153f4565b92509250509550959350505050565b6124b7612f18565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516124f19190614635565b60405180910390a1565b6000612505612f3a565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190612554908790600401614635565b602060405180830381865afa158015612571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125959190614a35565b9050306001600160a01b038616036125e0576125db6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858561272c565b612615565b6126156001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868686612f5d565b6040516370a0823160e01b815281906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190612663908890600401614635565b602060405180830381865afa158015612680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a49190614a35565b6126ae9190614a6c565b95945050505050565b6000806126e47f00000000000000000000000000000000000000000000000000000000000000008461543d565b90506126f08184614a6c565b9150915091565b6000610f2c7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416615451565b6127828363a9059cbb60e01b848460405160240161274b929190615470565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f7e565b505050565b60006127938282613010565b905060ff81166127ae576127a985858585613046565b610fb4565b60001960ff8216016127c6576127a9858585856130d4565b60405162461bcd60e51b8152600401610d7d906154b2565b60006127ec878284816132dd565b6127f5856126b7565b50905061280488888884613352565b9050600081116128265760405162461bcd60e51b8152600401610d7d906154f6565b60006128358761240484612e93565b90506128458882878787346133f6565b86896001600160a01b03168961ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a8560405161288491906140f8565b60405180910390a450979650505050505050565b611efb8888888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92506128e59150506020890189614588565b6128f560408a0160208b01614588565b61290260408b018b614ca5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061355292505050565b6001600160a01b038116612289576040516342bcdf7f60e11b815260040160405180910390fd5b61296b612f3a565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124e43390565b6060816129ae81601f614a7f565b10156129cc5760405162461bcd60e51b8152600401610d7d9061552b565b6129d68284614a7f565b845110156129f65760405162461bcd60e51b8152600401610d7d90615563565b606082158015612a155760405191506000825260208201604052612a5f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612a4e578051835260209283019201612a36565b5050858452601f01601f1916604052505b50949350505050565b6000806000612a82338a612a7b8b612e93565b8a8a613619565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090612ad9908d90309086908b908b906004016153a6565b6040805180830381865afa158015612af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1991906153f4565b925092505097509795505050505050565b61ffff86166000908152600560205260408082209051612b4d90889088906149af565b90815260408051602092819003830190206001600160401b03871660009081529252902054905080612b915760405162461bcd60e51b8152600401610d7d906155b3565b808383604051612ba29291906149af565b604051809103902014612bc75760405162461bcd60e51b8152600401610d7d90615601565b61ffff87166000908152600560205260408082209051612bea90899089906149af565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252612c82918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061278792505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051612cb9959493929190615611565b60405180910390a150505050505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6000606060008060008661ffff166001600160401b03811115612d4857612d486141ee565b6040519080825280601f01601f191660200182016040528015612d72576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115612d94578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff16815260200190815260200160002085604051612dde9190614dc4565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c90612e3b908790879087908790879061564e565b60405180910390a15050505050565b6040805160208101909152600081526040518060200160405280612e7285600001518561365a565b90529392505050565b8051600090610f2c90670de0b6b3a7640000906156a3565b600080612ec07f0000000000000000000000000000000000000000000000000000000000000000846156a3565b90506001600160401b03811115610f2c5760405162461bcd60e51b8152600401610d7d906156eb565b606060008383604051602001612f0193929190615731565b604051602081830303815290604052905092915050565b60005460ff166113c55760405162461bcd60e51b8152600401610d7d90615793565b60005460ff16156113c55760405162461bcd60e51b8152600401610d7d906157ca565b6117e1846323b872dd60e01b85858560405160240161274b939291906157da565b6000612fd3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136669092919063ffffffff16565b9050805160001480612ff4575080806020019051810190612ff49190615800565b6127825760405162461bcd60e51b8152600401610d7d90615868565b600061301d826001614a7f565b8351101561303d5760405162461bcd60e51b8152600401610d7d906158a2565b50016001015190565b60008061305283613675565b90925090506001600160a01b03821661306b5761dead91505b6000613076826126f7565b90506130838784836136cf565b9050826001600160a01b03168761ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf836040516130c391906140f8565b60405180910390a350505050505050565b60008060008060006130e58661371d565b945094509450945094506000600660008b61ffff1661ffff1681526020019081526020016000208960405161311a9190614dc4565b90815260408051602092819003830190206001600160401b038b166000908152925281205460ff16915061314d856126f7565b9050816131bb5761315f8b30836136cf565b61ffff8c16600090815260066020526040908190209051919250600191613187908d90614dc4565b90815260408051602092819003830190206001600160401b038d16600090815292529020805460ff19169115159190911790555b6001600160a01b0386163b61320d577f9aedf5fdba8716db3b6705ca00150643309995d4f818a249ed6dde6677e7792d866040516131f99190614635565b60405180910390a1505050505050506117e1565b8a8a8a8a8a8a868a60008a61322b578b6001600160401b031661322d565b5a5b905060008061325f5a609663eaffd49a60e01b8e8e8e8d8d8d8d8d6040516024016123599897969594939291906158b2565b9150915081156132b8578751602089012060405161ffff8d16907fb8890edbfc1c74692f527444645f95489c3703cc2df42e4a366f5d06fa6cd884906132aa908e908e908690615937565b60405180910390a2506132c5565b6132c58b8b8b8b85612dad565b50505050505050505050505050505050505050505050565b60006132e8836137a9565b61ffff808716600090815260026020908152604080832093891683529290522054909150806133295760405162461bcd60e51b8152600401610d7d9061598b565b6133338382614a7f565b82101561187c5760405162461bcd60e51b8152600401610d7d906159cf565b600061335c612f3a565b6001600160a01b03851633146133845760405162461bcd60e51b8152600401610d7d90615a1e565b61338f8585846137d5565b600061339c8630856124fb565b905080601160008282546133b09190614a7f565b90915550600090506133c86001600160401b036126f7565b90506011548110156133ec5760405162461bcd60e51b8152600401610d7d90614bef565b5095945050505050565b61ffff86166000908152600160205260408120805461341490614976565b80601f016020809104026020016040519081016040528092919081815260200182805461344090614976565b801561348d5780601f106134625761010080835404028352916020019161348d565b820191906000526020600020905b81548152906001019060200180831161347057829003601f168201915b5050505050905080516000036134b55760405162461bcd60e51b8152600401610d7d90615a7b565b6134c0878751613989565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5803100908490613517908b9086908c908c908c908c90600401615a8b565b6000604051808303818588803b15801561353057600080fd5b505af1158015613544573d6000803e3d6000fd5b505050505050505050505050565b600061356a896001846001600160401b0389166132dd565b613573876126b7565b5090506135828a8a8a84613352565b9050600081116135a45760405162461bcd60e51b8152600401610d7d906154f6565b60006135b4338a612a7b85612e93565b90506135c48a82878787346133f6565b888b6001600160a01b03168b61ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a8560405161360391906140f8565b60405180910390a4509998505050505050505050565b6060600185856001600160a01b038916858760405160200161364096959493929190615aed565b604051602081830303815290604052905095945050505050565b60006113ae8284615451565b606061232984846000856139ca565b600080806136838482613010565b60ff16148015613694575082516029145b6136b05760405162461bcd60e51b8152600401610d7d90615b7d565b6136bb83600d613a66565b91506136c8836021613aa3565b9050915091565b60006136d9612f3a565b6136e4838584613ad9565b81601160008282546136f69190614a6c565b9091555050306001600160a01b038416036137125750806113ae565b6123293084846124fb565b6000808060608160016137308783613010565b60ff16146137505760405162461bcd60e51b8152600401610d7d90615b7d565b61375b86600d613a66565b9350613768866021613aa3565b9250613775866029613c8d565b9450613782866049613aa3565b905061379e60518088516137969190614a6c565b8891906129a0565b915091939590929450565b60006022825110156137cd5760405162461bcd60e51b8152600401610d7d90615bc1565b506022015190565b6001600160a01b03831660009081526010602052604090205460ff1680156137fd5750505050565b6040805160208101918290526007546341976e0960e01b909252600091829190819061010090046001600160a01b03166341976e0961385f7f000000000000000000000000000000000000000000000000000000000000000060248501614635565b602060405180830381865afa15801561387c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a09190614a35565b905290506138ae81856123da565b61ffff86166000908152600b6020908152604080832054600a8352818420546008845282852054600990945291909320549395504293909190818711156139075760405162461bcd60e51b8152600401610d7d90615c05565b620151806139158587614a6c565b11156139395761ffff8a166000908152600b60205260409020859055869250613946565b6139438784614a7f565b92505b808311156139665760405162461bcd60e51b8152600401610d7d90615c49565b505061ffff9097166000908152600a602052604090209690965550505050505050565b61ffff8216600090815260036020526040812054908190036139aa57506127105b808211156127825760405162461bcd60e51b8152600401610d7d90615c8b565b6060824710156139ec5760405162461bcd60e51b8152600401610d7d90615cde565b600080866001600160a01b03168587604051613a089190614dc4565b60006040518083038185875af1925050503d8060008114613a45576040519150601f19603f3d011682016040523d82523d6000602084013e613a4a565b606091505b5091509150613a5b87838387613cc3565b979650505050505050565b6000613a73826014614a7f565b83511015613a935760405162461bcd60e51b8152600401610d7d90615d1a565b500160200151600160601b900490565b6000613ab0826008614a7f565b83511015613ad05760405162461bcd60e51b8152600401610d7d90615d55565b50016008015190565b6001600160a01b03831660009081526010602052604090205460ff168015613b015750505050565b6040805160208101918290526007546341976e0960e01b909252600091829190819061010090046001600160a01b03166341976e09613b637f000000000000000000000000000000000000000000000000000000000000000060248501614635565b602060405180830381865afa158015613b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba49190614a35565b90529050613bb281856123da565b61ffff86166000908152600f6020908152604080832054600e835281842054600c845282852054600d9094529190932054939550429390919081871115613c0b5760405162461bcd60e51b8152600401610d7d90615c05565b62015180613c198587614a6c565b1115613c3d5761ffff8a166000908152600f60205260409020859055869250613c4a565b613c478784614a7f565b92505b80831115613c6a5760405162461bcd60e51b8152600401610d7d90615c49565b505061ffff9097166000908152600e602052604090209690965550505050505050565b6000613c9a826020614a7f565b83511015613cba5760405162461bcd60e51b8152600401610d7d90615d91565b50016020015190565b60608315613d02578251600003613cfb576001600160a01b0385163b613cfb5760405162461bcd60e51b8152600401610d7d90615dd5565b5081612329565b6123298383815115613d175781518083602001fd5b8060405162461bcd60e51b8152600401610d7d91906144a0565b5050565b508054613d4190614976565b6000825580601f10613d51575050565b601f01602090049060005260206000209081019061228991905b80821115613d7f5760008155600101613d6b565b5090565b61ffff81165b811461228957600080fd5b8035610f2c81613d83565b60008083601f840112613db457613db4600080fd5b5081356001600160401b03811115613dce57613dce600080fd5b602083019150836001820283011115613de957613de9600080fd5b9250929050565b6001600160401b038116613d89565b8035610f2c81613df0565b60008060008060008060808789031215613e2657613e26600080fd5b6000613e328989613d94565b96505060208701356001600160401b03811115613e5157613e51600080fd5b613e5d89828a01613d9f565b95509550506040613e7089828a01613dff565b93505060608701356001600160401b03811115613e8f57613e8f600080fd5b613e9b89828a01613d9f565b92509250509295509295509295565b6001600160e01b03198116613d89565b8035610f2c81613eaa565b600060208284031215613eda57613eda600080fd5b60006123298484613eba565b8015155b82525050565b60208101610f2c8284613ee6565b600060208284031215613f1357613f13600080fd5b60006123298484613d94565b80613d89565b8035610f2c81613f1f565b60008060408385031215613f4657613f46600080fd5b6000613f528585613d94565b9250506020613f6385828601613f25565b9150509250929050565b60006001600160a01b038216610f2c565b613d8981613f6d565b8035610f2c81613f7e565b600080600060608486031215613faa57613faa600080fd5b6000613fb68686613f87565b9350506020613fc786828701613d94565b9250506040613fd886828701613f25565b9150509250925092565b80613eea565b60e08101613ff6828a613ee6565b6140036020830189613fe2565b6140106040830188613fe2565b61401d6060830187613fe2565b61402a6080830186613fe2565b61403760a0830185613fe2565b61404460c0830184613ee6565b98975050505050505050565b801515613d89565b8035610f2c81614050565b60008060008060008060a0878903121561407f5761407f600080fd5b600061408b8989613d94565b965050602061409c89828a01613f25565b95505060406140ad89828a01613f25565b94505060606140be89828a01614058565b93505060808701356001600160401b03811115613e8f57613e8f600080fd5b604081016140eb8285613fe2565b6113ae6020830184613fe2565b60208101610f2c8284613fe2565b60008060006040848603121561411e5761411e600080fd5b600061412a8686613d94565b93505060208401356001600160401b0381111561414957614149600080fd5b61415586828701613d9f565b92509250509250925092565b6000806040838503121561417757614177600080fd5b6000613f528585613f87565b60ff8116613eea565b60208101610f2c8284614183565b6000602082840312156141af576141af600080fd5b60006123298484614058565b600080604083850312156141d1576141d1600080fd5b60006141dd8585613f87565b9250506020613f6385828601614058565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715614229576142296141ee565b6040525050565b600061423b60405190565b90506142478282614204565b919050565b60006001600160401b03821115614265576142656141ee565b601f19601f83011660200192915050565b82818337506000910152565b60006142956142908461424c565b614230565b9050828152602081018484840111156142b0576142b0600080fd5b6142bb848285614276565b509392505050565b600082601f8301126142d7576142d7600080fd5b8135612329848260208601614282565b6000806000606084860312156142ff576142ff600080fd5b600061430b8686613d94565b93505060208401356001600160401b0381111561432a5761432a600080fd5b614336868287016142c3565b9250506040613fd886828701613dff565b6000610f2c82613f6d565b613d8981614347565b8035610f2c81614352565b60008060006060848603121561437e5761437e600080fd5b600061438a868661435b565b9350506020613fc786828701613f87565b6000606082840312156143b0576143b0600080fd5b50919050565b600080600080600060a086880312156143d1576143d1600080fd5b60006143dd8888613f87565b95505060206143ee88828901613d94565b94505060406143ff88828901613f25565b935050606061441088828901613f25565b92505060808601356001600160401b0381111561442f5761442f600080fd5b61443b8882890161439b565b9150509295509295909350565b60005b8381101561446357818101518382015260200161444b565b50506000910152565b6000614476825190565b80845260208401935061448d818560208601614448565b601f19601f8201165b9093019392505050565b602080825281016113ae818461446c565b60008060008060008060008060e0898b0312156144d0576144d0600080fd5b60006144dc8b8b613f87565b98505060206144ed8b828c01613d94565b97505060406144fe8b828c01613f25565b965050606061450f8b828c01613f25565b95505060808901356001600160401b0381111561452e5761452e600080fd5b61453a8b828c01613d9f565b945094505060a061454d8b828c01613dff565b92505060c08901356001600160401b0381111561456c5761456c600080fd5b6145788b828c0161439b565b9150509295985092959890939650565b60006020828403121561459d5761459d600080fd5b60006123298484613f87565b6000610f2c6001600160a01b0383166145c0565b90565b6001600160a01b031690565b6000610f2c826145a9565b6000610f2c826145cc565b613eea816145d7565b60208101610f2c82846145e2565b6000806040838503121561460f5761460f600080fd5b600061461b8585613d94565b9250506020613f6385828601613d94565b613eea81613f6d565b60208101610f2c828461462c565b600080600080600080600080600060e08a8c03121561466457614664600080fd5b60006146708c8c613d94565b99505060206146818c828d01613f25565b98505060406146928c828d01613f25565b97505060608a01356001600160401b038111156146b1576146b1600080fd5b6146bd8c828d01613d9f565b965096505060806146d08c828d01613dff565b94505060a06146e18c828d01614058565b93505060c08a01356001600160401b0381111561470057614700600080fd5b61470c8c828d01613d9f565b92509250509295985092959850929598565b60008060008060006080868803121561473957614739600080fd5b60006147458888613d94565b955050602061475688828901613d94565b945050604061476788828901613f25565b93505060608601356001600160401b0381111561478657614786600080fd5b61479288828901613d9f565b92509250509295509295909350565b6000806000606084860312156147b9576147b9600080fd5b6000613fb68686613d94565b6000806000806000806000806000806101008b8d0312156147e8576147e8600080fd5b60006147f48d8d613d94565b9a505060208b01356001600160401b0381111561481357614813600080fd5b61481f8d828e01613d9f565b995099505060406148328d828e01613dff565b97505060606148438d828e01613f25565b96505060806148548d828e01613f87565b95505060a06148658d828e01613f25565b94505060c08b01356001600160401b0381111561488457614884600080fd5b6148908d828e01613d9f565b935093505060e06148a38d828e01613f25565b9150509295989b9194979a5092959850565b600080600080608085870312156148ce576148ce600080fd5b60006148da8787613d94565b94505060206148eb87828801613d94565b93505060406148fc87828801613f87565b925050606061490d87828801613f25565b91505092959194509250565b601e81526000602082017f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c65720000815291505b5060200190565b60208082528101610f2c81614919565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061498a57607f821691505b6020821081036143b0576143b0614960565b60006149a9838584614276565b50500190565b600061232982848661499c565b602681526000602082017f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f8152651b9d1c9858dd60d21b602082015291505b5060400190565b60208082528101610f2c816149bc565b61ffff8116613eea565b60208101610f2c8284614a12565b8051610f2c81613f1f565b600060208284031215614a4a57614a4a600080fd5b60006123298484614a2a565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f2c57610f2c614a56565b80820180821115610f2c57610f2c614a56565b602681526000602082017f4461696c79206c696d6974203c2073696e676c65207472616e73616374696f6e815265081b1a5b5a5d60d21b602082015291506149fb565b60208082528101610f2c81614a92565b60608101614af38286614a12565b614b006020830185613fe2565b6123296040830184613fe2565b8183526000602084019350614b23838584614276565b601f19601f840116614496565b60408101614b3e8286614a12565b8181036020830152612326818486614b0d565b603381526000602082017f576974686472617720616d6f756e742073686f756c64206265206c65737320748152721a185b881bdd5d189bdd5b9908185b5bdd5b9d606a1b602082015291506149fb565b60208082528101610f2c81614b51565b602181526000602082017f50726f78794f46543a206f7574626f756e64416d6f756e74206f766572666c6f8152607760f81b602082015291506149fb565b60208082528101610f2c81614bb1565b602681526000602082017f53696e676c65207472616e73616374696f6e206c696d6974203e204461696c79815265081b1a5b5a5d60d21b602082015291506149fb565b60208082528101610f2c81614bff565b602681526000602082017f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062658152650204c7a4170760d41b602082015291506149fb565b60208082528101610f2c81614c52565b6000808335601e1936859003018112614cc057614cc0600080fd5b8084019250823591506001600160401b03821115614ce057614ce0600080fd5b602083019250600182023603831315614cfb57614cfb600080fd5b509250929050565b602e81526000602082017f4461696c79206c696d6974203c2073696e676c6520726563656976652074726181526d1b9cd858dd1a5bdb881b1a5b5a5d60921b602082015291506149fb565b60208082528101610f2c81614d03565b601781526000602082017f73656e64416e6443616c6c2069732064697361626c656400000000000000000081529150614949565b60208082528101610f2c81614d5e565b6000614dac825190565b614dba818560208601614448565b9290920192915050565b60006113ae8284614da2565b6001600160401b038116613eea565b60408101614ded8285614a12565b6113ae6020830184614dd0565b601d81526000602082017f4c7a4170703a206e6f20747275737465642070617468207265636f726400000081529150614949565b60208082528101610f2c81614dfa565b6000610f2c8260601b90565b6000610f2c82614e3e565b613eea614e6182613f6d565b614e4a565b6000614e7382858761499c565b9150614e7f8284614e55565b506014019392505050565b6000610f2c6145bd8381565b614e9f83614e8a565b815460001960089490940293841b1916921b91909117905550565b6000612782818484614e96565b81811015613d3157614eda600082614eba565b600101614ec7565b601f821115612782576000818152602090206020601f85010481016020851015614f095750805b610fb46020601f860104830182614ec7565b81516001600160401b03811115614f3457614f346141ee565b614f3e8254614976565b614f49828285614ee2565b6020601f831160018114614f7d5760008415614f655750858201515b600019600886021c198116600286021786555061187c565b600085815260208120601f198616915b82811015614fad5788850151825560209485019460019092019101614f8d565b86831015614fc95784890151600019601f89166008021c191682555b600160028802018855505050505050505050565b60808101614feb8288614a12565b614ff86020830187614a12565b6150056040830186613fe2565b8181036060830152613a5b818486614b0d565b602e81526000602082017f73696e676c652072656365697665207472616e73616374696f6e206c696d697481526d080f8811185a5b1e481b1a5b5a5d60921b602082015291506149fb565b60208082528101610f2c81615018565b606081016150818286614a12565b614b006020830185614a12565b601f81526000602082017f4f4654436f72653a2063616c6c6572206d757374206265204f4654436f72650081529150614949565b60208082528101610f2c8161508e565b60c081016150e0828b614a12565b81810360208301526150f381898b614b0d565b90506151026040830188614dd0565b61510f6060830187613fe2565b61511c6080830186613fe2565b81810360a083015261512f818486614b0d565b9a9950505050505050505050565b826001600160401b03811115615155576151556141ee565b61515f8254614976565b61516a828285614ee2565b6000601f83116001811461519e57600084156151865750858201355b600019600886021c1981166002860217865550610ef2565b600085815260208120601f198616915b828110156151ce57888501358255602094850194600190920191016151ae565b868310156151ea57600019601f88166008021c19858a01351682555b60016002880201885550505050505050505050565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015291506149fb565b60208082528101610f2c816151ff565b608081016152608287614a12565b61526d6020830186614a12565b61527a604083018561462c565b6126ae6060830184613fe2565b60006152956142908461424c565b9050828152602081018484840111156152b0576152b0600080fd5b6142bb848285614448565b600082601f8301126152cf576152cf600080fd5b8151612329848260208601615287565b6000602082840312156152f4576152f4600080fd5b81516001600160401b0381111561530d5761530d600080fd5b612329848285016152bb565b608081016153278287614a12565b8181036020830152615339818661446c565b90506153486040830185614dd0565b818103606083015261535a818461446c565b9695505050505050565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000614949565b60208082528101610f2c81615364565b60a081016153b48288614a12565b6153c1602083018761462c565b81810360408301526153d3818661446c565b90506153e26060830185613ee6565b8181036080830152613a5b818461446c565b6000806040838503121561540a5761540a600080fd5b60006154168585614a2a565b9250506020613f6385828601614a2a565b634e487b7160e01b600052601260045260246000fd5b60008261544c5761544c615427565b500690565b81810280821583820485141761546957615469614a56565b5092915050565b604081016140eb828561462c565b601c81526000602082017f4f4654436f72653a20756e6b6e6f776e207061636b657420747970650000000081529150614949565b60208082528101610f2c8161547e565b601981526000602082017f4f4654436f72653a20616d6f756e7420746f6f20736d616c6c0000000000000081529150614949565b60208082528101610f2c816154c2565b600e81526000602082016d736c6963655f6f766572666c6f7760901b81529150614949565b60208082528101610f2c81615506565b6011815260006020820170736c6963655f6f75744f66426f756e647360781b81529150614949565b60208082528101610f2c8161553b565b602381526000602082017f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737381526261676560e81b602082015291506149fb565b60208082528101610f2c81615573565b602181526000602082017f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f618152601960fa1b602082015291506149fb565b60208082528101610f2c816155c3565b6080810161561f8288614a12565b8181036020830152615632818688614b0d565b90506156416040830185614dd0565b61535a6060830184613fe2565b60a0810161565c8288614a12565b818103602083015261566e818761446c565b905061567d6040830186614dd0565b818103606083015261568f818561446c565b90508181036080830152613a5b818461446c565b6000826156b2576156b2615427565b500490565b601a81526000602082017f4f4654436f72653a20616d6f756e745344206f766572666c6f7700000000000081529150614949565b60208082528101610f2c816156b7565b6000610f2c8260f81b90565b613eea60ff82166156fb565b6000610f2c8260c01b90565b613eea6001600160401b038216615713565b600061573d8286615707565b60018201915061574d8285613fe2565b60208201915061575d828461571f565b506008019392505050565b601481526000602082017314185d5cd8589b194e881b9bdd081c185d5cd95960621b81529150614949565b60208082528101610f2c81615768565b601081526000602082016f14185d5cd8589b194e881c185d5cd95960821b81529150614949565b60208082528101610f2c816157a3565b606081016157e8828661462c565b614b00602083018561462c565b8051610f2c81614050565b60006020828403121561581557615815600080fd5b600061232984846157f5565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291506149fb565b60208082528101610f2c81615821565b6013815260006020820172746f55696e74385f6f75744f66426f756e647360681b81529150614949565b60208082528101610f2c81615878565b61010081016158c1828b614a12565b81810360208301526158d3818a61446c565b90506158e26040830189614dd0565b6158ef6060830188613fe2565b6158fc608083018761462c565b61590960a0830186613fe2565b81810360c083015261591b818561446c565b905061592a60e0830184613fe2565b9998505050505050505050565b60608082528101615948818661446c565b9050614b006020830185614dd0565b601a81526000602082017f4c7a4170703a206d696e4761734c696d6974206e6f742073657400000000000081529150614949565b60208082528101610f2c81615957565b601b81526000602082017f4c7a4170703a20676173206c696d697420697320746f6f206c6f77000000000081529150614949565b60208082528101610f2c8161599b565b602281526000602082017f50726f78794f46543a206f776e6572206973206e6f742073656e642063616c6c81526132b960f11b602082015291506149fb565b60208082528101610f2c816159df565b603081526000602082017f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742081526f61207472757374656420736f7572636560801b602082015291506149fb565b60208082528101610f2c81615a2e565b60c08101615a998289614a12565b8181036020830152615aab818861446c565b90508181036040830152615abf818761446c565b9050615ace606083018661462c565b615adb608083018561462c565b81810360a0830152614044818461446c565b6000615af98289615707565b600182019150615b098288613fe2565b602082019150615b19828761571f565b600882019150615b298286613fe2565b602082019150615b39828561571f565b6008820191506140448284614da2565b601881526000602082017f4f4654436f72653a20696e76616c6964207061796c6f6164000000000000000081529150614949565b60208082528101610f2c81615b49565b601c81526000602082017f4c7a4170703a20696e76616c69642061646170746572506172616d730000000081529150614949565b60208082528101610f2c81615b8d565b601f81526000602082017f53696e676c65205472616e73616374696f6e204c696d6974204578636565640081529150614949565b60208082528101610f2c81615bd1565b601e81526000602082017f4461696c79205472616e73616374696f6e204c696d697420457863656564000081529150614949565b60208082528101610f2c81615c15565b60208082527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c6172676591019081526000614949565b60208082528101610f2c81615c59565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b602082015291506149fb565b60208082528101610f2c81615c9b565b6015815260006020820174746f416464726573735f6f75744f66426f756e647360581b81529150614949565b60208082528101610f2c81615cee565b6014815260006020820173746f55696e7436345f6f75744f66426f756e647360601b81529150614949565b60208082528101610f2c81615d2a565b6015815260006020820174746f427974657333325f6f75744f66426f756e647360581b81529150614949565b60208082528101610f2c81615d65565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150614949565b60208082528101610f2c81615da156fea264697066735822122089612b317736c92c076d6e6df96ac6a17602e56c4594d806668a81daa9cad3c664736f6c63430008190033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
