{
  "_format": "hh-sol-artifact-1",
  "contractName": "MAHAXVetoGovernor",
  "sourceName": "contracts/MAHAXVetoGovernor.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IRegistry",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_initialVotingDelay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_initialVotingPeriod",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_initialProposalThreshold",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "__quorum",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "Empty",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "ProposalCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "proposer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "string[]",
          "name": "signatures",
          "type": "string[]"
        },
        {
          "indexed": false,
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "startBlock",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "endBlock",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "description",
          "type": "string"
        }
      ],
      "name": "ProposalCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "ProposalExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldProposalThreshold",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newProposalThreshold",
          "type": "uint256"
        }
      ],
      "name": "ProposalThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldQuorum",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newQuorum",
          "type": "uint256"
        }
      ],
      "name": "QuorumUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "weight",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "reason",
          "type": "string"
        }
      ],
      "name": "VoteCast",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "weight",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "VoteCastWithParams",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldVotingDelay",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newVotingDelay",
          "type": "uint256"
        }
      ],
      "name": "VotingDelaySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldVotingPeriod",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newVotingPeriod",
          "type": "uint256"
        }
      ],
      "name": "VotingPeriodSet",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BALLOT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "COUNTING_MODE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "EXTENDED_BALLOT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        }
      ],
      "name": "castVote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "castVoteBySig",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        }
      ],
      "name": "castVoteWithReason",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "castVoteWithReasonAndParams",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "castVoteWithReasonAndParamsBySig",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "descriptionHash",
          "type": "bytes32"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "getVotesWithParams",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasVoted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "descriptionHash",
          "type": "bytes32"
        }
      ],
      "name": "hashProposal",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "proposalDeadline",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "proposalSnapshot",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposalThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "proposalVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "againstVotes",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "forVotes",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "abstainVotes",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "internalType": "string",
          "name": "description",
          "type": "string"
        }
      ],
      "name": "propose",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "quorum",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "relay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newProposalThreshold",
          "type": "uint256"
        }
      ],
      "name": "setProposalThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newVotingDelay",
          "type": "uint256"
        }
      ],
      "name": "setVotingDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newVotingPeriod",
          "type": "uint256"
        }
      ],
      "name": "setVotingPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum IGovernor.ProposalState",
          "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": "uint256",
          "name": "newQuorum",
          "type": "uint256"
        }
      ],
      "name": "updateQuorum",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "votingDelay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "votingPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101606040523480156200001257600080fd5b50604051620032f6380380620032f683398101604081905262000035916200039a565b8383836040518060400160405280601181526020017026a0a420ac2b32ba37a3b7bb32b93737b960791b81525080620000736200016c60201b60201c565b815160208084019190912082518383012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c00190528051940193909320919290916080523060601b60c05261012052505082516200011c9250600091506020840190620002f4565b506200012a90508362000187565b6200013582620001c8565b62000140816200026e565b5050506001600160601b0319606086901b16610140526200016181620002af565b50505050506200042c565b6040805180820190915260018152603160f81b602082015290565b60045460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a1600455565b600081116200022d5760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f6420604482015266746f6f206c6f7760c81b606482015260840160405180910390fd5b60055460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a1600555565b60065460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600655565b600880549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb0910160405180910390a15050565b8280546200030290620003ef565b90600052602060002090601f01602090048101928262000326576000855562000371565b82601f106200034157805160ff191683800117855562000371565b8280016001018555821562000371579182015b828111156200037157825182559160200191906001019062000354565b506200037f92915062000383565b5090565b5b808211156200037f576000815560010162000384565b600080600080600060a08688031215620003b2578081fd5b85516001600160a01b0381168114620003c9578182fd5b602087015160408801516060890151608090990151929a91995097965090945092505050565b600181811c908216806200040457607f821691505b602082108114156200042657634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160601c60e05161010051610120516101405160601c612e6262000494600039600081816104cd015261179e01526000611a4101526000611a9001526000611a6b015260006119c4015260006119ee01526000611a180152612e626000f3fe6080604052600436106101bd5760003560e01c806370b0f660116100ed578063c28bc2fa11610090578063c28bc2fa146105c8578063c59057e4146105e8578063dd4e2ba514610608578063deaaa7cc1461064e578063ea0217cf14610682578063eb9019d4146106a2578063ece40cc1146106c2578063f23a6e61146106e2578063f8ce560a1461070e57600080fd5b806370b0f6601461049b5780637b103999146104bb5780637b3c71d3146105075780637d5e81e2146105275780639a802a6d14610547578063b58131b014610567578063bc197c811461057c578063c01f9e37146105a857600080fd5b806335680dc21161016057806335680dc2146103105780633932abb1146103305780633bccf4fd146103455780633e4f49e6146103655780634385963214610392578063544ffc9c146103dc57806354fd4d5014610431578063567813881461045b5780635f398a141461047b57600080fd5b806301ffc9a7146101cb57806302a251a314610200578063034201811461022357806306fdde0314610243578063150b7a02146102655780632656227d146102a95780632d63f693146102bc5780632fe3e261146102dc57600080fd5b366101c657005b005b600080fd5b3480156101d757600080fd5b506101eb6101e63660046126ae565b610730565b60405190151581526020015b60405180910390f35b34801561020c57600080fd5b5061021561079d565b6040519081526020016101f7565b34801561022f57600080fd5b5061021561023e366004612805565b6107ad565b34801561024f57600080fd5b506102586108a5565b6040516101f79190612a86565b34801561027157600080fd5b506102906102803660046123cc565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016101f7565b6102156102b7366004612575565b610937565b3480156102c857600080fd5b506102156102d73660046126d6565b610a7f565b3480156102e857600080fd5b506102157fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b34801561031c57600080fd5b506101c461032b3660046126d6565b610ab6565b34801561033c57600080fd5b50610215610afd565b34801561035157600080fd5b506102156103603660046128a8565b610b08565b34801561037157600080fd5b506103856103803660046126d6565b610b7e565b6040516101f79190612a5e565b34801561039e57600080fd5b506101eb6103ad366004612706565b60008281526007602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b3480156103e857600080fd5b506104166103f73660046126d6565b6000908152600760205260409020805460018201546002909201549092565b604080519384526020840192909252908201526060016101f7565b34801561043d57600080fd5b506040805180820190915260018152603160f81b6020820152610258565b34801561046757600080fd5b50610215610476366004612735565b610c8a565b34801561048757600080fd5b5061021561049636600461279f565b610cb3565b3480156104a757600080fd5b506101c46104b63660046126d6565b610cfd565b3480156104c757600080fd5b506104ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101f7565b34801561051357600080fd5b50610215610522366004612760565b610d41565b34801561053357600080fd5b50610215610542366004612600565b610d93565b34801561055357600080fd5b5061021561056236600461251f565b61103e565b34801561057357600080fd5b50610215611055565b34801561058857600080fd5b50610290610597366004612323565b63bc197c8160e01b95945050505050565b3480156105b457600080fd5b506102156105c33660046126d6565b611060565b3480156105d457600080fd5b506101c46105e33660046124c6565b61108f565b3480156105f457600080fd5b50610215610603366004612575565b611113565b34801561061457600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e90820152610258565b34801561065a57600080fd5b506102157f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b34801561068e57600080fd5b506101c461069d3660046126d6565b61114d565b3480156106ae57600080fd5b506102156106bd36600461249b565b611191565b3480156106ce57600080fd5b506101c46106dd3660046126d6565b6111b2565b3480156106ee57600080fd5b506102906106fd366004612435565b63f23a6e6160e01b95945050505050565b34801561071a57600080fd5b506102156107293660046126d6565b5060085490565b60006001600160e01b0319821663bf26d89760e01b148061076157506001600160e01b031982166379dd796f60e01b145b8061077c57506001600160e01b03198216630271189760e51b145b8061079757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006107a860055490565b905090565b6000806108516108497fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c6040516107e99291906129e7565b60405180910390208b8051906020012060405160200161082e959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b604051602081830303815290604052805190602001206111f6565b868686611244565b90506108978a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250611262915050565b9a9950505050505050505050565b6060600080546108b490612d45565b80601f01602080910402602001604051908101604052809291908181526020018280546108e090612d45565b801561092d5780601f106109025761010080835404028352916020019161092d565b820191906000526020600020905b81548152906001019060200180831161091057829003601f168201915b5050505050905090565b60008061094686868686611113565b9050600061095382610b7e565b9050600481600781111561097757634e487b7160e01b600052602160045260246000fd5b14806109a2575060058160078111156109a057634e487b7160e01b600052602160045260246000fd5b145b6109fd5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756044820152601b60fa1b60648201526084015b60405180910390fd5b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a1610a5b82888888886113d2565b610a68828888888861147b565b610a7582888888886113d2565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b333014610ad55760405162461bcd60e51b81526004016109f490612a99565b610af1565b80610ae560026115a4565b14610aef57610ada565b505b610afa81611627565b50565b60006107a860045490565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff851660608201526000908190610b56906108499060800161082e565b9050610b738782886040518060200160405280600081525061166c565b979650505050505050565b6000818152600160205260408120600281015460ff1615610ba25750600792915050565b6002810154610100900460ff1615610bbd5750600292915050565b6000610bc884610a7f565b905080610c175760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c20696400000060448201526064016109f4565b438110610c28575060009392505050565b6000610c3385611060565b9050438110610c4757506001949350505050565b610c5085611698565b8015610c6f575060008581526007602052604090208054600190910154115b15610c7f57506004949350505050565b506003949350505050565b600080339050610cab8482856040518060200160405280600081525061166c565b949350505050565b600080339050610b7387828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611262915050565b333014610d1c5760405162461bcd60e51b81526004016109f490612a99565b610d38565b80610d2c60026115a4565b14610d3657610d21565b505b610afa816116cf565b600080339050610d8986828787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166c92505050565b9695505050505050565b6000610d9d611055565b610dac336106bd600143612cfe565b1015610e145760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f7720706044820152701c9bdc1bdcd85b081d1a1c995cda1bdb19607a1b60648201526084016109f4565b6000610e298686868680519060200120611113565b90508451865114610e4c5760405162461bcd60e51b81526004016109f490612acb565b8351865114610e6d5760405162461bcd60e51b81526004016109f490612acb565b6000865111610eb95760405162461bcd60e51b815260206004820152601860248201527711dbdd995c9b9bdc8e88195b5c1d1e481c1c9bdc1bdcd85b60421b60448201526064016109f4565b600081815260016020908152604091829020825191820190925281546001600160401b03169081905215610f395760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b60648201526084016109f4565b6000610f4b610f46610afd565b611710565b610f5443611710565b610f5e9190612cd3565b90506000610f6d610f4661079d565b610f779083612cd3565b9050610f83838361177c565b610f90600184018261177c565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b03811115610fdc57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561100f57816020015b6060815260200190600190039081610ffa5790505b508c88888e60405161102999989796959493929190612b0c565b60405180910390a15091979650505050505050565b600061104b84848461179a565b90505b9392505050565b60006107a860065490565b60008181526001602081815260408084208151928301909152909101546001600160401b031690819052610aa7565b3330146110ae5760405162461bcd60e51b81526004016109f490612a99565b6110ca565b806110be60026115a4565b146110c8576110b3565b505b61110c8483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892506118af915050565b5050505050565b60008484848460405160200161112c9493929190612a13565b60408051601f19818403018152919052805160209091012095945050505050565b33301461116c5760405162461bcd60e51b81526004016109f490612a99565b611188565b8061117c60026115a4565b1461118657611171565b505b610afa816118d5565b600061104e83836111ad60408051602081019091526000815290565b61179a565b3330146111d15760405162461bcd60e51b81526004016109f490612a99565b6111ed565b806111e160026115a4565b146111eb576111d6565b505b610afa81611976565b60006107976112036119b7565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061125587878787611ade565b91509150610a7581611bc1565b600085815260016020819052604082209061127c88610b7e565b600781111561129b57634e487b7160e01b600052602160045260246000fd5b146112f45760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b60648201526084016109f4565b604080516020810190915281546001600160401b03169081905260009061131d9088908661179a565b905061132c8888888488611dbd565b835161137e57866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4898884896040516113719493929190612bfa565b60405180910390a2610b73565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb871289888489896040516113bf959493929190612c22565b60405180910390a2979650505050505050565b61110c565b845181101561147357306001600160a01b031685828151811061140a57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156114635761146383828151811061144457634e487b7160e01b600052603260045260246000fd5b6020026020010151805190602001206002611f3c90919063ffffffff16565b61146c81612d80565b90506113d7565b505050505050565b6000604051806060016040528060278152602001612ddd60279139905060005b855181101561159b576000808783815181106114c757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03168784815181106114f857634e487b7160e01b600052603260045260246000fd5b602002602001015187858151811061152057634e487b7160e01b600052603260045260246000fd5b602002602001015160405161153591906129f7565b60006040518083038185875af1925050503d8060008114611572576040519150601f19603f3d011682016040523d82523d6000602084013e611577565b606091505b5091509150611587828286611f82565b5050508061159490612d80565b905061149b565b50505050505050565b60006115c38254600f81810b810b600160801b909204810b900b131590565b156115e157604051631ed9509560e11b815260040160405180910390fd5b508054600f90810b80820b820b600090815260018085016020526040822080549290558454920190920b6001600160801b03166001600160801b03199091161790915590565b600880549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb0910160405180910390a15050565b600061168f8585858561168a60408051602081019091526000815290565b611262565b95945050505050565b6000818152600760205260408120600281015460018201546116ba9190612cbb565b6116c661072985610a7f565b11159392505050565b60045460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a1600455565b60006001600160401b038211156117785760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016109f4565b5090565b815467ffffffffffffffff19166001600160401b0391909116179055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117f557600080fd5b505afa158015611809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182d9190612307565b604051630748d63560e31b81526001600160a01b038681166004830152602482018690529190911690633a46b1a89060440160206040518083038186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b91906126ee565b606061104b848484604051806060016040528060298152602001612e0460299139611fbb565b600081116119355760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f6420604482015266746f6f206c6f7760c81b60648201526084016109f4565b60055460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a1600555565b60065460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600655565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1057507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3a57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115611b0b5750600090506003611bb8565b8460ff16601b14158015611b2357508460ff16601c14155b15611b345750600090506004611bb8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611b88573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611bb157600060019250925050611bb8565b9150600090505b94509492505050565b6000816004811115611be357634e487b7160e01b600052602160045260246000fd5b1415611bec5750565b6001816004811115611c0e57634e487b7160e01b600052602160045260246000fd5b1415611c575760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b60448201526064016109f4565b6002816004811115611c7957634e487b7160e01b600052602160045260246000fd5b1415611cc75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109f4565b6003816004811115611ce957634e487b7160e01b600052602160045260246000fd5b1415611d425760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109f4565b6004816004811115611d6457634e487b7160e01b600052602160045260246000fd5b1415610afa5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016109f4565b60008581526007602090815260408083206001600160a01b0388168452600381019092529091205460ff1615611e455760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72566f74696e6753696d706c653a20766f746520616c726561604482015266191e4818d85cdd60ca1b60648201526084016109f4565b6001600160a01b03851660009081526003820160205260408120805460ff1916600117905560ff168460ff161415611e965782816000016000828254611e8b9190612cbb565b909155506114739050565b60ff841660011415611eb65782816001016000828254611e8b9190612cbb565b60ff841660021415611ed65782816002016000828254611e8b9190612cbb565b60405162461bcd60e51b815260206004820152603560248201527f476f7665726e6f72566f74696e6753696d706c653a20696e76616c69642076616044820152746c756520666f7220656e756d20566f74655479706560581b60648201526084016109f4565b8154600160801b90819004600f90810b80820b820b6000908152600180870160205260409091209490945584549301900b6001600160801b039081169091029116179055565b60608315611f9157508161104e565b825115611fa15782518084602001fd5b8160405162461bcd60e51b81526004016109f49190612a86565b60608247101561201c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109f4565b6001600160a01b0385163b6120735760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109f4565b600080866001600160a01b0316858760405161208f91906129f7565b60006040518083038185875af1925050503d80600081146120cc576040519150601f19603f3d011682016040523d82523d6000602084013e6120d1565b606091505b5091509150610b73828286611f82565b60006001600160401b038311156120fa576120fa612db1565b61210d601f8401601f1916602001612c68565b905082815283838301111561212157600080fd5b828260208301376000602084830101529392505050565b600082601f830112612148578081fd5b8135602061215d61215883612c98565b612c68565b80838252828201915082860187848660051b890101111561217c578586fd5b855b858110156121a357813561219181612dc7565b8452928401929084019060010161217e565b5090979650505050505050565b600082601f8301126121c0578081fd5b813560206121d061215883612c98565b80838252828201915082860187848660051b89010111156121ef578586fd5b855b858110156121a35781356001600160401b0381111561220e578788fd5b61221c8a87838c01016122d2565b85525092840192908401906001016121f1565b600082601f83011261223f578081fd5b8135602061224f61215883612c98565b80838252828201915082860187848660051b890101111561226e578586fd5b855b858110156121a357813584529284019290840190600101612270565b60008083601f84011261229d578182fd5b5081356001600160401b038111156122b3578182fd5b6020830191508360208285010111156122cb57600080fd5b9250929050565b600082601f8301126122e2578081fd5b61104e838335602085016120e1565b803560ff8116811461230257600080fd5b919050565b600060208284031215612318578081fd5b815161104e81612dc7565b600080600080600060a0868803121561233a578081fd5b853561234581612dc7565b9450602086013561235581612dc7565b935060408601356001600160401b0380821115612370578283fd5b61237c89838a0161222f565b94506060880135915080821115612391578283fd5b61239d89838a0161222f565b935060808801359150808211156123b2578283fd5b506123bf888289016122d2565b9150509295509295909350565b600080600080608085870312156123e1578384fd5b84356123ec81612dc7565b935060208501356123fc81612dc7565b92506040850135915060608501356001600160401b0381111561241d578182fd5b612429878288016122d2565b91505092959194509250565b600080600080600060a0868803121561244c578081fd5b853561245781612dc7565b9450602086013561246781612dc7565b9350604086013592506060860135915060808601356001600160401b0381111561248f578182fd5b6123bf888289016122d2565b600080604083850312156124ad578182fd5b82356124b881612dc7565b946020939093013593505050565b600080600080606085870312156124db578182fd5b84356124e681612dc7565b93506020850135925060408501356001600160401b03811115612507578283fd5b6125138782880161228c565b95989497509550505050565b600080600060608486031215612533578081fd5b833561253e81612dc7565b92506020840135915060408401356001600160401b0381111561255f578182fd5b61256b868287016122d2565b9150509250925092565b6000806000806080858703121561258a578182fd5b84356001600160401b03808211156125a0578384fd5b6125ac88838901612138565b955060208701359150808211156125c1578384fd5b6125cd8883890161222f565b945060408701359150808211156125e2578384fd5b506125ef878288016121b0565b949793965093946060013593505050565b60008060008060808587031215612615578182fd5b84356001600160401b038082111561262b578384fd5b61263788838901612138565b9550602087013591508082111561264c578384fd5b6126588883890161222f565b9450604087013591508082111561266d578384fd5b612679888389016121b0565b9350606087013591508082111561268e578283fd5b508501601f8101871361269f578182fd5b612429878235602084016120e1565b6000602082840312156126bf578081fd5b81356001600160e01b03198116811461104e578182fd5b6000602082840312156126e7578081fd5b5035919050565b6000602082840312156126ff578081fd5b5051919050565b60008060408385031215612718578182fd5b82359150602083013561272a81612dc7565b809150509250929050565b60008060408385031215612747578182fd5b82359150612757602084016122f1565b90509250929050565b60008060008060608587031215612775578182fd5b84359350612785602086016122f1565b925060408501356001600160401b03811115612507578283fd5b6000806000806000608086880312156127b6578283fd5b853594506127c6602087016122f1565b935060408601356001600160401b03808211156127e1578485fd5b6127ed89838a0161228c565b909550935060608801359150808211156123b2578283fd5b60008060008060008060008060e0898b031215612820578586fd5b8835975061283060208a016122f1565b965060408901356001600160401b038082111561284b578788fd5b6128578c838d0161228c565b909850965060608b013591508082111561286f578485fd5b5061287c8b828c016122d2565b94505061288b60808a016122f1565b925060a0890135915060c089013590509295985092959890939650565b600080600080600060a086880312156128bf578283fd5b853594506128cf602087016122f1565b93506128dd604087016122f1565b94979396509394606081013594506080013592915050565b6000815180845260208085019450808401835b8381101561292d5781516001600160a01b031687529582019590820190600101612908565b509495945050505050565b600081518084526020808501808196508360051b81019150828601855b8581101561297f57828403895261296d8483516129bb565b98850198935090840190600101612955565b5091979650505050505050565b6000815180845260208085019450808401835b8381101561292d5781518752958201959082019060010161299f565b600081518084526129d3816020860160208601612d15565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251612a09818460208701612d15565b9190910192915050565b608081526000612a2660808301876128f5565b8281036020840152612a38818761298c565b90508281036040840152612a4c8186612938565b91505082606083015295945050505050565b6020810160088310612a8057634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600061104e60208301846129bb565b602080825260189082015277476f7665726e6f723a206f6e6c79476f7665726e616e636560401b604082015260600190565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60006101208b8352602060018060a01b038c1681850152816040850152612b358285018c6128f5565b91508382036060850152612b49828b61298c565b915083820360808501528189518084528284019150828160051b850101838c01865b83811015612b9957601f19878403018552612b878383516129bb565b94860194925090850190600101612b6b565b505086810360a0880152612bad818c612938565b945050505050612bc860c08401876001600160401b03169052565b6001600160401b03851660e0840152828103610100840152612bea81856129bb565b9c9b505050505050505050505050565b84815260ff84166020820152826040820152608060608201526000610d8960808301846129bb565b85815260ff8516602082015283604082015260a060608201526000612c4a60a08301856129bb565b8281036080840152612c5c81856129bb565b98975050505050505050565b604051601f8201601f191681016001600160401b0381118282101715612c9057612c90612db1565b604052919050565b60006001600160401b03821115612cb157612cb1612db1565b5060051b60200190565b60008219821115612cce57612cce612d9b565b500190565b60006001600160401b03808316818516808303821115612cf557612cf5612d9b565b01949350505050565b600082821015612d1057612d10612d9b565b500390565b60005b83811015612d30578181015183820152602001612d18565b83811115612d3f576000848401525b50505050565b600181811c90821680612d5957607f821691505b60208210811415612d7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d9457612d94612d9b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610afa57600080fdfe476f7665726e6f723a2063616c6c20726576657274656420776974686f7574206d657373616765416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a26469706673582212208d65a78adba0c644f58c109bb3ede1e03ed5dda766bcccae353f0ae8cab04f3b64736f6c63430008040033",
  "deployedBytecode": "0x6080604052600436106101bd5760003560e01c806370b0f660116100ed578063c28bc2fa11610090578063c28bc2fa146105c8578063c59057e4146105e8578063dd4e2ba514610608578063deaaa7cc1461064e578063ea0217cf14610682578063eb9019d4146106a2578063ece40cc1146106c2578063f23a6e61146106e2578063f8ce560a1461070e57600080fd5b806370b0f6601461049b5780637b103999146104bb5780637b3c71d3146105075780637d5e81e2146105275780639a802a6d14610547578063b58131b014610567578063bc197c811461057c578063c01f9e37146105a857600080fd5b806335680dc21161016057806335680dc2146103105780633932abb1146103305780633bccf4fd146103455780633e4f49e6146103655780634385963214610392578063544ffc9c146103dc57806354fd4d5014610431578063567813881461045b5780635f398a141461047b57600080fd5b806301ffc9a7146101cb57806302a251a314610200578063034201811461022357806306fdde0314610243578063150b7a02146102655780632656227d146102a95780632d63f693146102bc5780632fe3e261146102dc57600080fd5b366101c657005b005b600080fd5b3480156101d757600080fd5b506101eb6101e63660046126ae565b610730565b60405190151581526020015b60405180910390f35b34801561020c57600080fd5b5061021561079d565b6040519081526020016101f7565b34801561022f57600080fd5b5061021561023e366004612805565b6107ad565b34801561024f57600080fd5b506102586108a5565b6040516101f79190612a86565b34801561027157600080fd5b506102906102803660046123cc565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016101f7565b6102156102b7366004612575565b610937565b3480156102c857600080fd5b506102156102d73660046126d6565b610a7f565b3480156102e857600080fd5b506102157fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b34801561031c57600080fd5b506101c461032b3660046126d6565b610ab6565b34801561033c57600080fd5b50610215610afd565b34801561035157600080fd5b506102156103603660046128a8565b610b08565b34801561037157600080fd5b506103856103803660046126d6565b610b7e565b6040516101f79190612a5e565b34801561039e57600080fd5b506101eb6103ad366004612706565b60008281526007602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b3480156103e857600080fd5b506104166103f73660046126d6565b6000908152600760205260409020805460018201546002909201549092565b604080519384526020840192909252908201526060016101f7565b34801561043d57600080fd5b506040805180820190915260018152603160f81b6020820152610258565b34801561046757600080fd5b50610215610476366004612735565b610c8a565b34801561048757600080fd5b5061021561049636600461279f565b610cb3565b3480156104a757600080fd5b506101c46104b63660046126d6565b610cfd565b3480156104c757600080fd5b506104ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101f7565b34801561051357600080fd5b50610215610522366004612760565b610d41565b34801561053357600080fd5b50610215610542366004612600565b610d93565b34801561055357600080fd5b5061021561056236600461251f565b61103e565b34801561057357600080fd5b50610215611055565b34801561058857600080fd5b50610290610597366004612323565b63bc197c8160e01b95945050505050565b3480156105b457600080fd5b506102156105c33660046126d6565b611060565b3480156105d457600080fd5b506101c46105e33660046124c6565b61108f565b3480156105f457600080fd5b50610215610603366004612575565b611113565b34801561061457600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e90820152610258565b34801561065a57600080fd5b506102157f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b34801561068e57600080fd5b506101c461069d3660046126d6565b61114d565b3480156106ae57600080fd5b506102156106bd36600461249b565b611191565b3480156106ce57600080fd5b506101c46106dd3660046126d6565b6111b2565b3480156106ee57600080fd5b506102906106fd366004612435565b63f23a6e6160e01b95945050505050565b34801561071a57600080fd5b506102156107293660046126d6565b5060085490565b60006001600160e01b0319821663bf26d89760e01b148061076157506001600160e01b031982166379dd796f60e01b145b8061077c57506001600160e01b03198216630271189760e51b145b8061079757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006107a860055490565b905090565b6000806108516108497fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c6040516107e99291906129e7565b60405180910390208b8051906020012060405160200161082e959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b604051602081830303815290604052805190602001206111f6565b868686611244565b90506108978a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250611262915050565b9a9950505050505050505050565b6060600080546108b490612d45565b80601f01602080910402602001604051908101604052809291908181526020018280546108e090612d45565b801561092d5780601f106109025761010080835404028352916020019161092d565b820191906000526020600020905b81548152906001019060200180831161091057829003601f168201915b5050505050905090565b60008061094686868686611113565b9050600061095382610b7e565b9050600481600781111561097757634e487b7160e01b600052602160045260246000fd5b14806109a2575060058160078111156109a057634e487b7160e01b600052602160045260246000fd5b145b6109fd5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756044820152601b60fa1b60648201526084015b60405180910390fd5b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a1610a5b82888888886113d2565b610a68828888888861147b565b610a7582888888886113d2565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b333014610ad55760405162461bcd60e51b81526004016109f490612a99565b610af1565b80610ae560026115a4565b14610aef57610ada565b505b610afa81611627565b50565b60006107a860045490565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff851660608201526000908190610b56906108499060800161082e565b9050610b738782886040518060200160405280600081525061166c565b979650505050505050565b6000818152600160205260408120600281015460ff1615610ba25750600792915050565b6002810154610100900460ff1615610bbd5750600292915050565b6000610bc884610a7f565b905080610c175760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c20696400000060448201526064016109f4565b438110610c28575060009392505050565b6000610c3385611060565b9050438110610c4757506001949350505050565b610c5085611698565b8015610c6f575060008581526007602052604090208054600190910154115b15610c7f57506004949350505050565b506003949350505050565b600080339050610cab8482856040518060200160405280600081525061166c565b949350505050565b600080339050610b7387828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611262915050565b333014610d1c5760405162461bcd60e51b81526004016109f490612a99565b610d38565b80610d2c60026115a4565b14610d3657610d21565b505b610afa816116cf565b600080339050610d8986828787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166c92505050565b9695505050505050565b6000610d9d611055565b610dac336106bd600143612cfe565b1015610e145760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f7720706044820152701c9bdc1bdcd85b081d1a1c995cda1bdb19607a1b60648201526084016109f4565b6000610e298686868680519060200120611113565b90508451865114610e4c5760405162461bcd60e51b81526004016109f490612acb565b8351865114610e6d5760405162461bcd60e51b81526004016109f490612acb565b6000865111610eb95760405162461bcd60e51b815260206004820152601860248201527711dbdd995c9b9bdc8e88195b5c1d1e481c1c9bdc1bdcd85b60421b60448201526064016109f4565b600081815260016020908152604091829020825191820190925281546001600160401b03169081905215610f395760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b60648201526084016109f4565b6000610f4b610f46610afd565b611710565b610f5443611710565b610f5e9190612cd3565b90506000610f6d610f4661079d565b610f779083612cd3565b9050610f83838361177c565b610f90600184018261177c565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b03811115610fdc57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561100f57816020015b6060815260200190600190039081610ffa5790505b508c88888e60405161102999989796959493929190612b0c565b60405180910390a15091979650505050505050565b600061104b84848461179a565b90505b9392505050565b60006107a860065490565b60008181526001602081815260408084208151928301909152909101546001600160401b031690819052610aa7565b3330146110ae5760405162461bcd60e51b81526004016109f490612a99565b6110ca565b806110be60026115a4565b146110c8576110b3565b505b61110c8483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892506118af915050565b5050505050565b60008484848460405160200161112c9493929190612a13565b60408051601f19818403018152919052805160209091012095945050505050565b33301461116c5760405162461bcd60e51b81526004016109f490612a99565b611188565b8061117c60026115a4565b1461118657611171565b505b610afa816118d5565b600061104e83836111ad60408051602081019091526000815290565b61179a565b3330146111d15760405162461bcd60e51b81526004016109f490612a99565b6111ed565b806111e160026115a4565b146111eb576111d6565b505b610afa81611976565b60006107976112036119b7565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061125587878787611ade565b91509150610a7581611bc1565b600085815260016020819052604082209061127c88610b7e565b600781111561129b57634e487b7160e01b600052602160045260246000fd5b146112f45760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b60648201526084016109f4565b604080516020810190915281546001600160401b03169081905260009061131d9088908661179a565b905061132c8888888488611dbd565b835161137e57866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4898884896040516113719493929190612bfa565b60405180910390a2610b73565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb871289888489896040516113bf959493929190612c22565b60405180910390a2979650505050505050565b61110c565b845181101561147357306001600160a01b031685828151811061140a57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156114635761146383828151811061144457634e487b7160e01b600052603260045260246000fd5b6020026020010151805190602001206002611f3c90919063ffffffff16565b61146c81612d80565b90506113d7565b505050505050565b6000604051806060016040528060278152602001612ddd60279139905060005b855181101561159b576000808783815181106114c757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03168784815181106114f857634e487b7160e01b600052603260045260246000fd5b602002602001015187858151811061152057634e487b7160e01b600052603260045260246000fd5b602002602001015160405161153591906129f7565b60006040518083038185875af1925050503d8060008114611572576040519150601f19603f3d011682016040523d82523d6000602084013e611577565b606091505b5091509150611587828286611f82565b5050508061159490612d80565b905061149b565b50505050505050565b60006115c38254600f81810b810b600160801b909204810b900b131590565b156115e157604051631ed9509560e11b815260040160405180910390fd5b508054600f90810b80820b820b600090815260018085016020526040822080549290558454920190920b6001600160801b03166001600160801b03199091161790915590565b600880549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb0910160405180910390a15050565b600061168f8585858561168a60408051602081019091526000815290565b611262565b95945050505050565b6000818152600760205260408120600281015460018201546116ba9190612cbb565b6116c661072985610a7f565b11159392505050565b60045460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a1600455565b60006001600160401b038211156117785760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016109f4565b5090565b815467ffffffffffffffff19166001600160401b0391909116179055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117f557600080fd5b505afa158015611809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182d9190612307565b604051630748d63560e31b81526001600160a01b038681166004830152602482018690529190911690633a46b1a89060440160206040518083038186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b91906126ee565b606061104b848484604051806060016040528060298152602001612e0460299139611fbb565b600081116119355760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f6420604482015266746f6f206c6f7760c81b60648201526084016109f4565b60055460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a1600555565b60065460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600655565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1057507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3a57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115611b0b5750600090506003611bb8565b8460ff16601b14158015611b2357508460ff16601c14155b15611b345750600090506004611bb8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611b88573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611bb157600060019250925050611bb8565b9150600090505b94509492505050565b6000816004811115611be357634e487b7160e01b600052602160045260246000fd5b1415611bec5750565b6001816004811115611c0e57634e487b7160e01b600052602160045260246000fd5b1415611c575760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b60448201526064016109f4565b6002816004811115611c7957634e487b7160e01b600052602160045260246000fd5b1415611cc75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109f4565b6003816004811115611ce957634e487b7160e01b600052602160045260246000fd5b1415611d425760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109f4565b6004816004811115611d6457634e487b7160e01b600052602160045260246000fd5b1415610afa5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016109f4565b60008581526007602090815260408083206001600160a01b0388168452600381019092529091205460ff1615611e455760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72566f74696e6753696d706c653a20766f746520616c726561604482015266191e4818d85cdd60ca1b60648201526084016109f4565b6001600160a01b03851660009081526003820160205260408120805460ff1916600117905560ff168460ff161415611e965782816000016000828254611e8b9190612cbb565b909155506114739050565b60ff841660011415611eb65782816001016000828254611e8b9190612cbb565b60ff841660021415611ed65782816002016000828254611e8b9190612cbb565b60405162461bcd60e51b815260206004820152603560248201527f476f7665726e6f72566f74696e6753696d706c653a20696e76616c69642076616044820152746c756520666f7220656e756d20566f74655479706560581b60648201526084016109f4565b8154600160801b90819004600f90810b80820b820b6000908152600180870160205260409091209490945584549301900b6001600160801b039081169091029116179055565b60608315611f9157508161104e565b825115611fa15782518084602001fd5b8160405162461bcd60e51b81526004016109f49190612a86565b60608247101561201c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109f4565b6001600160a01b0385163b6120735760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109f4565b600080866001600160a01b0316858760405161208f91906129f7565b60006040518083038185875af1925050503d80600081146120cc576040519150601f19603f3d011682016040523d82523d6000602084013e6120d1565b606091505b5091509150610b73828286611f82565b60006001600160401b038311156120fa576120fa612db1565b61210d601f8401601f1916602001612c68565b905082815283838301111561212157600080fd5b828260208301376000602084830101529392505050565b600082601f830112612148578081fd5b8135602061215d61215883612c98565b612c68565b80838252828201915082860187848660051b890101111561217c578586fd5b855b858110156121a357813561219181612dc7565b8452928401929084019060010161217e565b5090979650505050505050565b600082601f8301126121c0578081fd5b813560206121d061215883612c98565b80838252828201915082860187848660051b89010111156121ef578586fd5b855b858110156121a35781356001600160401b0381111561220e578788fd5b61221c8a87838c01016122d2565b85525092840192908401906001016121f1565b600082601f83011261223f578081fd5b8135602061224f61215883612c98565b80838252828201915082860187848660051b890101111561226e578586fd5b855b858110156121a357813584529284019290840190600101612270565b60008083601f84011261229d578182fd5b5081356001600160401b038111156122b3578182fd5b6020830191508360208285010111156122cb57600080fd5b9250929050565b600082601f8301126122e2578081fd5b61104e838335602085016120e1565b803560ff8116811461230257600080fd5b919050565b600060208284031215612318578081fd5b815161104e81612dc7565b600080600080600060a0868803121561233a578081fd5b853561234581612dc7565b9450602086013561235581612dc7565b935060408601356001600160401b0380821115612370578283fd5b61237c89838a0161222f565b94506060880135915080821115612391578283fd5b61239d89838a0161222f565b935060808801359150808211156123b2578283fd5b506123bf888289016122d2565b9150509295509295909350565b600080600080608085870312156123e1578384fd5b84356123ec81612dc7565b935060208501356123fc81612dc7565b92506040850135915060608501356001600160401b0381111561241d578182fd5b612429878288016122d2565b91505092959194509250565b600080600080600060a0868803121561244c578081fd5b853561245781612dc7565b9450602086013561246781612dc7565b9350604086013592506060860135915060808601356001600160401b0381111561248f578182fd5b6123bf888289016122d2565b600080604083850312156124ad578182fd5b82356124b881612dc7565b946020939093013593505050565b600080600080606085870312156124db578182fd5b84356124e681612dc7565b93506020850135925060408501356001600160401b03811115612507578283fd5b6125138782880161228c565b95989497509550505050565b600080600060608486031215612533578081fd5b833561253e81612dc7565b92506020840135915060408401356001600160401b0381111561255f578182fd5b61256b868287016122d2565b9150509250925092565b6000806000806080858703121561258a578182fd5b84356001600160401b03808211156125a0578384fd5b6125ac88838901612138565b955060208701359150808211156125c1578384fd5b6125cd8883890161222f565b945060408701359150808211156125e2578384fd5b506125ef878288016121b0565b949793965093946060013593505050565b60008060008060808587031215612615578182fd5b84356001600160401b038082111561262b578384fd5b61263788838901612138565b9550602087013591508082111561264c578384fd5b6126588883890161222f565b9450604087013591508082111561266d578384fd5b612679888389016121b0565b9350606087013591508082111561268e578283fd5b508501601f8101871361269f578182fd5b612429878235602084016120e1565b6000602082840312156126bf578081fd5b81356001600160e01b03198116811461104e578182fd5b6000602082840312156126e7578081fd5b5035919050565b6000602082840312156126ff578081fd5b5051919050565b60008060408385031215612718578182fd5b82359150602083013561272a81612dc7565b809150509250929050565b60008060408385031215612747578182fd5b82359150612757602084016122f1565b90509250929050565b60008060008060608587031215612775578182fd5b84359350612785602086016122f1565b925060408501356001600160401b03811115612507578283fd5b6000806000806000608086880312156127b6578283fd5b853594506127c6602087016122f1565b935060408601356001600160401b03808211156127e1578485fd5b6127ed89838a0161228c565b909550935060608801359150808211156123b2578283fd5b60008060008060008060008060e0898b031215612820578586fd5b8835975061283060208a016122f1565b965060408901356001600160401b038082111561284b578788fd5b6128578c838d0161228c565b909850965060608b013591508082111561286f578485fd5b5061287c8b828c016122d2565b94505061288b60808a016122f1565b925060a0890135915060c089013590509295985092959890939650565b600080600080600060a086880312156128bf578283fd5b853594506128cf602087016122f1565b93506128dd604087016122f1565b94979396509394606081013594506080013592915050565b6000815180845260208085019450808401835b8381101561292d5781516001600160a01b031687529582019590820190600101612908565b509495945050505050565b600081518084526020808501808196508360051b81019150828601855b8581101561297f57828403895261296d8483516129bb565b98850198935090840190600101612955565b5091979650505050505050565b6000815180845260208085019450808401835b8381101561292d5781518752958201959082019060010161299f565b600081518084526129d3816020860160208601612d15565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251612a09818460208701612d15565b9190910192915050565b608081526000612a2660808301876128f5565b8281036020840152612a38818761298c565b90508281036040840152612a4c8186612938565b91505082606083015295945050505050565b6020810160088310612a8057634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600061104e60208301846129bb565b602080825260189082015277476f7665726e6f723a206f6e6c79476f7665726e616e636560401b604082015260600190565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60006101208b8352602060018060a01b038c1681850152816040850152612b358285018c6128f5565b91508382036060850152612b49828b61298c565b915083820360808501528189518084528284019150828160051b850101838c01865b83811015612b9957601f19878403018552612b878383516129bb565b94860194925090850190600101612b6b565b505086810360a0880152612bad818c612938565b945050505050612bc860c08401876001600160401b03169052565b6001600160401b03851660e0840152828103610100840152612bea81856129bb565b9c9b505050505050505050505050565b84815260ff84166020820152826040820152608060608201526000610d8960808301846129bb565b85815260ff8516602082015283604082015260a060608201526000612c4a60a08301856129bb565b8281036080840152612c5c81856129bb565b98975050505050505050565b604051601f8201601f191681016001600160401b0381118282101715612c9057612c90612db1565b604052919050565b60006001600160401b03821115612cb157612cb1612db1565b5060051b60200190565b60008219821115612cce57612cce612d9b565b500190565b60006001600160401b03808316818516808303821115612cf557612cf5612d9b565b01949350505050565b600082821015612d1057612d10612d9b565b500390565b60005b83811015612d30578181015183820152602001612d18565b83811115612d3f576000848401525b50505050565b600181811c90821680612d5957607f821691505b60208210811415612d7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d9457612d94612d9b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610afa57600080fdfe476f7665726e6f723a2063616c6c20726576657274656420776974686f7574206d657373616765416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a26469706673582212208d65a78adba0c644f58c109bb3ede1e03ed5dda766bcccae353f0ae8cab04f3b64736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
