{
  "_format": "hh-sol-artifact-1",
  "contractName": "PolygonSpokeConnector",
  "sourceName": "contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_mirrorDomain",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_amb",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rootManager",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_mirrorConnector",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_processGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reserveGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_delayBlocks",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_merkle",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_watcherManager",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "Connector__processMessage_notUsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyOwner_notOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyProposed_notProposedOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_noProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RateLimited__rateLimited_messageSendRateExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__index_indexMoreThan32Bytes",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loc",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "len",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slice",
          "type": "uint256"
        }
      ],
      "name": "TypedMemView__index_overrun",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__unsafeCopyTo_identityOOG",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__unsafeCopyTo_invalidPointer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__unsafeCopyTo_nullPointer",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "AggregateRootReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "AggregateRootRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "AggregateRootVerified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "updated",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "DelayBlocksUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "leaf",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "Dispatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "FundsWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "MessageProcessed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "leaf",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "aggregateRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "aggregateIndex",
          "type": "uint256"
        }
      ],
      "name": "MessageProven",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "MessageSent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "encodedData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "MessageSent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "current",
          "type": "address"
        }
      ],
      "name": "MirrorConnectorUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "mirrorDomain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "amb",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "rootManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "mirrorConnector",
          "type": "address"
        }
      ],
      "name": "NewConnector",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "proposedOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipProposed",
      "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": false,
          "internalType": "bytes32",
          "name": "leaf",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "Process",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "updater",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newRateLimit",
          "type": "uint256"
        }
      ],
      "name": "SendRateLimitUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "SenderAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "SenderRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "watcherManager",
          "type": "address"
        }
      ],
      "name": "WatcherManagerChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "AMB",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MERKLE",
      "outputs": [
        {
          "internalType": "contract MerkleTreeManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIRROR_DOMAIN",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PROCESS_GAS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RESERVE_GAS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ROOT_MANAGER",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptProposedOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "addSender",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowlistedSenders",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delayBlocks",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_destinationDomain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipientAddress",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_messageBody",
          "type": "bytes"
        }
      ],
      "name": "dispatch",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fxChild",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fxRootTunnel",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "home",
      "outputs": [
        {
          "internalType": "contract IOutbox",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_potentialReplica",
          "type": "address"
        }
      ],
      "name": "isReplica",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastSentBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "messages",
      "outputs": [
        {
          "internalType": "enum SpokeConnector.MessageStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mirrorConnector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "outboundRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "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": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "pendingAggregateRoots",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "processMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stateId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "rootMessageSender",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "processMessageFromRoot",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newlyProposed",
          "type": "address"
        }
      ],
      "name": "proposeNewOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposed",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposedTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "message",
              "type": "bytes"
            },
            {
              "internalType": "bytes32[32]",
              "name": "path",
              "type": "bytes32[32]"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "internalType": "struct SpokeConnector.Proof[]",
          "name": "_proofs",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes32",
          "name": "_aggregateRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[32]",
          "name": "_aggregatePath",
          "type": "bytes32[32]"
        },
        {
          "internalType": "uint256",
          "name": "_aggregateIndex",
          "type": "uint256"
        }
      ],
      "name": "proveAndProcess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "provenAggregateRoots",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "provenMessageRoots",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rateLimitBlocks",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_fraudulentRoot",
          "type": "bytes32"
        }
      ],
      "name": "removePendingAggregateRoot",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "removeSender",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounced",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_encodedData",
          "type": "bytes"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "sentMessageRoots",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_delayBlocks",
          "type": "uint256"
        }
      ],
      "name": "setDelayBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_mirrorConnector",
          "type": "address"
        }
      ],
      "name": "setMirrorConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_rateLimit",
          "type": "uint256"
        }
      ],
      "name": "setRateLimitBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_watcherManager",
          "type": "address"
        }
      ],
      "name": "setWatcherManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_expected",
          "type": "address"
        }
      ],
      "name": "verifySender",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "watcherManager",
      "outputs": [
        {
          "internalType": "contract WatcherManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "withdrawFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101606040523480156200001257600080fd5b5060405162003bd038038062003bd0833981016040819052620000359162000483565b878a8a828a8a8a8a8a8a8a808a8a8a8a8a6200005133620002cf565b8463ffffffff166000036200009c5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e85760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000093565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200012057620001208162000334565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f35760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000093565b613a978411620002355760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000093565b6101208590526101408490526001600160a01b038216620002885760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000093565b506001600160a01b0390811661010052600891909155601080546001600160a01b031916999091169890981790975550620005379f50505050505050505050505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6200034a816200035860201b620018851760201c565b6200035581620003c1565b50565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b6011546001600160a01b0316156200042f5760405162461bcd60e51b815260206004820152602a60248201527f4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f4160448201526913149150511657d4d15560b21b606482015260840162000093565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b805163ffffffff811681146200046657600080fd5b919050565b80516001600160a01b03811681146200046657600080fd5b6000806000806000806000806000806101408b8d031215620004a457600080fd5b620004af8b62000451565b9950620004bf60208c0162000451565b9850620004cf60408c016200046b565b9750620004df60608c016200046b565b9650620004ef60808c016200046b565b955060a08b0151945060c08b0151935060e08b01519250620005156101008c016200046b565b9150620005266101208c016200046b565b90509295989b9194979a5092959850565b60805160a05160c05160e0516101005161012051610140516135f8620005d86000396000818161035b0152611d5401526000818161098401528181611d750152611e020152600081816107ab01528181610b010152818161104101526117b5015260006102eb015260006105b101526000818161093a0152610ca90152600081816104f8015281816106c7015281816117570152611c5401526135f86000f3fe6080604052600436106102cd5760003560e01c80638456cb5911610175578063b697f531116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda214610972578063db1b7659146109a6578063e0fed010146109c6578063fa31de01146109e657600080fd5b8063d2a3cc7114610908578063d69f9d6114610928578063d7d317b31461095c57600080fd5b8063b697f53114610843578063b95a200114610863578063c5b350df14610896578063cc394283146108ab578063d1851c92146108cb578063d232c220146108e957600080fd5b80639fa92f9d1161012e5780639fa92f9d14610786578063a01892a514610799578063a792c29b146107cd578063ad9c0c2e146107ed578063b1f8100d14610803578063b2f876431461082357600080fd5b80638456cb59146106a35780638d3638f4146106b85780638da5cb5b146106eb57806398c9f2b9146107095780639a7c4b71146107395780639d3117c71461075957600080fd5b806352a9674b116102345780636159ada1116101ed5780636a42b8f8116101c75780636a42b8f8146106385780636b04a9331461064e578063715018a61461066e5780637f1e9cb01461068357600080fd5b80636159ada1146105d357806365eaf11b1461060357806368742da61461061857600080fd5b806352a9674b146104e6578063572386ca1461051a578063579c16181461054a5780635bd11efc146105605780635c975abb146105805780635f61e3ec1461059f57600080fd5b80633cf52ffb116102865780633cf52ffb1461041b5780633f4ba83a14610430578063450d11f0146104455780634ff746f61461047d578063508a109b1461049d5780635190bc53146104bd57600080fd5b806314168416146102d95780631eeaabea1461032757806325e3beda146103495780632bb1ae7c1461038b5780632bbd59ca1461039e578063301f07c3146103db57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b5061030d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561033357600080fd5b50610347610342366004612f40565b610a14565b005b34801561035557600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161031e565b610347610399366004612ffc565b610abe565b3480156103aa57600080fd5b506103ce6103b9366004612f40565b600f6020526000908152604090205460ff1681565b60405161031e9190613047565b3480156103e757600080fd5b5061040b6103f6366004612f40565b600a6020526000908152604090205460ff1681565b604051901515815260200161031e565b34801561042757600080fd5b5060025461037d565b34801561043c57600080fd5b50610347610c61565b34801561045157600080fd5b50601054610465906001600160a01b031681565b6040516001600160a01b03909116815260200161031e565b34801561048957600080fd5b50610347610498366004612ffc565b610c9e565b3480156104a957600080fd5b506103476104b836600461306f565b610d44565b3480156104c957600080fd5b5061040b6104d8366004613127565b6001600160a01b0316301490565b3480156104f257600080fd5b5061030d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052657600080fd5b5061040b610535366004612f40565b600c6020526000908152604090205460ff1681565b34801561055657600080fd5b5061037d60055481565b34801561056c57600080fd5b5061034761057b366004613127565b611006565b34801561058c57600080fd5b50600354600160a01b900460ff1661040b565b3480156105ab57600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156105df57600080fd5b5061040b6105ee366004613127565b600d6020526000908152604090205460ff1681565b34801561060f57600080fd5b5061037d61103d565b34801561062457600080fd5b50610347610633366004613127565b6110c6565b34801561064457600080fd5b5062093a8061037d565b34801561065a57600080fd5b50610347610669366004612f40565b611143565b34801561067a57600080fd5b5061034761120e565b34801561068f57600080fd5b50601154610465906001600160a01b031681565b3480156106af57600080fd5b50610347611239565b3480156106c457600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030d565b3480156106f757600080fd5b506000546001600160a01b0316610465565b34801561071557600080fd5b5061040b610724366004612f40565b600b6020526000908152604090205460ff1681565b34801561074557600080fd5b50610347610754366004613142565b6112ed565b34801561076557600080fd5b5061037d610774366004612f40565b60096020526000908152604090205481565b34801561079257600080fd5b5030610465565b3480156107a557600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156107d957600080fd5b50600454610465906001600160a01b031681565b3480156107f957600080fd5b5061037d60085481565b34801561080f57600080fd5b5061034761081e366004613127565b611398565b34801561082f57600080fd5b5061034761083e366004613127565b611436565b34801561084f57600080fd5b5061034761085e366004613127565b6114b2565b34801561086f57600080fd5b5061030d61087e3660046131dd565b600e6020526000908152604090205463ffffffff1681565b3480156108a257600080fd5b50610347611531565b3480156108b757600080fd5b50600354610465906001600160a01b031681565b3480156108d757600080fd5b506001546001600160a01b0316610465565b3480156108f557600080fd5b506000546001600160a01b03161561040b565b34801561091457600080fd5b50610347610923366004613127565b6115a1565b34801561093457600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b34801561096857600080fd5b5061037d60065481565b34801561097e57600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109b257600080fd5b5061040b6109c1366004613127565b611678565b3480156109d257600080fd5b506103476109e1366004612f40565b611682565b3480156109f257600080fd5b50610a06610a013660046131f8565b6116b6565b60405161031e92919061329f565b6000546001600160a01b03163314610a3f576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a845760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610ac66118ee565b43600554600654610ad791906132ce565b1115610af6576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906132e1565b6000818152600c602052604090205490915060ff1615610bd75760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a7b565b600081604051602001610bec91815260200190565b6040516020818303038152906040529050610c07818461193b565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c54908390869033906132fa565b60405180910390a1505050565b6000546001600160a01b03163314610c8c576040516311a8a1bb60e31b815260040160405180910390fd5b610c94611986565b610c9c6119d6565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cff5760405162461bcd60e51b8152600401610a7b9060208082526004908201526310a0a6a160e11b604082015260600190565b610d0881611a2b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d39929190613338565b60405180910390a150565b610d4c6118ee565b610d54611a44565b83610d8b5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a7b565b600085856000818110610da057610da0613362565b9050602002810190610db29190613378565b610dbc9080613399565b604051610dca9291906133e7565b604051809103902090506000610e318288886000818110610ded57610ded613362565b9050602002810190610dff9190613378565b60200189896000818110610e1557610e15613362565b9050602002810190610e279190613378565b6104200135611a9d565b9050610e3f81868686611b44565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f655788888263ffffffff16818110610e8457610e84613362565b9050602002810190610e969190613378565b610ea09080613399565b604051610eae9291906133e7565b604051809103902093506000610f03858b8b8563ffffffff16818110610ed657610ed6613362565b9050602002810190610ee89190613378565b6020018c8c8663ffffffff16818110610e1557610e15613362565b9050838114610f425760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a7b565b506000848152600f60205260409020805460ff1916600190811790915501610e5e565b5060005b818163ffffffff161015610ff157610fe889898363ffffffff16818110610f9257610f92613362565b9050602002810190610fa49190613378565b610fae9080613399565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3e92505050565b50600101610f69565b50505050610fff6001600755565b5050505050565b6000546001600160a01b03163314611031576040516311a8a1bb60e31b815260040160405180910390fd5b61103a81611f1b565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c191906132e1565b905090565b6000546001600160a01b031633146110f1576040516311a8a1bb60e31b815260040160405180910390fd5b476110fc8282611f2d565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161113791815260200190565b60405180910390a25050565b6000546001600160a01b0316331461116e576040516311a8a1bb60e31b815260040160405180910390fd5b611176611986565b60008181526009602052604081205490036111cb5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a7b565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d399083815260200190565b6000546001600160a01b03163314610c9c576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a691906133f7565b6112dd5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a7b565b6112e56118ee565b610c9c61204b565b6010546001600160a01b031633146113515760405162461bcd60e51b815260206004820152602160248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e44456044820152602960f91b6064820152608401610a7b565b611392848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208e92505050565b50505050565b6000546001600160a01b031633146113c3576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156113e1575060025415155b156113ff576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361142d57604051634a2fb73f60e11b815260040160405180910390fd5b61103a8161218c565b6000546001600160a01b03163314611461576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d39565b6000546001600160a01b031633146114dd576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d39565b6001546001600160a01b0316331461155c576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261156e9190613419565b1161158c576040516324e0285f60e21b815260040160405180910390fd5b600154610c9c906001600160a01b03166121da565b6000546001600160a01b031633146115cc576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361162a5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a7b565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d39565b6000805b92915050565b6000546001600160a01b031633146116ad576040516311a8a1bb60e31b815260040160405180910390fd5b61103a8161223f565b336000908152600d602052604081205460609060ff166117075760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a7b565b63ffffffff8086166000908152600e60205260408120805491929190911690826117308361342c565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061178f7f0000000000000000000000000000000000000000000000000000000000000000611786336001600160a01b031690565b848a8a8a6122bd565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af1158015611805573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611829919061344f565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361185b600184613419565b848760405161186d9493929190613473565b60405180910390a15090989197509095505050505050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354600160a01b900460ff1615610c9c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a7b565b8051156119795760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a7b565b611982826122f5565b5050565b600354600160a01b900460ff16610c9c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a7b565b6119de611986565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6040516316c2fdb560e21b815260040160405180910390fd5b600260075403611a965760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a7b565b6002600755565b6000806000858152600f602052604090205460ff166002811115611ac357611ac3613031565b14611b065760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a7b565b611b3a8484602080602002604051908101604052809291908260208002808284376000920191909152508691506123249050565b90505b9392505050565b6000848152600b602052604090205460ff1661139257611b6383612672565b6000611b998584602080602002604051908101604052809291908260208002808284376000920191909152508691506123249050565b9050838114611be05760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a7b565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c2f9086815260200190565b60405180910390a35050505050565b600080611c4b83826127d2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c8362ffffff1983166127f6565b63ffffffff1614611cc55760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a7b565b6000611cd662ffffff19831661280b565b905060016000828152600f602052604090205460ff166002811115611cfd57611cfd613031565b14611d345760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a7b565b6000818152600f60205260409020805460ff191660021790556001611d997f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006132ce565b611da39190613419565b5a11611dda5760405162461bcd60e51b8152600401610a7b906020808252600490820152632167617360e01b604082015260600190565b6000611deb62ffffff198416612854565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e4662ffffff198816612865565b611e5562ffffff198916612879565b611e6462ffffff198a1661288e565b611e81611e7662ffffff198c166128a3565b62ffffff19166128d1565b604051602401611e9494939291906134a2565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ece85856000868561291a565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611f079088908b9086906134d1565b60405180910390a150505050505050919050565b611f2481611885565b61103a816129a5565b80471015611f7d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a7b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fca576040519150601f19603f3d011682016040523d82523d6000602084013e611fcf565b606091505b50509050806120465760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a7b565b505050565b6120536118ee565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a0e3390565b60115482906001600160a01b038083169116146121015760405162461bcd60e51b815260206004820152602b60248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560448201526a1497d19493d357d493d3d560aa1b6064820152608401610a7b565b815160201461213c5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a7b565b61214d612148836134f2565b612a33565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced823360405161217e929190613338565b60405180910390a150505050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036122825760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a7b565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d39565b60608686868686866040516020016122da96959493929190613519565b60405160208183030381529060405290509695505050505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051610d399190613573565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806126b55760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a7b565b6000818152600a602052604090205460ff16156126cf5750565b600081815260096020526040812054908190036127255760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a7b565b6008546127328243613419565b10156127805760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a7b565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b8151600090602084016127ed64ffffffffff85168284612b5c565b95945050505050565b600061167c62ffffff19831660286004612b99565b6000806128218360781c6001600160601b031690565b6001600160601b0316905060006128418460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061167c61286283612bc9565b90565b600061167c62ffffff198316826004612b99565b600061167c62ffffff19831660246004612b99565b600061167c62ffffff19831660046020612bda565b600061167c604c6128c181601886901c6001600160601b0316613419565b62ffffff19851691906000612ce5565b60606000806128e98460181c6001600160601b031690565b6001600160601b0316905060405191508192506129098483602001612d61565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff81111561294057612940612f59565b6040519080825280601f01601f19166020018201604052801561296a576020820181803683370190505b5090506000808751602089018b8e8ef191503d92508683111561298b578692505b828152826000602083013e90999098509650505050505050565b6011546001600160a01b031615612a115760405162461bcd60e51b815260206004820152602a60248201527f4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f4160448201526913149150511657d4d15560b21b6064820152608401610a7b565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b80612a715760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a7b565b60008181526009602052604090205415612ac45760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a7b565b6000818152600a602052604090205460ff1615612b195760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a7b565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d399083815260200190565b600080612b6983856132ce565b9050604051811115612b79575060005b80600003612b8e5762ffffff19915050611b3d565b6127ed858585612e54565b6000612ba6826020613586565b612bb190600861359f565b60ff16612bbf858585612bda565b901c949350505050565b600061167c62ffffff198316602c60205b60008160ff16600003612bef57506000611b3d565b612c028460181c6001600160601b031690565b6001600160601b0316612c1860ff8416856132ce565b1115612c8057612c318460781c6001600160601b031690565b612c448560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a7b565b60208260ff161115612ca55760405163045df3f960e01b815260040160405180910390fd5b600882026000612cbe8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612cfb8660781c6001600160601b031690565b6001600160601b03169050612d0f86612ecb565b84612d1a87846132ce565b612d2491906132ce565b1115612d375762ffffff19915050612d59565b612d4185826132ce565b9050612d558364ffffffffff168286612b5c565b9150505b949350505050565b600062ffffff1980841603612d895760405163148d513360e21b815260040160405180910390fd5b612d9283612f04565b15612db057604051632ee0949160e11b815260040160405180910390fd5b6000612dc58460181c6001600160601b031690565b6001600160601b031690506000612de58560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e065760206060fd5b8386858560045afa905080612e2e57604051632af1bd9b60e21b815260040160405180910390fd5b612e49612e3b8860d81c90565b64ffffffffff168786612e54565b979650505050505050565b60006060601883856001600160601b03821682148015612e7c575086816001600160601b0316145b612eb55760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a7b565b96831b90961790911b90941790931b9392505050565b6000612ee08260181c6001600160601b031690565b612ef38360781c6001600160601b031690565b016001600160601b03169050919050565b6000612f108260d81c90565b64ffffffffff1664ffffffffff03612f2a57506001919050565b6000612f3583612ecb565b604051109392505050565b600060208284031215612f5257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612f8057600080fd5b813567ffffffffffffffff80821115612f9b57612f9b612f59565b604051601f8301601f19908116603f01168101908282118183101715612fc357612fc3612f59565b81604052838152866020858801011115612fdc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561300e57600080fd5b813567ffffffffffffffff81111561302557600080fd5b612d5984828501612f6f565b634e487b7160e01b600052602160045260246000fd5b602081016003831061306957634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561308857600080fd5b853567ffffffffffffffff808211156130a057600080fd5b818801915088601f8301126130b457600080fd5b8135818111156130c357600080fd5b8960208260051b85010111156130d857600080fd5b6020928301975095505086013592506104408601878111156130f957600080fd5b94979396509194604001933592915050565b80356001600160a01b038116811461312257600080fd5b919050565b60006020828403121561313957600080fd5b611b3d8261310b565b6000806000806060858703121561315857600080fd5b843593506131686020860161310b565b9250604085013567ffffffffffffffff8082111561318557600080fd5b818701915087601f83011261319957600080fd5b8135818111156131a857600080fd5b8860208285010111156131ba57600080fd5b95989497505060200194505050565b803563ffffffff8116811461312257600080fd5b6000602082840312156131ef57600080fd5b611b3d826131c9565b60008060006060848603121561320d57600080fd5b613216846131c9565b925060208401359150604084013567ffffffffffffffff81111561323957600080fd5b61324586828701612f6f565b9150509250925092565b60005b8381101561326a578181015183820152602001613252565b50506000910152565b6000815180845261328b81602086016020860161324f565b601f01601f19169290920160200192915050565b828152604060208201526000611b3a6040830184613273565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167c5761167c6132b8565b6000602082840312156132f357600080fd5b5051919050565b60608152600061330d6060830186613273565b828103602084015261331f8186613273565b91505060018060a01b0383166040830152949350505050565b60408152600061334b6040830185613273565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261338f57600080fd5b9190910192915050565b6000808335601e198436030181126133b057600080fd5b83018035915067ffffffffffffffff8211156133cb57600080fd5b6020019150368190038213156133e057600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561340957600080fd5b81518015158114611b3d57600080fd5b8181038181111561167c5761167c6132b8565b600063ffffffff808316818103613445576134456132b8565b6001019392505050565b6000806040838503121561346257600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006134986080830184613273565b9695505050505050565b600063ffffffff8087168352808616602084015250836040830152608060608301526134986080830184613273565b83815282151560208201526060604082015260006127ed6060830184613273565b80516020808301519190811015613513576000198160200360031b1b821691505b50919050565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c830152825161356181604c85016020870161324f565b91909101604c01979650505050505050565b602081526000611b3d6020830184613273565b60ff828116828216039081111561167c5761167c6132b8565b60ff81811683821602908116908181146135bb576135bb6132b8565b509291505056fea2646970667358221220b6edae06494dd48d99fd1393de6c6a9203028115008d2d15d85a6e887403494d64736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106102cd5760003560e01c80638456cb5911610175578063b697f531116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda214610972578063db1b7659146109a6578063e0fed010146109c6578063fa31de01146109e657600080fd5b8063d2a3cc7114610908578063d69f9d6114610928578063d7d317b31461095c57600080fd5b8063b697f53114610843578063b95a200114610863578063c5b350df14610896578063cc394283146108ab578063d1851c92146108cb578063d232c220146108e957600080fd5b80639fa92f9d1161012e5780639fa92f9d14610786578063a01892a514610799578063a792c29b146107cd578063ad9c0c2e146107ed578063b1f8100d14610803578063b2f876431461082357600080fd5b80638456cb59146106a35780638d3638f4146106b85780638da5cb5b146106eb57806398c9f2b9146107095780639a7c4b71146107395780639d3117c71461075957600080fd5b806352a9674b116102345780636159ada1116101ed5780636a42b8f8116101c75780636a42b8f8146106385780636b04a9331461064e578063715018a61461066e5780637f1e9cb01461068357600080fd5b80636159ada1146105d357806365eaf11b1461060357806368742da61461061857600080fd5b806352a9674b146104e6578063572386ca1461051a578063579c16181461054a5780635bd11efc146105605780635c975abb146105805780635f61e3ec1461059f57600080fd5b80633cf52ffb116102865780633cf52ffb1461041b5780633f4ba83a14610430578063450d11f0146104455780634ff746f61461047d578063508a109b1461049d5780635190bc53146104bd57600080fd5b806314168416146102d95780631eeaabea1461032757806325e3beda146103495780632bb1ae7c1461038b5780632bbd59ca1461039e578063301f07c3146103db57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b5061030d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561033357600080fd5b50610347610342366004612f40565b610a14565b005b34801561035557600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161031e565b610347610399366004612ffc565b610abe565b3480156103aa57600080fd5b506103ce6103b9366004612f40565b600f6020526000908152604090205460ff1681565b60405161031e9190613047565b3480156103e757600080fd5b5061040b6103f6366004612f40565b600a6020526000908152604090205460ff1681565b604051901515815260200161031e565b34801561042757600080fd5b5060025461037d565b34801561043c57600080fd5b50610347610c61565b34801561045157600080fd5b50601054610465906001600160a01b031681565b6040516001600160a01b03909116815260200161031e565b34801561048957600080fd5b50610347610498366004612ffc565b610c9e565b3480156104a957600080fd5b506103476104b836600461306f565b610d44565b3480156104c957600080fd5b5061040b6104d8366004613127565b6001600160a01b0316301490565b3480156104f257600080fd5b5061030d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052657600080fd5b5061040b610535366004612f40565b600c6020526000908152604090205460ff1681565b34801561055657600080fd5b5061037d60055481565b34801561056c57600080fd5b5061034761057b366004613127565b611006565b34801561058c57600080fd5b50600354600160a01b900460ff1661040b565b3480156105ab57600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156105df57600080fd5b5061040b6105ee366004613127565b600d6020526000908152604090205460ff1681565b34801561060f57600080fd5b5061037d61103d565b34801561062457600080fd5b50610347610633366004613127565b6110c6565b34801561064457600080fd5b5062093a8061037d565b34801561065a57600080fd5b50610347610669366004612f40565b611143565b34801561067a57600080fd5b5061034761120e565b34801561068f57600080fd5b50601154610465906001600160a01b031681565b3480156106af57600080fd5b50610347611239565b3480156106c457600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030d565b3480156106f757600080fd5b506000546001600160a01b0316610465565b34801561071557600080fd5b5061040b610724366004612f40565b600b6020526000908152604090205460ff1681565b34801561074557600080fd5b50610347610754366004613142565b6112ed565b34801561076557600080fd5b5061037d610774366004612f40565b60096020526000908152604090205481565b34801561079257600080fd5b5030610465565b3480156107a557600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156107d957600080fd5b50600454610465906001600160a01b031681565b3480156107f957600080fd5b5061037d60085481565b34801561080f57600080fd5b5061034761081e366004613127565b611398565b34801561082f57600080fd5b5061034761083e366004613127565b611436565b34801561084f57600080fd5b5061034761085e366004613127565b6114b2565b34801561086f57600080fd5b5061030d61087e3660046131dd565b600e6020526000908152604090205463ffffffff1681565b3480156108a257600080fd5b50610347611531565b3480156108b757600080fd5b50600354610465906001600160a01b031681565b3480156108d757600080fd5b506001546001600160a01b0316610465565b3480156108f557600080fd5b506000546001600160a01b03161561040b565b34801561091457600080fd5b50610347610923366004613127565b6115a1565b34801561093457600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b34801561096857600080fd5b5061037d60065481565b34801561097e57600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109b257600080fd5b5061040b6109c1366004613127565b611678565b3480156109d257600080fd5b506103476109e1366004612f40565b611682565b3480156109f257600080fd5b50610a06610a013660046131f8565b6116b6565b60405161031e92919061329f565b6000546001600160a01b03163314610a3f576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a845760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610ac66118ee565b43600554600654610ad791906132ce565b1115610af6576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906132e1565b6000818152600c602052604090205490915060ff1615610bd75760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a7b565b600081604051602001610bec91815260200190565b6040516020818303038152906040529050610c07818461193b565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c54908390869033906132fa565b60405180910390a1505050565b6000546001600160a01b03163314610c8c576040516311a8a1bb60e31b815260040160405180910390fd5b610c94611986565b610c9c6119d6565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cff5760405162461bcd60e51b8152600401610a7b9060208082526004908201526310a0a6a160e11b604082015260600190565b610d0881611a2b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d39929190613338565b60405180910390a150565b610d4c6118ee565b610d54611a44565b83610d8b5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a7b565b600085856000818110610da057610da0613362565b9050602002810190610db29190613378565b610dbc9080613399565b604051610dca9291906133e7565b604051809103902090506000610e318288886000818110610ded57610ded613362565b9050602002810190610dff9190613378565b60200189896000818110610e1557610e15613362565b9050602002810190610e279190613378565b6104200135611a9d565b9050610e3f81868686611b44565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f655788888263ffffffff16818110610e8457610e84613362565b9050602002810190610e969190613378565b610ea09080613399565b604051610eae9291906133e7565b604051809103902093506000610f03858b8b8563ffffffff16818110610ed657610ed6613362565b9050602002810190610ee89190613378565b6020018c8c8663ffffffff16818110610e1557610e15613362565b9050838114610f425760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a7b565b506000848152600f60205260409020805460ff1916600190811790915501610e5e565b5060005b818163ffffffff161015610ff157610fe889898363ffffffff16818110610f9257610f92613362565b9050602002810190610fa49190613378565b610fae9080613399565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3e92505050565b50600101610f69565b50505050610fff6001600755565b5050505050565b6000546001600160a01b03163314611031576040516311a8a1bb60e31b815260040160405180910390fd5b61103a81611f1b565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c191906132e1565b905090565b6000546001600160a01b031633146110f1576040516311a8a1bb60e31b815260040160405180910390fd5b476110fc8282611f2d565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161113791815260200190565b60405180910390a25050565b6000546001600160a01b0316331461116e576040516311a8a1bb60e31b815260040160405180910390fd5b611176611986565b60008181526009602052604081205490036111cb5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a7b565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d399083815260200190565b6000546001600160a01b03163314610c9c576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a691906133f7565b6112dd5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a7b565b6112e56118ee565b610c9c61204b565b6010546001600160a01b031633146113515760405162461bcd60e51b815260206004820152602160248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e44456044820152602960f91b6064820152608401610a7b565b611392848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208e92505050565b50505050565b6000546001600160a01b031633146113c3576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156113e1575060025415155b156113ff576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361142d57604051634a2fb73f60e11b815260040160405180910390fd5b61103a8161218c565b6000546001600160a01b03163314611461576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d39565b6000546001600160a01b031633146114dd576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d39565b6001546001600160a01b0316331461155c576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261156e9190613419565b1161158c576040516324e0285f60e21b815260040160405180910390fd5b600154610c9c906001600160a01b03166121da565b6000546001600160a01b031633146115cc576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361162a5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a7b565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d39565b6000805b92915050565b6000546001600160a01b031633146116ad576040516311a8a1bb60e31b815260040160405180910390fd5b61103a8161223f565b336000908152600d602052604081205460609060ff166117075760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a7b565b63ffffffff8086166000908152600e60205260408120805491929190911690826117308361342c565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061178f7f0000000000000000000000000000000000000000000000000000000000000000611786336001600160a01b031690565b848a8a8a6122bd565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af1158015611805573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611829919061344f565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361185b600184613419565b848760405161186d9493929190613473565b60405180910390a15090989197509095505050505050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354600160a01b900460ff1615610c9c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a7b565b8051156119795760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a7b565b611982826122f5565b5050565b600354600160a01b900460ff16610c9c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a7b565b6119de611986565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6040516316c2fdb560e21b815260040160405180910390fd5b600260075403611a965760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a7b565b6002600755565b6000806000858152600f602052604090205460ff166002811115611ac357611ac3613031565b14611b065760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a7b565b611b3a8484602080602002604051908101604052809291908260208002808284376000920191909152508691506123249050565b90505b9392505050565b6000848152600b602052604090205460ff1661139257611b6383612672565b6000611b998584602080602002604051908101604052809291908260208002808284376000920191909152508691506123249050565b9050838114611be05760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a7b565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c2f9086815260200190565b60405180910390a35050505050565b600080611c4b83826127d2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c8362ffffff1983166127f6565b63ffffffff1614611cc55760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a7b565b6000611cd662ffffff19831661280b565b905060016000828152600f602052604090205460ff166002811115611cfd57611cfd613031565b14611d345760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a7b565b6000818152600f60205260409020805460ff191660021790556001611d997f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006132ce565b611da39190613419565b5a11611dda5760405162461bcd60e51b8152600401610a7b906020808252600490820152632167617360e01b604082015260600190565b6000611deb62ffffff198416612854565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e4662ffffff198816612865565b611e5562ffffff198916612879565b611e6462ffffff198a1661288e565b611e81611e7662ffffff198c166128a3565b62ffffff19166128d1565b604051602401611e9494939291906134a2565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ece85856000868561291a565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611f079088908b9086906134d1565b60405180910390a150505050505050919050565b611f2481611885565b61103a816129a5565b80471015611f7d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a7b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fca576040519150601f19603f3d011682016040523d82523d6000602084013e611fcf565b606091505b50509050806120465760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a7b565b505050565b6120536118ee565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a0e3390565b60115482906001600160a01b038083169116146121015760405162461bcd60e51b815260206004820152602b60248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560448201526a1497d19493d357d493d3d560aa1b6064820152608401610a7b565b815160201461213c5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a7b565b61214d612148836134f2565b612a33565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced823360405161217e929190613338565b60405180910390a150505050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036122825760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a7b565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d39565b60608686868686866040516020016122da96959493929190613519565b60405160208183030381529060405290509695505050505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051610d399190613573565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806126b55760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a7b565b6000818152600a602052604090205460ff16156126cf5750565b600081815260096020526040812054908190036127255760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a7b565b6008546127328243613419565b10156127805760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a7b565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b8151600090602084016127ed64ffffffffff85168284612b5c565b95945050505050565b600061167c62ffffff19831660286004612b99565b6000806128218360781c6001600160601b031690565b6001600160601b0316905060006128418460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061167c61286283612bc9565b90565b600061167c62ffffff198316826004612b99565b600061167c62ffffff19831660246004612b99565b600061167c62ffffff19831660046020612bda565b600061167c604c6128c181601886901c6001600160601b0316613419565b62ffffff19851691906000612ce5565b60606000806128e98460181c6001600160601b031690565b6001600160601b0316905060405191508192506129098483602001612d61565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff81111561294057612940612f59565b6040519080825280601f01601f19166020018201604052801561296a576020820181803683370190505b5090506000808751602089018b8e8ef191503d92508683111561298b578692505b828152826000602083013e90999098509650505050505050565b6011546001600160a01b031615612a115760405162461bcd60e51b815260206004820152602a60248201527f4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f4160448201526913149150511657d4d15560b21b6064820152608401610a7b565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b80612a715760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a7b565b60008181526009602052604090205415612ac45760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a7b565b6000818152600a602052604090205460ff1615612b195760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a7b565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d399083815260200190565b600080612b6983856132ce565b9050604051811115612b79575060005b80600003612b8e5762ffffff19915050611b3d565b6127ed858585612e54565b6000612ba6826020613586565b612bb190600861359f565b60ff16612bbf858585612bda565b901c949350505050565b600061167c62ffffff198316602c60205b60008160ff16600003612bef57506000611b3d565b612c028460181c6001600160601b031690565b6001600160601b0316612c1860ff8416856132ce565b1115612c8057612c318460781c6001600160601b031690565b612c448560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a7b565b60208260ff161115612ca55760405163045df3f960e01b815260040160405180910390fd5b600882026000612cbe8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612cfb8660781c6001600160601b031690565b6001600160601b03169050612d0f86612ecb565b84612d1a87846132ce565b612d2491906132ce565b1115612d375762ffffff19915050612d59565b612d4185826132ce565b9050612d558364ffffffffff168286612b5c565b9150505b949350505050565b600062ffffff1980841603612d895760405163148d513360e21b815260040160405180910390fd5b612d9283612f04565b15612db057604051632ee0949160e11b815260040160405180910390fd5b6000612dc58460181c6001600160601b031690565b6001600160601b031690506000612de58560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e065760206060fd5b8386858560045afa905080612e2e57604051632af1bd9b60e21b815260040160405180910390fd5b612e49612e3b8860d81c90565b64ffffffffff168786612e54565b979650505050505050565b60006060601883856001600160601b03821682148015612e7c575086816001600160601b0316145b612eb55760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a7b565b96831b90961790911b90941790931b9392505050565b6000612ee08260181c6001600160601b031690565b612ef38360781c6001600160601b031690565b016001600160601b03169050919050565b6000612f108260d81c90565b64ffffffffff1664ffffffffff03612f2a57506001919050565b6000612f3583612ecb565b604051109392505050565b600060208284031215612f5257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612f8057600080fd5b813567ffffffffffffffff80821115612f9b57612f9b612f59565b604051601f8301601f19908116603f01168101908282118183101715612fc357612fc3612f59565b81604052838152866020858801011115612fdc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561300e57600080fd5b813567ffffffffffffffff81111561302557600080fd5b612d5984828501612f6f565b634e487b7160e01b600052602160045260246000fd5b602081016003831061306957634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561308857600080fd5b853567ffffffffffffffff808211156130a057600080fd5b818801915088601f8301126130b457600080fd5b8135818111156130c357600080fd5b8960208260051b85010111156130d857600080fd5b6020928301975095505086013592506104408601878111156130f957600080fd5b94979396509194604001933592915050565b80356001600160a01b038116811461312257600080fd5b919050565b60006020828403121561313957600080fd5b611b3d8261310b565b6000806000806060858703121561315857600080fd5b843593506131686020860161310b565b9250604085013567ffffffffffffffff8082111561318557600080fd5b818701915087601f83011261319957600080fd5b8135818111156131a857600080fd5b8860208285010111156131ba57600080fd5b95989497505060200194505050565b803563ffffffff8116811461312257600080fd5b6000602082840312156131ef57600080fd5b611b3d826131c9565b60008060006060848603121561320d57600080fd5b613216846131c9565b925060208401359150604084013567ffffffffffffffff81111561323957600080fd5b61324586828701612f6f565b9150509250925092565b60005b8381101561326a578181015183820152602001613252565b50506000910152565b6000815180845261328b81602086016020860161324f565b601f01601f19169290920160200192915050565b828152604060208201526000611b3a6040830184613273565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167c5761167c6132b8565b6000602082840312156132f357600080fd5b5051919050565b60608152600061330d6060830186613273565b828103602084015261331f8186613273565b91505060018060a01b0383166040830152949350505050565b60408152600061334b6040830185613273565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261338f57600080fd5b9190910192915050565b6000808335601e198436030181126133b057600080fd5b83018035915067ffffffffffffffff8211156133cb57600080fd5b6020019150368190038213156133e057600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561340957600080fd5b81518015158114611b3d57600080fd5b8181038181111561167c5761167c6132b8565b600063ffffffff808316818103613445576134456132b8565b6001019392505050565b6000806040838503121561346257600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006134986080830184613273565b9695505050505050565b600063ffffffff8087168352808616602084015250836040830152608060608301526134986080830184613273565b83815282151560208201526060604082015260006127ed6060830184613273565b80516020808301519190811015613513576000198160200360031b1b821691505b50919050565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c830152825161356181604c85016020870161324f565b91909101604c01979650505050505050565b602081526000611b3d6020830184613273565b60ff828116828216039081111561167c5761167c6132b8565b60ff81811683821602908116908181146135bb576135bb6132b8565b509291505056fea2646970667358221220b6edae06494dd48d99fd1393de6c6a9203028115008d2d15d85a6e887403494d64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
