From 042db1f2655013a038242cc035f0daf590e9731e Mon Sep 17 00:00:00 2001 From: Garvit Khatri Date: Sun, 3 Nov 2024 00:20:37 +0000 Subject: [PATCH 1/5] Add nexus account --- .../mock-aa-infra/alto/constants.ts | 6 + .../mock-aa-infra/alto/index.ts | 19 +- packages/permissionless-test/src/utils.ts | 33 +++ packages/permissionless/accounts/index.ts | 11 + .../accounts/nexus/toNexusSmartAccount.ts | 214 ++++++++++++++++++ 5 files changed, 281 insertions(+), 2 deletions(-) create mode 100644 packages/permissionless/accounts/nexus/toNexusSmartAccount.ts diff --git a/packages/permissionless-test/mock-aa-infra/alto/constants.ts b/packages/permissionless-test/mock-aa-infra/alto/constants.ts index 88ac79e7..b083bc71 100644 --- a/packages/permissionless-test/mock-aa-infra/alto/constants.ts +++ b/packages/permissionless-test/mock-aa-infra/alto/constants.ts @@ -170,3 +170,9 @@ export const THIRDWEB_FACTORY_V06_CREATECALL = export const THIRDWEB_FACTORY_V07_CREATECALL = "0x70f12235750810d18f16836d54f510d6db0dab4fde7da4c9666cbdfaf6af011860c06040523480156200001157600080fd5b506040516200666138038062006661833981016040819052620000349162000297565b8030604051620000449062000270565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000078573d6000803e3d6000fd5b506001600160a01b03908116608052811660a05262000099600083620000a1565b50506200031e565b620000ad8282620000bd565b620000b9828262000137565b5050565b60008281527f0a7b0f5c59907924802379ebe98cdc23e2ee7820f63d30126e10b3752010e500602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006200014362000205565b60008481526020919091526040902054905060016200016162000205565b600085815260209190915260408120805490919062000182908490620002ec565b909155508290506200019362000205565b6000858152602091825260408082208583526001019092522080546001600160a01b0319166001600160a01b039290921691909117905580620001d562000205565b6000948552602090815260408086206001600160a01b03909516865260029094019052919092205550565b905090565b60006200020060008060ff196200023e60017f0c4ba382c0009cf238e4c1ca1a52f51c61e6248a70bdfb34e5ed49d5578a5c0c62000308565b6040516020016200025191815260200190565b60408051601f1981840301815291905280516020909101201692915050565b6141ec806200247583390190565b6001600160a01b03811681146200029457600080fd5b50565b60008060408385031215620002ab57600080fd5b8251620002b8816200027e565b6020840151909250620002cb816200027e565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620003025762000302620002d6565b92915050565b81810381811115620003025762000302620002d6565b60805160a05161211562000360600039600081816102a30152610b760152600081816101780152818161060001528181610ad20152610df601526121156000f3fe608060405234801561001057600080fd5b50600436106101285760003560e01c806308e93d0a1461012d5780630b61e12b1461014b5780630e6254fd1461016057806311464fbe14610173578063248a9ca3146101b25780632f2ff15d146101d357806336568abe146101e657806358451f97146101f957806383a03f8c146102015780638878ed33146102145780639010d07c1461022757806391d148541461023a5780639387a3801461025d578063938e3d7b14610270578063a217fddf14610283578063a32fa5b31461028b578063a65d69d41461029e578063ac9650d8146102c5578063c3c5a547146102e5578063ca15c873146102f8578063d547741f1461030b578063d8fd8f441461031e578063e68a7c3b14610331578063e8a3d48514610344575b600080fd5b610135610359565b6040516101429190611945565b60405180910390f35b61015e6101593660046119ae565b61036a565b005b61013561016e3660046119d8565b61040b565b61019a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610142565b6101c56101c03660046119f3565b610435565b604051908152602001610142565b61015e6101e1366004611a0c565b610453565b61015e6101f4366004611a0c565b6104fd565b6101c561055c565b61015e61020f3660046119f3565b610568565b61019a610222366004611a38565b6105b6565b61019a610235366004611aba565b610630565b61024d610248366004611a0c565b61073e565b6040519015158152602001610142565b61015e61026b3660046119ae565b610772565b61015e61027e366004611af2565b610809565b6101c5600081565b61024d610299366004611a0c565b61085a565b61019a7f000000000000000000000000000000000000000000000000000000000000000081565b6102d86102d3366004611ba2565b6108bd565b6040516101429190611c66565b61024d6102f33660046119d8565b610a19565b6101c56103063660046119f3565b610a25565b61015e610319366004611a0c565b610ac2565b61019a61032c366004611a38565b610acd565b61013561033f366004611aba565b610c18565b61034c610d49565b6040516101429190611cca565b60606103656000610de1565b905090565b336103758183610dee565b61039a5760405162461bcd60e51b815260040161039190611cdd565b60405180910390fd5b6001600160a01b03831660009081526002602052604081206103bc9083610e32565b9050801561040557836001600160a01b0316826001600160a01b03167f12146497b3b826918ec47f0cac7272a09ed06b30c16c030e99ec48ff5dd60b4760405160405180910390a35b50505050565b6001600160a01b038116600090815260026020526040902060609061042f90610de1565b92915050565b600061043f610e47565b600092835260010160205250604090205490565b61047761045e610e47565b6000848152600191909101602052604090205433610e6b565b61047f610e47565b6000838152602091825260408082206001600160a01b0385168352909252205460ff16156104ef5760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c79206772616e7420746f206e6f6e20686f6c646572730000006044820152606401610391565b6104f98282610ef0565b5050565b336001600160a01b038216146105525760405162461bcd60e51b815260206004820152601a60248201527921b0b71037b7363c903932b737bab731b2903337b91039b2b63360311b6044820152606401610391565b6104f98282610f04565b60006103656000610f18565b336105738183610dee565b61058f5760405162461bcd60e51b815260040161039190611cdd565b61059a600082610e32565b6104f95760405162461bcd60e51b815260040161039190611d14565b6000806105f98585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f2292505050565b90506106257f000000000000000000000000000000000000000000000000000000000000000082610f55565b9150505b9392505050565b60008061063b610fb5565b600085815260209190915260408120549150805b82811015610735576000610661610fb5565b60008881526020918252604080822085835260010190925220546001600160a01b0316146106d9578482036106c757610698610fb5565b600087815260209182526040808220938252600190930190915220546001600160a01b0316925061042f915050565b6106d2600183611d74565b9150610723565b6106e486600061073e565b801561071057506106f3610fb5565b600087815260209182526040808220828052600201909252205481145b1561072357610720600183611d74565b91505b61072e600182611d74565b905061064f565b50505092915050565b6000610748610e47565b6000938452602090815260408085206001600160a01b039490941685529290525090205460ff1690565b3361077d8183610dee565b6107995760405162461bcd60e51b815260040161039190611cdd565b6001600160a01b03831660009081526002602052604081206107bb9083610fbf565b9050801561040557836001600160a01b0316826001600160a01b03167f98d1ebbe00ae92a5de96a0f49742a8afa89f42363592bc2e7cfaaed68b45e7a660405160405180910390a350505050565b610811610fd4565b61084e5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610391565b61085781610fe0565b50565b6000610864610e47565b600084815260209182526040808220828052909252205460ff166108b45761088a610e47565b6000848152602091825260408082206001600160a01b0386168352909252205460ff16905061042f565b50600192915050565b6060816001600160401b038111156108d7576108d7611adc565b60405190808252806020026020018201604052801561090a57816020015b60608152602001906001900390816108f55790505b509050336000805b848110156107355781156109915761096f3087878481811061093657610936611d87565b90506020028101906109489190611d9d565b8660405160200161095b93929190611dea565b6040516020818303038152906040526110c7565b84828151811061098157610981611d87565b6020026020010181905250610a11565b6109f3308787848181106109a7576109a7611d87565b90506020028101906109b99190611d9d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110c792505050565b848281518110610a0557610a05611d87565b60200260200101819052505b600101610912565b600061042f81836110ec565b600080610a30610fb5565b6000848152602091909152604081205491505b81811015610a9d576000610a55610fb5565b60008681526020918252604080822085835260010190925220546001600160a01b031614610a8b57610a88600184611d74565b92505b610a96600182611d74565b9050610a43565b50610aa983600061073e565b15610abc57610ab9600183611d74565b91505b50919050565b61055261045e610e47565b6000807f000000000000000000000000000000000000000000000000000000000000000090506000610b358686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f2292505050565b90506000610b438383610f55565b90506001600160a01b0381163b15610b5f579250610629915050565b610b69838361110e565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc257610ba6600082610e32565b610bc25760405162461bcd60e51b815260040161039190611d14565b610bce818888886111a5565b866001600160a01b0316816001600160a01b03167fac631f3001b55ea1509cf3d7e74898f85392a61a76e8149181ae1259622dabc860405160405180910390a39695505050505050565b60608183108015610c325750610c2e6000610f18565b8211155b610c8a5760405162461bcd60e51b815260206004820152602360248201527f426173654163636f756e74466163746f72793a20696e76616c696420696e646960448201526263657360e81b6064820152608401610391565b6000610c968484611e0b565b9050610ca28484611e0b565b6001600160401b03811115610cb957610cb9611adc565b604051908082528060200260200182016040528015610ce2578160200160208202803683370190505b50915060005b81811015610d4157610d05610cfd8683611d74565b60009061120d565b838281518110610d1757610d17611d87565b6001600160a01b0390921660209283029190910190910152610d3a600182611d74565b9050610ce8565b505092915050565b6060610d53611219565b8054610d5e90611e1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8a90611e1e565b8015610dd75780601f10610dac57610100808354040283529160200191610dd7565b820191906000526020600020905b815481529060010190602001808311610dba57829003601f168201915b5050505050905090565b606060006106298361123d565b600080610e1b7f000000000000000000000000000000000000000000000000000000000000000084610f55565b6001600160a01b0385811691161491505092915050565b6000610629836001600160a01b038416611299565b7f0a7b0f5c59907924802379ebe98cdc23e2ee7820f63d30126e10b3752010e50090565b610e73610e47565b6000838152602091825260408082206001600160a01b0385168352909252205460ff166104f957610eae816001600160a01b031660146112e8565b610eb98360206112e8565b604051602001610eca929190611e52565b60408051601f198184030181529082905262461bcd60e51b825261039191600401611cca565b610efa8282611483565b6104f982826114ec565b610f0e82826115ab565b6104f98282611614565b600061042f825490565b60008282604051602001610f37929190611ebf565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c82012060788201526055604390910120600090610629565b60006103656116a3565b6000610629836001600160a01b038416611705565b6000610365813361073e565b6000610fea611219565b8054610ff590611e1e565b80601f016020809104026020016040519081016040528092919081815260200182805461102190611e1e565b801561106e5780601f106110435761010080835404028352916020019161106e565b820191906000526020600020905b81548152906001019060200180831161105157829003601f168201915b505050505090508161107e611219565b906110899082611f34565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a1681836040516110bb929190611ff3565b60405180910390a15050565b606061062983836040518060600160405280602781526020016120b9602791396117f8565b6001600160a01b03811660009081526001830160205260408120541515610629565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b03811661042f5760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b6044820152606401610391565b60405163347d5e2560e21b81526001600160a01b0385169063d1f57894906111d590869086908690600401612018565b600060405180830381600087803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b5050505050505050565b60006106298383611870565b7f4bc804ba64359c0e35e5ed5d90ee596ecaa49a3a930ddcb1470ea0dd625da90090565b60608160000180548060200260200160405190810160405280929190818152602001828054801561128d57602002820191906000526020600020905b815481526020019060010190808311611279575b50505050509050919050565b60008181526001830160205260408120546112e05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561042f565b50600061042f565b606060006112f7836002612058565b611302906002611d74565b6001600160401b0381111561131957611319611adc565b6040519080825280601f01601f191660200182016040528015611343576020820181803683370190505b509050600360fc1b8160008151811061135e5761135e611d87565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061138d5761138d611d87565b60200101906001600160f81b031916908160001a90535060006113b1846002612058565b6113bc906001611d74565b90505b6001811115611434576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106113f0576113f0611d87565b1a60f81b82828151811061140657611406611d87565b60200101906001600160f81b031916908160001a90535060049490941c9361142d8161206f565b90506113bf565b5083156106295760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610391565b600161148d610e47565b6000848152602091825260408082206001600160a01b0386168084529352808220805460ff1916941515949094179093559151339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006114f6610fb5565b6000848152602091909152604090205490506001611512610fb5565b6000858152602091909152604081208054909190611531908490611d74565b90915550829050611540610fb5565b6000858152602091825260408082208583526001019092522080546001600160a01b0319166001600160a01b039290921691909117905580611580610fb5565b6000948552602090815260408086206001600160a01b03909516865260029094019052919092205550565b6115b58282610e6b565b6115bd610e47565b6000838152602091825260408082206001600160a01b0385168084529352808220805460ff191690555133929185917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061161e610fb5565b6000848152602091825260408082206001600160a01b03861683526002019092522054905061164b610fb5565b6000848152602091825260408082208483526001019092522080546001600160a01b031916905561167a610fb5565b6000938452602090815260408085206001600160a01b0390941685526002909301905250812055565b60008060ff196116d460017f0c4ba382c0009cf238e4c1ca1a52f51c61e6248a70bdfb34e5ed49d5578a5c0c611e0b565b6040516020016116e691815260200190565b60408051601f1981840301815291905280516020909101201692915050565b600081815260018301602052604081205480156117ee576000611729600183611e0b565b855490915060009061173d90600190611e0b565b90508181146117a257600086600001828154811061175d5761175d611d87565b906000526020600020015490508087600001848154811061178057611780611d87565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806117b3576117b3612086565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061042f565b600091505061042f565b6060600080856001600160a01b031685604051611815919061209c565b600060405180830381855af49150503d8060008114611850576040519150601f19603f3d011682016040523d82523d6000602084013e611855565b606091505b50915091506118668683838761189a565b9695505050505050565b600082600001828154811061188757611887611d87565b9060005260206000200154905092915050565b60608315611909578251600003611902576001600160a01b0385163b6119025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610391565b5081611913565b611913838361191b565b949350505050565b81511561192b5781518083602001fd5b8060405162461bcd60e51b81526004016103919190611cca565b6020808252825182820181905260009190848201906040850190845b818110156119865783516001600160a01b031683529284019291840191600101611961565b50909695505050505050565b80356001600160a01b03811681146119a957600080fd5b919050565b600080604083850312156119c157600080fd5b6119ca83611992565b946020939093013593505050565b6000602082840312156119ea57600080fd5b61062982611992565b600060208284031215611a0557600080fd5b5035919050565b60008060408385031215611a1f57600080fd5b82359150611a2f60208401611992565b90509250929050565b600080600060408486031215611a4d57600080fd5b611a5684611992565b925060208401356001600160401b0380821115611a7257600080fd5b818601915086601f830112611a8657600080fd5b813581811115611a9557600080fd5b876020828501011115611aa757600080fd5b6020830194508093505050509250925092565b60008060408385031215611acd57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611b0457600080fd5b81356001600160401b0380821115611b1b57600080fd5b818401915084601f830112611b2f57600080fd5b813581811115611b4157611b41611adc565b604051601f8201601f19908116603f01168101908382118183101715611b6957611b69611adc565b81604052828152876020848701011115611b8257600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060208385031215611bb557600080fd5b82356001600160401b0380821115611bcc57600080fd5b818501915085601f830112611be057600080fd5b813581811115611bef57600080fd5b8660208260051b8501011115611c0457600080fd5b60209290920196919550909350505050565b60005b83811015611c31578181015183820152602001611c19565b50506000910152565b60008151808452611c52816020860160208601611c16565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015611cbd57603f19888603018452611cab858351611c3a565b94509285019290850190600101611c8f565b5092979650505050505050565b6020815260006106296020830184611c3a565b6020808252601f908201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e00604082015260600190565b6020808252602a908201527f4163636f756e74466163746f72793a206163636f756e7420616c7265616479206040820152691c9959da5cdd195c995960b21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561042f5761042f611d5e565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611db457600080fd5b8301803591506001600160401b03821115611dce57600080fd5b602001915036819003821315611de357600080fd5b9250929050565b8284823760609190911b6001600160601b0319169101908152601401919050565b8181038181111561042f5761042f611d5e565b600181811c90821680611e3257607f821691505b602082108103610abc57634e487b7160e01b600052602260045260246000fd5b7402832b936b4b9b9b4b7b7399d1030b1b1b7bab73a1605d1b815260008351611e82816015850160208801611c16565b7001034b99036b4b9b9b4b733903937b6329607d1b6015918401918201528351611eb3816026840160208801611c16565b01602601949350505050565b6001600160a01b038316815260406020820181905260009061191390830184611c3a565b601f821115611f2f576000816000526020600020601f850160051c81016020861015611f0c5750805b601f850160051c820191505b81811015611f2b57828155600101611f18565b5050505b505050565b81516001600160401b03811115611f4d57611f4d611adc565b611f6181611f5b8454611e1e565b84611ee3565b602080601f831160018114611f965760008415611f7e5750858301515b600019600386901b1c1916600185901b178555611f2b565b600085815260208120601f198616915b82811015611fc557888601518255948401946001909101908401611fa6565b5085821015611fe35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815260006120066040830185611c3a565b82810360208401526106258185611c3a565b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b808202811582820484141761042f5761042f611d5e565b60008161207e5761207e611d5e565b506000190190565b634e487b7160e01b600052603160045260246000fd5b600082516120ae818460208701611c16565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220470672e9aa40edd84be614829a54b72ee712b44d032158872ff9f19e71392f1d64736f6c634300081700336101806040523480156200001257600080fd5b50604051620041ec380380620041ec833981016040819052620000359162000250565b60408051808201825260078152661058d8dbdd5b9d60ca1b60208083019182528351808501855260018152603160f81b908201529151902060e08190527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c093840190965280519401939093209092529190526101205281816200011762000134565b6001600160a01b03908116610140521661016052506200028f9050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff808216916101009004168015620001c55760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60ff828116101562000233577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff191660ff90811790915560408051918252517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a15b5050565b6001600160a01b03811681146200024d57600080fd5b50565b600080604083850312156200026457600080fd5b8251620002718162000237565b6020840151909250620002848162000237565b809150509250929050565b60805160a05160c05160e05161010051610120516101405161016051613ecd6200031f600039600061131a01526000818161044b01528181611fd6015281816121700152818161219e015281816121f70152818161227201526122a201526000611f2a01526000611f7901526000611f5401526000611ead01526000611ed701526000611f010152613ecd6000f3fe60806040526004361061014b5760003560e01c806301ffc9a714610157578063150b7a021461018c5780631626ba7e146101c557806319822f7c146101e557806324d7806c14610213578063399b77da1461023357806347e1da2a146102535780634a58db19146102755780634d44560d1461027d5780635892e2361461029d5780637dff5a79146102bd5780638b52d723146102dd578063938e3d7b146102ff578063a9082d841461031f578063ac9650d81461035e578063b0d691fe1461038b578063b61d27f6146103ad578063b76464d5146103cd578063bc197c81146103ed578063bc66cea214610419578063c45a015514610439578063d087d2881461046d578063d1f5789414610482578063d42f2f35146104a2578063e8a3d485146104b7578063e9523c97146104d9578063f15d424e146104fb578063f23a6e611461052857600080fd5b3661015257005b600080fd5b34801561016357600080fd5b50610177610172366004612d97565b610554565b60405190151581526020015b60405180910390f35b34801561019857600080fd5b506101ac6101a7366004612ea3565b61059a565b6040516001600160e01b03199091168152602001610183565b3480156101d157600080fd5b506101ac6101e0366004612f0e565b6105ab565b3480156101f157600080fd5b50610205610200366004612f6d565b6106ca565b604051908152602001610183565b34801561021f57600080fd5b5061017761022e366004612fba565b6106f0565b34801561023f57600080fd5b5061020561024e366004612fd7565b61071f565b34801561025f57600080fd5b5061027361026e366004613034565b6107ea565b005b610273610951565b34801561028957600080fd5b506102736102983660046130cd565b6109b9565b3480156102a957600080fd5b506102736102b836600461313a565b610a2c565b3480156102c957600080fd5b506101776102d8366004612fba565b610de9565b3480156102e957600080fd5b506102f2610ea2565b6040516101839190613244565b34801561030b57600080fd5b5061027361031a3660046132a8565b6110e9565b34801561032b57600080fd5b5061033f61033a36600461313a565b61113a565b6040805192151583526001600160a01b03909116602083015201610183565b34801561036a57600080fd5b5061037e6103793660046132f0565b611191565b6040516101839190613381565b34801561039757600080fd5b506103a06112f6565b60405161018391906133d8565b3480156103b957600080fd5b506102736103c83660046133ec565b61133f565b3480156103d957600080fd5b506102736103e8366004612fba565b6113cf565b3480156103f957600080fd5b506101ac6104083660046134d9565b63bc197c8160e01b95945050505050565b34801561042557600080fd5b50610177610434366004613586565b611401565b34801561044557600080fd5b506103a07f000000000000000000000000000000000000000000000000000000000000000081565b34801561047957600080fd5b506102056116c5565b34801561048e57600080fd5b5061027361049d3660046135cb565b611745565b3480156104ae57600080fd5b506102f26118fd565b3480156104c357600080fd5b506104cc611a6e565b6040516101839190613612565b3480156104e557600080fd5b506104ee611b06565b6040516101839190613625565b34801561050757600080fd5b5061051b610516366004612fba565b611b18565b6040516101839190613672565b34801561053457600080fd5b506101ac610543366004613685565b63f23a6e6160e01b95945050505050565b60006001600160e01b03198216630271189760e51b148061058557506001600160e01b03198216630a85bd0160e11b145b80610594575061059482611bf0565b92915050565b630a85bd0160e11b5b949350505050565b6000806105b78461071f565b905060006105c58285611c25565b90506105d0816106f0565b156105e75750630b135d3f60e11b91506105949050565b3360006105f2611c49565b6001600160a01b038416600090815260069190910160205260409020905061061a8183611c6d565b8061064a575061062981611c8f565b600114801561064a5750600061063f8282611c99565b6001600160a01b0316145b6106a75760405162461bcd60e51b8152602060048201526024808201527f4163636f756e743a2063616c6c6572206e6f7420617070726f7665642074617260448201526333b2ba1760e11b60648201526084015b60405180910390fd5b6106b083610de9565b156106c057630b135d3f60e11b94505b5050505092915050565b60006106d4611ca5565b6106de8484611d0e565b90506106e982611e53565b9392505050565b60006106fa611c49565b6001600160a01b03909216600090815260049290920160205250604090205460ff1690565b6000808260405160200161073591815260200190565b60405160208183030381529060405280519060200120905060007f82cac545155fcbf147f2a9013809613677ac7d65498556e6d19ce43bcbf6c2848260405160200161078b929190918252602082015260400190565b6040516020818303038152906040528051906020012090506107ab611ea0565b60405161190160f01b60208201526022810191909152604281018290526062016040516020818303038152906040528051906020012092505050919050565b6107f26112f6565b6001600160a01b0316336001600160a01b031614806108155750610815336106f0565b6108315760405162461bcd60e51b815260040161069e906136ed565b610839611fc7565b848114801561084757508483145b6108935760405162461bcd60e51b815260206004820152601d60248201527f4163636f756e743a2077726f6e67206172726179206c656e677468732e000000604482015260640161069e565b60005b858110156109485761093f8787838181106108b3576108b361372e565b90506020020160208101906108c89190612fba565b8686848181106108da576108da61372e565b905060200201358585858181106108f3576108f361372e565b90506020028101906109059190613744565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120ad92505050565b50600101610896565b50505050505050565b6109596112f6565b6001600160a01b031663b760faf934306040518363ffffffff1660e01b815260040161098591906133d8565b6000604051808303818588803b15801561099e57600080fd5b505af11580156109b2573d6000803e3d6000fd5b5050505050565b6109c161211e565b6109c96112f6565b6001600160a01b031663205c287883836040518363ffffffff1660e01b81526004016109f692919061378a565b600060405180830381600087803b158015610a1057600080fd5b505af1158015610a24573d6000803e3d6000fd5b505050505050565b6000610a3b6020850185612fba565b905042610a4e60e0860160c087016137ba565b6001600160801b031611158015610a7d5750610a71610100850160e086016137ba565b6001600160801b031642105b610ab35760405162461bcd60e51b8152602060048201526007602482015266085c195c9a5bd960ca1b604482015260640161069e565b600080610ac186868661113a565b9150915081610afb5760405162461bcd60e51b815260040161069e906020808252600490820152632173696760e01b604082015260600190565b6001610b05611c49565b610100880135600090815260079190910160209081526040808320805460ff1916941515949094179093559091610b41919089019089016137e6565b60ff161115610b6e576000610b5c60408801602089016137e6565b60ff166001149050610948848261215c565b610b77836106f0565b15610bac5760405162461bcd60e51b815260206004820152600560248201526430b236b4b760d91b604482015260640161069e565b610bc183610bb8611c49565b60020190612231565b50604051806060016040528087606001358152602001876080016020810190610bea91906137ba565b6001600160801b03168152602001610c0860c0890160a08a016137ba565b6001600160801b03169052610c1b611c49565b6001600160a01b03851660009081526005919091016020908152604080832084518155918401519301516001600160801b03908116600160801b02931692909217600190920191909155610c91610c70611c49565b6001600160a01b038616600090815260069190910160205260409020612246565b805190915060005b81811015610cfb57610ce8838281518110610cb657610cb661372e565b6020026020010151610cc6611c49565b6001600160a01b03891660009081526006919091016020526040902090612253565b50610cf4600182613817565b9050610c99565b50610d09604089018961382a565b9050905060005b81811015610d8a57610d77610d2860408b018b61382a565b83818110610d3857610d3861372e565b9050602002016020810190610d4d9190612fba565b610d55611c49565b6001600160a01b03891660009081526006919091016020526040902090612231565b50610d83600182613817565b9050610d10565b50610d9488612268565b846001600160a01b0316836001600160a01b03167ff21d10c26e35863a8df291aca54181ee8c4a3bc8e00246c3f7a5a14b69d826a78a604051610dd79190613904565b60405180910390a35050505050505050565b600080610df4611c49565b6001600160a01b038416600090815260059190910160209081526040918290208251606081018452815481526001909101546001600160801b03808216938301849052600160801b90910416928101929092529091504210801590610e65575080604001516001600160801b031642105b80156106e957506000610e9a610e79611c49565b6001600160a01b038616600090815260069190910160205260409020611c8f565b119392505050565b60606000610eb9610eb1611c49565b600201612246565b80519091506000805b82811015610f4a57610eec848281518110610edf57610edf61372e565b6020026020010151610de9565b15610f035781610efb816139ef565b925050610f38565b6000848281518110610f1757610f1761372e565b60200260200101906001600160a01b031690816001600160a01b0316815250505b610f43600182613817565b9050610ec2565b50806001600160401b03811115610f6357610f63612de6565b604051908082528060200260200182016040528015610f9c57816020015b610f89612d4d565b815260200190600190039081610f815790505b5093506000805b838110156110e15760006001600160a01b0316858281518110610fc857610fc861372e565b60200260200101516001600160a01b0316146110cf576000858281518110610ff257610ff261372e565b602002602001015190506000611006611c49565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611070610c70611c49565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b03168152508885806110af906139ef565b9650815181106110c1576110c161372e565b602002602001018190525050505b6110da600182613817565b9050610fa3565b505050505090565b6110f16122fd565b61112e5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b604482015260640161069e565b61113781612315565b50565b600080611150611149866123fc565b8585612540565b905061115a611c49565b6101008601356000908152600791909101602052604090205460ff161580156111875750611187816106f0565b9150935093915050565b6060816001600160401b038111156111ab576111ab612de6565b6040519080825280602002602001820160405280156111de57816020015b60608152602001906001900390816111c95790505b509050336000805b848110156112ed578115611265576112433087878481811061120a5761120a61372e565b905060200281019061121c9190613744565b8660405160200161122f93929190613a08565b604051602081830303815290604052612592565b8482815181106112555761125561372e565b60200260200101819052506112e5565b6112c73087878481811061127b5761127b61372e565b905060200281019061128d9190613744565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061259292505050565b8482815181106112d9576112d961372e565b60200260200101819052505b6001016111e6565b50505092915050565b6000806113016125b7565b546001600160a01b03169050801561131857919050565b7f000000000000000000000000000000000000000000000000000000000000000091505090565b6113476112f6565b6001600160a01b0316336001600160a01b0316148061136a575061136a336106f0565b6113865760405162461bcd60e51b815260040161069e906136ed565b61138e611fc7565b6109b2848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120ad92505050565b6113d761211e565b806113e06125b7565b80546001600160a01b0319166001600160a01b039290921691909117905550565b600061140b611c49565b6001600160a01b0384166000908152600491909101602052604090205460ff161561143857506001610594565b6000611442611c49565b6001600160a01b0385166000908152600591909101602090815260408083208151606081018352815481526001909101546001600160801b0380821694830194909452600160801b900490921690820152915061149d611c49565b6006016000866001600160a01b03166001600160a01b0316815260200190815260200160002090504282602001516001600160801b031611806114ed575081604001516001600160801b03164210155b806114fe57506114fc81611c8f565b155b1561150e57600092505050610594565b60006115256115206060870187613744565b6125db565b9050600061153283611c8f565b6001148015611553575060006115488482611c99565b6001600160a01b0316145b90506324f16c0560e11b6001600160e01b03198316016115ca5760008061158561158060608a018a613744565b612615565b91509150826115ab576115988583611c6d565b6115ab5760009650505050505050610594565b85518111156115c35760009650505050505050610594565b50506116b8565b635c0f12eb60e11b6001600160e01b03198316016116ab576000806115fa6115f560608a018a613744565b61267a565b50915091508261165a5760005b82518110156116585761163c8382815181106116255761162561372e565b602002602001015187611c6d90919063ffffffff16565b611650576000975050505050505050610594565b600101611607565b505b60005b82518110156116a3578181815181106116785761167861372e565b60200260200101518760000151101561169b576000975050505050505050610594565b60010161165d565b5050506116b8565b6000945050505050610594565b5060019695505050505050565b60006116cf6112f6565b604051631aab3f0d60e11b8152306004820152600060248201526001600160a01b0391909116906335567e1a90604401602060405180830381865afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190613a29565b905090565b600061174f6126c7565b5460ff169050600061175f6126c7565b54610100900460ff169050801580801561177c575060018360ff16105b8061179b575061178b306126eb565b15801561179b57508260ff166001145b6117fe5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161069e565b60016118086126c7565b805460ff191660ff92909216919091179055801561184157600161182a6126c7565b80549115156101000261ff00199092169190911790555b6118818686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126fa92505050565b6118896125b7565b6001018190555061189b86600161215c565b8015610a245760006118ab6126c7565b80549115156101000261ff0019909216919091179055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050565b6060600061190c610eb1611c49565b8051909150806001600160401b0381111561192957611929612de6565b60405190808252806020026020018201604052801561196257816020015b61194f612d4d565b8152602001906001900390816119475790505b50925060005b81811015611a685760008382815181106119845761198461372e565b602002602001015190506000611998611c49565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611a02610c70611c49565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250868481518110611a4757611a4761372e565b60200260200101819052505050600181611a619190613817565b9050611968565b50505090565b6060611a7861272d565b8054611a8390613a42565b80601f0160208091040260200160405190810160405280929190818152602001828054611aaf90613a42565b8015611afc5780601f10611ad157610100808354040283529160200191611afc565b820191906000526020600020905b815481529060010190602001808311611adf57829003601f168201915b5050505050905090565b6060611740611b13611c49565b612246565b611b20612d4d565b6000611b2a611c49565b6001600160a01b038416600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611bb5611b94611c49565b6001600160a01b038716600090815260069190910160205260409020612246565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250915050919050565b60006001600160e01b03198216630271189760e51b148061059457506301ffc9a760e01b6001600160e01b0319831614610594565b6000806000611c348585612751565b91509150611c4181612796565b509392505050565b7f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0090565b6001600160a01b038116600090815260018301602052604081205415156106e9565b6000610594825490565b60006106e983836128db565b611cad6112f6565b6001600160a01b0316336001600160a01b031614611d0c5760405162461bcd60e51b815260206004820152601c60248201527b1858d8dbdd5b9d0e881b9bdd08199c9bdb48115b9d1c9e541bda5b9d60221b604482015260640161069e565b565b7b0ca2ba3432b932bab69029b4b3b732b21026b2b9b9b0b3b29d05199960211b6000908152601c829052603c81206000611d8c611d4f610100870187613744565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508693925050611c259050565b9050611d988186611401565b611da757600192505050610594565b6000611db1611c49565b6001600160a01b03929092166000908152600590920160209081526040808420815160608082018452825482526001909201546001600160801b0380821683870152600160801b8204908116928501929092528351928301845295825265ffffffffffff8087169483019490945292831691015260d09290921b6001600160d01b03191660a09290921b65ffffffffffff60a01b169190911795945050505050565b801561113757604051600090339060001990849084818181858888f193505050503d80600081146109b2576040519150601f19603f3d011682016040523d82523d6000602084013e6109b2565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611ef957507f000000000000000000000000000000000000000000000000000000000000000046145b15611f2357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60405163c3c5a54760e01b81527f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b0382169063c3c5a547906120159030906004016133d8565b602060405180830381865afa158015612032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120569190613a76565b61113757806001600160a01b03166383a03f8c6120716125b7565b600101546040518263ffffffff1660e01b815260040161209391815260200190565b600060405180830381600087803b15801561099e57600080fd5b60606000846001600160a01b031684846040516120ca9190613a98565b60006040518083038185875af1925050503d8060008114612107576040519150601f19603f3d011682016040523d82523d6000602084013e61210c565b606091505b509250905080611c4157815160208301fd5b612127336106f0565b611d0c5760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b604482015260640161069e565b6121668282612905565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561222d5780156121f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630b61e12b836121d46125b7565b600101546040518363ffffffff1660e01b81526004016109f692919061378a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639387a380836121d46125b7565b5050565b60006106e9836001600160a01b0384166129b4565b606060006106e983612a03565b60006106e9836001600160a01b038416612a5f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15611137576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b6122d46020840184612fba565b6122dc6125b7565b600101546040518363ffffffff1660e01b815260040161209392919061378a565b6000612308336106f0565b8061174057505030331490565b600061231f61272d565b805461232a90613a42565b80601f016020809104026020016040519081016040528092919081815260200182805461235690613a42565b80156123a35780601f10612378576101008083540402835291602001916123a3565b820191906000526020600020905b81548152906001019060200180831161238657829003601f168201915b50505050509050816123b361272d565b906123be9082613b01565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a1681836040516123f0929190613bc0565b60405180910390a15050565b60607f3fd4a1a1a267c84185e3b7eecd57c68783c0581d538b9d6e5f23e4670497c1e961242c6020840184612fba565b61243c60408501602086016137e6565b612449604086018661382a565b60405160200161245a929190613bee565b60408051601f198184030181529190528051602090910120606086013561248760a08801608089016137ba565b61249760c0890160a08a016137ba565b6124a760e08a0160c08b016137ba565b6124b86101008b0160e08c016137ba565b60408051602081019a909a526001600160a01b039098169789019790975260ff9095166060880152608087019390935260a08601919091526001600160801b0390811660c086015290811660e0850152908116610100848101919091529116610120830152830135610140820152610160016040516020818303038152906040529050919050565b60006105a383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508751602089012061258c92509050612b52565b90611c25565b60606106e98383604051806060016040528060278152602001613e7160279139612b7f565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830090565b600060048210156125fe5760405162461bcd60e51b815260040161069e90613c30565b61260c600460008486613c4f565b6106e991613c79565b60008060448310156126395760405162461bcd60e51b815260040161069e90613c30565b612647602460048587613c4f565b8101906126549190612fba565b9150612664604460248587613c4f565b8101906126719190612fd7565b90509250929050565b60608080606484101561269f5760405162461bcd60e51b815260040161069e90613c30565b6126ac8460048188613c4f565b8101906126b99190613d28565b919790965090945092505050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee030090565b6001600160a01b03163b151590565b6000828260405160200161270f929190613e0d565b60405160208183030381529060405280519060200120905092915050565b7f4bc804ba64359c0e35e5ed5d90ee596ecaa49a3a930ddcb1470ea0dd625da90090565b60008082516041036127875760208301516040840151606085015160001a61277b87828585612bf7565b9450945050505061278f565b506000905060025b9250929050565b60008160048111156127aa576127aa613e31565b036127b25750565b60018160048111156127c6576127c6613e31565b0361280e5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161069e565b600281600481111561282257612822613e31565b0361286f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161069e565b600381600481111561288357612883613e31565b036111375760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161069e565b60008260000182815481106128f2576128f261372e565b9060005260206000200154905092915050565b8061290e611c49565b6001600160a01b038416600090815260049190910160205260409020805460ff19169115159190911790558015612957576129518261294b611c49565b90612231565b5061296b565b61296982612963611c49565b90612253565b505b816001600160a01b03167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a11133826040516129a8911515815260200190565b60405180910390a25050565b60008181526001830160205260408120546129fb57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610594565b506000610594565b606081600001805480602002602001604051908101604052809291908181526020018280548015612a5357602002820191906000526020600020905b815481526020019060010190808311612a3f575b50505050509050919050565b60008181526001830160205260408120548015612b48576000612a83600183613e47565b8554909150600090612a9790600190613e47565b9050818114612afc576000866000018281548110612ab757612ab761372e565b9060005260206000200154905080876000018481548110612ada57612ada61372e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b0d57612b0d613e5a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610594565b6000915050610594565b6000610594612b5f611ea0565b8360405161190160f01b8152600281019290925260228201526042902090565b6060600080856001600160a01b031685604051612b9c9190613a98565b600060405180830381855af49150503d8060008114612bd7576040519150601f19603f3d011682016040523d82523d6000602084013e612bdc565b606091505b5091509150612bed86838387612cb1565b9695505050505050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115612c245750600090506003612ca8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612c78573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612ca157600060019250925050612ca8565b9150600090505b94509492505050565b60608315612d1e578251600003612d1757612ccb856126eb565b612d175760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069e565b50816105a3565b6105a38383815115612d335781518083602001fd5b8060405162461bcd60e51b815260040161069e9190613612565b6040518060a0016040528060006001600160a01b03168152602001606081526020016000815260200160006001600160801b0316815260200160006001600160801b031681525090565b600060208284031215612da957600080fd5b81356001600160e01b0319811681146106e957600080fd5b6001600160a01b038116811461113757600080fd5b8035612de181612dc1565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612e2457612e24612de6565b604052919050565b60006001600160401b03831115612e4557612e45612de6565b612e58601f8401601f1916602001612dfc565b9050828152838383011115612e6c57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612e9457600080fd5b6106e983833560208501612e2c565b60008060008060808587031215612eb957600080fd5b8435612ec481612dc1565b93506020850135612ed481612dc1565b92506040850135915060608501356001600160401b03811115612ef657600080fd5b612f0287828801612e83565b91505092959194509250565b60008060408385031215612f2157600080fd5b8235915060208301356001600160401b03811115612f3e57600080fd5b612f4a85828601612e83565b9150509250929050565b60006101208284031215612f6757600080fd5b50919050565b600080600060608486031215612f8257600080fd5b83356001600160401b03811115612f9857600080fd5b612fa486828701612f54565b9660208601359650604090950135949350505050565b600060208284031215612fcc57600080fd5b81356106e981612dc1565b600060208284031215612fe957600080fd5b5035919050565b60008083601f84011261300257600080fd5b5081356001600160401b0381111561301957600080fd5b6020830191508360208260051b850101111561278f57600080fd5b6000806000806000806060878903121561304d57600080fd5b86356001600160401b038082111561306457600080fd5b6130708a838b01612ff0565b9098509650602089013591508082111561308957600080fd5b6130958a838b01612ff0565b909650945060408901359150808211156130ae57600080fd5b506130bb89828a01612ff0565b979a9699509497509295939492505050565b600080604083850312156130e057600080fd5b82356130eb81612dc1565b946020939093013593505050565b60008083601f84011261310b57600080fd5b5081356001600160401b0381111561312257600080fd5b60208301915083602082850101111561278f57600080fd5b60008060006040848603121561314f57600080fd5b83356001600160401b038082111561316657600080fd5b61317287838801612f54565b9450602086013591508082111561318857600080fd5b50613195868287016130f9565b9497909650939450505050565b6001600160801b03169052565b80516001600160a01b03908116835260208083015160a082860181905281519086018190526000939183019290849060c08801905b80831015613206578551851682529483019460019290920191908301906131e4565b50604087015160408901526060870151945061322560608901866131a2565b6080870151945061323960808901866131a2565b979650505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561329b57603f198886030184526132898583516131af565b9450928501929085019060010161326d565b5092979650505050505050565b6000602082840312156132ba57600080fd5b81356001600160401b038111156132d057600080fd5b8201601f810184136132e157600080fd5b6105a384823560208401612e2c565b6000806020838503121561330357600080fd5b82356001600160401b0381111561331957600080fd5b61332585828601612ff0565b90969095509350505050565b60005b8381101561334c578181015183820152602001613334565b50506000910152565b6000815180845261336d816020860160208601613331565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561329b57603f198886030184526133c6858351613355565b945092850192908501906001016133aa565b6001600160a01b0391909116815260200190565b6000806000806060858703121561340257600080fd5b843561340d81612dc1565b93506020850135925060408501356001600160401b0381111561342f57600080fd5b61343b878288016130f9565b95989497509550505050565b60006001600160401b0382111561346057613460612de6565b5060051b60200190565b600082601f83011261347b57600080fd5b8135602061349061348b83613447565b612dfc565b8083825260208201915060208460051b8701019350868411156134b257600080fd5b602086015b848110156134ce57803583529183019183016134b7565b509695505050505050565b600080600080600060a086880312156134f157600080fd5b85356134fc81612dc1565b9450602086013561350c81612dc1565b935060408601356001600160401b038082111561352857600080fd5b61353489838a0161346a565b9450606088013591508082111561354a57600080fd5b61355689838a0161346a565b9350608088013591508082111561356c57600080fd5b5061357988828901612e83565b9150509295509295909350565b6000806040838503121561359957600080fd5b82356135a481612dc1565b915060208301356001600160401b038111156135bf57600080fd5b612f4a85828601612f54565b6000806000604084860312156135e057600080fd5b83356135eb81612dc1565b925060208401356001600160401b0381111561360657600080fd5b613195868287016130f9565b6020815260006106e96020830184613355565b6020808252825182820181905260009190848201906040850190845b818110156136665783516001600160a01b031683529284019291840191600101613641565b50909695505050505050565b6020815260006106e960208301846131af565b600080600080600060a0868803121561369d57600080fd5b85356136a881612dc1565b945060208601356136b881612dc1565b9350604086013592506060860135915060808601356001600160401b038111156136e157600080fd5b61357988828901612e83565b60208082526021908201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746040820152601760f91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261375b57600080fd5b8301803591506001600160401b0382111561377557600080fd5b60200191503681900382131561278f57600080fd5b6001600160a01b03929092168252602082015260400190565b80356001600160801b0381168114612de157600080fd5b6000602082840312156137cc57600080fd5b6106e9826137a3565b803560ff81168114612de157600080fd5b6000602082840312156137f857600080fd5b6106e9826137d5565b634e487b7160e01b600052601160045260246000fd5b8082018082111561059457610594613801565b6000808335601e1984360301811261384157600080fd5b8301803591506001600160401b0382111561385b57600080fd5b6020019150600581901b360382131561278f57600080fd5b6000808335601e1984360301811261388a57600080fd5b83016020810192503590506001600160401b038111156138a957600080fd5b8060051b360382131561278f57600080fd5b8183526000602080850194508260005b858110156138f95781356138de81612dc1565b6001600160a01b0316875295820195908201906001016138cb565b509495945050505050565b602081526139256020820161391884612dd6565b6001600160a01b03169052565b6000613933602084016137d5565b60ff811660408401525061394a6040840184613873565b610120806060860152613962610140860183856138bb565b92506060860135608086015261397a608087016137a3565b915061398960a08601836131a2565b61399560a087016137a3565b91506139a460c08601836131a2565b6139b060c087016137a3565b91506139bf60e08601836131a2565b6139cb60e087016137a3565b91506101006139dc818701846131a2565b9590950135939094019290925250919050565b600060018201613a0157613a01613801565b5060010190565b8284823760609190911b6001600160601b0319169101908152601401919050565b600060208284031215613a3b57600080fd5b5051919050565b600181811c90821680613a5657607f821691505b602082108103612f6757634e487b7160e01b600052602260045260246000fd5b600060208284031215613a8857600080fd5b815180151581146106e957600080fd5b60008251613aaa818460208701613331565b9190910192915050565b601f821115613afc576000816000526020600020601f850160051c81016020861015613add5750805b601f850160051c820191505b81811015610a2457828155600101613ae9565b505050565b81516001600160401b03811115613b1a57613b1a612de6565b613b2e81613b288454613a42565b84613ab4565b602080601f831160018114613b635760008415613b4b5750858301515b600019600386901b1c1916600185901b178555610a24565b600085815260208120601f198616915b82811015613b9257888601518255948401946001909101908401613b73565b5085821015613bb05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000613bd36040830185613355565b8281036020840152613be58185613355565b95945050505050565b60008184825b85811015613c25578135613c0781612dc1565b6001600160a01b031683526020928301929190910190600101613bf4565b509095945050505050565b602080825260059082015264214461746160d81b604082015260600190565b60008085851115613c5f57600080fd5b83861115613c6c57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015613ca15780818660040360031b1b83161692505b505092915050565b600082601f830112613cba57600080fd5b81356020613cca61348b83613447565b82815260059290921b84018101918181019086841115613ce957600080fd5b8286015b848110156134ce5780356001600160401b03811115613d0c5760008081fd5b613d1a8986838b0101612e83565b845250918301918301613ced565b600080600060608486031215613d3d57600080fd5b83356001600160401b0380821115613d5457600080fd5b818601915086601f830112613d6857600080fd5b81356020613d7861348b83613447565b82815260059290921b8401810191818101908a841115613d9757600080fd5b948201945b83861015613dbe578535613daf81612dc1565b82529482019490820190613d9c565b97505087013592505080821115613dd457600080fd5b613de08783880161346a565b93506040860135915080821115613df657600080fd5b50613e0386828701613ca9565b9150509250925092565b6001600160a01b03831681526040602082018190526000906105a390830184613355565b634e487b7160e01b600052602160045260246000fd5b8181038181111561059457610594613801565b634e487b7160e01b600052603160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a125ec2a60560fa97889477fea25d056bfc58bd1223d7da519d3cad061329fa564736f6c63430008170033000000000000000000000000dd99b75f095d0c4d5112ace938e4e6ed962fb0240000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" + +export const NEXUS_K1_VALIDATOR_FACTORY_ADDRESS = + "0xcdcb760a0e2910abafc1453b453f7d2b3996b7ea691a9cb214e87bb4a66cd7c2a4dbac7700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f796101003461018b57601f610ed938819003918201601f19168301916001600160401b0383118484101761018f5780849260a09460405283398101031261018b57610048816101a3565b90610055602082016101a3565b91610062604083016101a3565b6060830151929091906001600160a01b0384169081850361018b5760800151946001600160a01b038616860361018b5760018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d8198190556001600160a01b03831615918215610179575b8215610170575b508115610167575b506101585760805260a05260c05260e052604051610d2190816101b882396080518181816104eb015281816105710152610662015260a0518181816101b00152610720015260c05181818161031a0152610827015260e0518181816107c40152610aa50152f35b6342bcdf7f60e11b5f5260045ffd5b9050155f6100f1565b1591505f6100e9565b6001600160a01b0385161592506100e2565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361018b5756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816306433b1b14610a88575080630d51f0b7146105e05780632569296214610595578063290ab98414610551578063322cc8ca1461045957806345171159146103e65780634a1ce5991461038457806354d1f13d1461033e57806367d2d1c9146102fa578063715018a6146102af5780638da5cb5b14610284578063b36f9705146101d4578063d0733b3b14610190578063f04e283e14610142578063f2fde38b146101035763fee81cf4146100ce575f80fd5b34610100576020366003190112610100576100e7610ac9565b9063389a75e1600c5252602080600c2054604051908152f35b80fd5b50602036600319011261010057610118610ac9565b610120610c91565b8060601b156101355761013290610cad565b80f35b637448fbae82526004601cfd5b50602036600319011261010057610157610ac9565b61015f610c91565b63389a75e1600c528082526020600c20805442116101835790826101329255610cad565b636f5e881883526004601cfd5b503461010057806003193601126101005760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610100576040366003190112610100576101ee610ac9565b90602435916001600160a01b038316809303610280576001600160a01b0390610215610c91565b168015610271578192813b1561026d57829160248392604051948593849263611d2e7560e11b845260048401525af18015610262576102515750f35b8161025b91610bf5565b6101005780f35b6040513d84823e3d90fd5b5050fd5b6391fdf19160e01b8252600482fd5b5080fd5b50346101005780600319360112610100576020638b78c6d819546001600160a01b0360405191168152f35b5080600319360112610100576102c3610c91565b80638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380638b78c6d8195580f35b503461010057806003193601126101005760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50806003193601126101005763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b5034610100576020366003190112610100576001600160a01b036103a6610ac9565b6103ae610c91565b168015610271578082913b156103e35781809160046040518094819363bb9fe6bf60e01b83525af18015610262576102515750f35b50fd5b506040366003190112610100576103fb610ac9565b906024359163ffffffff8316809303610280576001600160a01b039061041f610c91565b168015610271578192813b1561026d578290602460405180948193621cb65b60e51b8352600483015234905af18015610262576102515750f35b50346101005760209061049661048861047136610af3565b906040969496959295519586948a86019889610b6d565b03601f198101835282610bf5565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600984527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040528260605260ff83536035523060601b60015260155260558120906035526001600160a01b0360405191168152f35b503461010057806003193601126101005760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50806003193601126101005763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b506105ea36610af3565b93909491604051602081019061060881610488898b878b8a89610b6d565b519020905f95604051977fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358a01523060581b895260ff89538360158a01526055892097341594893b15610a5f575050600193610a55575f388180348c5af115610a48575f610756995b80604052816060526bffffffffffffffffffffffff198760601b16602082015260148152610705603482610bf5565b604051809b8192638491599f60e01b83526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004840152604060248401526044830190610c6d565b0381736c77ddf87a1717465d29f8f16f44711eb0c839c05af4988915610913575f99610990575b50916020989192896107c26040519b8c956341bdc49760e11b8752608060048801526001600160a01b0381511660848801520151604060a487015260c4860190610c6d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660248601528481036003190160448601528281520191905f5b81811061096257505050819060ff5f9416606483015203816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa958615610913575f96610922575b5015610872575b6020846001600160a01b0360405191168152f35b6001600160a01b03841690813b1561091e575f6108ab9660405180988192634b6a141960e01b8352602060048401526024830190610c6d565b038183865af1958615610913576020966108f7575b506001600160a01b037f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff91169280a45f808061085e565b6109049193505f90610bf5565b5f916001600160a01b036108c0565b6040513d5f823e3d90fd5b5f80fd5b9095503d805f833e6109348183610bf5565b810160208282031261091e57815167ffffffffffffffff811161091e5761095b9201610c17565b945f610857565b91949350916020806001926001600160a01b0361097e89610adf565b1681520195019101918a939492610805565b98503d805f8b3e6109a1818b610bf5565b8901986020818b031261091e5780519067ffffffffffffffff821161091e57016040818b031261091e576040519960408b018b811067ffffffffffffffff821117610a345760405281516001600160a01b038116810361091e578b52602082015167ffffffffffffffff811161091e5760049b610a276107c29360209593869401610c17565b828201529b50505061077d565b634e487b7160e01b5f52604160045260245ffd5b63b12d13eb5f526004601cfd5b5f610756996106d6565b9198509350605f602134f5968715610a7b575f610756996106d6565b63301164255f526004601cfd5b3461091e575f36600319011261091e576020906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600435906001600160a01b038216820361091e57565b35906001600160a01b038216820361091e57565b90608060031983011261091e576004356001600160a01b038116810361091e57916024359160443567ffffffffffffffff811161091e578260238201121561091e5780600401359267ffffffffffffffff841161091e5760248460051b8301011161091e57602401919060643560ff8116810361091e5790565b909160349296959394966bffffffffffffffffffffffff199060601b168252601482015201915f945b808610610bcd57505060f81b7fff000000000000000000000000000000000000000000000000000000000000001681526001019150565b90926020806001926001600160a01b03610be688610adf565b16815201940195019490610b96565b90601f8019910116810190811067ffffffffffffffff821117610a3457604052565b81601f8201121561091e5780519067ffffffffffffffff8211610a345760405192610c4c601f8401601f191660200185610bf5565b8284526020838301011161091e57815f9260208093018386015e8301015290565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b638b78c6d819543303610ca057565b6382b429005f526004601cfd5b6001600160a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d8195556fea264697066735822122034eaa7eb2e9cd30500f4938f2e22beffa7450c938912732a9d96e86f8531e15a64736f6c634300081b0033000000000000000000000000000000039dfcad030719b07296710f045f0558f70000000000000000000000002cf491602ad22944d9047282abc00d3e52f56b3700000000000000000000000000000004171351c442b202678c48d8ab5b321e8f00000000000000000000000000000008c901d8871b6f6942de0b5d9ccf3873d3000000000000000000000000000000000000000000000000000000000000000000000000000000" + +export const NEXUS_K1_VALIDATOR_ADDRESS = + "0xcdcb760aa93b92149506086de6627da9fa918c527c6b26ad418488ef374870dffc3d712f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000013d7608080604052346015576113bd908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146100f45780632e5b63a6146100ef57806354fd4d50146100ea5780635c81ca68146100e55780636d61fe70146100e05780638a91b0e3146100db578063940d3840146100d657806397003203146100d1578063d60b347f146100cc578063d620c85a146100c7578063e824b568146100c2578063ecd05961146100bd578063f2fde38b146100b85763f551e2ee146100b3575f80fd5b6106d4565b610657565b610637565b610608565b6105e6565b610598565b6104d2565b61043a565b6103b7565b6102bc565b61022e565b6101d7565b610193565b610123565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461017e575f36600319011261017e5761017a604051610144604082610a11565b600b81527f4b3156616c696461746f720000000000000000000000000000000000000000006020820152604051918291826100f9565b0390f35b5f80fd5b6001600160a01b0381160361017e57565b3461017e57602036600319011261017e576001600160a01b036004356101b881610182565b165f525f60205260206001600160a01b0360405f205416604051908152f35b3461017e575f36600319011261017e5761017a6040516101f8604082610a11565b600581527f312e302e300000000000000000000000000000000000000000000000000000006020820152604051918291826100f9565b3461017e57602036600319011261017e5761025d6001600160a01b0360043561025681610182565b1633610c33565b005b9181601f8401121561017e5782359167ffffffffffffffff831161017e576020838186019501011161017e57565b602060031982011261017e576004359067ffffffffffffffff821161017e576102b89160040161025f565b9091565b3461017e576102ca3661028d565b9081156103a8576102f7336001600160a01b03165f525f6020526001600160a01b0360405f205416151590565b610399578160141161017e5761037b61031a610314601484610a71565b60601c90565b61032e6001600160a01b0382161515610ab1565b610339813b15610ac7565b610353336001600160a01b03165f525f60205260405f2090565b906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b6014821161038557005b8161025d9261039392610a54565b90610b09565b637396742f60e11b5f5260045ffd5b6307ca8e0760e21b5f5260045ffd5b3461017e576103c53661028d565b5050335f525f60205260405f2073ffffffffffffffffffffffffffffffffffffffff198154169055335f52600160205260405f205460015b8181111561040757005b8082038281116104355761041e61042491336112d2565b33610d50565b505f198114610435576001016103fd565b610af5565b3461017e57606036600319011261017e5760043560243567ffffffffffffffff811161017e5761046e90369060040161025f565b60443567ffffffffffffffff811161017e5761048e90369060040161025f565b601481949294036104c35760141161017e5761017a936104b1933560601c610b77565b60405190151581529081906020820190565b630dfe930960e41b5f5260045ffd5b3461017e57604036600319011261017e5760043567ffffffffffffffff811161017e5780360361012060031982011261017e57602435906001600160a01b03836004013561051f81610182565b165f525f6020526001600160a01b0360405f20541692610104810135916022190182121561017e57019060048201359167ffffffffffffffff831161017e5760240190823603821361017e5761057493610b77565b1561058e5761017a5f5b6040519081529081906020820190565b61017a600161057e565b3461017e57602036600319011261017e5760206105dc6004356105ba81610182565b6001600160a01b03165f525f6020526001600160a01b0360405f205416151590565b6040519015158152f35b3461017e575f36600319011261017e57604051636b10642d60e11b8152602090f35b3461017e57602036600319011261017e5761025d6001600160a01b0360043561063081610182565b1633610d50565b3461017e57602036600319011261017e5760206040516001600435148152f35b3461017e57602036600319011261017e5760043561067481610182565b6001600160a01b038116156106c5578061069261025d923b15610ac7565b335f525f60205260405f20906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b6342bcdf7f60e11b5f5260045ffd5b3461017e57606036600319011261017e576004356106f181610182565b6024359060443567ffffffffffffffff811161017e5761071590369060040161025f565b90808261ffff60605119046164920290601f199083010135146109e8575b506001600160a01b035f93166dd9ecebf3c23529de49815dac1c4c81149081156109de575b81156109cd575b506109ba575b82156107b4575b61017a9383156107a2575b505050604051918291155f03631626ba7e1760e01b82919091602081019263ffffffff60e01b169052565b6107ac9350610e16565b5f8080610777565b915082816107c13361113c565b93604051600119838301013560f01c968760420196881597600e8401600e8b860101988b8103948588019b6041198d01946119015f52604086602037831017816042601e2018176109715750507f5479706564446174615369676e2800000000000000000000000000000000000085526001199099019990989760286f07fffffe0000000000000100000000008a848e8237515f1a1c91525b88515f1a6028811461087b5790651201000000016001921c1798019761085a565b5090848161095a989a6040899b9d61017a9f95607f969b9a9b7f20636f6e74656e74732c627974657331206669656c64732c737472696e67206e85527f616d652c737472696e672076657273696f6e2c75696e7432353620636861696e60208601527f49642c6164647265737320766572696679696e67436f6e74726163742c627974848601527f657333322073616c742c75696e743235365b5d20657874656e73696f6e7329006060860152878501378737010301852082526101208220604052600116604201601e209160411901935b6040521561096257610fa6565b92935061076c565b61096c903361120f565b610fa6565b935095979950505061017a985061095a949650859291505f907f983e65e5148e570cd828ead231ee759a8d7958721a768f93bc4483ba005c32de5f5260205260405f209161094d565b91506109c7818385610fa6565b91610765565b6109d8915033610eb6565b5f61075f565b3381149150610758565b6040810135018035925060200190505f610733565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117610a3357604052565b6109fd565b67ffffffffffffffff8111610a3357601f01601f191660200190565b909291928360141161017e57831161017e57601401916013190190565b356bffffffffffffffffffffffff19811692919060148210610a91575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b15610ab857565b630640d5fb60e51b5f5260045ffd5b15610ace57565b6383e6a1cb60e01b5f5260045ffd5b6001600160a01b03610af29216906001610cba565b90565b634e487b7160e01b5f52601160045260245ffd5b905f5b601482048110610b1b57505050565b806014029060148204810361043557600181019182821161043557826014029260148404036104355782811161017e5783831161017e57610b6a61031460019483610b70948901910390610a71565b33610add565b5001610b0c565b929190917f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0602083013511610c2b576001600160a01b039384610bc4610bbe368587610d1a565b86610f08565b911694168414610c2257610c0d610c13926001600160a01b03946020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c600420923691610d1a565b90610f08565b1614610c1d575f90565b600190565b50505050600190565b505050505f90565b815f5260018001602052610c5b8160405f20906001600160a01b03165f5260205260405f2090565b54610cb45780610cae915f52600160205260405f20600181540190848260051b82015555805f52600160205260405f2054925f52600260205260405f20906001600160a01b03165f5260205260405f2090565b55600190565b50505f90565b90610cc6838284610ee1565b610d13575f81815260208390526040902080546001908101600581901b830186905591829055610cae939091945f520160205260405f20906001600160a01b03165f5260205260405f2090565b5050505f90565b929192610d2682610a38565b91610d346040519384610a11565b82948184528183011161017e578281602093845f960137010152565b90805f526002602052610d778260405f20906001600160a01b03165f5260205260405f2090565b54918215610d13575f19830191838311610435575f828152600160205260409020545f19810191908211610435575f94848484610dd695610cae9803610dec575b509050610dc79150600161133f565b6002905f5260205260405f2090565b906001600160a01b03165f5260205260405f2090565b610e0c92610dc7610e02610dd693856001611302565b8092856001611321565b555f808481610db8565b9092915f933a15610e2657505050565b90919293503a3a5260203a3a386d378edcd5b5b0a24f5342d8c1048561fffffa503a5115610e58575b610af292610fa6565b60405192631626ba7e3a526d378edcd5b5b0a24f5342d8c1048560205260408052454561ffff011793845a106d378edcd5b5b0a24f5342d8c10485831417610eb457610af2943a906064601c3a923090fa506040529250610e4f565bfe5b610edb915f52600260205260405f20906001600160a01b03165f5260205260405f2090565b54151590565b600190610edb935f520160205260405f20906001600160a01b03165f5260205260405f2090565b9190600190604051935f5260208101516040526040815114610f67576041815114610f4a5750506020604060805f805b5afa505f6060523d6060185191604052565b60805f602093604084606082960151841a87520151606052610f38565b60805f6020937f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604080950151601b8160ff1c01875216606052610f38565b90610af29291335f525f6020526001600160a01b0360405f205416610b77565b81601f8201121561017e57805190610fdd82610a38565b92610feb6040519485610a11565b8284526020838301011161017e57815f9260208093018386015e8301015290565b519061101782610182565b565b9080601f8301121561017e5781519167ffffffffffffffff8311610a33578260051b906040519361104d6020840186610a11565b845260208085019282010192831161017e57602001905b8282106110715750505090565b8151815260209182019101611064565b9060e08282031261017e5781517fff000000000000000000000000000000000000000000000000000000000000008116810361017e5792602083015167ffffffffffffffff811161017e57826110d8918501610fc6565b92604081015167ffffffffffffffff811161017e57836110f9918301610fc6565b9260608201519261110c6080840161100c565b9260a08101519260c082015167ffffffffffffffff811161017e57610af29201611019565b6040513d5f823e3d90fd5b905f6001600160a01b03926004604051809581936342580cb760e11b8352165afa801561120a575f925f5f5f905f925f945f966111d1575b50906001600160a01b03939291604051986101208a016040525f1a60f81b60408a015260208151910120606089015260208151910120608088015260a08701521660c085015260e08401526020815160051b910120610100830152565b9450505050506001600160a01b0393506111fd91503d805f833e6111f58183610a11565b810190611081565b9597909491939190611174565b611131565b5f6001600160a01b03916004604051809481936342580cb760e11b8352165afa90811561120a5760a0915f915f5f915f936112ad575b50604051937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f855260208151910120602085015260208151910120604084015260608301526080820152206719010000000000005f52601a52603a526042601820905f603a52565b925050506112c591503d805f833e6111f58183610a11565b509394509250905f611245565b5f52600160205260405f209081548110156112f25760010160051b015490565b638277484f5f526020526024601cfd5b905f5260205260405f209081548110156112f25760010160051b015490565b905f5260205260405f209081548110156112f25760010160051b0155565b905f5260205260405f208054908115611383575f19820191808311610435578154831015611372575f9060051b82015555565b82638277484f5f526020526024601cfd5b505056fea26469706673582212200186e2a8904b59caafc2e7a2b8ff26ffee1b8617dc62b97c781ac357fdd82b4964736f6c634300081b0033000000000000000000" diff --git a/packages/permissionless-test/mock-aa-infra/alto/index.ts b/packages/permissionless-test/mock-aa-infra/alto/index.ts index 75708535..50116b17 100644 --- a/packages/permissionless-test/mock-aa-infra/alto/index.ts +++ b/packages/permissionless-test/mock-aa-infra/alto/index.ts @@ -32,6 +32,8 @@ import { KERNEL_V07_V3_1_FACTORY_CREATECALL, LIGHT_ACCOUNT_FACTORY_V110_CREATECALL, LIGHT_ACCOUNT_FACTORY_V200_CREATECALL, + NEXUS_K1_VALIDATOR_ADDRESS, + NEXUS_K1_VALIDATOR_FACTORY_ADDRESS, SAFE_7579_LAUNCHPAD_CREATECALL, SAFE_7579_MODULE_CREATECALL, SAFE_7579_REGISTRY_CREATECALL, @@ -363,12 +365,23 @@ export const setupContracts = async (rpc: string) => { gas: 15_000_000n, nonce: nonce++ }), - walletClient.sendTransaction({ to: BICONOMY_SINGLETON_FACTORY, data: BICONOMY_DEFAULT_FALLBACK_HANDLER_CREATECALL, gas: 15_000_000n, nonce: nonce++ + }), + walletClient.sendTransaction({ + to: BICONOMY_SINGLETON_FACTORY, + data: NEXUS_K1_VALIDATOR_ADDRESS, + gas: 15_000_000n, + nonce: nonce++ + }), + walletClient.sendTransaction({ + to: BICONOMY_SINGLETON_FACTORY, + data: NEXUS_K1_VALIDATOR_FACTORY_ADDRESS, + gas: 15_000_000n, + nonce: nonce++ }) ]) @@ -483,6 +496,8 @@ export const setupContracts = async (rpc: string) => { "0x2e7f1dAe1F3799d20f5c31bEFdc7A620f664728D", // Trust DefaultFallbackHandler "0xc98B026383885F41d9a995f85FC480E9bb8bB891", // ERC7579 Test Module "0x85e23b94e7F5E9cC1fF78BCe78cfb15B81f0DF00", // Thirdweb factory 0.6 - "0x4be0ddfebca9a5a4a617dee4dece99e7c862dceb" // Thirdweb factory 0.7 + "0x4be0ddfebca9a5a4a617dee4dece99e7c862dceb", // Thirdweb factory 0.7 + "0x00000bb19a3579F4D779215dEf97AFbd0e30DB55", // Nexus K1 Validator Factory + "0x00000004171351c442B202678c48D8AB5B321E8f" // Nexus K1 Validator ]) } diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index a0e95139..e04faa1f 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -22,6 +22,7 @@ import { type LightAccountVersion, toLightSmartAccount } from "../../permissionless/accounts/light/toLightSmartAccount" +import { toNexusSmartAccount } from "../../permissionless/accounts/nexus/toNexusSmartAccount" import { toSafeSmartAccount } from "../../permissionless/accounts/safe/toSafeSmartAccount" import { type ToSimpleSmartAccountReturnType, @@ -287,6 +288,16 @@ export const getBiconomyClient = async < }) } +export const getNexusClient = async ({ + anvilRpc, + privateKey +}: AAParamType) => { + return toNexusSmartAccount({ + client: getPublicClient(anvilRpc), + owners: [privateKeyToAccount(privateKey ?? generatePrivateKey())] + }) +} + export const getKernelEcdsaClient = async < entryPointVersion extends "0.6" | "0.7" >({ @@ -518,6 +529,28 @@ export const getCoreSmartAccounts = () => [ supportsEntryPointV07: false, isEip1271Compliant: true }, + { + name: "Nexus", + getSmartAccountClient: async ( + conf: AAParamType + ) => + getBundlerClient({ + account: await getNexusClient(conf), + ...conf + }), + getErc7579SmartAccountClient: async < + entryPointVersion extends "0.6" | "0.7" + >( + conf: AAParamType + ) => + getSmartAccountClient({ + account: await getNexusClient(conf), + ...conf + }), + supportsEntryPointV06: false, + supportsEntryPointV07: true, + isEip1271Compliant: true + }, { name: "Safe", getSmartAccountClient: async ( diff --git a/packages/permissionless/accounts/index.ts b/packages/permissionless/accounts/index.ts index 814b2889..da659ffa 100644 --- a/packages/permissionless/accounts/index.ts +++ b/packages/permissionless/accounts/index.ts @@ -43,6 +43,13 @@ import { toBiconomySmartAccount } from "./biconomy/toBiconomySmartAccount" +import { + type NexusSmartAccountImplementation, + type ToNexusSmartAccountParameters, + type ToNexusSmartAccountReturnType, + toNexusSmartAccount +} from "./nexus/toNexusSmartAccount" + import { type ThirdwebSmartAccountImplementation, type ToThirdwebSmartAccountParameters, @@ -74,6 +81,10 @@ export { type SafeVersion, type KernelVersion, toEcdsaKernelSmartAccount, + type NexusSmartAccountImplementation, + type ToNexusSmartAccountParameters, + type ToNexusSmartAccountReturnType, + toNexusSmartAccount, type ToBiconomySmartAccountReturnType, type ToBiconomySmartAccountParameters, type BiconomySmartAccountImplementation, diff --git a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts new file mode 100644 index 00000000..2bb0aade --- /dev/null +++ b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts @@ -0,0 +1,214 @@ +import type { + Account, + Assign, + Chain, + EIP1193Provider, + OneOf, + Prettify, + Transport, + WalletClient +} from "viem" +import { + type Address, + type Client, + type Hex, + type LocalAccount, + concat, + encodeFunctionData, + encodePacked, + toHex +} from "viem" +import { + type SmartAccount, + type SmartAccountImplementation, + entryPoint07Abi, + entryPoint07Address, + getUserOperationHash, + toSmartAccount +} from "viem/account-abstraction" +import { getAccountNonce } from "../../actions/public/getAccountNonce" +import { getSenderAddress } from "../../actions/public/getSenderAddress" +import { encode7579Calls } from "../../utils" +import { toOwner } from "../../utils/toOwner" + +/** + * The account creation ABI for Biconomy Smart Account (from the biconomy SmartAccountFactory) + */ + +/** + * Default addresses for Biconomy Smart Account + */ +const BICONOMY_ADDRESSES: { + K1_VALIDATOR_FACTORY_ADDRESS: Address + K1_VALIDATOR_ADDRESS: Address +} = { + K1_VALIDATOR_FACTORY_ADDRESS: "0x00000bb19a3579F4D779215dEf97AFbd0e30DB55", + K1_VALIDATOR_ADDRESS: "0x00000004171351c442B202678c48D8AB5B321E8f" +} + +export type ToNexusSmartAccountParameters = Prettify<{ + client: Client + owners: [ + OneOf< + | EIP1193Provider + | WalletClient + | LocalAccount + > + ] + address?: Address | undefined + entryPoint?: { + address: Address + version: "0.7" + } + index?: bigint + factoryAddress?: Address + validatorAddress?: Address + attesters?: Address[] + threshold?: number +}> + +export type NexusSmartAccountImplementation = Assign< + SmartAccountImplementation, + { sign: NonNullable } +> + +export type ToNexusSmartAccountReturnType = Prettify< + SmartAccount +> + +export async function toNexusSmartAccount( + parameters: ToNexusSmartAccountParameters +): Promise { + const { + owners, + client, + index = 0n, + address, + factoryAddress = BICONOMY_ADDRESSES.K1_VALIDATOR_FACTORY_ADDRESS, + validatorAddress = BICONOMY_ADDRESSES.K1_VALIDATOR_ADDRESS, + attesters = [], + threshold = 0 + } = parameters + + const localOwner = await toOwner({ owner: owners[0] }) + + const entryPoint = { + address: parameters.entryPoint?.address ?? entryPoint07Address, + abi: entryPoint07Abi, + version: parameters.entryPoint?.version ?? "0.7" + } + + let accountAddress: Address | undefined = address + + const getFactoryArgs = async () => { + return { + factory: factoryAddress, + factoryData: encodeFunctionData({ + abi: [ + { + name: "createAccount", + type: "function", + stateMutability: "nonpayable", + inputs: [ + { type: "address", name: "eoaOwner" }, + { type: "uint256", name: "index" }, + { type: "address[]", name: "attesters" }, + { type: "uint8", name: "threshold" } + ], + outputs: [{ type: "address" }] + } + ], + functionName: "createAccount", + args: [localOwner.address, index, attesters, threshold] + }) + } + } + + return toSmartAccount({ + client, + entryPoint, + getFactoryArgs, + async getAddress() { + if (accountAddress) return accountAddress + + const { factory, factoryData } = await getFactoryArgs() + + accountAddress = await getSenderAddress(client, { + factory, + factoryData, + entryPointAddress: entryPoint.address + }) + + return accountAddress + }, + async getNonce(args) { + const TIMESTAMP_ADJUSTMENT = 16777215n + const defaultedKey = (args?.key ?? 0n) % TIMESTAMP_ADJUSTMENT + const defaultedValidationMode = "0x00" + const key = concat([ + toHex(defaultedKey, { size: 3 }), + defaultedValidationMode, + validatorAddress + ]) + + const address = await this.getAddress() + + return getAccountNonce(client, { + address, + entryPointAddress: entryPoint.address, + key: BigInt(key) + }) + }, + encodeCalls: async (calls) => { + return encode7579Calls({ + mode: { + type: calls.length > 1 ? "batchcall" : "call", + revertOnError: false, + selector: "0x", + context: "0x" + }, + callData: calls + }) + }, + async getStubSignature() { + const dynamicPart = validatorAddress.substring(2).padEnd(40, "0") + return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` as Hex + }, + async sign({ hash }) { + return this.signMessage({ message: hash }) + }, + async signMessage({ message }) { + const signature = await localOwner.signMessage({ + message + }) + + return encodePacked( + ["address", "bytes"], + [validatorAddress, signature] + ) + }, + // TODO: Implement this + async signTypedData(_typedData) { + return "0x" + }, + async signUserOperation(parameters) { + const { chainId = client.chain?.id, ...userOperation } = parameters + + if (!chainId) throw new Error("Chain id not found") + + const hash = getUserOperationHash({ + userOperation: { + ...userOperation, + sender: userOperation.sender ?? (await this.getAddress()), + signature: "0x" + }, + entryPointAddress: entryPoint.address, + entryPointVersion: entryPoint.version, + chainId: chainId + }) + return await localOwner.signMessage({ + message: { raw: hash as Hex } + }) + } + }) +} From dfad0b8fe9d8b80d95377e9a91db94584023c7ec Mon Sep 17 00:00:00 2001 From: Garvit Khatri Date: Sun, 3 Nov 2024 01:05:48 +0000 Subject: [PATCH 2/5] Fix tests --- .../mock-aa-infra/alto/constants.ts | 13 +++++-- .../mock-aa-infra/alto/index.ts | 34 ++++++++++++++++--- .../accounts/nexus/toNexusSmartAccount.ts | 26 ++++++++++---- 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/packages/permissionless-test/mock-aa-infra/alto/constants.ts b/packages/permissionless-test/mock-aa-infra/alto/constants.ts index b083bc71..514ad613 100644 --- a/packages/permissionless-test/mock-aa-infra/alto/constants.ts +++ b/packages/permissionless-test/mock-aa-infra/alto/constants.ts @@ -171,8 +171,17 @@ export const THIRDWEB_FACTORY_V06_CREATECALL = export const THIRDWEB_FACTORY_V07_CREATECALL = "0x70f12235750810d18f16836d54f510d6db0dab4fde7da4c9666cbdfaf6af011860c06040523480156200001157600080fd5b506040516200666138038062006661833981016040819052620000349162000297565b8030604051620000449062000270565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000078573d6000803e3d6000fd5b506001600160a01b03908116608052811660a05262000099600083620000a1565b50506200031e565b620000ad8282620000bd565b620000b9828262000137565b5050565b60008281527f0a7b0f5c59907924802379ebe98cdc23e2ee7820f63d30126e10b3752010e500602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006200014362000205565b60008481526020919091526040902054905060016200016162000205565b600085815260209190915260408120805490919062000182908490620002ec565b909155508290506200019362000205565b6000858152602091825260408082208583526001019092522080546001600160a01b0319166001600160a01b039290921691909117905580620001d562000205565b6000948552602090815260408086206001600160a01b03909516865260029094019052919092205550565b905090565b60006200020060008060ff196200023e60017f0c4ba382c0009cf238e4c1ca1a52f51c61e6248a70bdfb34e5ed49d5578a5c0c62000308565b6040516020016200025191815260200190565b60408051601f1981840301815291905280516020909101201692915050565b6141ec806200247583390190565b6001600160a01b03811681146200029457600080fd5b50565b60008060408385031215620002ab57600080fd5b8251620002b8816200027e565b6020840151909250620002cb816200027e565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620003025762000302620002d6565b92915050565b81810381811115620003025762000302620002d6565b60805160a05161211562000360600039600081816102a30152610b760152600081816101780152818161060001528181610ad20152610df601526121156000f3fe608060405234801561001057600080fd5b50600436106101285760003560e01c806308e93d0a1461012d5780630b61e12b1461014b5780630e6254fd1461016057806311464fbe14610173578063248a9ca3146101b25780632f2ff15d146101d357806336568abe146101e657806358451f97146101f957806383a03f8c146102015780638878ed33146102145780639010d07c1461022757806391d148541461023a5780639387a3801461025d578063938e3d7b14610270578063a217fddf14610283578063a32fa5b31461028b578063a65d69d41461029e578063ac9650d8146102c5578063c3c5a547146102e5578063ca15c873146102f8578063d547741f1461030b578063d8fd8f441461031e578063e68a7c3b14610331578063e8a3d48514610344575b600080fd5b610135610359565b6040516101429190611945565b60405180910390f35b61015e6101593660046119ae565b61036a565b005b61013561016e3660046119d8565b61040b565b61019a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610142565b6101c56101c03660046119f3565b610435565b604051908152602001610142565b61015e6101e1366004611a0c565b610453565b61015e6101f4366004611a0c565b6104fd565b6101c561055c565b61015e61020f3660046119f3565b610568565b61019a610222366004611a38565b6105b6565b61019a610235366004611aba565b610630565b61024d610248366004611a0c565b61073e565b6040519015158152602001610142565b61015e61026b3660046119ae565b610772565b61015e61027e366004611af2565b610809565b6101c5600081565b61024d610299366004611a0c565b61085a565b61019a7f000000000000000000000000000000000000000000000000000000000000000081565b6102d86102d3366004611ba2565b6108bd565b6040516101429190611c66565b61024d6102f33660046119d8565b610a19565b6101c56103063660046119f3565b610a25565b61015e610319366004611a0c565b610ac2565b61019a61032c366004611a38565b610acd565b61013561033f366004611aba565b610c18565b61034c610d49565b6040516101429190611cca565b60606103656000610de1565b905090565b336103758183610dee565b61039a5760405162461bcd60e51b815260040161039190611cdd565b60405180910390fd5b6001600160a01b03831660009081526002602052604081206103bc9083610e32565b9050801561040557836001600160a01b0316826001600160a01b03167f12146497b3b826918ec47f0cac7272a09ed06b30c16c030e99ec48ff5dd60b4760405160405180910390a35b50505050565b6001600160a01b038116600090815260026020526040902060609061042f90610de1565b92915050565b600061043f610e47565b600092835260010160205250604090205490565b61047761045e610e47565b6000848152600191909101602052604090205433610e6b565b61047f610e47565b6000838152602091825260408082206001600160a01b0385168352909252205460ff16156104ef5760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c79206772616e7420746f206e6f6e20686f6c646572730000006044820152606401610391565b6104f98282610ef0565b5050565b336001600160a01b038216146105525760405162461bcd60e51b815260206004820152601a60248201527921b0b71037b7363c903932b737bab731b2903337b91039b2b63360311b6044820152606401610391565b6104f98282610f04565b60006103656000610f18565b336105738183610dee565b61058f5760405162461bcd60e51b815260040161039190611cdd565b61059a600082610e32565b6104f95760405162461bcd60e51b815260040161039190611d14565b6000806105f98585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f2292505050565b90506106257f000000000000000000000000000000000000000000000000000000000000000082610f55565b9150505b9392505050565b60008061063b610fb5565b600085815260209190915260408120549150805b82811015610735576000610661610fb5565b60008881526020918252604080822085835260010190925220546001600160a01b0316146106d9578482036106c757610698610fb5565b600087815260209182526040808220938252600190930190915220546001600160a01b0316925061042f915050565b6106d2600183611d74565b9150610723565b6106e486600061073e565b801561071057506106f3610fb5565b600087815260209182526040808220828052600201909252205481145b1561072357610720600183611d74565b91505b61072e600182611d74565b905061064f565b50505092915050565b6000610748610e47565b6000938452602090815260408085206001600160a01b039490941685529290525090205460ff1690565b3361077d8183610dee565b6107995760405162461bcd60e51b815260040161039190611cdd565b6001600160a01b03831660009081526002602052604081206107bb9083610fbf565b9050801561040557836001600160a01b0316826001600160a01b03167f98d1ebbe00ae92a5de96a0f49742a8afa89f42363592bc2e7cfaaed68b45e7a660405160405180910390a350505050565b610811610fd4565b61084e5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610391565b61085781610fe0565b50565b6000610864610e47565b600084815260209182526040808220828052909252205460ff166108b45761088a610e47565b6000848152602091825260408082206001600160a01b0386168352909252205460ff16905061042f565b50600192915050565b6060816001600160401b038111156108d7576108d7611adc565b60405190808252806020026020018201604052801561090a57816020015b60608152602001906001900390816108f55790505b509050336000805b848110156107355781156109915761096f3087878481811061093657610936611d87565b90506020028101906109489190611d9d565b8660405160200161095b93929190611dea565b6040516020818303038152906040526110c7565b84828151811061098157610981611d87565b6020026020010181905250610a11565b6109f3308787848181106109a7576109a7611d87565b90506020028101906109b99190611d9d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110c792505050565b848281518110610a0557610a05611d87565b60200260200101819052505b600101610912565b600061042f81836110ec565b600080610a30610fb5565b6000848152602091909152604081205491505b81811015610a9d576000610a55610fb5565b60008681526020918252604080822085835260010190925220546001600160a01b031614610a8b57610a88600184611d74565b92505b610a96600182611d74565b9050610a43565b50610aa983600061073e565b15610abc57610ab9600183611d74565b91505b50919050565b61055261045e610e47565b6000807f000000000000000000000000000000000000000000000000000000000000000090506000610b358686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f2292505050565b90506000610b438383610f55565b90506001600160a01b0381163b15610b5f579250610629915050565b610b69838361110e565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc257610ba6600082610e32565b610bc25760405162461bcd60e51b815260040161039190611d14565b610bce818888886111a5565b866001600160a01b0316816001600160a01b03167fac631f3001b55ea1509cf3d7e74898f85392a61a76e8149181ae1259622dabc860405160405180910390a39695505050505050565b60608183108015610c325750610c2e6000610f18565b8211155b610c8a5760405162461bcd60e51b815260206004820152602360248201527f426173654163636f756e74466163746f72793a20696e76616c696420696e646960448201526263657360e81b6064820152608401610391565b6000610c968484611e0b565b9050610ca28484611e0b565b6001600160401b03811115610cb957610cb9611adc565b604051908082528060200260200182016040528015610ce2578160200160208202803683370190505b50915060005b81811015610d4157610d05610cfd8683611d74565b60009061120d565b838281518110610d1757610d17611d87565b6001600160a01b0390921660209283029190910190910152610d3a600182611d74565b9050610ce8565b505092915050565b6060610d53611219565b8054610d5e90611e1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8a90611e1e565b8015610dd75780601f10610dac57610100808354040283529160200191610dd7565b820191906000526020600020905b815481529060010190602001808311610dba57829003601f168201915b5050505050905090565b606060006106298361123d565b600080610e1b7f000000000000000000000000000000000000000000000000000000000000000084610f55565b6001600160a01b0385811691161491505092915050565b6000610629836001600160a01b038416611299565b7f0a7b0f5c59907924802379ebe98cdc23e2ee7820f63d30126e10b3752010e50090565b610e73610e47565b6000838152602091825260408082206001600160a01b0385168352909252205460ff166104f957610eae816001600160a01b031660146112e8565b610eb98360206112e8565b604051602001610eca929190611e52565b60408051601f198184030181529082905262461bcd60e51b825261039191600401611cca565b610efa8282611483565b6104f982826114ec565b610f0e82826115ab565b6104f98282611614565b600061042f825490565b60008282604051602001610f37929190611ebf565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c82012060788201526055604390910120600090610629565b60006103656116a3565b6000610629836001600160a01b038416611705565b6000610365813361073e565b6000610fea611219565b8054610ff590611e1e565b80601f016020809104026020016040519081016040528092919081815260200182805461102190611e1e565b801561106e5780601f106110435761010080835404028352916020019161106e565b820191906000526020600020905b81548152906001019060200180831161105157829003601f168201915b505050505090508161107e611219565b906110899082611f34565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a1681836040516110bb929190611ff3565b60405180910390a15050565b606061062983836040518060600160405280602781526020016120b9602791396117f8565b6001600160a01b03811660009081526001830160205260408120541515610629565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b03811661042f5760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b6044820152606401610391565b60405163347d5e2560e21b81526001600160a01b0385169063d1f57894906111d590869086908690600401612018565b600060405180830381600087803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b5050505050505050565b60006106298383611870565b7f4bc804ba64359c0e35e5ed5d90ee596ecaa49a3a930ddcb1470ea0dd625da90090565b60608160000180548060200260200160405190810160405280929190818152602001828054801561128d57602002820191906000526020600020905b815481526020019060010190808311611279575b50505050509050919050565b60008181526001830160205260408120546112e05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561042f565b50600061042f565b606060006112f7836002612058565b611302906002611d74565b6001600160401b0381111561131957611319611adc565b6040519080825280601f01601f191660200182016040528015611343576020820181803683370190505b509050600360fc1b8160008151811061135e5761135e611d87565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061138d5761138d611d87565b60200101906001600160f81b031916908160001a90535060006113b1846002612058565b6113bc906001611d74565b90505b6001811115611434576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106113f0576113f0611d87565b1a60f81b82828151811061140657611406611d87565b60200101906001600160f81b031916908160001a90535060049490941c9361142d8161206f565b90506113bf565b5083156106295760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610391565b600161148d610e47565b6000848152602091825260408082206001600160a01b0386168084529352808220805460ff1916941515949094179093559151339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006114f6610fb5565b6000848152602091909152604090205490506001611512610fb5565b6000858152602091909152604081208054909190611531908490611d74565b90915550829050611540610fb5565b6000858152602091825260408082208583526001019092522080546001600160a01b0319166001600160a01b039290921691909117905580611580610fb5565b6000948552602090815260408086206001600160a01b03909516865260029094019052919092205550565b6115b58282610e6b565b6115bd610e47565b6000838152602091825260408082206001600160a01b0385168084529352808220805460ff191690555133929185917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061161e610fb5565b6000848152602091825260408082206001600160a01b03861683526002019092522054905061164b610fb5565b6000848152602091825260408082208483526001019092522080546001600160a01b031916905561167a610fb5565b6000938452602090815260408085206001600160a01b0390941685526002909301905250812055565b60008060ff196116d460017f0c4ba382c0009cf238e4c1ca1a52f51c61e6248a70bdfb34e5ed49d5578a5c0c611e0b565b6040516020016116e691815260200190565b60408051601f1981840301815291905280516020909101201692915050565b600081815260018301602052604081205480156117ee576000611729600183611e0b565b855490915060009061173d90600190611e0b565b90508181146117a257600086600001828154811061175d5761175d611d87565b906000526020600020015490508087600001848154811061178057611780611d87565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806117b3576117b3612086565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061042f565b600091505061042f565b6060600080856001600160a01b031685604051611815919061209c565b600060405180830381855af49150503d8060008114611850576040519150601f19603f3d011682016040523d82523d6000602084013e611855565b606091505b50915091506118668683838761189a565b9695505050505050565b600082600001828154811061188757611887611d87565b9060005260206000200154905092915050565b60608315611909578251600003611902576001600160a01b0385163b6119025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610391565b5081611913565b611913838361191b565b949350505050565b81511561192b5781518083602001fd5b8060405162461bcd60e51b81526004016103919190611cca565b6020808252825182820181905260009190848201906040850190845b818110156119865783516001600160a01b031683529284019291840191600101611961565b50909695505050505050565b80356001600160a01b03811681146119a957600080fd5b919050565b600080604083850312156119c157600080fd5b6119ca83611992565b946020939093013593505050565b6000602082840312156119ea57600080fd5b61062982611992565b600060208284031215611a0557600080fd5b5035919050565b60008060408385031215611a1f57600080fd5b82359150611a2f60208401611992565b90509250929050565b600080600060408486031215611a4d57600080fd5b611a5684611992565b925060208401356001600160401b0380821115611a7257600080fd5b818601915086601f830112611a8657600080fd5b813581811115611a9557600080fd5b876020828501011115611aa757600080fd5b6020830194508093505050509250925092565b60008060408385031215611acd57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611b0457600080fd5b81356001600160401b0380821115611b1b57600080fd5b818401915084601f830112611b2f57600080fd5b813581811115611b4157611b41611adc565b604051601f8201601f19908116603f01168101908382118183101715611b6957611b69611adc565b81604052828152876020848701011115611b8257600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060208385031215611bb557600080fd5b82356001600160401b0380821115611bcc57600080fd5b818501915085601f830112611be057600080fd5b813581811115611bef57600080fd5b8660208260051b8501011115611c0457600080fd5b60209290920196919550909350505050565b60005b83811015611c31578181015183820152602001611c19565b50506000910152565b60008151808452611c52816020860160208601611c16565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015611cbd57603f19888603018452611cab858351611c3a565b94509285019290850190600101611c8f565b5092979650505050505050565b6020815260006106296020830184611c3a565b6020808252601f908201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e00604082015260600190565b6020808252602a908201527f4163636f756e74466163746f72793a206163636f756e7420616c7265616479206040820152691c9959da5cdd195c995960b21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561042f5761042f611d5e565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611db457600080fd5b8301803591506001600160401b03821115611dce57600080fd5b602001915036819003821315611de357600080fd5b9250929050565b8284823760609190911b6001600160601b0319169101908152601401919050565b8181038181111561042f5761042f611d5e565b600181811c90821680611e3257607f821691505b602082108103610abc57634e487b7160e01b600052602260045260246000fd5b7402832b936b4b9b9b4b7b7399d1030b1b1b7bab73a1605d1b815260008351611e82816015850160208801611c16565b7001034b99036b4b9b9b4b733903937b6329607d1b6015918401918201528351611eb3816026840160208801611c16565b01602601949350505050565b6001600160a01b038316815260406020820181905260009061191390830184611c3a565b601f821115611f2f576000816000526020600020601f850160051c81016020861015611f0c5750805b601f850160051c820191505b81811015611f2b57828155600101611f18565b5050505b505050565b81516001600160401b03811115611f4d57611f4d611adc565b611f6181611f5b8454611e1e565b84611ee3565b602080601f831160018114611f965760008415611f7e5750858301515b600019600386901b1c1916600185901b178555611f2b565b600085815260208120601f198616915b82811015611fc557888601518255948401946001909101908401611fa6565b5085821015611fe35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815260006120066040830185611c3a565b82810360208401526106258185611c3a565b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b808202811582820484141761042f5761042f611d5e565b60008161207e5761207e611d5e565b506000190190565b634e487b7160e01b600052603160045260246000fd5b600082516120ae818460208701611c16565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220470672e9aa40edd84be614829a54b72ee712b44d032158872ff9f19e71392f1d64736f6c634300081700336101806040523480156200001257600080fd5b50604051620041ec380380620041ec833981016040819052620000359162000250565b60408051808201825260078152661058d8dbdd5b9d60ca1b60208083019182528351808501855260018152603160f81b908201529151902060e08190527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c093840190965280519401939093209092529190526101205281816200011762000134565b6001600160a01b03908116610140521661016052506200028f9050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff808216916101009004168015620001c55760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60ff828116101562000233577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff191660ff90811790915560408051918252517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a15b5050565b6001600160a01b03811681146200024d57600080fd5b50565b600080604083850312156200026457600080fd5b8251620002718162000237565b6020840151909250620002848162000237565b809150509250929050565b60805160a05160c05160e05161010051610120516101405161016051613ecd6200031f600039600061131a01526000818161044b01528181611fd6015281816121700152818161219e015281816121f70152818161227201526122a201526000611f2a01526000611f7901526000611f5401526000611ead01526000611ed701526000611f010152613ecd6000f3fe60806040526004361061014b5760003560e01c806301ffc9a714610157578063150b7a021461018c5780631626ba7e146101c557806319822f7c146101e557806324d7806c14610213578063399b77da1461023357806347e1da2a146102535780634a58db19146102755780634d44560d1461027d5780635892e2361461029d5780637dff5a79146102bd5780638b52d723146102dd578063938e3d7b146102ff578063a9082d841461031f578063ac9650d81461035e578063b0d691fe1461038b578063b61d27f6146103ad578063b76464d5146103cd578063bc197c81146103ed578063bc66cea214610419578063c45a015514610439578063d087d2881461046d578063d1f5789414610482578063d42f2f35146104a2578063e8a3d485146104b7578063e9523c97146104d9578063f15d424e146104fb578063f23a6e611461052857600080fd5b3661015257005b600080fd5b34801561016357600080fd5b50610177610172366004612d97565b610554565b60405190151581526020015b60405180910390f35b34801561019857600080fd5b506101ac6101a7366004612ea3565b61059a565b6040516001600160e01b03199091168152602001610183565b3480156101d157600080fd5b506101ac6101e0366004612f0e565b6105ab565b3480156101f157600080fd5b50610205610200366004612f6d565b6106ca565b604051908152602001610183565b34801561021f57600080fd5b5061017761022e366004612fba565b6106f0565b34801561023f57600080fd5b5061020561024e366004612fd7565b61071f565b34801561025f57600080fd5b5061027361026e366004613034565b6107ea565b005b610273610951565b34801561028957600080fd5b506102736102983660046130cd565b6109b9565b3480156102a957600080fd5b506102736102b836600461313a565b610a2c565b3480156102c957600080fd5b506101776102d8366004612fba565b610de9565b3480156102e957600080fd5b506102f2610ea2565b6040516101839190613244565b34801561030b57600080fd5b5061027361031a3660046132a8565b6110e9565b34801561032b57600080fd5b5061033f61033a36600461313a565b61113a565b6040805192151583526001600160a01b03909116602083015201610183565b34801561036a57600080fd5b5061037e6103793660046132f0565b611191565b6040516101839190613381565b34801561039757600080fd5b506103a06112f6565b60405161018391906133d8565b3480156103b957600080fd5b506102736103c83660046133ec565b61133f565b3480156103d957600080fd5b506102736103e8366004612fba565b6113cf565b3480156103f957600080fd5b506101ac6104083660046134d9565b63bc197c8160e01b95945050505050565b34801561042557600080fd5b50610177610434366004613586565b611401565b34801561044557600080fd5b506103a07f000000000000000000000000000000000000000000000000000000000000000081565b34801561047957600080fd5b506102056116c5565b34801561048e57600080fd5b5061027361049d3660046135cb565b611745565b3480156104ae57600080fd5b506102f26118fd565b3480156104c357600080fd5b506104cc611a6e565b6040516101839190613612565b3480156104e557600080fd5b506104ee611b06565b6040516101839190613625565b34801561050757600080fd5b5061051b610516366004612fba565b611b18565b6040516101839190613672565b34801561053457600080fd5b506101ac610543366004613685565b63f23a6e6160e01b95945050505050565b60006001600160e01b03198216630271189760e51b148061058557506001600160e01b03198216630a85bd0160e11b145b80610594575061059482611bf0565b92915050565b630a85bd0160e11b5b949350505050565b6000806105b78461071f565b905060006105c58285611c25565b90506105d0816106f0565b156105e75750630b135d3f60e11b91506105949050565b3360006105f2611c49565b6001600160a01b038416600090815260069190910160205260409020905061061a8183611c6d565b8061064a575061062981611c8f565b600114801561064a5750600061063f8282611c99565b6001600160a01b0316145b6106a75760405162461bcd60e51b8152602060048201526024808201527f4163636f756e743a2063616c6c6572206e6f7420617070726f7665642074617260448201526333b2ba1760e11b60648201526084015b60405180910390fd5b6106b083610de9565b156106c057630b135d3f60e11b94505b5050505092915050565b60006106d4611ca5565b6106de8484611d0e565b90506106e982611e53565b9392505050565b60006106fa611c49565b6001600160a01b03909216600090815260049290920160205250604090205460ff1690565b6000808260405160200161073591815260200190565b60405160208183030381529060405280519060200120905060007f82cac545155fcbf147f2a9013809613677ac7d65498556e6d19ce43bcbf6c2848260405160200161078b929190918252602082015260400190565b6040516020818303038152906040528051906020012090506107ab611ea0565b60405161190160f01b60208201526022810191909152604281018290526062016040516020818303038152906040528051906020012092505050919050565b6107f26112f6565b6001600160a01b0316336001600160a01b031614806108155750610815336106f0565b6108315760405162461bcd60e51b815260040161069e906136ed565b610839611fc7565b848114801561084757508483145b6108935760405162461bcd60e51b815260206004820152601d60248201527f4163636f756e743a2077726f6e67206172726179206c656e677468732e000000604482015260640161069e565b60005b858110156109485761093f8787838181106108b3576108b361372e565b90506020020160208101906108c89190612fba565b8686848181106108da576108da61372e565b905060200201358585858181106108f3576108f361372e565b90506020028101906109059190613744565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120ad92505050565b50600101610896565b50505050505050565b6109596112f6565b6001600160a01b031663b760faf934306040518363ffffffff1660e01b815260040161098591906133d8565b6000604051808303818588803b15801561099e57600080fd5b505af11580156109b2573d6000803e3d6000fd5b5050505050565b6109c161211e565b6109c96112f6565b6001600160a01b031663205c287883836040518363ffffffff1660e01b81526004016109f692919061378a565b600060405180830381600087803b158015610a1057600080fd5b505af1158015610a24573d6000803e3d6000fd5b505050505050565b6000610a3b6020850185612fba565b905042610a4e60e0860160c087016137ba565b6001600160801b031611158015610a7d5750610a71610100850160e086016137ba565b6001600160801b031642105b610ab35760405162461bcd60e51b8152602060048201526007602482015266085c195c9a5bd960ca1b604482015260640161069e565b600080610ac186868661113a565b9150915081610afb5760405162461bcd60e51b815260040161069e906020808252600490820152632173696760e01b604082015260600190565b6001610b05611c49565b610100880135600090815260079190910160209081526040808320805460ff1916941515949094179093559091610b41919089019089016137e6565b60ff161115610b6e576000610b5c60408801602089016137e6565b60ff166001149050610948848261215c565b610b77836106f0565b15610bac5760405162461bcd60e51b815260206004820152600560248201526430b236b4b760d91b604482015260640161069e565b610bc183610bb8611c49565b60020190612231565b50604051806060016040528087606001358152602001876080016020810190610bea91906137ba565b6001600160801b03168152602001610c0860c0890160a08a016137ba565b6001600160801b03169052610c1b611c49565b6001600160a01b03851660009081526005919091016020908152604080832084518155918401519301516001600160801b03908116600160801b02931692909217600190920191909155610c91610c70611c49565b6001600160a01b038616600090815260069190910160205260409020612246565b805190915060005b81811015610cfb57610ce8838281518110610cb657610cb661372e565b6020026020010151610cc6611c49565b6001600160a01b03891660009081526006919091016020526040902090612253565b50610cf4600182613817565b9050610c99565b50610d09604089018961382a565b9050905060005b81811015610d8a57610d77610d2860408b018b61382a565b83818110610d3857610d3861372e565b9050602002016020810190610d4d9190612fba565b610d55611c49565b6001600160a01b03891660009081526006919091016020526040902090612231565b50610d83600182613817565b9050610d10565b50610d9488612268565b846001600160a01b0316836001600160a01b03167ff21d10c26e35863a8df291aca54181ee8c4a3bc8e00246c3f7a5a14b69d826a78a604051610dd79190613904565b60405180910390a35050505050505050565b600080610df4611c49565b6001600160a01b038416600090815260059190910160209081526040918290208251606081018452815481526001909101546001600160801b03808216938301849052600160801b90910416928101929092529091504210801590610e65575080604001516001600160801b031642105b80156106e957506000610e9a610e79611c49565b6001600160a01b038616600090815260069190910160205260409020611c8f565b119392505050565b60606000610eb9610eb1611c49565b600201612246565b80519091506000805b82811015610f4a57610eec848281518110610edf57610edf61372e565b6020026020010151610de9565b15610f035781610efb816139ef565b925050610f38565b6000848281518110610f1757610f1761372e565b60200260200101906001600160a01b031690816001600160a01b0316815250505b610f43600182613817565b9050610ec2565b50806001600160401b03811115610f6357610f63612de6565b604051908082528060200260200182016040528015610f9c57816020015b610f89612d4d565b815260200190600190039081610f815790505b5093506000805b838110156110e15760006001600160a01b0316858281518110610fc857610fc861372e565b60200260200101516001600160a01b0316146110cf576000858281518110610ff257610ff261372e565b602002602001015190506000611006611c49565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611070610c70611c49565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b03168152508885806110af906139ef565b9650815181106110c1576110c161372e565b602002602001018190525050505b6110da600182613817565b9050610fa3565b505050505090565b6110f16122fd565b61112e5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b604482015260640161069e565b61113781612315565b50565b600080611150611149866123fc565b8585612540565b905061115a611c49565b6101008601356000908152600791909101602052604090205460ff161580156111875750611187816106f0565b9150935093915050565b6060816001600160401b038111156111ab576111ab612de6565b6040519080825280602002602001820160405280156111de57816020015b60608152602001906001900390816111c95790505b509050336000805b848110156112ed578115611265576112433087878481811061120a5761120a61372e565b905060200281019061121c9190613744565b8660405160200161122f93929190613a08565b604051602081830303815290604052612592565b8482815181106112555761125561372e565b60200260200101819052506112e5565b6112c73087878481811061127b5761127b61372e565b905060200281019061128d9190613744565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061259292505050565b8482815181106112d9576112d961372e565b60200260200101819052505b6001016111e6565b50505092915050565b6000806113016125b7565b546001600160a01b03169050801561131857919050565b7f000000000000000000000000000000000000000000000000000000000000000091505090565b6113476112f6565b6001600160a01b0316336001600160a01b0316148061136a575061136a336106f0565b6113865760405162461bcd60e51b815260040161069e906136ed565b61138e611fc7565b6109b2848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120ad92505050565b6113d761211e565b806113e06125b7565b80546001600160a01b0319166001600160a01b039290921691909117905550565b600061140b611c49565b6001600160a01b0384166000908152600491909101602052604090205460ff161561143857506001610594565b6000611442611c49565b6001600160a01b0385166000908152600591909101602090815260408083208151606081018352815481526001909101546001600160801b0380821694830194909452600160801b900490921690820152915061149d611c49565b6006016000866001600160a01b03166001600160a01b0316815260200190815260200160002090504282602001516001600160801b031611806114ed575081604001516001600160801b03164210155b806114fe57506114fc81611c8f565b155b1561150e57600092505050610594565b60006115256115206060870187613744565b6125db565b9050600061153283611c8f565b6001148015611553575060006115488482611c99565b6001600160a01b0316145b90506324f16c0560e11b6001600160e01b03198316016115ca5760008061158561158060608a018a613744565b612615565b91509150826115ab576115988583611c6d565b6115ab5760009650505050505050610594565b85518111156115c35760009650505050505050610594565b50506116b8565b635c0f12eb60e11b6001600160e01b03198316016116ab576000806115fa6115f560608a018a613744565b61267a565b50915091508261165a5760005b82518110156116585761163c8382815181106116255761162561372e565b602002602001015187611c6d90919063ffffffff16565b611650576000975050505050505050610594565b600101611607565b505b60005b82518110156116a3578181815181106116785761167861372e565b60200260200101518760000151101561169b576000975050505050505050610594565b60010161165d565b5050506116b8565b6000945050505050610594565b5060019695505050505050565b60006116cf6112f6565b604051631aab3f0d60e11b8152306004820152600060248201526001600160a01b0391909116906335567e1a90604401602060405180830381865afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190613a29565b905090565b600061174f6126c7565b5460ff169050600061175f6126c7565b54610100900460ff169050801580801561177c575060018360ff16105b8061179b575061178b306126eb565b15801561179b57508260ff166001145b6117fe5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161069e565b60016118086126c7565b805460ff191660ff92909216919091179055801561184157600161182a6126c7565b80549115156101000261ff00199092169190911790555b6118818686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126fa92505050565b6118896125b7565b6001018190555061189b86600161215c565b8015610a245760006118ab6126c7565b80549115156101000261ff0019909216919091179055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050565b6060600061190c610eb1611c49565b8051909150806001600160401b0381111561192957611929612de6565b60405190808252806020026020018201604052801561196257816020015b61194f612d4d565b8152602001906001900390816119475790505b50925060005b81811015611a685760008382815181106119845761198461372e565b602002602001015190506000611998611c49565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611a02610c70611c49565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250868481518110611a4757611a4761372e565b60200260200101819052505050600181611a619190613817565b9050611968565b50505090565b6060611a7861272d565b8054611a8390613a42565b80601f0160208091040260200160405190810160405280929190818152602001828054611aaf90613a42565b8015611afc5780601f10611ad157610100808354040283529160200191611afc565b820191906000526020600020905b815481529060010190602001808311611adf57829003601f168201915b5050505050905090565b6060611740611b13611c49565b612246565b611b20612d4d565b6000611b2a611c49565b6001600160a01b038416600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611bb5611b94611c49565b6001600160a01b038716600090815260069190910160205260409020612246565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250915050919050565b60006001600160e01b03198216630271189760e51b148061059457506301ffc9a760e01b6001600160e01b0319831614610594565b6000806000611c348585612751565b91509150611c4181612796565b509392505050565b7f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0090565b6001600160a01b038116600090815260018301602052604081205415156106e9565b6000610594825490565b60006106e983836128db565b611cad6112f6565b6001600160a01b0316336001600160a01b031614611d0c5760405162461bcd60e51b815260206004820152601c60248201527b1858d8dbdd5b9d0e881b9bdd08199c9bdb48115b9d1c9e541bda5b9d60221b604482015260640161069e565b565b7b0ca2ba3432b932bab69029b4b3b732b21026b2b9b9b0b3b29d05199960211b6000908152601c829052603c81206000611d8c611d4f610100870187613744565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508693925050611c259050565b9050611d988186611401565b611da757600192505050610594565b6000611db1611c49565b6001600160a01b03929092166000908152600590920160209081526040808420815160608082018452825482526001909201546001600160801b0380821683870152600160801b8204908116928501929092528351928301845295825265ffffffffffff8087169483019490945292831691015260d09290921b6001600160d01b03191660a09290921b65ffffffffffff60a01b169190911795945050505050565b801561113757604051600090339060001990849084818181858888f193505050503d80600081146109b2576040519150601f19603f3d011682016040523d82523d6000602084013e6109b2565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611ef957507f000000000000000000000000000000000000000000000000000000000000000046145b15611f2357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60405163c3c5a54760e01b81527f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b0382169063c3c5a547906120159030906004016133d8565b602060405180830381865afa158015612032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120569190613a76565b61113757806001600160a01b03166383a03f8c6120716125b7565b600101546040518263ffffffff1660e01b815260040161209391815260200190565b600060405180830381600087803b15801561099e57600080fd5b60606000846001600160a01b031684846040516120ca9190613a98565b60006040518083038185875af1925050503d8060008114612107576040519150601f19603f3d011682016040523d82523d6000602084013e61210c565b606091505b509250905080611c4157815160208301fd5b612127336106f0565b611d0c5760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b604482015260640161069e565b6121668282612905565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561222d5780156121f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630b61e12b836121d46125b7565b600101546040518363ffffffff1660e01b81526004016109f692919061378a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639387a380836121d46125b7565b5050565b60006106e9836001600160a01b0384166129b4565b606060006106e983612a03565b60006106e9836001600160a01b038416612a5f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15611137576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b6122d46020840184612fba565b6122dc6125b7565b600101546040518363ffffffff1660e01b815260040161209392919061378a565b6000612308336106f0565b8061174057505030331490565b600061231f61272d565b805461232a90613a42565b80601f016020809104026020016040519081016040528092919081815260200182805461235690613a42565b80156123a35780601f10612378576101008083540402835291602001916123a3565b820191906000526020600020905b81548152906001019060200180831161238657829003601f168201915b50505050509050816123b361272d565b906123be9082613b01565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a1681836040516123f0929190613bc0565b60405180910390a15050565b60607f3fd4a1a1a267c84185e3b7eecd57c68783c0581d538b9d6e5f23e4670497c1e961242c6020840184612fba565b61243c60408501602086016137e6565b612449604086018661382a565b60405160200161245a929190613bee565b60408051601f198184030181529190528051602090910120606086013561248760a08801608089016137ba565b61249760c0890160a08a016137ba565b6124a760e08a0160c08b016137ba565b6124b86101008b0160e08c016137ba565b60408051602081019a909a526001600160a01b039098169789019790975260ff9095166060880152608087019390935260a08601919091526001600160801b0390811660c086015290811660e0850152908116610100848101919091529116610120830152830135610140820152610160016040516020818303038152906040529050919050565b60006105a383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508751602089012061258c92509050612b52565b90611c25565b60606106e98383604051806060016040528060278152602001613e7160279139612b7f565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830090565b600060048210156125fe5760405162461bcd60e51b815260040161069e90613c30565b61260c600460008486613c4f565b6106e991613c79565b60008060448310156126395760405162461bcd60e51b815260040161069e90613c30565b612647602460048587613c4f565b8101906126549190612fba565b9150612664604460248587613c4f565b8101906126719190612fd7565b90509250929050565b60608080606484101561269f5760405162461bcd60e51b815260040161069e90613c30565b6126ac8460048188613c4f565b8101906126b99190613d28565b919790965090945092505050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee030090565b6001600160a01b03163b151590565b6000828260405160200161270f929190613e0d565b60405160208183030381529060405280519060200120905092915050565b7f4bc804ba64359c0e35e5ed5d90ee596ecaa49a3a930ddcb1470ea0dd625da90090565b60008082516041036127875760208301516040840151606085015160001a61277b87828585612bf7565b9450945050505061278f565b506000905060025b9250929050565b60008160048111156127aa576127aa613e31565b036127b25750565b60018160048111156127c6576127c6613e31565b0361280e5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161069e565b600281600481111561282257612822613e31565b0361286f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161069e565b600381600481111561288357612883613e31565b036111375760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161069e565b60008260000182815481106128f2576128f261372e565b9060005260206000200154905092915050565b8061290e611c49565b6001600160a01b038416600090815260049190910160205260409020805460ff19169115159190911790558015612957576129518261294b611c49565b90612231565b5061296b565b61296982612963611c49565b90612253565b505b816001600160a01b03167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a11133826040516129a8911515815260200190565b60405180910390a25050565b60008181526001830160205260408120546129fb57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610594565b506000610594565b606081600001805480602002602001604051908101604052809291908181526020018280548015612a5357602002820191906000526020600020905b815481526020019060010190808311612a3f575b50505050509050919050565b60008181526001830160205260408120548015612b48576000612a83600183613e47565b8554909150600090612a9790600190613e47565b9050818114612afc576000866000018281548110612ab757612ab761372e565b9060005260206000200154905080876000018481548110612ada57612ada61372e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b0d57612b0d613e5a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610594565b6000915050610594565b6000610594612b5f611ea0565b8360405161190160f01b8152600281019290925260228201526042902090565b6060600080856001600160a01b031685604051612b9c9190613a98565b600060405180830381855af49150503d8060008114612bd7576040519150601f19603f3d011682016040523d82523d6000602084013e612bdc565b606091505b5091509150612bed86838387612cb1565b9695505050505050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115612c245750600090506003612ca8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612c78573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612ca157600060019250925050612ca8565b9150600090505b94509492505050565b60608315612d1e578251600003612d1757612ccb856126eb565b612d175760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069e565b50816105a3565b6105a38383815115612d335781518083602001fd5b8060405162461bcd60e51b815260040161069e9190613612565b6040518060a0016040528060006001600160a01b03168152602001606081526020016000815260200160006001600160801b0316815260200160006001600160801b031681525090565b600060208284031215612da957600080fd5b81356001600160e01b0319811681146106e957600080fd5b6001600160a01b038116811461113757600080fd5b8035612de181612dc1565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612e2457612e24612de6565b604052919050565b60006001600160401b03831115612e4557612e45612de6565b612e58601f8401601f1916602001612dfc565b9050828152838383011115612e6c57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612e9457600080fd5b6106e983833560208501612e2c565b60008060008060808587031215612eb957600080fd5b8435612ec481612dc1565b93506020850135612ed481612dc1565b92506040850135915060608501356001600160401b03811115612ef657600080fd5b612f0287828801612e83565b91505092959194509250565b60008060408385031215612f2157600080fd5b8235915060208301356001600160401b03811115612f3e57600080fd5b612f4a85828601612e83565b9150509250929050565b60006101208284031215612f6757600080fd5b50919050565b600080600060608486031215612f8257600080fd5b83356001600160401b03811115612f9857600080fd5b612fa486828701612f54565b9660208601359650604090950135949350505050565b600060208284031215612fcc57600080fd5b81356106e981612dc1565b600060208284031215612fe957600080fd5b5035919050565b60008083601f84011261300257600080fd5b5081356001600160401b0381111561301957600080fd5b6020830191508360208260051b850101111561278f57600080fd5b6000806000806000806060878903121561304d57600080fd5b86356001600160401b038082111561306457600080fd5b6130708a838b01612ff0565b9098509650602089013591508082111561308957600080fd5b6130958a838b01612ff0565b909650945060408901359150808211156130ae57600080fd5b506130bb89828a01612ff0565b979a9699509497509295939492505050565b600080604083850312156130e057600080fd5b82356130eb81612dc1565b946020939093013593505050565b60008083601f84011261310b57600080fd5b5081356001600160401b0381111561312257600080fd5b60208301915083602082850101111561278f57600080fd5b60008060006040848603121561314f57600080fd5b83356001600160401b038082111561316657600080fd5b61317287838801612f54565b9450602086013591508082111561318857600080fd5b50613195868287016130f9565b9497909650939450505050565b6001600160801b03169052565b80516001600160a01b03908116835260208083015160a082860181905281519086018190526000939183019290849060c08801905b80831015613206578551851682529483019460019290920191908301906131e4565b50604087015160408901526060870151945061322560608901866131a2565b6080870151945061323960808901866131a2565b979650505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561329b57603f198886030184526132898583516131af565b9450928501929085019060010161326d565b5092979650505050505050565b6000602082840312156132ba57600080fd5b81356001600160401b038111156132d057600080fd5b8201601f810184136132e157600080fd5b6105a384823560208401612e2c565b6000806020838503121561330357600080fd5b82356001600160401b0381111561331957600080fd5b61332585828601612ff0565b90969095509350505050565b60005b8381101561334c578181015183820152602001613334565b50506000910152565b6000815180845261336d816020860160208601613331565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561329b57603f198886030184526133c6858351613355565b945092850192908501906001016133aa565b6001600160a01b0391909116815260200190565b6000806000806060858703121561340257600080fd5b843561340d81612dc1565b93506020850135925060408501356001600160401b0381111561342f57600080fd5b61343b878288016130f9565b95989497509550505050565b60006001600160401b0382111561346057613460612de6565b5060051b60200190565b600082601f83011261347b57600080fd5b8135602061349061348b83613447565b612dfc565b8083825260208201915060208460051b8701019350868411156134b257600080fd5b602086015b848110156134ce57803583529183019183016134b7565b509695505050505050565b600080600080600060a086880312156134f157600080fd5b85356134fc81612dc1565b9450602086013561350c81612dc1565b935060408601356001600160401b038082111561352857600080fd5b61353489838a0161346a565b9450606088013591508082111561354a57600080fd5b61355689838a0161346a565b9350608088013591508082111561356c57600080fd5b5061357988828901612e83565b9150509295509295909350565b6000806040838503121561359957600080fd5b82356135a481612dc1565b915060208301356001600160401b038111156135bf57600080fd5b612f4a85828601612f54565b6000806000604084860312156135e057600080fd5b83356135eb81612dc1565b925060208401356001600160401b0381111561360657600080fd5b613195868287016130f9565b6020815260006106e96020830184613355565b6020808252825182820181905260009190848201906040850190845b818110156136665783516001600160a01b031683529284019291840191600101613641565b50909695505050505050565b6020815260006106e960208301846131af565b600080600080600060a0868803121561369d57600080fd5b85356136a881612dc1565b945060208601356136b881612dc1565b9350604086013592506060860135915060808601356001600160401b038111156136e157600080fd5b61357988828901612e83565b60208082526021908201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746040820152601760f91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261375b57600080fd5b8301803591506001600160401b0382111561377557600080fd5b60200191503681900382131561278f57600080fd5b6001600160a01b03929092168252602082015260400190565b80356001600160801b0381168114612de157600080fd5b6000602082840312156137cc57600080fd5b6106e9826137a3565b803560ff81168114612de157600080fd5b6000602082840312156137f857600080fd5b6106e9826137d5565b634e487b7160e01b600052601160045260246000fd5b8082018082111561059457610594613801565b6000808335601e1984360301811261384157600080fd5b8301803591506001600160401b0382111561385b57600080fd5b6020019150600581901b360382131561278f57600080fd5b6000808335601e1984360301811261388a57600080fd5b83016020810192503590506001600160401b038111156138a957600080fd5b8060051b360382131561278f57600080fd5b8183526000602080850194508260005b858110156138f95781356138de81612dc1565b6001600160a01b0316875295820195908201906001016138cb565b509495945050505050565b602081526139256020820161391884612dd6565b6001600160a01b03169052565b6000613933602084016137d5565b60ff811660408401525061394a6040840184613873565b610120806060860152613962610140860183856138bb565b92506060860135608086015261397a608087016137a3565b915061398960a08601836131a2565b61399560a087016137a3565b91506139a460c08601836131a2565b6139b060c087016137a3565b91506139bf60e08601836131a2565b6139cb60e087016137a3565b91506101006139dc818701846131a2565b9590950135939094019290925250919050565b600060018201613a0157613a01613801565b5060010190565b8284823760609190911b6001600160601b0319169101908152601401919050565b600060208284031215613a3b57600080fd5b5051919050565b600181811c90821680613a5657607f821691505b602082108103612f6757634e487b7160e01b600052602260045260246000fd5b600060208284031215613a8857600080fd5b815180151581146106e957600080fd5b60008251613aaa818460208701613331565b9190910192915050565b601f821115613afc576000816000526020600020601f850160051c81016020861015613add5750805b601f850160051c820191505b81811015610a2457828155600101613ae9565b505050565b81516001600160401b03811115613b1a57613b1a612de6565b613b2e81613b288454613a42565b84613ab4565b602080601f831160018114613b635760008415613b4b5750858301515b600019600386901b1c1916600185901b178555610a24565b600085815260208120601f198616915b82811015613b9257888601518255948401946001909101908401613b73565b5085821015613bb05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000613bd36040830185613355565b8281036020840152613be58185613355565b95945050505050565b60008184825b85811015613c25578135613c0781612dc1565b6001600160a01b031683526020928301929190910190600101613bf4565b509095945050505050565b602080825260059082015264214461746160d81b604082015260600190565b60008085851115613c5f57600080fd5b83861115613c6c57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015613ca15780818660040360031b1b83161692505b505092915050565b600082601f830112613cba57600080fd5b81356020613cca61348b83613447565b82815260059290921b84018101918181019086841115613ce957600080fd5b8286015b848110156134ce5780356001600160401b03811115613d0c5760008081fd5b613d1a8986838b0101612e83565b845250918301918301613ced565b600080600060608486031215613d3d57600080fd5b83356001600160401b0380821115613d5457600080fd5b818601915086601f830112613d6857600080fd5b81356020613d7861348b83613447565b82815260059290921b8401810191818101908a841115613d9757600080fd5b948201945b83861015613dbe578535613daf81612dc1565b82529482019490820190613d9c565b97505087013592505080821115613dd457600080fd5b613de08783880161346a565b93506040860135915080821115613df657600080fd5b50613e0386828701613ca9565b9150509250925092565b6001600160a01b03831681526040602082018190526000906105a390830184613355565b634e487b7160e01b600052602160045260246000fd5b8181038181111561059457610594613801565b634e487b7160e01b600052603160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a125ec2a60560fa97889477fea25d056bfc58bd1223d7da519d3cad061329fa564736f6c63430008170033000000000000000000000000dd99b75f095d0c4d5112ace938e4e6ed962fb0240000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" -export const NEXUS_K1_VALIDATOR_FACTORY_ADDRESS = +export const NEXUS_K1_VALIDATOR_FACTORY_CREATECALL = "0xcdcb760a0e2910abafc1453b453f7d2b3996b7ea691a9cb214e87bb4a66cd7c2a4dbac7700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f796101003461018b57601f610ed938819003918201601f19168301916001600160401b0383118484101761018f5780849260a09460405283398101031261018b57610048816101a3565b90610055602082016101a3565b91610062604083016101a3565b6060830151929091906001600160a01b0384169081850361018b5760800151946001600160a01b038616860361018b5760018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d8198190556001600160a01b03831615918215610179575b8215610170575b508115610167575b506101585760805260a05260c05260e052604051610d2190816101b882396080518181816104eb015281816105710152610662015260a0518181816101b00152610720015260c05181818161031a0152610827015260e0518181816107c40152610aa50152f35b6342bcdf7f60e11b5f5260045ffd5b9050155f6100f1565b1591505f6100e9565b6001600160a01b0385161592506100e2565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361018b5756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816306433b1b14610a88575080630d51f0b7146105e05780632569296214610595578063290ab98414610551578063322cc8ca1461045957806345171159146103e65780634a1ce5991461038457806354d1f13d1461033e57806367d2d1c9146102fa578063715018a6146102af5780638da5cb5b14610284578063b36f9705146101d4578063d0733b3b14610190578063f04e283e14610142578063f2fde38b146101035763fee81cf4146100ce575f80fd5b34610100576020366003190112610100576100e7610ac9565b9063389a75e1600c5252602080600c2054604051908152f35b80fd5b50602036600319011261010057610118610ac9565b610120610c91565b8060601b156101355761013290610cad565b80f35b637448fbae82526004601cfd5b50602036600319011261010057610157610ac9565b61015f610c91565b63389a75e1600c528082526020600c20805442116101835790826101329255610cad565b636f5e881883526004601cfd5b503461010057806003193601126101005760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610100576040366003190112610100576101ee610ac9565b90602435916001600160a01b038316809303610280576001600160a01b0390610215610c91565b168015610271578192813b1561026d57829160248392604051948593849263611d2e7560e11b845260048401525af18015610262576102515750f35b8161025b91610bf5565b6101005780f35b6040513d84823e3d90fd5b5050fd5b6391fdf19160e01b8252600482fd5b5080fd5b50346101005780600319360112610100576020638b78c6d819546001600160a01b0360405191168152f35b5080600319360112610100576102c3610c91565b80638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380638b78c6d8195580f35b503461010057806003193601126101005760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50806003193601126101005763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b5034610100576020366003190112610100576001600160a01b036103a6610ac9565b6103ae610c91565b168015610271578082913b156103e35781809160046040518094819363bb9fe6bf60e01b83525af18015610262576102515750f35b50fd5b506040366003190112610100576103fb610ac9565b906024359163ffffffff8316809303610280576001600160a01b039061041f610c91565b168015610271578192813b1561026d578290602460405180948193621cb65b60e51b8352600483015234905af18015610262576102515750f35b50346101005760209061049661048861047136610af3565b906040969496959295519586948a86019889610b6d565b03601f198101835282610bf5565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600984527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040528260605260ff83536035523060601b60015260155260558120906035526001600160a01b0360405191168152f35b503461010057806003193601126101005760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50806003193601126101005763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b506105ea36610af3565b93909491604051602081019061060881610488898b878b8a89610b6d565b519020905f95604051977fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358a01523060581b895260ff89538360158a01526055892097341594893b15610a5f575050600193610a55575f388180348c5af115610a48575f610756995b80604052816060526bffffffffffffffffffffffff198760601b16602082015260148152610705603482610bf5565b604051809b8192638491599f60e01b83526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004840152604060248401526044830190610c6d565b0381736c77ddf87a1717465d29f8f16f44711eb0c839c05af4988915610913575f99610990575b50916020989192896107c26040519b8c956341bdc49760e11b8752608060048801526001600160a01b0381511660848801520151604060a487015260c4860190610c6d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660248601528481036003190160448601528281520191905f5b81811061096257505050819060ff5f9416606483015203816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa958615610913575f96610922575b5015610872575b6020846001600160a01b0360405191168152f35b6001600160a01b03841690813b1561091e575f6108ab9660405180988192634b6a141960e01b8352602060048401526024830190610c6d565b038183865af1958615610913576020966108f7575b506001600160a01b037f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff91169280a45f808061085e565b6109049193505f90610bf5565b5f916001600160a01b036108c0565b6040513d5f823e3d90fd5b5f80fd5b9095503d805f833e6109348183610bf5565b810160208282031261091e57815167ffffffffffffffff811161091e5761095b9201610c17565b945f610857565b91949350916020806001926001600160a01b0361097e89610adf565b1681520195019101918a939492610805565b98503d805f8b3e6109a1818b610bf5565b8901986020818b031261091e5780519067ffffffffffffffff821161091e57016040818b031261091e576040519960408b018b811067ffffffffffffffff821117610a345760405281516001600160a01b038116810361091e578b52602082015167ffffffffffffffff811161091e5760049b610a276107c29360209593869401610c17565b828201529b50505061077d565b634e487b7160e01b5f52604160045260245ffd5b63b12d13eb5f526004601cfd5b5f610756996106d6565b9198509350605f602134f5968715610a7b575f610756996106d6565b63301164255f526004601cfd5b3461091e575f36600319011261091e576020906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600435906001600160a01b038216820361091e57565b35906001600160a01b038216820361091e57565b90608060031983011261091e576004356001600160a01b038116810361091e57916024359160443567ffffffffffffffff811161091e578260238201121561091e5780600401359267ffffffffffffffff841161091e5760248460051b8301011161091e57602401919060643560ff8116810361091e5790565b909160349296959394966bffffffffffffffffffffffff199060601b168252601482015201915f945b808610610bcd57505060f81b7fff000000000000000000000000000000000000000000000000000000000000001681526001019150565b90926020806001926001600160a01b03610be688610adf565b16815201940195019490610b96565b90601f8019910116810190811067ffffffffffffffff821117610a3457604052565b81601f8201121561091e5780519067ffffffffffffffff8211610a345760405192610c4c601f8401601f191660200185610bf5565b8284526020838301011161091e57815f9260208093018386015e8301015290565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b638b78c6d819543303610ca057565b6382b429005f526004601cfd5b6001600160a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d8195556fea264697066735822122034eaa7eb2e9cd30500f4938f2e22beffa7450c938912732a9d96e86f8531e15a64736f6c634300081b0033000000000000000000000000000000039dfcad030719b07296710f045f0558f70000000000000000000000002cf491602ad22944d9047282abc00d3e52f56b3700000000000000000000000000000004171351c442b202678c48d8ab5b321e8f00000000000000000000000000000008c901d8871b6f6942de0b5d9ccf3873d3000000000000000000000000000000000000000000000000000000000000000000000000000000" -export const NEXUS_K1_VALIDATOR_ADDRESS = +export const NEXUS_K1_VALIDATOR_CREATECALL = "0xcdcb760aa93b92149506086de6627da9fa918c527c6b26ad418488ef374870dffc3d712f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000013d7608080604052346015576113bd908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146100f45780632e5b63a6146100ef57806354fd4d50146100ea5780635c81ca68146100e55780636d61fe70146100e05780638a91b0e3146100db578063940d3840146100d657806397003203146100d1578063d60b347f146100cc578063d620c85a146100c7578063e824b568146100c2578063ecd05961146100bd578063f2fde38b146100b85763f551e2ee146100b3575f80fd5b6106d4565b610657565b610637565b610608565b6105e6565b610598565b6104d2565b61043a565b6103b7565b6102bc565b61022e565b6101d7565b610193565b610123565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461017e575f36600319011261017e5761017a604051610144604082610a11565b600b81527f4b3156616c696461746f720000000000000000000000000000000000000000006020820152604051918291826100f9565b0390f35b5f80fd5b6001600160a01b0381160361017e57565b3461017e57602036600319011261017e576001600160a01b036004356101b881610182565b165f525f60205260206001600160a01b0360405f205416604051908152f35b3461017e575f36600319011261017e5761017a6040516101f8604082610a11565b600581527f312e302e300000000000000000000000000000000000000000000000000000006020820152604051918291826100f9565b3461017e57602036600319011261017e5761025d6001600160a01b0360043561025681610182565b1633610c33565b005b9181601f8401121561017e5782359167ffffffffffffffff831161017e576020838186019501011161017e57565b602060031982011261017e576004359067ffffffffffffffff821161017e576102b89160040161025f565b9091565b3461017e576102ca3661028d565b9081156103a8576102f7336001600160a01b03165f525f6020526001600160a01b0360405f205416151590565b610399578160141161017e5761037b61031a610314601484610a71565b60601c90565b61032e6001600160a01b0382161515610ab1565b610339813b15610ac7565b610353336001600160a01b03165f525f60205260405f2090565b906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b6014821161038557005b8161025d9261039392610a54565b90610b09565b637396742f60e11b5f5260045ffd5b6307ca8e0760e21b5f5260045ffd5b3461017e576103c53661028d565b5050335f525f60205260405f2073ffffffffffffffffffffffffffffffffffffffff198154169055335f52600160205260405f205460015b8181111561040757005b8082038281116104355761041e61042491336112d2565b33610d50565b505f198114610435576001016103fd565b610af5565b3461017e57606036600319011261017e5760043560243567ffffffffffffffff811161017e5761046e90369060040161025f565b60443567ffffffffffffffff811161017e5761048e90369060040161025f565b601481949294036104c35760141161017e5761017a936104b1933560601c610b77565b60405190151581529081906020820190565b630dfe930960e41b5f5260045ffd5b3461017e57604036600319011261017e5760043567ffffffffffffffff811161017e5780360361012060031982011261017e57602435906001600160a01b03836004013561051f81610182565b165f525f6020526001600160a01b0360405f20541692610104810135916022190182121561017e57019060048201359167ffffffffffffffff831161017e5760240190823603821361017e5761057493610b77565b1561058e5761017a5f5b6040519081529081906020820190565b61017a600161057e565b3461017e57602036600319011261017e5760206105dc6004356105ba81610182565b6001600160a01b03165f525f6020526001600160a01b0360405f205416151590565b6040519015158152f35b3461017e575f36600319011261017e57604051636b10642d60e11b8152602090f35b3461017e57602036600319011261017e5761025d6001600160a01b0360043561063081610182565b1633610d50565b3461017e57602036600319011261017e5760206040516001600435148152f35b3461017e57602036600319011261017e5760043561067481610182565b6001600160a01b038116156106c5578061069261025d923b15610ac7565b335f525f60205260405f20906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b6342bcdf7f60e11b5f5260045ffd5b3461017e57606036600319011261017e576004356106f181610182565b6024359060443567ffffffffffffffff811161017e5761071590369060040161025f565b90808261ffff60605119046164920290601f199083010135146109e8575b506001600160a01b035f93166dd9ecebf3c23529de49815dac1c4c81149081156109de575b81156109cd575b506109ba575b82156107b4575b61017a9383156107a2575b505050604051918291155f03631626ba7e1760e01b82919091602081019263ffffffff60e01b169052565b6107ac9350610e16565b5f8080610777565b915082816107c13361113c565b93604051600119838301013560f01c968760420196881597600e8401600e8b860101988b8103948588019b6041198d01946119015f52604086602037831017816042601e2018176109715750507f5479706564446174615369676e2800000000000000000000000000000000000085526001199099019990989760286f07fffffe0000000000000100000000008a848e8237515f1a1c91525b88515f1a6028811461087b5790651201000000016001921c1798019761085a565b5090848161095a989a6040899b9d61017a9f95607f969b9a9b7f20636f6e74656e74732c627974657331206669656c64732c737472696e67206e85527f616d652c737472696e672076657273696f6e2c75696e7432353620636861696e60208601527f49642c6164647265737320766572696679696e67436f6e74726163742c627974848601527f657333322073616c742c75696e743235365b5d20657874656e73696f6e7329006060860152878501378737010301852082526101208220604052600116604201601e209160411901935b6040521561096257610fa6565b92935061076c565b61096c903361120f565b610fa6565b935095979950505061017a985061095a949650859291505f907f983e65e5148e570cd828ead231ee759a8d7958721a768f93bc4483ba005c32de5f5260205260405f209161094d565b91506109c7818385610fa6565b91610765565b6109d8915033610eb6565b5f61075f565b3381149150610758565b6040810135018035925060200190505f610733565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117610a3357604052565b6109fd565b67ffffffffffffffff8111610a3357601f01601f191660200190565b909291928360141161017e57831161017e57601401916013190190565b356bffffffffffffffffffffffff19811692919060148210610a91575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b15610ab857565b630640d5fb60e51b5f5260045ffd5b15610ace57565b6383e6a1cb60e01b5f5260045ffd5b6001600160a01b03610af29216906001610cba565b90565b634e487b7160e01b5f52601160045260245ffd5b905f5b601482048110610b1b57505050565b806014029060148204810361043557600181019182821161043557826014029260148404036104355782811161017e5783831161017e57610b6a61031460019483610b70948901910390610a71565b33610add565b5001610b0c565b929190917f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0602083013511610c2b576001600160a01b039384610bc4610bbe368587610d1a565b86610f08565b911694168414610c2257610c0d610c13926001600160a01b03946020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c600420923691610d1a565b90610f08565b1614610c1d575f90565b600190565b50505050600190565b505050505f90565b815f5260018001602052610c5b8160405f20906001600160a01b03165f5260205260405f2090565b54610cb45780610cae915f52600160205260405f20600181540190848260051b82015555805f52600160205260405f2054925f52600260205260405f20906001600160a01b03165f5260205260405f2090565b55600190565b50505f90565b90610cc6838284610ee1565b610d13575f81815260208390526040902080546001908101600581901b830186905591829055610cae939091945f520160205260405f20906001600160a01b03165f5260205260405f2090565b5050505f90565b929192610d2682610a38565b91610d346040519384610a11565b82948184528183011161017e578281602093845f960137010152565b90805f526002602052610d778260405f20906001600160a01b03165f5260205260405f2090565b54918215610d13575f19830191838311610435575f828152600160205260409020545f19810191908211610435575f94848484610dd695610cae9803610dec575b509050610dc79150600161133f565b6002905f5260205260405f2090565b906001600160a01b03165f5260205260405f2090565b610e0c92610dc7610e02610dd693856001611302565b8092856001611321565b555f808481610db8565b9092915f933a15610e2657505050565b90919293503a3a5260203a3a386d378edcd5b5b0a24f5342d8c1048561fffffa503a5115610e58575b610af292610fa6565b60405192631626ba7e3a526d378edcd5b5b0a24f5342d8c1048560205260408052454561ffff011793845a106d378edcd5b5b0a24f5342d8c10485831417610eb457610af2943a906064601c3a923090fa506040529250610e4f565bfe5b610edb915f52600260205260405f20906001600160a01b03165f5260205260405f2090565b54151590565b600190610edb935f520160205260405f20906001600160a01b03165f5260205260405f2090565b9190600190604051935f5260208101516040526040815114610f67576041815114610f4a5750506020604060805f805b5afa505f6060523d6060185191604052565b60805f602093604084606082960151841a87520151606052610f38565b60805f6020937f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604080950151601b8160ff1c01875216606052610f38565b90610af29291335f525f6020526001600160a01b0360405f205416610b77565b81601f8201121561017e57805190610fdd82610a38565b92610feb6040519485610a11565b8284526020838301011161017e57815f9260208093018386015e8301015290565b519061101782610182565b565b9080601f8301121561017e5781519167ffffffffffffffff8311610a33578260051b906040519361104d6020840186610a11565b845260208085019282010192831161017e57602001905b8282106110715750505090565b8151815260209182019101611064565b9060e08282031261017e5781517fff000000000000000000000000000000000000000000000000000000000000008116810361017e5792602083015167ffffffffffffffff811161017e57826110d8918501610fc6565b92604081015167ffffffffffffffff811161017e57836110f9918301610fc6565b9260608201519261110c6080840161100c565b9260a08101519260c082015167ffffffffffffffff811161017e57610af29201611019565b6040513d5f823e3d90fd5b905f6001600160a01b03926004604051809581936342580cb760e11b8352165afa801561120a575f925f5f5f905f925f945f966111d1575b50906001600160a01b03939291604051986101208a016040525f1a60f81b60408a015260208151910120606089015260208151910120608088015260a08701521660c085015260e08401526020815160051b910120610100830152565b9450505050506001600160a01b0393506111fd91503d805f833e6111f58183610a11565b810190611081565b9597909491939190611174565b611131565b5f6001600160a01b03916004604051809481936342580cb760e11b8352165afa90811561120a5760a0915f915f5f915f936112ad575b50604051937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f855260208151910120602085015260208151910120604084015260608301526080820152206719010000000000005f52601a52603a526042601820905f603a52565b925050506112c591503d805f833e6111f58183610a11565b509394509250905f611245565b5f52600160205260405f209081548110156112f25760010160051b015490565b638277484f5f526020526024601cfd5b905f5260205260405f209081548110156112f25760010160051b015490565b905f5260205260405f209081548110156112f25760010160051b0155565b905f5260205260405f208054908115611383575f19820191808311610435578154831015611372575f9060051b82015555565b82638277484f5f526020526024601cfd5b505056fea26469706673582212200186e2a8904b59caafc2e7a2b8ff26ffee1b8617dc62b97c781ac357fdd82b4964736f6c634300081b0033000000000000000000" + +export const NEXUS_ACCOUNT_IMPLEMENTATION_CREATECALL = + "0xcdcb760a95664735e93ed3f4b18939442a5b8e49eb0f754c249c808e97a311b1bbd805df00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000004a936101606040523461029b57614a736020813803918261001d8161029f565b93849283398101031261029b57516001600160a01b03811680820361029b57306080524660a05260a0610050604061029f565b600581526020810190644e6578757360d81b825261006e604061029f565b91600583526020830191640312e302e360dc1b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005230610140521561028c576101205260015f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f016020525f516020614a535f395f51905f52546001600160a01b031661027d5760015f8190525f516020614a535f395f51905f5280546001600160a01b03191690911790555f516020614a135f395f51905f526020525f516020614a335f395f51905f52546001600160a01b031661027d5760015f8190525f516020614a135f395f51905f526020525f516020614a335f395f51905f5280546001600160a01b031916909117905560405161473a90816102d982396080518181816105cd0152612d36015260a0518181816105aa0152612d13015260c05181818161062f0152612da8015260e0518181816106550152612dce0152610100518181816105880152612cf10152610120518181816103be015281816107450152818161081f01528181610d8701528181610e580152818161105e015281816111b0015281816111f9015281816112400152818161175b015281816117d40152818161216f01526128690152610140518181816109e501526121410152f35b6329e42f3360e11b5f5260045ffd5b6307e355bf60e31b5f5260045ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176102c457604052565b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610027575b36156100255761001d3661297d565b602081519101f35b005b5f3560e01c80630a664dba14610216578063112d3a7d146102115780631626ba7e1461020c57806319822f7c146102075780633644e51514610202578063481ddd23146101fd5780634a58db19146101f85780634b6a1419146101f35780634d44560d146101ee5780634f1ef286146101e957806352d1902d146101e45780635faac46b146101df5780636575f6aa146101da5780637b103999146101d557806384b0196e146101d05780638dd7712f146101cb5780639517e29f146101c65780639cfd7cff146101c1578063a71763a8146101bc578063aaf10f42146101b7578063b0d691fe146101b2578063c399ec88146101ad578063cd64f80a146101a8578063d03c7914146101a3578063d620c85a1461019e578063d691c96414610199578063d86f2b3c14610194578063e9ae5c531461018f578063ea5f61d01461018a578063eab77e17146101855763f2dc691d0361000e57611a03565b61198f565b611893565b6117bd565b6116fc565b6115cd565b611524565b611477565b61122a565b6111d4565b611191565b611133565b61104a565b610feb565b610e42565b610d4e565b610cb0565b610c67565b610c41565b610a97565b6109d2565b6108d8565b610804565b61076d565b610733565b6106a2565b610576565b610378565b610316565b6102f0565b610229565b5f91031261022557565b5f80fd5b34610225575f3660031901126102255760206001600160a01b035f5160206146c55f395f51905f5254166001600160a01b0360405191168152f35b6001600160a01b0381160361022557565b359061028082610264565b565b9181601f840112156102255782359167ffffffffffffffff8311610225576020838186019501011161022557565b606060031982011261022557600435916024356102cc81610264565b916044359067ffffffffffffffff8211610225576102ec91600401610282565b9091565b3461022557602061030c610303366102b0565b92919091612a99565b6040519015158152f35b346102255760403660031901126102255760043560243567ffffffffffffffff811161022557602091610350610356923690600401610282565b91611bcf565b6040516001600160e01b03199091168152f35b90816101209103126102255790565b346102255760603660031901126102255760043567ffffffffffffffff8111610225576103a9903690600401610369565b60243590604435906103e56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611c7d565b60208101359061040c604083901c6001600160a01b03169260031a60f81b600160f81b1490565b156104fd57926020916104839461044661043f61043861042c3685611e3f565b93610100810190611f1f565b9086612b24565b3691611dee565b61010082015261045e82610459816132df565b611aec565b5f6001600160a01b03604051809881968295639700320360e01b845260048401611f52565b0393165af19182156104f8576104b59282915f916104c9575b50915b6104b9575b506040519081529081906020820190565b0390f35b5f9081803892335af1505f6104a4565b6104eb915060203d6020116104f1575b6104e38183611b45565b810190611c93565b5f61049c565b503d6104d9565b611bc4565b928161053794610512826104596020966132df565b5f6001600160a01b03604051809881968295639700320360e01b845260048401611d97565b0393165af19182156104f8576104b59282915f91610557575b509161049f565b610570915060203d6020116104f1576104e38183611b45565b5f610550565b34610225575f366003190112610225577f0000000000000000000000000000000000000000000000000000000000000000467f000000000000000000000000000000000000000000000000000000000000000014307f00000000000000000000000000000000000000000000000000000000000000001416156105ff575b602090604051908152f35b50602061068960a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f000000000000000000000000000000000000000000000000000000000000000060408201524660608201523060808201522090565b90506105f4565b6001600160e01b031981160361022557565b3461022557602036600319011261022557604060206106fc6004356106c681610690565b63ffffffff60e01b165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260405f2090565b82519061070882611b24565b54906001600160a01b0382169182825260ff60f81b9060581b16928391015282519182526020820152f35b5f366003190112610225575f388180347f00000000000000000000000000000000000000000000000000000000000000005af11561022557005b60203660031901126102255760043567ffffffffffffffff8111610225575f6107b661079e82933690600401610282565b6107a6613b3e565b6107ae613bc0565b810190612001565b906001600160a01b0360208351930191165af46107d1612038565b50156107f5576107df612c5d565b156107e657005b63c4d0a0b160e01b5f5260045ffd5b63315927c560e01b5f5260045ffd5b60403660031901126102255760043561081c81610264565b5f7f0000000000000000000000000000000000000000000000000000000000000000602435336001600160a01b038316148015610896575b61085d90611c7d565b604051936014526034526f205c28780000000000000000000000008252604460108338935af11561088e575f603452005b3d5f823e3d90fd5b50333014610854565b906040600319830112610225576004356108b881610264565b916024359067ffffffffffffffff8211610225576102ec91600401610282565b6108e13661089f565b906001600160a01b036109086001600160a01b035f5160206146c55f395f51905f52541690565b1680610918575061002592612117565b60405163d68f602560e01b81529290915f848061093a363433600485016120ca565b038183875af19384156104f8575f946109aa575b5061095a929394612117565b803b1561022557604051630b9dfbed60e11b8152915f91839182908490829061098690600483016120f0565b03925af180156104f85761099657005b806109a45f61002593611b45565b8061021b565b61095a9394506109cb903d805f833e6109c38183611b45565b810190612067565b939261094e565b34610225575f36600319011261022557307f000000000000000000000000000000000000000000000000000000000000000003610a335760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b639f03a0265f526004601cfd5b90929192604082016040835281518091526020606084019201905f5b818110610a78575050506001600160a01b036020919416910152565b82516001600160a01b0316845260209384019390920191600101610a5c565b3461022557604036600319011261022557600435610ab481610264565b6024359060016001600160a01b038216141580610c2b575b610c10578115610c015790610ae081613c33565b610b18610b0b5f946001600160a01b03165f525f5160206146a55f395f51905f5260205260405f2090565b546001600160a01b031690565b6001600160a01b0381168015159081610bf5575b5080610bec575b15610b8d57610b81610b0b82610b5e610b8794610b508988613582565b906001600160a01b03169052565b6001600160a01b03165f525f5160206146a55f395f51905f5260205260405f2090565b93613c65565b92610b18565b908360016001600160a01b038416141580610be3575b610bb9575b81526104b560405192839283610a40565b9150610bdd610bd0610bca84613c73565b83613582565b516001600160a01b031690565b91610ba8565b50801515610ba3565b50828410610b33565b6001915014155f610b2c565b63f725081760e01b5f5260045ffd5b637c84ecfb60e01b5f526001600160a01b031660045260245ffd5b50610c3c610c38826132df565b1590565b610acc565b34610225576020366003190112610225576020610c5f600435612cef565b604051908152f35b34610225575f3660031901126102255760206001600160a01b035f5416604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610225575f36600319011261022557610cef610cfd610cce612e07565b604092919251938493600f60f81b855260e0602086015260e0850190610c8c565b908382036040850152610c8c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610d35575050500390f35b8251845285945060209384019390920191600101610d27565b60403660031901126102255760043567ffffffffffffffff811161022557610d7a903690600401610369565b610dae6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611c7d565b6001600160a01b03610dd46001600160a01b035f5160206146c55f395f51905f52541690565b1680610de457506100259061225a565b60405163d68f602560e01b8152915f8380610e04363433600485016120ca565b038183865af19283156104f8575f93610e22575b5061095a9061225a565b61095a919350610e3b903d805f833e6109c38183611b45565b9290610e18565b610e4b366102b0565b6001600160a01b039391937f00000000000000000000000000000000000000000000000000000000000000001633148015610fe2575b610e8a90611c7d565b6001600160a01b03610eb06001600160a01b035f5160206146c55f395f51905f52541690565b1680610f065750610ee4907fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123948484612f44565b604080519182526001600160a01b03909216602082015290819081015b0390a1005b906040519463d68f602560e01b86525f8680610f27363433600485016120ca565b038183875af19586156104f8575f96610fc0575b5090610f48918585612f44565b803b1561022557604051630b9dfbed60e11b8152935f918591829084908290610f7490600483016120f0565b03925af19283156104f8577fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12393610fac575b50610ee4565b806109a45f610fba93611b45565b5f610fa6565b610f4892919650610fda903d805f833e6109c38183611b45565b959091610f3b565b50333014610e81565b34610225575f366003190112610225576104b560405161100c604082611b45565b601481527f6269636f6e6f6d792e6e657875732e312e302e300000000000000000000000006020820152604051918291602083526020830190610c8c565b611053366102b0565b916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314801561112a575b61109090611c7d565b6001600160a01b036110b66001600160a01b035f5160206146c55f395f51905f52541690565b16806110c6575061002593612354565b60405163d68f602560e01b815293909290915f85806110ea363433600485016120ca565b038183885af19485156104f8575f9561110a575b5061095a939495612354565b61095a949550611123903d805f833e6109c38183611b45565b94936110fe565b50333014611087565b34610225575f366003190112610225577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b03811615611189575b6020906001600160a01b0360405191168152f35b503054611175565b34610225575f3660031901126102255760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610225575f36600319011261022557306020526370a082315f52602080806024601c7f00000000000000000000000000000000000000000000000000000000000000005afa601f3d1116815102604051908152f35b6112333661089f565b6112676001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611c7d565b5f5160206146c55f395f51905f525461128f9084906001600160a01b03808316911614612303565b6112c9836001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0460205260405f2090565b548061135357505050610f017f2841d18703faaff388732165e48fe431468531b1b1e626b1b7cbcbfc0d79c7409142611332826001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0460205260405f2090565b55604080516001600160a01b03909216825242602083015290918291820190565b6113606203f480826124f2565b42106113c957505050610f017fcbd44a75f6935b5837022648b6c8487db984701200c5381c7c0f8c2b1d69b9da9142611332826001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0460205260405f2090565b6113d690939192936124dd565b421061146857611447610f01927f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e945f611440856001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0460205260405f2090565b5583612fe7565b60408051600481526001600160a01b03909216602083015290918291820190565b6303f9796960e11b5f5260045ffd5b34610225576020366003190112610225576104b56004358060081b60ff60f81b82161591821561150c575b82156114f7575b50816114c3575b5060405190151581529081906020820190565b6001600160f81b0319811615915081156114df575b505f6114b0565b6001600160f81b031916600160f81b1490505f6114d8565b6001600160f81b03199081161491505f6114a9565b6001600160f81b03198116600160f81b1492506114a2565b34610225575f366003190112610225576020610c5f6124ff565b90604060031983011261022557600435916024359067ffffffffffffffff8211610225576102ec91600401610282565b602081016020825282518091526040820191602060408360051b8301019401925f915b8383106115a057505050505090565b90919293946020806115be600193603f198682030187528951610c8c565b97019301930191939290611591565b6115d63661153e565b916115e03361331f565b156116e9576001600160a01b0361160b6001600160a01b035f5160206146c55f395f51905f52541690565b168061162c575091611620916104b593612604565b6040519182918261156e565b90926040519263d68f602560e01b84525f848061164e363433600485016120ca565b038183875af19384156104f8575f946116c9575b5061166e929394612604565b90803b1561022557604051630b9dfbed60e11b8152925f91849182908490829061169b90600483016120f0565b03925af19182156104f8576104b5926116b5575b50611620565b806109a45f6116c393611b45565b5f6116af565b61166e9394506116e2903d805f833e6109c38183611b45565b9392611662565b635c93ff2f60e11b5f523360045260245ffd5b346102255760203660031901126102255760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168091036102255760405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156104f8576104b5915f9161179e57506040519081529081906020820190565b6117b7915060203d6020116104f1576104e38183611b45565b5f6104a4565b6117c63661153e565b906117fb6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611c7d565b6001600160a01b036118216001600160a01b035f5160206146c55f395f51905f52541690565b1680611831575061002592612753565b60405163d68f602560e01b81529290915f8480611853363433600485016120ca565b038183875af19384156104f8575f94611873575b5061095a929394612753565b61095a93945061188c903d805f833e6109c38183611b45565b9392611867565b34610225576040366003190112610225576004356118b081610264565b6024359060016001600160a01b03821614158061197d575b610c10578115610c0157906118dc81613c33565b611907610b0b5f946001600160a01b03165f525f5160206146e55f395f51905f5260205260405f2090565b6001600160a01b0381168015159081611971575b5080611968575b15610b8d57610b81610b0b8261193f61196294610b508988613582565b6001600160a01b03165f525f5160206146e55f395f51905f5260205260405f2090565b92611907565b50828410611922565b6001915014155f61191b565b5061198a610c388261331f565b6118c8565b6060366003190112610225576004356119a781610264565b6024359067ffffffffffffffff8211610225573660238301121561022557816004013567ffffffffffffffff8111610225573660248260051b85010111610225576044359160ff8316830361022557602461002594019061285a565b3461022557602036600319011261022557602061030c600435612938565b906014116102255790601490565b909291928360141161022557831161022557601401916013190190565b906004116102255790600490565b909291928360041161022557831161022557600401916003190190565b909291928360051161022557831161022557600501916004190190565b90939293848311610225578411610225578101920390565b356bffffffffffffffffffffffff19811692919060148210611acc575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b15611af45750565b6001600160a01b039063342cf00f60e11b5f521660045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117611b4057604052565b611b10565b90601f8019910116810190811067ffffffffffffffff821117611b4057604052565b908160209103126102255751611b7c81610690565b90565b908060209392818452848401375f828201840152601f01601f1916010190565b611b7c94926001600160a01b0360609316825260208201528160408201520191611b7f565b6040513d5f823e3d90fd5b6020916001600160a01b0391611c0c611c2d9580611bf6611bf08287611a21565b90611aac565b60601c94611c0786610459816132df565b611a2f565b604051637aa8f17760e11b8152968795869490938593913360048601611b9f565b0392165afa5f9181611c4c575b50611b7c57506001600160e01b031990565b611c6f91925060203d602011611c76575b611c678183611b45565b810190611b67565b905f611c3a565b503d611c5d565b15611c8457565b635629665f60e11b5f5260045ffd5b90816020910312610225575190565b9035601e198236030181121561022557016020813591019167ffffffffffffffff821161022557813603831361022557565b611b7c91611cf281611ce584610275565b6001600160a01b03169052565b60208201356020820152611d88611d7c611d43611d28611d156040870187611ca2565b6101206040880152610120870191611b7f565b611d356060870187611ca2565b908683036060880152611b7f565b6080850135608085015260a085013560a085015260c085013560c0850152611d6e60e0860186611ca2565b9085830360e0870152611b7f565b92610100810190611ca2565b91610100818503910152611b7f565b929190611dae602091604086526040860190611cd4565b930152565b6040519061028061012083611b45565b60405190610280604083611b45565b67ffffffffffffffff8111611b4057601f01601f191660200190565b929192611dfa82611dd2565b91611e086040519384611b45565b829481845281830111610225578281602093845f960137010152565b9080601f8301121561022557816020611b7c93359101611dee565b9190916101208184031261022557611e55611db3565b92611e5f82610275565b845260208201356020850152604082013567ffffffffffffffff81116102255781611e8b918401611e24565b6040850152606082013567ffffffffffffffff81116102255781611eb0918401611e24565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e082013567ffffffffffffffff81116102255781611ef3918401611e24565b60e085015261010082013567ffffffffffffffff811161022557611f179201611e24565b610100830152565b903590601e1981360301821215610225570180359067ffffffffffffffff82116102255760200191813603831361022557565b929190611dae60209160408652611f756040870182516001600160a01b03169052565b828101516060870152610100611fec611fb8611fa2604085015161012060808c01526101608b0190610c8c565b60608501518a8203603f190160a08c0152610c8c565b608084015160c08a015260a084015160e08a015260c0840151838a015260e0840151603f198a8303016101208b0152610c8c565b910151868203603f1901610140880152610c8c565b91909160408184031261022557803561201981610264565b92602082013567ffffffffffffffff811161022557611b7c9201611e24565b3d15612062573d9061204982611dd2565b916120576040519384611b45565b82523d5f602084013e565b606090565b6020818303126102255780519067ffffffffffffffff8211610225570181601f820112156102255780519061209b82611dd2565b926120a96040519485611b45565b8284526020838301011161022557815f9260208093018386015e8301015290565b611b7c93926001600160a01b03606093168252602082015281604082015201905f611b7f565b906020611b7c928181520190610c8c565b1561210857565b63325c055b60e21b5f5260045ffd5b9190916001600160a01b03811690612130821515612101565b61213c813b1515612101565b3055307f000000000000000000000000000000000000000000000000000000000000000014610a33576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633148015612251575b6121a190611c7d565b6352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc602060016004601d855afa510361224357807fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a281817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5561222d57505050565b815f926040519485378338925af41561088e5750565b6355299b496001526004601dfd5b50333014612198565b6122676060820182611f1f565b80600411610225576040515f9283929060031982019060040183378101826003198201528160031991030190305af461229e612038565b90156122f4577fd3fddfd1276d1cc278f10907710a44474a32f917b2fcfa198f46ca7689215e2f916122ef6122e192604051938493604085526040850190611cd4565b908382036020850152610c8c565b0390a1565b632b3f6d1160e21b5f5260045ffd5b1561230b5750565b6001600160a01b0390635f300b3960e11b5f52600480521660245260445ffd5b15612334575050565b6001600160a01b039250635f300b3960e11b5f526004521660245260445ffd5b9291909261236e848261236986868484612a99565b61232b565b604080518281526001600160a01b03861660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e9190a1600181036123ba5750610280926131a8565b600281036123cc575061028092613033565b909190600381036124b15750906124ad926124796124a8936124716040516123f381611b24565b5f81525f60208201526124126106c661240c8589611a4c565b90612a63565b8151815460209093015174ff000000000000000000000000000000000000000060589190911c167fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0390911617919091179055565b805a94611a5a565b604051638a91b0e360e01b60208201529491859161249a9160248401612fd6565b03601f198101855284611b45565b614243565b5050565b9091906004146124c057505050565b61028092612fe7565b634e487b7160e01b5f52601160045260245ffd5b906201518082018092116124ed57565b6124c9565b919082018092116124ed57565b60015f525f5160206146a55f395f51905f5260205261253d7ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7610b0b565b6001600160a01b038116801515806125f9575b156125ea57602060049160405192838092636b10642d60e11b82525afa5f91816125ca575b506125ab575b50610b0b6125a6916001600160a01b03165f525f5160206146a55f395f51905f5260205260405f2090565b61253d565b636b10642d60e11b146125be575f61257b565b50636b10642d60e11b90565b6125e391925060203d81116104f1576104e38183611b45565b905f612575565b506001600160e01b0319919050565b506001811415612550565b919061260f3361335f565b600883901b926001600160f81b03198116612630575090611b7c9291613687565b6001600160f81b03198116600160f81b03612651575090611b7c92916135bc565b6001600160f81b03198082160361273b57509061266d9161428e565b90916126776134d9565b936001600160f81b031981166126a9575091612692926142cd565b61269b82613570565b526126a581613570565b5090565b6001600160f81b03198116600160f81b0361271f575081836126ca926142a8565b6126d385613570565b52156126de57505090565b7f5bd4c60b4b38b664d8fb5944eb974e3d85083d79afe5ce934ccabcc913707c109161271961270c85613570565b5160405193849384613596565b0390a190565b6308c3ee0360e11b5f526001600160f81b03191660045260245ffd5b632e5bf3f960e21b5f5260ff60f81b1660045260245ffd5b600881901b9291906001600160f81b0319811661277657509061028092916137ba565b6001600160f81b03198116600160f81b036127975750906102809291613731565b6001600160f81b03198082160361273b5750906127b39161428e565b929091906001600160f81b031981166127e157505f9083604051938437838338925af41561088e5701604052565b9192916001600160f81b03198116600160f81b0361284257508183612805926142a8565b92901561281157505050565b6122ef7f5bd4c60b4b38b664d8fb5944eb974e3d85083d79afe5ce934ccabcc913707c109360405193849384613596565b6308c3ee0360e11b5f5260ff60f81b1660045260245ffd5b6001600160a01b0390939193817f0000000000000000000000000000000000000000000000000000000000000000163314801561292f575b61289b90611c7d565b1692836001600160a01b03195f5416175f55836128dc575b5050507ff98c8404c5b1bfef2e6ba9233c6e88845aedfd36eea8b192725d8c199571cf325f80a2565b833b15610225575f91612903604051948593849363f05c04e160e01b85526004850161384b565b038183865af180156104f85761291b575b80806128b3565b806109a45f61292993611b45565b5f612914565b50333014612892565b600181036129465750600190565b600281036129545750600190565b600381036129625750600190565b600481036129705750600190565b61297957600190565b5f90565b906001600160a01b036129a46001600160a01b035f5160206146c55f395f51905f52541690565b1691826129b757611b7c9192505f6138c0565b60405163d68f602560e01b8152905f82806129d7363433600485016120ca565b038183885af19182156104f8575f92612a43575b506129f6905f6138c0565b92803b1561022557604051630b9dfbed60e11b8152915f918391829084908290612a2390600483016120f0565b03925af180156104f857612a35575b50565b806109a45f61028093611b45565b6129f6919250612a5c903d805f833e6109c38183611b45565b91906129eb565b356001600160e01b0319811692919060048210612a7e575050565b6001600160e01b031960049290920360031b82901b16169150565b92909160018403612ab0575050611b7c91506132df565b60028403612ac4575050611b7c915061331f565b60038403612af357611b7c935060048210612aeb57612ae69161240c91611a4c565b613a1d565b50505f613a1d565b5050906004145f14612b1f575f5160206146c55f395f51905f52546001600160a01b0391821691161490565b505f90565b9290803560601c601482013591603481013560e01c91612c41610c386038840193612b67868201998281600460388e968188013560e01c80980103010191611a94565b9a909a99603c605b604051612b7d608082611b45565b8181527f70486173682c6279746573333220696e69744461746148617368290000000000606060208301927f4d6f64756c65456e61626c654d6f64652861646472657373206d6f64756c652c84527f75696e74323536206d6f64756c65547970652c6279746573333220757365724f604082015201522091612c00368b8b611dee565b6020815191012060405194602086019485528960408701528c6060870152608086015260a085015260a08452612c3760c085611b45565b0191519020613a68565b612c4e5761028093612e7b565b6346fdc33360e01b5f5260045ffd5b60015f8190525f5160206146a55f395f51905f526020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7546001600160a01b0316141580612ca95790565b5060015f525f5160206146a55f395f51905f526020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7546001600160a01b0316151590565b7f0000000000000000000000000000000000000000000000000000000000000000467f000000000000000000000000000000000000000000000000000000000000000014307f0000000000000000000000000000000000000000000000000000000000000000141615612d7a575b6719010000000000005f52601a52603a526042601820905f603a52565b50612e0260a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f000000000000000000000000000000000000000000000000000000000000000060408201524660608201523060808201522090565b612d5d565b604051612e15604082611b45565b600581527f4e65787573000000000000000000000000000000000000000000000000000000602082015290604051612e4e604082611b45565b600581527f312e302e30000000000000000000000000000000000000000000000000000000602082015290565b9291906001600160a01b03612ea46001600160a01b035f5160206146c55f395f51905f52541690565b1680612eb4575061028093612f44565b60405163d68f602560e01b815293909290915f8580612ed8363433600485016120ca565b038183885af19485156104f8575f95612f24575b50612ef8939495612f44565b803b1561022557604051630b9dfbed60e11b8152915f918391829084908290612a2390600483016120f0565b612ef8949550612f3d903d805f833e6109c38183611b45565b9493612eec565b939291906001600160a01b03811615612fc75760018503612f6a5761028093945061417f565b60028503612f7d576102809394506140fc565b60038503612f9057610280939450613eab565b60048503612fa357610280939450613d83565b84612fb357610280939450613ca8565b6304c1896960e11b5f52600485905260245ffd5b635316c18d60e01b5f5260045ffd5b916020611b7c938181520191611b7f565b5f5160206146c55f395f51905f5280546001600160a01b03191690556124ad92906124a85a9261249a604051958692638a91b0e360e01b60208501526020602485018181520191611b7f565b90613049906001600160a01b0393810190612001565b92166001600160a01b0382168015801561319e575b61318b576001600160a01b03613092835f5160206146e55f395f51905f52906001600160a01b03165f5260205260405f2090565b54160361316f5791816131136124ad946130f86130d3610b0b61249a975f5160206146e55f395f51905f52906001600160a01b03165f5260205260405f2090565b915f5160206146e55f395f51905f52906001600160a01b03165f5260205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b61314e61313e825f5160206146e55f395f51905f52906001600160a01b03165f5260205260405f2090565b6001600160a01b03198154169055565b6124a85a92604051948591638a91b0e360e01b6020840152602483016120f0565b637c84ecfb60e01b5f526001600160a01b03821660045260245ffd5b50637c84ecfb60e01b5f5260045260245ffd5b506001811461305e565b906131be906001600160a01b0393810190612001565b92166001600160a01b038216801580156132d5575b61318b576001600160a01b03613207835f5160206146a55f395f51905f52906001600160a01b03165f5260205260405f2090565b54160361316f57613265906130f8613240610b0b855f5160206146a55f395f51905f52906001600160a01b03165f5260205260405f2090565b915f5160206146a55f395f51905f52906001600160a01b03165f5260205260405f2090565b61329061313e825f5160206146a55f395f51905f52906001600160a01b03165f5260205260405f2090565b613298612c5d565b156132c6576124ad9161249a916124a85a92604051948591638a91b0e360e01b6020840152602483016120f0565b63330c676160e21b5f5260045ffd5b50600181146131d3565b6001600160a01b0316806001141590816132f7575090565b90505f525f5160206146a55f395f51905f526020526001600160a01b0360405f205416151590565b6001600160a01b031680600114159081613337575090565b90505f525f5160206146e55f395f51905f526020526001600160a01b0360405f205416151590565b6001600160a01b035f54169081613374575050565b813b15610225576001600160a01b0360445f9260405194859384926396fb721760e01b8452166004830152600260248301525afa80156104f8576133b55750565b5f61028091611b45565b6001600160a01b035f541690816133d4575050565b813b15610225576001600160a01b0360445f9260405194859384926396fb721760e01b8452166004830152600460248301525afa80156104f8576133b55750565b6001600160a01b035f5416908161342a575050565b813b15610225576001600160a01b0360445f9260405194859384926396fb721760e01b8452166004830152600360248301525afa80156104f8576133b55750565b6001600160a01b035f54169081613480575050565b813b15610225576001600160a01b0360445f9260405194859384926396fb721760e01b8452166004830152600160248301525afa80156104f8576133b55750565b67ffffffffffffffff8111611b405760051b60200190565b604080519091906134ea8382611b45565b6001815291601f1901825f5b82811061350257505050565b8060606020809385010152016134f6565b9061351d826134c1565b61352a6040519182611b45565b828152809261353b601f19916134c1565b01905f5b82811061354b57505050565b80606060208093850101520161353f565b634e487b7160e01b5f52603260045260245ffd5b80511561357d5760200190565b61355c565b805182101561357d5760209160051b010190565b91611b7c93916135ae91604085526040850191611b7f565b916020818403910152610c8c565b803501803592602090910191506001600160f81b0319811661364557506135e282613513565b915f5b8181106135f25750505090565b806136296136036001938587614300565b803561360e81610264565b6136216020830135926040810190611f1f565b929091614421565b6136338287613582565b5261363e8186613582565b50016135e5565b9291906001600160f81b03198416600160f81b0361366857611b7c929350614322565b6308c3ee0360e11b5f9081526001600160f81b03198516600452602490fd5b90613694919392936143d2565b91909261369f6134d9565b956001600160f81b031981166136ce5750906136bb9391614421565b6136c483613570565b52612a3282613570565b6001600160f81b03198116600160f81b036128425750836136f09284926143fa565b6136f986613570565b5215613703575050565b7fb5282692b8c578af7fb880895d599035496b5e64d1f14bf428a1ed3bc406f662916122ef61270c86613570565b8035016020810192903591506001600160f81b0319811661379857505f5b81811061375b57505050565b8061379261376c6001938587614300565b803561377781610264565b61378a6020830135926040810190611f1f565b92909161444e565b0161374f565b92916001600160f81b03198416600160f81b0361366857612a32929350614322565b906137c4916143d2565b90939092906001600160f81b031916806137e4575090610280939161444e565b600160f81b81036138395750836137fc9284926143fa565b92901561380857505050565b6122ef7fb5282692b8c578af7fb880895d599035496b5e64d1f14bf428a1ed3bc406f6629360405193849384613596565b6308c3ee0360e11b5f5260045260245ffd5b60ff90911681526040602082018190528101839052606001915f5b8181106138735750505090565b9091926020806001926001600160a01b03873561388f81610264565b168152019401929101613866565b156138a55750565b6308c63e2760e01b5f5263ffffffff60e01b1660045260245ffd5b50505f80356001600160e01b031981168083527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f026020526040832060609190549361391f6001600160a01b0386169560581b6001600160f81b03191690565b936001600160a01b038616156139cd575050506001600160f81b03198216607f60f91b1490501561397b57505f809161395661446a565b90602082519201905afa90613969612038565b915b1561397257565b50602081519101fd5b6001600160f81b031981166139b157505f809161399661446a565b906020825192019034905af1906139ab612038565b9161396b565b632e5bf3f960e21b5f526001600160f81b03191660045260245ffd5b9193509194935060e01c63150b7a0263bc197c81821463f23a6e618314179114176139fd575b906102809161389d565b5060408051600481526020810183905260248101909152925060016139f3565b6001600160a01b03613a60819263ffffffff60e01b165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260405f2090565b541691161490565b91613a7f613a79611bf08385611a21565b60601c90565b92613a8c610c38856132df565b613b225792602092613ab3836001600160a01b0394613aad613ad498612cef565b93611a2f565b604051637aa8f17760e11b8152968795869490938593913060048601611b9f565b0392165afa5f9181613b01575b50613aeb57505f90565b6001600160e01b031916630b135d3f60e11b1490565b613b1b91925060203d602011611c7657611c678183611b45565b905f613ae1565b63342cf00f60e11b5f526001600160a01b03841660045260245ffd5b60015f525f5160206146e55f395f51905f526020527fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a13546001600160a01b0316613bb15760015f525f5160206146e55f395f51905f5260205261028060405f2060016001600160a01b0319825416179055565b6329e42f3360e11b5f5260045ffd5b60015f525f5160206146a55f395f51905f526020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7546001600160a01b0316613bb15760015f525f5160206146a55f395f51905f5260205261028060405f2060016001600160a01b0319825416179055565b90613c3d826134c1565b613c4a6040519182611b45565b8281528092613c5b601f19916134c1565b0190602036910137565b5f1981146124ed5760010190565b5f198101919082116124ed57565b919081101561357d5760051b0190565b9082101561357d576102ec9160051b810190611f1f565b9150613cca908035810191602083019235916020810135019060208201913590565b929391808403613d74575f5b818110613ce557505050505050565b80613cf36001928489613c81565b35828103613d175750613d11613d0a828887613c91565b908761417f565b01613cd6565b60028103613d3a5750613d35613d2e828887613c91565b90876140fc565b613d11565b60038103613d585750613d35613d51828887613c91565b9087613eab565b600403613d3557613d35613d6d828887613c91565b9087613d83565b63b4fa3fb360e01b5f5260045ffd5b91613d8d836133bf565b60405163ecd0596160e01b81526004808201526001600160a01b0384169390602081602481885afa9081156104f8575f91613e40575b5015613e2d57613e0390613dfe613dee6001600160a01b035f5160206146c55f395f51905f52541690565b6001600160a01b03811615613e87565b614202565b823b1561022557612a23925f92836040518096819582946306d61fe760e41b845260048401612fd6565b6369c9a24560e11b5f526004805260245ffd5b613e62915060203d602011613e68575b613e5a8183611b45565b810190613e6f565b5f613dc3565b503d613e50565b90816020910312610225575180151581036102255790565b15613e8f5750565b6001600160a01b039063741cbe0360e01b5f521660045260245ffd5b9091613eb682613415565b60405163ecd0596160e01b8152600360048201526001600160a01b0383169290602081602481875afa9081156104f8575f9161407f575b501561406b57612412846106c6613f5f61043f8680613f3d613f30613f2283613f1c61240c61400e9e8c611a4c565b9961409e565b356001600160f81b03191690565b6001600160f81b03191690565b9a6001600160f81b03198c16158015614054575b613f5a906140ad565b611a77565b96613f8e6001600160e01b031984166306d61fe760e41b8114908115614043575b811561403a575b50156140c3565b613fe383613fde610c38826001600160e01b0319165f9081527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260409020546001600160a01b0316151590565b6140d9565b613ffd613fee611dc3565b6001600160a01b039096168652565b6001600160f81b0319166020850152565b803b15610225576040516306d61fe760e41b8152915f918391829084908290612a2390600483016120f0565b9050155f613f87565b638a91b0e360e01b81149150613f80565b50607f60f91b6001600160f81b03198d1614613f51565b6369c9a24560e11b5f52600360045260245ffd5b614098915060203d602011613e6857613e5a8183611b45565b5f613eed565b906004101561357d5760040190565b156140b457565b63867a1dcf60e01b5f5260045ffd5b156140ca57565b63c001660b60e01b5f5260045ffd5b156140e15750565b63a56a04dd60e01b5f5263ffffffff60e01b1660045260245ffd5b916141068361335f565b60405163ecd0596160e01b8152600260048201526001600160a01b0384169390602081602481885afa9081156104f8575f91614160575b501561414c57613e0390614497565b6369c9a24560e11b5f52600260045260245ffd5b614179915060203d602011613e6857613e5a8183611b45565b5f61413d565b916141898361346b565b60405163ecd0596160e01b8152600160048201526001600160a01b0384169390602081602481885afa9081156104f8575f916141e3575b50156141cf57613e03906145b4565b6369c9a24560e11b5f52600160045260245ffd5b6141fc915060203d602011613e6857613e5a8183611b45565b5f6141c0565b6001600160a01b0361028091166001600160a01b03166001600160a01b03195f5160206146c55f395f51905f525416175f5160206146c55f395f51905f5255565b604051939260209291906142578487611b45565b5f86525f928380936020890196601f190136883760208451940192f1903d9081614286575b5f908286523e9190565b5f915061427c565b918160141161022557823560601c92601401916013190190565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b5f919392806040519586378438925af4156142f7573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b919081101561357d5760051b81013590605e1981360301821215610225570190565b91909161432e83613513565b925f5b81811061433d57505050565b8061434b6001928486614300565b80359061435782610264565b6143766020820135604083019361436e8585611f1f565b9290916143fa565b614380858b613582565b521561438f575b505001614331565b7fb5282692b8c578af7fb880895d599035496b5e64d1f14bf428a1ed3bc406f662916143ba91611f1f565b906143c861270c858b613582565b0390a15f80614387565b908060141161022557813560601c926034821061022557601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af1156142f7573d82523d5f602084013e60203d830101604052565b8380935f93604051958692833738935af11561088e5701604052565b60405190602036830101604052816014360181525f602036920137604051601481016040523360601b9052565b6001600160a01b038116801580156145aa575b614598575f9081525f5160206146e55f395f51905f5260205260409020546001600160a01b031661457d5760015f525f5160206146e55f395f51905f526020526102809061454261451a7fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a13610b0b565b6130f8835f5160206146e55f395f51905f52906001600160a01b03165f5260205260405f2090565b60015f525f5160206146e55f395f51905f526020527fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a136130f8565b631034f46960e21b5f526001600160a01b031660045260245ffd5b637c84ecfb60e01b5f5260045260245ffd5b50600181146144aa565b6001600160a01b0381168015801561469a575b614598575f9081525f5160206146a55f395f51905f5260205260409020546001600160a01b031661457d5760015f525f5160206146a55f395f51905f526020526102809061465f6146377ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7610b0b565b6130f8835f5160206146a55f395f51905f52906001600160a01b03165f5260205260405f2090565b60015f525f5160206146a55f395f51905f526020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c76130f8565b50600181146145c756fe0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f000bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f030bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f01a2646970667358221220744101ecf4df256f2cb78d481ad3a96d8a27f96e71bb7375a3d81264864ef9f764736f6c634300081b00330bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f00fe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7bdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a130000000000000000000000000000000071727de22e5e9d8baf0edac6f37da03200000000000000000000000000" + +export const NEXUS_ACCOUNT_BOOTSTRAPPER_CREATECALL = + "0xcdcb760a544b6a29a3929e1096d18b9fc40456215928918e31413eb96e068a222108fa4e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000022046101206040523461011357306080524660a052604080519081016001600160401b038111828210176100ff576040908152600e82526d04e65787573426f6f7473747261760941b60208301908152815191820192906001600160401b038411838510176100ff5760a093604052600583526020830191640312e302e360dc1b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220610100526040516120ec9081610118823960805181505060a05181505060c05181505060e05181505061010051815050f35b634e487b7160e01b5f52604160045260245ffd5b5f80fdfe60806040526004361015610027575b36156100255761001d366111de565b602081519101f35b005b5f3560e01c806301fe9ff2146100e65780630a664dba146100e1578063481ddd23146100dc57806355470cf1146100d75780635faac46b146100d25780637b103999146100cd578063837b892e146100c857806384b0196e146100c357806385a924cc146100be5780639e2533ed146100b9578063d6fe71f1146100b45763ea5f61d00361000e57610d59565b610c1b565b610b27565b6109ee565b6108ee565b6107d4565b610777565b6105b9565b6103c1565b61026d565b61021f565b610179565b6001600160a01b038116036100fc57565b5f80fd5b6044359061010d826100eb565b565b359061010d826100eb565b9181601f840112156100fc5782359167ffffffffffffffff83116100fc576020808501948460051b0101116100fc57565b6084359060ff821682036100fc57565b6064359060ff821682036100fc57565b359060ff821682036100fc57565b346100fc5760a03660031901126100fc57600435610196816100eb565b60243567ffffffffffffffff81116100fc57366023820112156100fc57806004013567ffffffffffffffff81116100fc5736602482840101116100fc576101db610100565b926064359367ffffffffffffffff85116100fc5761020061002595369060040161011a565b939092602461020d61014b565b960190610e69565b5f9103126100fc57565b346100fc575f3660031901126100fc5760206001600160a01b037f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0354166001600160a01b0360405191168152f35b346100fc5760203660031901126100fc576004356001600160e01b0319811681036100fc576001600160e01b0319165f9081527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f026020526040902060405190604082019082821067ffffffffffffffff831117610321576040918252546001600160a01b03811680845260589190911b6001600160f81b0319166020938401819052825190815292830152819081015b0390f35b610f2d565b908160409103126100fc5790565b60a06003198201126100fc5760043567ffffffffffffffff81116100fc578161035f9160040161011a565b9290929160243567ffffffffffffffff81116100fc578161038291600401610326565b9160443561038f816100eb565b916064359067ffffffffffffffff82116100fc576103af9160040161011a565b909160843560ff811681036100fc5790565b346100fc576103de6103d236610334565b929693969190916112bf565b5f5b81811061042157836001600160a01b036103f982610fad565b1661040057005b8061041b61041061002593610fad565b916020810190610fb7565b9161141a565b61042c818385610f86565b3590610437826100eb565b61044f610445828587610f86565b6020810190610fb7565b61045884611b21565b60405163ecd0596160e01b8152600160048201526001600160a01b0385169490602081602481895afa9081156104fc575f91610515575b50156105015761049e90611c83565b833b156100fc576104c8935f92836040518097819582946306d61fe760e41b845260048401611409565b03925af19182156104fc576001926104e2575b50016103e0565b806104f05f6104f693610f41565b80610215565b5f6104db565b6111d3565b6369c9a24560e11b5f52600160045260245ffd5b610536915060203d811161053c575b61052e8183610f41565b8101906113f1565b5f61048f565b503d610524565b60409060031901126100fc5760043561055b816100eb565b9060243590565b90929192604082016040835281518091526020606084019201905f5b81811061059a575050506001600160a01b036020919416910152565b82516001600160a01b031684526020938401939092019160010161057e565b346100fc576105c736610543565b9060016001600160a01b038216141580610761575b61074657811561073757906105f081611f68565b61063b61062e5f946001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0060205260405f2090565b546001600160a01b031690565b6001600160a01b038116801515908161072b575b5080610722575b156106c3576106b761062e826106816106bd946106738988611f9a565b906001600160a01b03169052565b6001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0060205260405f2090565b93611fc2565b9261063b565b908360016001600160a01b038416141580610719575b6106ef575b815261031d60405192839283610562565b915061071361070661070084611fd5565b83611f9a565b516001600160a01b031690565b916106de565b508015156106d9565b50828410610656565b6001915014155f61064f565b63f725081760e01b5f5260045ffd5b637c84ecfb60e01b5f526001600160a01b031660045260245ffd5b5061077261076e82612010565b1590565b6105dc565b346100fc575f3660031901126100fc5760206001600160a01b035f5416604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206107d192818152019061079c565b90565b346100fc5760803660031901126100fc5760043567ffffffffffffffff81116100fc57610805903690600401610326565b60243590610812826100eb565b6044359067ffffffffffffffff82116100fc576001600160a01b036108c46108e29261031d9560ff6108af61084e6108d498369060040161011a565b61085994919461015b565b948861089761086d8935996104458b6100eb565b6040519c8d9b8c602062ff4ff960e11b9101521660248c015260a060448c015260c48b0191610fea565b9316606488015286830360231901608488015261100a565b911660a483015203601f198101835282610f41565b604051928391306020840161104d565b03601f198101835282610f41565b604051918291826107c0565b346100fc575f3660031901126100fc57610990604061099d8151916109138184610f41565b600e83527f4e65787573426f6f747374726170000000000000000000000000000000000000602084015280516109498282610f41565b600581527f312e302e3000000000000000000000000000000000000000000000000000000060208201528151948594600f60f81b865260e0602087015260e086019061079c565b918483039085015261079c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b8181106109d5575050500390f35b82518452859450602093840193909201916001016109c7565b346100fc5761031d6108d46108e260a06108c460246001600160a01b0360ff6108af610897610a4a610a1f36610334565b9a946040989493989792969197519e8f9d8e6355470cf160e01b6020820152015260c48d01916110c9565b8a81036023190160448c01529061106d565b60e06003198201126100fc5760043567ffffffffffffffff81116100fc5781610a879160040161011a565b9290929160243567ffffffffffffffff81116100fc5781610aaa9160040161011a565b9290929160443567ffffffffffffffff81116100fc5781610acd91600401610326565b9160643567ffffffffffffffff81116100fc5782610aed9160040161011a565b92909291610afb608461010f565b9160a4359067ffffffffffffffff82116100fc57610b1b9160040161011a565b90916107d160c461016b565b346100fc57610b3536610a5c565b97909493929591966040519a8b9a63d6fe71f160e01b60208d015260248c0160e090526101048c0190610b67926110c9565b906023198b83030160448c0152610b7d926110c9565b8881036023190160648a0152610b929161106d565b90602319888303016084890152610ba8926110c9565b916001600160a01b031660a48601526023198583030160c4860152610bcc9261100a565b9060ff1660e483015203601f1981018252610be79082610f41565b604051908190610bfb90306020840161104d565b03601f1981018252610c0d9082610f41565b60405161031d8192826107c0565b346100fc57610c3d610c2c36610a5c565b929a9399949a9895989190916112bf565b5f5b828110610d2b575050505f5b818110610ce257505050610c6d610c6182610fad565b6001600160a01b031690565b610ccc575b505f5b818110610c7e57005b80610c97610c61610c926001948688610f86565b610fad565b15610cc757610cc1610cad610c92838688610f86565b610cbb610445848789610f86565b916115e8565b01610c75565b610cc1565b8061041b610410610cdc93610fad565b5f610c72565b80610cf6610c61610c926001948688610f86565b15610d2657610d20610d0c610c92838688610f86565b610d1a610445848789610f86565b91611565565b01610c4b565b610d20565b80610d53610d3f610c926001948787610f86565b610d4d610445848888610f86565b91611382565b01610c3f565b346100fc57610d6736610543565b9060016001600160a01b038216141580610e57575b6107465781156107375790610d9081611f68565b610dce61062e5f946001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0160205260405f2090565b6001600160a01b0381168015159081610e4b575b5080610e42575b156106c3576106b761062e82610e06610e3c946106738988611f9a565b6001600160a01b03165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0160205260405f2090565b92610dce565b50828410610de9565b6001915014155f610de2565b50610e6461076e82612063565b610d7c565b92946001600160a01b0394610e80939792966112bf565b1691610e8b83611b21565b60405163ecd0596160e01b815260016004820152602081602481875afa9081156104fc575f91610f0e575b501561050157610ec583611c83565b823b156100fc57610eef925f92836040518096819582946306d61fe760e41b845260048401611409565b03925af180156104fc57610f005750565b806104f05f61010d93610f41565b610f27915060203d60201161053c5761052e8183610f41565b5f610eb6565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761032157604052565b6040519061010d604083610f41565b634e487b7160e01b5f52603260045260245ffd5b9190811015610fa85760051b81013590603e19813603018212156100fc570190565b610f72565b356107d1816100eb565b903590601e19813603018212156100fc570180359067ffffffffffffffff82116100fc576020019181360383136100fc57565b908060209392818452848401375f828201840152601f01601f1916010190565b916020908281520191905f5b8181106110235750505090565b9091926020806001926001600160a01b03873561103f816100eb565b168152019401929101611016565b6040906001600160a01b036107d19493168152816020820152019061079c565b6001600160a01b038135611080816100eb565b1682526020810135601e19823603018112156100fc57016020813591019067ffffffffffffffff81116100fc5780360382136100fc576040838160206107d19601520191610fea565b90602083828152019060208160051b85010193835f915b8383106110f05750505050505090565b909192939495601f198282030186528635603e19843603018112156100fc5760206111206001938683940161106d565b9801960194930191906110e0565b67ffffffffffffffff811161032157601f01601f191660200190565b6020818303126100fc5780519067ffffffffffffffff82116100fc570181601f820112156100fc5780519061117e8261112e565b9261118c6040519485610f41565b828452602083830101116100fc57815f9260208093018386015e8301015290565b6107d193926001600160a01b03606093168252602082015281604082015201905f610fea565b6040513d5f823e3d90fd5b906001600160a01b036112186001600160a01b037f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f03541690565b16918261122b576107d19192505f6119c4565b60405163d68f602560e01b8152905f828061124b363433600485016111ad565b038183885af19182156104fc575f92611297575b5061126a905f6119c4565b92803b156100fc57604051630b9dfbed60e11b8152915f918391829084908290610eef90600483016107c0565b61126a9192506112b8903d805f833e6112b08183610f41565b81019061114a565b919061125f565b6001600160a01b039093919316928373ffffffffffffffffffffffffffffffffffffffff195f5416175f5583611319575b5050507ff98c8404c5b1bfef2e6ba9233c6e88845aedfd36eea8b192725d8c199571cf325f80a2565b833b156100fc575f9161135160ff92604051958694859463f05c04e160e01b865216600485015260406024850152604484019161100a565b038183865af180156104fc57611369575b80806112f0565b806113755f8093610f41565b8003126100fc575f611362565b9161138c83611b21565b60405163ecd0596160e01b8152600160048201526001600160a01b0384169390602081602481885afa9081156104fc575f916113d2575b501561050157610ec590611c83565b6113eb915060203d60201161053c5761052e8183610f41565b5f6113c3565b908160209103126100fc575180151581036100fc5790565b9160206107d1938181520191610fea565b9161142483611b81565b60405163ecd0596160e01b81526004808201526001600160a01b0384169390602081602481885afa9081156104fc575f91611522575b501561150f57610ec5906114a86114986001600160a01b037f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f03541690565b6001600160a01b03811615611541565b6001600160a01b031673ffffffffffffffffffffffffffffffffffffffff197f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f035416177f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0355565b6369c9a24560e11b5f526004805260245ffd5b61153b915060203d60201161053c5761052e8183610f41565b5f61145a565b156115495750565b6001600160a01b039063741cbe0360e01b5f521660045260245ffd5b9161156f83611bd7565b60405163ecd0596160e01b8152600260048201526001600160a01b0384169390602081602481885afa9081156104fc575f916115c9575b50156115b557610ec590611e14565b6369c9a24560e11b5f52600260045260245ffd5b6115e2915060203d60201161053c5761052e8183610f41565b5f6115a6565b90916115f382611c2d565b60405163ecd0596160e01b8152600360048201526001600160a01b0383169290602081602481875afa9081156104fc575f9161185e575b501561184a5761178e846117586116a96116a286806116806116736116658361165f6116596117ed9e8c61187d565b906118a8565b996118de565b356001600160f81b03191690565b6001600160f81b03191690565b9a6001600160f81b03198c16158015611833575b61169d906118ed565b61188b565b3691611903565b966116d86001600160e01b031984166306d61fe760e41b8114908115611822575b8115611819575b5015611939565b61172d8361172861076e826001600160e01b0319165f9081527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260409020546001600160a01b0316151590565b61194f565b611747611738610f63565b6001600160a01b039096168652565b6001600160f81b0319166020850152565b63ffffffff60e01b165f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260405f2090565b8151815460209093015174ff000000000000000000000000000000000000000060589190911c167fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0390911617919091179055565b803b156100fc576040516306d61fe760e41b8152915f918391829084908290610eef90600483016107c0565b9050155f6116d1565b638a91b0e360e01b811491506116ca565b50607f60f91b6001600160f81b03198d1614611694565b6369c9a24560e11b5f52600360045260245ffd5b611877915060203d60201161053c5761052e8183610f41565b5f61162a565b906004116100fc5790600490565b90929192836005116100fc5783116100fc57600501916004190190565b356001600160e01b03198116929190600482106118c3575050565b6001600160e01b031960049290920360031b82901b16169150565b9060041015610fa85760040190565b156118f457565b63867a1dcf60e01b5f5260045ffd5b92919261190f8261112e565b9161191d6040519384610f41565b8294818452818301116100fc578281602093845f960137010152565b1561194057565b63c001660b60e01b5f5260045ffd5b156119575750565b63a56a04dd60e01b5f5263ffffffff60e01b1660045260245ffd5b1561197a5750565b6308c63e2760e01b5f5263ffffffff60e01b1660045260245ffd5b3d156119bf573d906119a68261112e565b916119b46040519384610f41565b82523d5f602084013e565b606090565b50505f80356001600160e01b031981168083527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0260205260408320606091905493611a236001600160a01b0386169560581b6001600160f81b03191690565b936001600160a01b03861615611ad1575050506001600160f81b03198216607f60f91b14905015611a7f57505f8091611a5a611fe3565b90602082519201905afa90611a6d611995565b915b15611a7657565b50602081519101fd5b6001600160f81b03198116611ab557505f8091611a9a611fe3565b906020825192019034905af190611aaf611995565b91611a6f565b632e5bf3f960e21b5f526001600160f81b03191660045260245ffd5b9193509194935060e01c63150b7a0263bc197c81821463f23a6e61831417911417611b01575b9061010d91611972565b506040805160048152602081018390526024810190915292506001611af7565b6001600160a01b035f54169081611b36575050565b813b156100fc576001600160a01b0360445f9260405194859384926396fb721760e01b8452166004830152600160248301525afa80156104fc57611b775750565b5f61010d91610f41565b6001600160a01b035f54169081611b96575050565b813b156100fc576001600160a01b0360445f9260405194859384926396fb721760e01b8452166004830152600460248301525afa80156104fc57611b775750565b6001600160a01b035f54169081611bec575050565b813b156100fc576001600160a01b0360445f9260405194859384926396fb721760e01b8452166004830152600260248301525afa80156104fc57611b775750565b6001600160a01b035f54169081611c42575050565b813b156100fc576001600160a01b0360445f9260405194859384926396fb721760e01b8452166004830152600360248301525afa80156104fc57611b775750565b6001600160a01b03811680158015611e0a575b611df8575f9081527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0060205260409020546001600160a01b0316611ddd5760015f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0060205261010d90611d8f611d2c7ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c761062e565b611d67837f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f00906001600160a01b03165f5260205260405f2090565b906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b60015f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f006020527ffe44ceacbf4f03c6ac19f86826dd265fa9ec25125e8b1766c207f24cd3bc73c7611d67565b631034f46960e21b5f526001600160a01b031660045260245ffd5b637c84ecfb60e01b5f5260045260245ffd5b5060018114611c96565b6001600160a01b03811680158015611f46575b611df8575f9081527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0160205260409020546001600160a01b0316611ddd5760015f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f0160205261010d90611ef8611ebd7fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a1361062e565b611d67837f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f01906001600160a01b03165f5260205260405f2090565b60015f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f016020527fbdfeb076d903611fa58576955630d640569633049bcf40ad9c22db9251b54a13611d67565b5060018114611e27565b67ffffffffffffffff81116103215760051b60200190565b90611f7282611f50565b611f7f6040519182610f41565b8281528092611f90601f1991611f50565b0190602036910137565b8051821015610fa85760209160051b010190565b634e487b7160e01b5f52601160045260245ffd5b5f198114611fd05760010190565b611fae565b5f19810191908211611fd057565b60405190602036830101604052816014360181525f602036920137604051601481016040523360601b9052565b6001600160a01b031680600114159081612028575090565b90505f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f006020526001600160a01b0360405f205416151590565b6001600160a01b03168060011415908161207b575090565b90505f527f0bb70095b32b9671358306b0339b4c06e7cbd8cb82505941fba30d1eb5b82f016020526001600160a01b0360405f20541615159056fea2646970667358221220ef7f5ad009e1021190a16a899c7aa9da23ee9bf36cb253e3cd5f51d9f8215f2164736f6c634300081b003300000000000000000000000000000000000000000000000000000000" + +export const NEXUS_BOOTSTRAP_LIB_CREATECALL = + "0x00000000000000000000000000000000000000000000000000000000000000006080806040523460195761051d908161001e823930815050f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80631d184bb31461010957806375dc30101461007757638491599f1461003a575f80fd5b6100736100463661046f565b6001600160a01b03610056610321565b9216825260208201526040519182916020835260208301906103d1565b0390f35b6100803661046f565b60409061008c82610341565b6001815291601f1901925f5b8481106100d5575061007393506001600160a01b036100b6846104b2565b519116905260206100c6836104b2565b51015260405191829182610410565b6020906100e0610321565b5f815260608382015282828701015201610098565b634e487b7160e01b5f52604160045260245ffd5b60403660031901126102fd5760043567ffffffffffffffff81116102fd57366023820112156102fd57806004013561014861014382610367565b610341565b916024602084848152019260051b820101903682116102fd57602401915b818310610301576024358467ffffffffffffffff82116102fd57366023830112156102fd57816004013561019c61014382610367565b926024602085848152019260051b820101903682116102fd5760248101925b8284106102cd5785858051825103610288578051916101dc61014384610367565b928084526101ec601f1991610367565b015f5b8181106102685750505f5b825181101561025a57806001600160a01b03610218600193866104d3565b511661022482856104d3565b516001600160a01b03610235610321565b92168252602082015261024882876104d3565b5261025381866104d3565b50016101fa565b604051806100738682610410565b602090610273610321565b5f8152606083820152828288010152016101ef565b60405162461bcd60e51b815260206004820152601d60248201527f426f6f7473747261704c69623a206c656e677468206d69736d617463680000006044820152606490fd5b833567ffffffffffffffff81116102fd576020916102f283926024369187010161037f565b8152019301926101bb565b5f80fd5b82356001600160a01b03811681036102fd57815260209283019201610166565b604051906040820182811067ffffffffffffffff8211176100f557604052565b6040519190601f01601f1916820167ffffffffffffffff8111838210176100f557604052565b67ffffffffffffffff81116100f55760051b60200190565b81601f820112156102fd5780359067ffffffffffffffff82116100f5576103af601f8301601f1916602001610341565b92828452602083830101116102fd57815f926020809301838601378301015290565b906020806060936001600160a01b03815116845201516040828401528051918291826040860152018484015e5f828201840152601f01601f1916010190565b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061044257505050505090565b9091929394602080610460600193603f1986820301875289516103d1565b97019301930191939290610433565b9060406003198301126102fd576004356001600160a01b03811681036102fd57916024359067ffffffffffffffff82116102fd576104af9160040161037f565b90565b8051156104bf5760200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156104bf5760209160051b01019056fea26469706673582212208e309560a07503d983ee14c7a7889da3ca879c1b06028cc27d19090f05408ebc64736f6c634300081b0033" diff --git a/packages/permissionless-test/mock-aa-infra/alto/index.ts b/packages/permissionless-test/mock-aa-infra/alto/index.ts index 50116b17..d313aea5 100644 --- a/packages/permissionless-test/mock-aa-infra/alto/index.ts +++ b/packages/permissionless-test/mock-aa-infra/alto/index.ts @@ -32,8 +32,11 @@ import { KERNEL_V07_V3_1_FACTORY_CREATECALL, LIGHT_ACCOUNT_FACTORY_V110_CREATECALL, LIGHT_ACCOUNT_FACTORY_V200_CREATECALL, - NEXUS_K1_VALIDATOR_ADDRESS, - NEXUS_K1_VALIDATOR_FACTORY_ADDRESS, + NEXUS_ACCOUNT_BOOTSTRAPPER_CREATECALL, + NEXUS_ACCOUNT_IMPLEMENTATION_CREATECALL, + NEXUS_BOOTSTRAP_LIB_CREATECALL, + NEXUS_K1_VALIDATOR_CREATECALL, + NEXUS_K1_VALIDATOR_FACTORY_CREATECALL, SAFE_7579_LAUNCHPAD_CREATECALL, SAFE_7579_MODULE_CREATECALL, SAFE_7579_REGISTRY_CREATECALL, @@ -304,6 +307,12 @@ export const setupContracts = async (rpc: string) => { data: THIRDWEB_FACTORY_V07_CREATECALL, gas: 15_000_000n, nonce: nonce++ + }), + walletClient.sendTransaction({ + to: DETERMINISTIC_DEPLOYER, + data: NEXUS_BOOTSTRAP_LIB_CREATECALL, + gas: 15_000_000n, + nonce: nonce++ }) ]) @@ -373,13 +382,25 @@ export const setupContracts = async (rpc: string) => { }), walletClient.sendTransaction({ to: BICONOMY_SINGLETON_FACTORY, - data: NEXUS_K1_VALIDATOR_ADDRESS, + data: NEXUS_K1_VALIDATOR_CREATECALL, + gas: 15_000_000n, + nonce: nonce++ + }), + walletClient.sendTransaction({ + to: BICONOMY_SINGLETON_FACTORY, + data: NEXUS_K1_VALIDATOR_FACTORY_CREATECALL, + gas: 15_000_000n, + nonce: nonce++ + }), + walletClient.sendTransaction({ + to: BICONOMY_SINGLETON_FACTORY, + data: NEXUS_ACCOUNT_IMPLEMENTATION_CREATECALL, gas: 15_000_000n, nonce: nonce++ }), walletClient.sendTransaction({ to: BICONOMY_SINGLETON_FACTORY, - data: NEXUS_K1_VALIDATOR_FACTORY_ADDRESS, + data: NEXUS_ACCOUNT_BOOTSTRAPPER_CREATECALL, gas: 15_000_000n, nonce: nonce++ }) @@ -498,6 +519,9 @@ export const setupContracts = async (rpc: string) => { "0x85e23b94e7F5E9cC1fF78BCe78cfb15B81f0DF00", // Thirdweb factory 0.6 "0x4be0ddfebca9a5a4a617dee4dece99e7c862dceb", // Thirdweb factory 0.7 "0x00000bb19a3579F4D779215dEf97AFbd0e30DB55", // Nexus K1 Validator Factory - "0x00000004171351c442B202678c48D8AB5B321E8f" // Nexus K1 Validator + "0x00000004171351c442B202678c48D8AB5B321E8f", // Nexus K1 Validator + "0x000000039dfcAd030719B07296710F045F0558f7", // Nexus Account Implementation + "0x00000008c901d8871b6F6942De0B5D9cCf3873d3", // Nexus Account Bootstrapper + "0x6c77ddf87a1717465d29f8f16f44711eb0c839c0" // Nexus BootstrapLib ]) } diff --git a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts index 2bb0aade..a1f421b9 100644 --- a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts +++ b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts @@ -26,8 +26,8 @@ import { getUserOperationHash, toSmartAccount } from "viem/account-abstraction" +import { readContract } from "viem/actions" import { getAccountNonce } from "../../actions/public/getAccountNonce" -import { getSenderAddress } from "../../actions/public/getSenderAddress" import { encode7579Calls } from "../../utils" import { toOwner } from "../../utils/toOwner" @@ -131,12 +131,24 @@ export async function toNexusSmartAccount( async getAddress() { if (accountAddress) return accountAddress - const { factory, factoryData } = await getFactoryArgs() - - accountAddress = await getSenderAddress(client, { - factory, - factoryData, - entryPointAddress: entryPoint.address + accountAddress = await readContract(client, { + address: factoryAddress, + abi: [ + { + name: "computeAccountAddress", + type: "function", + stateMutability: "view", + inputs: [ + { type: "address", name: "eoaOwner" }, + { type: "uint256", name: "index" }, + { type: "address[]", name: "attesters" }, + { type: "uint8", name: "threshold" } + ], + outputs: [{ type: "address" }] + } + ], + functionName: "computeAccountAddress", + args: [localOwner.address, index, attesters, threshold] }) return accountAddress From 02cd25dc278686c5b5703cfb8608d780296741b5 Mon Sep 17 00:00:00 2001 From: Garvit Khatri Date: Sun, 3 Nov 2024 01:43:58 +0000 Subject: [PATCH 3/5] fix signMessage --- packages/permissionless-test/src/utils.ts | 9 +-- .../accounts/nexus/toNexusSmartAccount.ts | 65 ++++++++++++++++++- 2 files changed, 67 insertions(+), 7 deletions(-) diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index e04faa1f..3defe061 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -191,9 +191,9 @@ export const getPimlicoClient = ({ export const getPublicClient = (anvilRpc: string) => { const transport = http(anvilRpc, { - //onFetchRequest: async (req) => { - // console.log(await req.json(), "request") - //}, + // onFetchRequest: async (req) => { + // console.log(await req.json(), "request") + // } //onFetchResponse: async (response) => { // console.log(await response.clone().json(), "response") //} @@ -294,7 +294,8 @@ export const getNexusClient = async ({ }: AAParamType) => { return toNexusSmartAccount({ client: getPublicClient(anvilRpc), - owners: [privateKeyToAccount(privateKey ?? generatePrivateKey())] + owners: [privateKeyToAccount(privateKey ?? generatePrivateKey())], + nexusVersion: "1.0.0" }) } diff --git a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts index a1f421b9..6df87cf8 100644 --- a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts +++ b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts @@ -14,8 +14,14 @@ import { type Hex, type LocalAccount, concat, + concatHex, + domainSeparator, + encodeAbiParameters, encodeFunctionData, encodePacked, + hashMessage, + keccak256, + stringToHex, toHex } from "viem" import { @@ -26,11 +32,44 @@ import { getUserOperationHash, toSmartAccount } from "viem/account-abstraction" -import { readContract } from "viem/actions" +import { getChainId, readContract } from "viem/actions" +import { getAction } from "viem/utils" import { getAccountNonce } from "../../actions/public/getAccountNonce" import { encode7579Calls } from "../../utils" import { toOwner } from "../../utils/toOwner" +const wrapMessageHash = ( + messageHash: Hex, + { + accountAddress, + nexusVersion, + chainId + }: { + accountAddress: Address + nexusVersion: "1.0.0" + chainId: number + } +) => { + const _domainSeparator = domainSeparator({ + domain: { + name: "Nexus", + version: nexusVersion, + chainId, + verifyingContract: accountAddress + } + }) + const parentStructHash = keccak256( + encodeAbiParameters( + [{ type: "bytes32" }, { type: "bytes32" }], + [ + keccak256(stringToHex("PersonalSign(bytes prefixed)")), + messageHash + ] + ) + ) + return keccak256(concatHex(["0x1901", _domainSeparator, parentStructHash])) +} + /** * The account creation ABI for Biconomy Smart Account (from the biconomy SmartAccountFactory) */ @@ -55,6 +94,7 @@ export type ToNexusSmartAccountParameters = Prettify<{ | LocalAccount > ] + nexusVersion: "1.0.0" address?: Address | undefined entryPoint?: { address: Address @@ -84,6 +124,7 @@ export async function toNexusSmartAccount( client, index = 0n, address, + nexusVersion, factoryAddress = BICONOMY_ADDRESSES.K1_VALIDATOR_FACTORY_ADDRESS, validatorAddress = BICONOMY_ADDRESSES.K1_VALIDATOR_ADDRESS, attesters = [], @@ -124,6 +165,15 @@ export async function toNexusSmartAccount( } } + let chainId: number + const getMemoizedChainId = async () => { + if (chainId) return chainId + chainId = client.chain + ? client.chain.id + : await getAction(client, getChainId, "getChainId")({}) + return chainId + } + return toSmartAccount({ client, entryPoint, @@ -190,8 +240,16 @@ export async function toNexusSmartAccount( return this.signMessage({ message: hash }) }, async signMessage({ message }) { + const wrappedMessageHash = wrapMessageHash(hashMessage(message), { + nexusVersion, + accountAddress: await this.getAddress(), + chainId: await getMemoizedChainId() + }) + const signature = await localOwner.signMessage({ - message + message: { + raw: wrappedMessageHash + } }) return encodePacked( @@ -204,7 +262,8 @@ export async function toNexusSmartAccount( return "0x" }, async signUserOperation(parameters) { - const { chainId = client.chain?.id, ...userOperation } = parameters + const { chainId = await getMemoizedChainId(), ...userOperation } = + parameters if (!chainId) throw new Error("Chain id not found") From 9d6be721e8c778519cbd4fb16f39295a85dded16 Mon Sep 17 00:00:00 2001 From: Garvit Khatri Date: Sun, 3 Nov 2024 01:48:41 +0000 Subject: [PATCH 4/5] Fix signTypedData --- .../accounts/nexus/toNexusSmartAccount.ts | 54 +++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts index 6df87cf8..2222e056 100644 --- a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts +++ b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts @@ -6,6 +6,7 @@ import type { OneOf, Prettify, Transport, + TypedDataDefinition, WalletClient } from "viem" import { @@ -19,10 +20,13 @@ import { encodeAbiParameters, encodeFunctionData, encodePacked, + getTypesForEIP712Domain, hashMessage, + hashTypedData, keccak256, stringToHex, - toHex + toHex, + validateTypedData } from "viem" import { type SmartAccount, @@ -257,9 +261,51 @@ export async function toNexusSmartAccount( [validatorAddress, signature] ) }, - // TODO: Implement this - async signTypedData(_typedData) { - return "0x" + async signTypedData(typedData) { + const { + message, + primaryType, + types: _types, + domain + } = typedData as TypedDataDefinition + + const types = { + EIP712Domain: getTypesForEIP712Domain({ + domain: domain + }), + ..._types + } + + validateTypedData({ + domain, + message, + primaryType, + types + }) + + const typedHash = hashTypedData({ + message, + primaryType, + types, + domain + }) + + const wrappedMessageHash = wrapMessageHash(typedHash, { + nexusVersion, + accountAddress: await this.getAddress(), + chainId: await getMemoizedChainId() + }) + + const signature = await localOwner.signMessage({ + message: { + raw: wrappedMessageHash + } + }) + + return encodePacked( + ["address", "bytes"], + [validatorAddress, signature] + ) }, async signUserOperation(parameters) { const { chainId = await getMemoizedChainId(), ...userOperation } = From 9496bd54f6d23d3799caafd87a3550ebb6327f67 Mon Sep 17 00:00:00 2001 From: Garvit Khatri Date: Sun, 3 Nov 2024 10:51:05 +0000 Subject: [PATCH 5/5] change nexus version to version --- .../permissionless/accounts/nexus/toNexusSmartAccount.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts index 2222e056..6a8e0c71 100644 --- a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts +++ b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts @@ -98,7 +98,7 @@ export type ToNexusSmartAccountParameters = Prettify<{ | LocalAccount > ] - nexusVersion: "1.0.0" + version: "1.0.0" address?: Address | undefined entryPoint?: { address: Address @@ -128,7 +128,7 @@ export async function toNexusSmartAccount( client, index = 0n, address, - nexusVersion, + version: nexusVersion, factoryAddress = BICONOMY_ADDRESSES.K1_VALIDATOR_FACTORY_ADDRESS, validatorAddress = BICONOMY_ADDRESSES.K1_VALIDATOR_ADDRESS, attesters = [], @@ -208,8 +208,7 @@ export async function toNexusSmartAccount( return accountAddress }, async getNonce(args) { - const TIMESTAMP_ADJUSTMENT = 16777215n - const defaultedKey = (args?.key ?? 0n) % TIMESTAMP_ADJUSTMENT + const defaultedKey = (args?.key ?? 0n) % 16777215n // max value for size 3 const defaultedValidationMode = "0x00" const key = concat([ toHex(defaultedKey, { size: 3 }),