{
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "name",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "symbol",
                    "type": "string"
                },
                {
                    "internalType": "uint8",
                    "name": "decimals",
                    "type": "uint8"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "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": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "DOMAIN_SEPARATOR",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "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": "",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_amount",
                    "type": "uint256"
                }
            ],
            "name": "forceApprove",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_to",
                    "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": "",
                    "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": "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"
        }
    ],
    "bytecode": {
        "object": "0x60e06040523480156200001157600080fd5b5060405162001039380380620010398339810160408190526200003491620001db565b8282826000620000458482620002ef565b506001620000548382620002ef565b5060ff81166080524660a0526200006a6200007a565b60c0525062000439945050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000ae9190620003bb565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013e57600080fd5b81516001600160401b03808211156200015b576200015b62000116565b604051601f8301601f19908116603f0116810190828211818310171562000186576200018662000116565b81604052838152602092508683858801011115620001a357600080fd5b600091505b83821015620001c75785820183015181830184015290820190620001a8565b600093810190920192909252949350505050565b600080600060608486031215620001f157600080fd5b83516001600160401b03808211156200020957600080fd5b62000217878388016200012c565b945060208601519150808211156200022e57600080fd5b506200023d868287016200012c565b925050604084015160ff811681146200025557600080fd5b809150509250925092565b600181811c908216806200027557607f821691505b6020821081036200029657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ea57600081815260208120601f850160051c81016020861015620002c55750805b601f850160051c820191505b81811015620002e657828155600101620002d1565b5050505b505050565b81516001600160401b038111156200030b576200030b62000116565b62000323816200031c845462000260565b846200029c565b602080601f8311600181146200035b5760008415620003425750858301515b600019600386901b1c1916600185901b178555620002e6565b600085815260208120601f198616915b828110156200038c578886015182559484019460019091019084016200036b565b5085821015620003ab5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808354620003cb8162000260565b60018281168015620003e65760018114620003fc576200042d565b60ff19841687528215158302870194506200042d565b8760005260208060002060005b85811015620004245781548a82015290840190820162000409565b50505082870194505b50929695505050505050565b60805160a05160c051610bd06200046960003960006104820152600061044d0152600061015f0152610bd06000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806361f49ed61161008c57806395d89b411161006657806395d89b4114610203578063a9059cbb1461020b578063d505accf1461021e578063dd62ed3e1461023157600080fd5b806361f49ed6146101b057806370a08231146101c35780637ecebe00146101e357600080fd5b806323b872dd116100c857806323b872dd14610147578063313ce5671461015a5780633644e5151461019357806340c10f191461019b57600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f761025c565b60405161010491906108ed565b60405180910390f35b61012061011b366004610957565b6102ea565b6040519015158152602001610104565b61013960025481565b604051908152602001610104565b610120610155366004610981565b610357565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610104565b610139610449565b6101ae6101a9366004610957565b6104a4565b005b6101206101be366004610981565b6104b2565b6101396101d13660046109bd565b60036020526000908152604090205481565b6101396101f13660046109bd565b60056020526000908152604090205481565b6100f761051a565b610120610219366004610957565b610527565b6101ae61022c3660046109df565b61059f565b61013961023f366004610a52565b600460209081526000928352604080842090915290825290205481565b6000805461026990610a85565b80601f016020809104026020016040519081016040528092919081815260200182805461029590610a85565b80156102e25780601f106102b7576101008083540402835291602001916102e2565b820191906000526020600020905b8154815290600101906020018083116102c557829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103459086815260200190565b60405180910390a35060015b92915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103b35761038e8382610ad5565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103db908490610ad5565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104369087815260200190565b60405180910390a3506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461047f5761047a6107e8565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104ae8282610882565b5050565b6001600160a01b03838116600081815260046020908152604080832094871680845294825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6001805461026990610a85565b33600090815260036020526040812080548391908390610548908490610ad5565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103459086815260200190565b428410156105f45760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b60006001610600610449565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa15801561070c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107425750876001600160a01b0316816001600160a01b0316145b61077f5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016105eb565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161081a9190610ae8565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546108949190610b87565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b8181101561091a578581018301518582016040015282016108fe565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461095257600080fd5b919050565b6000806040838503121561096a57600080fd5b6109738361093b565b946020939093013593505050565b60008060006060848603121561099657600080fd5b61099f8461093b565b92506109ad6020850161093b565b9150604084013590509250925092565b6000602082840312156109cf57600080fd5b6109d88261093b565b9392505050565b600080600080600080600060e0888a0312156109fa57600080fd5b610a038861093b565b9650610a116020890161093b565b95506040880135945060608801359350608088013560ff81168114610a3557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610a6557600080fd5b610a6e8361093b565b9150610a7c6020840161093b565b90509250929050565b600181811c90821680610a9957607f821691505b602082108103610ab957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561035157610351610abf565b600080835481600182811c915080831680610b0457607f831692505b60208084108203610b2357634e487b7160e01b86526022600452602486fd5b818015610b375760018114610b4c57610b79565b60ff1986168952841515850289019650610b79565b60008a81526020902060005b86811015610b715781548b820152908501908301610b58565b505084890196505b509498975050505050505050565b8082018082111561035157610351610abf56fea26469706673582212203582f9ba28e259cd1bb001b79d8e065911e52d22256508983534d64d7fdc459664736f6c63430008100033",
        "sourceMap": "119:441:41:-:0;;;153:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;229:4;235:6;243:8;2094:4:13;:12;229:4:41;2094::13;:12;:::i;:::-;-1:-1:-1;2116:6:13;:16;2125:7;2116:6;:16;:::i;:::-;-1:-1:-1;2142:20:13;;;;;2192:13;2173:32;;2242:24;:22;:24::i;:::-;2215:51;;-1:-1:-1;119:441:41;;-1:-1:-1;;;;;119:441:41;5510:446:13;5575:7;5672:95;5805:4;5789:22;;;;;;:::i;:::-;;;;;;;;;;5640:295;;;5405:25:46;;;;5446:18;;5439:34;;;;5833:14:13;5489:18:46;;;5482:34;5869:13:13;5532:18:46;;;5525:34;5912:4:13;5575:19:46;;;5568:61;5377:19;;5640:295:13;;;;;;;;;;;;5613:336;;;;;;5594:355;;5510:446;:::o;14:127:46:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:840;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:46;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:46;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;954:1;932:15;;;928:24;;;921:35;;;;936:6;146:840;-1:-1:-1;;;;146:840:46:o;991:712::-;1097:6;1105;1113;1166:2;1154:9;1145:7;1141:23;1137:32;1134:52;;;1182:1;1179;1172:12;1134:52;1209:16;;-1:-1:-1;;;;;1274:14:46;;;1271:34;;;1301:1;1298;1291:12;1271:34;1324:61;1377:7;1368:6;1357:9;1353:22;1324:61;:::i;:::-;1314:71;;1431:2;1420:9;1416:18;1410:25;1394:41;;1460:2;1450:8;1447:16;1444:36;;;1476:1;1473;1466:12;1444:36;;1499:63;1554:7;1543:8;1532:9;1528:24;1499:63;:::i;:::-;1489:73;;;1605:2;1594:9;1590:18;1584:25;1649:4;1642:5;1638:16;1631:5;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;1692:5;1682:15;;;991:712;;;;;:::o;1708:380::-;1787:1;1783:12;;;;1830;;;1851:61;;1905:4;1897:6;1893:17;1883:27;;1851:61;1958:2;1950:6;1947:14;1927:18;1924:38;1921:161;;2004:10;1999:3;1995:20;1992:1;1985:31;2039:4;2036:1;2029:15;2067:4;2064:1;2057:15;1921:161;;1708:380;;;:::o;2219:545::-;2321:2;2316:3;2313:11;2310:448;;;2357:1;2382:5;2378:2;2371:17;2427:4;2423:2;2413:19;2497:2;2485:10;2481:19;2478:1;2474:27;2468:4;2464:38;2533:4;2521:10;2518:20;2515:47;;;-1:-1:-1;2556:4:46;2515:47;2611:2;2606:3;2602:12;2599:1;2595:20;2589:4;2585:31;2575:41;;2666:82;2684:2;2677:5;2674:13;2666:82;;;2729:17;;;2710:1;2699:13;2666:82;;;2670:3;;;2310:448;2219:545;;;:::o;2940:1352::-;3060:10;;-1:-1:-1;;;;;3082:30:46;;3079:56;;;3115:18;;:::i;:::-;3144:97;3234:6;3194:38;3226:4;3220:11;3194:38;:::i;:::-;3188:4;3144:97;:::i;:::-;3296:4;;3360:2;3349:14;;3377:1;3372:663;;;;4079:1;4096:6;4093:89;;;-1:-1:-1;4148:19:46;;;4142:26;4093:89;-1:-1:-1;;2897:1:46;2893:11;;;2889:24;2885:29;2875:40;2921:1;2917:11;;;2872:57;4195:81;;3342:944;;3372:663;2166:1;2159:14;;;2203:4;2190:18;;-1:-1:-1;;3408:20:46;;;3526:236;3540:7;3537:1;3534:14;3526:236;;;3629:19;;;3623:26;3608:42;;3721:27;;;;3689:1;3677:14;;;;3556:19;;3526:236;;;3530:3;3790:6;3781:7;3778:19;3775:201;;;3851:19;;;3845:26;-1:-1:-1;;3934:1:46;3930:14;;;3946:3;3926:24;3922:37;3918:42;3903:58;3888:74;;3775:201;-1:-1:-1;;;;;4022:1:46;4006:14;;;4002:22;3989:36;;-1:-1:-1;2940:1352:46:o;4297:844::-;4427:3;4456:1;4489:6;4483:13;4519:36;4545:9;4519:36;:::i;:::-;4574:1;4591:18;;;4618:133;;;;4765:1;4760:356;;;;4584:532;;4618:133;-1:-1:-1;;4651:24:46;;4639:37;;4724:14;;4717:22;4705:35;;4696:45;;;-1:-1:-1;4618:133:46;;4760:356;4791:6;4788:1;4781:17;4821:4;4866:2;4863:1;4853:16;4891:1;4905:165;4919:6;4916:1;4913:13;4905:165;;;4997:14;;4984:11;;;4977:35;5040:16;;;;4934:10;;4905:165;;;4909:3;;;5099:6;5094:3;5090:16;5083:23;;4584:532;-1:-1:-1;5132:3:46;;4297:844;-1:-1:-1;;;;;;4297:844:46:o;5146:489::-;119:441:41;;;;;;;;;;;;;;;;;;;;;;;;",
        "linkReferences": {}
    },
    "deployedBytecode": {
        "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806361f49ed61161008c57806395d89b411161006657806395d89b4114610203578063a9059cbb1461020b578063d505accf1461021e578063dd62ed3e1461023157600080fd5b806361f49ed6146101b057806370a08231146101c35780637ecebe00146101e357600080fd5b806323b872dd116100c857806323b872dd14610147578063313ce5671461015a5780633644e5151461019357806340c10f191461019b57600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f761025c565b60405161010491906108ed565b60405180910390f35b61012061011b366004610957565b6102ea565b6040519015158152602001610104565b61013960025481565b604051908152602001610104565b610120610155366004610981565b610357565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610104565b610139610449565b6101ae6101a9366004610957565b6104a4565b005b6101206101be366004610981565b6104b2565b6101396101d13660046109bd565b60036020526000908152604090205481565b6101396101f13660046109bd565b60056020526000908152604090205481565b6100f761051a565b610120610219366004610957565b610527565b6101ae61022c3660046109df565b61059f565b61013961023f366004610a52565b600460209081526000928352604080842090915290825290205481565b6000805461026990610a85565b80601f016020809104026020016040519081016040528092919081815260200182805461029590610a85565b80156102e25780601f106102b7576101008083540402835291602001916102e2565b820191906000526020600020905b8154815290600101906020018083116102c557829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103459086815260200190565b60405180910390a35060015b92915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103b35761038e8382610ad5565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103db908490610ad5565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104369087815260200190565b60405180910390a3506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461047f5761047a6107e8565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6104ae8282610882565b5050565b6001600160a01b03838116600081815260046020908152604080832094871680845294825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6001805461026990610a85565b33600090815260036020526040812080548391908390610548908490610ad5565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103459086815260200190565b428410156105f45760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b60006001610600610449565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa15801561070c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107425750876001600160a01b0316816001600160a01b0316145b61077f5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016105eb565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161081a9190610ae8565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546108949190610b87565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b8181101561091a578581018301518582016040015282016108fe565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461095257600080fd5b919050565b6000806040838503121561096a57600080fd5b6109738361093b565b946020939093013593505050565b60008060006060848603121561099657600080fd5b61099f8461093b565b92506109ad6020850161093b565b9150604084013590509250925092565b6000602082840312156109cf57600080fd5b6109d88261093b565b9392505050565b600080600080600080600060e0888a0312156109fa57600080fd5b610a038861093b565b9650610a116020890161093b565b95506040880135945060608801359350608088013560ff81168114610a3557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610a6557600080fd5b610a6e8361093b565b9150610a7c6020840161093b565b90509250929050565b600181811c90821680610a9957607f821691505b602082108103610ab957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561035157610351610abf565b600080835481600182811c915080831680610b0457607f831692505b60208084108203610b2357634e487b7160e01b86526022600452602486fd5b818015610b375760018114610b4c57610b79565b60ff1986168952841515850289019650610b79565b60008a81526020902060005b86811015610b715781548b820152908501908301610b58565b505084890196505b509498975050505050505050565b8082018082111561035157610351610abf56fea26469706673582212203582f9ba28e259cd1bb001b79d8e065911e52d22256508983534d64d7fdc459664736f6c63430008100033",
        "sourceMap": "119:441:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1031:18:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2461:211;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:46;;1162:22;1144:41;;1132:2;1117:18;2461:211:13;1004:187:46;1304:26:13;;;;;;;;;1342:25:46;;;1330:2;1315:18;1304:26:13;1196:177:46;3057:592:13;;;;;;:::i;:::-;;:::i;1083:31::-;;;;;;;;1883:4:46;1871:17;;;1853:36;;1841:2;1826:18;1083:31:13;1711:184:46;5327:177:13;;;:::i;261:87:41:-;;;;;;:::i;:::-;;:::i;:::-;;354:204;;;;;;:::i;:::-;;:::i;1337:44:13:-;;;;;;:::i;:::-;;;;;;;;;;;;;;1751:41;;;;;;:::i;:::-;;;;;;;;;;;;;;1056:20;;;:::i;2678:373::-;;;;;;:::i;:::-;;:::i;3838:1483::-;;;;;;:::i;:::-;;:::i;1388:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1031:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2461:211::-;2561:10;2535:4;2551:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2551:30:13;;;;;;;;;;:39;;;2606:37;2535:4;;2551:30;;2606:37;;;;2584:6;1342:25:46;;1330:2;1315:18;;1196:177;2606:37:13;;;;;;;;-1:-1:-1;2661:4:13;2461:211;;;;;:::o;3057:592::-;-1:-1:-1;;;;;3209:15:13;;3175:4;3209:15;;;:9;:15;;;;;;;;3225:10;3209:27;;;;;;;;-1:-1:-1;;3287:28:13;;3283:80;;3347:16;3357:6;3347:7;:16;:::i;:::-;-1:-1:-1;;;;;3317:15:13;;;;;;:9;:15;;;;;;;;3333:10;3317:27;;;;;;;:46;3283:80;-1:-1:-1;;;;;3374:15:13;;;;;;:9;:15;;;;;:25;;3393:6;;3374:15;:25;;3393:6;;3374:25;:::i;:::-;;;;-1:-1:-1;;;;;;;3545:13:13;;;;;;;:9;:13;;;;;;;:23;;;;;;3594:26;3545:13;;3594:26;;;;;;;3562:6;1342:25:46;;1330:2;1315:18;;1196:177;3594:26:13;;;;;;;;-1:-1:-1;3638:4:13;;3057:592;-1:-1:-1;;;;3057:592:13:o;5327:177::-;5384:7;5427:16;5410:13;:33;:87;;5473:24;:22;:24::i;:::-;5403:94;;5327:177;:::o;5410:87::-;-1:-1:-1;5446:24:13;;5327:177::o;261:87:41:-;322:19;328:3;333:7;322:5;:19::i;:::-;261:87;;:::o;354:204::-;-1:-1:-1;;;;;453:16:41;;;437:4;453:16;;;:9;:16;;;;;;;;:21;;;;;;;;;;;;:31;;;500:29;1342:25:46;;;437:4:41;;453:21;:16;500:29;;1315:18:46;500:29:41;;;;;;;-1:-1:-1;547:4:41;354:204;;;;;:::o;1056:20:13:-;;;;;;;:::i;2678:373::-;2774:10;2748:4;2764:21;;;:9;:21;;;;;:31;;2789:6;;2764:21;2748:4;;2764:31;;2789:6;;2764:31;:::i;:::-;;;;-1:-1:-1;;;;;;;2941:13:13;;;;;;:9;:13;;;;;;;:23;;;;;;2990:32;2999:10;;2990:32;;;;2958:6;1342:25:46;;1330:2;1315:18;;1196:177;3838:1483:13;4057:15;4045:8;:27;;4037:63;;;;-1:-1:-1;;;4037:63:13;;4088:2:46;4037:63:13;;;4070:21:46;4127:2;4107:18;;;4100:30;4166:25;4146:18;;;4139:53;4209:18;;4037:63:13;;;;;;;;;4265:24;4292:805;4428:18;:16;:18::i;:::-;-1:-1:-1;;;;;4873:13:13;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;4511:449;;4555:165;4511:449;;;4525:25:46;4604:18;;;4597:43;;;;4676:15;;;4656:18;;;4649:43;4708:18;;;4701:34;;;4751:19;;;4744:35;;;;4795:19;;;;4788:35;;;4511:449:13;;;;;;;;;;4497:19:46;;;4511:449:13;;;4472:514;;;;;;;;-1:-1:-1;;;4350:658:13;;;5092:27:46;5135:11;;;5128:27;;;;5171:12;;;5164:28;;;;5208:12;;4350:658:13;;;-1:-1:-1;;4350:658:13;;;;;;;;;4319:707;;4350:658;4319:707;;;;4292:805;;;;;;;;;5458:25:46;5531:4;5519:17;;5499:18;;;5492:45;5553:18;;;5546:34;;;5596:18;;;5589:34;;;5430:19;;4292:805:13;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4292:805:13;;-1:-1:-1;;4292:805:13;;;-1:-1:-1;;;;;;;5120:30:13;;;;;;:59;;;5174:5;-1:-1:-1;;;;;5154:25:13;:16;-1:-1:-1;;;;;5154:25:13;;5120:59;5112:86;;;;-1:-1:-1;;;5112:86:13;;5836:2:46;5112:86:13;;;5818:21:46;5875:2;5855:18;;;5848:30;-1:-1:-1;;;5894:18:46;;;5887:44;5948:18;;5112:86:13;5634:338:46;5112:86:13;-1:-1:-1;;;;;5213:27:13;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;5283:31;1342:25:46;;;5213:36:13;;5283:31;;;;;1315:18:46;5283:31:13;;;;;;;3838:1483;;;;;;;:::o;5510:446::-;5575:7;5672:95;5805:4;5789:22;;;;;;:::i;:::-;;;;;;;;;;5640:295;;;7503:25:46;;;;7544:18;;7537:34;;;;5833:14:13;7587:18:46;;;7580:34;5869:13:13;7630:18:46;;;7623:34;5912:4:13;7673:19:46;;;7666:61;7475:19;;5640:295:13;;;;;;;;;;;;5613:336;;;;;;5594:355;;5510:446;:::o;6150:325::-;6235:6;6220:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;6387:13:13;;;;;;:9;:13;;;;;;;;:23;;;;;;6436:32;1342:25:46;;;6436:32:13;;1315:18:46;6436:32:13;;;;;;;6150:325;;:::o;14:548:46:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:46;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:46:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;2082:186::-;2141:6;2194:2;2182:9;2173:7;2169:23;2165:32;2162:52;;;2210:1;2207;2200:12;2162:52;2233:29;2252:9;2233:29;:::i;:::-;2223:39;2082:186;-1:-1:-1;;;2082:186:46:o;2273:693::-;2384:6;2392;2400;2408;2416;2424;2432;2485:3;2473:9;2464:7;2460:23;2456:33;2453:53;;;2502:1;2499;2492:12;2453:53;2525:29;2544:9;2525:29;:::i;:::-;2515:39;;2573:38;2607:2;2596:9;2592:18;2573:38;:::i;:::-;2563:48;;2658:2;2647:9;2643:18;2630:32;2620:42;;2709:2;2698:9;2694:18;2681:32;2671:42;;2763:3;2752:9;2748:19;2735:33;2808:4;2801:5;2797:16;2790:5;2787:27;2777:55;;2828:1;2825;2818:12;2777:55;2273:693;;;;-1:-1:-1;2273:693:46;;;;2851:5;2903:3;2888:19;;2875:33;;-1:-1:-1;2955:3:46;2940:19;;;2927:33;;2273:693;-1:-1:-1;;2273:693:46:o;2971:260::-;3039:6;3047;3100:2;3088:9;3079:7;3075:23;3071:32;3068:52;;;3116:1;3113;3106:12;3068:52;3139:29;3158:9;3139:29;:::i;:::-;3129:39;;3187:38;3221:2;3210:9;3206:18;3187:38;:::i;:::-;3177:48;;2971:260;;;;;:::o;3236:380::-;3315:1;3311:12;;;;3358;;;3379:61;;3433:4;3425:6;3421:17;3411:27;;3379:61;3486:2;3478:6;3475:14;3455:18;3452:38;3449:161;;3532:10;3527:3;3523:20;3520:1;3513:31;3567:4;3564:1;3557:15;3595:4;3592:1;3585:15;3449:161;;3236:380;;;:::o;3621:127::-;3682:10;3677:3;3673:20;3670:1;3663:31;3713:4;3710:1;3703:15;3737:4;3734:1;3727:15;3753:128;3820:9;;;3841:11;;;3838:37;;;3855:18;;:::i;6106:1133::-;6236:3;6265:1;6298:6;6292:13;6328:3;6350:1;6378:9;6374:2;6370:18;6360:28;;6438:2;6427:9;6423:18;6460;6450:61;;6504:4;6496:6;6492:17;6482:27;;6450:61;6530:2;6578;6570:6;6567:14;6547:18;6544:38;6541:165;;-1:-1:-1;;;6605:33:46;;6661:4;6658:1;6651:15;6691:4;6612:3;6679:17;6541:165;6722:18;6749:133;;;;6896:1;6891:323;;;;6715:499;;6749:133;-1:-1:-1;;6782:24:46;;6770:37;;6855:14;;6848:22;6836:35;;6827:45;;;-1:-1:-1;6749:133:46;;6891:323;6053:1;6046:14;;;6090:4;6077:18;;6989:1;7003:165;7017:6;7014:1;7011:13;7003:165;;;7095:14;;7082:11;;;7075:35;7138:16;;;;7032:10;;7003:165;;;7007:3;;7197:6;7192:3;7188:16;7181:23;;6715:499;-1:-1:-1;7230:3:46;;6106:1133;-1:-1:-1;;;;;;;;6106:1133:46:o;7738:125::-;7803:9;;;7824:10;;;7821:36;;;7837:18;;:::i",
        "linkReferences": {},
        "immutableReferences": {
            "23768": [
                {
                    "start": 351,
                    "length": 32
                }
            ],
            "23782": [
                {
                    "start": 1101,
                    "length": 32
                }
            ],
            "23784": [
                {
                    "start": 1154,
                    "length": 32
                }
            ]
        }
    },
    "methodIdentifiers": {
        "DOMAIN_SEPARATOR()": "3644e515",
        "allowance(address,address)": "dd62ed3e",
        "approve(address,uint256)": "095ea7b3",
        "balanceOf(address)": "70a08231",
        "decimals()": "313ce567",
        "forceApprove(address,address,uint256)": "61f49ed6",
        "mint(address,uint256)": "40c10f19",
        "name()": "06fdde03",
        "nonces(address)": "7ecebe00",
        "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
        "symbol()": "95d89b41",
        "totalSupply()": "18160ddd",
        "transfer(address,uint256)": "a9059cbb",
        "transferFrom(address,address,uint256)": "23b872dd"
    },
    "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"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\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceApprove\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"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\":\"\",\"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\":\"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\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/util/mock/MockERC20.sol\":\"MockERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":ds-test/=lib/solmate/lib/ds-test/src/\",\":forge-gas-snapshot/=lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/permitpost/lib/openzeppelin-contracts/\",\":permitpost/=lib/permitpost/src/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"test/util/mock/MockERC20.sol\":{\"keccak256\":\"0x24fa8fbc7f9808ff57350f5d1db0ba36b0a0cfa307b9d6ebfde2a5569e1cf97b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://74b25454411858e25ffab76b02492a49144cead8f1f4a3b95e9046ef3b22d231\",\"dweb:/ipfs/QmPLsGijRDnfQRFgUTRKYKqybkum8AxzapzCfGRXBL4qsz\"]}},\"version\":1}",
    "metadata": {
        "compiler": {
            "version": "0.8.16+commit.07a7930e"
        },
        "language": "Solidity",
        "output": {
            "abi": [
                {
                    "inputs": [
                        {
                            "internalType": "string",
                            "name": "name",
                            "type": "string"
                        },
                        {
                            "internalType": "string",
                            "name": "symbol",
                            "type": "string"
                        },
                        {
                            "internalType": "uint8",
                            "name": "decimals",
                            "type": "uint8"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "constructor"
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "owner",
                            "type": "address",
                            "indexed": true
                        },
                        {
                            "internalType": "address",
                            "name": "spender",
                            "type": "address",
                            "indexed": true
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256",
                            "indexed": false
                        }
                    ],
                    "type": "event",
                    "name": "Approval",
                    "anonymous": false
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "from",
                            "type": "address",
                            "indexed": true
                        },
                        {
                            "internalType": "address",
                            "name": "to",
                            "type": "address",
                            "indexed": true
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256",
                            "indexed": false
                        }
                    ],
                    "type": "event",
                    "name": "Transfer",
                    "anonymous": false
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "DOMAIN_SEPARATOR",
                    "outputs": [
                        {
                            "internalType": "bytes32",
                            "name": "",
                            "type": "bytes32"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "",
                            "type": "address"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "allowance",
                    "outputs": [
                        {
                            "internalType": "uint256",
                            "name": "",
                            "type": "uint256"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "spender",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "approve",
                    "outputs": [
                        {
                            "internalType": "bool",
                            "name": "",
                            "type": "bool"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "",
                            "type": "address"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "balanceOf",
                    "outputs": [
                        {
                            "internalType": "uint256",
                            "name": "",
                            "type": "uint256"
                        }
                    ]
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "decimals",
                    "outputs": [
                        {
                            "internalType": "uint8",
                            "name": "",
                            "type": "uint8"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "_from",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "_to",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "_amount",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "forceApprove",
                    "outputs": [
                        {
                            "internalType": "bool",
                            "name": "",
                            "type": "bool"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "_to",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "_amount",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "mint"
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "name",
                    "outputs": [
                        {
                            "internalType": "string",
                            "name": "",
                            "type": "string"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "",
                            "type": "address"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "nonces",
                    "outputs": [
                        {
                            "internalType": "uint256",
                            "name": "",
                            "type": "uint256"
                        }
                    ]
                },
                {
                    "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"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "permit"
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "symbol",
                    "outputs": [
                        {
                            "internalType": "string",
                            "name": "",
                            "type": "string"
                        }
                    ]
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "totalSupply",
                    "outputs": [
                        {
                            "internalType": "uint256",
                            "name": "",
                            "type": "uint256"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "to",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "transfer",
                    "outputs": [
                        {
                            "internalType": "bool",
                            "name": "",
                            "type": "bool"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "from",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "to",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "transferFrom",
                    "outputs": [
                        {
                            "internalType": "bool",
                            "name": "",
                            "type": "bool"
                        }
                    ]
                }
            ],
            "devdoc": {
                "kind": "dev",
                "methods": {},
                "version": 1
            },
            "userdoc": {
                "kind": "user",
                "methods": {},
                "version": 1
            }
        },
        "settings": {
            "remappings": [
                ":ds-test/=lib/solmate/lib/ds-test/src/",
                ":forge-gas-snapshot/=lib/forge-gas-snapshot/src/",
                ":forge-std/=lib/forge-std/src/",
                ":openzeppelin-contracts/=lib/permitpost/lib/openzeppelin-contracts/",
                ":permitpost/=lib/permitpost/src/",
                ":solmate/=lib/solmate/src/"
            ],
            "optimizer": {
                "enabled": true,
                "runs": 200
            },
            "metadata": {
                "bytecodeHash": "ipfs"
            },
            "compilationTarget": {
                "test/util/mock/MockERC20.sol": "MockERC20"
            },
            "libraries": {}
        },
        "sources": {
            "lib/solmate/src/tokens/ERC20.sol": {
                "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10",
                "urls": [
                    "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35",
                    "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97"
                ],
                "license": "AGPL-3.0-only"
            },
            "test/util/mock/MockERC20.sol": {
                "keccak256": "0x24fa8fbc7f9808ff57350f5d1db0ba36b0a0cfa307b9d6ebfde2a5569e1cf97b",
                "urls": [
                    "bzz-raw://74b25454411858e25ffab76b02492a49144cead8f1f4a3b95e9046ef3b22d231",
                    "dweb:/ipfs/QmPLsGijRDnfQRFgUTRKYKqybkum8AxzapzCfGRXBL4qsz"
                ],
                "license": "GPL-2.0-or-later"
            }
        },
        "version": 1
    },
    "ast": {
        "absolutePath": "test/util/mock/MockERC20.sol",
        "id": 32252,
        "exportedSymbols": {
            "ERC20": [
                24131
            ],
            "MockERC20": [
                32251
            ]
        },
        "nodeType": "SourceUnit",
        "src": "45:516:41",
        "nodes": [
            {
                "id": 32190,
                "nodeType": "PragmaDirective",
                "src": "45:23:41",
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ]
            },
            {
                "id": 32192,
                "nodeType": "ImportDirective",
                "src": "70:47:41",
                "absolutePath": "lib/solmate/src/tokens/ERC20.sol",
                "file": "solmate/tokens/ERC20.sol",
                "nameLocation": "-1:-1:-1",
                "scope": 32252,
                "sourceUnit": 24132,
                "symbolAliases": [
                    {
                        "foreign": {
                            "id": 32191,
                            "name": "ERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24131,
                            "src": "78:5:41",
                            "typeDescriptions": {}
                        },
                        "nameLocation": "-1:-1:-1"
                    }
                ],
                "unitAlias": ""
            },
            {
                "id": 32251,
                "nodeType": "ContractDefinition",
                "src": "119:441:41",
                "nodes": [
                    {
                        "id": 32209,
                        "nodeType": "FunctionDefinition",
                        "src": "153:102:41",
                        "body": {
                            "id": 32208,
                            "nodeType": "Block",
                            "src": "253:2:41",
                            "statements": []
                        },
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 32203,
                                        "name": "name",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 32196,
                                        "src": "229:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    {
                                        "id": 32204,
                                        "name": "symbol",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 32198,
                                        "src": "235:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    {
                                        "id": 32205,
                                        "name": "decimals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 32200,
                                        "src": "243:8:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    }
                                ],
                                "id": 32206,
                                "kind": "baseConstructorSpecifier",
                                "modifierName": {
                                    "id": 32202,
                                    "name": "ERC20",
                                    "nameLocations": [
                                        "223:5:41"
                                    ],
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 24131,
                                    "src": "223:5:41"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "223:29:41"
                            }
                        ],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "parameters": {
                            "id": 32201,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 32196,
                                    "mutability": "mutable",
                                    "name": "name",
                                    "nameLocation": "179:4:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 32209,
                                    "src": "165:18:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 32195,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "165:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 32198,
                                    "mutability": "mutable",
                                    "name": "symbol",
                                    "nameLocation": "199:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 32209,
                                    "src": "185:20:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 32197,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "185:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 32200,
                                    "mutability": "mutable",
                                    "name": "decimals",
                                    "nameLocation": "213:8:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 32209,
                                    "src": "207:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    },
                                    "typeName": {
                                        "id": 32199,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "207:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "164:58:41"
                        },
                        "returnParameters": {
                            "id": 32207,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "253:0:41"
                        },
                        "scope": 32251,
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "id": 32222,
                        "nodeType": "FunctionDefinition",
                        "src": "261:87:41",
                        "body": {
                            "id": 32221,
                            "nodeType": "Block",
                            "src": "312:36:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 32217,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 32211,
                                                "src": "328:3:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 32218,
                                                "name": "_amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 32213,
                                                "src": "333:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 32216,
                                            "name": "_mint",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 24102,
                                            "src": "322:5:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 32219,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "322:19:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 32220,
                                    "nodeType": "ExpressionStatement",
                                    "src": "322:19:41"
                                }
                            ]
                        },
                        "functionSelector": "40c10f19",
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "mint",
                        "nameLocation": "270:4:41",
                        "parameters": {
                            "id": 32214,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 32211,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nameLocation": "283:3:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 32222,
                                    "src": "275:11:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 32210,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "275:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 32213,
                                    "mutability": "mutable",
                                    "name": "_amount",
                                    "nameLocation": "296:7:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 32222,
                                    "src": "288:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 32212,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "288:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "274:30:41"
                        },
                        "returnParameters": {
                            "id": 32215,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "312:0:41"
                        },
                        "scope": 32251,
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "id": 32250,
                        "nodeType": "FunctionDefinition",
                        "src": "354:204:41",
                        "body": {
                            "id": 32249,
                            "nodeType": "Block",
                            "src": "443:115:41",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 32239,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "baseExpression": {
                                                    "id": 32233,
                                                    "name": "allowance",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 23780,
                                                    "src": "453:9:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                        "typeString": "mapping(address => mapping(address => uint256))"
                                                    }
                                                },
                                                "id": 32236,
                                                "indexExpression": {
                                                    "id": 32234,
                                                    "name": "_from",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 32224,
                                                    "src": "463:5:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "453:16:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 32237,
                                            "indexExpression": {
                                                "id": 32235,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 32226,
                                                "src": "470:3:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "453:21:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 32238,
                                            "name": "_amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 32228,
                                            "src": "477:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "453:31:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 32240,
                                    "nodeType": "ExpressionStatement",
                                    "src": "453:31:41"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 32242,
                                                "name": "_from",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 32224,
                                                "src": "509:5:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 32243,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 32226,
                                                "src": "516:3:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 32244,
                                                "name": "_amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 32228,
                                                "src": "521:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 32241,
                                            "name": "Approval",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 23762,
                                            "src": "500:8:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 32245,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "500:29:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 32246,
                                    "nodeType": "EmitStatement",
                                    "src": "495:34:41"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 32247,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "547:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 32232,
                                    "id": 32248,
                                    "nodeType": "Return",
                                    "src": "540:11:41"
                                }
                            ]
                        },
                        "functionSelector": "61f49ed6",
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "forceApprove",
                        "nameLocation": "363:12:41",
                        "parameters": {
                            "id": 32229,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 32224,
                                    "mutability": "mutable",
                                    "name": "_from",
                                    "nameLocation": "384:5:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 32250,
                                    "src": "376:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 32223,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "376:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 32226,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nameLocation": "399:3:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 32250,
                                    "src": "391:11:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 32225,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "391:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 32228,
                                    "mutability": "mutable",
                                    "name": "_amount",
                                    "nameLocation": "412:7:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 32250,
                                    "src": "404:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 32227,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "404:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "375:45:41"
                        },
                        "returnParameters": {
                            "id": 32232,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 32231,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 32250,
                                    "src": "437:4:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 32230,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "437:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "436:6:41"
                        },
                        "scope": 32251,
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 32193,
                            "name": "ERC20",
                            "nameLocations": [
                                "141:5:41"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 24131,
                            "src": "141:5:41"
                        },
                        "id": 32194,
                        "nodeType": "InheritanceSpecifier",
                        "src": "141:5:41"
                    }
                ],
                "canonicalName": "MockERC20",
                "contractDependencies": [],
                "contractKind": "contract",
                "fullyImplemented": true,
                "linearizedBaseContracts": [
                    32251,
                    24131
                ],
                "name": "MockERC20",
                "nameLocation": "128:9:41",
                "scope": 32252,
                "usedErrors": []
            }
        ],
        "license": "GPL-2.0-or-later"
    },
    "id": 41
}
