{
  "_format": "hh-sol-artifact-1",
  "contractName": "TestCurrencyPermit",
  "sourceName": "contracts/TestCurrencyPermit.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "initialSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "decimals_",
          "type": "uint8"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ECDSAInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "ECDSAInvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "ECDSAInvalidSignatureS",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSpender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ERC2612ExpiredSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC2612InvalidSigner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentNonce",
          "type": "uint256"
        }
      ],
      "name": "InvalidAccountNonce",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidShortString",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "str",
          "type": "string"
        }
      ],
      "name": "StringTooLong",
      "type": "error"
    },
    {
      "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": [],
      "name": "EIP712DomainChanged",
      "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"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "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": "value",
          "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": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "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": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "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": "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": "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": "value",
          "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": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x61018060405234801561001157600080fd5b50604051611672380380611672833981016040819052610030916103d5565b6040805180820190915260018152603160f81b6020820152849081908186600361005a83826104e9565b50600461006782826104e9565b5061007791508390506005610138565b61012052610086816006610138565b61014052815160208084019190912060e052815190820120610100524660a05261011360e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525060ff81166101605261012f338361016b565b5050505061061f565b60006020835110156101545761014d836101aa565b9050610165565b8161015f84826104e9565b5060ff90505b92915050565b6001600160a01b03821661019a5760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b6101a6600083836101e8565b5050565b600080829050601f815111156101d5578260405163305a27a960e01b815260040161019191906105a7565b80516101e0826105da565b179392505050565b6001600160a01b03831661021357806002600082825461020891906105fe565b909155506102859050565b6001600160a01b038316600090815260208190526040902054818110156102665760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610191565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166102a1576002805482900390556102c0565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161030591815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561034357818101518382015260200161032b565b50506000910152565b600082601f83011261035d57600080fd5b81516001600160401b0381111561037657610376610312565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103a4576103a4610312565b6040528181528382016020018510156103bc57600080fd5b6103cd826020830160208701610328565b949350505050565b600080600080608085870312156103eb57600080fd5b84516001600160401b0381111561040157600080fd5b61040d8782880161034c565b602087015190955090506001600160401b0381111561042b57600080fd5b6104378782880161034c565b93505060408501519150606085015160ff8116811461045557600080fd5b939692955090935050565b600181811c9082168061047457607f821691505b60208210810361049457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104e457806000526020600020601f840160051c810160208510156104c15750805b601f840160051c820191505b818110156104e157600081556001016104cd565b50505b505050565b81516001600160401b0381111561050257610502610312565b610516816105108454610460565b8461049a565b6020601f82116001811461054a57600083156105325750848201515b600019600385901b1c1916600184901b1784556104e1565b600084815260208120601f198516915b8281101561057a578785015182556020948501946001909201910161055a565b50848210156105985786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152600082518060208401526105c6816040850160208701610328565b601f01601f19169190910160400192915050565b805160208083015191908110156104945760001960209190910360031b1b16919050565b8082018082111561016557634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051610fee6106846000396000610167015260006107bb0152600061078e01526000610700015260006106d8015260006106330152600061065d015260006106870152610fee6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a08231116100975780639dc29fac116100665780639dc29fac1461020d578063a9059cbb14610220578063d505accf14610233578063dd62ed3e1461024657600080fd5b806370a08231146101ae5780637ecebe00146101d757806384b0196e146101ea57806395d89b411461020557600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce567146101605780633644e5151461019157806340c10f191461019957600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b61010261027f565b60405161010f9190610d51565b60405180910390f35b61012b610126366004610d87565b610311565b604051901515815260200161010f565b6002545b60405190815260200161010f565b61012b61015b366004610db1565b61032b565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161010f565b61013f61034f565b6101ac6101a7366004610d87565b61035e565b005b61013f6101bc366004610dee565b6001600160a01b031660009081526020819052604090205490565b61013f6101e5366004610dee565b61036c565b6101f261038a565b60405161010f9796959493929190610e09565b6101026103d0565b6101ac61021b366004610d87565b6103df565b61012b61022e366004610d87565b6103e9565b6101ac610241366004610ea1565b6103f7565b61013f610254366004610f14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461028e90610f47565b80601f01602080910402602001604051908101604052809291908181526020018280546102ba90610f47565b80156103075780601f106102dc57610100808354040283529160200191610307565b820191906000526020600020905b8154815290600101906020018083116102ea57829003601f168201915b5050505050905090565b60003361031f818585610536565b60019150505b92915050565b600033610339858285610548565b6103448585856105c7565b506001949350505050565b6000610359610626565b905090565b6103688282610751565b5050565b6001600160a01b038116600090815260076020526040812054610325565b60006060806000806000606061039e610787565b6103a66107b4565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606004805461028e90610f47565b61036882826107e1565b60003361031f8185856105c7565b834211156104205760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861046d8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104c882610817565b905060006104d882878787610844565b9050896001600160a01b0316816001600160a01b03161461051f576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610417565b61052a8a8a8a610536565b50505050505050505050565b6105438383836001610872565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198110156105c157818110156105b257604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610417565b6105c184848484036000610872565b50505050565b6001600160a01b0383166105f157604051634b637e8f60e11b815260006004820152602401610417565b6001600160a01b03821661061b5760405163ec442f0560e01b815260006004820152602401610417565b610543838383610947565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561067f57507f000000000000000000000000000000000000000000000000000000000000000046145b156106a957507f000000000000000000000000000000000000000000000000000000000000000090565b610359604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b03821661077b5760405163ec442f0560e01b815260006004820152602401610417565b61036860008383610947565b60606103597f00000000000000000000000000000000000000000000000000000000000000006005610a71565b60606103597f00000000000000000000000000000000000000000000000000000000000000006006610a71565b6001600160a01b03821661080b57604051634b637e8f60e11b815260006004820152602401610417565b61036882600083610947565b6000610325610824610626565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061085688888888610b1c565b9250925092506108668282610beb565b50909695505050505050565b6001600160a01b03841661089c5760405163e602df0560e01b815260006004820152602401610417565b6001600160a01b0383166108c657604051634a1406b160e11b815260006004820152602401610417565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156105c157826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161093991815260200190565b60405180910390a350505050565b6001600160a01b0383166109725780600260008282546109679190610f81565b909155506109e49050565b6001600160a01b038316600090815260208190526040902054818110156109c55760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610417565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610a0057600280548290039055610a1f565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a6491815260200190565b60405180910390a3505050565b606060ff8314610a8b57610a8483610ca4565b9050610325565b818054610a9790610f47565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac390610f47565b8015610b105780601f10610ae557610100808354040283529160200191610b10565b820191906000526020600020905b815481529060010190602001808311610af357829003601f168201915b50505050509050610325565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610b575750600091506003905082610be1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610bab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bd757506000925060019150829050610be1565b9250600091508190505b9450945094915050565b6000826003811115610bff57610bff610fa2565b03610c08575050565b6001826003811115610c1c57610c1c610fa2565b03610c3a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610c4e57610c4e610fa2565b03610c6f5760405163fce698f760e01b815260048101829052602401610417565b6003826003811115610c8357610c83610fa2565b03610368576040516335e2f38360e21b815260048101829052602401610417565b60606000610cb183610ce3565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561032557604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610d3157602081850181015186830182015201610d15565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d646020830184610d0b565b9392505050565b80356001600160a01b0381168114610d8257600080fd5b919050565b60008060408385031215610d9a57600080fd5b610da383610d6b565b946020939093013593505050565b600080600060608486031215610dc657600080fd5b610dcf84610d6b565b9250610ddd60208501610d6b565b929592945050506040919091013590565b600060208284031215610e0057600080fd5b610d6482610d6b565b60ff60f81b8816815260e060208201526000610e2860e0830189610d0b565b8281036040840152610e3a8189610d0b565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015610e90578351835260209384019390920191600101610e72565b50909b9a5050505050505050505050565b600080600080600080600060e0888a031215610ebc57600080fd5b610ec588610d6b565b9650610ed360208901610d6b565b95506040880135945060608801359350608088013560ff81168114610ef757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f2757600080fd5b610f3083610d6b565b9150610f3e60208401610d6b565b90509250929050565b600181811c90821680610f5b57607f821691505b602082108103610f7b57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561032557634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220d8b604687d18baef9b174fbb0c29a8d0b6b654bb6898b38428d81a37437f24f764736f6c634300081c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a08231116100975780639dc29fac116100665780639dc29fac1461020d578063a9059cbb14610220578063d505accf14610233578063dd62ed3e1461024657600080fd5b806370a08231146101ae5780637ecebe00146101d757806384b0196e146101ea57806395d89b411461020557600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce567146101605780633644e5151461019157806340c10f191461019957600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b61010261027f565b60405161010f9190610d51565b60405180910390f35b61012b610126366004610d87565b610311565b604051901515815260200161010f565b6002545b60405190815260200161010f565b61012b61015b366004610db1565b61032b565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161010f565b61013f61034f565b6101ac6101a7366004610d87565b61035e565b005b61013f6101bc366004610dee565b6001600160a01b031660009081526020819052604090205490565b61013f6101e5366004610dee565b61036c565b6101f261038a565b60405161010f9796959493929190610e09565b6101026103d0565b6101ac61021b366004610d87565b6103df565b61012b61022e366004610d87565b6103e9565b6101ac610241366004610ea1565b6103f7565b61013f610254366004610f14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461028e90610f47565b80601f01602080910402602001604051908101604052809291908181526020018280546102ba90610f47565b80156103075780601f106102dc57610100808354040283529160200191610307565b820191906000526020600020905b8154815290600101906020018083116102ea57829003601f168201915b5050505050905090565b60003361031f818585610536565b60019150505b92915050565b600033610339858285610548565b6103448585856105c7565b506001949350505050565b6000610359610626565b905090565b6103688282610751565b5050565b6001600160a01b038116600090815260076020526040812054610325565b60006060806000806000606061039e610787565b6103a66107b4565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606004805461028e90610f47565b61036882826107e1565b60003361031f8185856105c7565b834211156104205760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861046d8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104c882610817565b905060006104d882878787610844565b9050896001600160a01b0316816001600160a01b03161461051f576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610417565b61052a8a8a8a610536565b50505050505050505050565b6105438383836001610872565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198110156105c157818110156105b257604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610417565b6105c184848484036000610872565b50505050565b6001600160a01b0383166105f157604051634b637e8f60e11b815260006004820152602401610417565b6001600160a01b03821661061b5760405163ec442f0560e01b815260006004820152602401610417565b610543838383610947565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561067f57507f000000000000000000000000000000000000000000000000000000000000000046145b156106a957507f000000000000000000000000000000000000000000000000000000000000000090565b610359604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b03821661077b5760405163ec442f0560e01b815260006004820152602401610417565b61036860008383610947565b60606103597f00000000000000000000000000000000000000000000000000000000000000006005610a71565b60606103597f00000000000000000000000000000000000000000000000000000000000000006006610a71565b6001600160a01b03821661080b57604051634b637e8f60e11b815260006004820152602401610417565b61036882600083610947565b6000610325610824610626565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061085688888888610b1c565b9250925092506108668282610beb565b50909695505050505050565b6001600160a01b03841661089c5760405163e602df0560e01b815260006004820152602401610417565b6001600160a01b0383166108c657604051634a1406b160e11b815260006004820152602401610417565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156105c157826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161093991815260200190565b60405180910390a350505050565b6001600160a01b0383166109725780600260008282546109679190610f81565b909155506109e49050565b6001600160a01b038316600090815260208190526040902054818110156109c55760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610417565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610a0057600280548290039055610a1f565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a6491815260200190565b60405180910390a3505050565b606060ff8314610a8b57610a8483610ca4565b9050610325565b818054610a9790610f47565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac390610f47565b8015610b105780601f10610ae557610100808354040283529160200191610b10565b820191906000526020600020905b815481529060010190602001808311610af357829003601f168201915b50505050509050610325565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610b575750600091506003905082610be1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610bab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bd757506000925060019150829050610be1565b9250600091508190505b9450945094915050565b6000826003811115610bff57610bff610fa2565b03610c08575050565b6001826003811115610c1c57610c1c610fa2565b03610c3a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610c4e57610c4e610fa2565b03610c6f5760405163fce698f760e01b815260048101829052602401610417565b6003826003811115610c8357610c83610fa2565b03610368576040516335e2f38360e21b815260048101829052602401610417565b60606000610cb183610ce3565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561032557604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610d3157602081850181015186830182015201610d15565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d646020830184610d0b565b9392505050565b80356001600160a01b0381168114610d8257600080fd5b919050565b60008060408385031215610d9a57600080fd5b610da383610d6b565b946020939093013593505050565b600080600060608486031215610dc657600080fd5b610dcf84610d6b565b9250610ddd60208501610d6b565b929592945050506040919091013590565b600060208284031215610e0057600080fd5b610d6482610d6b565b60ff60f81b8816815260e060208201526000610e2860e0830189610d0b565b8281036040840152610e3a8189610d0b565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015610e90578351835260209384019390920191600101610e72565b50909b9a5050505050505050505050565b600080600080600080600060e0888a031215610ebc57600080fd5b610ec588610d6b565b9650610ed360208901610d6b565b95506040880135945060608801359350608088013560ff81168114610ef757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f2757600080fd5b610f3083610d6b565b9150610f3e60208401610d6b565b90509250929050565b600181811c90821680610f5b57607f821691505b602082108103610f7b57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561032557634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220d8b604687d18baef9b174fbb0c29a8d0b6b654bb6898b38428d81a37437f24f764736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
