{
  "_format": "hh-sol-artifact-1",
  "contractName": "Dswap",
  "sourceName": "src/v0.8/core/token/Dswap.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromDelegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toDelegate",
          "type": "address"
        }
      ],
      "name": "DelegateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBalance",
          "type": "uint256"
        }
      ],
      "name": "DelegateVotesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "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": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CLOCK_MODE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "pos",
          "type": "uint32"
        }
      ],
      "name": "checkpoints",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "fromBlock",
              "type": "uint32"
            },
            {
              "internalType": "uint224",
              "name": "votes",
              "type": "uint224"
            }
          ],
          "internalType": "struct ERC20VotesUpgradeable.Checkpoint",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clock",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "delegateBySig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getImplementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        }
      ],
      "name": "getPastTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        }
      ],
      "name": "getPastVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_roles",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "numCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b5060805161342d61004c600039600081816106b90152818161070201528181610867015281816108a70152610923015261342d6000f3fe6080604052600436106101945760003560e01c806306fdde0314610199578063095ea7b3146101c457806318160ddd146101f157806323b872dd1461020f578063313ce5671461022f5780633644e5151461024b5780633659cfe61461026057806339509351146102825780633a46b1a8146102a25780634bf5d7e9146102c25780634f1ef286146102d757806352d1902d146102ea578063587cde1e146102ff5780635c19a95c1461032c5780636fcfff451461034c57806370a0823114610379578063715018a61461039957806379ba5097146103ae5780637ecebe00146103c357806384b0196e146103e35780638da5cb5b1461040b5780638e539e8c1461042057806391ddadf41461044057806395d89b41146104625780639ab24eb014610477578063a457c2d714610497578063a9059cbb146104b7578063aaf10f42146104d7578063c3cda520146104ec578063c4d66de81461050c578063d505accf1461052c578063dd62ed3e1461054c578063e30c39781461056c578063f1127ed814610581578063f2fde38b146105ae575b600080fd5b3480156101a557600080fd5b506101ae6105ce565b6040516101bb919061204b565b60405180910390f35b3480156101d057600080fd5b506101e46101df36600461209d565b610660565b6040516101bb91906120e4565b3480156101fd57600080fd5b506099545b6040516101bb91906120f8565b34801561021b57600080fd5b506101e461022a366004612106565b61067a565b34801561023b57600080fd5b5060126040516101bb919061215f565b34801561025757600080fd5b506102026106a0565b34801561026c57600080fd5b5061028061027b36600461216d565b6106af565b005b34801561028e57600080fd5b506101e461029d36600461209d565b610780565b3480156102ae57600080fd5b506102026102bd36600461209d565b6107a2565b3480156102ce57600080fd5b506101ae6107f5565b6102806102e5366004612289565b61085d565b3480156102f657600080fd5b50610202610916565b34801561030b57600080fd5b5061031f61031a36600461216d565b610973565b6040516101bb91906122df565b34801561033857600080fd5b5061028061034736600461216d565b610992565b34801561035857600080fd5b5061036c61036736600461216d565b61099c565b6040516101bb91906122f9565b34801561038557600080fd5b5061020261039436600461216d565b6109bf565b3480156103a557600080fd5b506102806109da565b3480156103ba57600080fd5b506102806109ee565b3480156103cf57600080fd5b506102026103de36600461216d565b610a27565b3480156103ef57600080fd5b506103f8610a45565b6040516101bb9796959493929190612374565b34801561041757600080fd5b5061031f610abb565b34801561042c57600080fd5b5061020261043b3660046123f0565b610acb565b34801561044c57600080fd5b50610455610b07565b6040516101bb919061241f565b34801561046e57600080fd5b506101ae610b12565b34801561048357600080fd5b5061020261049236600461216d565b610b21565b3480156104a357600080fd5b506101e46104b236600461209d565b610ba4565b3480156104c357600080fd5b506101e46104d236600461209d565b610bec565b3480156104e357600080fd5b5061031f610bfa565b3480156104f857600080fd5b50610280610507366004612441565b610c04565b34801561051857600080fd5b5061028061052736600461216d565b610cc2565b34801561053857600080fd5b506102806105473660046124cb565b610d7a565b34801561055857600080fd5b5061020261056736600461256a565b610e5c565b34801561057857600080fd5b5061031f610e87565b34801561058d57600080fd5b506105a161059c3660046125b4565b610e97565b6040516101bb919061261a565b3480156105ba57600080fd5b506102806105c936600461216d565b610f1b565b6060609a80546105dd9061263e565b80601f01602080910402602001604051908101604052809291908181526020018280546106099061263e565b80156106565780601f1061062b57610100808354040283529160200191610656565b820191906000526020600020905b81548152906001019060200180831161063957829003601f168201915b5050505050905090565b60003361066e818585610f82565b60019150505b92915050565b600033610688858285611036565b610693858585611080565b60019150505b9392505050565b60006106aa611176565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107005760405162461bcd60e51b81526004016106f79061269e565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610732611180565b6001600160a01b0316146107585760405162461bcd60e51b81526004016106f7906126e5565b6107618161119c565b6040805160008082526020820190925261077d91839190611236565b50565b60003361066e8185856107938383610e5c565b61079d919061270b565b610f82565b60006107ac610b07565b65ffffffffffff1682106107d25760405162461bcd60e51b81526004016106f790612751565b6001600160a01b0383166000908152610131602052604090206106999083611318565b606043610800610b07565b65ffffffffffff16146108255760405162461bcd60e51b81526004016106f790612795565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108a55760405162461bcd60e51b81526004016106f79061269e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108d7611180565b6001600160a01b0316146108fd5760405162461bcd60e51b81526004016106f7906126e5565b6109068261119c565b61091282826001611236565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109605760405162461bcd60e51b81526004016106f7906127fa565b5060008051602061339183398151915290565b6001600160a01b03908116600090815261013060205260409020541690565b61077d33826113f8565b6001600160a01b0381166000908152610131602052604081205461067490611479565b6001600160a01b031660009081526097602052604090205490565b6109e26114a3565b6109ec60006114d2565b565b33806109f8610e87565b6001600160a01b031614610a1e5760405162461bcd60e51b81526004016106f790612850565b61077d816114d2565b6001600160a01b038116600090815260fd6020526040812054610674565b60006060806000806000606060c9546000801b148015610a65575060ca54155b610a815760405162461bcd60e51b81526004016106f79061288c565b610a896114ec565b610a916114fb565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b610162546001600160a01b031690565b6000610ad5610b07565b65ffffffffffff168210610afb5760405162461bcd60e51b81526004016106f790612751565b61067461013283611318565b60006106aa4361150a565b6060609b80546105dd9061263e565b6001600160a01b038116600090815261013160205260408120548015610b91576001600160a01b03831660009081526101316020526040902080546000198301908110610b7057610b7061289c565b600091825260209091200154600160201b90046001600160e01b0316610b94565b60005b6001600160e01b03169392505050565b60003381610bb28286610e5c565b905083811015610bd45760405162461bcd60e51b81526004016106f7906128f4565b610be18286868403610f82565b506001949350505050565b60003361066e818585611080565b60006106aa611180565b83421115610c245760405162461bcd60e51b81526004016106f790612938565b6000610c86610c7e7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610c639493929190612948565b60405160208183030381529060405280519060200120611532565b85858561155f565b9050610c9181611589565b8614610caf5760405162461bcd60e51b81526004016106f7906129b6565b610cb981886113f8565b50505050505050565b600054610100900460ff16610ce95760405162461bcd60e51b81526004016106f790612a0e565b610d3060405180604001604052806008815260200167044617461537761760c41b81525060405180604001604052806005815260200164044535741560dc1b8152506115b1565b610d5660405180604001604052806005815260200164044535741560dc1b8152506115e2565b6101c680546001600160a01b0319166001600160a01b03831617905561077d61162c565b83421115610d9a5760405162461bcd60e51b81526004016106f790612a52565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610dc98c611589565b89604051602001610ddf96959493929190612a62565b6040516020818303038152906040528051906020012090506000610e0282611532565b90506000610e128287878761155f565b9050896001600160a01b0316816001600160a01b031614610e455760405162461bcd60e51b81526004016106f790612af0565b610e508a8a8a610f82565b50505050505050505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b610194546001600160a01b031690565b60408051808201909152600080825260208201526001600160a01b038316600090815261013160205260409020805463ffffffff8416908110610edc57610edc61289c565b60009182526020918290206040805180820190915291015463ffffffff81168252600160201b90046001600160e01b0316918101919091529392505050565b610f236114a3565b61019480546001600160a01b0319166001600160a01b038316908117909155610f4a610abb565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b038316610fa85760405162461bcd60e51b81526004016106f790612b41565b6001600160a01b038216610fce5760405162461bcd60e51b81526004016106f790612b90565b6001600160a01b0380841660008181526098602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906110299085906120f8565b60405180910390a3505050565b60006110428484610e5c565b9050600019811461107a578181101561106d5760405162461bcd60e51b81526004016106f790612bd4565b61107a8484848403610f82565b50505050565b6001600160a01b0383166110a65760405162461bcd60e51b81526004016106f790612c26565b6001600160a01b0382166110cc5760405162461bcd60e51b81526004016106f790612c76565b6001600160a01b038316600090815260976020526040902054818110156111055760405162461bcd60e51b81526004016106f790612cc9565b6001600160a01b0380851660008181526097602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111639086906120f8565b60405180910390a361107a848484611653565b60006106aa61165e565b600080516020613391833981519152546001600160a01b031690565b6101c654604051632474521560e21b81526001600160a01b039091169060009082906391d14854906111d49084903390600401612cd9565b602060405180830381865afa1580156111f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112159190612d07565b6112315760405162461bcd60e51b81526004016106f790612d59565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561126957611231836116c2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156112c3575060408051601f3d908101601f191682019092526112c091810190612d74565b60015b6112df5760405162461bcd60e51b81526004016106f790612de0565b600080516020613391833981519152811461130c5760405162461bcd60e51b81526004016106f790612e36565b50611231838383611716565b81546000908181600581111561136f5760006113338461173b565b61133d9085612e46565b90508561134a8883611823565b5463ffffffff16111561135f5780915061136d565b61136a81600161270b565b92505b505b808210156113b95760006113838383611831565b9050856113908883611823565b5463ffffffff1611156113a5578091506113b3565b6113b081600161270b565b92505b5061136f565b80156113e2576113cc8660018303611823565b54600160201b90046001600160e01b03166113e5565b60005b6001600160e01b03169695505050505050565b600061140383610973565b90506000611410846109bf565b6001600160a01b038581166000818152610130602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461107a82848361184c565b600063ffffffff82111561149f5760405162461bcd60e51b81526004016106f790612e9c565b5090565b336114ac610abb565b6001600160a01b0316146109ec5760405162461bcd60e51b81526004016106f790612ede565b61019480546001600160a01b031916905561077d81611955565b606060cb80546105dd9061263e565b606060cc80546105dd9061263e565b600065ffffffffffff82111561149f5760405162461bcd60e51b81526004016106f790612f31565b600061067461153f611176565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611570878787876119a8565b9150915061157d81611a55565b5090505b949350505050565b6001600160a01b038116600090815260fd602052604090208054600181018255905b50919050565b600054610100900460ff166115d85760405162461bcd60e51b81526004016106f790612a0e565b6109128282611b04565b600054610100900460ff166116095760405162461bcd60e51b81526004016106f790612a0e565b61077d81604051806040016040528060018152602001603160f81b815250611b44565b600054610100900460ff166109ec5760405162461bcd60e51b81526004016106f790612a0e565b611231838383611b93565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611689611bae565b611691611c07565b46306040516020016116a7959493929190612f41565b60405160208183030381529060405280519060200120905090565b6116cb81611c38565b6116e75760405162461bcd60e51b81526004016106f790612fcd565b60008051602061339183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61171f83611c47565b60008251118061172c5750805b156112315761107a8383611c87565b60008160000361174d57506000919050565b6000600161175a84611cac565b901c6001901b9050600181848161177357611773612fdd565b048201901c9050600181848161178b5761178b612fdd565b048201901c905060018184816117a3576117a3612fdd565b048201901c905060018184816117bb576117bb612fdd565b048201901c905060018184816117d3576117d3612fdd565b048201901c905060018184816117eb576117eb612fdd565b048201901c9050600181848161180357611803612fdd565b048201901c90506106998182858161181d5761181d612fdd565b04611d40565b600091825260209091200190565b60006118406002848418612ff3565b6106999084841661270b565b816001600160a01b0316836001600160a01b03161415801561186e5750600081115b15611231576001600160a01b038316156118e2576001600160a01b03831660009081526101316020526040812081906118aa90611d5685611d62565b91509150846001600160a01b03166000805160206133d883398151915283836040516118d7929190613007565b60405180910390a250505b6001600160a01b03821615611231576001600160a01b038216600090815261013160205260408120819061191990611ed085611d62565b91509150836001600160a01b03166000805160206133d88339815191528383604051611946929190613007565b60405180910390a25050505050565b61016280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156119d55750600090506003611a4c565b6000600187878787604051600081526020016040526040516119fa9493929190613022565b6020604051602081039080840390855afa158015611a1c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611a4557600060019250925050611a4c565b9150600090505b94509492505050565b6000816004811115611a6957611a6961303d565b03611a715750565b6001816004811115611a8557611a8561303d565b03611aa25760405162461bcd60e51b81526004016106f790613082565b6002816004811115611ab657611ab661303d565b03611ad35760405162461bcd60e51b81526004016106f7906130c6565b6003816004811115611ae757611ae761303d565b0361077d5760405162461bcd60e51b81526004016106f790613115565b600054610100900460ff16611b2b5760405162461bcd60e51b81526004016106f790612a0e565b609a611b3783826131ec565b50609b61123182826131ec565b600054610100900460ff16611b6b5760405162461bcd60e51b81526004016106f790612a0e565b60cb611b7783826131ec565b5060cc611b8482826131ec565b5050600060c981905560ca5550565b611231611b9f84610973565b611ba884610973565b8361184c565b600080611bb96114ec565b805190915015611bd0578051602090910120919050565b60c9548015611bdf5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080611c126114fb565b805190915015611c29578051602090910120919050565b60ca548015611bdf5792915050565b6001600160a01b03163b151590565b611c50816116c2565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061069983836040518060600160405280602781526020016133b160279139611edc565b600080608083901c15611cc157608092831c92015b604083901c15611cd357604092831c92015b602083901c15611ce557602092831c92015b601083901c15611cf757601092831c92015b600883901c15611d0957600892831c92015b600483901c15611d1b57600492831c92015b600283901c15611d2d57600292831c92015b600183901c156106745760010192915050565b6000818310611d4f5781610699565b5090919050565b60006106998284612e46565b82546000908190818115611dac57611d7d8760018403611823565b60408051808201909152905463ffffffff81168252600160201b90046001600160e01b03166020820152611dc1565b60408051808201909152600080825260208201525b905080602001516001600160e01b03169350611de184868863ffffffff16565b9250600082118015611e0b5750611df6610b07565b65ffffffffffff16816000015163ffffffff16145b15611e4d57611e1983611f54565b611e268860018503611823565b80546001600160e01b0392909216600160201b0263ffffffff909216919091179055611ec6565b866040518060400160405280611e71611e64610b07565b65ffffffffffff16611479565b63ffffffff168152602001611e8586611f54565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b5050935093915050565b6000610699828461270b565b6060600080856001600160a01b031685604051611ef991906132cc565b600060405180830381855af49150503d8060008114611f34576040519150601f19603f3d011682016040523d82523d6000602084013e611f39565b606091505b5091509150611f4a86838387611f7d565b9695505050505050565b60006001600160e01b0382111561149f5760405162461bcd60e51b81526004016106f79061331c565b60608315611fba578251600003611fb357611f9785611c38565b611fb35760405162461bcd60e51b81526004016106f790613360565b5081611581565b6115818383815115611fcf5781518083602001fd5b8060405162461bcd60e51b81526004016106f7919061204b565b60005b83811015612004578181015183820152602001611fec565b50506000910152565b601f01601f191690565b6000612021825190565b808452602084019350612038818560208601611fe9565b6120418161200d565b9093019392505050565b602080825281016106998184612017565b60006001600160a01b038216610674565b6120768161205c565b811461077d57600080fd5b80356106748161206d565b80612076565b80356106748161208c565b600080604083850312156120b3576120b3600080fd5b60006120bf8585612081565b92505060206120d085828601612092565b9150509250929050565b8015155b82525050565b6020810161067482846120da565b806120de565b6020810161067482846120f2565b60008060006060848603121561211e5761211e600080fd5b600061212a8686612081565b935050602061213b86828701612081565b925050604061214c86828701612092565b9150509250925092565b60ff81166120de565b602081016106748284612156565b60006020828403121561218257612182600080fd5b60006115818484612081565b634e487b7160e01b600052604160045260246000fd5b6121ad8261200d565b81018181106001600160401b03821117156121ca576121ca61218e565b6040525050565b60006121dc60405190565b90506121e882826121a4565b919050565b60006001600160401b038211156122065761220661218e565b61220f8261200d565b60200192915050565b82818337506000910152565b6000612237612232846121ed565b6121d1565b90508281526020810184848401111561225257612252600080fd5b61225d848285612218565b509392505050565b600082601f83011261227957612279600080fd5b8135611581848260208601612224565b6000806040838503121561229f5761229f600080fd5b60006122ab8585612081565b92505060208301356001600160401b038111156122ca576122ca600080fd5b6120d085828601612265565b6120de8161205c565b6020810161067482846122d6565b63ffffffff81166120de565b6020810161067482846122ed565b6001600160f81b031981166120de565b600061232383836120f2565b505060200190565b6000612335825190565b80845260209384019383018060005b838110156123695781516123588882612317565b975060208301925050600101612344565b509495945050505050565b60e08101612382828a612307565b81810360208301526123948189612017565b905081810360408301526123a88188612017565b90506123b760608301876120f2565b6123c460808301866122d6565b6123d160a08301856120f2565b81810360c08301526123e3818461232b565b9998505050505050505050565b60006020828403121561240557612405600080fd5b60006115818484612092565b65ffffffffffff81166120de565b602081016106748284612411565b60ff8116612076565b80356106748161242d565b60008060008060008060c0878903121561245d5761245d600080fd5b60006124698989612081565b965050602061247a89828a01612092565b955050604061248b89828a01612092565b945050606061249c89828a01612436565b93505060806124ad89828a01612092565b92505060a06124be89828a01612092565b9150509295509295509295565b600080600080600080600060e0888a0312156124e9576124e9600080fd5b60006124f58a8a612081565b97505060206125068a828b01612081565b96505060406125178a828b01612092565b95505060606125288a828b01612092565b94505060806125398a828b01612436565b93505060a061254a8a828b01612092565b92505060c061255b8a828b01612092565b91505092959891949750929550565b6000806040838503121561258057612580600080fd5b600061258c8585612081565b92505060206120d085828601612081565b63ffffffff8116612076565b80356106748161259d565b600080604083850312156125ca576125ca600080fd5b60006125d68585612081565b92505060206120d0858286016125a9565b6001600160e01b0381166120de565b8051604083019061260784826122ed565b50602082015161107a60208501826125e7565b6040810161067482846125f6565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061265257607f821691505b6020821081036115ab576115ab612628565b602c815260006020820160008051602061337183398151915281526b19195b1959d85d1958d85b1b60a21b602082015291505b5060400190565b6020808252810161067481612664565b602c815260006020820160008051602061337183398151915281526b6163746976652070726f787960a01b60208201529150612697565b60208082528101610674816126ae565b634e487b7160e01b600052601160045260246000fd5b80820180821115610674576106746126f5565b601981526000602082017804552433230566f7465733a20667574757265206c6f6f6b757603c1b815291505b5060200190565b602080825281016106748161271e565b601d81526000602082017f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f64650000008152915061274a565b6020808252810161067481612761565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150612697565b60208082528101610674816127a5565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150612697565b602080825281016106748161280a565b60158152600060208201741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b8152915061274a565b6020808252810161067481612860565b634e487b7160e01b600052603260045260246000fd5b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b60208201529150612697565b60208082528101610674816128b2565b601d81526000602082017f4552433230566f7465733a207369676e617475726520657870697265640000008152915061274a565b6020808252810161067481612904565b6080810161295682876120f2565b61296360208301866122d6565b61297060408301856120f2565b61297d60608301846120f2565b95945050505050565b60198152600060208201784552433230566f7465733a20696e76616c6964206e6f6e636560381b8152915061274a565b6020808252810161067481612986565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150612697565b60208082528101610674816129c6565b601d81526000602082017f45524332305065726d69743a206578706972656420646561646c696e650000008152915061274a565b6020808252810161067481612a1e565b60c08101612a7082896120f2565b612a7d60208301886122d6565b612a8a60408301876122d6565b612a9760608301866120f2565b612aa460808301856120f2565b612ab160a08301846120f2565b979650505050505050565b601e81526000602082017f45524332305065726d69743a20696e76616c6964207369676e617475726500008152915061274a565b6020808252810161067481612abc565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150612697565b6020808252810161067481612b00565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150612697565b6020808252810161067481612b51565b601d81526000602082017f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000008152915061274a565b6020808252810161067481612ba0565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150612697565b6020808252810161067481612be4565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150612697565b6020808252810161067481612c36565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150612697565b6020808252810161067481612c86565b60408101612ce782856120f2565b61069960208301846122d6565b801515612076565b805161067481612cf4565b600060208284031215612d1c57612d1c600080fd5b60006115818484612cfc565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b8152915061274a565b6020808252810161067481612d28565b80516106748161208c565b600060208284031215612d8957612d89600080fd5b60006115818484612d69565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150612697565b6020808252810161067481612d95565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150612697565b6020808252810161067481612df0565b81810381811115610674576106746126f5565b602681526000602082017f53616665436173743a2076616c756520646f65736e27742066697420696e203381526532206269747360d01b60208201529150612697565b6020808252810161067481612e59565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729101908152600061274a565b6020808252810161067481612eac565b602681526000602082017f53616665436173743a2076616c756520646f65736e27742066697420696e203481526538206269747360d01b60208201529150612697565b6020808252810161067481612eee565b60a08101612f4f82886120f2565b612f5c60208301876120f2565b612f6960408301866120f2565b612f7660608301856120f2565b611f4a60808301846122d6565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150612697565b6020808252810161067481612f83565b634e487b7160e01b600052601260045260246000fd5b60008261300257613002612fdd565b500490565b6040810161301582856120f2565b61069960208301846120f2565b6080810161303082876120f2565b6129636020830186612156565b634e487b7160e01b600052602160045260246000fd5b601881526000602082017745434453413a20696e76616c6964207369676e617475726560401b8152915061274a565b6020808252810161067481613053565b601f81526000602082017f45434453413a20696e76616c6964207369676e6174757265206c656e677468008152915061274a565b6020808252810161067481613092565b602281526000602082017f45434453413a20696e76616c6964207369676e6174757265202773272076616c815261756560f01b60208201529150612697565b60208082528101610674816130d6565b60006106746131318381565b90565b61313d83613125565b815460001960089490940293841b1916921b91909117905550565b6000611231818484613134565b8181101561091257613178600082613158565b600101613165565b601f821115611231576000818152602090206020601f850104810160208510156131a75750805b6131b96020601f860104830182613165565b5050505050565b6000196008929092029190911c191690565b60006131de83836131c0565b600290930290921792915050565b81516001600160401b038111156132055761320561218e565b61320f825461263e565b61321a828285613180565b6020601f83116001811461324857600084156132365750858201515b61324085826131d2565b8655506132a2565b600085815260208120601f198616915b828110156132785788850151825560209485019460019092019101613258565b868310156132955784890151613291601f8916826131c0565b8355505b6001600288020188555050505b505050505050565b60006132b4825190565b6132c2818560208601611fe9565b9290920192915050565b600061069982846132aa565b602781526000602082017f53616665436173743a2076616c756520646f65736e27742066697420696e20328152663234206269747360c81b60208201529150612697565b60208082528101610674816132d8565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000008152915061274a565b602080825281016106748161332c56fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724a264697066735822122098973bcd3c8567b790db78c348b97cc5735c918b44ad09eaf31bbb0b1f1c058564736f6c63430008150033",
  "deployedBytecode": "0x6080604052600436106101945760003560e01c806306fdde0314610199578063095ea7b3146101c457806318160ddd146101f157806323b872dd1461020f578063313ce5671461022f5780633644e5151461024b5780633659cfe61461026057806339509351146102825780633a46b1a8146102a25780634bf5d7e9146102c25780634f1ef286146102d757806352d1902d146102ea578063587cde1e146102ff5780635c19a95c1461032c5780636fcfff451461034c57806370a0823114610379578063715018a61461039957806379ba5097146103ae5780637ecebe00146103c357806384b0196e146103e35780638da5cb5b1461040b5780638e539e8c1461042057806391ddadf41461044057806395d89b41146104625780639ab24eb014610477578063a457c2d714610497578063a9059cbb146104b7578063aaf10f42146104d7578063c3cda520146104ec578063c4d66de81461050c578063d505accf1461052c578063dd62ed3e1461054c578063e30c39781461056c578063f1127ed814610581578063f2fde38b146105ae575b600080fd5b3480156101a557600080fd5b506101ae6105ce565b6040516101bb919061204b565b60405180910390f35b3480156101d057600080fd5b506101e46101df36600461209d565b610660565b6040516101bb91906120e4565b3480156101fd57600080fd5b506099545b6040516101bb91906120f8565b34801561021b57600080fd5b506101e461022a366004612106565b61067a565b34801561023b57600080fd5b5060126040516101bb919061215f565b34801561025757600080fd5b506102026106a0565b34801561026c57600080fd5b5061028061027b36600461216d565b6106af565b005b34801561028e57600080fd5b506101e461029d36600461209d565b610780565b3480156102ae57600080fd5b506102026102bd36600461209d565b6107a2565b3480156102ce57600080fd5b506101ae6107f5565b6102806102e5366004612289565b61085d565b3480156102f657600080fd5b50610202610916565b34801561030b57600080fd5b5061031f61031a36600461216d565b610973565b6040516101bb91906122df565b34801561033857600080fd5b5061028061034736600461216d565b610992565b34801561035857600080fd5b5061036c61036736600461216d565b61099c565b6040516101bb91906122f9565b34801561038557600080fd5b5061020261039436600461216d565b6109bf565b3480156103a557600080fd5b506102806109da565b3480156103ba57600080fd5b506102806109ee565b3480156103cf57600080fd5b506102026103de36600461216d565b610a27565b3480156103ef57600080fd5b506103f8610a45565b6040516101bb9796959493929190612374565b34801561041757600080fd5b5061031f610abb565b34801561042c57600080fd5b5061020261043b3660046123f0565b610acb565b34801561044c57600080fd5b50610455610b07565b6040516101bb919061241f565b34801561046e57600080fd5b506101ae610b12565b34801561048357600080fd5b5061020261049236600461216d565b610b21565b3480156104a357600080fd5b506101e46104b236600461209d565b610ba4565b3480156104c357600080fd5b506101e46104d236600461209d565b610bec565b3480156104e357600080fd5b5061031f610bfa565b3480156104f857600080fd5b50610280610507366004612441565b610c04565b34801561051857600080fd5b5061028061052736600461216d565b610cc2565b34801561053857600080fd5b506102806105473660046124cb565b610d7a565b34801561055857600080fd5b5061020261056736600461256a565b610e5c565b34801561057857600080fd5b5061031f610e87565b34801561058d57600080fd5b506105a161059c3660046125b4565b610e97565b6040516101bb919061261a565b3480156105ba57600080fd5b506102806105c936600461216d565b610f1b565b6060609a80546105dd9061263e565b80601f01602080910402602001604051908101604052809291908181526020018280546106099061263e565b80156106565780601f1061062b57610100808354040283529160200191610656565b820191906000526020600020905b81548152906001019060200180831161063957829003601f168201915b5050505050905090565b60003361066e818585610f82565b60019150505b92915050565b600033610688858285611036565b610693858585611080565b60019150505b9392505050565b60006106aa611176565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107005760405162461bcd60e51b81526004016106f79061269e565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610732611180565b6001600160a01b0316146107585760405162461bcd60e51b81526004016106f7906126e5565b6107618161119c565b6040805160008082526020820190925261077d91839190611236565b50565b60003361066e8185856107938383610e5c565b61079d919061270b565b610f82565b60006107ac610b07565b65ffffffffffff1682106107d25760405162461bcd60e51b81526004016106f790612751565b6001600160a01b0383166000908152610131602052604090206106999083611318565b606043610800610b07565b65ffffffffffff16146108255760405162461bcd60e51b81526004016106f790612795565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108a55760405162461bcd60e51b81526004016106f79061269e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108d7611180565b6001600160a01b0316146108fd5760405162461bcd60e51b81526004016106f7906126e5565b6109068261119c565b61091282826001611236565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109605760405162461bcd60e51b81526004016106f7906127fa565b5060008051602061339183398151915290565b6001600160a01b03908116600090815261013060205260409020541690565b61077d33826113f8565b6001600160a01b0381166000908152610131602052604081205461067490611479565b6001600160a01b031660009081526097602052604090205490565b6109e26114a3565b6109ec60006114d2565b565b33806109f8610e87565b6001600160a01b031614610a1e5760405162461bcd60e51b81526004016106f790612850565b61077d816114d2565b6001600160a01b038116600090815260fd6020526040812054610674565b60006060806000806000606060c9546000801b148015610a65575060ca54155b610a815760405162461bcd60e51b81526004016106f79061288c565b610a896114ec565b610a916114fb565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b610162546001600160a01b031690565b6000610ad5610b07565b65ffffffffffff168210610afb5760405162461bcd60e51b81526004016106f790612751565b61067461013283611318565b60006106aa4361150a565b6060609b80546105dd9061263e565b6001600160a01b038116600090815261013160205260408120548015610b91576001600160a01b03831660009081526101316020526040902080546000198301908110610b7057610b7061289c565b600091825260209091200154600160201b90046001600160e01b0316610b94565b60005b6001600160e01b03169392505050565b60003381610bb28286610e5c565b905083811015610bd45760405162461bcd60e51b81526004016106f7906128f4565b610be18286868403610f82565b506001949350505050565b60003361066e818585611080565b60006106aa611180565b83421115610c245760405162461bcd60e51b81526004016106f790612938565b6000610c86610c7e7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610c639493929190612948565b60405160208183030381529060405280519060200120611532565b85858561155f565b9050610c9181611589565b8614610caf5760405162461bcd60e51b81526004016106f7906129b6565b610cb981886113f8565b50505050505050565b600054610100900460ff16610ce95760405162461bcd60e51b81526004016106f790612a0e565b610d3060405180604001604052806008815260200167044617461537761760c41b81525060405180604001604052806005815260200164044535741560dc1b8152506115b1565b610d5660405180604001604052806005815260200164044535741560dc1b8152506115e2565b6101c680546001600160a01b0319166001600160a01b03831617905561077d61162c565b83421115610d9a5760405162461bcd60e51b81526004016106f790612a52565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610dc98c611589565b89604051602001610ddf96959493929190612a62565b6040516020818303038152906040528051906020012090506000610e0282611532565b90506000610e128287878761155f565b9050896001600160a01b0316816001600160a01b031614610e455760405162461bcd60e51b81526004016106f790612af0565b610e508a8a8a610f82565b50505050505050505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b610194546001600160a01b031690565b60408051808201909152600080825260208201526001600160a01b038316600090815261013160205260409020805463ffffffff8416908110610edc57610edc61289c565b60009182526020918290206040805180820190915291015463ffffffff81168252600160201b90046001600160e01b0316918101919091529392505050565b610f236114a3565b61019480546001600160a01b0319166001600160a01b038316908117909155610f4a610abb565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b038316610fa85760405162461bcd60e51b81526004016106f790612b41565b6001600160a01b038216610fce5760405162461bcd60e51b81526004016106f790612b90565b6001600160a01b0380841660008181526098602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906110299085906120f8565b60405180910390a3505050565b60006110428484610e5c565b9050600019811461107a578181101561106d5760405162461bcd60e51b81526004016106f790612bd4565b61107a8484848403610f82565b50505050565b6001600160a01b0383166110a65760405162461bcd60e51b81526004016106f790612c26565b6001600160a01b0382166110cc5760405162461bcd60e51b81526004016106f790612c76565b6001600160a01b038316600090815260976020526040902054818110156111055760405162461bcd60e51b81526004016106f790612cc9565b6001600160a01b0380851660008181526097602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111639086906120f8565b60405180910390a361107a848484611653565b60006106aa61165e565b600080516020613391833981519152546001600160a01b031690565b6101c654604051632474521560e21b81526001600160a01b039091169060009082906391d14854906111d49084903390600401612cd9565b602060405180830381865afa1580156111f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112159190612d07565b6112315760405162461bcd60e51b81526004016106f790612d59565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561126957611231836116c2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156112c3575060408051601f3d908101601f191682019092526112c091810190612d74565b60015b6112df5760405162461bcd60e51b81526004016106f790612de0565b600080516020613391833981519152811461130c5760405162461bcd60e51b81526004016106f790612e36565b50611231838383611716565b81546000908181600581111561136f5760006113338461173b565b61133d9085612e46565b90508561134a8883611823565b5463ffffffff16111561135f5780915061136d565b61136a81600161270b565b92505b505b808210156113b95760006113838383611831565b9050856113908883611823565b5463ffffffff1611156113a5578091506113b3565b6113b081600161270b565b92505b5061136f565b80156113e2576113cc8660018303611823565b54600160201b90046001600160e01b03166113e5565b60005b6001600160e01b03169695505050505050565b600061140383610973565b90506000611410846109bf565b6001600160a01b038581166000818152610130602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461107a82848361184c565b600063ffffffff82111561149f5760405162461bcd60e51b81526004016106f790612e9c565b5090565b336114ac610abb565b6001600160a01b0316146109ec5760405162461bcd60e51b81526004016106f790612ede565b61019480546001600160a01b031916905561077d81611955565b606060cb80546105dd9061263e565b606060cc80546105dd9061263e565b600065ffffffffffff82111561149f5760405162461bcd60e51b81526004016106f790612f31565b600061067461153f611176565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611570878787876119a8565b9150915061157d81611a55565b5090505b949350505050565b6001600160a01b038116600090815260fd602052604090208054600181018255905b50919050565b600054610100900460ff166115d85760405162461bcd60e51b81526004016106f790612a0e565b6109128282611b04565b600054610100900460ff166116095760405162461bcd60e51b81526004016106f790612a0e565b61077d81604051806040016040528060018152602001603160f81b815250611b44565b600054610100900460ff166109ec5760405162461bcd60e51b81526004016106f790612a0e565b611231838383611b93565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611689611bae565b611691611c07565b46306040516020016116a7959493929190612f41565b60405160208183030381529060405280519060200120905090565b6116cb81611c38565b6116e75760405162461bcd60e51b81526004016106f790612fcd565b60008051602061339183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61171f83611c47565b60008251118061172c5750805b156112315761107a8383611c87565b60008160000361174d57506000919050565b6000600161175a84611cac565b901c6001901b9050600181848161177357611773612fdd565b048201901c9050600181848161178b5761178b612fdd565b048201901c905060018184816117a3576117a3612fdd565b048201901c905060018184816117bb576117bb612fdd565b048201901c905060018184816117d3576117d3612fdd565b048201901c905060018184816117eb576117eb612fdd565b048201901c9050600181848161180357611803612fdd565b048201901c90506106998182858161181d5761181d612fdd565b04611d40565b600091825260209091200190565b60006118406002848418612ff3565b6106999084841661270b565b816001600160a01b0316836001600160a01b03161415801561186e5750600081115b15611231576001600160a01b038316156118e2576001600160a01b03831660009081526101316020526040812081906118aa90611d5685611d62565b91509150846001600160a01b03166000805160206133d883398151915283836040516118d7929190613007565b60405180910390a250505b6001600160a01b03821615611231576001600160a01b038216600090815261013160205260408120819061191990611ed085611d62565b91509150836001600160a01b03166000805160206133d88339815191528383604051611946929190613007565b60405180910390a25050505050565b61016280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156119d55750600090506003611a4c565b6000600187878787604051600081526020016040526040516119fa9493929190613022565b6020604051602081039080840390855afa158015611a1c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611a4557600060019250925050611a4c565b9150600090505b94509492505050565b6000816004811115611a6957611a6961303d565b03611a715750565b6001816004811115611a8557611a8561303d565b03611aa25760405162461bcd60e51b81526004016106f790613082565b6002816004811115611ab657611ab661303d565b03611ad35760405162461bcd60e51b81526004016106f7906130c6565b6003816004811115611ae757611ae761303d565b0361077d5760405162461bcd60e51b81526004016106f790613115565b600054610100900460ff16611b2b5760405162461bcd60e51b81526004016106f790612a0e565b609a611b3783826131ec565b50609b61123182826131ec565b600054610100900460ff16611b6b5760405162461bcd60e51b81526004016106f790612a0e565b60cb611b7783826131ec565b5060cc611b8482826131ec565b5050600060c981905560ca5550565b611231611b9f84610973565b611ba884610973565b8361184c565b600080611bb96114ec565b805190915015611bd0578051602090910120919050565b60c9548015611bdf5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080611c126114fb565b805190915015611c29578051602090910120919050565b60ca548015611bdf5792915050565b6001600160a01b03163b151590565b611c50816116c2565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061069983836040518060600160405280602781526020016133b160279139611edc565b600080608083901c15611cc157608092831c92015b604083901c15611cd357604092831c92015b602083901c15611ce557602092831c92015b601083901c15611cf757601092831c92015b600883901c15611d0957600892831c92015b600483901c15611d1b57600492831c92015b600283901c15611d2d57600292831c92015b600183901c156106745760010192915050565b6000818310611d4f5781610699565b5090919050565b60006106998284612e46565b82546000908190818115611dac57611d7d8760018403611823565b60408051808201909152905463ffffffff81168252600160201b90046001600160e01b03166020820152611dc1565b60408051808201909152600080825260208201525b905080602001516001600160e01b03169350611de184868863ffffffff16565b9250600082118015611e0b5750611df6610b07565b65ffffffffffff16816000015163ffffffff16145b15611e4d57611e1983611f54565b611e268860018503611823565b80546001600160e01b0392909216600160201b0263ffffffff909216919091179055611ec6565b866040518060400160405280611e71611e64610b07565b65ffffffffffff16611479565b63ffffffff168152602001611e8586611f54565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b5050935093915050565b6000610699828461270b565b6060600080856001600160a01b031685604051611ef991906132cc565b600060405180830381855af49150503d8060008114611f34576040519150601f19603f3d011682016040523d82523d6000602084013e611f39565b606091505b5091509150611f4a86838387611f7d565b9695505050505050565b60006001600160e01b0382111561149f5760405162461bcd60e51b81526004016106f79061331c565b60608315611fba578251600003611fb357611f9785611c38565b611fb35760405162461bcd60e51b81526004016106f790613360565b5081611581565b6115818383815115611fcf5781518083602001fd5b8060405162461bcd60e51b81526004016106f7919061204b565b60005b83811015612004578181015183820152602001611fec565b50506000910152565b601f01601f191690565b6000612021825190565b808452602084019350612038818560208601611fe9565b6120418161200d565b9093019392505050565b602080825281016106998184612017565b60006001600160a01b038216610674565b6120768161205c565b811461077d57600080fd5b80356106748161206d565b80612076565b80356106748161208c565b600080604083850312156120b3576120b3600080fd5b60006120bf8585612081565b92505060206120d085828601612092565b9150509250929050565b8015155b82525050565b6020810161067482846120da565b806120de565b6020810161067482846120f2565b60008060006060848603121561211e5761211e600080fd5b600061212a8686612081565b935050602061213b86828701612081565b925050604061214c86828701612092565b9150509250925092565b60ff81166120de565b602081016106748284612156565b60006020828403121561218257612182600080fd5b60006115818484612081565b634e487b7160e01b600052604160045260246000fd5b6121ad8261200d565b81018181106001600160401b03821117156121ca576121ca61218e565b6040525050565b60006121dc60405190565b90506121e882826121a4565b919050565b60006001600160401b038211156122065761220661218e565b61220f8261200d565b60200192915050565b82818337506000910152565b6000612237612232846121ed565b6121d1565b90508281526020810184848401111561225257612252600080fd5b61225d848285612218565b509392505050565b600082601f83011261227957612279600080fd5b8135611581848260208601612224565b6000806040838503121561229f5761229f600080fd5b60006122ab8585612081565b92505060208301356001600160401b038111156122ca576122ca600080fd5b6120d085828601612265565b6120de8161205c565b6020810161067482846122d6565b63ffffffff81166120de565b6020810161067482846122ed565b6001600160f81b031981166120de565b600061232383836120f2565b505060200190565b6000612335825190565b80845260209384019383018060005b838110156123695781516123588882612317565b975060208301925050600101612344565b509495945050505050565b60e08101612382828a612307565b81810360208301526123948189612017565b905081810360408301526123a88188612017565b90506123b760608301876120f2565b6123c460808301866122d6565b6123d160a08301856120f2565b81810360c08301526123e3818461232b565b9998505050505050505050565b60006020828403121561240557612405600080fd5b60006115818484612092565b65ffffffffffff81166120de565b602081016106748284612411565b60ff8116612076565b80356106748161242d565b60008060008060008060c0878903121561245d5761245d600080fd5b60006124698989612081565b965050602061247a89828a01612092565b955050604061248b89828a01612092565b945050606061249c89828a01612436565b93505060806124ad89828a01612092565b92505060a06124be89828a01612092565b9150509295509295509295565b600080600080600080600060e0888a0312156124e9576124e9600080fd5b60006124f58a8a612081565b97505060206125068a828b01612081565b96505060406125178a828b01612092565b95505060606125288a828b01612092565b94505060806125398a828b01612436565b93505060a061254a8a828b01612092565b92505060c061255b8a828b01612092565b91505092959891949750929550565b6000806040838503121561258057612580600080fd5b600061258c8585612081565b92505060206120d085828601612081565b63ffffffff8116612076565b80356106748161259d565b600080604083850312156125ca576125ca600080fd5b60006125d68585612081565b92505060206120d0858286016125a9565b6001600160e01b0381166120de565b8051604083019061260784826122ed565b50602082015161107a60208501826125e7565b6040810161067482846125f6565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061265257607f821691505b6020821081036115ab576115ab612628565b602c815260006020820160008051602061337183398151915281526b19195b1959d85d1958d85b1b60a21b602082015291505b5060400190565b6020808252810161067481612664565b602c815260006020820160008051602061337183398151915281526b6163746976652070726f787960a01b60208201529150612697565b60208082528101610674816126ae565b634e487b7160e01b600052601160045260246000fd5b80820180821115610674576106746126f5565b601981526000602082017804552433230566f7465733a20667574757265206c6f6f6b757603c1b815291505b5060200190565b602080825281016106748161271e565b601d81526000602082017f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f64650000008152915061274a565b6020808252810161067481612761565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150612697565b60208082528101610674816127a5565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150612697565b602080825281016106748161280a565b60158152600060208201741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b8152915061274a565b6020808252810161067481612860565b634e487b7160e01b600052603260045260246000fd5b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b60208201529150612697565b60208082528101610674816128b2565b601d81526000602082017f4552433230566f7465733a207369676e617475726520657870697265640000008152915061274a565b6020808252810161067481612904565b6080810161295682876120f2565b61296360208301866122d6565b61297060408301856120f2565b61297d60608301846120f2565b95945050505050565b60198152600060208201784552433230566f7465733a20696e76616c6964206e6f6e636560381b8152915061274a565b6020808252810161067481612986565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150612697565b60208082528101610674816129c6565b601d81526000602082017f45524332305065726d69743a206578706972656420646561646c696e650000008152915061274a565b6020808252810161067481612a1e565b60c08101612a7082896120f2565b612a7d60208301886122d6565b612a8a60408301876122d6565b612a9760608301866120f2565b612aa460808301856120f2565b612ab160a08301846120f2565b979650505050505050565b601e81526000602082017f45524332305065726d69743a20696e76616c6964207369676e617475726500008152915061274a565b6020808252810161067481612abc565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150612697565b6020808252810161067481612b00565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150612697565b6020808252810161067481612b51565b601d81526000602082017f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000008152915061274a565b6020808252810161067481612ba0565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150612697565b6020808252810161067481612be4565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150612697565b6020808252810161067481612c36565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150612697565b6020808252810161067481612c86565b60408101612ce782856120f2565b61069960208301846122d6565b801515612076565b805161067481612cf4565b600060208284031215612d1c57612d1c600080fd5b60006115818484612cfc565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b8152915061274a565b6020808252810161067481612d28565b80516106748161208c565b600060208284031215612d8957612d89600080fd5b60006115818484612d69565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150612697565b6020808252810161067481612d95565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150612697565b6020808252810161067481612df0565b81810381811115610674576106746126f5565b602681526000602082017f53616665436173743a2076616c756520646f65736e27742066697420696e203381526532206269747360d01b60208201529150612697565b6020808252810161067481612e59565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729101908152600061274a565b6020808252810161067481612eac565b602681526000602082017f53616665436173743a2076616c756520646f65736e27742066697420696e203481526538206269747360d01b60208201529150612697565b6020808252810161067481612eee565b60a08101612f4f82886120f2565b612f5c60208301876120f2565b612f6960408301866120f2565b612f7660608301856120f2565b611f4a60808301846122d6565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150612697565b6020808252810161067481612f83565b634e487b7160e01b600052601260045260246000fd5b60008261300257613002612fdd565b500490565b6040810161301582856120f2565b61069960208301846120f2565b6080810161303082876120f2565b6129636020830186612156565b634e487b7160e01b600052602160045260246000fd5b601881526000602082017745434453413a20696e76616c6964207369676e617475726560401b8152915061274a565b6020808252810161067481613053565b601f81526000602082017f45434453413a20696e76616c6964207369676e6174757265206c656e677468008152915061274a565b6020808252810161067481613092565b602281526000602082017f45434453413a20696e76616c6964207369676e6174757265202773272076616c815261756560f01b60208201529150612697565b60208082528101610674816130d6565b60006106746131318381565b90565b61313d83613125565b815460001960089490940293841b1916921b91909117905550565b6000611231818484613134565b8181101561091257613178600082613158565b600101613165565b601f821115611231576000818152602090206020601f850104810160208510156131a75750805b6131b96020601f860104830182613165565b5050505050565b6000196008929092029190911c191690565b60006131de83836131c0565b600290930290921792915050565b81516001600160401b038111156132055761320561218e565b61320f825461263e565b61321a828285613180565b6020601f83116001811461324857600084156132365750858201515b61324085826131d2565b8655506132a2565b600085815260208120601f198616915b828110156132785788850151825560209485019460019092019101613258565b868310156132955784890151613291601f8916826131c0565b8355505b6001600288020188555050505b505050505050565b60006132b4825190565b6132c2818560208601611fe9565b9290920192915050565b600061069982846132aa565b602781526000602082017f53616665436173743a2076616c756520646f65736e27742066697420696e20328152663234206269747360c81b60208201529150612697565b60208082528101610674816132d8565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000008152915061274a565b602080825281016106748161332c56fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724a264697066735822122098973bcd3c8567b790db78c348b97cc5735c918b44ad09eaf31bbb0b1f1c058564736f6c63430008150033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
