{"version":3,"file":"index.modern.mjs","sources":["../node_modules/@account-abstraction/contracts/dist/types/factories/BaseAccount__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/BasePaymaster__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/BrokenBLSAccount__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/BrokenBLSAccountFactory__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/DepositPaymaster__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/EntryPoint__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/IAccount__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/IAggregator__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/IEntryPoint__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/INonceManager__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/IPaymaster__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/IStakeManager__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/MaliciousAccount__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/NonceManager__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/SenderCreator__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/SimpleAccount__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/SimpleAccountFactory__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/StakeManager__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/TokenCallbackHandler__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/TokenPaymaster__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/VerifyingPaymaster__factory.js","../node_modules/@account-abstraction/contracts/dist/types/factories/index.js","../node_modules/@account-abstraction/contracts/dist/types/index.js","../node_modules/@account-abstraction/contracts/dist/index.js","../src/contracts/factories/Kernel__factory.ts","../src/contracts/factories/KernelFactory__factory.ts","../src/contracts/factories/ECDSAValidator__factory.ts","../src/contracts/factories/KernelStorage__factory.ts","../src/constants.ts","../src/api/index.ts","../src/modules/aa-client/index.ts","../src/modules/aa-telegram-client/index.ts","../src/AA0xGaslessTG.ts","../src/index.ts"],"sourcesContent":["\"use strict\";\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nexports.__esModule = true;\nexports.BaseAccount__factory = void 0;\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [],\n        name: \"entryPoint\",\n        outputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getNonce\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"missingAccountFunds\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validateUserOp\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar BaseAccount__factory = /** @class */ (function () {\n    function BaseAccount__factory() {\n    }\n    BaseAccount__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    BaseAccount__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    BaseAccount__factory.abi = _abi;\n    return BaseAccount__factory;\n}());\nexports.BaseAccount__factory = BaseAccount__factory;\n","\"use strict\";\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nexports.__esModule = true;\nexports.BasePaymaster__factory = void 0;\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"previousOwner\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"newOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"OwnershipTransferred\",\n        type: \"event\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint32\",\n                name: \"unstakeDelaySec\",\n                type: \"uint32\"\n            },\n        ],\n        name: \"addStake\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"deposit\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"entryPoint\",\n        outputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getDeposit\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"owner\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"enum IPaymaster.PostOpMode\",\n                name: \"mode\",\n                type: \"uint8\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"actualGasCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"postOp\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"renounceOwnership\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"newOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"transferOwnership\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"unlockStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"maxCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validatePaymasterUserOp\",\n        outputs: [\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n        ],\n        name: \"withdrawStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar BasePaymaster__factory = /** @class */ (function () {\n    function BasePaymaster__factory() {\n    }\n    BasePaymaster__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    BasePaymaster__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    BasePaymaster__factory.abi = _abi;\n    return BasePaymaster__factory;\n}());\nexports.BasePaymaster__factory = BasePaymaster__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.BrokenBLSAccount__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"anEntryPoint\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"anAggregator\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"constructor\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"previousAdmin\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"newAdmin\",\n                type: \"address\"\n            },\n        ],\n        name: \"AdminChanged\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"beacon\",\n                type: \"address\"\n            },\n        ],\n        name: \"BeaconUpgraded\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: false,\n                internalType: \"uint8\",\n                name: \"version\",\n                type: \"uint8\"\n            },\n        ],\n        name: \"Initialized\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: false,\n                internalType: \"uint256[4]\",\n                name: \"oldPublicKey\",\n                type: \"uint256[4]\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256[4]\",\n                name: \"newPublicKey\",\n                type: \"uint256[4]\"\n            },\n        ],\n        name: \"PublicKeyChanged\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"contract IEntryPoint\",\n                name: \"entryPoint\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"owner\",\n                type: \"address\"\n            },\n        ],\n        name: \"SimpleAccountInitialized\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"implementation\",\n                type: \"address\"\n            },\n        ],\n        name: \"Upgraded\",\n        type: \"event\"\n    },\n    {\n        inputs: [],\n        name: \"addDeposit\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"aggregator\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"entryPoint\",\n        outputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"dest\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"func\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"execute\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address[]\",\n                name: \"dest\",\n                type: \"address[]\"\n            },\n            {\n                internalType: \"bytes[]\",\n                name: \"func\",\n                type: \"bytes[]\"\n            },\n        ],\n        name: \"executeBatch\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getBlsPublicKey\",\n        outputs: [\n            {\n                internalType: \"uint256[4]\",\n                name: \"\",\n                type: \"uint256[4]\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getDeposit\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getNonce\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"anOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"initialize\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint256[4]\",\n                name: \"aPublicKey\",\n                type: \"uint256[4]\"\n            },\n        ],\n        name: \"initialize\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256[]\",\n                name: \"\",\n                type: \"uint256[]\"\n            },\n            {\n                internalType: \"uint256[]\",\n                name: \"\",\n                type: \"uint256[]\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"onERC1155BatchReceived\",\n        outputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"\",\n                type: \"bytes4\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"onERC1155Received\",\n        outputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"\",\n                type: \"bytes4\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"onERC721Received\",\n        outputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"\",\n                type: \"bytes4\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"owner\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"proxiableUUID\",\n        outputs: [\n            {\n                internalType: \"bytes32\",\n                name: \"\",\n                type: \"bytes32\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"interfaceId\",\n                type: \"bytes4\"\n            },\n        ],\n        name: \"supportsInterface\",\n        outputs: [\n            {\n                internalType: \"bool\",\n                name: \"\",\n                type: \"bool\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"tokensReceived\",\n        outputs: [],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"newImplementation\",\n                type: \"address\"\n            },\n        ],\n        name: \"upgradeTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"newImplementation\",\n                type: \"address\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"upgradeToAndCall\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"missingAccountFunds\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validateUserOp\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawDepositTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        stateMutability: \"payable\",\n        type: \"receive\"\n    },\n];\nvar _bytecode = \"0x60e0604052306080523480156200001557600080fd5b50604051620025443803806200254483398101604081905262000038916200013f565b6001600160a01b03821660a052816200005062000064565b506001600160a01b031660c052506200017e565b600054610100900460ff1615620000d15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000124576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013c57600080fd5b50565b600080604083850312156200015357600080fd5b8251620001608162000126565b6020840151909250620001738162000126565b809150509250929050565b60805160a05160c051612342620002026000396000818161027d015261093c0152600081816103a40152818161097f01528181610a2601528181610e4a0152818161109b01528181611225015281816115770152611750015260008181610722015281816107d201528181610aea01528181610b9a0152610ce301526123426000f3fe60806040526004361061016d5760003560e01c806352d1902d116100cb578063c399ec881161007f578063e02afbae11610059578063e02afbae1461047a578063ee472f361461049c578063f23a6e61146104bc57600080fd5b8063c399ec8814610430578063c4d66de814610445578063d087d2881461046557600080fd5b8063b0d691fe116100b0578063b0d691fe14610395578063b61d27f6146103c8578063bc197c81146103e857600080fd5b806352d1902d1461034d5780638da5cb5b1461036257600080fd5b80633659cfe6116101225780634a58db19116101075780634a58db19146103125780634d44560d1461031a5780634f1ef2861461033a57600080fd5b80633659cfe6146102c45780633a871cdd146102e457600080fd5b8063150b7a0211610153578063150b7a02146101d557806318dfb3c71461024b578063245a7bfc1461026b57600080fd5b806223de291461017957806301ffc9a7146101a057600080fd5b3661017457005b600080fd5b34801561018557600080fd5b5061019e610194366004611b2f565b5050505050505050565b005b3480156101ac57600080fd5b506101c06101bb366004611be0565b610502565b60405190151581526020015b60405180910390f35b3480156101e157600080fd5b5061021a6101f0366004611c22565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101cc565b34801561025757600080fd5b5061019e610266366004611cda565b6105e7565b34801561027757600080fd5b5061029f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cc565b3480156102d057600080fd5b5061019e6102df366004611d46565b61070b565b3480156102f057600080fd5b506103046102ff366004611d63565b610910565b6040519081526020016101cc565b61019e61097d565b34801561032657600080fd5b5061019e610335366004611db7565b610a1c565b61019e610348366004611e61565b610ad3565b34801561035957600080fd5b50610304610cc9565b34801561036e57600080fd5b5060005461029f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061029f565b3480156103d457600080fd5b5061019e6103e3366004611f27565b610db5565b3480156103f457600080fd5b5061021a610403366004611f77565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b34801561043c57600080fd5b50610304610e04565b34801561045157600080fd5b5061019e610460366004611d46565b610ebb565b34801561047157600080fd5b5061030461104e565b34801561048657600080fd5b5061048f6110ca565b6040516101cc9190612015565b3480156104a857600080fd5b5061019e6104b7366004612046565b6110df565b3480156104c857600080fd5b5061021a6104d73660046120c4565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000148061059557507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806105e157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6105ef61120d565b82811461065d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206172726179206c656e677468730000000000000000000000000060448201526064015b60405180910390fd5b60005b83811015610704576106f285858381811061067d5761067d612140565b90506020020160208101906106929190611d46565b60008585858181106106a6576106a6612140565b90506020028101906106b8919061216f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d692505050565b806106fc816121d4565b915050610660565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036107d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610654565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610654565b6108f181611353565b6040805160008082526020820190925261090d9183919061135b565b50565b600061091a61155f565b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168082526000602083018190529190920152610976826115fe565b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff919091169063b760faf99034906024016000604051808303818588803b158015610a0857600080fd5b505af1158015610704573d6000803e3d6000fd5b610a24611669565b7f00000000000000000000000000000000000000000000000000000000000000006040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b158015610ab757600080fd5b505af1158015610acb573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610654565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c0d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610654565b610cb982611353565b610cc58282600161135b565b5050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610654565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610dbd61120d565b610dfe848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d692505050565b50505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015610e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb69190612233565b905090565b600054610100900460ff1615808015610edb5750600054600160ff909116105b80610ef55750303b158015610ef5575060005460ff166001145b610f81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610654565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610fdf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610fe8826116fa565b8015610cc557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6040517f35567e1a0000000000000000000000000000000000000000000000000000000081523060048201526000602482018190529073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906335567e1a90604401610e75565b6110d2611aa6565b6110da611aa6565b919050565b600054610100900460ff16158080156110ff5750600054600160ff909116105b806111195750303b158015611119575060005460ff166001145b6111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610654565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561120357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610fe860006116fa565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061126e575060005462010000900473ffffffffffffffffffffffffffffffffffffffff1633145b6112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e746044820152606401610654565b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516112ff9190612278565b60006040518083038185875af1925050503d806000811461133c576040519150601f19603f3d011682016040523d82523d6000602084013e611341565b606091505b50915091508161070457805160208201fd5b61090d611669565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156113935761138e83611799565b505050565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611418575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261141591810190612233565b60015b6114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610654565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610654565b5061138e8383836118a3565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610654565b801561090d5760405160009033907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90849084818181858888f193505050503d8060008114610704576040519150601f19603f3d011682016040523d82523d6000602084013e610704565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633148061169457503330145b6112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e6572000000000000000000000000000000000000000000006044820152606401610654565b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8481168202929092178084556040519190048216927f0000000000000000000000000000000000000000000000000000000000000000909216917f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de91a350565b73ffffffffffffffffffffffffffffffffffffffff81163b61183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610654565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6118ac836118c8565b6000825111806118b95750805b1561138e57610dfe8383611915565b6118d181611799565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061097683836040518060600160405280602781526020016122e66027913960606000808573ffffffffffffffffffffffffffffffffffffffff168560405161195f9190612278565b600060405180830381855af49150503d806000811461199a576040519150601f19603f3d011682016040523d82523d6000602084013e61199f565b606091505b50915091506119b0868383876119ba565b9695505050505050565b60608315611a50578251600003611a495773ffffffffffffffffffffffffffffffffffffffff85163b611a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610654565b5081611a5a565b611a5a8383611a62565b949350505050565b815115611a725781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106549190612294565b60405180608001604052806004906020820280368337509192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461090d57600080fd5b60008083601f840112611af857600080fd5b50813567ffffffffffffffff811115611b1057600080fd5b602083019150836020828501011115611b2857600080fd5b9250929050565b60008060008060008060008060c0898b031215611b4b57600080fd5b8835611b5681611ac4565b97506020890135611b6681611ac4565b96506040890135611b7681611ac4565b955060608901359450608089013567ffffffffffffffff80821115611b9a57600080fd5b611ba68c838d01611ae6565b909650945060a08b0135915080821115611bbf57600080fd5b50611bcc8b828c01611ae6565b999c989b5096995094979396929594505050565b600060208284031215611bf257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461097657600080fd5b600080600080600060808688031215611c3a57600080fd5b8535611c4581611ac4565b94506020860135611c5581611ac4565b935060408601359250606086013567ffffffffffffffff811115611c7857600080fd5b611c8488828901611ae6565b969995985093965092949392505050565b60008083601f840112611ca757600080fd5b50813567ffffffffffffffff811115611cbf57600080fd5b6020830191508360208260051b8501011115611b2857600080fd5b60008060008060408587031215611cf057600080fd5b843567ffffffffffffffff80821115611d0857600080fd5b611d1488838901611c95565b90965094506020870135915080821115611d2d57600080fd5b50611d3a87828801611c95565b95989497509550505050565b600060208284031215611d5857600080fd5b813561097681611ac4565b600080600060608486031215611d7857600080fd5b833567ffffffffffffffff811115611d8f57600080fd5b84016101608187031215611da257600080fd5b95602085013595506040909401359392505050565b60008060408385031215611dca57600080fd5b8235611dd581611ac4565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611e5957611e59611de3565b604052919050565b60008060408385031215611e7457600080fd5b8235611e7f81611ac4565b915060208381013567ffffffffffffffff80821115611e9d57600080fd5b818601915086601f830112611eb157600080fd5b813581811115611ec357611ec3611de3565b611ef3847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611e12565b91508082528784828501011115611f0957600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060008060608587031215611f3d57600080fd5b8435611f4881611ac4565b935060208501359250604085013567ffffffffffffffff811115611f6b57600080fd5b611d3a87828801611ae6565b60008060008060008060008060a0898b031215611f9357600080fd5b8835611f9e81611ac4565b97506020890135611fae81611ac4565b9650604089013567ffffffffffffffff80821115611fcb57600080fd5b611fd78c838d01611c95565b909850965060608b0135915080821115611ff057600080fd5b611ffc8c838d01611c95565b909650945060808b0135915080821115611bbf57600080fd5b60808101818360005b600481101561203d57815183526020928301929091019060010161201e565b50505092915050565b60006080828403121561205857600080fd5b82601f83011261206757600080fd5b6040516080810181811067ffffffffffffffff8211171561208a5761208a611de3565b60405280608084018581111561209f57600080fd5b845b818110156120b95780358352602092830192016120a1565b509195945050505050565b60008060008060008060a087890312156120dd57600080fd5b86356120e881611ac4565b955060208701356120f881611ac4565b94506040870135935060608701359250608087013567ffffffffffffffff81111561212257600080fd5b61212e89828a01611ae6565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126121a457600080fd5b83018035915067ffffffffffffffff8211156121bf57600080fd5b602001915036819003821315611b2857600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361222c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60006020828403121561224557600080fd5b5051919050565b60005b8381101561226757818101518382015260200161224f565b83811115610dfe5750506000910152565b6000825161228a81846020870161224c565b9190910192915050565b60208152600082518060208401526122b381604085016020870161224c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201a293015a642c45bbac015e9c06168162e317c3fdc29a9fc336b746bdf2169a364736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar BrokenBLSAccount__factory = /** @class */ (function (_super) {\n    __extends(BrokenBLSAccount__factory, _super);\n    function BrokenBLSAccount__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    BrokenBLSAccount__factory.prototype.deploy = function (anEntryPoint, anAggregator, overrides) {\n        return _super.prototype.deploy.call(this, anEntryPoint, anAggregator, overrides || {});\n    };\n    BrokenBLSAccount__factory.prototype.getDeployTransaction = function (anEntryPoint, anAggregator, overrides) {\n        return _super.prototype.getDeployTransaction.call(this, anEntryPoint, anAggregator, overrides || {});\n    };\n    BrokenBLSAccount__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    BrokenBLSAccount__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    BrokenBLSAccount__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    BrokenBLSAccount__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    BrokenBLSAccount__factory.bytecode = _bytecode;\n    BrokenBLSAccount__factory.abi = _abi;\n    return BrokenBLSAccount__factory;\n}(ethers_1.ContractFactory));\nexports.BrokenBLSAccount__factory = BrokenBLSAccount__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.BrokenBLSAccountFactory__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"entryPoint\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"aggregator\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"constructor\"\n    },\n    {\n        inputs: [],\n        name: \"accountImplementation\",\n        outputs: [\n            {\n                internalType: \"contract BrokenBLSAccount\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint256\",\n                name: \"salt\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint256[4]\",\n                name: \"aPublicKey\",\n                type: \"uint256[4]\"\n            },\n        ],\n        name: \"createAccount\",\n        outputs: [\n            {\n                internalType: \"contract BrokenBLSAccount\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint256\",\n                name: \"salt\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint256[4]\",\n                name: \"aPublicKey\",\n                type: \"uint256[4]\"\n            },\n        ],\n        name: \"getAddress\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n];\nvar _bytecode = \"0x60a060405234801561001057600080fd5b5060405161335c38038061335c83398101604081905261002f916100aa565b818160405161003d90610085565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610070573d6000803e3d6000fd5b506001600160a01b0316608052506100e49050565b61254480610e1883390190565b6001600160a01b03811681146100a757600080fd5b50565b600080604083850312156100bd57600080fd5b82516100c881610092565b60208401519092506100d981610092565b809150509250929050565b608051610d0d61010b60003960008181604b0152818160f7015261020d0152610d0d6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806311464fbe1461004657806319c2a1b214610096578063de3398dd146100a9575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100a436600461038e565b6100bc565b61006d6100b736600461038e565b6101de565b6000806100c984846101de565b905073ffffffffffffffffffffffffffffffffffffffff81163b80156100f1575090506101d8565b8460001b7f0000000000000000000000000000000000000000000000000000000000000000856040516024016101279190610418565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fee472f3600000000000000000000000000000000000000000000000000000000179052516101a790610352565b6101b2929190610479565b8190604051809103906000f59050801580156101d2573d6000803e3d6000fd5b50925050505b92915050565b60006103198360001b604051806020016101f790610352565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008560405160240161023d9190610418565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fee472f360000000000000000000000000000000000000000000000000000000017905290516102c293929101610479565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526102fe92916020016104e7565b60405160208183030381529060405280519060200120610320565b9392505050565b60006103198383306000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6107c18061051783390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060a083850312156103a157600080fd5b82359150602084603f8501126103b657600080fd5b6040516080810181811067ffffffffffffffff821117156103d9576103d961035f565b6040528060a08601878111156103ee57600080fd5b8387015b8181101561040957803583529184019184016103f2565b50505080925050509250929050565b60808101818360005b6004811015610440578151835260209283019290910190600101610421565b50505092915050565b60005b8381101561046457818101518382015260200161044c565b83811115610473576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600082518060408401526104b4816060850160208701610449565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b600083516104f9818460208801610449565b83519083019061050d818360208801610449565b0194935050505056fe60806040526040516107c13803806107c183398101604081905261002291610321565b61002e82826000610035565b505061043e565b61003e8361006b565b60008251118061004b5750805b156100665761006483836100ab60201b6100291760201c565b505b505050565b610074816100d7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100d0838360405180606001604052806027815260200161079a602791396101a9565b9392505050565b6100ea8161022260201b6100551760201c565b6101515760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61023160201b6100711760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101c691906103ef565b600060405180830381855af49150503d8060008114610201576040519150601f19603f3d011682016040523d82523d6000602084013e610206565b606091505b50909250905061021886838387610234565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102a357825160000361029c576001600160a01b0385163b61029c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610148565b50816102ad565b6102ad83836102b5565b949350505050565b8151156102c55781518083602001fd5b8060405162461bcd60e51b8152600401610148919061040b565b634e487b7160e01b600052604160045260246000fd5b60005b838110156103105781810151838201526020016102f8565b838111156100645750506000910152565b6000806040838503121561033457600080fd5b82516001600160a01b038116811461034b57600080fd5b60208401519092506001600160401b038082111561036857600080fd5b818501915085601f83011261037c57600080fd5b81518181111561038e5761038e6102df565b604051601f8201601f19908116603f011681019083821181831017156103b6576103b66102df565b816040528281528860208487010111156103cf57600080fd5b6103e08360208301602088016102f5565b80955050505050509250929050565b600082516104018184602087016102f5565b9190910192915050565b602081526000825180602084015261042a8160408501602087016102f5565b601f01601f19169190910160400192915050565b61034d8061044d6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102f1602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516101079190610283565b600060405180830381855af49150503d8060008114610142576040519150601f19603f3d011682016040523d82523d6000602084013e610147565b606091505b509150915061015886838387610162565b9695505050505050565b606083156101fd5782516000036101f65773ffffffffffffffffffffffffffffffffffffffff85163b6101f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610207565b610207838361020f565b949350505050565b81511561021f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed919061029f565b60005b8381101561026e578181015183820152602001610256565b8381111561027d576000848401525b50505050565b60008251610295818460208701610253565b9190910192915050565b60208152600082518060208401526102be816040850160208701610253565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201cd78ab6a31213989661cff2d7d05fc9b9c38b1a848e8249e2e398659a9eb7e364736f6c634300080f0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a86e6be53640933088be7e21e85c3fe3b4f63138c592ce7d2cb1ead6278bd5d664736f6c634300080f003360e0604052306080523480156200001557600080fd5b50604051620025443803806200254483398101604081905262000038916200013f565b6001600160a01b03821660a052816200005062000064565b506001600160a01b031660c052506200017e565b600054610100900460ff1615620000d15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000124576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013c57600080fd5b50565b600080604083850312156200015357600080fd5b8251620001608162000126565b6020840151909250620001738162000126565b809150509250929050565b60805160a05160c051612342620002026000396000818161027d015261093c0152600081816103a40152818161097f01528181610a2601528181610e4a0152818161109b01528181611225015281816115770152611750015260008181610722015281816107d201528181610aea01528181610b9a0152610ce301526123426000f3fe60806040526004361061016d5760003560e01c806352d1902d116100cb578063c399ec881161007f578063e02afbae11610059578063e02afbae1461047a578063ee472f361461049c578063f23a6e61146104bc57600080fd5b8063c399ec8814610430578063c4d66de814610445578063d087d2881461046557600080fd5b8063b0d691fe116100b0578063b0d691fe14610395578063b61d27f6146103c8578063bc197c81146103e857600080fd5b806352d1902d1461034d5780638da5cb5b1461036257600080fd5b80633659cfe6116101225780634a58db19116101075780634a58db19146103125780634d44560d1461031a5780634f1ef2861461033a57600080fd5b80633659cfe6146102c45780633a871cdd146102e457600080fd5b8063150b7a0211610153578063150b7a02146101d557806318dfb3c71461024b578063245a7bfc1461026b57600080fd5b806223de291461017957806301ffc9a7146101a057600080fd5b3661017457005b600080fd5b34801561018557600080fd5b5061019e610194366004611b2f565b5050505050505050565b005b3480156101ac57600080fd5b506101c06101bb366004611be0565b610502565b60405190151581526020015b60405180910390f35b3480156101e157600080fd5b5061021a6101f0366004611c22565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101cc565b34801561025757600080fd5b5061019e610266366004611cda565b6105e7565b34801561027757600080fd5b5061029f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cc565b3480156102d057600080fd5b5061019e6102df366004611d46565b61070b565b3480156102f057600080fd5b506103046102ff366004611d63565b610910565b6040519081526020016101cc565b61019e61097d565b34801561032657600080fd5b5061019e610335366004611db7565b610a1c565b61019e610348366004611e61565b610ad3565b34801561035957600080fd5b50610304610cc9565b34801561036e57600080fd5b5060005461029f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061029f565b3480156103d457600080fd5b5061019e6103e3366004611f27565b610db5565b3480156103f457600080fd5b5061021a610403366004611f77565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b34801561043c57600080fd5b50610304610e04565b34801561045157600080fd5b5061019e610460366004611d46565b610ebb565b34801561047157600080fd5b5061030461104e565b34801561048657600080fd5b5061048f6110ca565b6040516101cc9190612015565b3480156104a857600080fd5b5061019e6104b7366004612046565b6110df565b3480156104c857600080fd5b5061021a6104d73660046120c4565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000148061059557507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806105e157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6105ef61120d565b82811461065d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206172726179206c656e677468730000000000000000000000000060448201526064015b60405180910390fd5b60005b83811015610704576106f285858381811061067d5761067d612140565b90506020020160208101906106929190611d46565b60008585858181106106a6576106a6612140565b90506020028101906106b8919061216f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d692505050565b806106fc816121d4565b915050610660565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036107d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610654565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610654565b6108f181611353565b6040805160008082526020820190925261090d9183919061135b565b50565b600061091a61155f565b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168082526000602083018190529190920152610976826115fe565b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff919091169063b760faf99034906024016000604051808303818588803b158015610a0857600080fd5b505af1158015610704573d6000803e3d6000fd5b610a24611669565b7f00000000000000000000000000000000000000000000000000000000000000006040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b158015610ab757600080fd5b505af1158015610acb573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610654565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c0d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610654565b610cb982611353565b610cc58282600161135b565b5050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610654565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610dbd61120d565b610dfe848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d692505050565b50505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015610e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb69190612233565b905090565b600054610100900460ff1615808015610edb5750600054600160ff909116105b80610ef55750303b158015610ef5575060005460ff166001145b610f81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610654565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610fdf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610fe8826116fa565b8015610cc557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6040517f35567e1a0000000000000000000000000000000000000000000000000000000081523060048201526000602482018190529073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906335567e1a90604401610e75565b6110d2611aa6565b6110da611aa6565b919050565b600054610100900460ff16158080156110ff5750600054600160ff909116105b806111195750303b158015611119575060005460ff166001145b6111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610654565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561120357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610fe860006116fa565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061126e575060005462010000900473ffffffffffffffffffffffffffffffffffffffff1633145b6112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e746044820152606401610654565b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516112ff9190612278565b60006040518083038185875af1925050503d806000811461133c576040519150601f19603f3d011682016040523d82523d6000602084013e611341565b606091505b50915091508161070457805160208201fd5b61090d611669565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156113935761138e83611799565b505050565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611418575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261141591810190612233565b60015b6114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610654565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610654565b5061138e8383836118a3565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610654565b801561090d5760405160009033907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90849084818181858888f193505050503d8060008114610704576040519150601f19603f3d011682016040523d82523d6000602084013e610704565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633148061169457503330145b6112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e6572000000000000000000000000000000000000000000006044820152606401610654565b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8481168202929092178084556040519190048216927f0000000000000000000000000000000000000000000000000000000000000000909216917f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de91a350565b73ffffffffffffffffffffffffffffffffffffffff81163b61183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610654565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6118ac836118c8565b6000825111806118b95750805b1561138e57610dfe8383611915565b6118d181611799565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061097683836040518060600160405280602781526020016122e66027913960606000808573ffffffffffffffffffffffffffffffffffffffff168560405161195f9190612278565b600060405180830381855af49150503d806000811461199a576040519150601f19603f3d011682016040523d82523d6000602084013e61199f565b606091505b50915091506119b0868383876119ba565b9695505050505050565b60608315611a50578251600003611a495773ffffffffffffffffffffffffffffffffffffffff85163b611a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610654565b5081611a5a565b611a5a8383611a62565b949350505050565b815115611a725781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106549190612294565b60405180608001604052806004906020820280368337509192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461090d57600080fd5b60008083601f840112611af857600080fd5b50813567ffffffffffffffff811115611b1057600080fd5b602083019150836020828501011115611b2857600080fd5b9250929050565b60008060008060008060008060c0898b031215611b4b57600080fd5b8835611b5681611ac4565b97506020890135611b6681611ac4565b96506040890135611b7681611ac4565b955060608901359450608089013567ffffffffffffffff80821115611b9a57600080fd5b611ba68c838d01611ae6565b909650945060a08b0135915080821115611bbf57600080fd5b50611bcc8b828c01611ae6565b999c989b5096995094979396929594505050565b600060208284031215611bf257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461097657600080fd5b600080600080600060808688031215611c3a57600080fd5b8535611c4581611ac4565b94506020860135611c5581611ac4565b935060408601359250606086013567ffffffffffffffff811115611c7857600080fd5b611c8488828901611ae6565b969995985093965092949392505050565b60008083601f840112611ca757600080fd5b50813567ffffffffffffffff811115611cbf57600080fd5b6020830191508360208260051b8501011115611b2857600080fd5b60008060008060408587031215611cf057600080fd5b843567ffffffffffffffff80821115611d0857600080fd5b611d1488838901611c95565b90965094506020870135915080821115611d2d57600080fd5b50611d3a87828801611c95565b95989497509550505050565b600060208284031215611d5857600080fd5b813561097681611ac4565b600080600060608486031215611d7857600080fd5b833567ffffffffffffffff811115611d8f57600080fd5b84016101608187031215611da257600080fd5b95602085013595506040909401359392505050565b60008060408385031215611dca57600080fd5b8235611dd581611ac4565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611e5957611e59611de3565b604052919050565b60008060408385031215611e7457600080fd5b8235611e7f81611ac4565b915060208381013567ffffffffffffffff80821115611e9d57600080fd5b818601915086601f830112611eb157600080fd5b813581811115611ec357611ec3611de3565b611ef3847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611e12565b91508082528784828501011115611f0957600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060008060608587031215611f3d57600080fd5b8435611f4881611ac4565b935060208501359250604085013567ffffffffffffffff811115611f6b57600080fd5b611d3a87828801611ae6565b60008060008060008060008060a0898b031215611f9357600080fd5b8835611f9e81611ac4565b97506020890135611fae81611ac4565b9650604089013567ffffffffffffffff80821115611fcb57600080fd5b611fd78c838d01611c95565b909850965060608b0135915080821115611ff057600080fd5b611ffc8c838d01611c95565b909650945060808b0135915080821115611bbf57600080fd5b60808101818360005b600481101561203d57815183526020928301929091019060010161201e565b50505092915050565b60006080828403121561205857600080fd5b82601f83011261206757600080fd5b6040516080810181811067ffffffffffffffff8211171561208a5761208a611de3565b60405280608084018581111561209f57600080fd5b845b818110156120b95780358352602092830192016120a1565b509195945050505050565b60008060008060008060a087890312156120dd57600080fd5b86356120e881611ac4565b955060208701356120f881611ac4565b94506040870135935060608701359250608087013567ffffffffffffffff81111561212257600080fd5b61212e89828a01611ae6565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126121a457600080fd5b83018035915067ffffffffffffffff8211156121bf57600080fd5b602001915036819003821315611b2857600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361222c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60006020828403121561224557600080fd5b5051919050565b60005b8381101561226757818101518382015260200161224f565b83811115610dfe5750506000910152565b6000825161228a81846020870161224c565b9190910192915050565b60208152600082518060208401526122b381604085016020870161224c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201a293015a642c45bbac015e9c06168162e317c3fdc29a9fc336b746bdf2169a364736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar BrokenBLSAccountFactory__factory = /** @class */ (function (_super) {\n    __extends(BrokenBLSAccountFactory__factory, _super);\n    function BrokenBLSAccountFactory__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    BrokenBLSAccountFactory__factory.prototype.deploy = function (entryPoint, aggregator, overrides) {\n        return _super.prototype.deploy.call(this, entryPoint, aggregator, overrides || {});\n    };\n    BrokenBLSAccountFactory__factory.prototype.getDeployTransaction = function (entryPoint, aggregator, overrides) {\n        return _super.prototype.getDeployTransaction.call(this, entryPoint, aggregator, overrides || {});\n    };\n    BrokenBLSAccountFactory__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    BrokenBLSAccountFactory__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    BrokenBLSAccountFactory__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    BrokenBLSAccountFactory__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    BrokenBLSAccountFactory__factory.bytecode = _bytecode;\n    BrokenBLSAccountFactory__factory.abi = _abi;\n    return BrokenBLSAccountFactory__factory;\n}(ethers_1.ContractFactory));\nexports.BrokenBLSAccountFactory__factory = BrokenBLSAccountFactory__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.DepositPaymaster__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"_entryPoint\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"constructor\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"previousOwner\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"newOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"OwnershipTransferred\",\n        type: \"event\"\n    },\n    {\n        inputs: [],\n        name: \"COST_OF_POST\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"contract IERC20\",\n                name: \"token\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"addDepositFor\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint32\",\n                name: \"unstakeDelaySec\",\n                type: \"uint32\"\n            },\n        ],\n        name: \"addStake\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"contract IERC20\",\n                name: \"token\",\n                type: \"address\"\n            },\n            {\n                internalType: \"contract IOracle\",\n                name: \"tokenPriceOracle\",\n                type: \"address\"\n            },\n        ],\n        name: \"addToken\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"contract IERC20\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        name: \"balances\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"deposit\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"contract IERC20\",\n                name: \"token\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"depositInfo\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"_unlockBlock\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"entryPoint\",\n        outputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getDeposit\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"lockTokenDeposit\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"contract IERC20\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        name: \"oracles\",\n        outputs: [\n            {\n                internalType: \"contract IOracle\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"owner\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"enum IPaymaster.PostOpMode\",\n                name: \"mode\",\n                type: \"uint8\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"actualGasCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"postOp\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"renounceOwnership\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"newOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"transferOwnership\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        name: \"unlockBlock\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"unlockStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"unlockTokenDeposit\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"maxCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validatePaymasterUserOp\",\n        outputs: [\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n        ],\n        name: \"withdrawStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"contract IERC20\",\n                name: \"token\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"target\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawTokensTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar _bytecode = \"0x60a06040523480156200001157600080fd5b5060405162001fa938038062001fa98339810160408190526200003491620000bb565b8062000040336200006b565b6001600160a01b031660805262000064336000908152600360205260409020439055565b50620000ed565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620000ce57600080fd5b81516001600160a01b0381168114620000e657600080fd5b9392505050565b608051611e6f6200013a600039600081816103b30152818161052b015281816105f50152818161089001528181610957015281816109e701528181610bb90152610ed70152611e6f6000f3fe6080604052600436106101755760003560e01c8063addd5099116100cb578063c399ec881161007f578063d0e30db011610059578063d0e30db014610499578063f2fde38b146104a1578063f465c77e146104c157600080fd5b8063c399ec8814610442578063cc9c837c14610457578063cd8f80c21461047757600080fd5b8063bb9fe6bf116100b0578063bb9fe6bf146103d5578063c23a5cea146103ea578063c23f001f1461040a57600080fd5b8063addd50991461035e578063b0d691fe146103a157600080fd5b80635476bd721161012d5780638da5cb5b116101075780638da5cb5b146102ce5780639ed0fb681461031a578063a9a234091461033e57600080fd5b80635476bd7214610283578063715018a6146102a3578063796d4371146102b857600080fd5b8063382edd9e1161015e578063382edd9e146101af578063493b0170146101cf5780634a6f84cf1461024857600080fd5b80630396cb601461017a578063205c28781461018f575b600080fd5b61018d610188366004611915565b6104ef565b005b34801561019b57600080fd5b5061018d6101aa36600461195d565b6105a1565b3480156101bb57600080fd5b5061018d6101ca366004611989565b610639565b3480156101db57600080fd5b5061022e6101ea3660046119ca565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291825282812054600390925291909120549091565b604080519283526020830191909152015b60405180910390f35b34801561025457600080fd5b50610275610263366004611a03565b60036020526000908152604090205481565b60405190815260200161023f565b34801561028f57600080fd5b5061018d61029e3660046119ca565b61076e565b3480156102af57600080fd5b5061018d610858565b3480156102c457600080fd5b506102756188b881565b3480156102da57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161023f565b34801561032657600080fd5b5061018d336000908152600360205260409020439055565b34801561034a57600080fd5b5061018d610359366004611a20565b61086c565b34801561036a57600080fd5b506102f5610379366004611a03565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ad57600080fd5b506102f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e157600080fd5b5061018d610886565b3480156103f657600080fd5b5061018d610405366004611a03565b61090a565b34801561041657600080fd5b506102756104253660046119ca565b600260209081526000928352604080842090915290825290205481565b34801561044e57600080fd5b506102756109b6565b34801561046357600080fd5b5061018d610472366004611989565b610a6c565b34801561048357600080fd5b5061018d33600090815260036020526040812055565b61018d610b8b565b3480156104ad57600080fd5b5061018d6104bc366004611a03565b610c13565b3480156104cd57600080fd5b506104e16104dc366004611aaf565b610cca565b60405161023f929190611b79565b6104f7610ced565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b15801561058557600080fd5b505af1158015610599573d6000803e3d6000fd5b505050505050565b6105a9610ced565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561058557600080fd5b61065b73ffffffffffffffffffffffffffffffffffffffff8416333084610d6e565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260016020526040902054166106ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e737570706f7274656420746f6b656e00000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832093861683529290529081208054839290610732908490611bca565b909155505073ffffffffffffffffffffffffffffffffffffffff821633036107695761076933600090815260036020526040812055565b505050565b610776610ced565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600160205260409020541615610805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f546f6b656e20616c72656164792073657400000000000000000000000000000060448201526064016106e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b610860610ced565b61086a6000610e4a565b565b610874610ebf565b61088084848484610f5e565b50505050565b61088e610ced565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108f657600080fd5b505af1158015610880573d6000803e3d6000fd5b610912610ced565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561099b57600080fd5b505af11580156109af573d6000803e3d6000fd5b5050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190611be2565b905090565b3360009081526003602052604090205415801590610a9857503360009081526003602052604090205443115b610b24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4465706f7369745061796d61737465723a206d75737420756e6c6f636b546f6b60448201527f656e4465706f736974000000000000000000000000000000000000000000000060648201526084016106e5565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020908152604080832033845290915281208054839290610b64908490611bfb565b90915550610769905073ffffffffffffffffffffffffffffffffffffffff841683836110d6565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b15801561099b57600080fd5b610c1b610ced565b73ffffffffffffffffffffffffffffffffffffffff8116610cbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106e5565b610cc781610e4a565b50565b60606000610cd6610ebf565b610ce185858561112c565b91509150935093915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e5565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526108809085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611475565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e74000000000000000000000060448201526064016106e5565b600080808080610f7087890189611c12565b9450945094509450945060008183856188b8610f8c9190611c63565b610f96908a611bca565b610fa09190611c63565b610faa9190611ca0565b905060028a6002811115610fc057610fc0611cdb565b14610fec57610fe773ffffffffffffffffffffffffffffffffffffffff8616873084610d6e565b611036565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600260209081526040808320938a1683529290529081208054839290611030908490611bfb565b90915550505b73ffffffffffffffffffffffffffffffffffffffff85166000908152600260205260408120829161107c60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110c59190611bca565b909155505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107699084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610dc8565b606060006188b88560a00135116111c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4465706f7369745061796d61737465723a2067617320746f6f206c6f7720666f60448201527f7220706f73744f7000000000000000000000000000000000000000000000000060648201526084016106e5565b3660006111d6610120880188611d0a565b90925090506028811461126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4465706f7369745061796d61737465723a207061796d6173746572416e64446160448201527f7461206d757374207370656369667920746f6b656e000000000000000000000060648201526084016106e5565b600061127a8260148186611d76565b61128391611da0565b60601c9050873560006112968389611581565b905060006112a38b6116cf565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205490915015611358576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4465706f7369745061796d61737465723a206465706f736974206e6f74206c6f60448201527f636b65640000000000000000000000000000000000000000000000000000000060648201526084016106e5565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526002602090815260408083209387168352929052205482111561141a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4465706f7369745061796d61737465723a206465706f73697420746f6f206c6f60448201527f770000000000000000000000000000000000000000000000000000000000000060648201526084016106e5565b6040805173ffffffffffffffffffffffffffffffffffffffff948516602082015294909316848401526060840152608083015260a0808301979097528051808303909701875260c09091019052509295600095509350505050565b60006114d7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116f69092919063ffffffff16565b80519091501561076957808060200190518101906114f59190611de8565b610769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106e5565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526001602052604081205490911680611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4465706f7369745061796d61737465723a20756e737570706f7274656420746f60448201527f6b656e000000000000000000000000000000000000000000000000000000000060648201526084016106e5565b6040517fd1eca9cf0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff82169063d1eca9cf90602401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190611be2565b949350505050565b600060e08201356101008301358082036116ea575092915050565b6116c782488301611705565b60606116c7848460008561171d565b60008183106117145781611716565b825b9392505050565b6060824710156117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106e5565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117d89190611e0a565b60006040518083038185875af1925050503d8060008114611815576040519150601f19603f3d011682016040523d82523d6000602084013e61181a565b606091505b509150915061182b87838387611836565b979650505050505050565b606083156118cc5782516000036118c55773ffffffffffffffffffffffffffffffffffffffff85163b6118c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106e5565b50816116c7565b6116c783838151156118e15781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e59190611e26565b60006020828403121561192757600080fd5b813563ffffffff8116811461171657600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610cc757600080fd5b6000806040838503121561197057600080fd5b823561197b8161193b565b946020939093013593505050565b60008060006060848603121561199e57600080fd5b83356119a98161193b565b925060208401356119b98161193b565b929592945050506040919091013590565b600080604083850312156119dd57600080fd5b82356119e88161193b565b915060208301356119f88161193b565b809150509250929050565b600060208284031215611a1557600080fd5b81356117168161193b565b60008060008060608587031215611a3657600080fd5b843560038110611a4557600080fd5b9350602085013567ffffffffffffffff80821115611a6257600080fd5b818701915087601f830112611a7657600080fd5b813581811115611a8557600080fd5b886020828501011115611a9757600080fd5b95986020929092019750949560400135945092505050565b600080600060608486031215611ac457600080fd5b833567ffffffffffffffff811115611adb57600080fd5b84016101608187031215611aee57600080fd5b95602085013595506040909401359392505050565b60005b83811015611b1e578181015183820152602001611b06565b838111156108805750506000910152565b60008151808452611b47816020860160208601611b03565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081526000611b8c6040830185611b2f565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611bdd57611bdd611b9b565b500190565b600060208284031215611bf457600080fd5b5051919050565b600082821015611c0d57611c0d611b9b565b500390565b600080600080600060a08688031215611c2a57600080fd5b8535611c358161193b565b94506020860135611c458161193b565b94979496505050506040830135926060810135926080909101359150565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c9b57611c9b611b9b565b500290565b600082611cd6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611d3f57600080fd5b83018035915067ffffffffffffffff821115611d5a57600080fd5b602001915036819003821315611d6f57600080fd5b9250929050565b60008085851115611d8657600080fd5b83861115611d9357600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008135818116916014851015611de05780818660140360031b1b83161692505b505092915050565b600060208284031215611dfa57600080fd5b8151801515811461171657600080fd5b60008251611e1c818460208701611b03565b9190910192915050565b6020815260006117166020830184611b2f56fea26469706673582212208fc4d35b101eeda5f1b4feab287aa0152884b59a759c99d6ad3954fb1930350064736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar DepositPaymaster__factory = /** @class */ (function (_super) {\n    __extends(DepositPaymaster__factory, _super);\n    function DepositPaymaster__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    DepositPaymaster__factory.prototype.deploy = function (_entryPoint, overrides) {\n        return _super.prototype.deploy.call(this, _entryPoint, overrides || {});\n    };\n    DepositPaymaster__factory.prototype.getDeployTransaction = function (_entryPoint, overrides) {\n        return _super.prototype.getDeployTransaction.call(this, _entryPoint, overrides || {});\n    };\n    DepositPaymaster__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    DepositPaymaster__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    DepositPaymaster__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    DepositPaymaster__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    DepositPaymaster__factory.bytecode = _bytecode;\n    DepositPaymaster__factory.abi = _abi;\n    return DepositPaymaster__factory;\n}(ethers_1.ContractFactory));\nexports.DepositPaymaster__factory = DepositPaymaster__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.EntryPoint__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"uint256\",\n                name: \"preOpGas\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"paid\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint48\",\n                name: \"validAfter\",\n                type: \"uint48\"\n            },\n            {\n                internalType: \"uint48\",\n                name: \"validUntil\",\n                type: \"uint48\"\n            },\n            {\n                internalType: \"bool\",\n                name: \"targetSuccess\",\n                type: \"bool\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"targetResult\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"ExecutionResult\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint256\",\n                name: \"opIndex\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"string\",\n                name: \"reason\",\n                type: \"string\"\n            },\n        ],\n        name: \"FailedOp\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n        ],\n        name: \"SenderAddressResult\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"aggregator\",\n                type: \"address\"\n            },\n        ],\n        name: \"SignatureValidationFailed\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"preOpGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"prefund\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bool\",\n                        name: \"sigFailed\",\n                        type: \"bool\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"validAfter\",\n                        type: \"uint48\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"validUntil\",\n                        type: \"uint48\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterContext\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct IEntryPoint.ReturnInfo\",\n                name: \"returnInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"senderInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"factoryInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"paymasterInfo\",\n                type: \"tuple\"\n            },\n        ],\n        name: \"ValidationResult\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"preOpGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"prefund\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bool\",\n                        name: \"sigFailed\",\n                        type: \"bool\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"validAfter\",\n                        type: \"uint48\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"validUntil\",\n                        type: \"uint48\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterContext\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct IEntryPoint.ReturnInfo\",\n                name: \"returnInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"senderInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"factoryInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"paymasterInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"aggregator\",\n                        type: \"address\"\n                    },\n                    {\n                        components: [\n                            {\n                                internalType: \"uint256\",\n                                name: \"stake\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"unstakeDelaySec\",\n                                type: \"uint256\"\n                            },\n                        ],\n                        internalType: \"struct IStakeManager.StakeInfo\",\n                        name: \"stakeInfo\",\n                        type: \"tuple\"\n                    },\n                ],\n                internalType: \"struct IEntryPoint.AggregatorStakeInfo\",\n                name: \"aggregatorInfo\",\n                type: \"tuple\"\n            },\n        ],\n        name: \"ValidationResultWithAggregation\",\n        type: \"error\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"factory\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"paymaster\",\n                type: \"address\"\n            },\n        ],\n        name: \"AccountDeployed\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [],\n        name: \"BeforeExecution\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"totalDeposit\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Deposited\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"aggregator\",\n                type: \"address\"\n            },\n        ],\n        name: \"SignatureAggregatorChanged\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"totalStaked\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"unstakeDelaySec\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeLocked\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"withdrawTime\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeUnlocked\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeWithdrawn\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"paymaster\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"nonce\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"bool\",\n                name: \"success\",\n                type: \"bool\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"actualGasCost\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"actualGasUsed\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"UserOperationEvent\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"nonce\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"bytes\",\n                name: \"revertReason\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"UserOperationRevertReason\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Withdrawn\",\n        type: \"event\"\n    },\n    {\n        inputs: [],\n        name: \"SIG_VALIDATION_FAILED\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"bytes\",\n                name: \"initCode\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"paymasterAndData\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"_validateSenderAndPaymaster\",\n        outputs: [],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint32\",\n                name: \"unstakeDelaySec\",\n                type: \"uint32\"\n            },\n        ],\n        name: \"addStake\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"balanceOf\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"depositTo\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        name: \"deposits\",\n        outputs: [\n            {\n                internalType: \"uint112\",\n                name: \"deposit\",\n                type: \"uint112\"\n            },\n            {\n                internalType: \"bool\",\n                name: \"staked\",\n                type: \"bool\"\n            },\n            {\n                internalType: \"uint112\",\n                name: \"stake\",\n                type: \"uint112\"\n            },\n            {\n                internalType: \"uint32\",\n                name: \"unstakeDelaySec\",\n                type: \"uint32\"\n            },\n            {\n                internalType: \"uint48\",\n                name: \"withdrawTime\",\n                type: \"uint48\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"getDepositInfo\",\n        outputs: [\n            {\n                components: [\n                    {\n                        internalType: \"uint112\",\n                        name: \"deposit\",\n                        type: \"uint112\"\n                    },\n                    {\n                        internalType: \"bool\",\n                        name: \"staked\",\n                        type: \"bool\"\n                    },\n                    {\n                        internalType: \"uint112\",\n                        name: \"stake\",\n                        type: \"uint112\"\n                    },\n                    {\n                        internalType: \"uint32\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint32\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"withdrawTime\",\n                        type: \"uint48\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.DepositInfo\",\n                name: \"info\",\n                type: \"tuple\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint192\",\n                name: \"key\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"getNonce\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"nonce\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"bytes\",\n                name: \"initCode\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"getSenderAddress\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n        ],\n        name: \"getUserOpHash\",\n        outputs: [\n            {\n                internalType: \"bytes32\",\n                name: \"\",\n                type: \"bytes32\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        components: [\n                            {\n                                internalType: \"address\",\n                                name: \"sender\",\n                                type: \"address\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"nonce\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"bytes\",\n                                name: \"initCode\",\n                                type: \"bytes\"\n                            },\n                            {\n                                internalType: \"bytes\",\n                                name: \"callData\",\n                                type: \"bytes\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"callGasLimit\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"verificationGasLimit\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"preVerificationGas\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"maxFeePerGas\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"maxPriorityFeePerGas\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"bytes\",\n                                name: \"paymasterAndData\",\n                                type: \"bytes\"\n                            },\n                            {\n                                internalType: \"bytes\",\n                                name: \"signature\",\n                                type: \"bytes\"\n                            },\n                        ],\n                        internalType: \"struct UserOperation[]\",\n                        name: \"userOps\",\n                        type: \"tuple[]\"\n                    },\n                    {\n                        internalType: \"contract IAggregator\",\n                        name: \"aggregator\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct IEntryPoint.UserOpsPerAggregator[]\",\n                name: \"opsPerAggregator\",\n                type: \"tuple[]\"\n            },\n            {\n                internalType: \"address payable\",\n                name: \"beneficiary\",\n                type: \"address\"\n            },\n        ],\n        name: \"handleAggregatedOps\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation[]\",\n                name: \"ops\",\n                type: \"tuple[]\"\n            },\n            {\n                internalType: \"address payable\",\n                name: \"beneficiary\",\n                type: \"address\"\n            },\n        ],\n        name: \"handleOps\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint192\",\n                name: \"key\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"incrementNonce\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"bytes\",\n                name: \"callData\",\n                type: \"bytes\"\n            },\n            {\n                components: [\n                    {\n                        components: [\n                            {\n                                internalType: \"address\",\n                                name: \"sender\",\n                                type: \"address\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"nonce\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"callGasLimit\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"verificationGasLimit\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"preVerificationGas\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"address\",\n                                name: \"paymaster\",\n                                type: \"address\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"maxFeePerGas\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"maxPriorityFeePerGas\",\n                                type: \"uint256\"\n                            },\n                        ],\n                        internalType: \"struct EntryPoint.MemoryUserOp\",\n                        name: \"mUserOp\",\n                        type: \"tuple\"\n                    },\n                    {\n                        internalType: \"bytes32\",\n                        name: \"userOpHash\",\n                        type: \"bytes32\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"prefund\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"contextOffset\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preOpGas\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct EntryPoint.UserOpInfo\",\n                name: \"opInfo\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"innerHandleOp\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"actualGasCost\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint192\",\n                name: \"\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"nonceSequenceNumber\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"op\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"address\",\n                name: \"target\",\n                type: \"address\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"targetCallData\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"simulateHandleOp\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n        ],\n        name: \"simulateValidation\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"unlockStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n        ],\n        name: \"withdrawStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"withdrawAmount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        stateMutability: \"payable\",\n        type: \"receive\"\n    },\n];\nvar _bytecode = \"0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar EntryPoint__factory = /** @class */ (function (_super) {\n    __extends(EntryPoint__factory, _super);\n    function EntryPoint__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    EntryPoint__factory.prototype.deploy = function (overrides) {\n        return _super.prototype.deploy.call(this, overrides || {});\n    };\n    EntryPoint__factory.prototype.getDeployTransaction = function (overrides) {\n        return _super.prototype.getDeployTransaction.call(this, overrides || {});\n    };\n    EntryPoint__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    EntryPoint__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    EntryPoint__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    EntryPoint__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    EntryPoint__factory.bytecode = _bytecode;\n    EntryPoint__factory.abi = _abi;\n    return EntryPoint__factory;\n}(ethers_1.ContractFactory));\nexports.EntryPoint__factory = EntryPoint__factory;\n","\"use strict\";\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nexports.__esModule = true;\nexports.IAccount__factory = void 0;\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"missingAccountFunds\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validateUserOp\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar IAccount__factory = /** @class */ (function () {\n    function IAccount__factory() {\n    }\n    IAccount__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    IAccount__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    IAccount__factory.abi = _abi;\n    return IAccount__factory;\n}());\nexports.IAccount__factory = IAccount__factory;\n","\"use strict\";\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nexports.__esModule = true;\nexports.IAggregator__factory = void 0;\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation[]\",\n                name: \"userOps\",\n                type: \"tuple[]\"\n            },\n        ],\n        name: \"aggregateSignatures\",\n        outputs: [\n            {\n                internalType: \"bytes\",\n                name: \"aggregatedSignature\",\n                type: \"bytes\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation[]\",\n                name: \"userOps\",\n                type: \"tuple[]\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"signature\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"validateSignatures\",\n        outputs: [],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n        ],\n        name: \"validateUserOpSignature\",\n        outputs: [\n            {\n                internalType: \"bytes\",\n                name: \"sigForUserOp\",\n                type: \"bytes\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n];\nvar IAggregator__factory = /** @class */ (function () {\n    function IAggregator__factory() {\n    }\n    IAggregator__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    IAggregator__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    IAggregator__factory.abi = _abi;\n    return IAggregator__factory;\n}());\nexports.IAggregator__factory = IAggregator__factory;\n","\"use strict\";\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nexports.__esModule = true;\nexports.IEntryPoint__factory = void 0;\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"uint256\",\n                name: \"preOpGas\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"paid\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint48\",\n                name: \"validAfter\",\n                type: \"uint48\"\n            },\n            {\n                internalType: \"uint48\",\n                name: \"validUntil\",\n                type: \"uint48\"\n            },\n            {\n                internalType: \"bool\",\n                name: \"targetSuccess\",\n                type: \"bool\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"targetResult\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"ExecutionResult\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint256\",\n                name: \"opIndex\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"string\",\n                name: \"reason\",\n                type: \"string\"\n            },\n        ],\n        name: \"FailedOp\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n        ],\n        name: \"SenderAddressResult\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"aggregator\",\n                type: \"address\"\n            },\n        ],\n        name: \"SignatureValidationFailed\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"preOpGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"prefund\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bool\",\n                        name: \"sigFailed\",\n                        type: \"bool\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"validAfter\",\n                        type: \"uint48\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"validUntil\",\n                        type: \"uint48\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterContext\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct IEntryPoint.ReturnInfo\",\n                name: \"returnInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"senderInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"factoryInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"paymasterInfo\",\n                type: \"tuple\"\n            },\n        ],\n        name: \"ValidationResult\",\n        type: \"error\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"preOpGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"prefund\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bool\",\n                        name: \"sigFailed\",\n                        type: \"bool\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"validAfter\",\n                        type: \"uint48\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"validUntil\",\n                        type: \"uint48\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterContext\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct IEntryPoint.ReturnInfo\",\n                name: \"returnInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"senderInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"factoryInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"uint256\",\n                        name: \"stake\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint256\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.StakeInfo\",\n                name: \"paymasterInfo\",\n                type: \"tuple\"\n            },\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"aggregator\",\n                        type: \"address\"\n                    },\n                    {\n                        components: [\n                            {\n                                internalType: \"uint256\",\n                                name: \"stake\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"unstakeDelaySec\",\n                                type: \"uint256\"\n                            },\n                        ],\n                        internalType: \"struct IStakeManager.StakeInfo\",\n                        name: \"stakeInfo\",\n                        type: \"tuple\"\n                    },\n                ],\n                internalType: \"struct IEntryPoint.AggregatorStakeInfo\",\n                name: \"aggregatorInfo\",\n                type: \"tuple\"\n            },\n        ],\n        name: \"ValidationResultWithAggregation\",\n        type: \"error\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"factory\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"paymaster\",\n                type: \"address\"\n            },\n        ],\n        name: \"AccountDeployed\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [],\n        name: \"BeforeExecution\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"totalDeposit\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Deposited\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"aggregator\",\n                type: \"address\"\n            },\n        ],\n        name: \"SignatureAggregatorChanged\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"totalStaked\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"unstakeDelaySec\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeLocked\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"withdrawTime\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeUnlocked\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeWithdrawn\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"paymaster\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"nonce\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"bool\",\n                name: \"success\",\n                type: \"bool\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"actualGasCost\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"actualGasUsed\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"UserOperationEvent\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"nonce\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"bytes\",\n                name: \"revertReason\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"UserOperationRevertReason\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Withdrawn\",\n        type: \"event\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint32\",\n                name: \"_unstakeDelaySec\",\n                type: \"uint32\"\n            },\n        ],\n        name: \"addStake\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"balanceOf\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"depositTo\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"getDepositInfo\",\n        outputs: [\n            {\n                components: [\n                    {\n                        internalType: \"uint112\",\n                        name: \"deposit\",\n                        type: \"uint112\"\n                    },\n                    {\n                        internalType: \"bool\",\n                        name: \"staked\",\n                        type: \"bool\"\n                    },\n                    {\n                        internalType: \"uint112\",\n                        name: \"stake\",\n                        type: \"uint112\"\n                    },\n                    {\n                        internalType: \"uint32\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint32\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"withdrawTime\",\n                        type: \"uint48\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.DepositInfo\",\n                name: \"info\",\n                type: \"tuple\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint192\",\n                name: \"key\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"getNonce\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"nonce\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"bytes\",\n                name: \"initCode\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"getSenderAddress\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n        ],\n        name: \"getUserOpHash\",\n        outputs: [\n            {\n                internalType: \"bytes32\",\n                name: \"\",\n                type: \"bytes32\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        components: [\n                            {\n                                internalType: \"address\",\n                                name: \"sender\",\n                                type: \"address\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"nonce\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"bytes\",\n                                name: \"initCode\",\n                                type: \"bytes\"\n                            },\n                            {\n                                internalType: \"bytes\",\n                                name: \"callData\",\n                                type: \"bytes\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"callGasLimit\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"verificationGasLimit\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"preVerificationGas\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"maxFeePerGas\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"uint256\",\n                                name: \"maxPriorityFeePerGas\",\n                                type: \"uint256\"\n                            },\n                            {\n                                internalType: \"bytes\",\n                                name: \"paymasterAndData\",\n                                type: \"bytes\"\n                            },\n                            {\n                                internalType: \"bytes\",\n                                name: \"signature\",\n                                type: \"bytes\"\n                            },\n                        ],\n                        internalType: \"struct UserOperation[]\",\n                        name: \"userOps\",\n                        type: \"tuple[]\"\n                    },\n                    {\n                        internalType: \"contract IAggregator\",\n                        name: \"aggregator\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct IEntryPoint.UserOpsPerAggregator[]\",\n                name: \"opsPerAggregator\",\n                type: \"tuple[]\"\n            },\n            {\n                internalType: \"address payable\",\n                name: \"beneficiary\",\n                type: \"address\"\n            },\n        ],\n        name: \"handleAggregatedOps\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation[]\",\n                name: \"ops\",\n                type: \"tuple[]\"\n            },\n            {\n                internalType: \"address payable\",\n                name: \"beneficiary\",\n                type: \"address\"\n            },\n        ],\n        name: \"handleOps\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint192\",\n                name: \"key\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"incrementNonce\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"op\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"address\",\n                name: \"target\",\n                type: \"address\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"targetCallData\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"simulateHandleOp\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n        ],\n        name: \"simulateValidation\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"unlockStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n        ],\n        name: \"withdrawStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"withdrawAmount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar IEntryPoint__factory = /** @class */ (function () {\n    function IEntryPoint__factory() {\n    }\n    IEntryPoint__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    IEntryPoint__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    IEntryPoint__factory.abi = _abi;\n    return IEntryPoint__factory;\n}());\nexports.IEntryPoint__factory = IEntryPoint__factory;\n","\"use strict\";\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nexports.__esModule = true;\nexports.INonceManager__factory = void 0;\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint192\",\n                name: \"key\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"getNonce\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"nonce\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint192\",\n                name: \"key\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"incrementNonce\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar INonceManager__factory = /** @class */ (function () {\n    function INonceManager__factory() {\n    }\n    INonceManager__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    INonceManager__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    INonceManager__factory.abi = _abi;\n    return INonceManager__factory;\n}());\nexports.INonceManager__factory = INonceManager__factory;\n","\"use strict\";\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nexports.__esModule = true;\nexports.IPaymaster__factory = void 0;\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"enum IPaymaster.PostOpMode\",\n                name: \"mode\",\n                type: \"uint8\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"actualGasCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"postOp\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"maxCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validatePaymasterUserOp\",\n        outputs: [\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar IPaymaster__factory = /** @class */ (function () {\n    function IPaymaster__factory() {\n    }\n    IPaymaster__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    IPaymaster__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    IPaymaster__factory.abi = _abi;\n    return IPaymaster__factory;\n}());\nexports.IPaymaster__factory = IPaymaster__factory;\n","\"use strict\";\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nexports.__esModule = true;\nexports.IStakeManager__factory = void 0;\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"totalDeposit\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Deposited\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"totalStaked\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"unstakeDelaySec\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeLocked\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"withdrawTime\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeUnlocked\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeWithdrawn\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Withdrawn\",\n        type: \"event\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint32\",\n                name: \"_unstakeDelaySec\",\n                type: \"uint32\"\n            },\n        ],\n        name: \"addStake\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"balanceOf\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"depositTo\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"getDepositInfo\",\n        outputs: [\n            {\n                components: [\n                    {\n                        internalType: \"uint112\",\n                        name: \"deposit\",\n                        type: \"uint112\"\n                    },\n                    {\n                        internalType: \"bool\",\n                        name: \"staked\",\n                        type: \"bool\"\n                    },\n                    {\n                        internalType: \"uint112\",\n                        name: \"stake\",\n                        type: \"uint112\"\n                    },\n                    {\n                        internalType: \"uint32\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint32\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"withdrawTime\",\n                        type: \"uint48\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.DepositInfo\",\n                name: \"info\",\n                type: \"tuple\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"unlockStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n        ],\n        name: \"withdrawStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"withdrawAmount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar IStakeManager__factory = /** @class */ (function () {\n    function IStakeManager__factory() {\n    }\n    IStakeManager__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    IStakeManager__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    IStakeManager__factory.abi = _abi;\n    return IStakeManager__factory;\n}());\nexports.IStakeManager__factory = IStakeManager__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.MaliciousAccount__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"_ep\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"payable\",\n        type: \"constructor\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"missingAccountFunds\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validateUserOp\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar _bytecode = \"0x60806040526040516103ec3803806103ec83398101604081905261002291610047565b600080546001600160a01b0319166001600160a01b0392909216919091179055610077565b60006020828403121561005957600080fd5b81516001600160a01b038116811461007057600080fd5b9392505050565b610366806100866000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a871cdd14610030575b600080fd5b61004361003e3660046101be565b610055565b60405190815260200160405180910390f35b600080546040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063b760faf99084906024016000604051808303818588803b1580156100c257600080fd5b505af11580156100d6573d6000803e3d6000fd5b50505050506000848061014001906100ee9190610212565b8101906100fb919061027e565b9050600060c086013561011660a088013560808901356102c6565b61012091906102c6565b9050600061012e82866102de565b9050600061014161010089013583610319565b90508381146101b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5265766572742061667465722066697273742076616c69646174696f6e000000604482015260640160405180910390fd5b506000979650505050505050565b6000806000606084860312156101d357600080fd5b833567ffffffffffffffff8111156101ea57600080fd5b840161016081870312156101fd57600080fd5b95602085013595506040909401359392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261024757600080fd5b83018035915067ffffffffffffffff82111561026257600080fd5b60200191503681900382131561027757600080fd5b9250929050565b60006020828403121561029057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156102d9576102d9610297565b500190565b600082610314577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561032b5761032b610297565b50039056fea26469706673582212207a8e78673a414e5633ca0da4ad76d63f65bd0d2c09da97ae1b26e837ad5870da64736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar MaliciousAccount__factory = /** @class */ (function (_super) {\n    __extends(MaliciousAccount__factory, _super);\n    function MaliciousAccount__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    MaliciousAccount__factory.prototype.deploy = function (_ep, overrides) {\n        return _super.prototype.deploy.call(this, _ep, overrides || {});\n    };\n    MaliciousAccount__factory.prototype.getDeployTransaction = function (_ep, overrides) {\n        return _super.prototype.getDeployTransaction.call(this, _ep, overrides || {});\n    };\n    MaliciousAccount__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    MaliciousAccount__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    MaliciousAccount__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    MaliciousAccount__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    MaliciousAccount__factory.bytecode = _bytecode;\n    MaliciousAccount__factory.abi = _abi;\n    return MaliciousAccount__factory;\n}(ethers_1.ContractFactory));\nexports.MaliciousAccount__factory = MaliciousAccount__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.NonceManager__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint192\",\n                name: \"key\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"getNonce\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"nonce\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint192\",\n                name: \"key\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"incrementNonce\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint192\",\n                name: \"\",\n                type: \"uint192\"\n            },\n        ],\n        name: \"nonceSequenceNumber\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n];\nvar _bytecode = \"0x608060405234801561001057600080fd5b50610291806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630bd28e3b146100465780631b2e01b81461005b57806335567e1a14610095575b600080fd5b61005961005436600461018c565b610119565b005b6100836100693660046101ae565b600060208181529281526040808220909352908152205481565b60405190815260200160405180910390f35b6100836100a33660046101ae565b73ffffffffffffffffffffffffffffffffffffffff9190911660009081526020818152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff85168452909152908190205491901b7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000161790565b3360009081526020818152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff851684529091528120805491610157836101fc565b919050555050565b803577ffffffffffffffffffffffffffffffffffffffffffffffff8116811461018757600080fd5b919050565b60006020828403121561019e57600080fd5b6101a78261015f565b9392505050565b600080604083850312156101c157600080fd5b823573ffffffffffffffffffffffffffffffffffffffff811681146101e557600080fd5b91506101f36020840161015f565b90509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610254577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220246a8c46e38a8c9811f06ac9a289595dfd8b2edbad85f35b8e177f24d26fe20664736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar NonceManager__factory = /** @class */ (function (_super) {\n    __extends(NonceManager__factory, _super);\n    function NonceManager__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    NonceManager__factory.prototype.deploy = function (overrides) {\n        return _super.prototype.deploy.call(this, overrides || {});\n    };\n    NonceManager__factory.prototype.getDeployTransaction = function (overrides) {\n        return _super.prototype.getDeployTransaction.call(this, overrides || {});\n    };\n    NonceManager__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    NonceManager__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    NonceManager__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    NonceManager__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    NonceManager__factory.bytecode = _bytecode;\n    NonceManager__factory.abi = _abi;\n    return NonceManager__factory;\n}(ethers_1.ContractFactory));\nexports.NonceManager__factory = NonceManager__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.SenderCreator__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"bytes\",\n                name: \"initCode\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"createSender\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"sender\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar _bytecode = \"0x608060405234801561001057600080fd5b50610213806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004361003e3660046100f9565b61006c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008061007c601482858761016b565b61008591610195565b60601c90506000610099846014818861016b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509360209350849250905082850182875af190506000519350806100f057600093505b50505092915050565b6000806020838503121561010c57600080fd5b823567ffffffffffffffff8082111561012457600080fd5b818501915085601f83011261013857600080fd5b81358181111561014757600080fd5b86602082850101111561015957600080fd5b60209290920196919550909350505050565b6000808585111561017b57600080fd5b8386111561018857600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156101d55780818660140360031b1b83161692505b50509291505056fea2646970667358221220d5d7cb55b3123d86b2710028be2074a469cca162ad2a26c50fb1cfdce4424b9464736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar SenderCreator__factory = /** @class */ (function (_super) {\n    __extends(SenderCreator__factory, _super);\n    function SenderCreator__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    SenderCreator__factory.prototype.deploy = function (overrides) {\n        return _super.prototype.deploy.call(this, overrides || {});\n    };\n    SenderCreator__factory.prototype.getDeployTransaction = function (overrides) {\n        return _super.prototype.getDeployTransaction.call(this, overrides || {});\n    };\n    SenderCreator__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    SenderCreator__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    SenderCreator__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    SenderCreator__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    SenderCreator__factory.bytecode = _bytecode;\n    SenderCreator__factory.abi = _abi;\n    return SenderCreator__factory;\n}(ethers_1.ContractFactory));\nexports.SenderCreator__factory = SenderCreator__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.SimpleAccount__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"anEntryPoint\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"constructor\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"previousAdmin\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"newAdmin\",\n                type: \"address\"\n            },\n        ],\n        name: \"AdminChanged\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"beacon\",\n                type: \"address\"\n            },\n        ],\n        name: \"BeaconUpgraded\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: false,\n                internalType: \"uint8\",\n                name: \"version\",\n                type: \"uint8\"\n            },\n        ],\n        name: \"Initialized\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"contract IEntryPoint\",\n                name: \"entryPoint\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"owner\",\n                type: \"address\"\n            },\n        ],\n        name: \"SimpleAccountInitialized\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"implementation\",\n                type: \"address\"\n            },\n        ],\n        name: \"Upgraded\",\n        type: \"event\"\n    },\n    {\n        inputs: [],\n        name: \"addDeposit\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"entryPoint\",\n        outputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"dest\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"func\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"execute\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address[]\",\n                name: \"dest\",\n                type: \"address[]\"\n            },\n            {\n                internalType: \"bytes[]\",\n                name: \"func\",\n                type: \"bytes[]\"\n            },\n        ],\n        name: \"executeBatch\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getDeposit\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getNonce\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"anOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"initialize\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256[]\",\n                name: \"\",\n                type: \"uint256[]\"\n            },\n            {\n                internalType: \"uint256[]\",\n                name: \"\",\n                type: \"uint256[]\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"onERC1155BatchReceived\",\n        outputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"\",\n                type: \"bytes4\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"onERC1155Received\",\n        outputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"\",\n                type: \"bytes4\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"onERC721Received\",\n        outputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"\",\n                type: \"bytes4\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"owner\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"proxiableUUID\",\n        outputs: [\n            {\n                internalType: \"bytes32\",\n                name: \"\",\n                type: \"bytes32\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"interfaceId\",\n                type: \"bytes4\"\n            },\n        ],\n        name: \"supportsInterface\",\n        outputs: [\n            {\n                internalType: \"bool\",\n                name: \"\",\n                type: \"bool\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"tokensReceived\",\n        outputs: [],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"newImplementation\",\n                type: \"address\"\n            },\n        ],\n        name: \"upgradeTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"newImplementation\",\n                type: \"address\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"upgradeToAndCall\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"missingAccountFunds\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validateUserOp\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawDepositTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        stateMutability: \"payable\",\n        type: \"receive\"\n    },\n];\nvar _bytecode = \"0x60c0346200016857601f6200229938819003918201601f19168301916001600160401b038311848410176200016d578084926020946040528339810103126200016857516001600160a01b038116810362000168573060805260a05260005460ff8160081c16620001135760ff80821610620000d7575b60405161211590816200018482396080518181816105e301528181610c290152610e06015260a051818181610802015281816108fb015281816109e401528181610f7d01528181611174015281816113c001528181611c040152611c630152f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a13862000076565b60405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806223de291461018257806301ffc9a714610179578063150b7a021461017057806318dfb3c7146101675780633659cfe61461015e5780633a871cdd146101555780634a58db191461014c5780634d44560d146101435780634f1ef2861461013a57806352d1902d146101315780638da5cb5b14610128578063b0d691fe1461011f578063b61d27f614610116578063bc197c811461010d578063c399ec8814610104578063c4d66de8146100fb578063d087d288146100f25763f23a6e610361000e576100ed61142e565b61000e565b506100ed61133d565b506100ed6111d9565b506100ed6110fa565b506100ed611032565b506100ed610fa1565b506100ed610f31565b506100ed610edb565b506100ed610dbf565b506100ed610ba7565b506100ed610985565b506100ed6108b8565b506100ed61079a565b506100ed61058e565b506100ed61041c565b506100ed610359565b506100ed610268565b506100ed6101dc565b73ffffffffffffffffffffffffffffffffffffffff8116036101a957565b600080fd5b9181601f840112156101a95782359167ffffffffffffffff83116101a957602083818601950101116101a957565b50346101a95760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95761021760043561018b565b61022260243561018b565b61022d60443561018b565b67ffffffffffffffff6084358181116101a95761024e9036906004016101ae565b505060a4359081116101a9576100199036906004016101ae565b50346101a95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a9576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036101a957807f150b7a02000000000000000000000000000000000000000000000000000000006020921490811561032f575b8115610305575b506040519015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014386102fa565b7f4e2312e000000000000000000000000000000000000000000000000000000000811491506102f3565b50346101a95760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95761039460043561018b565b61039f60243561018b565b60643567ffffffffffffffff81116101a9576103bf9036906004016101ae565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b9181601f840112156101a95782359167ffffffffffffffff83116101a9576020808501948460051b0101116101a957565b50346101a95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95767ffffffffffffffff600480358281116101a95761046d90369083016103eb565b60249291929384359081116101a95761048990369084016103eb565b610491611c4b565b8083036105315760005b8381106104a457005b6104d56104ba6104b583878a611a71565b611a8f565b6104cf6104c8848688611aea565b3691610b70565b9061202c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105045760010161049b565b866011867f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b6064846013886020604051937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f77726f6e67206172726179206c656e67746873000000000000000000000000006044820152fd5b50346101a95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a9576004356105ca8161018b565b73ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001691610610833014156114c0565b61063f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc93828554161461154b565b61064761204c565b6040519061065482610aae565b600082527f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561068e575050610019915061167d565b6020600491604094939451928380927f52d1902d00000000000000000000000000000000000000000000000000000000825286165afa6000918161076a575b50610757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608490fd5b6100199361076591146115f2565b611769565b61078c91925060203d8111610793575b6107848183610ae6565b8101906115d6565b90386106cd565b503d61077a565b50346101a9577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6060813601126101a9576004359067ffffffffffffffff82116101a9576101609082360301126101a95773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361085a5761083b6108569160243590600401611d04565b610846604435611a07565b6040519081529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152fd5b506000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109825773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681813b1561098257602491604051928380927fb760faf900000000000000000000000000000000000000000000000000000000825230600483015234905af18015610975575b610969575080f35b61097290610a8d565b80f35b61097d6115e5565b610961565b80fd5b50346101a957600060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610982576004356109c38161018b565b6109cb61204c565b8173ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001692833b15610a59576044908360405195869485937f205c287800000000000000000000000000000000000000000000000000000000855216600484015260243560248401525af1801561097557610969575080f35b8280fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111610aa157604052565b610aa9610a5d565b604052565b6020810190811067ffffffffffffffff821117610aa157604052565b6060810190811067ffffffffffffffff821117610aa157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610aa157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610b63575b01160190565b610b6b610a5d565b610b5d565b929192610b7c82610b27565b91610b8a6040519384610ae6565b8294818452818301116101a9578281602093846000960137010152565b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a957600435610bde8161018b565b60243567ffffffffffffffff81116101a957366023820112156101a957610c0f903690602481600401359101610b70565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001692610c56843014156114c0565b610c857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc94828654161461154b565b610c8d61204c565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610cc3575050610019915061167d565b6020600491604094939451928380927f52d1902d00000000000000000000000000000000000000000000000000000000825286165afa60009181610d9f575b50610d8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608490fd5b61001993610d9a91146115f2565b611848565b610db891925060203d8111610793576107848183610ae6565b9038610d02565b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610e57576040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152602090f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152fd5b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a957602073ffffffffffffffffffffffffffffffffffffffff60005460101c16604051908152f35b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101a95760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a957600435610fdd8161018b565b60443567ffffffffffffffff81116101a95760009161100c611004849336906004016101ae565b6104c8611c4b565b9060208251920190602435905af16110226118a8565b901561102a57005b602081519101fd5b50346101a95760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95761106d60043561018b565b61107860243561018b565b67ffffffffffffffff6044358181116101a9576110999036906004016103eb565b50506064358181116101a9576110b39036906004016103eb565b50506084359081116101a9576110cd9036906004016101ae565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95760206040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111cc575b6000916111af575b50604051908152f35b6111c69150823d8111610793576107848183610ae6565b386111a6565b6111d46115e5565b61119e565b50346101a95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a9576004356112158161018b565b6112776000549161123d60ff8460081c16158094819561132f575b811561130f575b50611b14565b8261126e60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000541617600055565b6112d957611b9f565b61127d57005b6112aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff60005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1005b61130a6101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff6000541617600055565b611b9f565b303b15915081611321575b5038611237565b6001915060ff16143861131a565b600160ff8216109150611230565b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a9576108566040517f35567e1a0000000000000000000000000000000000000000000000000000000081523060048201526000602482015260208160448173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611421575b600091611403575b506040519081529081906020820190565b61141b915060203d8111610793576107848183610ae6565b386113f2565b6114296115e5565b6113ea565b50346101a95760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95761146960043561018b565b61147460243561018b565b60843567ffffffffffffffff81116101a9576114949036906004016101ae565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b156114c757565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152fd5b1561155257565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152fd5b908160209103126101a9575190565b506040513d6000823e3d90fd5b156115f957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152fd5b803b156116e55773ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b906117738261167d565b73ffffffffffffffffffffffffffffffffffffffff82167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2805115801590611840575b6117c2575050565b61183d91600080604051936117d685610aca565b602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208601527f206661696c6564000000000000000000000000000000000000000000000000006040860152602081519101845af46118376118a8565b9161193d565b50565b5060006117ba565b906118528261167d565b73ffffffffffffffffffffffffffffffffffffffff82167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28051158015906118a0576117c2575050565b5060016117ba565b3d156118d3573d906118b982610b27565b916118c76040519384610ae6565b82523d6000602084013e565b606090565b156118df57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b919290156119605750815115611951575090565b61195d903b15156118d8565b90565b8251909150156119735750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b8481106119f0575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b8181018301518682016044015285935082016119af565b80611a0f5750565b600080808093337ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15061183d6118a8565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190811015611a82575b60051b0190565b611a8a611a41565b611a7b565b3561195d8161018b565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101a9570180359067ffffffffffffffff82116101a9576020019181360383136101a957565b9091611b0392811015611b07575b60051b810190611a99565b9091565b611b0f611a41565b611af8565b15611b1b57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b7fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff00006000549260101b169116178060005573ffffffffffffffffffffffffffffffffffffffff809160101c16907f0000000000000000000000000000000000000000000000000000000000000000167f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de600080a3565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000163314908115611cf3575b5015611c9557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e746044820152fd5b905060005460101c16331438611c8d565b9060405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c8152611d4281610aca565b519020611d89611d8173ffffffffffffffffffffffffffffffffffffffff92611d7b6104c88560005460101c1696610140810190611a99565b90611f5b565b919091611dd2565b1603611d9457600090565b600190565b60051115611da357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b611ddb81611d99565b80611de35750565b611dec81611d99565b60018103611e53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b611e5c81611d99565b60028103611ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b80611ecf600392611d99565b14611ed657565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608490fd5b906041815114600014611f8557611b03916020820151906060604084015193015160001a90611f8f565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116120205791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15612013575b815173ffffffffffffffffffffffffffffffffffffffff81161561200d579190565b50600190565b61201b6115e5565b611feb565b50505050600090600390565b600091829182602083519301915af16120436118a8565b901561102a5750565b73ffffffffffffffffffffffffffffffffffffffff60005460101c16331480156120d6575b1561207857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e6572000000000000000000000000000000000000000000006044820152fd5b5030331461207156fea264697066735822122064340709e2302b7c389d4fa9f6710ad98eef5d24fb994c389ec27f1e3195d44564736f6c63430008110033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar SimpleAccount__factory = /** @class */ (function (_super) {\n    __extends(SimpleAccount__factory, _super);\n    function SimpleAccount__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    SimpleAccount__factory.prototype.deploy = function (anEntryPoint, overrides) {\n        return _super.prototype.deploy.call(this, anEntryPoint, overrides || {});\n    };\n    SimpleAccount__factory.prototype.getDeployTransaction = function (anEntryPoint, overrides) {\n        return _super.prototype.getDeployTransaction.call(this, anEntryPoint, overrides || {});\n    };\n    SimpleAccount__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    SimpleAccount__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    SimpleAccount__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    SimpleAccount__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    SimpleAccount__factory.bytecode = _bytecode;\n    SimpleAccount__factory.abi = _abi;\n    return SimpleAccount__factory;\n}(ethers_1.ContractFactory));\nexports.SimpleAccount__factory = SimpleAccount__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.SimpleAccountFactory__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"_entryPoint\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"constructor\"\n    },\n    {\n        inputs: [],\n        name: \"accountImplementation\",\n        outputs: [\n            {\n                internalType: \"contract SimpleAccount\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"owner\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"salt\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"createAccount\",\n        outputs: [\n            {\n                internalType: \"contract SimpleAccount\",\n                name: \"ret\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"owner\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"salt\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"getAddress\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n];\nvar _bytecode = \"0x60a060405234801561001057600080fd5b5060405161336238038061336283398101604081905261002f91610088565b8060405161003c9061007b565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b0316608052506100b8565b6125dc80610d8683390190565b60006020828403121561009a57600080fd5b81516001600160a01b03811681146100b157600080fd5b9392505050565b608051610ca66100e060003960008181604b0152818161011401526102580152610ca66000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806311464fbe146100465780635fbfb9cf146100965780638cb84e18146100a9575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100a436600461039d565b6100bc565b61006d6100b736600461039d565b6101ee565b6000806100c984846101ee565b905073ffffffffffffffffffffffffffffffffffffffff81163b80156100f1575090506101e8565b60405173ffffffffffffffffffffffffffffffffffffffff8616602482015284907f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052516101b790610390565b6101c2929190610412565b8190604051809103906000f59050801580156101e2573d6000803e3d6000fd5b50925050505b92915050565b60006103578260001b6040518060200161020790610390565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081905273ffffffffffffffffffffffffffffffffffffffff871660248201527f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052905161030093929101610412565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261033c9291602001610480565b6040516020818303038152906040528051906020012061035e565b9392505050565b60006103578383306000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6107c1806104b083390190565b600080604083850312156103b057600080fd5b823573ffffffffffffffffffffffffffffffffffffffff811681146103d457600080fd5b946020939093013593505050565b60005b838110156103fd5781810151838201526020016103e5565b8381111561040c576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000825180604084015261044d8160608501602087016103e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b600083516104928184602088016103e2565b8351908301906104a68183602088016103e2565b0194935050505056fe60806040526040516107c13803806107c183398101604081905261002291610321565b61002e82826000610035565b505061043e565b61003e8361006b565b60008251118061004b5750805b156100665761006483836100ab60201b6100291760201c565b505b505050565b610074816100d7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100d0838360405180606001604052806027815260200161079a602791396101a9565b9392505050565b6100ea8161022260201b6100551760201c565b6101515760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61023160201b6100711760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101c691906103ef565b600060405180830381855af49150503d8060008114610201576040519150601f19603f3d011682016040523d82523d6000602084013e610206565b606091505b50909250905061021886838387610234565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102a357825160000361029c576001600160a01b0385163b61029c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610148565b50816102ad565b6102ad83836102b5565b949350505050565b8151156102c55781518083602001fd5b8060405162461bcd60e51b8152600401610148919061040b565b634e487b7160e01b600052604160045260246000fd5b60005b838110156103105781810151838201526020016102f8565b838111156100645750506000910152565b6000806040838503121561033457600080fd5b82516001600160a01b038116811461034b57600080fd5b60208401519092506001600160401b038082111561036857600080fd5b818501915085601f83011261037c57600080fd5b81518181111561038e5761038e6102df565b604051601f8201601f19908116603f011681019083821181831017156103b6576103b66102df565b816040528281528860208487010111156103cf57600080fd5b6103e08360208301602088016102f5565b80955050505050509250929050565b600082516104018184602087016102f5565b9190910192915050565b602081526000825180602084015261042a8160408501602087016102f5565b601f01601f19169190910160400192915050565b61034d8061044d6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102f1602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516101079190610283565b600060405180830381855af49150503d8060008114610142576040519150601f19603f3d011682016040523d82523d6000602084013e610147565b606091505b509150915061015886838387610162565b9695505050505050565b606083156101fd5782516000036101f65773ffffffffffffffffffffffffffffffffffffffff85163b6101f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610207565b610207838361020f565b949350505050565b81511561021f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed919061029f565b60005b8381101561026e578181015183820152602001610256565b8381111561027d576000848401525b50505050565b60008251610295818460208701610253565b9190910192915050565b60208152600082518060208401526102be816040850160208701610253565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201cd78ab6a31213989661cff2d7d05fc9b9c38b1a848e8249e2e398659a9eb7e364736f6c634300080f0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122070aa03035a81441673770173c347020a4af1bf8f651ceebc066752c059bdbac764736f6c634300080f003360c0604052306080523480156200001557600080fd5b50604051620025dc380380620025dc833981016040819052620000389162000118565b6001600160a01b03811660a0526200004f62000056565b506200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a05161241f620001bd6000396000818161032f015281816108810152818161092801528181610d4c01528181610f9d01528181610fe40152818161133601526115f501526000818161066b0152818161071b015281816109ec01528181610a9c0152610be5015261241f6000f3fe60806040526004361061012c5760003560e01c806352d1902d116100a5578063bc197c8111610074578063c4d66de811610059578063c4d66de8146103d0578063d087d288146103f0578063f23a6e611461040557600080fd5b8063bc197c8114610373578063c399ec88146103bb57600080fd5b806352d1902d146102b35780638da5cb5b146102c8578063b0d691fe14610320578063b61d27f61461035357600080fd5b80633659cfe6116100fc5780634a58db19116100e15780634a58db19146102785780634d44560d146102805780634f1ef286146102a057600080fd5b80633659cfe61461022a5780633a871cdd1461024a57600080fd5b806223de291461013857806301ffc9a71461015f578063150b7a021461019457806318dfb3c71461020a57600080fd5b3661013357005b600080fd5b34801561014457600080fd5b5061015d610153366004611cbf565b5050505050505050565b005b34801561016b57600080fd5b5061017f61017a366004611d70565b61044b565b60405190151581526020015b60405180910390f35b3480156101a057600080fd5b506101d96101af366004611db2565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161018b565b34801561021657600080fd5b5061015d610225366004611e6a565b610530565b34801561023657600080fd5b5061015d610245366004611ed6565b610654565b34801561025657600080fd5b5061026a610265366004611ef3565b610859565b60405190815260200161018b565b61015d61087f565b34801561028c57600080fd5b5061015d61029b366004611f47565b61091e565b61015d6102ae366004611fa2565b6109d5565b3480156102bf57600080fd5b5061026a610bcb565b3480156102d457600080fd5b506000546102fb9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018b565b34801561032c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102fb565b34801561035f57600080fd5b5061015d61036e366004612084565b610cb7565b34801561037f57600080fd5b506101d961038e3660046120d4565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b3480156103c757600080fd5b5061026a610d06565b3480156103dc57600080fd5b5061015d6103eb366004611ed6565b610dbd565b3480156103fc57600080fd5b5061026a610f50565b34801561041157600080fd5b506101d9610420366004612172565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a020000000000000000000000000000000000000000000000000000000014806104de57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061052a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610538610fcc565b8281146105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206172726179206c656e677468730000000000000000000000000060448201526064015b60405180910390fd5b60005b8381101561064d5761063b8585838181106105c6576105c66121ee565b90506020020160208101906105db9190611ed6565b60008585858181106105ef576105ef6121ee565b9050602002810190610601919061221d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109592505050565b8061064581612282565b9150506105a9565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161059d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661078e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f78790000000000000000000000000000000000000000606482015260840161059d565b61083a81611112565b604080516000808252602082019092526108569183919061111a565b50565b600061086361131e565b61086d84846113bd565b9050610878826114a3565b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff919091169063b760faf99034906024016000604051808303818588803b15801561090a57600080fd5b505af115801561064d573d6000803e3d6000fd5b61092661150e565b7f00000000000000000000000000000000000000000000000000000000000000006040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b1580156109b957600080fd5b505af11580156109cd573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161059d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610b0f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f78790000000000000000000000000000000000000000606482015260840161059d565b610bbb82611112565b610bc78282600161111a565b5050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161059d565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610cbf610fcc565b610d00848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109592505050565b50505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db891906122e1565b905090565b600054610100900460ff1615808015610ddd5750600054600160ff909116105b80610df75750303b158015610df7575060005460ff166001145b610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161059d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610ee157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610eea8261159f565b8015610bc757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6040517f35567e1a0000000000000000000000000000000000000000000000000000000081523060048201526000602482018190529073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906335567e1a90604401610d77565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061102d575060005462010000900473ffffffffffffffffffffffffffffffffffffffff1633145b611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e74604482015260640161059d565b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516110be9190612326565b60006040518083038185875af1925050503d80600081146110fb576040519150601f19603f3d011682016040523d82523d6000602084013e611100565b606091505b50915091508161064d57805160208201fd5b61085661150e565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156111525761114d8361163e565b505050565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111d7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526111d4918101906122e1565b60015b611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f742055555053000000000000000000000000000000000000606482015260840161059d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c65555549440000000000000000000000000000000000000000000000606482015260840161059d565b5061114d838383611748565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e7400000000604482015260640161059d565b600080611417836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905061146761142a61014086018661221d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859392505061176d9050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff90811691161461149957600191505061052a565b5060009392505050565b80156108565760405160009033907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90849084818181858888f193505050503d806000811461064d576040519150601f19603f3d011682016040523d82523d6000602084013e61064d565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633148061153957503330145b611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e657200000000000000000000000000000000000000000000604482015260640161059d565b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8481168202929092178084556040519190048216927f0000000000000000000000000000000000000000000000000000000000000000909216917f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de91a350565b73ffffffffffffffffffffffffffffffffffffffff81163b6116e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161059d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61175183611791565b60008251118061175e5750805b1561114d57610d0083836117de565b600080600061177c8585611803565b9150915061178981611848565b509392505050565b61179a8161163e565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061087883836040518060600160405280602781526020016123c3602791396119fb565b60008082516041036118395760208301516040840151606085015160001a61182d87828585611a80565b94509450505050611841565b506000905060025b9250929050565b600081600481111561185c5761185c612342565b036118645750565b600181600481111561187857611878612342565b036118df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161059d565b60028160048111156118f3576118f3612342565b0361195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161059d565b600381600481111561196e5761196e612342565b03610856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161059d565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611a259190612326565b600060405180830381855af49150503d8060008114611a60576040519150601f19603f3d011682016040523d82523d6000602084013e611a65565b606091505b5091509150611a7686838387611b6f565b9695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611ab75750600090506003611b66565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611b0b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611b5f57600060019250925050611b66565b9150600090505b94509492505050565b60608315611c05578251600003611bfe5773ffffffffffffffffffffffffffffffffffffffff85163b611bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161059d565b5081611c0f565b611c0f8383611c17565b949350505050565b815115611c275781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059d9190612371565b73ffffffffffffffffffffffffffffffffffffffff8116811461085657600080fd5b60008083601f840112611c8f57600080fd5b50813567ffffffffffffffff811115611ca757600080fd5b60208301915083602082850101111561184157600080fd5b60008060008060008060008060c0898b031215611cdb57600080fd5b8835611ce681611c5b565b97506020890135611cf681611c5b565b96506040890135611d0681611c5b565b955060608901359450608089013567ffffffffffffffff80821115611d2a57600080fd5b611d368c838d01611c7d565b909650945060a08b0135915080821115611d4f57600080fd5b50611d5c8b828c01611c7d565b999c989b5096995094979396929594505050565b600060208284031215611d8257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461087857600080fd5b600080600080600060808688031215611dca57600080fd5b8535611dd581611c5b565b94506020860135611de581611c5b565b935060408601359250606086013567ffffffffffffffff811115611e0857600080fd5b611e1488828901611c7d565b969995985093965092949392505050565b60008083601f840112611e3757600080fd5b50813567ffffffffffffffff811115611e4f57600080fd5b6020830191508360208260051b850101111561184157600080fd5b60008060008060408587031215611e8057600080fd5b843567ffffffffffffffff80821115611e9857600080fd5b611ea488838901611e25565b90965094506020870135915080821115611ebd57600080fd5b50611eca87828801611e25565b95989497509550505050565b600060208284031215611ee857600080fd5b813561087881611c5b565b600080600060608486031215611f0857600080fd5b833567ffffffffffffffff811115611f1f57600080fd5b84016101608187031215611f3257600080fd5b95602085013595506040909401359392505050565b60008060408385031215611f5a57600080fd5b8235611f6581611c5b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611fb557600080fd5b8235611fc081611c5b565b9150602083013567ffffffffffffffff80821115611fdd57600080fd5b818501915085601f830112611ff157600080fd5b81358181111561200357612003611f73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561204957612049611f73565b8160405282815288602084870101111561206257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806000806060858703121561209a57600080fd5b84356120a581611c5b565b935060208501359250604085013567ffffffffffffffff8111156120c857600080fd5b611eca87828801611c7d565b60008060008060008060008060a0898b0312156120f057600080fd5b88356120fb81611c5b565b9750602089013561210b81611c5b565b9650604089013567ffffffffffffffff8082111561212857600080fd5b6121348c838d01611e25565b909850965060608b013591508082111561214d57600080fd5b6121598c838d01611e25565b909650945060808b0135915080821115611d4f57600080fd5b60008060008060008060a0878903121561218b57600080fd5b863561219681611c5b565b955060208701356121a681611c5b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156121d057600080fd5b6121dc89828a01611c7d565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261225257600080fd5b83018035915067ffffffffffffffff82111561226d57600080fd5b60200191503681900382131561184157600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036122da577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b6000602082840312156122f357600080fd5b5051919050565b60005b838110156123155781810151838201526020016122fd565b83811115610d005750506000910152565b600082516123388184602087016122fa565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208152600082518060208401526123908160408501602087016122fa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e7edcd8c7b9333c2bbdd5f8fa69f1cd2cb0f5cbfa76648b9830bcf0cbfef288e64736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar SimpleAccountFactory__factory = /** @class */ (function (_super) {\n    __extends(SimpleAccountFactory__factory, _super);\n    function SimpleAccountFactory__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    SimpleAccountFactory__factory.prototype.deploy = function (_entryPoint, overrides) {\n        return _super.prototype.deploy.call(this, _entryPoint, overrides || {});\n    };\n    SimpleAccountFactory__factory.prototype.getDeployTransaction = function (_entryPoint, overrides) {\n        return _super.prototype.getDeployTransaction.call(this, _entryPoint, overrides || {});\n    };\n    SimpleAccountFactory__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    SimpleAccountFactory__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    SimpleAccountFactory__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    SimpleAccountFactory__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    SimpleAccountFactory__factory.bytecode = _bytecode;\n    SimpleAccountFactory__factory.abi = _abi;\n    return SimpleAccountFactory__factory;\n}(ethers_1.ContractFactory));\nexports.SimpleAccountFactory__factory = SimpleAccountFactory__factory;\n","\"use strict\";\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nexports.__esModule = true;\nexports.StakeManager__factory = void 0;\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"totalDeposit\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Deposited\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"totalStaked\",\n                type: \"uint256\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"unstakeDelaySec\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeLocked\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"withdrawTime\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeUnlocked\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"StakeWithdrawn\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"address\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Withdrawn\",\n        type: \"event\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint32\",\n                name: \"unstakeDelaySec\",\n                type: \"uint32\"\n            },\n        ],\n        name: \"addStake\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"balanceOf\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"depositTo\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        name: \"deposits\",\n        outputs: [\n            {\n                internalType: \"uint112\",\n                name: \"deposit\",\n                type: \"uint112\"\n            },\n            {\n                internalType: \"bool\",\n                name: \"staked\",\n                type: \"bool\"\n            },\n            {\n                internalType: \"uint112\",\n                name: \"stake\",\n                type: \"uint112\"\n            },\n            {\n                internalType: \"uint32\",\n                name: \"unstakeDelaySec\",\n                type: \"uint32\"\n            },\n            {\n                internalType: \"uint48\",\n                name: \"withdrawTime\",\n                type: \"uint48\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"getDepositInfo\",\n        outputs: [\n            {\n                components: [\n                    {\n                        internalType: \"uint112\",\n                        name: \"deposit\",\n                        type: \"uint112\"\n                    },\n                    {\n                        internalType: \"bool\",\n                        name: \"staked\",\n                        type: \"bool\"\n                    },\n                    {\n                        internalType: \"uint112\",\n                        name: \"stake\",\n                        type: \"uint112\"\n                    },\n                    {\n                        internalType: \"uint32\",\n                        name: \"unstakeDelaySec\",\n                        type: \"uint32\"\n                    },\n                    {\n                        internalType: \"uint48\",\n                        name: \"withdrawTime\",\n                        type: \"uint48\"\n                    },\n                ],\n                internalType: \"struct IStakeManager.DepositInfo\",\n                name: \"info\",\n                type: \"tuple\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"unlockStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n        ],\n        name: \"withdrawStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"withdrawAmount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        stateMutability: \"payable\",\n        type: \"receive\"\n    },\n];\nvar StakeManager__factory = /** @class */ (function () {\n    function StakeManager__factory() {\n    }\n    StakeManager__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    StakeManager__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    StakeManager__factory.abi = _abi;\n    return StakeManager__factory;\n}());\nexports.StakeManager__factory = StakeManager__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.TokenCallbackHandler__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256[]\",\n                name: \"\",\n                type: \"uint256[]\"\n            },\n            {\n                internalType: \"uint256[]\",\n                name: \"\",\n                type: \"uint256[]\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"onERC1155BatchReceived\",\n        outputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"\",\n                type: \"bytes4\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"onERC1155Received\",\n        outputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"\",\n                type: \"bytes4\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"onERC721Received\",\n        outputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"\",\n                type: \"bytes4\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"bytes4\",\n                name: \"interfaceId\",\n                type: \"bytes4\"\n            },\n        ],\n        name: \"supportsInterface\",\n        outputs: [\n            {\n                internalType: \"bool\",\n                name: \"\",\n                type: \"bool\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"tokensReceived\",\n        outputs: [],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n];\nvar _bytecode = \"0x608060405234801561001057600080fd5b506105d1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100665760003560e01c8063150b7a0211610050578063150b7a02146100ad578063bc197c8114610116578063f23a6e611461015157600080fd5b806223de291461006b57806301ffc9a714610085575b600080fd5b6100836100793660046102e1565b5050505050505050565b005b61009861009336600461038c565b61018a565b60405190151581526020015b60405180910390f35b6100e56100bb3660046103d5565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016100a4565b6100e5610124366004610489565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b6100e561015f366004610523565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000148061021d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061026957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461029357600080fd5b919050565b60008083601f8401126102aa57600080fd5b50813567ffffffffffffffff8111156102c257600080fd5b6020830191508360208285010111156102da57600080fd5b9250929050565b60008060008060008060008060c0898b0312156102fd57600080fd5b6103068961026f565b975061031460208a0161026f565b965061032260408a0161026f565b955060608901359450608089013567ffffffffffffffff8082111561034657600080fd5b6103528c838d01610298565b909650945060a08b013591508082111561036b57600080fd5b506103788b828c01610298565b999c989b5096995094979396929594505050565b60006020828403121561039e57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103ce57600080fd5b9392505050565b6000806000806000608086880312156103ed57600080fd5b6103f68661026f565b94506104046020870161026f565b935060408601359250606086013567ffffffffffffffff81111561042757600080fd5b61043388828901610298565b969995985093965092949392505050565b60008083601f84011261045657600080fd5b50813567ffffffffffffffff81111561046e57600080fd5b6020830191508360208260051b85010111156102da57600080fd5b60008060008060008060008060a0898b0312156104a557600080fd5b6104ae8961026f565b97506104bc60208a0161026f565b9650604089013567ffffffffffffffff808211156104d957600080fd5b6104e58c838d01610444565b909850965060608b01359150808211156104fe57600080fd5b61050a8c838d01610444565b909650945060808b013591508082111561036b57600080fd5b60008060008060008060a0878903121561053c57600080fd5b6105458761026f565b95506105536020880161026f565b94506040870135935060608701359250608087013567ffffffffffffffff81111561057d57600080fd5b61058989828a01610298565b979a969950949750929593949250505056fea264697066735822122030acf64c41b7bf1b77d9c21072e6997dd7ea3417f79c52629ba33d09d9681dda64736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar TokenCallbackHandler__factory = /** @class */ (function (_super) {\n    __extends(TokenCallbackHandler__factory, _super);\n    function TokenCallbackHandler__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    TokenCallbackHandler__factory.prototype.deploy = function (overrides) {\n        return _super.prototype.deploy.call(this, overrides || {});\n    };\n    TokenCallbackHandler__factory.prototype.getDeployTransaction = function (overrides) {\n        return _super.prototype.getDeployTransaction.call(this, overrides || {});\n    };\n    TokenCallbackHandler__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    TokenCallbackHandler__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    TokenCallbackHandler__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    TokenCallbackHandler__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    TokenCallbackHandler__factory.bytecode = _bytecode;\n    TokenCallbackHandler__factory.abi = _abi;\n    return TokenCallbackHandler__factory;\n}(ethers_1.ContractFactory));\nexports.TokenCallbackHandler__factory = TokenCallbackHandler__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.TokenPaymaster__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"accountFactory\",\n                type: \"address\"\n            },\n            {\n                internalType: \"string\",\n                name: \"_symbol\",\n                type: \"string\"\n            },\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"_entryPoint\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"constructor\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"owner\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"spender\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Approval\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"previousOwner\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"newOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"OwnershipTransferred\",\n        type: \"event\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"from\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"to\",\n                type: \"address\"\n            },\n            {\n                indexed: false,\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"Transfer\",\n        type: \"event\"\n    },\n    {\n        inputs: [],\n        name: \"COST_OF_POST\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint32\",\n                name: \"unstakeDelaySec\",\n                type: \"uint32\"\n            },\n        ],\n        name: \"addStake\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"owner\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"spender\",\n                type: \"address\"\n            },\n        ],\n        name: \"allowance\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"spender\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"approve\",\n        outputs: [\n            {\n                internalType: \"bool\",\n                name: \"\",\n                type: \"bool\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"account\",\n                type: \"address\"\n            },\n        ],\n        name: \"balanceOf\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"decimals\",\n        outputs: [\n            {\n                internalType: \"uint8\",\n                name: \"\",\n                type: \"uint8\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"spender\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"subtractedValue\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"decreaseAllowance\",\n        outputs: [\n            {\n                internalType: \"bool\",\n                name: \"\",\n                type: \"bool\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"deposit\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"entryPoint\",\n        outputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getDeposit\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"spender\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"addedValue\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"increaseAllowance\",\n        outputs: [\n            {\n                internalType: \"bool\",\n                name: \"\",\n                type: \"bool\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"mintTokens\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"name\",\n        outputs: [\n            {\n                internalType: \"string\",\n                name: \"\",\n                type: \"string\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"owner\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"enum IPaymaster.PostOpMode\",\n                name: \"mode\",\n                type: \"uint8\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"actualGasCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"postOp\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"renounceOwnership\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"symbol\",\n        outputs: [\n            {\n                internalType: \"string\",\n                name: \"\",\n                type: \"string\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"theFactory\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"totalSupply\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"to\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"transfer\",\n        outputs: [\n            {\n                internalType: \"bool\",\n                name: \"\",\n                type: \"bool\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"from\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"to\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"transferFrom\",\n        outputs: [\n            {\n                internalType: \"bool\",\n                name: \"\",\n                type: \"bool\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"newOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"transferOwnership\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"unlockStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"maxCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validatePaymasterUserOp\",\n        outputs: [\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n        ],\n        name: \"withdrawStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar _bytecode = \"0x60c06040523480156200001157600080fd5b506040516200224438038062002244833981016040819052620000349162000327565b8180826200004233620000a0565b6001600160a01b031660805260046200005c8382620004bc565b5060056200006b8282620004bc565b5050506001600160a01b03831660a05262000088306001620000f0565b620000973033600019620001b9565b505050620005af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166200014c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b806003600082825462000160919062000588565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166200021d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000143565b6001600160a01b038216620002805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000143565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b6001600160a01b0381168114620002fc57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200032281620002e6565b919050565b6000806000606084860312156200033d57600080fd5b83516200034a81620002e6565b602085810151919450906001600160401b03808211156200036a57600080fd5b818701915087601f8301126200037f57600080fd5b815181811115620003945762000394620002ff565b604051601f8201601f19908116603f01168101908382118183101715620003bf57620003bf620002ff565b816040528281528a86848701011115620003d857600080fd5b600093505b82841015620003fc5784840186015181850187015292850192620003dd565b828411156200040e5760008684830101525b809750505050505050620004256040850162000315565b90509250925092565b600181811c908216806200044357607f821691505b6020821081036200046457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002e157600081815260208120601f850160051c81016020861015620004935750805b601f850160051c820191505b81811015620004b4578281556001016200049f565b505050505050565b81516001600160401b03811115620004d857620004d8620002ff565b620004f081620004e984546200042e565b846200046a565b602080601f8311600181146200052857600084156200050f5750858301515b600019600386901b1c1916600185901b178555620004b4565b600085815260208120601f198616915b82811015620005595788860151825594840194600190910190840162000538565b5085821015620005785787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008219821115620005aa57634e487b7160e01b600052601160045260246000fd5b500190565b60805160a051611c376200060d6000396000818161039201526116fa015260008181610426015281816105970152818161070b015281816108ea015281816109b101528181610a4101528181610af401526111f80152611c376000f3fe6080604052600436106101a15760003560e01c80639f5ca221116100e1578063c23a5cea1161008a578063dd62ed3e11610064578063dd62ed3e1461049a578063f0dda65c146104ed578063f2fde38b1461050d578063f465c77e1461052d57600080fd5b8063c23a5cea1461045d578063c399ec881461047d578063d0e30db01461049257600080fd5b8063a9a23409116100bb578063a9a23409146103f4578063b0d691fe14610414578063bb9fe6bf1461044857600080fd5b80639f5ca22114610380578063a457c2d7146103b4578063a9059cbb146103d457600080fd5b8063313ce5671161014e578063715018a611610128578063715018a6146102f4578063796d4371146103095780638da5cb5b1461031f57806395d89b411461036b57600080fd5b8063313ce56714610275578063395093511461029157806370a08231146102b157600080fd5b806318160ddd1161017f57806318160ddd14610216578063205c28781461023557806323b872dd1461025557600080fd5b80630396cb60146101a657806306fdde03146101bb578063095ea7b3146101e6575b600080fd5b6101b96101b43660046117a8565b61055b565b005b3480156101c757600080fd5b506101d061060d565b6040516101dd9190611840565b60405180910390f35b3480156101f257600080fd5b50610206610201366004611875565b61069f565b60405190151581526020016101dd565b34801561022257600080fd5b506003545b6040519081526020016101dd565b34801561024157600080fd5b506101b9610250366004611875565b6106b7565b34801561026157600080fd5b506102066102703660046118a1565b61074f565b34801561028157600080fd5b50604051601281526020016101dd565b34801561029d57600080fd5b506102066102ac366004611875565b610773565b3480156102bd57600080fd5b506102276102cc3660046118e2565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561030057600080fd5b506101b96107bf565b34801561031557600080fd5b50610227613a9881565b34801561032b57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101dd565b34801561037757600080fd5b506101d06107d3565b34801561038c57600080fd5b506103467f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c057600080fd5b506102066103cf366004611875565b6107e2565b3480156103e057600080fd5b506102066103ef366004611875565b6108b8565b34801561040057600080fd5b506101b961040f3660046118ff565b6108c6565b34801561042057600080fd5b506103467f000000000000000000000000000000000000000000000000000000000000000081565b34801561045457600080fd5b506101b96108e0565b34801561046957600080fd5b506101b96104783660046118e2565b610964565b34801561048957600080fd5b50610227610a10565b6101b9610ac6565b3480156104a657600080fd5b506102276104b536600461198e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b3480156104f957600080fd5b506101b9610508366004611875565b610b4e565b34801561051957600080fd5b506101b96105283660046118e2565b610b64565b34801561053957600080fd5b5061054d6105483660046119c7565b610bcd565b6040516101dd929190611a1b565b610563610bf0565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b1580156105f157600080fd5b505af1158015610605573d6000803e3d6000fd5b505050505050565b60606004805461061c90611a3d565b80601f016020809104026020016040519081016040528092919081815260200182805461064890611a3d565b80156106955780601f1061066a57610100808354040283529160200191610695565b820191906000526020600020905b81548152906001019060200180831161067857829003601f168201915b5050505050905090565b6000336106ad818585610c71565b5060019392505050565b6106bf610bf0565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b1580156105f157600080fd5b60003361075d858285610e24565b610768858585610ef5565b506001949350505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906106ad90829086906107ba908790611a90565b610c71565b6107c7610bf0565b6107d1600061116b565b565b60606005805461061c90611a3d565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156108ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107688286868403610c71565b6000336106ad818585610ef5565b6108ce6111e0565b6108da8484848461127f565b50505050565b6108e8610bf0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561095057600080fd5b505af11580156108da573d6000803e3d6000fd5b61096c610bf0565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b1580156109f557600080fd5b505af1158015610a09573d6000803e3d6000fd5b5050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac19190611acf565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b1580156109f557600080fd5b610b56610bf0565b610b6082826112b2565b5050565b610b6c610bf0565b610b9630610b8f60005473ffffffffffffffffffffffffffffffffffffffff1690565b6000610c71565b610b9f816113a7565b610bca30827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610c71565b50565b60606000610bd96111e0565b610be485858561145b565b91509150935093915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a2565b73ffffffffffffffffffffffffffffffffffffffff8316610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108a2565b73ffffffffffffffffffffffffffffffffffffffff8216610db6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016108a2565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600260209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108da5781811015610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108a2565b6108da8484848403610c71565b73ffffffffffffffffffffffffffffffffffffffff8316610f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108a2565b73ffffffffffffffffffffffffffffffffffffffff821661103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016108a2565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054818110156110f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016108a2565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061115e9086815260200190565b60405180910390a36108da565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146107d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e74000000000000000000000060448201526064016108a2565b600061128d838501856118e2565b905060006112a56112a0613a9885611a90565b6116a4565b9050610605823083610ef5565b73ffffffffffffffffffffffffffffffffffffffff821661132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108a2565b80600360008282546113419190611a90565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6113af610bf0565b73ffffffffffffffffffffffffffffffffffffffff8116611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108a2565b610bca8161116b565b6060600080611469846116a4565b9050613a988660a0013511611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f546f6b656e5061796d61737465723a2067617320746f6f206c6f7720666f722060448201527f706f73744f70000000000000000000000000000000000000000000000000000060648201526084016108a2565b61150d6040870187611ae8565b1590506115c15761151d866116b7565b8061152e6102cc60208901896118e2565b10156115bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e5061796d61737465723a206e6f2062616c616e636520287072652d60448201527f637265617465290000000000000000000000000000000000000000000000000060648201526084016108a2565b61163a565b806115d26102cc60208901896118e2565b101561163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f546f6b656e5061796d61737465723a206e6f2062616c616e636500000000000060448201526064016108a2565b61164760208701876118e2565b6040805173ffffffffffffffffffffffffffffffffffffffff909216602083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529660009650945050505050565b60006116b1606483611b54565b92915050565b60006116c66040830183611ae8565b6116d591601491600091611b8f565b6116de91611bb9565b60601c905073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168114610b60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f546f6b656e5061796d61737465723a2077726f6e67206163636f756e7420666160448201527f63746f727900000000000000000000000000000000000000000000000000000060648201526084016108a2565b6000602082840312156117ba57600080fd5b813563ffffffff811681146117ce57600080fd5b9392505050565b6000815180845260005b818110156117fb576020818501810151868301820152016117df565b8181111561180d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117ce60208301846117d5565b73ffffffffffffffffffffffffffffffffffffffff81168114610bca57600080fd5b6000806040838503121561188857600080fd5b823561189381611853565b946020939093013593505050565b6000806000606084860312156118b657600080fd5b83356118c181611853565b925060208401356118d181611853565b929592945050506040919091013590565b6000602082840312156118f457600080fd5b81356117ce81611853565b6000806000806060858703121561191557600080fd5b84356003811061192457600080fd5b9350602085013567ffffffffffffffff8082111561194157600080fd5b818701915087601f83011261195557600080fd5b81358181111561196457600080fd5b88602082850101111561197657600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156119a157600080fd5b82356119ac81611853565b915060208301356119bc81611853565b809150509250929050565b6000806000606084860312156119dc57600080fd5b833567ffffffffffffffff8111156119f357600080fd5b84016101608187031215611a0657600080fd5b95602085013595506040909401359392505050565b604081526000611a2e60408301856117d5565b90508260208301529392505050565b600181811c90821680611a5157607f821691505b602082108103611a8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115611aca577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b600060208284031215611ae157600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b1d57600080fd5b83018035915067ffffffffffffffff821115611b3857600080fd5b602001915036819003821315611b4d57600080fd5b9250929050565b600082611b8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008085851115611b9f57600080fd5b83861115611bac57600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008135818116916014851015611bf95780818660140360031b1b83161692505b50509291505056fea2646970667358221220dfdc8beeba6f7bd348dd4714b66158c03f7be31ff6617424db8528c77a85ae7664736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar TokenPaymaster__factory = /** @class */ (function (_super) {\n    __extends(TokenPaymaster__factory, _super);\n    function TokenPaymaster__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    TokenPaymaster__factory.prototype.deploy = function (accountFactory, _symbol, _entryPoint, overrides) {\n        return _super.prototype.deploy.call(this, accountFactory, _symbol, _entryPoint, overrides || {});\n    };\n    TokenPaymaster__factory.prototype.getDeployTransaction = function (accountFactory, _symbol, _entryPoint, overrides) {\n        return _super.prototype.getDeployTransaction.call(this, accountFactory, _symbol, _entryPoint, overrides || {});\n    };\n    TokenPaymaster__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    TokenPaymaster__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    TokenPaymaster__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    TokenPaymaster__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    TokenPaymaster__factory.bytecode = _bytecode;\n    TokenPaymaster__factory.abi = _abi;\n    return TokenPaymaster__factory;\n}(ethers_1.ContractFactory));\nexports.TokenPaymaster__factory = TokenPaymaster__factory;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.VerifyingPaymaster__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar ethers_1 = require(\"ethers\");\nvar _abi = [\n    {\n        inputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"_entryPoint\",\n                type: \"address\"\n            },\n            {\n                internalType: \"address\",\n                name: \"_verifyingSigner\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"constructor\"\n    },\n    {\n        anonymous: false,\n        inputs: [\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"previousOwner\",\n                type: \"address\"\n            },\n            {\n                indexed: true,\n                internalType: \"address\",\n                name: \"newOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"OwnershipTransferred\",\n        type: \"event\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"uint32\",\n                name: \"unstakeDelaySec\",\n                type: \"uint32\"\n            },\n        ],\n        name: \"addStake\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"deposit\",\n        outputs: [],\n        stateMutability: \"payable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"entryPoint\",\n        outputs: [\n            {\n                internalType: \"contract IEntryPoint\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"getDeposit\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"uint48\",\n                name: \"validUntil\",\n                type: \"uint48\"\n            },\n            {\n                internalType: \"uint48\",\n                name: \"validAfter\",\n                type: \"uint48\"\n            },\n        ],\n        name: \"getHash\",\n        outputs: [\n            {\n                internalType: \"bytes32\",\n                name: \"\",\n                type: \"bytes32\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"owner\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"bytes\",\n                name: \"paymasterAndData\",\n                type: \"bytes\"\n            },\n        ],\n        name: \"parsePaymasterAndData\",\n        outputs: [\n            {\n                internalType: \"uint48\",\n                name: \"validUntil\",\n                type: \"uint48\"\n            },\n            {\n                internalType: \"uint48\",\n                name: \"validAfter\",\n                type: \"uint48\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"signature\",\n                type: \"bytes\"\n            },\n        ],\n        stateMutability: \"pure\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"enum IPaymaster.PostOpMode\",\n                name: \"mode\",\n                type: \"uint8\"\n            },\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"actualGasCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"postOp\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"renounceOwnership\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        name: \"senderNonce\",\n        outputs: [\n            {\n                internalType: \"uint256\",\n                name: \"\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address\",\n                name: \"newOwner\",\n                type: \"address\"\n            },\n        ],\n        name: \"transferOwnership\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"unlockStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                components: [\n                    {\n                        internalType: \"address\",\n                        name: \"sender\",\n                        type: \"address\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"nonce\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"initCode\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"callData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"callGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"verificationGasLimit\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"preVerificationGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"uint256\",\n                        name: \"maxPriorityFeePerGas\",\n                        type: \"uint256\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"paymasterAndData\",\n                        type: \"bytes\"\n                    },\n                    {\n                        internalType: \"bytes\",\n                        name: \"signature\",\n                        type: \"bytes\"\n                    },\n                ],\n                internalType: \"struct UserOperation\",\n                name: \"userOp\",\n                type: \"tuple\"\n            },\n            {\n                internalType: \"bytes32\",\n                name: \"userOpHash\",\n                type: \"bytes32\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"maxCost\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"validatePaymasterUserOp\",\n        outputs: [\n            {\n                internalType: \"bytes\",\n                name: \"context\",\n                type: \"bytes\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"validationData\",\n                type: \"uint256\"\n            },\n        ],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [],\n        name: \"verifyingSigner\",\n        outputs: [\n            {\n                internalType: \"address\",\n                name: \"\",\n                type: \"address\"\n            },\n        ],\n        stateMutability: \"view\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n        ],\n        name: \"withdrawStake\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n    {\n        inputs: [\n            {\n                internalType: \"address payable\",\n                name: \"withdrawAddress\",\n                type: \"address\"\n            },\n            {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\"\n            },\n        ],\n        name: \"withdrawTo\",\n        outputs: [],\n        stateMutability: \"nonpayable\",\n        type: \"function\"\n    },\n];\nvar _bytecode = \"0x60c06040523480156200001157600080fd5b5060405162001723380380620017238339810160408190526200003491620000c2565b81620000403362000059565b6001600160a01b039081166080521660a0525062000101565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000bf57600080fd5b50565b60008060408385031215620000d657600080fd5b8251620000e381620000a9565b6020840151909250620000f681620000a9565b809150509250929050565b60805160a0516115c46200015f6000396000818161013f0152610ca20152600081816102880152818161038601528181610450015281816105730152818161063a015281816106ca0152818161077d0152610a0401526115c46000f3fe6080604052600436106100f35760003560e01c8063a9a234091161008a578063c399ec8811610059578063c399ec88146102df578063d0e30db0146102f4578063f2fde38b146102fc578063f465c77e1461031c57600080fd5b8063a9a2340914610256578063b0d691fe14610276578063bb9fe6bf146102aa578063c23a5cea146102bf57600080fd5b80638da5cb5b116100c65780638da5cb5b146101a057806394d4ad60146101cb57806394e1fc19146101fb5780639c90b4431461022957600080fd5b80630396cb60146100f8578063205c28781461010d57806323d9ac9b1461012d578063715018a61461018b575b600080fd5b61010b610106366004611075565b61034a565b005b34801561011957600080fd5b5061010b6101283660046110c4565b6103fc565b34801561013957600080fd5b506101617f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561019757600080fd5b5061010b610494565b3480156101ac57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610161565b3480156101d757600080fd5b506101eb6101e6366004611132565b6104a8565b6040516101829493929190611174565b34801561020757600080fd5b5061021b610216366004611212565b6104e5565b604051908152602001610182565b34801561023557600080fd5b5061021b610244366004611270565b60016020526000908152604090205481565b34801561026257600080fd5b5061010b61027136600461128d565b61054f565b34801561028257600080fd5b506101617f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b657600080fd5b5061010b610569565b3480156102cb57600080fd5b5061010b6102da366004611270565b6105ed565b3480156102eb57600080fd5b5061021b610699565b61010b61074f565b34801561030857600080fd5b5061010b610317366004611270565b6107d7565b34801561032857600080fd5b5061033c6103373660046112ed565b610893565b6040516101829291906113a6565b6103526108b7565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b1580156103e057600080fd5b505af11580156103f4573d6000803e3d6000fd5b505050505050565b6104046108b7565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b1580156103e057600080fd5b61049c6108b7565b6104a66000610938565b565b60008036816104bb6054601487896113c8565b8101906104c891906113f2565b90945092506104da85605481896113c8565b949793965094505050565b60006104f0846109ad565b73ffffffffffffffffffffffffffffffffffffffff8535166000908152600160209081526040918290205491516105309392469230928991899101611425565b6040516020818303038152906040528051906020012090509392505050565b6105576109ec565b61056384848484610a8b565b50505050565b6105716108b7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105d957600080fd5b505af1158015610563573d6000803e3d6000fd5b6105f56108b7565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b5050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074a9190611482565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b15801561067e57600080fd5b6107df6108b7565b73ffffffffffffffffffffffffffffffffffffffff8116610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61089081610938565b50565b6060600061089f6109ec565b6108aa858585610aed565b915091505b935093915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161087e565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60603660006109c061012085018561149b565b915091508360208184030360405194506020810185016040528085528082602087013750505050919050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146104a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e740000000000000000000000604482015260640161087e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6d757374206f7665727269646500000000000000000000000000000000000000604482015260640161087e565b6060600080803681610b066101e66101208b018b61149b565b929650909450925090506040811480610b1f5750604181145b610bad57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f566572696679696e675061796d61737465723a20696e76616c6964207369676e60448201527f6174757265206c656e67746820696e207061796d6173746572416e6444617461606482015260840161087e565b6000610c10610bbd8b87876104e5565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff8b35166000908152600160205260408120805492935090610c4583611500565b9190505550610c8a8184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d3292505050565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d0757610ce860018686610d56565b60405180602001604052806000815250909650965050505050506108af565b610d1360008686610d56565b6040805160208101909152600081529b909a5098505050505050505050565b6000806000610d418585610d8e565b91509150610d4e81610dd3565b509392505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85610d7e576000610d81565b60015b60ff161717949350505050565b6000808251604103610dc45760208301516040840151606085015160001a610db887828585610f86565b94509450505050610dcc565b506000905060025b9250929050565b6000816004811115610de757610de761155f565b03610def5750565b6001816004811115610e0357610e0361155f565b03610e6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161087e565b6002816004811115610e7e57610e7e61155f565b03610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161087e565b6003816004811115610ef957610ef961155f565b03610890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161087e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610fbd575060009050600361106c565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611011573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166110655760006001925092505061106c565b9150600090505b94509492505050565b60006020828403121561108757600080fd5b813563ffffffff8116811461109b57600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461089057600080fd5b600080604083850312156110d757600080fd5b82356110e2816110a2565b946020939093013593505050565b60008083601f84011261110257600080fd5b50813567ffffffffffffffff81111561111a57600080fd5b602083019150836020828501011115610dcc57600080fd5b6000806020838503121561114557600080fd5b823567ffffffffffffffff81111561115c57600080fd5b611168858286016110f0565b90969095509350505050565b600065ffffffffffff8087168352808616602084015250606060408301528260608301528284608084013760006080848401015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116830101905095945050505050565b600061016082840312156111f157600080fd5b50919050565b803565ffffffffffff8116811461120d57600080fd5b919050565b60008060006060848603121561122757600080fd5b833567ffffffffffffffff81111561123e57600080fd5b61124a868287016111de565b935050611259602085016111f7565b9150611267604085016111f7565b90509250925092565b60006020828403121561128257600080fd5b813561109b816110a2565b600080600080606085870312156112a357600080fd5b8435600381106112b257600080fd5b9350602085013567ffffffffffffffff8111156112ce57600080fd5b6112da878288016110f0565b9598909750949560400135949350505050565b60008060006060848603121561130257600080fd5b833567ffffffffffffffff81111561131957600080fd5b611325868287016111de565b9660208601359650604090950135949350505050565b6000815180845260005b8181101561136157602081850181015186830182015201611345565b81811115611373576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6040815260006113b9604083018561133b565b90508260208301529392505050565b600080858511156113d857600080fd5b838611156113e557600080fd5b5050820193919092039150565b6000806040838503121561140557600080fd5b61140e836111f7565b915061141c602084016111f7565b90509250929050565b60c08152600061143860c083018961133b565b60208301979097525073ffffffffffffffffffffffffffffffffffffffff949094166040850152606084019290925265ffffffffffff90811660808401521660a090910152919050565b60006020828403121561149457600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126114d057600080fd5b83018035915067ffffffffffffffff8211156114eb57600080fd5b602001915036819003821315610dcc57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611558577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea264697066735822122056694a0f8516f09e33000ee7cca7b7c7c726d389f6b102f7392626a3678c862d64736f6c634300080f0033\";\nvar isSuperArgs = function (xs) { return xs.length > 1; };\nvar VerifyingPaymaster__factory = /** @class */ (function (_super) {\n    __extends(VerifyingPaymaster__factory, _super);\n    function VerifyingPaymaster__factory() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var _this = this;\n        if (isSuperArgs(args)) {\n            _this = _super.apply(this, args) || this;\n        }\n        else {\n            _this = _super.call(this, _abi, _bytecode, args[0]) || this;\n        }\n        return _this;\n    }\n    VerifyingPaymaster__factory.prototype.deploy = function (_entryPoint, _verifyingSigner, overrides) {\n        return _super.prototype.deploy.call(this, _entryPoint, _verifyingSigner, overrides || {});\n    };\n    VerifyingPaymaster__factory.prototype.getDeployTransaction = function (_entryPoint, _verifyingSigner, overrides) {\n        return _super.prototype.getDeployTransaction.call(this, _entryPoint, _verifyingSigner, overrides || {});\n    };\n    VerifyingPaymaster__factory.prototype.attach = function (address) {\n        return _super.prototype.attach.call(this, address);\n    };\n    VerifyingPaymaster__factory.prototype.connect = function (signer) {\n        return _super.prototype.connect.call(this, signer);\n    };\n    VerifyingPaymaster__factory.createInterface = function () {\n        return new ethers_1.utils.Interface(_abi);\n    };\n    VerifyingPaymaster__factory.connect = function (address, signerOrProvider) {\n        return new ethers_1.Contract(address, _abi, signerOrProvider);\n    };\n    VerifyingPaymaster__factory.bytecode = _bytecode;\n    VerifyingPaymaster__factory.abi = _abi;\n    return VerifyingPaymaster__factory;\n}(ethers_1.ContractFactory));\nexports.VerifyingPaymaster__factory = VerifyingPaymaster__factory;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nexports.__esModule = true;\nexports.VerifyingPaymaster__factory = exports.TokenPaymaster__factory = exports.TokenCallbackHandler__factory = exports.StakeManager__factory = exports.SimpleAccountFactory__factory = exports.SimpleAccount__factory = exports.SenderCreator__factory = exports.NonceManager__factory = exports.MaliciousAccount__factory = exports.IStakeManager__factory = exports.IPaymaster__factory = exports.INonceManager__factory = exports.IEntryPoint__factory = exports.IAggregator__factory = exports.IAccount__factory = exports.EntryPoint__factory = exports.DepositPaymaster__factory = exports.BrokenBLSAccountFactory__factory = exports.BrokenBLSAccount__factory = exports.BasePaymaster__factory = exports.BaseAccount__factory = void 0;\n/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nvar BaseAccount__factory_1 = require(\"./BaseAccount__factory\");\n__createBinding(exports, BaseAccount__factory_1, \"BaseAccount__factory\");\nvar BasePaymaster__factory_1 = require(\"./BasePaymaster__factory\");\n__createBinding(exports, BasePaymaster__factory_1, \"BasePaymaster__factory\");\nvar BrokenBLSAccount__factory_1 = require(\"./BrokenBLSAccount__factory\");\n__createBinding(exports, BrokenBLSAccount__factory_1, \"BrokenBLSAccount__factory\");\nvar BrokenBLSAccountFactory__factory_1 = require(\"./BrokenBLSAccountFactory__factory\");\n__createBinding(exports, BrokenBLSAccountFactory__factory_1, \"BrokenBLSAccountFactory__factory\");\nvar DepositPaymaster__factory_1 = require(\"./DepositPaymaster__factory\");\n__createBinding(exports, DepositPaymaster__factory_1, \"DepositPaymaster__factory\");\nvar EntryPoint__factory_1 = require(\"./EntryPoint__factory\");\n__createBinding(exports, EntryPoint__factory_1, \"EntryPoint__factory\");\nvar IAccount__factory_1 = require(\"./IAccount__factory\");\n__createBinding(exports, IAccount__factory_1, \"IAccount__factory\");\nvar IAggregator__factory_1 = require(\"./IAggregator__factory\");\n__createBinding(exports, IAggregator__factory_1, \"IAggregator__factory\");\nvar IEntryPoint__factory_1 = require(\"./IEntryPoint__factory\");\n__createBinding(exports, IEntryPoint__factory_1, \"IEntryPoint__factory\");\nvar INonceManager__factory_1 = require(\"./INonceManager__factory\");\n__createBinding(exports, INonceManager__factory_1, \"INonceManager__factory\");\nvar IPaymaster__factory_1 = require(\"./IPaymaster__factory\");\n__createBinding(exports, IPaymaster__factory_1, \"IPaymaster__factory\");\nvar IStakeManager__factory_1 = require(\"./IStakeManager__factory\");\n__createBinding(exports, IStakeManager__factory_1, \"IStakeManager__factory\");\nvar MaliciousAccount__factory_1 = require(\"./MaliciousAccount__factory\");\n__createBinding(exports, MaliciousAccount__factory_1, \"MaliciousAccount__factory\");\nvar NonceManager__factory_1 = require(\"./NonceManager__factory\");\n__createBinding(exports, NonceManager__factory_1, \"NonceManager__factory\");\nvar SenderCreator__factory_1 = require(\"./SenderCreator__factory\");\n__createBinding(exports, SenderCreator__factory_1, \"SenderCreator__factory\");\nvar SimpleAccount__factory_1 = require(\"./SimpleAccount__factory\");\n__createBinding(exports, SimpleAccount__factory_1, \"SimpleAccount__factory\");\nvar SimpleAccountFactory__factory_1 = require(\"./SimpleAccountFactory__factory\");\n__createBinding(exports, SimpleAccountFactory__factory_1, \"SimpleAccountFactory__factory\");\nvar StakeManager__factory_1 = require(\"./StakeManager__factory\");\n__createBinding(exports, StakeManager__factory_1, \"StakeManager__factory\");\nvar TokenCallbackHandler__factory_1 = require(\"./TokenCallbackHandler__factory\");\n__createBinding(exports, TokenCallbackHandler__factory_1, \"TokenCallbackHandler__factory\");\nvar TokenPaymaster__factory_1 = require(\"./TokenPaymaster__factory\");\n__createBinding(exports, TokenPaymaster__factory_1, \"TokenPaymaster__factory\");\nvar VerifyingPaymaster__factory_1 = require(\"./VerifyingPaymaster__factory\");\n__createBinding(exports, VerifyingPaymaster__factory_1, \"VerifyingPaymaster__factory\");\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nexports.__esModule = true;\nexports.VerifyingPaymaster__factory = exports.TokenPaymaster__factory = exports.TokenCallbackHandler__factory = exports.StakeManager__factory = exports.SimpleAccountFactory__factory = exports.SimpleAccount__factory = exports.SenderCreator__factory = exports.NonceManager__factory = exports.MaliciousAccount__factory = exports.IStakeManager__factory = exports.IPaymaster__factory = exports.INonceManager__factory = exports.IEntryPoint__factory = exports.IAggregator__factory = exports.IAccount__factory = exports.EntryPoint__factory = exports.DepositPaymaster__factory = exports.BrokenBLSAccountFactory__factory = exports.BrokenBLSAccount__factory = exports.BasePaymaster__factory = exports.BaseAccount__factory = exports.factories = void 0;\nexports.factories = require(\"./factories\");\nvar BaseAccount__factory_1 = require(\"./factories/BaseAccount__factory\");\n__createBinding(exports, BaseAccount__factory_1, \"BaseAccount__factory\");\nvar BasePaymaster__factory_1 = require(\"./factories/BasePaymaster__factory\");\n__createBinding(exports, BasePaymaster__factory_1, \"BasePaymaster__factory\");\nvar BrokenBLSAccount__factory_1 = require(\"./factories/BrokenBLSAccount__factory\");\n__createBinding(exports, BrokenBLSAccount__factory_1, \"BrokenBLSAccount__factory\");\nvar BrokenBLSAccountFactory__factory_1 = require(\"./factories/BrokenBLSAccountFactory__factory\");\n__createBinding(exports, BrokenBLSAccountFactory__factory_1, \"BrokenBLSAccountFactory__factory\");\nvar DepositPaymaster__factory_1 = require(\"./factories/DepositPaymaster__factory\");\n__createBinding(exports, DepositPaymaster__factory_1, \"DepositPaymaster__factory\");\nvar EntryPoint__factory_1 = require(\"./factories/EntryPoint__factory\");\n__createBinding(exports, EntryPoint__factory_1, \"EntryPoint__factory\");\nvar IAccount__factory_1 = require(\"./factories/IAccount__factory\");\n__createBinding(exports, IAccount__factory_1, \"IAccount__factory\");\nvar IAggregator__factory_1 = require(\"./factories/IAggregator__factory\");\n__createBinding(exports, IAggregator__factory_1, \"IAggregator__factory\");\nvar IEntryPoint__factory_1 = require(\"./factories/IEntryPoint__factory\");\n__createBinding(exports, IEntryPoint__factory_1, \"IEntryPoint__factory\");\nvar INonceManager__factory_1 = require(\"./factories/INonceManager__factory\");\n__createBinding(exports, INonceManager__factory_1, \"INonceManager__factory\");\nvar IPaymaster__factory_1 = require(\"./factories/IPaymaster__factory\");\n__createBinding(exports, IPaymaster__factory_1, \"IPaymaster__factory\");\nvar IStakeManager__factory_1 = require(\"./factories/IStakeManager__factory\");\n__createBinding(exports, IStakeManager__factory_1, \"IStakeManager__factory\");\nvar MaliciousAccount__factory_1 = require(\"./factories/MaliciousAccount__factory\");\n__createBinding(exports, MaliciousAccount__factory_1, \"MaliciousAccount__factory\");\nvar NonceManager__factory_1 = require(\"./factories/NonceManager__factory\");\n__createBinding(exports, NonceManager__factory_1, \"NonceManager__factory\");\nvar SenderCreator__factory_1 = require(\"./factories/SenderCreator__factory\");\n__createBinding(exports, SenderCreator__factory_1, \"SenderCreator__factory\");\nvar SimpleAccount__factory_1 = require(\"./factories/SimpleAccount__factory\");\n__createBinding(exports, SimpleAccount__factory_1, \"SimpleAccount__factory\");\nvar SimpleAccountFactory__factory_1 = require(\"./factories/SimpleAccountFactory__factory\");\n__createBinding(exports, SimpleAccountFactory__factory_1, \"SimpleAccountFactory__factory\");\nvar StakeManager__factory_1 = require(\"./factories/StakeManager__factory\");\n__createBinding(exports, StakeManager__factory_1, \"StakeManager__factory\");\nvar TokenCallbackHandler__factory_1 = require(\"./factories/TokenCallbackHandler__factory\");\n__createBinding(exports, TokenCallbackHandler__factory_1, \"TokenCallbackHandler__factory\");\nvar TokenPaymaster__factory_1 = require(\"./factories/TokenPaymaster__factory\");\n__createBinding(exports, TokenPaymaster__factory_1, \"TokenPaymaster__factory\");\nvar VerifyingPaymaster__factory_1 = require(\"./factories/VerifyingPaymaster__factory\");\n__createBinding(exports, VerifyingPaymaster__factory_1, \"VerifyingPaymaster__factory\");\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nexports.__esModule = true;\n__exportStar(require(\"./types\"), exports);\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../common\";\nimport type { Kernel, KernelInterface } from \"../Kernel\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEntryPoint\",\n        name: \"_entryPoint\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyInitialized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DisabledMode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotAuthorizedCaller\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotEntryPoint\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"oldValidator\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"newValidator\",\n        type: \"address\",\n      },\n    ],\n    name: \"DefaultValidatorChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes4\",\n        name: \"selector\",\n        type: \"bytes4\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"executor\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"validator\",\n        type: \"address\",\n      },\n    ],\n    name: \"ExecutionChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"fallback\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"_disableFlag\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"disableMode\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"entryPoint\",\n    outputs: [\n      {\n        internalType: \"contract IEntryPoint\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n      {\n        internalType: \"enum Operation\",\n        name: \"operation\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"execute\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address[]\",\n        name: \"dest\",\n        type: \"address[]\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"values\",\n        type: \"uint256[]\",\n      },\n      {\n        internalType: \"bytes[]\",\n        name: \"func\",\n        type: \"bytes[]\",\n      },\n      {\n        internalType: \"enum Operation\",\n        name: \"operation\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"executeBatch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDefaultValidator\",\n    outputs: [\n      {\n        internalType: \"contract IKernelValidator\",\n        name: \"validator\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDisabledMode\",\n    outputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"disabled\",\n        type: \"bytes4\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"_selector\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"getExecution\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"ValidAfter\",\n            name: \"validAfter\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"ValidUntil\",\n            name: \"validUntil\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"address\",\n            name: \"executor\",\n            type: \"address\",\n          },\n          {\n            internalType: \"contract IKernelValidator\",\n            name: \"validator\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct ExecutionDetail\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getLastDisabledTime\",\n    outputs: [\n      {\n        internalType: \"uint48\",\n        name: \"\",\n        type: \"uint48\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint192\",\n        name: \"key\",\n        type: \"uint192\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IKernelValidator\",\n        name: \"_defaultValidator\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"_data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"hash\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"signature\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"isValidSignature\",\n    outputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"\",\n        type: \"bytes4\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"name\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"onERC1155BatchReceived\",\n    outputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"\",\n        type: \"bytes4\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"onERC1155Received\",\n    outputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"\",\n        type: \"bytes4\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"onERC721Received\",\n    outputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"\",\n        type: \"bytes4\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IKernelValidator\",\n        name: \"_defaultValidator\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"_data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"setDefaultValidator\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"_selector\",\n        type: \"bytes4\",\n      },\n      {\n        internalType: \"address\",\n        name: \"_executor\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract IKernelValidator\",\n        name: \"_validator\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint48\",\n        name: \"_validUntil\",\n        type: \"uint48\",\n      },\n      {\n        internalType: \"uint48\",\n        name: \"_validAfter\",\n        type: \"uint48\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"_enableData\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"setExecution\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"_newImplementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"upgradeTo\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"sender\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"nonce\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"initCode\",\n            type: \"bytes\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"callData\",\n            type: \"bytes\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"callGasLimit\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"verificationGasLimit\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"preVerificationGas\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maxFeePerGas\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maxPriorityFeePerGas\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"paymasterAndData\",\n            type: \"bytes\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct UserOperation\",\n        name: \"userOp\",\n        type: \"tuple\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"userOpHash\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"missingAccountFunds\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"validateUserOp\",\n    outputs: [\n      {\n        internalType: \"ValidationData\",\n        name: \"validationData\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61014034620001b757601f6200230b38819003918201601f19168301916001600160401b03831184841017620001bc57808492602094604052833981010312620001b757516001600160a01b0381168103620001b757306080524660a05260a062000069620001d2565b600681526005602082016512d95c9b995b60d21b815260206200008b620001d2565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b0319825416179055604051906121189283620001f3843960805183611c0c015260a05183611c2f015260c05183611ca1015260e05183611cc701525182611beb0152518181816104ad01528181610664015281816108bd01528181610a5301528181610b7a01528181610f380152818161105901528181611158015281816112820152818161135401526116050152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001bc5760405256fe60806040526004361015610015575b3661126557005b60003560e01c806306fdde03146101755780630b3dc35414610170578063150b7a021461016b5780631626ba7e1461016657806329f8b174146101615780633659cfe61461015c5780633a871cdd146101575780633e1b08121461015257806351166ba01461014d578063519454471461014857806354fd4d501461014357806355b14f501461013e57806357b750471461013957806384b0196e1461013457806388e7fd061461012f578063a4c79eee1461012a578063b0d691fe14610125578063bc197c8114610120578063d087d2881461011b578063d1f5789414610116578063d5416221146101115763f23a6e610361000e576111d3565b611141565b6110a5565b611026565b610f97565b610f22565b610e53565b610d29565b610c81565b610c4a565b610b64565b610b0c565b610a10565b610938565b610874565b61074a565b610640565b61043f565b6103ad565b610353565b6102d4565b6102a0565b600091031261018557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b357604052565b61018a565b608081019081106001600160401b038211176101b357604052565b604081019081106001600160401b038211176101b357604052565b90601f801991011681019081106001600160401b038211176101b357604052565b6040519061021c826101b8565b565b6040519061016082018281106001600160401b038211176101b357604052565b6040519061024b826101d3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061028c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161026b565b34610185576000366003190112610185576102d06102bc61023e565b604051918291602083526020830190610260565b0390f35b346101855760003660031901126101855760206000805160206120f88339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361018557565b359061021c8261030a565b9181601f84011215610185578235916001600160401b038311610185576020838186019501011161018557565b346101855760803660031901126101855761036f60043561030a565b61037a60243561030a565b6064356001600160401b03811161018557610399903690600401610326565b5050604051630a85bd0160e11b8152602090f35b34610185576040366003190112610185576024356001600160401b038111610185576103eb6103e26020923690600401610326565b90600435611cfd565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361018557565b6064359065ffffffffffff8216820361018557565b6084359065ffffffffffff8216820361018557565b60c0366003190112610185576104536103fe565b602435906104608261030a565b6044359061046d8261030a565b610475610415565b9261047e61042a565b9060a4356001600160401b0381116101855761049e903690600401610326565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610636575b610624578492610500610597926104eb61020f565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105278761122d565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610185576040519063064acaab60e11b825281806105c16000998a94600484016118fd565b038183895af1801561061f57610606575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610613610619926101a0565b8061017a565b386105d2565b6115e5565b604051637046c88d60e01b8152600490fd5b50303314156104d6565b6020366003190112610185576004356106588161030a565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106dc575b61062457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561068d565b9291926001600160401b0382116101b3576040519161070f601f8201601f1916602001846101ee565b829481845281830111610185578281602093846000960137010152565b9080601f8301121561018557816020610747933591016106e6565b90565b6003196060368201126101855760048035916001600160401b0390818411610185576101609084360301126101855761078161021e565b9061078d84840161031b565b8252602484013560208301526044840135818111610185576107b49084369187010161072c565b60408301526064840135818111610185576107d49084369187010161072c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610185576108299084369187010161072c565b610120830152610144840135908111610185576102d09361086493610851923692010161072c565b61014082015260443590602435906115f1565b6040519081529081906020820190565b34610185576020366003190112610185576004356001600160c01b0381169081900361018557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561061f576102d09160009161090a575b506040519081529081906020820190565b61092b915060203d8111610931575b61092381836101ee565b810190611506565b386108f9565b503d610919565b34610185576020366003190112610185576102d061097d6109576103fe565b60006060604051610967816101b8565b828152826020820152826040820152015261122d565b6040519061098a826101b8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60643590600282101561018557565b608036600319011261018557600435610a288161030a565b6044356001600160401b03811161018557610a4790369060040161072c565b90610a50610a01565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ad6575b61062457610a90816112de565b610ab9576000828193926020839451920190602435905af13d82803e15610ab5573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610ab5573d90f35b50610ae6610ae2611e30565b1590565b610a83565b60405190610af8826101d3565b6005825264302e322e3160d81b6020830152565b34610185576000366003190112610185576102d06102bc610aeb565b90604060031983011261018557600435610b418161030a565b91602435906001600160401b03821161018557610b6091600401610326565b9091565b610b6d36610b28565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c40575b61062457806000805160206120f88339815191525460501c1691610bc681611fc6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c3c578385610c1a819593829463064acaab60e11b8452600484016118fd565b03925af1801561061f57610c2c575080f35b80610613610c39926101a0565b80f35b8380fd5b5030331415610ba3565b346101855760003660031901126101855760206000805160206120f88339815191525460e01b6040519063ffffffff60e01b168152f35b3461018557600036600319011261018557610cd7610c9d61023e565b610ca5610aeb565b90604051928392600f60f81b8452610cc960209360e08587015260e0860190610260565b908482036040860152610260565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d1257505050500390f35b835185528695509381019392810192600101610d03565b346101855760003660031901126101855760206000805160206120f88339815191525465ffffffffffff60405191831c168152f35b6001600160401b0381116101b35760051b60200190565b81601f8201121561018557803591610d8c83610d5e565b92610d9a60405194856101ee565b808452602092838086019260051b820101928311610185578301905b828210610dc4575050505090565b81358152908301908301610db6565b9080601f8301121561018557813590610deb82610d5e565b92610df960405194856101ee565b828452602092838086019160051b8301019280841161018557848301915b848310610e275750505050505090565b82356001600160401b038111610185578691610e488484809489010161072c565b815201920191610e17565b34610185576080366003190112610185576001600160401b036004358181116101855736602382011215610185578060040135610e8f81610d5e565b91610e9d60405193846101ee565b81835260209160248385019160051b8301019136831161018557602401905b828210610f0957858560243582811161018557610edd903690600401610d75565b60443592831161018557610ef8610f07933690600401610dd3565b90610f01610a01565b9261134d565b005b8380918335610f178161030a565b815201910190610ebc565b34610185576000366003190112610185576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610185578235916001600160401b038311610185576020808501948460051b01011161018557565b346101855760a036600319011261018557610fb360043561030a565b610fbe60243561030a565b6001600160401b0360443581811161018557610fde903690600401610f67565b505060643581811161018557610ff8903690600401610f67565b505060843590811161018557611012903690600401610326565b505060405163bc197c8160e01b8152602090f35b3461018557600036600319011261018557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561061f576102d09160009161090a57506040519081529081906020820190565b6110ae36610b28565b6000805160206120f883398151915254919290916001600160a01b03919060501c8216611130576110de81611fc6565b1691823b1561018557611113926000928360405180968195829463064acaab60e11b8452602060048501526024840191611899565b03925af1801561061f5761112357005b80610613610f07926101a0565b60405162dc149f60e41b8152600490fd5b6020366003190112610185576111556103fe565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806111c9575b610624576000805160206120f883398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415611188565b346101855760a0366003190112610185576111ef60043561030a565b6111fa60243561030a565b6084356001600160401b03811161018557611219903690600401610326565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061127b81356001600160e01b03191661122d565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112cf575b61062457818091368280378136915af43d82803e15610ab5573d90f35b506112d8611e30565b156112b2565b600211156112e857565b634e487b7160e01b600052602160045260246000fd5b600019811461130d5760010190565b634e487b7160e01b600052601160045260246000fd5b80518210156113375760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b92909190337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611420575b6106245760005b84518110156114195761139d826112de565b816113f8576113db6113bf6113b28388611323565b516001600160a01b031690565b6113c98387611323565b516113d48487611323565b519161203c565b90156113f057506113eb906112fe565b61138b565b602081519101fd5b6113db6114086113b28388611323565b6114128386611323565b5190612067565b5050505050565b5061142c610ae2611e30565b611384565b906004116101855790600490565b909291928360041161018557831161018557600401916003190190565b906024116101855760100190601490565b906058116101855760380190602090565b906024116101855760040190602090565b906038116101855760240190601490565b90600a116101855760040190600690565b9060101161018557600a0190600690565b90939293848311610185578411610185578101920390565b6001600160e01b031990358181169392600481106114f757505050565b60040360031b82901b16169150565b90816020910312610185575190565b606080825282516001600160a01b031690820152919392916040916115db90602081015160808401528381015161155a610160918260a08701526101c0860190610260565b906115c861157a606085015193605f1994858983030160c08a0152610260565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610260565b92015190848303016101a0850152610260565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f0000000000000000000000000000000000000000000000000000000000000000871633036118395760049081359788610144810135019280602485019401356000805160206120f883398151915254946116676116618383611431565b906114da565b9b6001600160e01b0319808e16908161171c57505050899a9b50611696826020999a9b9594936116ad9361143f565b9660501c965b858c8061170d575b505036916106e6565b6101408501526116d1604051998a9788968794633a871cdd60e01b86528501611515565b0393165af191821561061f5761074793926116ed575b50612091565b61170691925060203d81116109315761092381836101ee565b90386116e7565b81808092335af150858c6116a4565b9199509197969594939c8660e01b161615156000146117465760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146117e557506117876117826116618b606460209c9d0135016024868201359101611431565b61122d565b60018101549099906001600160a01b031696848816156117da575b50816116ad926117b19261143f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961169c565b60501c9650816117a2565b9198979095509250600160e11b0361182b576118216116ad948a9361181c6116618a606460209c01350160248d8201359101611431565b61190e565b919992969161169c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061186d57505050565b60140360031b82901b16169150565b35906020811061188a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610747949281528160208201520191611899565b6001600160d01b031990358181169392600681106118ee57505050565b60060360031b82901b16169150565b916020610747938181520191611899565b9061193a61192e611928611922868561145c565b9061184b565b60601c90565b6001600160a01b031690565b9361194e611948858461146d565b9061187c565b60588301607882019461196961194887856058018a896114c2565b96611a7261197a611948838961147e565b61198a611928611922858b61148f565b99611a186119993689896106e6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c93611a1060c0826101ee565b519020611be9565b6000805160206120f883398151915254909190611a5490611a449060501c6001600160a01b031661192e565b9189019b60788d0190878d6114c2565b60405163199ed7c960e11b81529586948593849391600485016118ba565b03915afa92831561061f57611782611ab8611b789561052794600091611bcc575b50611ab1611aa1878d61147e565b6001600160a01b0319929161187c565b1690612091565b9a898b016078019a85036077190199611b6890611b58611af8611aed611ae7611ae18b866114a0565b906118d1565b60d01c90565b65ffffffffffff1690565b97611b2f61192e611928611922611b18611aed611ae7611ae1888b6114b1565b94611b29611928611922838b61148f565b9761145c565b94611b49611b3b61020f565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b1561018557611bae926000928360405180968195829463064acaab60e11b8452600484016118fd565b03925af1801561061f57611bbf5750565b8061061361021c926101a0565b611be391508d803d106109315761092381836101ee565b38611a93565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611c76575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611c57565b6000805160206120f883398151915254611d4a93602093909291611d2c9060501c6001600160a01b031661192e565b916040519586948593849363199ed7c960e11b8552600485016118ba565b03915afa801561061f57611d6691600091611dc1575b50612013565b9165ffffffffffff908142911611611db15742911610611da4576001600160a01b0316611d9857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611dd9915060203d81116109315761092381836101ee565b38611d60565b90816020910312610185575180151581036101855790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b6000805160206120f883398151915254611e559060501c6001600160a01b031661192e565b6040519081639ea9bd5960e01b9182825260209384918180611e7b363360048401611df7565b03915afa90811561061f57600091611fa9575b50611fa257611ea86000356001600160e01b03191661122d565b6001810154909190611ec2906001600160a01b031661192e565b916001600160a01b03831615908115611f66575b8115611f42575b5015611eeb57505050600090565b829060405192839182528180611f05363360048401611df7565b03915afa91821561061f57600092611f1c57505090565b6107479250803d10611f3b575b611f3381836101ee565b810190611ddf565b503d611f29565b54611f55915065ffffffffffff16611aed565b65ffffffffffff4291161138611edd565b905065ffffffffffff611f86611aed835465ffffffffffff9060301c1690565b168015159081611f98575b5090611ed6565b9050421138611f91565b5050600190565b611fc09150833d8511611f3b57611f3381836101ee565b38611e8e565b6000805160206120f883398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114612034575b5060d01c92565b92503861202d565b916000928392602083519301915af1903d604051906020818301016040528082526000602083013e90565b6000918291602082519201905af4903d604051906020818301016040528082526000602083013e90565b8082186001600160a01b0316156001146120ac575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b1994851694169291146120ef575b5081811190821802181790565b9250386120e256fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9\";\n\ntype KernelConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: KernelConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Kernel__factory extends ContractFactory {\n  constructor(...args: KernelConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    _entryPoint: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<Kernel> {\n    return super.deploy(_entryPoint, overrides || {}) as Promise<Kernel>;\n  }\n  override getDeployTransaction(\n    _entryPoint: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(_entryPoint, overrides || {});\n  }\n  override attach(address: string): Kernel {\n    return super.attach(address) as Kernel;\n  }\n  override connect(signer: Signer): Kernel__factory {\n    return super.connect(signer) as Kernel__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): KernelInterface {\n    return new utils.Interface(_abi) as KernelInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): Kernel {\n    return new Contract(address, _abi, signerOrProvider) as Kernel;\n  }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../common\";\nimport type { KernelFactory, KernelFactoryInterface } from \"../KernelFactory\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"_owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract IEntryPoint\",\n        name: \"_entryPoint\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"DeploymentFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NewOwnerIsZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NoHandoverRequest\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"SaltDoesNotStartWithCaller\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Unauthorized\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"proxy\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Deployed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"pendingOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"OwnershipHandoverCanceled\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"pendingOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"OwnershipHandoverRequested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"oldOwner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"newOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"OwnershipTransferred\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint32\",\n        name: \"unstakeDelaySec\",\n        type: \"uint32\",\n      },\n    ],\n    name: \"addStake\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cancelOwnershipHandover\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"pendingOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"completeOwnershipHandover\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"_implementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"_data\",\n        type: \"bytes\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"_index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"createAccount\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"proxy\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"entryPoint\",\n    outputs: [\n      {\n        internalType: \"contract IEntryPoint\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"_data\",\n        type: \"bytes\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"_index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getAccountAddress\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"initCodeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"result\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"isAllowedImplementation\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"owner\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"result\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"pendingOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"ownershipHandoverExpiresAt\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"result\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"ownershipHandoverValidFor\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"predictDeterministicAddress\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"predicted\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"renounceOwnership\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"requestOwnershipHandover\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IEntryPoint\",\n        name: \"_entryPoint\",\n        type: \"address\",\n      },\n    ],\n    name: \"setEntryPoint\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"_implementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"_allow\",\n        type: \"bool\",\n      },\n    ],\n    name: \"setImplementation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"transferOwnership\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unlockStake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address payable\",\n        name: \"withdrawAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"withdrawStake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a275760405256\";\n\ntype KernelFactoryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: KernelFactoryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class KernelFactory__factory extends ContractFactory {\n  constructor(...args: KernelFactoryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    _owner: PromiseOrValue<string>,\n    _entryPoint: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<KernelFactory> {\n    return super.deploy(\n      _owner,\n      _entryPoint,\n      overrides || {}\n    ) as Promise<KernelFactory>;\n  }\n  override getDeployTransaction(\n    _owner: PromiseOrValue<string>,\n    _entryPoint: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(_owner, _entryPoint, overrides || {});\n  }\n  override attach(address: string): KernelFactory {\n    return super.attach(address) as KernelFactory;\n  }\n  override connect(signer: Signer): KernelFactory__factory {\n    return super.connect(signer) as KernelFactory__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): KernelFactoryInterface {\n    return new utils.Interface(_abi) as KernelFactoryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): KernelFactory {\n    return new Contract(address, _abi, signerOrProvider) as KernelFactory;\n  }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../common\";\nimport type {\n  ECDSAValidator,\n  ECDSAValidatorInterface,\n} from \"../ECDSAValidator\";\n\nconst _abi = [\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"kernel\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"oldOwner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"newOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"OwnerChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"disable\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"ecdsaValidatorStorage\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"_data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"enable\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"_caller\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"validCaller\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"hash\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"signature\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"validateSignature\",\n    outputs: [\n      {\n        internalType: \"ValidationData\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"sender\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"nonce\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"initCode\",\n            type: \"bytes\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"callData\",\n            type: \"bytes\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"callGasLimit\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"verificationGasLimit\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"preVerificationGas\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maxFeePerGas\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maxPriorityFeePerGas\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"paymasterAndData\",\n            type: \"bytes\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct UserOperation\",\n        name: \"_userOp\",\n        type: \"tuple\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"_userOpHash\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"validateUserOp\",\n    outputs: [\n      {\n        internalType: \"ValidationData\",\n        name: \"validationData\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056\";\n\ntype ECDSAValidatorConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: ECDSAValidatorConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class ECDSAValidator__factory extends ContractFactory {\n  constructor(...args: ECDSAValidatorConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ECDSAValidator> {\n    return super.deploy(overrides || {}) as Promise<ECDSAValidator>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): ECDSAValidator {\n    return super.attach(address) as ECDSAValidator;\n  }\n  override connect(signer: Signer): ECDSAValidator__factory {\n    return super.connect(signer) as ECDSAValidator__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): ECDSAValidatorInterface {\n    return new utils.Interface(_abi) as ECDSAValidatorInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): ECDSAValidator {\n    return new Contract(address, _abi, signerOrProvider) as ECDSAValidator;\n  }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../common\";\nimport type { KernelStorage, KernelStorageInterface } from \"../KernelStorage\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEntryPoint\",\n        name: \"_entryPoint\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyInitialized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotAuthorizedCaller\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"oldValidator\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"newValidator\",\n        type: \"address\",\n      },\n    ],\n    name: \"DefaultValidatorChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes4\",\n        name: \"selector\",\n        type: \"bytes4\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"executor\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"validator\",\n        type: \"address\",\n      },\n    ],\n    name: \"ExecutionChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"_disableFlag\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"disableMode\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"entryPoint\",\n    outputs: [\n      {\n        internalType: \"contract IEntryPoint\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDefaultValidator\",\n    outputs: [\n      {\n        internalType: \"contract IKernelValidator\",\n        name: \"validator\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDisabledMode\",\n    outputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"disabled\",\n        type: \"bytes4\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"_selector\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"getExecution\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"ValidAfter\",\n            name: \"validAfter\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"ValidUntil\",\n            name: \"validUntil\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"address\",\n            name: \"executor\",\n            type: \"address\",\n          },\n          {\n            internalType: \"contract IKernelValidator\",\n            name: \"validator\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct ExecutionDetail\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getLastDisabledTime\",\n    outputs: [\n      {\n        internalType: \"uint48\",\n        name: \"\",\n        type: \"uint48\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint192\",\n        name: \"key\",\n        type: \"uint192\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IKernelValidator\",\n        name: \"_defaultValidator\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"_data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IKernelValidator\",\n        name: \"_defaultValidator\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"_data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"setDefaultValidator\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"_selector\",\n        type: \"bytes4\",\n      },\n      {\n        internalType: \"address\",\n        name: \"_executor\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract IKernelValidator\",\n        name: \"_validator\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint48\",\n        name: \"_validUntil\",\n        type: \"uint48\",\n      },\n      {\n        internalType: \"uint48\",\n        name: \"_validAfter\",\n        type: \"uint48\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"_enableData\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"setExecution\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"_newImplementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"upgradeTo\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60a0346100d257601f610b2138819003918201601f19168301916001600160401b038311848410176100d7578084926020946040528339810103126100d257516001600160a01b03811681036100d2576080527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd98054600160501b600160f01b0319166a0100000000000000000000179055604051610a3390816100ee823960805181818160bf0152818161022b015281816102c90152818161038001528181610556015281816105f901526107000152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604081815260048036101561001557600080fd5b600092833560e01c9081630b3dc354146108775750806329f8b1741461067b5780633659cfe6146105d25780633e1b08121461050c57806351166ba01461043a57806355b14f501461036557806357b750471461032d57806388e7fd06146102f8578063b0d691fe146102b4578063d087d288146101f5578063d1f578941461014b5763d5416221146100a757600080fd5b6020366003190112610147576100bb6108ac565b91337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061013d575b610130575050600080516020610a1383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff19161717905580f35b51637046c88d60e01b8152fd5b50303314156100ef565b8280fd5b508290610157366108f1565b600080516020610a13833981519152549295919391926001600160a01b039060501c81166101e6578661018a87986109c5565b16803b156101e2576101b39486809486519788958694859363064acaab60e11b8552840161099d565b03925af19081156101d957506101c65750f35b6101cf90610967565b6101d65780f35b80fd5b513d84823e3d90fd5b8580fd5b835162dc149f60e41b81528390fd5b509190346102b057816003193601126102b0578051631aab3f0d60e11b81523093810193909352602483018290526020836044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156102a5579161026c575b6020925051908152f35b90506020823d821161029d575b816102866020938361097b565b81010312610298576020915190610262565b600080fd5b3d9150610279565b9051903d90823e3d90fd5b5080fd5b5050346102b057816003193601126102b057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346102b057816003193601126102b057600080516020610a13833981519152549051602091821c65ffffffffffff168152f35b5050346102b057816003193601126102b057602090600080516020610a138339815191525460e01b90519063ffffffff60e01b168152f35b509190610371366108f1565b919291906001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610430575b6104205795868697600080516020610a138339815191525460501c16956103cf816109c5565b1690818551967fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8980a3813b1561041c5786866101b382968296839563064acaab60e11b8552840161099d565b8680fd5b8351637046c88d60e01b81528790fd5b50303314156103a9565b5050346102b05760203660031901126102b05760018160809361045b6108ac565b816060845161046981610935565b8281528260208201528286820152015263ffffffff60e01b1681527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda60205220918051906104b682610935565b83549365ffffffffffff948581169586855260208501818360301c1681528486019260601c83526060878060a01b0380988196015416960195865284519788525116602087015251169084015251166060820152f35b509190346102b057602092836003193601126101475780356001600160c01b038116908190036105ce578251631aab3f0d60e11b81523092810192909252602482015283816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9283156105c35792610594575b5051908152f35b9091508281813d83116105bc575b6105ac818361097b565b810103126102985751903861058d565b503d6105a2565b8251903d90823e3d90fd5b8380fd5b506020366003190112610147576001600160a01b03813581811693909291848403610298577f00000000000000000000000000000000000000000000000000000000000000001633141580610671575b6101305750507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8280a280f35b5030331415610622565b5060c0366003190112610147576106906108ac565b916001600160a01b03602435818116939192908490036101e2576044359483861680960361041c576064359265ffffffffffff948585168095036108735760843586811680910361086f5760a43567ffffffffffffffff811161086b576106fa90369085016108c3565b969094837f00000000000000000000000000000000000000000000000000000000000000001633141580610861575b610851578a928a8d979695936bffffffffffff0000000000006001948b519461075186610935565b8552602085019283528b85019384526060850197885263ffffffff60e01b169c8d8b527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda6020528b8b20945116915160301b16916bffffffffffffffffffffffff19905160601b169117178155019151166bffffffffffffffffffffffff60a01b825416179055873b15610147576107fa8451958693849363064acaab60e11b8552840161099d565b038183895af19081156108485750610835575b507fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b61084190949194610967565b923861080d565b513d87823e3d90fd5b8651637046c88d60e01b81528590fd5b5030331415610729565b8a80fd5b8980fd5b8880fd5b8490346102b057816003193601126102b057600080516020610a138339815191525460501c6001600160a01b03168152602090f35b600435906001600160e01b03198216820361029857565b9181601f840112156102985782359167ffffffffffffffff8311610298576020838186019501011161029857565b906040600319830112610298576004356001600160a01b038116810361029857916024359067ffffffffffffffff821161029857610931916004016108c3565b9091565b6080810190811067ffffffffffffffff82111761095157604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff811161095157604052565b90601f8019910116810190811067ffffffffffffffff82111761095157604052565b90918060409360208452816020850152848401376000828201840152601f01601f1916010190565b600080516020610a1383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b031691909117905556fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9\";\n\ntype KernelStorageConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: KernelStorageConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class KernelStorage__factory extends ContractFactory {\n  constructor(...args: KernelStorageConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    _entryPoint: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<KernelStorage> {\n    return super.deploy(_entryPoint, overrides || {}) as Promise<KernelStorage>;\n  }\n  override getDeployTransaction(\n    _entryPoint: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(_entryPoint, overrides || {});\n  }\n  override attach(address: string): KernelStorage {\n    return super.attach(address) as KernelStorage;\n  }\n  override connect(signer: Signer): KernelStorage__factory {\n    return super.connect(signer) as KernelStorage__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): KernelStorageInterface {\n    return new utils.Interface(_abi) as KernelStorageInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): KernelStorage {\n    return new Contract(address, _abi, signerOrProvider) as KernelStorage;\n  }\n}\n","export const CONSTANTS = {\n\t// chain specific constants\n\t// ENTRY_POINT_ADDRESS: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n\t// KERNEL_FACTORY_ADDRESS: \"0x7e3B523aDA6EC3fE6DC4e1c107Ed6DD641B6d4fc\",\n\t// ECDSA_VALIDATOR_ADDRESS: \"0x93513fB6ea522d47ed8595f1B5037bd88578A914\",\n\t// KERNEL_IMPLEMENTATION: \"0x29C69905F09908C70da2D67a2B3d52B22E71F241\",\n\n\tSALT: 0,\n\tAPI_URL: \"https://api.0xgasless.com\",\n\tSUPPORTED_TEST_CHAIN_IDS: [5, 80001, 421613, 97],\n\tSUPPORTED_MAIN_CHAIN_IDS: [1, 137, 42161, 56, 250, 1284, 8453, 1088],\n};\n\nexport const getConstants = (chainId: number) => {\n\tswitch (chainId) {\n\t\tcase 8453:\n\t\t\treturn {\n\t\t\t\tENTRY_POINT_ADDRESS:\n\t\t\t\t\t\"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n\t\t\t\tKERNEL_FACTORY_ADDRESS:\n\t\t\t\t\t\"0x6C08Aff3D2d66883b3111Cef4bAEd15Bb253D86A\",\n\t\t\t\tECDSA_VALIDATOR_ADDRESS:\n\t\t\t\t\t\"0x2C30524335133FdB278506b49A2727D2DF4451f5\",\n\t\t\t\tKERNEL_IMPLEMENTATION:\n\t\t\t\t\t\"0x7235528B231f5d98f236549d55fa28a569256303\",\n\t\t\t};\n\t\tcase 1088:\n\t\t\treturn {\n\t\t\t\tENTRY_POINT_ADDRESS:\n\t\t\t\t\t\"0xD1398353742A5c2c5264DfEa6c000E2137730008\",\n\t\t\t\tKERNEL_FACTORY_ADDRESS:\n\t\t\t\t\t\"0xd6Cd3a9b50263f64b83C0FA70471833185008A23\",\n\t\t\t\tECDSA_VALIDATOR_ADDRESS:\n\t\t\t\t\t\"0x9e65D68989e4eC9A93851b0da80706A98657A6fE\",\n\t\t\t\tKERNEL_IMPLEMENTATION:\n\t\t\t\t\t\"0x76A0c4E39b5718BD505741ae265Fe16eedFc255D\",\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tENTRY_POINT_ADDRESS:\n\t\t\t\t\t\"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n\t\t\t\tKERNEL_FACTORY_ADDRESS:\n\t\t\t\t\t\"0x7e3B523aDA6EC3fE6DC4e1c107Ed6DD641B6d4fc\",\n\t\t\t\tECDSA_VALIDATOR_ADDRESS:\n\t\t\t\t\t\"0x93513fB6ea522d47ed8595f1B5037bd88578A914\",\n\t\t\t\tKERNEL_IMPLEMENTATION:\n\t\t\t\t\t\"0x29C69905F09908C70da2D67a2B3d52B22E71F241\",\n\t\t\t};\n\t}\n};\n\nexport const defaultChainData = getConstants(1);\nexport type ChainData = typeof defaultChainData;\n","import { CONSTANTS } from \"../constants\";\nimport { UserOperationRequest } from \"../types\";\n\nconst API_URL=CONSTANTS.API_URL;\n\nexport const _api  = {\n\n    async validateAPIKey(apiKey:string){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey\n            }\n            const res = await fetch(\n                `${API_URL}/api-key/verify`,{\n                    method: \"GET\",\n                    headers\n                }\n            );\n            if (res.status >= 400) {\n                // Optionally, parse the res body for more details to include in the error\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = await res.json(); \n            if(resData.valid) return true;\n            else return false;\n\n        } catch (error) {\n            throw error;\n        }\n\n    },\n\n    async getTrxReceipt(userOpHash:string, apiKey: string, chainId: number){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey\n            }\n            const res = await fetch(\n                `${API_URL}/transaction/receipt/${chainId}/${userOpHash}`,{\n                    method: \"GET\",\n                    headers\n                }\n            );\n            if (res.status >= 400) {\n                // Optionally, parse the res body for more details to include in the error\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = res && await res.json(); \n            if(!res) throw new Error(\"unable to get response\");\n            return resData.receipt;\n\n        } catch (error) {\n            throw error;\n        }\n\n    },\n\n    // async createSmartAccount(apiKey:string,chainId:number, signerAddress: string): Promise<Object>{\n    //     try {\n    //         const headers = {\n    //             \"x-api-key\": apiKey,\n    //             'Accept': 'application/json',\n    //               'Content-Type': 'application/json'\n    //         };\n    //         const res = await fetch(\n    //             `${API_URL}/aa-account/create`,\n    //             {\n    //                 method: \"POST\",\n    //                 body: JSON.stringify({chainId,\n    //                 eoa: signerAddress,\n    //                 salt: CONSTANTS.SALT}),\n    //                 headers\n    //             },\n    //         );\n    //         return await res.json();\n    //     } catch (error) {\n    //         throw error;\n    //     }\n       \n    // },\n\n    async getPMData(apiKey:string, userOp: UserOperationRequest, chainId: number){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey,\n                'Accept': 'application/json',\n                'Content-Type': 'application/json'\n            };\n            const res = await fetch(\n                `${API_URL}/transaction/userop-pm-data`,\n                {\n                    method: \"POST\",\n                    body: JSON.stringify({chainId,userOperation:userOp}),\n                    headers\n                },\n            );\n            if (res.status >= 400) {\n                // Optionally, parse the res body for more details to include in the error\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = await res.json();\n            return resData;\n        } catch (error) {\n            throw error;\n        }\n    },\n\n    async sendUserOpToBundler(apiKey:string, userOp: UserOperationRequest, chainId: number){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey,\n                'Accept': 'application/json',\n                'Content-Type': 'application/json'\n            };\n            const res = await fetch(\n                `${API_URL}/transaction/send`,{\n                    method: \"POST\",\n                    body: JSON.stringify({\n                        chainId,\n                        userOperation:userOp,\n                    }),\n                    headers \n                }\n            );\n            if (res.status >= 400) {\n                // Optionally, parse the res body for more details to include in the error\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = await res.json();\n            return resData.userOperationHash;\n        } catch (error) {\n            throw error;   \n        }\n    },\n\n    async sendTelegramOTP(apiKey:string, telegramUserId:string, requestId: string ){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey\n            }\n            const res = await fetch(\n                `${API_URL}/telegram-auth/trx-otp/${telegramUserId}/${requestId}`,{\n                    method: \"GET\",\n                    headers\n                }\n            );\n            if (res.status >= 400) {\n                // Optionally, parse the res body for more details to include in the error\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = await res.json(); \n            return resData;\n\n        } catch (error) {\n            throw error;\n        }\n\n    },\n\n\n    async createSmartAccountForTelegramUser(apiKey:string, telegramUserId: string, walletAddress: string, chainId: number, calldata: string){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey,\n                'Accept': 'application/json',\n                'Content-Type': 'application/json'\n            };\n            const res = await fetch(\n                `${API_URL}/telegram-auth/trx/create-smart-account`,{\n                    method: \"POST\",\n                    body: JSON.stringify({\n                        telegramUserId,\n                        walletAddress,\n                        chainId,\n                        calldata\n                    }),\n                    headers \n                }\n            );\n            if (res.status >= 400) {\n                // Optionally, parse the res body for more details to include in the error\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = await res.json();\n            console.log(\"resData createSmartAccountForTelegramUser\", resData);\n            return resData;\n        } catch (error) {\n            throw error;   \n        }\n    },\n\n    async logPrepareUseropRequest(apiKey:string, userOp: UserOperationRequest, chainId: number,telegramUserId:string){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey,\n                'Accept': 'application/json',\n                'Content-Type': 'application/json'\n            };\n            const res = await fetch(\n                `${API_URL}/telegram-auth/trx/log-prepareop-req`,{\n                    method: \"POST\",\n                    body: JSON.stringify({\n                        userOp,\n                        chainId,\n                        telegramUserId\n                    }),\n                    headers \n                }\n            );\n            if (res.status >= 400) {\n                // Optionally, parse the res body for more details to include in the error\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = await res.json();\n            console.log(\"resData logPrepareUseropRequest\", resData);\n            return resData;\n        } catch (error) {\n            throw error;   \n        }\n    },\n\n    async sendTelegramUseropRequest(apiKey:string, requestId: string,telegramUserId:string, otp:string){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey,\n                'Accept': 'application/json',\n                'Content-Type': 'application/json'\n            };\n            const res = await fetch(\n                `${API_URL}/telegram-auth/trx/send`,{\n                    method: \"POST\",\n                    body: JSON.stringify({\n                        requestId,\n                        telegramUserId,\n                        otp\n                    }),\n                    headers \n                }\n            );\n            if (res.status >= 400) {\n                // Optionally, parse the res body for more details to include in the error\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = await res.json();\n            console.log(\"resData sendTelegramUseropRequest\", resData);\n            return resData.userOperationHash;\n        } catch (error) {\n            console.log(\"sendTelegramUseropRequest, error:\", error)\n            throw error;   \n        }\n    },\n\n    async verifyTelegramOTPAndGetSignedOp(apiKey:string, requestId: string,telegramUserId:string, otp:string){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey,\n                'Accept': 'application/json',\n                'Content-Type': 'application/json'\n            };\n            const res = await fetch(\n                `${API_URL}/telegram-auth/trx-otp/verify`,{\n                    method: \"POST\",\n                    body: JSON.stringify({\n                        requestId,\n                        telegramUserId,\n                        otp\n                    }),\n                    headers \n                }\n            );\n            if (res.status >= 400) {\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = await res.json();\n            console.log(\"resData sendTelegramUseropRequest\", resData);\n            return resData.signedOp;\n        } catch (error) {\n            console.log(\"sendTelegramUseropRequest, error:\", error)\n            throw error;   \n        }\n    },\n   \n    async create0xGaslessSmartAccountForUser(apiKey:string, eoa: string, chainId: number){\n        try {\n            const headers = {\n                \"x-api-key\": apiKey,\n                'Accept': 'application/json',\n                'Content-Type': 'application/json'\n            };\n            const res = await fetch(\n                `${API_URL}/transaction/create-0xsmart-account`,{\n                    method: \"POST\",\n                    body: JSON.stringify({\n                        eoa,\n                        chainId\n                    }),\n                    headers \n                }\n            );\n            if (res.status >= 400) {\n                // Optionally, parse the res body for more details to include in the error\n                const errorDetails = await res.json();\n                throw new Error(`Error ${res.status}: ${errorDetails.message}`);\n            }\n            const resData = await res.json();\n            console.log(\"resData create0xGaslessSmartAccountForUser\", resData);\n            return resData;\n        } catch (error) {\n            throw error;   \n        }\n    },\n\n\n}","import * as API from \"../../api\";\nimport {\n\tEntryPoint__factory,\n\tEntryPoint,\n\tUserOperationStruct,\n} from \"@account-abstraction/contracts\";\nimport {\n\tProvider,\n\tTransactionRequest,\n\tTransactionResponse,\n\tJsonRpcProvider,\n} from \"@ethersproject/providers\";\nimport {\n\tECDSAValidator__factory,\n\tIKernelValidator__factory,\n\tKernel__factory,\n\tKernelFactory,\n\tKernelFactory__factory,\n\tKernelStorage,\n\tKernelStorage__factory,\n} from \"../../contracts\";\nimport {\n\tBatchUserOperationCallData,\n\tClientOptions,\n\tUserOperationCallData,\n\tUserOperationResponse,\n\tAddress,\n\tHex,\n\tUserOperationRequest,\n\tHash,\n} from \"../../types\";\nimport { BigNumber, Signer, Wallet, ethers, utils } from \"ethers\";\nimport { CONSTANTS, defaultChainData, getConstants } from \"../../constants\";\nimport { _api } from \"../../api\";\n\nexport class AAClient {\n\tprivate chainData = defaultChainData;\n\tprivate apiKey: string;\n\tprivate signer!: Signer;\n\tprivate signerAddress!: Address;\n\tprivate provider: JsonRpcProvider = new JsonRpcProvider();\n\tprivate options!: ClientOptions;\n\tprivate entryPoint!: EntryPoint;\n\tprivate kernelAccountFactory!: KernelFactory;\n\tpublic smartAccountAddress!: Address;\n\tpublic chainId!: number;\n\n\tconstructor(apiKey: string) {\n\t\tthis.apiKey = apiKey;\n\t}\n\n\tasync init(\n\t\tprovider: JsonRpcProvider,\n\t\toptions: ClientOptions\n\t): Promise<Object> {\n\t\ttry {\n\t\t\tif (!this.apiKey)\n\t\t\t\tthrow new Error(\"api key not provided during init\");\n\t\t\tconst isValid = await _api.validateAPIKey(this.apiKey);\n\t\t\tif (!isValid) throw new Error(\"api key invalid\");\n\n\t\t\tthis.options = options;\n\t\t\tthis.provider = provider;\n\t\t\tif (!options.chainId)\n\t\t\t\tthrow new Error(\"chainId not provided in options\");\n\t\t\tthis.chainId = options.chainId;\n\t\t\tthis.chainData = getConstants(this.chainId);\n\n\t\t\tif (options.privateKey)\n\t\t\t\tthis.signer = new Wallet(options.privateKey, provider);\n\t\t\telse if (provider.getSigner()) this.signer = provider.getSigner();\n\t\t\telse throw new Error(\"private key or provider not found\");\n\t\t\treturn await this.setupContractConfigs(this.signer);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async getAccountCallData() {\n\t\tconsole.log(\"this.signer\", this.signerAddress);\n\t\tconst _data = utils.solidityPack([\"address\"], [this.signerAddress]);\n\t\tconst iface = new ethers.utils.Interface(KernelStorage__factory.abi);\n\t\treturn iface.encodeFunctionData(\"initialize\", [\n\t\t\tthis.chainData.ECDSA_VALIDATOR_ADDRESS,\n\t\t\t_data,\n\t\t]);\n\t}\n\n\tprivate async getAccountCallDataByAddress(eoa: string) {\n\t\tconsole.log(\"eoa\", eoa);\n\t\tconst _data = utils.solidityPack([\"address\"], [eoa]);\n\t\tconst iface = new ethers.utils.Interface(KernelStorage__factory.abi);\n\t\treturn iface.encodeFunctionData(\"initialize\", [\n\t\t\tthis.chainData.ECDSA_VALIDATOR_ADDRESS,\n\t\t\t_data,\n\t\t]);\n\t}\n\n\tprivate async getSmartContractAddress(eoa: string) {\n\t\tconst kernelAccountFactory = KernelFactory__factory.connect(\n\t\t\tthis.chainData.KERNEL_FACTORY_ADDRESS,\n\t\t\tthis.signer\n\t\t);\n\t\tconst callData = this.getAccountCallDataByAddress(eoa);\n\t\tconst smartAccountAddress =\n\t\t\tawait kernelAccountFactory.getAccountAddress(\n\t\t\t\tcallData,\n\t\t\t\tCONSTANTS.SALT\n\t\t\t);\n\t\treturn smartAccountAddress;\n\t}\n\n\tprivate async setupContractConfigs(signer: Signer) {\n\t\ttry {\n\t\t\tthis.entryPoint = EntryPoint__factory.connect(\n\t\t\t\tthis.chainData.ENTRY_POINT_ADDRESS,\n\t\t\t\tthis.signer\n\t\t\t);\n\t\t\tthis.kernelAccountFactory = KernelFactory__factory.connect(\n\t\t\t\tthis.chainData.KERNEL_FACTORY_ADDRESS,\n\t\t\t\tthis.signer\n\t\t\t);\n\t\t\tthis.signerAddress =\n\t\t\t\t(await this.signer.getAddress()) as `0x${string}`;\n\t\t\t// this.smartAccountAddress = await this.initalizeSmartAccount();\n\t\t\tthis.smartAccountAddress = (await this.getSmartContractAddress(\n\t\t\t\tthis.signerAddress\n\t\t\t)) as `0x${string}`;\n\t\t\t// this.smartAccountAddress = await this.initalize0xGaslessSmartAccount(this.signerAddress);\n\t\t\t// console.log(\"res\", this.smartAccountAddress);\n\t\t\treturn { smartAccountAddress: this.smartAccountAddress };\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async initalizeSmartAccount(): Promise<Address> {\n\t\ttry {\n\t\t\tconst kernelAccountFactory = KernelFactory__factory.connect(\n\t\t\t\tthis.chainData.KERNEL_FACTORY_ADDRESS,\n\t\t\t\tthis.signer\n\t\t\t);\n\t\t\tconst callData = this.getAccountCallData();\n\t\t\tconst smartAccountAddress =\n\t\t\t\tawait kernelAccountFactory.getAccountAddress(\n\t\t\t\t\tcallData,\n\t\t\t\t\tCONSTANTS.SALT\n\t\t\t\t);\n\t\t\tconst contractCode = await this.provider.getCode(\n\t\t\t\tsmartAccountAddress\n\t\t\t);\n\t\t\tif (contractCode === \"0x\" || contractCode === undefined) {\n\t\t\t\tlet gasEstimate =\n\t\t\t\t\tawait kernelAccountFactory.estimateGas.createAccount(\n\t\t\t\t\t\tthis.chainData.KERNEL_IMPLEMENTATION,\n\t\t\t\t\t\tcallData,\n\t\t\t\t\t\tCONSTANTS.SALT\n\t\t\t\t\t);\n\n\t\t\t\tif (!gasEstimate) gasEstimate = BigNumber.from(300000);\n\t\t\t\t// const gasPrice = await getGasPrice(chainId);\n\t\t\t\t// const options = gasPrice ? { gasLimit: gasEstimate, gasPrice: ethers.utils.parseUnits(gasPrice.toFixed(4), \"gwei\")} : { gasLimit: gasEstimate };\n\t\t\t\tconst options = { gasLimit: gasEstimate };\n\n\t\t\t\tconst accountTransaction =\n\t\t\t\t\tawait kernelAccountFactory.createAccount(\n\t\t\t\t\t\tthis.chainData.KERNEL_IMPLEMENTATION,\n\t\t\t\t\t\tcallData,\n\t\t\t\t\t\tCONSTANTS.SALT,\n\t\t\t\t\t\toptions\n\t\t\t\t\t);\n\t\t\t\tconst receipt = await accountTransaction.wait();\n\t\t\t\tconsole.log(\"receipt\", receipt);\n\t\t\t}\n\t\t\treturn smartAccountAddress as `0x${string}`;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async initalize0xGaslessSmartAccount(\n\t\teoa: string\n\t): Promise<Address> {\n\t\ttry {\n\t\t\tconst contractCode = await this.provider.getCode(\n\t\t\t\tthis.smartAccountAddress\n\t\t\t);\n\t\t\tif (contractCode === \"0x\" || contractCode == undefined) {\n\t\t\t\tif (this.options.noAccountCreateSponsorship) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"options.noAccountCreateSponsorship is false, can't create account with sponsorship\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst { receipt, smartAccountAddress: resSmartAccountAddress } =\n\t\t\t\t\tawait _api.create0xGaslessSmartAccountForUser(\n\t\t\t\t\t\tthis.apiKey,\n\t\t\t\t\t\teoa,\n\t\t\t\t\t\tthis.chainId\n\t\t\t\t\t);\n\t\t\t\tconsole.log(\"resSmartAccountAddress\", resSmartAccountAddress);\n\t\t\t}\n\t\t\treturn this.smartAccountAddress as `0x${string}`;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async getPaymasterDataUsingEndpoint(op: UserOperationRequest) {\n\t\ttry {\n\t\t\tconst paymasterEndpoint = this.options.paymasterEndpoint;\n\t\t\tif (!paymasterEndpoint)\n\t\t\t\tthrow new Error(\"paymaster endpoint not provided\");\n\t\t\tif (!this.options.paymaster)\n\t\t\t\tthrow new Error(\"paymaster not specified\");\n\t\t\tconst pmProvider = new ethers.providers.StaticJsonRpcProvider(\n\t\t\t\tpaymasterEndpoint\n\t\t\t);\n\n\t\t\tlet requestParams;\n\t\t\tswitch (this.options.paymaster) {\n\t\t\t\tcase \"STACKUP\":\n\t\t\t\t\trequestParams = [\n\t\t\t\t\t\top,\n\t\t\t\t\t\tthis.chainData.ENTRY_POINT_ADDRESS,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"payg\",\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"PIMLICO\":\n\t\t\t\t\trequestParams = [op, this.chainData.ENTRY_POINT_ADDRESS];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"0xGasless\":\n\t\t\t\t\tif (this.options.erc20token) {\n\t\t\t\t\t\trequestParams = [\n\t\t\t\t\t\t\top,\n\t\t\t\t\t\t\tthis.chainData.ENTRY_POINT_ADDRESS,\n\t\t\t\t\t\t\tthis.options.paymasterId,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttoken: this.options.erc20token,\n\t\t\t\t\t\t\t\ttype: \"erc20\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t];\n\t\t\t\t\t} else {\n\t\t\t\t\t\trequestParams = [\n\t\t\t\t\t\t\top,\n\t\t\t\t\t\t\tthis.chainData.ENTRY_POINT_ADDRESS,\n\t\t\t\t\t\t\tthis.options.paymasterId,\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet sponsorUserOperation = await pmProvider.send(\n\t\t\t\t\"pm_sponsorUserOperation\",\n\t\t\t\trequestParams\n\t\t\t);\n\t\t\tconst paymasterAndData = sponsorUserOperation.paymasterAndData;\n\t\t\tswitch (this.options.paymaster) {\n\t\t\t\tcase \"PIMLICO\":\n\t\t\t\t\top.paymasterAndData = paymasterAndData;\n\t\t\t\t\top.preVerificationGas =\n\t\t\t\t\t\tsponsorUserOperation.preVerificationGas;\n\t\t\t\t\top.verificationGasLimit =\n\t\t\t\t\t\tsponsorUserOperation.verificationGasLimit;\n\t\t\t\t\top.callGasLimit = sponsorUserOperation.callGasLimit;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"STACKUP\":\n\t\t\t\t\top.paymasterAndData = paymasterAndData;\n\t\t\t\t\top.preVerificationGas =\n\t\t\t\t\t\tsponsorUserOperation.preVerificationGas;\n\t\t\t\t\top.verificationGasLimit =\n\t\t\t\t\t\tsponsorUserOperation.verificationGasLimit;\n\t\t\t\t\top.callGasLimit = sponsorUserOperation.callGasLimit;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"0xGasless\":\n\t\t\t\t\top.paymasterAndData = paymasterAndData;\n\t\t\t\t\t// op.preVerificationGas =\n\t\t\t\t\t// \tsponsorUserOperation.preVerificationGas;\n\t\t\t\t\t// op.verificationGasLimit =\n\t\t\t\t\t// \tsponsorUserOperation.verificationGasLimit;\n\t\t\t\t\t// op.callGasLimit = sponsorUserOperation.callGasLimit;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// const paymasterAndData = sponsorUserOperation.paymasterAndData;\n\t\t\t// op.paymasterAndData = paymasterAndData;\n\t\t\treturn op;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync sendUserOperation(userOp: UserOperationCallData): Promise<Hash> {\n\t\ttry {\n\t\t\tawait this.initalize0xGaslessSmartAccount(this.signerAddress);\n\t\t\tlet { target, value, data } = userOp;\n\t\t\tif (!value) value = BigInt(0);\n\t\t\tlet op = await this.makeUserOp(target, value, data);\n\t\t\tif (this.options.isSponsoredTrx) {\n\t\t\t\tif (!this.options.paymasterEndpoint) {\n\t\t\t\t\top = await _api.getPMData(\n\t\t\t\t\t\tthis.apiKey || \"\",\n\t\t\t\t\t\top,\n\t\t\t\t\t\tthis.options.chainId\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.options.paymaster)\n\t\t\t\t\t\tthrow new Error(\"Paymaster not specified\");\n\t\t\t\t\tconsole.log(\"getting from pm endpoint\");\n\t\t\t\t\top = await this.getPaymasterDataUsingEndpoint(op);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst signedOp = await this.signUserOp(op);\n\n\t\t\tif (this.options.bundlerEndpoint) {\n\t\t\t\ttry {\n\t\t\t\t\tconst bundlerProvider =\n\t\t\t\t\t\tnew ethers.providers.StaticJsonRpcProvider(\n\t\t\t\t\t\t\tthis.options.bundlerEndpoint\n\t\t\t\t\t\t);\n\t\t\t\t\tconst userOperationHash = await bundlerProvider.send(\n\t\t\t\t\t\t\"eth_sendUserOperation\",\n\t\t\t\t\t\t[signedOp, this.chainData.ENTRY_POINT_ADDRESS]\n\t\t\t\t\t);\n\t\t\t\t\tconsole.log(\"User operation hash: \", userOperationHash);\n\t\t\t\t\treturn userOperationHash;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`error while sending trx through given bundler endpoint: ${error}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst res = await _api.sendUserOpToBundler(\n\t\t\t\t\tthis.apiKey,\n\t\t\t\t\tsignedOp,\n\t\t\t\t\tthis.chainId\n\t\t\t\t);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async makeUserOp(\n\t\ttarget: Address,\n\t\tvalue: bigint,\n\t\tdata: Hex\n\t): Promise<UserOperationRequest> {\n\t\ttry {\n\t\t\tconst kernelAccount = Kernel__factory.connect(\n\t\t\t\tthis.smartAccountAddress,\n\t\t\t\tthis.provider\n\t\t\t);\n\t\t\tconst callData = kernelAccount.interface.encodeFunctionData(\n\t\t\t\t\"execute\",\n\t\t\t\t[target, value, data, 0]\n\t\t\t) as `0x${string}`;\n\t\t\tconst gasPrice = await this.provider.getGasPrice();\n\t\t\tconst smartWalletDeployed = await this.initalizeSmartAccount();\n\t\t\tconst nonce = smartWalletDeployed\n\t\t\t\t? await this.entryPoint.callStatic.getNonce(\n\t\t\t\t\t\tthis.smartAccountAddress,\n\t\t\t\t\t\t0\n\t\t\t\t  )\n\t\t\t\t: 0;\n\n\t\t\tconst dummySignature = utils.hexConcat([\n\t\t\t\t\"0x00000000\",\n\t\t\t\tawait this.signer.signMessage(\n\t\t\t\t\tutils.arrayify(utils.keccak256(\"0xdead\"))\n\t\t\t\t),\n\t\t\t]);\n\n\t\t\tconst userOperation: UserOperationRequest = {\n\t\t\t\tsender: this.smartAccountAddress,\n\t\t\t\tnonce: utils.hexlify(nonce) as `0x${string}`,\n\t\t\t\tinitCode: \"0x\",\n\t\t\t\tcallData,\n\t\t\t\tcallGasLimit: utils.hexlify(2_000_000) as `0x${string}`,\n\t\t\t\tverificationGasLimit: utils.hexlify(2_000_000) as `0x${string}`,\n\t\t\t\tpreVerificationGas: utils.hexlify(200_000) as `0x${string}`,\n\t\t\t\tmaxFeePerGas: utils.hexlify(gasPrice) as `0x${string}`,\n\t\t\t\tmaxPriorityFeePerGas: utils.hexlify(gasPrice) as `0x${string}`,\n\t\t\t\tpaymasterAndData: \"0x\",\n\t\t\t\tsignature: dummySignature as `0x${string}`,\n\t\t\t};\n\t\t\treturn userOperation;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async signUserOp(\n\t\tuserOp: UserOperationRequest\n\t): Promise<UserOperationRequest> {\n\t\ttry {\n\t\t\tconst userOpHash = await this.entryPoint.getUserOpHash(userOp);\n\t\t\tconst signature = await this.signer.signMessage(\n\t\t\t\tutils.arrayify(userOpHash)\n\t\t\t);\n\t\t\tconst signatureWithPadding = utils.hexConcat([\n\t\t\t\t\"0x00000000\",\n\t\t\t\tsignature,\n\t\t\t]);\n\t\t\tconsole.log(\"userophash sign\", userOpHash, signature);\n\t\t\tuserOp.signature = signatureWithPadding as `0x${string}`;\n\t\t\treturn userOp;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync sendUserOperationBatch(\n\t\tuserOps: BatchUserOperationCallData\n\t): Promise<Hash> {\n\t\tlet target = [],\n\t\t\tvalue = [],\n\t\t\tdata = [];\n\t\tfor (let i = 0; i < userOps.length; i++) {\n\t\t\ttarget[i] = userOps[i].target;\n\t\t\tvalue[i] = userOps[i].value ? userOps[i].value : BigInt(0);\n\t\t\tdata[i] = userOps[i].data;\n\t\t}\n\n\t\tlet op = await this.makeUserOpBatch(\n\t\t\ttarget as `0x${string}`[],\n\t\t\tvalue as bigint[],\n\t\t\tdata as Hex[]\n\t\t);\n\t\tif (this.options.isSponsoredTrx) {\n\t\t\tif (!this.options.paymasterEndpoint) {\n\t\t\t\top = await _api.getPMData(\n\t\t\t\t\tthis.apiKey || \"\",\n\t\t\t\t\top,\n\t\t\t\t\tthis.options.chainId\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tif (!this.options.paymaster)\n\t\t\t\t\tthrow new Error(\"Paymaster not specified\");\n\t\t\t\tconsole.log(\"getting from pm endpoint\");\n\t\t\t\top = await this.getPaymasterDataUsingEndpoint(op);\n\t\t\t}\n\t\t}\n\t\tconst signedOp = await this.signUserOp(op);\n\n\t\tif (this.options.bundlerEndpoint) {\n\t\t\ttry {\n\t\t\t\tconst bundlerProvider =\n\t\t\t\t\tnew ethers.providers.StaticJsonRpcProvider(\n\t\t\t\t\t\tthis.options.bundlerEndpoint\n\t\t\t\t\t);\n\t\t\t\tconst userOperationHash = await bundlerProvider.send(\n\t\t\t\t\t\"eth_sendUserOperation\",\n\t\t\t\t\t[signedOp, this.chainData.ENTRY_POINT_ADDRESS]\n\t\t\t\t);\n\t\t\t\tconsole.log(\"User operation hash: \", userOperationHash);\n\t\t\t\treturn userOperationHash;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`error while sending trx through given bundler endpoint: ${error}`\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tconst res = await _api.sendUserOpToBundler(\n\t\t\t\tthis.apiKey,\n\t\t\t\tsignedOp,\n\t\t\t\tthis.chainId\n\t\t\t);\n\t\t\treturn res;\n\t\t}\n\t}\n\n\tprivate async makeUserOpBatch(\n\t\ttarget: Address[],\n\t\tvalue: bigint[],\n\t\tdata: Hex[]\n\t): Promise<UserOperationRequest> {\n\t\ttry {\n\t\t\tconst kernelAccount = Kernel__factory.connect(\n\t\t\t\tthis.smartAccountAddress,\n\t\t\t\tthis.provider\n\t\t\t);\n\t\t\tconst callData = kernelAccount.interface.encodeFunctionData(\n\t\t\t\t\"executeBatch\",\n\t\t\t\t[target, value, data, 0]\n\t\t\t) as `0x${string}`;\n\t\t\tconst gasPrice = await this.provider.getGasPrice();\n\t\t\tconst smartWalletDeployed = await this.initalizeSmartAccount();\n\t\t\tconst nonce = smartWalletDeployed\n\t\t\t\t? await this.entryPoint.callStatic.getNonce(\n\t\t\t\t\t\tthis.smartAccountAddress,\n\t\t\t\t\t\t0\n\t\t\t\t  )\n\t\t\t\t: 0;\n\n\t\t\tconst dummySignature = utils.hexConcat([\n\t\t\t\t\"0x00000000\",\n\t\t\t\tawait this.signer.signMessage(\n\t\t\t\t\tutils.arrayify(utils.keccak256(\"0xdead\"))\n\t\t\t\t),\n\t\t\t]);\n\n\t\t\tconst userOperation: UserOperationRequest = {\n\t\t\t\tsender: this.smartAccountAddress,\n\t\t\t\tnonce: utils.hexlify(nonce) as `0x${string}`,\n\t\t\t\tinitCode: \"0x\",\n\t\t\t\tcallData,\n\t\t\t\tcallGasLimit: utils.hexlify(250_000) as `0x${string}`,\n\t\t\t\tverificationGasLimit: utils.hexlify(600_000) as `0x${string}`,\n\t\t\t\tpreVerificationGas: utils.hexlify(200_000) as `0x${string}`,\n\t\t\t\tmaxFeePerGas: utils.hexlify(gasPrice) as `0x${string}`,\n\t\t\t\tmaxPriorityFeePerGas: utils.hexlify(gasPrice) as `0x${string}`,\n\t\t\t\tpaymasterAndData: \"0x\",\n\t\t\t\tsignature: dummySignature as `0x${string}`,\n\t\t\t};\n\t\t\treturn userOperation;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync addFunds(value: string) {\n\t\treturn await this.entryPoint.depositTo(this.smartAccountAddress, {\n\t\t\tvalue,\n\t\t\tfrom: this.signerAddress,\n\t\t});\n\t}\n\n\tasync withdrawFunds(toAddress: Address, value: string) {\n\t\treturn await this.entryPoint.withdrawTo(toAddress, value);\n\t}\n}\n","import * as API from \"../../api\";\nimport {\n\tEntryPoint__factory,\n\tEntryPoint,\n\tUserOperationStruct,\n} from \"@account-abstraction/contracts\";\nimport {\n\tProvider,\n\tTransactionRequest,\n\tTransactionResponse,\n\tJsonRpcProvider,\n} from \"@ethersproject/providers\";\nimport {\n\tECDSAValidator__factory,\n\tIKernelValidator__factory,\n\tKernel__factory,\n\tKernelFactory,\n\tKernelFactory__factory,\n\tKernelStorage,\n\tKernelStorage__factory,\n} from \"../../contracts\";\nimport {\n\tBatchUserOperationCallData,\n\tClientOptions,\n\tUserOperationCallData,\n\tUserOperationResponse,\n\tAddress,\n\tHex,\n\tUserOperationRequest,\n\tHash,\n    TelegramClientOptions,\n} from \"../../types\";\nimport { BigNumber, Signer, Wallet, ethers, utils } from \"ethers\";\nimport { CONSTANTS, defaultChainData, getConstants } from \"../../constants\";\nimport { _api } from \"../../api\";\n\nexport class AATelegramClient {\n\tprivate chainData = defaultChainData;\n\tprivate apiKey: string;\n\tprivate signer!: Signer;\n\tprivate signerAddress!: Address;\n\tprivate telegramUserId!: string;\n\tprivate provider: JsonRpcProvider = new JsonRpcProvider();\n\tprivate options!: ClientOptions;\n\tpublic chainId!: number;\n\tprivate entryPoint!: EntryPoint;\n\tprivate kernelAccountFactory!: KernelFactory;\n\tpublic smartAccountAddress!: Address;\n\n\tconstructor(apiKey: string) {\n\t\tthis.apiKey = apiKey;\n\t}\n\n\tasync init(\n\t\tprovider: JsonRpcProvider,\n\t\toptions: TelegramClientOptions\n\t): Promise<Object> {\n\t\ttry {\n\t\t\tif (!this.apiKey)\n\t\t\t\tthrow new Error(\"api key not provided during init\");\n\t\t\tconst isValid = await _api.validateAPIKey(this.apiKey);\n\t\t\tif (!isValid) throw new Error(\"api key invalid\");\n\n\t\t\tthis.options = options;\n\t\t\tthis.provider = provider;\n\t\t\tif (!options.chainId)\n\t\t\t\tthrow new Error(\"chainId not provided in options\");\n\t\t\tthis.chainId = options.chainId;\n\t\t\tthis.chainData = getConstants(this.chainId);\n\t\t\tthis.signerAddress = options.walletAddress;\n\t\t\tthis.telegramUserId = options.telegramUserId;\n\t\t\treturn await this.setupContractConfigs();\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async getAccountCallData() {\n\t\tconst _data = utils.solidityPack([\"address\"], [this.signerAddress]);\n\t\tconst iface = new ethers.utils.Interface(KernelStorage__factory.abi);\n\t\treturn iface.encodeFunctionData(\"initialize\", [\n\t\t\tthis.chainData.ECDSA_VALIDATOR_ADDRESS,\n\t\t\t_data,\n\t\t]);\n\t}\n\n\tprivate async setupContractConfigs() {\n\t\ttry {\n\t\t\tthis.entryPoint = EntryPoint__factory.connect(\n\t\t\t\tthis.chainData.ENTRY_POINT_ADDRESS,\n\t\t\t\tthis.provider\n\t\t\t);\n\t\t\tthis.kernelAccountFactory = KernelFactory__factory.connect(\n\t\t\t\tthis.chainData.KERNEL_FACTORY_ADDRESS,\n\t\t\t\tthis.provider\n\t\t\t);\n\t\t\tthis.smartAccountAddress = await this.getSmartContractAddress() as `0x${string}`;\n\t\t\treturn { smartAccountAddress: this.smartAccountAddress };\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async getSmartContractAddress() {\n\t\tconst kernelAccountFactory = KernelFactory__factory.connect(\n\t\t\tthis.chainData.KERNEL_FACTORY_ADDRESS,\n\t\t\tthis.provider\n\t\t);\n\t\tconst callData = await this.getAccountCallData();\n\t\tconst smartAccountAddress = await kernelAccountFactory.getAccountAddress(\n\t\t\t\tcallData,\n\t\t\t\tCONSTANTS.SALT\n\t\t\t);\n\t\treturn smartAccountAddress;\n\t}\n\n\n\tprivate async initalizeSmartAccount(): Promise<Address> {\n\t\ttry {\n\t\t\tconst kernelAccountFactory = KernelFactory__factory.connect(\n\t\t\t\tthis.chainData.KERNEL_FACTORY_ADDRESS,\n\t\t\t\tthis.provider\n\t\t\t);\n\t\t\tconst calldata = await this.getAccountCallData();\n\t\t\tconst smartAccountAddress =\n\t\t\t\tawait kernelAccountFactory.getAccountAddress(\n\t\t\t\t\tcalldata,\n\t\t\t\t\tCONSTANTS.SALT\n\t\t\t\t);\n\t\t\tconst contractCode = await this.provider.getCode(\n\t\t\t\tsmartAccountAddress\n\t\t\t);\n\t\t\tif (contractCode === \"0x\" || contractCode === undefined) {\n\t\t\t\tconst { receipt } =\n\t\t\t\t\tawait _api.createSmartAccountForTelegramUser(\n\t\t\t\t\t\tthis.apiKey,\n\t\t\t\t\t\tthis.telegramUserId,\n\t\t\t\t\t\tthis.signerAddress,\n\t\t\t\t\t\tthis.chainId,\n\t\t\t\t\t\tcalldata\n\t\t\t\t\t);\n\t\t\t}\n\t\t\treturn smartAccountAddress as `0x${string}`;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async getPaymasterDataUsingEndpoint(op: UserOperationRequest) {\n\t\ttry {\n\t\t\tconst paymasterEndpoint = this.options.paymasterEndpoint;\n\t\t\tif (!paymasterEndpoint)\n\t\t\t\tthrow new Error(\"paymaster endpoint not provided\");\n\t\t\tif (!this.options.paymaster)\n\t\t\t\tthrow new Error(\"paymaster not specified\");\n\t\t\tconst pmProvider = new ethers.providers.StaticJsonRpcProvider(\n\t\t\t\tpaymasterEndpoint\n\t\t\t);\n\n\t\t\tlet requestParams;\n\t\t\tswitch (this.options.paymaster) {\n\t\t\t\tcase \"STACKUP\":\n\t\t\t\t\trequestParams = [\n\t\t\t\t\t\top,\n\t\t\t\t\t\tthis.chainData.ENTRY_POINT_ADDRESS,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"payg\",\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"PIMLICO\":\n\t\t\t\t\trequestParams = [\n\t\t\t\t\t\top,\n\t\t\t\t\t\tthis.chainData.ENTRY_POINT_ADDRESS,\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"0xGasless\":\n\t\t\t\t\trequestParams = [\n\t\t\t\t\t\top,\n\t\t\t\t\t\tthis.chainData.ENTRY_POINT_ADDRESS,\n\t\t\t\t\t\tthis.options.paymasterId\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet sponsorUserOperation = await pmProvider.send(\n\t\t\t\t\"pm_sponsorUserOperation\",\n\t\t\t\trequestParams\n\t\t\t);\n\t\t\tconst paymasterAndData = sponsorUserOperation.paymasterAndData;\n\t\t\tswitch (this.options.paymaster) {\n\t\t\t\tcase \"PIMLICO\":\n\t\t\t\t\t// case \"BICONOMY\":\n\t\t\t\t\top.paymasterAndData = paymasterAndData;\n\t\t\t\t\top.preVerificationGas =\n\t\t\t\t\t\tsponsorUserOperation.preVerificationGas;\n\t\t\t\t\top.verificationGasLimit =\n\t\t\t\t\t\tsponsorUserOperation.verificationGasLimit;\n\t\t\t\t\top.callGasLimit = sponsorUserOperation.callGasLimit;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"STACKUP\":\n\t\t\t\t\top.paymasterAndData = paymasterAndData;\n\t\t\t\t\top.preVerificationGas =\n\t\t\t\t\t\tsponsorUserOperation.preVerificationGas;\n\t\t\t\t\top.verificationGasLimit =\n\t\t\t\t\t\tsponsorUserOperation.verificationGasLimit;\n\t\t\t\t\top.callGasLimit = sponsorUserOperation.callGasLimit;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// const paymasterAndData = sponsorUserOperation.paymasterAndData;\n\t\t\t// op.paymasterAndData = paymasterAndData;\n\t\t\treturn op;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync prepareUserOperation(userOp: UserOperationCallData) {\n\t\ttry {\n\t\t\tlet { target, value, data } = userOp;\n\t\t\tif (!value) value = BigInt(0);\n\t\t\tlet op = await this.makeUserOp(target, value, data);\n\t\t\tif (this.options.isSponsoredTrx) {\n\t\t\t\tif (!this.options.paymasterEndpoint) {\n\t\t\t\t\top = await _api.getPMData(\n\t\t\t\t\t\tthis.apiKey || \"\",\n\t\t\t\t\t\top,\n\t\t\t\t\t\tthis.options.chainId\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.options.paymaster)\n\t\t\t\t\t\tthrow new Error(\"Paymaster not specified\");\n\t\t\t\t\top = await this.getPaymasterDataUsingEndpoint(op);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst prepareOpReq = await _api.logPrepareUseropRequest(\n\t\t\t\tthis.apiKey,\n\t\t\t\top,\n\t\t\t\tthis.chainId,\n\t\t\t\tthis.telegramUserId\n\t\t\t);\n\t\t\treturn await _api.sendTelegramOTP(\n\t\t\t\tthis.apiKey,\n\t\t\t\tthis.telegramUserId,\n\t\t\t\tprepareOpReq._id.toString()\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync sendUserOperation(\n\t\tprepareOpReqId: string,\n\t\totp: string\n\t): Promise<Hash> {\n\t\ttry {\n\t\t\tawait this.initalizeSmartAccount();\n\t\t\tif(this.options.bundlerEndpoint){\n\t\t\t\ttry {\n\t\t\t\t\tconst signedOp = await _api.verifyTelegramOTPAndGetSignedOp(\n\t\t\t\t\t\tthis.apiKey,\n\t\t\t\t\t\tprepareOpReqId,\n\t\t\t\t\t\tthis.telegramUserId,\n\t\t\t\t\t\totp\n\t\t\t\t\t);\n\t\t\t\t\tconst bundlerProvider = new ethers.providers.StaticJsonRpcProvider(this.options.bundlerEndpoint);\n\t\t\t\t\tconst userOperationHash = await bundlerProvider.send(\n\t\t\t\t\t\t\"eth_sendUserOperation\",\n\t\t\t\t\t\t[signedOp, this.chainData.ENTRY_POINT_ADDRESS]\n\t\t\t\t\t);\n\t\t\t\t\tconsole.log(\"User operation hash: \", userOperationHash);\n\t\t\t\t\treturn userOperationHash;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new Error(`error while sending trx through given bundler endpoint: ${error}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tconst res = await _api.sendTelegramUseropRequest(\n\t\t\t\t\tthis.apiKey,\n\t\t\t\t\tprepareOpReqId,\n\t\t\t\t\tthis.telegramUserId,\n\t\t\t\t\totp\n\t\t\t\t);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async makeUserOp(\n\t\ttarget: Address,\n\t\tvalue: bigint,\n\t\tdata: Hex\n\t): Promise<UserOperationRequest> {\n\t\ttry {\n\t\t\tconst kernelAccount = Kernel__factory.connect(\n\t\t\t\tthis.smartAccountAddress,\n\t\t\t\tthis.provider\n\t\t\t);\n\t\t\tconst callData = kernelAccount.interface.encodeFunctionData(\n\t\t\t\t\"execute\",\n\t\t\t\t[target, value, data, 0]\n\t\t\t) as `0x${string}`;\n\t\t\tconst gasPrice = await this.provider.getGasPrice();\n\t\t\tconst smartWalletDeployed = await this.initalizeSmartAccount();\n\t\t\tconst nonce = smartWalletDeployed\n\t\t\t\t? await this.entryPoint.callStatic.getNonce(\n\t\t\t\t\t\tthis.smartAccountAddress,\n\t\t\t\t\t\t0\n\t\t\t\t  )\n\t\t\t\t: 0;\n\n\t\t\tconst userOperation: UserOperationRequest = {\n\t\t\t\tsender: this.smartAccountAddress,\n\t\t\t\tnonce: utils.hexlify(nonce) as `0x${string}`,\n\t\t\t\tinitCode: \"0x\",\n\t\t\t\tcallData,\n\t\t\t\tcallGasLimit: utils.hexlify(250_000) as `0x${string}`,\n\t\t\t\tverificationGasLimit: utils.hexlify(600_000) as `0x${string}`,\n\t\t\t\tpreVerificationGas: utils.hexlify(200_000) as `0x${string}`,\n\t\t\t\tmaxFeePerGas: utils.hexlify(gasPrice) as `0x${string}`,\n\t\t\t\tmaxPriorityFeePerGas: utils.hexlify(gasPrice) as `0x${string}`,\n\t\t\t\tpaymasterAndData: \"0x\",\n\t\t\t\tsignature: \"0x\",\n\t\t\t};\n\t\t\treturn userOperation;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\n\tasync prepareUserOperationBatch(userOps: BatchUserOperationCallData) {\n\t\ttry {\n\t\t\tlet target = [],\n\t\t\t\tvalue = [],\n\t\t\t\tdata = [];\n\t\t\tfor (let i = 0; i < userOps.length; i++) {\n\t\t\t\ttarget[i] = userOps[i].target;\n\t\t\t\tvalue[i] = userOps[i].value ? userOps[i].value : BigInt(0);\n\t\t\t\tdata[i] = userOps[i].data;\n\t\t\t}\n\n\t\t\tlet op = await this.makeUserOpBatch(\n\t\t\t\ttarget as `0x${string}`[],\n\t\t\t\tvalue as bigint[],\n\t\t\t\tdata as Hex[]\n\t\t\t);\n\t\t\tif (this.options.isSponsoredTrx) {\n\t\t\t\tif (!this.options.paymasterEndpoint) {\n\t\t\t\t\top = await _api.getPMData(\n\t\t\t\t\t\tthis.apiKey || \"\",\n\t\t\t\t\t\top,\n\t\t\t\t\t\tthis.options.chainId\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.options.paymaster)\n\t\t\t\t\t\tthrow new Error(\"Paymaster not specified\");\n\t\t\t\t\top = await this.getPaymasterDataUsingEndpoint(op);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst prepareOpReq = await _api.logPrepareUseropRequest(\n\t\t\t\tthis.apiKey,\n\t\t\t\top,\n\t\t\t\tthis.chainId,\n\t\t\t\tthis.telegramUserId\n\t\t\t);\n\t\t\treturn await _api.sendTelegramOTP(\n\t\t\t\tthis.apiKey,\n\t\t\t\tthis.telegramUserId,\n\t\t\t\tprepareOpReq._id.toString()\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async makeUserOpBatch(\n\t\ttarget: Address[],\n\t\tvalue: bigint[],\n\t\tdata: Hex[]\n\t): Promise<UserOperationRequest> {\n\t\ttry {\n\t\t\tconst kernelAccount = Kernel__factory.connect(\n\t\t\t\tthis.smartAccountAddress,\n\t\t\t\tthis.provider\n\t\t\t);\n\t\t\tconst callData = kernelAccount.interface.encodeFunctionData(\n\t\t\t\t\"executeBatch\",\n\t\t\t\t[target, value, data, 0]\n\t\t\t) as `0x${string}`;\n\t\t\tconst gasPrice = await this.provider.getGasPrice();\n\t\t\tconst smartWalletDeployed = await this.initalizeSmartAccount();\n\t\t\tconst nonce = smartWalletDeployed\n\t\t\t\t? await this.entryPoint.callStatic.getNonce(\n\t\t\t\t\t\tthis.smartAccountAddress,\n\t\t\t\t\t\t0\n\t\t\t\t  )\n\t\t\t\t: 0;\n\t\t\tconst userOperation: UserOperationRequest = {\n\t\t\t\tsender: this.smartAccountAddress,\n\t\t\t\tnonce: utils.hexlify(nonce) as `0x${string}`,\n\t\t\t\tinitCode: \"0x\",\n\t\t\t\tcallData,\n\t\t\t\tcallGasLimit: utils.hexlify(250_000) as `0x${string}`,\n\t\t\t\tverificationGasLimit: utils.hexlify(600_000) as `0x${string}`,\n\t\t\t\tpreVerificationGas: utils.hexlify(200_000) as `0x${string}`,\n\t\t\t\tmaxFeePerGas: utils.hexlify(gasPrice) as `0x${string}`,\n\t\t\t\tmaxPriorityFeePerGas: utils.hexlify(gasPrice) as `0x${string}`,\n\t\t\t\tpaymasterAndData: \"0x\",\n\t\t\t\tsignature: \"0x\",\n\t\t\t};\n\t\t\treturn userOperation;\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n}\n","import { JsonRpcProvider } from \"@ethersproject/providers\";\nimport { AATelegramClient } from \"./modules/aa-telegram-client\";\nimport { Address, BatchUserOperationCallData, ClientOptions, Hash,  SendUserOpResponse,  TelegramClientOptions,  UserOperationCallData, UserOperationReceiptObject, UserOperationResponse } from \"./types\";\nimport { _api } from \"./api\";\nimport { CONSTANTS } from \"./constants\";\nconst supportedChains = [...CONSTANTS.SUPPORTED_MAIN_CHAIN_IDS, ...CONSTANTS.SUPPORTED_TEST_CHAIN_IDS]; \n\nclass AA0xGaslessTG {\n\n    private aaClient: AATelegramClient;\n    private apiKey: string;\n\n    constructor(apiKey: string) {\n        this.aaClient = new AATelegramClient(apiKey);\n        this.apiKey = apiKey;\n    }\n\n    public init(provider: JsonRpcProvider, options: TelegramClientOptions ): Promise<Object> {\n        if(!options.chainId) throw new Error(\"chainId not provided in options\");\n        if(!supportedChains.includes(options.chainId)) throw new Error(\"chainId not supported\");\n        if(CONSTANTS.SUPPORTED_MAIN_CHAIN_IDS.includes(options.chainId) && (!options.paymasterEndpoint && options.isSponsoredTrx)){\n            throw new Error(\"paymaster endpoint required for sponsored trx on mainnet chains\");\n        }\n        return this.aaClient.init(provider,options);\n    }\n\n    public prepareUserOp(userOp: UserOperationCallData): Promise<{requestId:string, otpSent: string}> {\n        return this.aaClient.prepareUserOperation(userOp);\n    }\n\n    async prepareUserOpBatch(userOps:BatchUserOperationCallData) {\n        return this.aaClient.prepareUserOperationBatch(userOps);\n    }\n\n    async sendUserOp(requestId:string, otp:string) : Promise<SendUserOpResponse>{\n        const userOpHash = await this.aaClient.sendUserOperation(requestId, otp)\n        let useropReceipt;\n        try {\n            useropReceipt = await this.getTrxReceiptByUserOpHash(userOpHash, this.aaClient.chainId)\n        } catch (error) {}\n\n        return {userOpHash: userOpHash, transactionHash: useropReceipt && useropReceipt.transactionHash}\n    }\n\n    public async getTrxReceiptByUserOpHash(userOpHash: Hash, chainId:number): Promise<UserOperationReceiptObject> {\n        return await _api.getTrxReceipt(userOpHash, this.apiKey, chainId);\n    }\n}\n\nexport default AA0xGaslessTG;","import { JsonRpcProvider } from \"@ethersproject/providers\";\nimport { AAClient } from \"./modules/aa-client\";\nimport { AATelegramClient } from \"./modules/aa-telegram-client\";\nimport {\n\tAddress,\n\tBatchUserOperationCallData,\n\tClientOptions,\n\tHash,\n\tUserOperationCallData,\n\tUserOperationResponse,\n\tSendUserOpResponse,\n\tUserOperationReceipt,\n\tUserOperationReceiptObject,\n} from \"./types\";\nimport { _api } from \"./api\";\nimport { CONSTANTS } from \"./constants\";\nimport AA0xGaslessTG from \"./AA0xGaslessTG\";\n\nconst supportedChains = [\n\t...CONSTANTS.SUPPORTED_MAIN_CHAIN_IDS,\n\t...CONSTANTS.SUPPORTED_TEST_CHAIN_IDS,\n];\n\nclass AA0xGasless {\n\tprivate aaClient: AAClient;\n\tprivate apiKey: string;\n\n\tconstructor(apiKey: string) {\n\t\tthis.aaClient = new AAClient(apiKey);\n\t\tthis.apiKey = apiKey;\n\t}\n\n\tpublic init(\n\t\tprovider: JsonRpcProvider,\n\t\toptions: ClientOptions\n\t): Promise<Object> {\n\t\tif (!options.chainId)\n\t\t\tthrow new Error(\"chainId not provided in options\");\n\t\tif (!supportedChains.includes(options.chainId))\n\t\t\tthrow new Error(\"chainId not supported\");\n\t\tif (\n\t\t\tCONSTANTS.SUPPORTED_MAIN_CHAIN_IDS.includes(options.chainId) &&\n\t\t\t!options.paymasterEndpoint &&\n\t\t\toptions.isSponsoredTrx\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t\"paymaster endpoint required for sponsored trx on mainnet chains\"\n\t\t\t);\n\t\t}\n\t\treturn this.aaClient.init(provider, options);\n\t}\n\n\tpublic async sendUserOp(\n\t\tuserOp: UserOperationCallData\n\t): Promise<SendUserOpResponse> {\n\t\tconst userOpHash = await this.aaClient.sendUserOperation(userOp);\n\t\tlet useropReceipt;\n\t\ttry {\n\t\t\tuseropReceipt = await this.getTrxReceiptByUserOpHash(\n\t\t\t\tuserOpHash,\n\t\t\t\tthis.aaClient.chainId\n\t\t\t);\n\t\t} catch (error) {}\n\n\t\treturn {\n\t\t\tuserOpHash: userOpHash,\n\t\t\ttransactionHash: useropReceipt && useropReceipt.transactionHash,\n\t\t};\n\t}\n\n\tpublic async getTrxReceiptByUserOpHash(\n\t\tuserOpHash: Hash,\n\t\tchainId: number\n\t): Promise<UserOperationReceiptObject> {\n\t\treturn await _api.getTrxReceipt(userOpHash, this.apiKey, chainId);\n\t}\n\n\tasync sendUserOpsBatch(\n\t\tuserOps: BatchUserOperationCallData\n\t): Promise<SendUserOpResponse> {\n\t\tconst userOpHash = await this.aaClient.sendUserOperationBatch(userOps);\n\t\tlet useropReceipt;\n\t\ttry {\n\t\t\tuseropReceipt = await this.getTrxReceiptByUserOpHash(\n\t\t\t\tuserOpHash,\n\t\t\t\tthis.aaClient.chainId\n\t\t\t);\n\t\t} catch (error) {}\n\n\t\treturn {\n\t\t\tuserOpHash: userOpHash,\n\t\t\ttransactionHash: useropReceipt && useropReceipt.transactionHash,\n\t\t};\n\t}\n\n\t//add funds from EOA to EntryPoint on behalf of AA wallet\n\tasync addFundsToEntryPoint(value: string) {\n\t\treturn this.aaClient.addFunds(value);\n\t}\n\n\t//withdraw funds from EntryPoint to toAddress\n\tasync withdrawFundsFromEntryPoint(toAddress: Address, value: string) {\n\t\treturn this.aaClient.withdrawFunds(toAddress, value);\n\t}\n}\n\nexport { AA0xGaslessTG, AA0xGasless };\nexport * from \"./types\";\n"],"names":["exports","__esModule","BaseAccount__factory","_abi","inputs","name","outputs","internalType","type","stateMutability","components","createInterface","ethers_1","utils","Interface","connect","address","signerOrProvider","Contract","abi","BasePaymaster__factory","anonymous","indexed","extendStatics","__extends","this","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","TypeError","String","__","constructor","create","BrokenBLSAccount__factory","_bytecode","_super","args","_i","arguments","length","apply","deploy","anEntryPoint","anAggregator","overrides","getDeployTransaction","attach","signer","bytecode","ContractFactory","BrokenBLSAccountFactory__factory","entryPoint","aggregator","DepositPaymaster__factory","_entryPoint","EntryPoint__factory","IAccount__factory","IAggregator__factory","IEntryPoint__factory","INonceManager__factory","IPaymaster__factory","IStakeManager__factory","MaliciousAccount__factory","_ep","NonceManager__factory","SenderCreator__factory","SimpleAccount__factory","SimpleAccountFactory__factory","StakeManager__factory","TokenCallbackHandler__factory","TokenPaymaster__factory","accountFactory","_symbol","VerifyingPaymaster__factory","_verifyingSigner","__createBinding","o","m","k","k2","undefined","desc","getOwnPropertyDescriptor","writable","configurable","enumerable","get","defineProperty","BaseAccount__factory_1","BasePaymaster__factory_1","BrokenBLSAccount__factory_1","BrokenBLSAccountFactory__factory_1","DepositPaymaster__factory_1","EntryPoint__factory_1","IAccount__factory_1","IAggregator__factory_1","IEntryPoint__factory_1","INonceManager__factory_1","IPaymaster__factory_1","IStakeManager__factory_1","MaliciousAccount__factory_1","NonceManager__factory_1","SenderCreator__factory_1","SimpleAccount__factory_1","SimpleAccountFactory__factory_1","StakeManager__factory_1","TokenCallbackHandler__factory_1","TokenPaymaster__factory_1","VerifyingPaymaster__factory_1","factories","require$$0","__exportStar","Kernel__factory","super","KernelFactory__factory","_owner","ECDSAValidator__factory","KernelStorage__factory","CONSTANTS","SALT","API_URL","SUPPORTED_TEST_CHAIN_IDS","SUPPORTED_MAIN_CHAIN_IDS","getConstants","chainId","ENTRY_POINT_ADDRESS","KERNEL_FACTORY_ADDRESS","ECDSA_VALIDATOR_ADDRESS","KERNEL_IMPLEMENTATION","defaultChainData","_api","validateAPIKey","apiKey","headers","res","fetch","method","status","errorDetails","json","Error","message","valid","error","getTrxReceipt","userOpHash","resData","receipt","getPMData","userOp","Accept","body","JSON","stringify","userOperation","sendUserOpToBundler","userOperationHash","sendTelegramOTP","telegramUserId","requestId","createSmartAccountForTelegramUser","walletAddress","calldata","console","log","logPrepareUseropRequest","sendTelegramUseropRequest","otp","verifyTelegramOTPAndGetSignedOp","signedOp","create0xGaslessSmartAccountForUser","eoa","AAClient","chainData","signerAddress","provider","JsonRpcProvider","options","kernelAccountFactory","smartAccountAddress","init","privateKey","Wallet","getSigner","setupContractConfigs","getAccountCallData","_data","solidityPack","ethers","encodeFunctionData","getAccountCallDataByAddress","getSmartContractAddress","callData","getAccountAddress","getAddress","initalizeSmartAccount","contractCode","getCode","gasEstimate","estimateGas","createAccount","BigNumber","from","gasLimit","accountTransaction","wait","initalize0xGaslessSmartAccount","noAccountCreateSponsorship","resSmartAccountAddress","getPaymasterDataUsingEndpoint","op","paymasterEndpoint","paymaster","pmProvider","providers","StaticJsonRpcProvider","requestParams","erc20token","paymasterId","token","sponsorUserOperation","send","paymasterAndData","preVerificationGas","verificationGasLimit","callGasLimit","sendUserOperation","target","value","data","BigInt","makeUserOp","isSponsoredTrx","signUserOp","bundlerEndpoint","bundlerProvider","interface","gasPrice","getGasPrice","nonce","callStatic","getNonce","dummySignature","hexConcat","signMessage","arrayify","keccak256","sender","hexlify","initCode","maxFeePerGas","maxPriorityFeePerGas","signature","getUserOpHash","signatureWithPadding","sendUserOperationBatch","userOps","i","makeUserOpBatch","addFunds","depositTo","withdrawFunds","toAddress","withdrawTo","AATelegramClient","prepareUserOperation","prepareOpReq","_id","toString","prepareOpReqId","prepareUserOperationBatch","supportedChains","AA0xGaslessTG","aaClient","includes","prepareUserOp","prepareUserOpBatch","sendUserOp","useropReceipt","getTrxReceiptByUserOpHash","transactionHash","AA0xGasless","sendUserOpsBatch","addFundsToEntryPoint","withdrawFundsFromEntryPoint"],"mappings":"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,CACIM,WAAY,CACR,CACIH,aAAc,UACdF,KAAM,SACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,QACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,WACNG,KAAM,SAEV,CACID,aAAc,QACdF,KAAM,WACNG,KAAM,SAEV,CACID,aAAc,UACdF,KAAM,eACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,uBACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,qBACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,eACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,uBACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,mBACNG,KAAM,SAEV,CACID,aAAc,QACdF,KAAM,YACNG,KAAM,UAGdD,aAAc,yBACdF,KAAM,UACNG,KAAM,YAGdH,KAAM,sBACNC,QAAS,CACL,CACIC,aAAc,QACdF,KAAM,sBACNG,KAAM,UAGdC,gBAAiB,OACjBD,KAAM,YAEV,CACIJ,OAAQ,CACJ,CACIM,WAAY,CACR,CACIH,aAAc,UACdF,KAAM,SACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,QACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,WACNG,KAAM,SAEV,CACID,aAAc,QACdF,KAAM,WACNG,KAAM,SAEV,CACID,aAAc,UACdF,KAAM,eACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,uBACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,qBACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,eACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,uBACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,mBACNG,KAAM,SAEV,CACID,aAAc,QACdF,KAAM,YACNG,KAAM,UAGdD,aAAc,yBACdF,KAAM,UACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,YACNG,KAAM,UAGdH,KAAM,qBACNC,QAAS,GACTG,gBAAiB,OACjBD,KAAM,YAEV,CACIJ,OAAQ,CACJ,CACIM,WAAY,CACR,CACIH,aAAc,UACdF,KAAM,SACNG,KAAM,W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M,WAEV,CACID,aAAc,UACdF,KAAM,QACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,WACNG,KAAM,SAEV,CACID,aAAc,QACdF,KAAM,WACNG,KAAM,SAEV,CACID,aAAc,UACdF,KAAM,eACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,uBACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,qBACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,eACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,uBACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,mBACNG,KAAM,SAEV,CACID,aAAc,QACdF,KAAM,YACNG,KAAM,UAGdD,aAAc,yBACdF,KAAM,MACNG,KAAM,WAEV,CACID,aAAc,kBACdF,KAAM,cACNG,KAAM,YAGdH,KAAM,YACNC,QAAS,GACTG,gBAAiB,aACjBD,KAAM,YAEV,CACIJ,OAAQ,CACJ,CACIG,aAAc,UACdF,KAAM,MACNG,KAAM,YAGdH,KAAM,iBACNC,QAAS,GACTG,gBAAiB,aACjBD,KAAM,YAEV,CACIJ,OAAQ,CACJ,CACIM,WAAY,CACR,CACIH,aAAc,UACdF,KAAM,SACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,QACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,WACNG,KAAM,SAEV,CACID,aAAc,QACdF,KAAM,WACNG,KAAM,SAEV,CACID,aAAc,UACdF,KAAM,eACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,uBACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,qBACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,eACNG,KAAM,WAEV,CACID,aAAc,UACdF,KAAM,uBACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,mBACNG,KAAM,SAEV,CACID,aAAc,QACdF,KAAM,YACNG,KAAM,UAGdD,aAAc,uBACdF,KAAM,KACNG,KAAM,SAEV,CACID,aAAc,UACdF,KAAM,SACNG,KAAM,WAEV,CACID,aAAc,QACdF,KAAM,iBACNG,KAAM,UAGdH,KAAM,mBACNC,QAAS,GACT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,SACdF,KAAM,UACNG,KAAM,UAER,CACED,aAAc,UACdF,KAAM,UACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,oBACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,OACNG,KAAM,WAER,CACED,aAAc,YACdF,KAAM,aACNG,KAAM,cAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,GACRC,KAAM,aACNC,QAAS,CACP,CACEC,aAAc,uBACdF,KAAM,GACNG,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,KACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,QACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,OACNG,KAAM,SAER,CACED,aAAc,iBACdF,KAAM,YACNG,KAAM,UAGVH,KAAM,UACNC,QAAS,GACTG,gBAAiB,UACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,YACdF,KAAM,OACNG,KAAM,aAER,CACED,aAAc,YACdF,KAAM,SACNG,KAAM,aAER,CACED,aAAc,UACdF,KAAM,OACNG,KAAM,WAER,CACED,aAAc,iBACdF,KAAM,YACNG,KAAM,UAGVH,KAAM,eACNC,QAAS,GACTG,gBAAiB,aACjBD,KAAM,YAER,CACEJ,OAAQ,GACRC,KAAM,sBACNC,QAAS,CACP,CACEC,aAAc,4BACdF,KAAM,YACNG,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,GACRC,KAAM,kBACNC,QAAS,CACP,CACEC,aAAc,SACdF,KAAM,WACNG,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,SACdF,KAAM,YACNG,KAAM,WAGVH,KAAM,eACNC,QAAS,CACP,CACEI,WAAY,CACV,CACEH,aAAc,aACdF,KAAM,aACNG,KAAM,UAER,CACED,aAAc,aACdF,KAAM,aACNG,KAAM,UAER,CACED,aAAc,UACdF,KAAM,WACNG,KAAM,WAER,CACED,aAAc,4BACdF,KAAM,YACNG,KAAM,YAGVD,aAAc,yBACdF,KAAM,GACNG,KAAM,UAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,GACRC,KAAM,sBACNC,QAAS,CACP,CACEC,aAAc,SACdF,KAAM,GACNG,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,MACNG,KAAM,YAGVH,KAAM,WACNC,QAAS,CACP,CACEC,aAAc,UACdF,KAAM,GACNG,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,GACRC,KAAM,WACNC,QAAS,CACP,CACEC,aAAc,UACdF,KAAM,GACNG,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,4BACdF,KAAM,oBACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,QACNG,KAAM,UAGVH,KAAM,aACNC,QAAS,GACTG,gBAAiB,UACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,OACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,YACNG,KAAM,UAGVH,KAAM,mBACNC,QAAS,CACP,CACEC,aAAc,SACdF,KAAM,GACNG,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,GACRC,KAAM,OACNC,QAAS,CACP,CACEC,aAAc,SACdF,KAAM,GACNG,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,GACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,GACNG,KAAM,WAER,CACED,aAAc,YACdF,KAAM,GACNG,KAAM,aAER,CACED,aAAc,YACdF,KAAM,GACNG,KAAM,aAER,CACED,aAAc,QACdF,KAAM,GACNG,KAAM,UAGVH,KAAM,yBACNC,QAAS,CACP,CACEC,aAAc,SACdF,KAAM,GACNG,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,GACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,GACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,GACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,GACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,GACNG,KAAM,UAGVH,KAAM,oBACNC,QAAS,CACP,CACEC,aAAc,SACdF,KAAM,GACNG,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,GACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,GACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,GACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,GACNG,KAAM,UAGVH,KAAM,mBACNC,QAAS,CACP,CACEC,aAAc,SACdF,KAAM,GACNG,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,4BACdF,KAAM,oBACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,QACNG,KAAM,UAGVH,KAAM,sBACNC,QAAS,GACTG,gBAAiB,UACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,SACdF,KAAM,YACNG,KAAM,UAER,CACED,aAAc,UACdF,KAAM,YACNG,KAAM,WAER,CACED,aAAc,4BACdF,KAAM,aACNG,KAAM,WAER,CACED,aAAc,SACdF,KAAM,cACNG,KAAM,UAER,CACED,aAAc,SACdF,KAAM,cACNG,KAAM,UAER,CACED,aAAc,QACdF,KAAM,cACNG,KAAM,UAGVH,KAAM,eACNC,QAAS,GACTG,gBAAiB,UACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,qBACNG,KAAM,YAGVH,KAAM,YACNC,QAAS,GACTG,gBAAiB,UACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEM,WAAY,CACV,CACEH,aAAc,UACdF,KAAM,SACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,QACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,WACNG,KAAM,SAER,CACED,aAAc,QACdF,KAAM,WACNG,KAAM,SAER,CACED,aAAc,UACdF,KAAM,eACNG,KAA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,KAAM,YAGVH,KAAM,eACNG,KAAM,SAER,CACEJ,OAAQ,CACN,CACEG,aAAc,QACdF,KAAM,GACNG,KAAM,UAGVH,KAAM,UACNC,QAAS,GACTG,gBAAiB,UACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,GACNG,KAAM,YAGVH,KAAM,wBACNC,QAAS,CACP,CACEC,aAAc,UACdF,KAAM,QACNG,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,QACdF,KAAM,QACNG,KAAM,UAGVH,KAAM,SACNC,QAAS,GACTG,gBAAiB,UACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,UACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,GACNG,KAAM,UAGVH,KAAM,cACNC,QAAS,CACP,CACEC,aAAc,OACdF,KAAM,GACNG,KAAM,SAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEG,aAAc,UACdF,KAAM,OACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,YACNG,KAAM,UAGVH,KAAM,oBACNC,QAAS,CACP,CACEC,aAAc,iBACdF,KAAM,GACNG,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEJ,OAAQ,CACN,CACEM,WAAY,CACV,CACEH,aAAc,UACdF,KAAM,SACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,QACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,WACNG,KAAM,SAER,CACED,aAAc,QACdF,KAAM,WACNG,KAAM,SAER,CACED,aAAc,UACdF,KAAM,eACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,uBACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,qBACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,eACNG,KAAM,WAER,CACED,aAAc,UACdF,KAAM,uBACNG,KAAM,WAER,CACED,aAAc,QACdF,KAAM,mBACNG,KAAM,SAER,CACED,aAAc,QACdF,KAAM,YACNG,KAAM,UAGVD,aAAc,uBACdF,KA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"}